UNPKG

798 kBSource Map (JSON)View Raw
1{"version":3,"sources":["webpack:///js/bundle.js","webpack:///./client/js/socket.js","webpack:///./client/views/user_name.tpl","webpack:///./client/js/libs/handlebars/parse.js","webpack:///./client/js/libs/handlebars/equal.js","webpack:///./client/views/index.js","webpack:///./scripts/noop.js","webpack:///./client/js/utils.js","webpack:///./client/js/libs/handlebars/localetime.js","webpack:///./client/js/options.js","webpack:///./client/js/render.js","webpack:///./client/js/localStorage.js","webpack:///./client/js/libs/handlebars/tz.js","webpack:///./client/js/libs/handlebars/slugify.js","webpack:///./client/js/constants.js","webpack:///./client/js/webpush.js","webpack:///./client/js/libs/handlebars/colorClass.js","webpack:///./client/js/libs/handlebars/ircmessageparser/anyIntersection.js","webpack:///./client/js/libs/handlebars/notEqual.js","webpack:///./client/views/chan.tpl","webpack:///./client/js/libs/handlebars/roundBadgeNumber.js","webpack:///./client/views/join_channel.tpl","webpack:///./client/js/libs/handlebars/diff.js","webpack:///./client/js/renderPreview.js","webpack:///./client/js/condensed.js","webpack:///./client/js/join-channel.js","webpack:///./client/js/socket-events/changelog.js","webpack:///./client/js/lounge.js","webpack:///./client/js/libs/jquery/inputhistory.js","webpack:///./client/js/libs/jquery/stickyscroll.js","webpack:///./client/js/libs/slideout.js","webpack:///./client/views \\.tpl$","webpack:///./client/views/actions/action.tpl","webpack:///./client/js/libs/handlebars/ircmessageparser/parseStyle.js","webpack:///./client/js/libs/handlebars/ircmessageparser/findChannels.js","webpack:///./client/js/libs/handlebars/ircmessageparser/findLinks.js","webpack:///./client/js/libs/handlebars/ircmessageparser/findEmoji.js","webpack:///./client/js/libs/handlebars/ircmessageparser/findNames.js","webpack:///./client/js/libs/handlebars/ircmessageparser/merge.js","webpack:///./client/js/libs/handlebars/ircmessageparser/fill.js","webpack:///./client/views/actions/away.tpl","webpack:///./client/views/actions/back.tpl","webpack:///./client/views/actions/ban_list.tpl","webpack:///./client/views/actions/channel_list.tpl","webpack:///./client/views/actions/chghost.tpl","webpack:///./client/views/actions/ctcp.tpl","webpack:///./client/views/actions/invite.tpl","webpack:///./client/views/actions/join.tpl","webpack:///./client/views/actions/kick.tpl","webpack:///./client/views/actions/mode.tpl","webpack:///./client/views/actions/nick.tpl","webpack:///./client/views/actions/part.tpl","webpack:///./client/views/actions/quit.tpl","webpack:///./client/views/actions/topic.tpl","webpack:///./client/views/actions/topic_set_by.tpl","webpack:///./client/views/actions/whois.tpl","webpack:///./client/views/chat.tpl","webpack:///./client/views/contextmenu_divider.tpl","webpack:///./client/views/contextmenu_item.tpl","webpack:///./client/views/date_marker.tpl","webpack:///./client/js/libs/handlebars/localedate.js","webpack:///./client/js/libs/handlebars/friendlydate.js","webpack:///./client/views/image_viewer.tpl","webpack:///./client/views/msg.tpl","webpack:///./client/js/autocompletion.js","webpack:///./client/js/libs/simplemap.json","webpack:///./client/views/msg_action.tpl","webpack:///./client/views/msg_condensed.tpl","webpack:///./client/views/msg_condensed_toggle.tpl","webpack:///./client/views/msg_preview.tpl","webpack:///./client/views/msg_preview_toggle.tpl","webpack:///./client/views/msg_unhandled.tpl","webpack:///./client/views/network.tpl","webpack:///./client/js/libs/handlebars/tojson.js","webpack:///./client/views/session.tpl","webpack:///./client/views/unread_marker.tpl","webpack:///./client/views/user.tpl","webpack:///./client/js/libs/handlebars/modes.js","webpack:///./client/views/user_filtered.tpl","webpack:///./client/views/version_checker.tpl","webpack:///./client/views/windows/changelog.tpl","webpack:///./client/views/windows/connect.tpl","webpack:///./client/views/windows/help.tpl","webpack:///./client/views/windows/settings.tpl","webpack:///./client/views/windows/sign_in.tpl","webpack:///./client/js/sorting.js","webpack:///./client/js/socket-events/index.js","webpack:///./client/js/socket-events/auth.js","webpack:///./client/js/socket-events/change_password.js","webpack:///./client/js/socket-events/init.js","webpack:///./client/js/socket-events/join.js","webpack:///./client/js/socket-events/more.js","webpack:///./client/js/socket-events/msg.js","webpack:///./client/js/libs/handlebars/ircmessageparser/cleanIrcMessage.js","webpack:///./client/js/socket-events/msg_preview.js","webpack:///./client/js/socket-events/names.js","webpack:///./client/js/socket-events/network.js","webpack:///./client/js/socket-events/nick.js","webpack:///./client/js/socket-events/open.js","webpack:///./client/js/socket-events/part.js","webpack:///./client/js/socket-events/quit.js","webpack:///./client/js/socket-events/sync_sort.js","webpack:///./client/js/socket-events/topic.js","webpack:///./client/js/socket-events/users.js","webpack:///./client/js/socket-events/sign_out.js","webpack:///./client/js/socket-events/sessions_list.js","webpack:///./client/js/socket-events/configuration.js","webpack:///./client/js/keybinds.js","webpack:///./client/js/clipboard.js"],"names":["webpackJsonp","module","exports","__webpack_require__","handleDisconnect","data","message","$","text","addClass","prop","hide","socket","io","skipReconnect","utils","requestIdleCallback","connect","path","window","location","pathname","transports","document","body","autoConnect","reconnection","hasClass","on","attempt","sendBuffer","__default","obj","__esModule","Handlebars","template","compiler","main","container","depth0","helpers","partials","alias1","escapeExpression","alias2","lambda","call","nullContext","nick","name","hash","mode","useData","createFragment","fragment","classes","bold","push","undefined","textColor","bgColor","italic","underline","strikethrough","monospace","attributes","length","join","escapedText","Utils","hexColor","hexBgColor","parseStyle","anyIntersection","findChannels","findLinks","findEmoji","findNames","merge","colorClass","users","styleFragments","cleanText","map","channelPrefixes","userModes","channelParts","linkParts","emojiParts","nameParts","parts","concat","sort","a","b","start","end","reduce","prev","curr","some","p","textPart","fragments","link","channel","emoji","opt","arguments","Error","toString","fn","this","inverse","requireViews","keys","acc","tmp","substr","split","forEach","key","endsWith","findCurrentNetworkChan","toLowerCase","parent","find","filter","first","resetHeight","element","style","height","minHeight","isOpInChannel","channelID","network","has","ownNick","escape","forceFocus","input","trigger","collapse","click","expand","args","chan","toggleNickEditor","toggle","toggleClass","setNick","toggleNotificationMarkers","newState","favicon","old","confirmExit","onbeforeunload","move","array","old_index","new_index","k","splice","callback","timeout","inputCommands","serverHash","lastMessageId","moment","time","format","escapeRegExp","userStyles","storage","tz","windows","chat","options","autocomplete","nickPostfix","coloredNicks","desktopNotifications","highlights","links","motd","notification","notifyAllMessages","showSeconds","statusMessages","theme","match","media","userOptions","JSON","parse","get","test","search","html","autocompletion","shouldOpenMessagePreview","type","initialize","settings","i","val","desktopNotificationsCheckbox","warningUnsupported","warningBlocked","updateDesktopNotificationStatus","Notification","permission","show","self","set","stringify","highlightString","h","trim","highlightsTokens","highlightsRE","RegExp","each","enable","disable","requestPermission","buildChannelMessages","chanId","chanType","messages","docFragment","appendMessage","msg","id","lastChild","children","last","renderedMessage","buildChatMessage","msgTime","Date","toDateString","templates","date_marker","append","constants","condensedTypes","indexOf","condensed","updateText","newCondensed","msg_condensed","highlight","exec","actionTypes","content","actions","previews","preview","renderPreview","renderChannel","renderChannelMessages","renderChannelUsers","historyObserver","observe","documentFragment","createDocumentFragment","renderUnreadMarker","unread_marker","firstUnread","before","prepend","nicks","lastMessage","user","renderNetworks","singleNetwork","sidebar","networks","JoinChannel","handleKeybinds","newChannels","channels","n","helpers_parse","topic","unreadMarker","sorting","trimMessageInChannel","messageLimit","slice","remove","next","loadMoreHistory","entries","entry","isIntersecting","target","IntersectionObserver","root","value","localStorage","setItem","e","getItem","removeItem","timeFormats","msgWithSeconds","msgDefault","orig","colorCodeMap","commands","condensedTypesQuery","onPushButton","pushNotificationsButton","navigator","serviceWorker","ready","then","registration","pushManager","getSubscription","existingSubscription","emit","unsubscribe","subscribe","applicationServerKey","urlBase64ToUint8Array","userVisibleOnly","subscription","rawKey","getKey","btoa","String","fromCharCode","apply","Uint8Array","rawAuthSecret","authSecret","token","endpoint","p256dh","auth","successful","alternatePushButton","catch","err","base64String","padding","repeat","base64","replace","rawData","atob","outputArray","charCodeAt","isAllowedServiceWorkersHost","protocol","hostname","clientSubscribed","addEventListener","event","hasServiceWorker","configurePushNotifications","subscribedOnServer","register","str","1","stack1","alias3","program","noop","unread","2","4","6","8","10","invokePartial","indent","decorators","usePartial","count","toFixed","helper","helperMissing","alias4","diff","shown","msg_preview","image","appendPreview","off","escapedLink","previewContainer","is","closest","channelId","activeChannelId","after","msg_preview_toggle","openImageViewer","_ref","_ref$pushState","pushState","removeClass","previousImage","prevAll","nextImage","nextAll","imageViewer","image_viewer","hasPreviousImage","hasNextImage","clickTarget","history","closeImageViewer","_ref2","_ref2$pushState","one","empty","Mousetrap","bottom","isScrollBottom","parseInt","msgId","scrollBottom","bind","direction","getStoredTypes","addedTypes","_","forOwn","strings","pop","msg_condensed_toggle","toggleButton","tooltip","altLabel","closeForm","form","openForm","joinForm","channelString","keyString","requestIfNeeded","renderVersionChecker","status","latest","version_checker","changelog","current","expiresAt","setTimeout","now","URI","fuzzy","slideoutMenu","render","Changelog","positionContextMenu","that","offset","menuWidth","contextMenu","outerWidth","menuHeight","outerHeight","left","top","pageX","pageY","innerWidth","innerHeight","showContextMenu","currentTarget","output","contextmenu_item","class","action","contextmenu_divider","itemClass","contextMenuContainer","css","resetInputHeight","submitNick","newNick","cancelNick","closeChan","cmd","server","confirm","transition","opacity","msUntilNextDay","add","startOf","updateDateMarkers","replaceWith","title","viewport","sidebarSlide","isOpen","stopPropagation","getSelection","isCollapsed","getComputedStyle","Math","min","round","scrollHeight","parseFloat","borderTopWidth","borderBottomWidth","focus","maxTouchPoints","platform","preventDefault","charAt","shift","querySelector","range","createRange","selectNodeContents","selection","removeAllRanges","addRange","keyCode","which","openWindow","parents","lastActive","unsticky","lastActiveChan","appendTo","placeholder","chanChat","sticky","state","replaceHistory","replaceState","connected","reload","contextMenuActions","itemData","close","focusChan","list","banlist","whois","query","kick","execute","_len","Array","_key","$this","contextAction","names","fuzzyOptions","pre","post","extract","el","result","toArray","user_filtered","matches","params","hasOwnProperty","includes","open","_jquery","_jquery2","default","inputhistory","defaultOptions","preventSubmit","extend","shiftKey","eq","submit","ctrlKey","metaKey","selectionStart","stuckToBottom","lastStick","keepToBottom","scrollTop","offsetHeight","menu","toggleMenu","menuIsOpen","classList","disableSlideout","removeEventListener","onTouchStart","touches","onTouchEnd","touch","item","width","screenX","touchStartPos","touchCurPos","touchStartTime","onTouchMove","passive","setX","abs","menuIsMoving","screenY","transform","absDiff","webpackContext","req","webpackContextResolve","./actions/action.tpl","./actions/away.tpl","./actions/back.tpl","./actions/ban_list.tpl","./actions/channel_list.tpl","./actions/chghost.tpl","./actions/ctcp.tpl","./actions/invite.tpl","./actions/join.tpl","./actions/kick.tpl","./actions/mode.tpl","./actions/nick.tpl","./actions/part.tpl","./actions/quit.tpl","./actions/topic.tpl","./actions/topic_set_by.tpl","./actions/whois.tpl","./chan.tpl","./chat.tpl","./contextmenu_divider.tpl","./contextmenu_item.tpl","./date_marker.tpl","./image_viewer.tpl","./join_channel.tpl","./msg.tpl","./msg_action.tpl","./msg_condensed.tpl","./msg_condensed_toggle.tpl","./msg_preview.tpl","./msg_preview_toggle.tpl","./msg_unhandled.tpl","./network.tpl","./session.tpl","./unread_marker.tpl","./user.tpl","./user_filtered.tpl","./user_name.tpl","./version_checker.tpl","./windows/changelog.tpl","./windows/connect.tpl","./windows/help.tpl","./windows/settings.tpl","./windows/sign_in.tpl","Object","resolve","from","position","colorCodes","resetStyle","emitFragment","processedText","controlCodesRx","fragmentStart","RESET","BOLD","COLOR","colorRx","Number","HEX_COLOR","hexColorRx","toUpperCase","REVERSE","ITALIC","UNDERLINE","STRIKETHROUGH","MONOSPACE","prepare","lastEntry","properties","every","userModePattern","channelPrefixPattern","channelPattern","channelRegExp","index","withinString","url","parsedScheme","scheme","matchedScheme","commonSchemes","prefix","emojiRegExp","nickRegExp","assign","fragStart","max","Object_assign","textParts","frag","fill","prototype","existingEntries","textSegment","hostmask","banned_by","banned_at","bans","num_users","new_ident","new_host","ctcpType","ctcpMessage","3","invitedYou","new_nick","when","account","actualip","actualhost","real_name","registered_nick","12","modes","14","special","16","operator","18","20","22","away","24","26","server_info","28","logonTime","30","idleTime","host","helpop","bot","secure","idle","calendar","sameDay","lastDay","lastWeek","sameElse","5","7","9","enableAutocomplete","tabCount","lastMatch","currentMatches","completeNicks","newMatch","nicksStrategy","editor","Textarea","textcomplete","Textcomplete","dropdown","className","placement","emojiStrategy","chanStrategy","commandStrategy","foregroundColorStrategy","backgroundColorStrategy","items","activate","fuzzyGrep","term","string","original","word","isFuzzy","words","grep","w","completeCommands","completeChans","_slicedToArray","sliceIterator","arr","_arr","_n","_d","_e","_s","_i","Symbol","iterator","done","isArray","TypeError","_require","emojiMap","destroy","emojiSearchTerms","_ref3","_ref4","_ref5","_ref7","_ref8","_ref9","_ref11","_ref13","_ref15","rendered","pair","100","1234","interrobang","tm","information_source","left_right_arrow","arrow_up_down","arrow_upper_left","arrow_upper_right","arrow_lower_right","arrow_lower_left","keyboard","sunny","cloud","umbrella2","snowman2","comet","ballot_box_with_check","umbrella","coffee","shamrock","skull_crossbones","radioactive","biohazard","orthodox_cross","wheel_of_dharma","frowning2","white_frowning_face","female_sign","male_sign","aries","taurus","sagittarius","capricorn","aquarius","pisces","spades","clubs","hearts","diamonds","hotsprings","hammer_pick","anchor","crossed_swords","medical_symbol","scales","alembic","gear","scissors","white_check_mark","airplane","envelope","black_nib","heavy_check_mark","heavy_multiplication_x","star_of_david","sparkles","eight_spoked_asterisk","eight_pointed_black_star","snowflake","sparkle","question","grey_question","grey_exclamation","exclamation","heart_exclamation","heart","heavy_plus_sign","heavy_minus_sign","heavy_division_sign","arrow_heading_up","arrow_heading_down","wavy_dash","congratulations","secret","grinning","smiley","smile","grin","laughing","satisfied","sweat_smile","joy","rofl","relaxed","blush","innocent","slight_smile","upside_down","wink","relieved","heart_eyes","kissing_heart","kissing","kissing_smiling_eyes","kissing_closed_eyes","yum","stuck_out_tongue_winking_eye","stuck_out_tongue_closed_eyes","stuck_out_tongue","money_mouth","hugging","nerd","sunglasses","clown","cowboy","smirk","unamused","disappointed","pensive","worried","confused","slight_frown","persevere","confounded","tired_face","weary","triumph","angry","rage","no_mouth","neutral_face","expressionless","hushed","frowning","anguished","open_mouth","astonished","dizzy_face","flushed","scream","fearful","cold_sweat","cry","disappointed_relieved","drooling_face","sob","sweat","sleepy","sleeping","rolling_eyes","thinking","lying_face","liar","grimacing","zipper_mouth","nauseated_face","sick","sneezing_face","mask","thermometer_face","face_with_thermometer","head_bandage","smiling_imp","imp","japanese_ogre","japanese_goblin","poop","shit","hankey","ghost","skull","skeleton","alien","space_invader","robot","jack_o_lantern","smiley_cat","smile_cat","joy_cat","heart_eyes_cat","smirk_cat","kissing_cat","scream_cat","crying_cat_face","pouting_cat","open_hands","raised_hands","clap","pray","handshake","shaking_hands","thumbsup","+1","thumbsdown","-1","punch","fist","left_facing_fist","right_facing_fist","fingers_crossed","hand_with_index_and_middle_finger_crossed","v","metal","sign_of_the_horns","ok_hand","point_left","point_right","point_up_2","point_down","point_up","raised_hand","raised_back_of_hand","hand_splayed","vulcan","raised_hand_with_part_between_middle_and_ring_fingers","wave","call_me","muscle","middle_finger","writing_hand","selfie","nail_care","ring","lipstick","kiss","lips","tongue","ear","nose","footprints","eye","eyes","speaking_head","bust_in_silhouette","busts_in_silhouette","baby","boy","girl","man","woman","blond_haired_woman","blond_haired_person","person_with_blond_hair","blond_haired_man","older_man","older_woman","grandma","man_with_chinese_cap","man_with_gua_pi_mao","woman_wearing_turban","person_wearing_turban","man_with_turban","man_wearing_turban","woman_police_officer","police_officer","cop","man_police_officer","woman_construction_worker","construction_worker","man_construction_worker","woman_guard","guard","man_guard","woman_detective","detective","spy","sleuth_or_spy","man_detective","woman_health_worker","man_health_worker","woman_farmer","man_farmer","woman_cook","man_cook","woman_student","man_student","woman_singer","man_singer","woman_teacher","man_teacher","woman_factory_worker","man_factory_worker","woman_technologist","man_technologist","woman_office_worker","man_office_worker","woman_mechanic","man_mechanic","woman_scientist","man_scientist","woman_artist","man_artist","woman_firefighter","man_firefighter","woman_pilot","man_pilot","woman_astronaut","man_astronaut","woman_judge","man_judge","mrs_claus","mother_christmas","santa","princess","prince","bride_with_veil","man_in_tuxedo","angel","pregnant_woman","expecting_woman","woman_bowing","person_bowing","man_bowing","person_tipping_hand","information_desk_person","man_tipping_hand","woman_tipping_hand","person_gesturing_no","no_good","man_gesturing_no","woman_gesturing_no","person_gesturing_ok","ok_woman","man_gesturing_ok","woman_gesturing_ok","person_raising_hand","man_raising_hand","woman_raising_hand","woman_facepalming","man_facepalming","person_facepalming","face_palm","woman_shrugging","man_shrugging","person_shrugging","person_pouting","man_pouting","woman_pouting","person_frowning","man_frowning","woman_frowning","person_getting_haircut","man_getting_haircut","woman_getting_haircut","person_getting_massage","man_getting_face_massage","woman_getting_face_massage","levitate","dancer","man_dancing","male_dancer","people_with_bunny_ears_partying","dancers","men_with_bunny_ears_partying","women_with_bunny_ears_partying","woman_walking","person_walking","man_walking","woman_running","person_running","runner","man_running","couple","two_women_holding_hands","two_men_holding_hands","couple_with_heart","couple_ww","couple_mm","couplekiss","kiss_ww","kiss_mm","family","family_mwg","family_mwgb","family_mwbb","family_mwgg","family_wwb","family_wwg","family_wwgb","family_wwbb","family_wwgg","family_mmb","family_mmg","family_mmgb","family_mmbb","family_mmgg","family_woman_boy","family_woman_girl","family_woman_girl_boy","family_woman_boy_boy","family_woman_girl_girl","family_man_boy","family_man_girl","family_man_girl_boy","family_man_boy_boy","family_man_girl_girl","womans_clothes","shirt","jeans","necktie","dress","bikini","kimono","high_heel","sandal","boot","mans_shoe","athletic_shoe","womans_hat","tophat","mortar_board","crown","helmet_with_cross","school_satchel","pouch","purse","handbag","briefcase","eyeglasses","dark_sunglasses","closed_umbrella","dog","cat","mouse","hamster","rabbit","fox","bear","panda_face","koala","tiger","lion_face","cow","pig","pig_nose","frog","monkey_face","see_no_evil","hear_no_evil","speak_no_evil","monkey","chicken","penguin","bird","baby_chick","hatching_chick","hatched_chick","duck","eagle","owl","bat","wolf","boar","horse","unicorn","bee","bug","butterfly","snail","shell","beetle","ant","spider","spider_web","turtle","snake","lizard","scorpion","crab","squid","octopus","shrimp","tropical_fish","fish","blowfish","dolphin","shark","whale","whale2","crocodile","leopard","tiger2","water_buffalo","ox","cow2","deer","dromedary_camel","camel","elephant","rhino","gorilla","racehorse","pig2","goat","ram","sheep","dog2","poodle","cat2","rooster","turkey","dove","rabbit2","mouse2","rat","chipmunk","feet","paw_prints","dragon","dragon_face","cactus","christmas_tree","evergreen_tree","deciduous_tree","palm_tree","seedling","herb","four_leaf_clover","bamboo","tanabata_tree","leaves","fallen_leaf","maple_leaf","mushroom","ear_of_rice","bouquet","tulip","rose","wilted_rose","wilted_flower","sunflower","blossom","cherry_blossom","hibiscus","earth_americas","earth_africa","earth_asia","full_moon","waning_gibbous_moon","last_quarter_moon","waning_crescent_moon","new_moon","waxing_crescent_moon","first_quarter_moon","waxing_gibbous_moon","new_moon_with_face","full_moon_with_face","sun_with_face","first_quarter_moon_with_face","last_quarter_moon_with_face","crescent_moon","dizzy","star","star2","zap","fire","flame","boom","white_sun_small_cloud","partly_sunny","white_sun_cloud","white_sun_rain_cloud","white_sun_behind_cloud_with_rain","rainbow","cloud_rain","thunder_cloud_rain","cloud_lightning","cloud_snow","snowman","wind_blowing_face","dash","cloud_tornado","fog","ocean","droplet","sweat_drops","giraffe","zebra","hedgehog","sauropod","t_rex","cricket","green_apple","apple","pear","tangerine","lemon","banana","watermelon","grapes","strawberry","melon","cherries","peach","pineapple","kiwi","avocado","tomato","eggplant","cucumber","carrot","corn","hot_pepper","potato","sweet_potato","chestnut","peanuts","shelled_peanut","honey_pot","croissant","bread","french_bread","baguette_bread","cheese","egg","cooking","bacon","pancakes","fried_shrimp","poultry_leg","meat_on_bone","pizza","hotdog","hamburger","fries","stuffed_flatbread","stuffed_pita","taco","burrito","salad","shallow_pan_of_food","paella","spaghetti","ramen","stew","fish_cake","sushi","bento","curry","rice_ball","rice","rice_cracker","oden","dango","shaved_ice","ice_cream","icecream","cake","birthday","custard","pudding","flan","lollipop","candy","chocolate_bar","popcorn","doughnut","cookie","milk","baby_bottle","tea","sake","beer","beers","champagne_glass","clinking_glass","wine_glass","tumbler_glass","whisky","cocktail","tropical_drink","champagne","bottle_with_popping_cork","spoon","fork_and_knife","fork_knife_plate","dumpling","fortune_cookie","takeout_box","chopsticks","bowl_with_spoon","cup_with_straw","coconut","broccoli","pie","pretzel","cut_of_meat","sandwich","canned_food","soccer","basketball","football","baseball","tennis","volleyball","rugby_football","8ball","ping_pong","table_tennis","badminton","goal","hockey","field_hockey","cricket_game","cricket_bat_ball","golf","bow_and_arrow","archery","fishing_pole_and_fish","boxing_glove","martial_arts_uniform","karate_uniform","ice_skate","ski","skier","snowboarder","woman_lifting_weights","person_lifting_weights","lifter","weight_lifter","man_lifting_weights","person_fencing","fencer","women_wrestling","men_wrestling","people_wrestling","wrestlers","woman_cartwheeling","man_cartwheeling","person_doing_cartwheel","woman_bouncing_ball","person_bouncing_ball","basketball_player","person_with_ball","man_bouncing_ball","woman_playing_handball","man_playing_handball","person_playing_handball","woman_golfing","person_golfing","golfer","man_golfing","woman_surfing","person_surfing","surfer","man_surfing","woman_swimming","person_swimming","swimmer","man_swimming","woman_playing_water_polo","man_playing_water_polo","person_playing_water_polo","woman_rowing_boat","person_rowing_boat","man_rowing_boat","horse_racing","woman_biking","person_biking","bicyclist","man_biking","woman_mountain_biking","person_mountain_biking","mountain_bicyclist","man_mountain_biking","running_shirt_with_sash","medal","military_medal","first_place","second_place","third_place","trophy","rosette","reminder_ribbon","ticket","tickets","circus_tent","woman_juggling","man_juggling","person_juggling","juggler","performing_arts","art","clapper","microphone","headphones","musical_score","musical_keyboard","drum","saxophone","trumpet","guitar","violin","game_die","dart","bowling","video_game","slot_machine","sled","breast_feeding","person_in_steamy_room","person_climbing","person_in_lotus_position","woman_in_steamy_room","man_in_steamy_room","woman_climbing","man_climbing","woman_in_lotus_position","man_in_lotus_position","red_car","taxi","blue_car","bus","trolleybus","race_car","racing_car","police_car","ambulance","fire_engine","minibus","truck","articulated_lorry","tractor","scooter","bike","motor_scooter","motorbike","motorcycle","rotating_light","oncoming_police_car","oncoming_bus","oncoming_automobile","oncoming_taxi","aerial_tramway","mountain_cableway","suspension_railway","railway_car","train","mountain_railway","monorail","bullettrain_side","bullettrain_front","light_rail","steam_locomotive","train2","metro","tram","station","helicopter","airplane_small","small_airplane","airplane_departure","airplane_arriving","rocket","satellite_orbital","seat","canoe","kayak","sailboat","motorboat","speedboat","cruise_ship","passenger_ship","ferry","ship","construction","fuelpump","busstop","vertical_traffic_light","traffic_light","moyai","statue_of_liberty","fountain","tokyo_tower","european_castle","japanese_castle","stadium","ferris_wheel","roller_coaster","carousel_horse","beach_umbrella","umbrella_on_ground","beach","island","mountain","mountain_snow","snow_capped_mountain","mount_fuji","volcano","desert","camping","tent","railway_track","railroad_track","motorway","construction_site","building_construction","factory","house","house_with_garden","homes","house_buildings","house_abandoned","derelict_house_building","office","department_store","post_office","european_post_office","hospital","bank","hotel","convenience_store","school","love_hotel","wedding","classical_building","church","mosque","synagogue","kaaba","shinto_shrine","japan","rice_scene","park","sunrise","sunrise_over_mountains","stars","sparkler","fireworks","city_sunset","city_sunrise","city_dusk","cityscape","night_with_stars","milky_way","bridge_at_night","foggy","flying_saucer","watch","iphone","calling","computer","desktop","printer","mouse_three_button","three_button_mouse","trackball","joystick","compression","minidisc","floppy_disk","cd","dvd","vhs","camera","camera_with_flash","video_camera","movie_camera","projector","film_frames","telephone_receiver","telephone","pager","fax","tv","radio","microphone2","studio_microphone","level_slider","control_knobs","stopwatch","timer","alarm_clock","clock","hourglass","hourglass_flowing_sand","satellite","battery","electric_plug","bulb","flashlight","candle","wastebasket","oil","money_with_wings","dollar","yen","euro","pound","moneybag","credit_card","gem","wrench","hammer","tools","hammer_and_wrench","pick","nut_and_bolt","chains","gun","bomb","knife","dagger","shield","smoking","coffin","urn","amphora","crystal_ball","prayer_beads","barber","telescope","microscope","hole","pill","syringe","thermometer","toilet","potable_water","shower","bathtub","bath","bellhop","key2","old_key","door","couch","bed","sleeping_accommodation","frame_photo","frame_with_picture","shopping_bags","shopping_cart","shopping_trolley","gift","balloon","flags","ribbon","confetti_ball","tada","dolls","izakaya_lantern","wind_chime","envelope_with_arrow","incoming_envelope","email","love_letter","inbox_tray","outbox_tray","package","label","mailbox_closed","mailbox","mailbox_with_mail","mailbox_with_no_mail","postbox","postal_horn","scroll","page_with_curl","page_facing_up","bookmark_tabs","bar_chart","chart_with_upwards_trend","chart_with_downwards_trend","notepad_spiral","spiral_note_pad","calendar_spiral","spiral_calendar_pad","date","card_index","card_box","ballot_box","file_cabinet","clipboard","file_folder","open_file_folder","dividers","newspaper2","rolled_up_newspaper","newspaper","notebook","notebook_with_decorative_cover","ledger","closed_book","green_book","blue_book","orange_book","books","book","bookmark","paperclip","paperclips","triangular_ruler","straight_ruler","pushpin","round_pushpin","pen_ballpoint","lower_left_ballpoint_pen","pen_fountain","lower_left_fountain_pen","paintbrush","crayon","pencil","memo","pencil2","mag","mag_right","lock_with_ink_pen","closed_lock_with_key","lock","unlock","orange_heart","yellow_heart","green_heart","blue_heart","purple_heart","black_heart","broken_heart","two_hearts","revolving_hearts","heartbeat","heartpulse","sparkling_heart","cupid","gift_heart","heart_decoration","peace","cross","star_and_crescent","om_symbol","six_pointed_star","menorah","yin_yang","place_of_worship","worship_symbol","ophiuchus","gemini","cancer","leo","virgo","libra","scorpius","atom","accept","mobile_phone_off","vibration_mode","u6709","u7121","u7533","u55b6","u6708","vs","white_flower","ideograph_advantage","u5408","u6e80","u5272","u7981","ab","cl","o2","sos","x","o","octagonal_sign","stop_sign","no_entry","name_badge","no_entry_sign","anger","no_pedestrians","do_not_litter","no_bicycles","non_potable_water","underage","no_mobile_phones","no_smoking","bangbang","low_brightness","high_brightness","part_alternation_mark","warning","children_crossing","trident","fleur_de-lis","beginner","recycle","u6307","chart","negative_squared_cross_mark","globe_with_meridians","diamond_shape_with_a_dot_inside","m","cyclone","zzz","atm","wc","wheelchair","parking","u7a7a","sa","passport_control","customs","baggage_claim","left_luggage","mens","womens","baby_symbol","restroom","put_litter_in_its_place","cinema","signal_strength","koko","symbols","abc","abcd","capital_abcd","ng","ok","up","cool","new","free","zero","two","three","four","five","six","seven","eight","nine","keycap_ten","asterisk","arrow_forward","pause_button","double_vertical_bar","play_pause","stop_button","record_button","eject","track_next","next_track","track_previous","previous_track","fast_forward","rewind","arrow_double_up","arrow_double_down","arrow_backward","arrow_up_small","arrow_down_small","arrow_right","arrow_left","arrow_up","arrow_down","arrow_right_hook","leftwards_arrow_with_hook","twisted_rightwards_arrows","repeat_one","arrows_counterclockwise","arrows_clockwise","musical_note","notes","heavy_dollar_sign","currency_exchange","copyright","registered","curly_loop","loop","back","soon","radio_button","white_circle","black_circle","red_circle","blue_circle","small_red_triangle","small_red_triangle_down","small_orange_diamond","small_blue_diamond","large_orange_diamond","large_blue_diamond","white_square_button","black_square_button","black_small_square","white_small_square","black_medium_small_square","white_medium_small_square","black_medium_square","white_medium_square","black_large_square","white_large_square","speaker","mute","sound","loud_sound","bell","no_bell","mega","loudspeaker","speech_left","left_speech_bubble","eye_in_speech_bubble","speech_balloon","thought_balloon","anger_right","right_anger_bubble","black_joker","flower_playing_cards","mahjong","clock1","clock2","clock3","clock4","clock5","clock6","clock7","clock8","clock9","clock10","clock11","clock12","clock130","clock230","clock330","clock430","clock530","clock630","clock730","clock830","clock930","clock1030","clock1130","clock1230","flag_white","waving_white_flag","flag_black","waving_black_flag","checkered_flag","triangular_flag_on_post","rainbow_flag","gay_pride_flag","flag_af","flag_ax","flag_al","flag_dz","flag_as","flag_ad","flag_ao","flag_ai","flag_aq","flag_ag","flag_ar","flag_am","flag_aw","flag_au","flag_at","flag_az","flag_bs","flag_bh","flag_bd","flag_bb","flag_by","flag_be","flag_bz","flag_bj","flag_bm","flag_bt","flag_bo","flag_ba","flag_bw","flag_br","flag_io","flag_vg","flag_bn","flag_bg","flag_bf","flag_bi","flag_kh","flag_cm","flag_ca","flag_ic","flag_cv","flag_bq","flag_ky","flag_cf","flag_td","flag_cl","chile","flag_cn","flag_cx","flag_cc","flag_co","flag_km","flag_cg","flag_cd","congo","flag_ck","flag_cr","flag_ci","flag_hr","flag_cu","flag_cw","flag_cy","flag_cz","flag_dk","flag_dj","flag_dm","flag_do","flag_ec","flag_eg","flag_sv","flag_gq","flag_er","flag_ee","flag_et","flag_eu","flag_fk","flag_fo","flag_fj","flag_fi","flag_fr","flag_gf","flag_pf","flag_tf","flag_ga","flag_gm","flag_ge","flag_de","flag_gh","flag_gi","flag_gr","flag_gl","flag_gd","flag_gp","flag_gu","flag_gt","flag_gg","flag_gn","flag_gw","flag_gy","flag_ht","flag_hn","flag_hk","flag_hu","flag_is","flag_in","flag_id","indonesia","flag_ir","flag_iq","flag_ie","flag_im","flag_il","flag_it","flag_jm","flag_jp","crossed_flags","flag_je","flag_jo","flag_kz","flag_ke","flag_ki","flag_xk","flag_kw","flag_kg","flag_la","flag_lv","flag_lb","flag_ls","flag_lr","flag_ly","flag_li","flag_lt","flag_lu","flag_mo","flag_mk","flag_mg","flag_mw","flag_my","flag_mv","flag_ml","flag_mt","flag_mh","flag_mq","flag_mr","flag_mu","flag_yt","flag_mx","flag_fm","flag_md","flag_mc","flag_mn","flag_me","flag_ms","flag_ma","flag_mz","flag_mm","flag_na","flag_nr","flag_np","flag_nl","flag_nc","flag_nz","flag_ni","flag_ne","flag_ng","nigeria","flag_nu","flag_nf","flag_kp","flag_mp","flag_no","flag_om","flag_pk","flag_pw","flag_ps","flag_pa","flag_pg","flag_py","flag_pe","flag_ph","flag_pn","flag_pl","flag_pt","flag_pr","flag_qa","flag_re","flag_ro","flag_ru","flag_rw","flag_ws","flag_sm","flag_st","flag_sa","saudiarabia","saudi","flag_sn","flag_rs","flag_sc","flag_sl","flag_sg","flag_sx","flag_sk","flag_si","flag_gs","flag_sb","flag_so","flag_za","flag_kr","flag_ss","flag_es","flag_lk","flag_bl","flag_sh","flag_kn","flag_lc","flag_pm","flag_vc","flag_sd","flag_sr","flag_sz","flag_se","flag_ch","flag_sy","flag_tw","flag_tj","flag_tz","flag_th","flag_tl","flag_tg","flag_tk","flag_to","flag_tt","flag_tn","flag_tr","flag_tm","turkmenistan","flag_tc","flag_tv","tuvalu","flag_vi","flag_ug","flag_ua","flag_ae","flag_gb","flag_us","flag_uy","flag_uz","flag_vu","flag_va","flag_ve","flag_vn","flag_wf","flag_eh","flag_ye","flag_zm","flag_zw","flag_ac","flag_ta","flag_bv","flag_hm","flag_sj","flag_um","flag_ea","flag_cp","flag_dg","flag_mf","united_nations","england","scotland","wales","asterisk_symbol","regional_indicator_z","regional_indicator_y","regional_indicator_x","pound_symbol","regional_indicator_w","regional_indicator_v","regional_indicator_u","regional_indicator_t","regional_indicator_s","regional_indicator_r","regional_indicator_q","regional_indicator_p","regional_indicator_o","regional_indicator_n","regional_indicator_m","regional_indicator_l","regional_indicator_k","regional_indicator_j","regional_indicator_i","regional_indicator_h","regional_indicator_g","regional_indicator_f","regional_indicator_e","regional_indicator_d","regional_indicator_c","regional_indicator_b","regional_indicator_a","digit_nine","digit_eight","digit_seven","digit_six","digit_five","digit_four","digit_three","digit_two","digit_one","digit_zero","family_man_woman_boy","couple_with_heart_woman_man","kiss_woman_man","face_with_raised_eyebrow","star_struck","crazy_face","shushing_face","face_with_symbols_over_mouth","face_with_hand_over_mouth","face_vomiting","exploding_head","face_with_monocle","adult","child","older_adult","bearded_person","woman_with_headscarf","brain","billed_cap","mage","fairy","vampire","merperson","elf","genie","zombie","scarf","gloves","coat","socks","love_you_gesture","palms_up_together","woman_mage","man_mage","woman_fairy","man_fairy","woman_vampire","man_vampire","mermaid","merman","woman_elf","man_elf","woman_genie","man_genie","woman_zombie","man_zombie","thumb","res","head","11","blockHelperMissing","command","serverOptions","NETWORK","context","agent","ip","active","lastUse","unless","~","&","!","@","%","+","","dataset","version","prerelease","lockNetwork","defaults","port","tls","username","displayNetwork","useHexIp","password","realname","gitCommit","displayName","ldapEnabled","themes","prefetch","sortable","axis","containment","cursor","distance","handle","forcePlaceholderSize","tolerance","update","order","ignoreSortSync","ui","disconnect","login","sign_in","values","serializeArray","success","error","passwordForm","feedback","openCorrectChannel","clientActive","serverActive","webpush","previousActive","pushSubscription","g_LoungeErrorHandler","shouldOpen","scrollable","heightOld","condensedDuplicate","condensedCorrect","finish","requestAnimationFrame","lastId","processReceivedMessage","targetId","sidebarTarget","showInActive","activeOnNetwork","notifyMessage","lastVisible","unshift","button","hasFocus","play","exception","cleanIrcMessage","timestamp","postMessage","tag","badge","icon","helpers_roundBadgeNumber","Audio","src","matchFormatting","chanMenuItem","insertBefore","connection","session","help","forms","usernameInput","lastValue","clientHeight","floor","ceil","animate","colorsHotkeys","u","s","hotkey","cursorPosStart","cursorPosEnd","newValue","substring","setSelectionRange","copyMessages","anchorNode","focusNode","getRangeAt","cloneContents","div","createElement","appendChild","selectAllChildren","removeChild","getElementById"],"mappings":"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,GAG3D,GAFA/T,EAAOC,QAAQyW,kBAAmB,EAE7B3C,EAAaC,YAIlB,MAAOD,GAAaC,YAAYC,kBAAkBH,KAAK,SAACW,GACvDnU,EAAE,iCAAiCI,OAEnCgT,EACEjT,KAAK,YAAY,GACjBkB,GAAG,QAAS8R,IAEd8C,IAAqB9B,IAGpBe,QAGAC,MAAM,SAACC,GACTpV,EAAE,sCAAsCC,KAAKmV,QfkiCxC,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACC,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CAEH,SAAU1V,EAAQC,EAASC,GAEjC,YgB7uCAF,GAAOC,QAAU,SAAS6W,GAEzB,IAAK,GADD7T,GAAO,EACF2J,EAAI,EAAGA,EAAIkK,EAAI7S,OAAQ2I,IAC/B3J,GAAQ6T,EAAIX,WAAWvJ,EAGxB,OAAO,UAAY,EAAI3J,EAAO,MhBuvCzB,SAAUjD,EAAQC,EAASC,GAEjC,YiB9vCA,SAASsE,GAAgBoB,EAAGC,GAC3B,MAAOD,GAAEE,OAASD,EAAEC,OAASD,EAAEC,MAAQF,EAAEG,KACxCH,EAAEE,MAAQ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AAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,UAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,cAAA,KAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,YAAA,OAAAC,MAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OA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","file":"js/bundle.js","sourcesContent":["webpackJsonp([0],[\n/* 0 */,\n/* 1 */,\n/* 2 */,\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar $ = __webpack_require__(2);\nvar io = __webpack_require__(287);\nvar utils = __webpack_require__(11);\nvar path = window.location.pathname + \"socket.io/\";\n\nvar socket = io({\n\ttransports: $(document.body).data(\"transports\"),\n\tpath: path,\n\tautoConnect: false,\n\treconnection: !$(document.body).hasClass(\"public\")\n});\n\nsocket.on(\"disconnect\", handleDisconnect);\nsocket.on(\"connect_error\", handleDisconnect);\nsocket.on(\"error\", handleDisconnect);\n\nsocket.on(\"reconnecting\", function (attempt) {\n\t$(\"#loading-page-message, #connection-error\").text(\"Reconnecting\\u2026 (attempt \" + attempt + \")\");\n});\n\nsocket.on(\"connecting\", function () {\n\t$(\"#loading-page-message, #connection-error\").text(\"Connecting…\");\n});\n\nsocket.on(\"connect\", function () {\n\t// Clear send buffer when reconnecting, socket.io would emit these\n\t// immediately upon connection and it will have no effect, so we ensure\n\t// nothing is sent to the server that might have happened.\n\tsocket.sendBuffer = [];\n\n\t$(\"#loading-page-message, #connection-error\").text(\"Finalizing connection…\");\n});\n\nsocket.on(\"authorized\", function () {\n\t$(\"#loading-page-message, #connection-error\").text(\"Loading messages…\");\n});\n\nfunction handleDisconnect(data) {\n\tvar message = data.message || data;\n\n\t$(\"#loading-page-message, #connection-error\").text(\"Waiting to reconnect\\u2026 (\" + message + \")\").addClass(\"shown\");\n\t$(\".show-more-button, #input\").prop(\"disabled\", true);\n\t$(\"#submit\").hide();\n\n\t// If the server shuts down, socket.io skips reconnection\n\t// and we have to manually call connect to start the process\n\tif (socket.io.skipReconnect) {\n\t\tutils.requestIdleCallback(function () {\n\t\t\treturn socket.connect();\n\t\t}, 2000);\n\t}\n}\n\nmodule.exports = socket;\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar Handlebars = __webpack_require__(1);\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var alias1=container.escapeExpression, alias2=container.lambda;\n\n return \"<span role=\\\"button\\\" class=\\\"user \"\n + alias1(__default(__webpack_require__(164)).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.nick : depth0),{\"name\":\"colorClass\",\"hash\":{},\"data\":data}))\n + \"\\\" data-name=\\\"\"\n + alias1(alias2((depth0 != null ? depth0.nick : depth0), depth0))\n + \"\\\">\"\n + alias1(alias2((depth0 != null ? depth0.mode : depth0), depth0))\n + alias1(alias2((depth0 != null ? depth0.nick : depth0), depth0))\n + \"</span>\\n\";\n},\"useData\":true});\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar Handlebars = __webpack_require__(1);\nvar parseStyle = __webpack_require__(215);\nvar anyIntersection = __webpack_require__(165);\nvar findChannels = __webpack_require__(216);\nvar findLinks = __webpack_require__(228);\nvar findEmoji = __webpack_require__(229);\nvar findNames = __webpack_require__(231);\nvar merge = __webpack_require__(232);\nvar colorClass = __webpack_require__(164);\n\n// Create an HTML `span` with styling information for a given fragment\nfunction createFragment(fragment) {\n\tvar classes = [];\n\tif (fragment.bold) {\n\t\tclasses.push(\"irc-bold\");\n\t}\n\tif (fragment.textColor !== undefined) {\n\t\tclasses.push(\"irc-fg\" + fragment.textColor);\n\t}\n\tif (fragment.bgColor !== undefined) {\n\t\tclasses.push(\"irc-bg\" + fragment.bgColor);\n\t}\n\tif (fragment.italic) {\n\t\tclasses.push(\"irc-italic\");\n\t}\n\tif (fragment.underline) {\n\t\tclasses.push(\"irc-underline\");\n\t}\n\tif (fragment.strikethrough) {\n\t\tclasses.push(\"irc-strikethrough\");\n\t}\n\tif (fragment.monospace) {\n\t\tclasses.push(\"irc-monospace\");\n\t}\n\n\tvar attributes = classes.length ? \" class=\\\"\" + classes.join(\" \") + \"\\\"\" : \"\";\n\tvar escapedText = Handlebars.Utils.escapeExpression(fragment.text);\n\n\tif (fragment.hexColor) {\n\t\tattributes += \" style=\\\"color:#\" + fragment.hexColor;\n\n\t\tif (fragment.hexBgColor) {\n\t\t\tattributes += \";background-color:#\" + fragment.hexBgColor;\n\t\t}\n\n\t\tattributes += '\"';\n\t}\n\n\tif (attributes.length) {\n\t\treturn \"<span\" + attributes + \">\" + escapedText + \"</span>\";\n\t}\n\n\treturn escapedText;\n}\n\n// Transform an IRC message potentially filled with styling control codes, URLs,\n// nicknames, and channels into a string of HTML elements to display on the client.\nmodule.exports = function parse(text, users) {\n\t// if it's not the users we're expecting, but rather is passed from Handlebars (occurs when users passed to template is null or undefined)\n\tif (users && users.hash) {\n\t\tusers = [];\n\t}\n\n\t// Extract the styling information and get the plain text version from it\n\tvar styleFragments = parseStyle(text);\n\tvar cleanText = styleFragments.map(function (fragment) {\n\t\treturn fragment.text;\n\t}).join(\"\");\n\n\t// On the plain text, find channels and URLs, returned as \"parts\". Parts are\n\t// arrays of objects containing start and end markers, as well as metadata\n\t// depending on what was found (channel or link).\n\tvar channelPrefixes = [\"#\", \"&\"]; // TODO Channel prefixes should be RPL_ISUPPORT.CHANTYPES\n\tvar userModes = [\"!\", \"@\", \"%\", \"+\"]; // TODO User modes should be RPL_ISUPPORT.PREFIX\n\tvar channelParts = findChannels(cleanText, channelPrefixes, userModes);\n\tvar linkParts = findLinks(cleanText);\n\tvar emojiParts = findEmoji(cleanText);\n\tvar nameParts = findNames(cleanText, users || []);\n\n\t// Sort all parts identified based on their position in the original text\n\tvar parts = channelParts.concat(linkParts).concat(emojiParts).concat(nameParts).sort(function (a, b) {\n\t\treturn a.start - b.start || b.end - a.end;\n\t}).reduce(function (prev, curr) {\n\t\tvar intersection = prev.some(function (p) {\n\t\t\treturn anyIntersection(p, curr);\n\t\t});\n\n\t\tif (intersection) {\n\t\t\treturn prev;\n\t\t}\n\t\treturn prev.concat([curr]);\n\t}, []);\n\n\t// Merge the styling information with the channels / URLs / nicks / text objects and\n\t// generate HTML strings with the resulting fragments\n\treturn merge(parts, styleFragments).map(function (textPart) {\n\t\t// Create HTML strings with styling information\n\t\tvar fragments = textPart.fragments.map(createFragment).join(\"\");\n\n\t\t// Wrap these potentially styled fragments with links and channel buttons\n\t\tif (textPart.link) {\n\t\t\tvar escapedLink = Handlebars.Utils.escapeExpression(textPart.link);\n\t\t\treturn \"<a href=\\\"\" + escapedLink + \"\\\" target=\\\"_blank\\\" rel=\\\"noopener\\\">\" + fragments + \"</a>\";\n\t\t} else if (textPart.channel) {\n\t\t\tvar escapedChannel = Handlebars.Utils.escapeExpression(textPart.channel);\n\t\t\treturn \"<span class=\\\"inline-channel\\\" role=\\\"button\\\" tabindex=\\\"0\\\" data-chan=\\\"\" + escapedChannel + \"\\\">\" + fragments + \"</span>\";\n\t\t} else if (textPart.emoji) {\n\t\t\treturn \"<span class=\\\"emoji\\\">\" + fragments + \"</span>\";\n\t\t} else if (textPart.nick) {\n\t\t\tvar nick = Handlebars.Utils.escapeExpression(textPart.nick);\n\t\t\treturn \"<span role=\\\"button\\\" class=\\\"user \" + colorClass(nick) + \"\\\" data-name=\\\"\" + nick + \"\\\">\" + fragments + \"</span>\";\n\t\t}\n\n\t\treturn fragments;\n\t}).join(\"\");\n};\n\n/***/ }),\n/* 6 */,\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function (a, b, opt) {\n\tif (arguments.length !== 3) {\n\t\tthrow new Error(\"Handlebars helper `equal` expects 3 arguments\");\n\t}\n\n\ta = a.toString();\n\tb = b.toString();\n\n\tif (a === b) {\n\t\treturn opt.fn(this);\n\t}\n\n\treturn opt.inverse(this);\n};\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// This creates a version of `require()` in the context of the current\n// directory, so we iterate over its content, which is a map statically built by\n// Webpack.\n// Second argument says it's recursive, third makes sure we only load templates.\n\nvar requireViews = __webpack_require__(198);\n\nmodule.exports = requireViews.keys().reduce(function (acc, path) {\n\t// We are going to create nested properties on the accumulator object.\n\tvar tmp = acc;\n\n\t// Split path by folders, and create a new property if necessary/\n\t// First 2 characters are \"./\"/\n\t// Last element in the array ends with `.tpl` and needs to be `require`d.\n\tpath.substr(2).split(\"/\").forEach(function (key) {\n\t\tif (key.endsWith(\".tpl\")) {\n\t\t\t//\n\t\t\ttmp[key.substr(0, key.length - 4)] = requireViews(path);\n\t\t} else {\n\t\t\ttmp[key] = tmp[key] || {};\n\t\t}\n\t\ttmp = tmp[key];\n\t});\n\n\treturn acc;\n}, {});\n\n/***/ }),\n/* 9 */,\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function() {\n\treturn function() {};\n};\n\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar $ = __webpack_require__(2);\nvar escape = __webpack_require__(32);\nvar input = $(\"#input\");\n\nvar serverHash = -1;\nvar lastMessageId = -1;\n\nmodule.exports = {\n\tinputCommands: { collapse: collapse, expand: expand, join: join },\n\tfindCurrentNetworkChan: findCurrentNetworkChan,\n\tserverHash: serverHash,\n\tlastMessageId: lastMessageId,\n\tconfirmExit: confirmExit,\n\tforceFocus: forceFocus,\n\tmove: move,\n\tresetHeight: resetHeight,\n\tsetNick: setNick,\n\ttoggleNickEditor: toggleNickEditor,\n\ttoggleNotificationMarkers: toggleNotificationMarkers,\n\trequestIdleCallback: requestIdleCallback,\n\tisOpInChannel: isOpInChannel\n};\n\nfunction findCurrentNetworkChan(name) {\n\tname = name.toLowerCase();\n\n\treturn $(\".network .chan.active\").parent(\".network\").find(\".chan\").filter(function () {\n\t\treturn $(this).data(\"title\").toLowerCase() === name;\n\t}).first();\n}\n\nfunction resetHeight(element) {\n\telement.style.height = element.style.minHeight;\n}\n\n// Given a channel element will determine if the lounge user is Op in that channel\nfunction isOpInChannel(channel) {\n\tvar channelID = channel.data(\"id\");\n\tvar network = $(\"#sidebar .network\").has(\".chan[data-id=\\\"\" + channelID + \"\\\"]\");\n\tvar ownNick = network.data(\"nick\");\n\tvar isOP = channel.find(\".users .user-mode.op .user[data-name=\\\"\" + escape(ownNick) + \"\\\"]\").length;\n\treturn isOP;\n}\n\n// Triggering click event opens the virtual keyboard on mobile\n// This can only be called from another interactive event (e.g. button click)\nfunction forceFocus() {\n\tinput.trigger(\"click\").trigger(\"focus\");\n}\n\nfunction collapse() {\n\t$(\".chan.active .toggle-button.toggle-preview.opened\").click();\n\treturn true;\n}\n\nfunction expand() {\n\t$(\".chan.active .toggle-button.toggle-preview:not(.opened)\").click();\n\treturn true;\n}\n\nfunction join(args) {\n\tvar channel = args[0];\n\tif (channel) {\n\t\tvar chan = findCurrentNetworkChan(channel);\n\t\tif (chan.length) {\n\t\t\tchan.trigger(\"click\");\n\t\t}\n\t}\n}\n\nfunction toggleNickEditor(toggle) {\n\t$(\"#nick\").toggleClass(\"editable\", toggle);\n\t$(\"#nick-value\").prop(\"contenteditable\", toggle);\n}\n\nfunction setNick(nick) {\n\t// Closes the nick editor when canceling, changing channel, or when a nick\n\t// is set in a different tab / browser / device.\n\ttoggleNickEditor(false);\n\n\t$(\"#nick-value\").text(nick);\n}\n\nvar favicon = $(\"#favicon\");\n\nfunction toggleNotificationMarkers(newState) {\n\t// Toggles the favicon to red when there are unread notifications\n\tif (favicon.data(\"toggled\") !== newState) {\n\t\tvar old = favicon.prop(\"href\");\n\t\tfavicon.prop(\"href\", favicon.data(\"other\"));\n\t\tfavicon.data(\"other\", old);\n\t\tfavicon.data(\"toggled\", newState);\n\t}\n\n\t// Toggles a dot on the menu icon when there are unread notifications\n\t$(\"#viewport .lt\").toggleClass(\"notified\", newState);\n}\n\nfunction confirmExit() {\n\tif ($(\"body\").hasClass(\"public\")) {\n\t\twindow.onbeforeunload = function () {\n\t\t\treturn \"Are you sure you want to navigate away from this page?\";\n\t\t};\n\t}\n}\n\nfunction move(array, old_index, new_index) {\n\tif (new_index >= array.length) {\n\t\tvar k = new_index - array.length;\n\t\twhile (k-- + 1) {\n\t\t\tthis.push(undefined);\n\t\t}\n\t}\n\tarray.splice(new_index, 0, array.splice(old_index, 1)[0]);\n\treturn array;\n}\n\nfunction requestIdleCallback(callback, timeout) {\n\tif (window.requestIdleCallback) {\n\t\t// During an idle period the user agent will run idle callbacks in FIFO order\n\t\t// until either the idle period ends or there are no more idle callbacks eligible to be run.\n\t\twindow.requestIdleCallback(callback, { timeout: timeout });\n\t} else {\n\t\tcallback();\n\t}\n}\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar moment = __webpack_require__(0);\n\nmodule.exports = function (time) {\n\treturn moment(time).format(\"D MMMM YYYY, HH:mm:ss\");\n};\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar $ = __webpack_require__(2);\nvar escapeRegExp = __webpack_require__(166);\nvar userStyles = $(\"#user-specified-css\");\nvar storage = __webpack_require__(17);\nvar tz = __webpack_require__(21);\n\nvar windows = $(\"#windows\");\nvar chat = $(\"#chat\");\n\n// Default options\nvar options = {\n\tautocomplete: true,\n\tnickPostfix: \"\",\n\tcoloredNicks: true,\n\tdesktopNotifications: false,\n\thighlights: [],\n\tlinks: true,\n\tmotd: true,\n\tnotification: true,\n\tnotifyAllMessages: false,\n\tshowSeconds: false,\n\tstatusMessages: \"condensed\",\n\ttheme: $(\"#theme\").prop(\"href\").match(/themes\\/(.*?)\\.css$/), // TODO: Make this a data attribute in v3\n\tmedia: true,\n\tuserStyles: userStyles.text()\n};\nvar userOptions = JSON.parse(storage.get(\"settings\")) || {};\n\noptions.theme = options.theme ? options.theme[1] : \"example\"; // TODO: Remove in v3\n\nfor (var key in options) {\n\tif (userOptions[key] !== undefined) {\n\t\toptions[key] = userOptions[key];\n\t}\n}\n\n// Apply custom CSS on page load\nif (typeof userOptions.userStyles === \"string\" && !/[?&]nocss/.test(window.location.search)) {\n\tuserStyles.html(userOptions.userStyles);\n}\n\nuserOptions = null;\n\nmodule.exports = options;\n\n// Due to cyclical dependency, have to require it after exports\nvar autocompletion = __webpack_require__(258);\n\nmodule.exports.shouldOpenMessagePreview = function (type) {\n\treturn type === \"link\" ? options.links : options.media;\n};\n\nmodule.exports.initialize = function () {\n\tmodule.exports.initialize = null;\n\n\tvar settings = $(\"#settings\");\n\n\tfor (var i in options) {\n\t\tif (i === \"userStyles\") {\n\t\t\tsettings.find(\"#user-specified-css-input\").val(options[i]);\n\t\t} else if (i === \"highlights\") {\n\t\t\tsettings.find(\"input[name=\" + i + \"]\").val(options[i]);\n\t\t} else if (i === \"nickPostfix\") {\n\t\t\tsettings.find(\"input[name=\" + i + \"]\").val(options[i]);\n\t\t} else if (i === \"statusMessages\") {\n\t\t\tsettings.find(\"input[name=\" + i + \"][value=\" + options[i] + \"]\").prop(\"checked\", true);\n\t\t} else if (i === \"theme\") {\n\t\t\t$(\"#theme\").prop(\"href\", \"themes/\" + options[i] + \".css\");\n\t\t\tsettings.find(\"select[name=\" + i + \"]\").val(options[i]);\n\t\t} else if (options[i]) {\n\t\t\tsettings.find(\"input[name=\" + i + \"]\").prop(\"checked\", true);\n\t\t}\n\t}\n\n\tvar desktopNotificationsCheckbox = $(\"#desktopNotifications\");\n\tvar warningUnsupported = $(\"#warnUnsupportedDesktopNotifications\");\n\tvar warningBlocked = $(\"#warnBlockedDesktopNotifications\").hide();\n\n\t// Updates the checkbox and warning in settings when the Settings page is\n\t// opened or when the checkbox state is changed.\n\t// When notifications are not supported, this is never called (because\n\t// checkbox state can not be changed).\n\tvar updateDesktopNotificationStatus = function updateDesktopNotificationStatus() {\n\t\tif (Notification.permission === \"denied\") {\n\t\t\tdesktopNotificationsCheckbox.prop(\"disabled\", true);\n\t\t\tdesktopNotificationsCheckbox.prop(\"checked\", false);\n\t\t\twarningBlocked.show();\n\t\t} else {\n\t\t\tif (Notification.permission === \"default\" && desktopNotificationsCheckbox.prop(\"checked\")) {\n\t\t\t\tdesktopNotificationsCheckbox.prop(\"checked\", false);\n\t\t\t}\n\t\t\tdesktopNotificationsCheckbox.prop(\"disabled\", false);\n\t\t\twarningBlocked.hide();\n\t\t}\n\t};\n\n\t// If browser does not support notifications, override existing settings and\n\t// display proper message in settings.\n\tif (\"Notification\" in window) {\n\t\twarningUnsupported.hide();\n\t\twindows.on(\"show\", \"#settings\", updateDesktopNotificationStatus);\n\t} else {\n\t\toptions.desktopNotifications = false;\n\t\tdesktopNotificationsCheckbox.prop(\"disabled\", true);\n\t\tdesktopNotificationsCheckbox.prop(\"checked\", false);\n\t}\n\n\tsettings.on(\"change\", \"input, select, textarea\", function () {\n\t\tvar self = $(this);\n\t\tvar type = self.prop(\"type\");\n\t\tvar name = self.prop(\"name\");\n\n\t\tif (type === \"password\") {\n\t\t\treturn;\n\t\t} else if (type === \"radio\") {\n\t\t\tif (self.prop(\"checked\")) {\n\t\t\t\toptions[name] = self.val();\n\t\t\t}\n\t\t} else if (type === \"checkbox\") {\n\t\t\toptions[name] = self.prop(\"checked\");\n\t\t} else {\n\t\t\toptions[name] = self.val();\n\t\t}\n\n\t\tstorage.set(\"settings\", JSON.stringify(options));\n\n\t\tif (name === \"motd\") {\n\t\t\tchat.toggleClass(\"hide-\" + name, !self.prop(\"checked\"));\n\t\t} else if (name === \"statusMessages\") {\n\t\t\tchat.toggleClass(\"hide-status-messages\", options[name] === \"hidden\");\n\t\t\tchat.toggleClass(\"condensed-status-messages\", options[name] === \"condensed\");\n\t\t} else if (name === \"coloredNicks\") {\n\t\t\tchat.toggleClass(\"colored-nicks\", self.prop(\"checked\"));\n\t\t} else if (name === \"theme\") {\n\t\t\t$(\"#theme\").prop(\"href\", \"themes/\" + options[name] + \".css\");\n\t\t} else if (name === \"userStyles\") {\n\t\t\tuserStyles.html(options[name]);\n\t\t} else if (name === \"highlights\") {\n\t\t\tvar highlightString = options[name];\n\t\t\toptions.highlights = highlightString.split(\",\").map(function (h) {\n\t\t\t\treturn h.trim();\n\t\t\t}).filter(function (h) {\n\t\t\t\t// Ensure we don't have empty string in the list of highlights\n\t\t\t\t// otherwise, users get notifications for everything\n\t\t\t\treturn h !== \"\";\n\t\t\t});\n\t\t\t// Construct regex with wordboundary for every highlight item\n\t\t\tvar highlightsTokens = options.highlights.map(function (h) {\n\t\t\t\treturn escapeRegExp(h);\n\t\t\t});\n\t\t\tif (highlightsTokens && highlightsTokens.length) {\n\t\t\t\tmodule.exports.highlightsRE = new RegExp(\"\\\\b(?:\" + highlightsTokens.join(\"|\") + \")\\\\b\", \"i\");\n\t\t\t} else {\n\t\t\t\tmodule.exports.highlightsRE = null;\n\t\t\t}\n\t\t} else if (name === \"nickPostfix\") {\n\t\t\toptions.nickPostfix = options[name];\n\t\t} else if (name === \"showSeconds\") {\n\t\t\tchat.find(\".msg > .time\").each(function () {\n\t\t\t\t$(this).text(tz($(this).parent().data(\"time\")));\n\t\t\t});\n\t\t\tchat.toggleClass(\"show-seconds\", self.prop(\"checked\"));\n\t\t} else if (name === \"autocomplete\") {\n\t\t\tif (self.prop(\"checked\")) {\n\t\t\t\tautocompletion.enable();\n\t\t\t} else {\n\t\t\t\tautocompletion.disable();\n\t\t\t}\n\t\t} else if (name === \"desktopNotifications\") {\n\t\t\tif ($(this).prop(\"checked\") && Notification.permission !== \"granted\") {\n\t\t\t\tNotification.requestPermission(updateDesktopNotificationStatus);\n\t\t\t}\n\t\t}\n\t}).find(\"input\").trigger(\"change\");\n};\n\n/***/ }),\n/* 14 */,\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar $ = __webpack_require__(2);\nvar templates = __webpack_require__(8);\nvar options = __webpack_require__(13);\nvar renderPreview = __webpack_require__(185);\nvar utils = __webpack_require__(11);\nvar sorting = __webpack_require__(307);\nvar constants = __webpack_require__(24);\nvar condensed = __webpack_require__(186);\nvar JoinChannel = __webpack_require__(187);\nvar helpers_parse = __webpack_require__(5);\n\nvar chat = $(\"#chat\");\nvar sidebar = $(\"#sidebar\");\n\n__webpack_require__(309);\n\nvar historyObserver = window.IntersectionObserver ? new window.IntersectionObserver(loadMoreHistory, {\n\troot: chat.get(0)\n}) : null;\n\nmodule.exports = {\n\tappendMessage: appendMessage,\n\tbuildChannelMessages: buildChannelMessages,\n\trenderChannel: renderChannel,\n\trenderChannelUsers: renderChannelUsers,\n\trenderNetworks: renderNetworks,\n\ttrimMessageInChannel: trimMessageInChannel\n};\n\nfunction buildChannelMessages(container, chanId, chanType, messages) {\n\treturn messages.reduce(function (docFragment, message) {\n\t\tappendMessage(docFragment, chanId, chanType, message);\n\t\treturn docFragment;\n\t}, container);\n}\n\nfunction appendMessage(container, chanId, chanType, msg) {\n\tif (utils.lastMessageId < msg.id) {\n\t\tutils.lastMessageId = msg.id;\n\t}\n\n\tvar lastChild = container.children(\".msg, .date-marker-container\").last();\n\tvar renderedMessage = buildChatMessage(msg);\n\n\t// Check if date changed\n\tvar msgTime = new Date(msg.time);\n\tvar prevMsgTime = new Date(lastChild.data(\"time\"));\n\n\t// Insert date marker if date changed compared to previous message\n\tif (prevMsgTime.toDateString() !== msgTime.toDateString()) {\n\t\tlastChild = $(templates.date_marker({ time: msg.time }));\n\t\tcontainer.append(lastChild);\n\t}\n\n\t// If current window is not a channel or this message is not condensable,\n\t// then just append the message to container and be done with it\n\tif (constants.condensedTypes.indexOf(msg.type) === -1 || chanType !== \"channel\") {\n\t\tcontainer.append(renderedMessage);\n\t\treturn;\n\t}\n\n\tvar obj = {};\n\tobj[msg.type] = 1;\n\n\t// If the previous message is already condensed,\n\t// we just append to it and update text\n\tif (lastChild.hasClass(\"condensed\")) {\n\t\tlastChild.append(renderedMessage);\n\t\tcondensed.updateText(lastChild, obj);\n\t\treturn;\n\t}\n\n\t// Always create a condensed container\n\tvar newCondensed = $(templates.msg_condensed({ time: msg.time }));\n\n\tcondensed.updateText(newCondensed, obj);\n\tnewCondensed.append(renderedMessage);\n\tcontainer.append(newCondensed);\n}\n\nfunction buildChatMessage(msg) {\n\tvar type = msg.type;\n\tvar template = \"msg\";\n\n\t// See if any of the custom highlight regexes match\n\tif (!msg.highlight && !msg.self && options.highlightsRE && (type === \"message\" || type === \"notice\") && options.highlightsRE.exec(msg.text)) {\n\t\tmsg.highlight = true;\n\t}\n\n\tif (constants.actionTypes.indexOf(type) !== -1) {\n\t\tmsg.template = \"actions/\" + type;\n\t\ttemplate = \"msg_action\";\n\t} else if (type === \"unhandled\") {\n\t\ttemplate = \"msg_unhandled\";\n\t}\n\n\tvar renderedMessage = $(templates[template](msg));\n\tvar content = renderedMessage.find(\".content\");\n\n\tif (template === \"msg_action\") {\n\t\tcontent.html(templates.actions[type](msg));\n\t}\n\n\tmsg.previews.forEach(function (preview) {\n\t\trenderPreview(preview, renderedMessage);\n\t});\n\n\treturn renderedMessage;\n}\n\nfunction renderChannel(data) {\n\trenderChannelMessages(data);\n\n\tif (data.type === \"channel\") {\n\t\trenderChannelUsers(data);\n\t}\n\n\tif (historyObserver) {\n\t\thistoryObserver.observe(chat.find(\"#chan-\" + data.id + \" .show-more\").get(0));\n\t}\n}\n\nfunction renderChannelMessages(data) {\n\tvar documentFragment = buildChannelMessages($(document.createDocumentFragment()), data.id, data.type, data.messages);\n\tvar channel = chat.find(\"#chan-\" + data.id + \" .messages\").append(documentFragment);\n\n\trenderUnreadMarker($(templates.unread_marker()), data.firstUnread, channel);\n}\n\nfunction renderUnreadMarker(template, firstUnread, channel) {\n\tif (firstUnread > 0) {\n\t\tvar first = channel.find(\"#msg-\" + firstUnread);\n\n\t\tif (!first.length) {\n\t\t\ttemplate.data(\"unread-id\", firstUnread);\n\t\t\tchannel.prepend(template);\n\t\t} else {\n\t\t\tvar parent = first.parent();\n\n\t\t\tif (parent.hasClass(\"condensed\")) {\n\t\t\t\tfirst = parent;\n\t\t\t}\n\n\t\t\tfirst.before(template);\n\t\t}\n\t} else {\n\t\tchannel.append(template);\n\t}\n}\n\nfunction renderChannelUsers(data) {\n\tvar users = chat.find(\"#chan-\" + data.id).find(\".users\");\n\tvar nicks = data.users.concat() // Make a copy of the user list, sort is applied in-place\n\t.sort(function (a, b) {\n\t\treturn b.lastMessage - a.lastMessage;\n\t}).map(function (a) {\n\t\treturn a.nick;\n\t});\n\n\tvar search = users.find(\".search\").prop(\"placeholder\", nicks.length + \" \" + (nicks.length === 1 ? \"user\" : \"users\"));\n\n\tusers.data(\"nicks\", nicks).find(\".names-original\").html(templates.user(data));\n\n\t// Refresh user search\n\tif (search.val().length) {\n\t\tsearch.trigger(\"input\");\n\t}\n}\n\nfunction renderNetworks(data, singleNetwork) {\n\tsidebar.find(\".empty\").hide();\n\tsidebar.find(\".networks\").append(templates.network({\n\t\tnetworks: data.networks\n\t}));\n\n\t// Add keyboard handlers to the \"Join a channel…\" form inputs/button\n\tJoinChannel.handleKeybinds();\n\n\tvar newChannels = void 0;\n\tvar channels = $.map(data.networks, function (n) {\n\t\treturn n.channels;\n\t});\n\n\tif (!singleNetwork && utils.lastMessageId > -1) {\n\t\tnewChannels = [];\n\n\t\tchannels.forEach(function (channel) {\n\t\t\tvar chan = $(\"#chan-\" + channel.id);\n\n\t\t\tif (chan.length > 0) {\n\t\t\t\tif (chan.data(\"type\") === \"channel\") {\n\t\t\t\t\tchan.data(\"needsNamesRefresh\", true).find(\".header .topic\").html(helpers_parse(channel.topic)).prop(\"title\", channel.topic);\n\t\t\t\t}\n\n\t\t\t\tif (channel.messages.length > 0) {\n\t\t\t\t\tvar container = chan.find(\".messages\");\n\t\t\t\t\tbuildChannelMessages(container, channel.id, channel.type, channel.messages);\n\n\t\t\t\t\tvar unreadMarker = container.find(\".unread-marker\").data(\"unread-id\", 0);\n\t\t\t\t\trenderUnreadMarker(unreadMarker, channel.firstUnread, container);\n\n\t\t\t\t\tif (container.find(\".msg\").length >= 100) {\n\t\t\t\t\t\tcontainer.find(\".show-more\").addClass(\"show\");\n\t\t\t\t\t}\n\n\t\t\t\t\tcontainer.trigger(\"keepToBottom\");\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tnewChannels.push(channel);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tnewChannels = channels;\n\t}\n\n\tif (newChannels.length > 0) {\n\t\tchat.append(templates.chat({\n\t\t\tchannels: newChannels\n\t\t}));\n\n\t\tnewChannels.forEach(function (channel) {\n\t\t\trenderChannel(channel);\n\n\t\t\tif (channel.type === \"channel\") {\n\t\t\t\tchat.find(\"#chan-\" + channel.id).data(\"needsNamesRefresh\", true);\n\t\t\t}\n\t\t});\n\t}\n\n\tutils.confirmExit();\n\tsorting();\n\n\tif (sidebar.find(\".highlight\").length) {\n\t\tutils.toggleNotificationMarkers(true);\n\t}\n}\n\nfunction trimMessageInChannel(channel, messageLimit) {\n\tvar messages = channel.find(\".messages .msg\").slice(0, -messageLimit);\n\n\tif (messages.length === 0) {\n\t\treturn;\n\t}\n\n\tmessages.remove();\n\n\tchannel.find(\".show-more\").addClass(\"show\");\n\n\t// Remove date-separators that would otherwise be \"stuck\" at the top of the channel\n\tchannel.find(\".date-marker-container\").each(function () {\n\t\tif ($(this).next().hasClass(\"date-marker-container\")) {\n\t\t\t$(this).remove();\n\t\t}\n\t});\n}\n\nfunction loadMoreHistory(entries) {\n\tentries.forEach(function (entry) {\n\t\tif (!entry.isIntersecting) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar target = $(entry.target).find(\".show-more-button\");\n\n\t\tif (target.prop(\"disabled\")) {\n\t\t\treturn;\n\t\t}\n\n\t\ttarget.trigger(\"click\");\n\t});\n}\n\n/***/ }),\n/* 16 */,\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = {\n\tset: function set(key, value) {\n\t\ttry {\n\t\t\twindow.localStorage.setItem(key, value);\n\t\t} catch (e) {\n\t\t\t// Do nothing. If we end up here, web storage quota exceeded, or user is\n\t\t\t// in Safari's private browsing where localStorage's setItem is not\n\t\t\t// available. See http://stackoverflow.com/q/14555347/1935861.\n\t\t}\n\t},\n\tget: function get(key) {\n\t\treturn window.localStorage.getItem(key);\n\t},\n\tremove: function remove(key, value) {\n\t\twindow.localStorage.removeItem(key, value);\n\t}\n};\n\n/***/ }),\n/* 18 */,\n/* 19 */,\n/* 20 */,\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar moment = __webpack_require__(0);\nvar constants = __webpack_require__(24);\n\nmodule.exports = function (time) {\n\tvar options = __webpack_require__(13);\n\tvar format = options.showSeconds ? constants.timeFormats.msgWithSeconds : constants.timeFormats.msgDefault;\n\treturn moment(time).format(format);\n};\n\n/***/ }),\n/* 22 */,\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar escape = __webpack_require__(32);\n\nmodule.exports = function (orig) {\n\treturn escape(orig.toLowerCase());\n};\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar colorCodeMap = [[\"00\", \"White\"], [\"01\", \"Black\"], [\"02\", \"Blue\"], [\"03\", \"Green\"], [\"04\", \"Red\"], [\"05\", \"Brown\"], [\"06\", \"Magenta\"], [\"07\", \"Orange\"], [\"08\", \"Yellow\"], [\"09\", \"Light Green\"], [\"10\", \"Cyan\"], [\"11\", \"Light Cyan\"], [\"12\", \"Light Blue\"], [\"13\", \"Pink\"], [\"14\", \"Grey\"], [\"15\", \"Light Grey\"]];\n\nvar commands = [\"/as\", \"/away\", \"/back\", \"/ban\", \"/banlist\", \"/bs\", \"/close\", \"/collapse\", \"/connect\", \"/cs\", \"/ctcp\", \"/cycle\", \"/deop\", \"/devoice\", \"/disconnect\", \"/expand\", \"/ho\", \"/hs\", \"/invite\", \"/join\", \"/kick\", \"/leave\", \"/list\", \"/me\", \"/mode\", \"/ms\", \"/msg\", \"/nick\", \"/notice\", \"/ns\", \"/op\", \"/os\", \"/part\", \"/query\", \"/quit\", \"/raw\", \"/rejoin\", \"/rs\", \"/say\", \"/send\", \"/server\", \"/slap\", \"/topic\", \"/unban\", \"/voice\", \"/whois\"];\n\nvar actionTypes = [\"away\", \"back\", \"ban_list\", \"invite\", \"join\", \"mode\", \"kick\", \"nick\", \"part\", \"quit\", \"topic\", \"topic_set_by\", \"action\", \"whois\", \"ctcp\", \"chghost\", \"channel_list\"];\n\nvar condensedTypes = [\"away\", \"back\", \"chghost\", \"join\", \"part\", \"quit\", \"nick\", \"kick\", \"mode\"];\n\nvar timeFormats = {\n\tmsgDefault: \"HH:mm\",\n\tmsgWithSeconds: \"HH:mm:ss\"\n};\n\nmodule.exports = {\n\tcolorCodeMap: colorCodeMap,\n\tcommands: commands,\n\tcondensedTypes: condensedTypes,\n\tcondensedTypesQuery: \".\" + condensedTypes.join(\", .\"),\n\tactionTypes: actionTypes,\n\ttimeFormats: timeFormats\n};\n\n/***/ }),\n/* 25 */,\n/* 26 */,\n/* 27 */,\n/* 28 */,\n/* 29 */,\n/* 30 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar $ = __webpack_require__(2);\nvar storage = __webpack_require__(17);\nvar socket = __webpack_require__(3);\n\nvar pushNotificationsButton = void 0;\nvar clientSubscribed = null;\nvar applicationServerKey = void 0;\n\nif (\"serviceWorker\" in navigator) {\n\tnavigator.serviceWorker.addEventListener(\"message\", function (event) {\n\t\tif (event.data && event.data.type === \"open\") {\n\t\t\t$(\"#sidebar\").find(\".chan[data-target=\\\"#\" + event.data.channel + \"\\\"]\").trigger(\"click\");\n\t\t}\n\t});\n}\n\nmodule.exports.hasServiceWorker = false;\n\nmodule.exports.configurePushNotifications = function (subscribedOnServer, key) {\n\tapplicationServerKey = key;\n\n\t// If client has push registration but the server knows nothing about it,\n\t// this subscription is broken and client has to register again\n\tif (clientSubscribed === true && subscribedOnServer === false) {\n\t\tpushNotificationsButton.prop(\"disabled\", true);\n\n\t\tnavigator.serviceWorker.ready.then(function (registration) {\n\t\t\treturn registration.pushManager.getSubscription();\n\t\t}).then(function (subscription) {\n\t\t\treturn subscription && subscription.unsubscribe();\n\t\t}).then(function (successful) {\n\t\t\tif (successful) {\n\t\t\t\talternatePushButton().prop(\"disabled\", false);\n\t\t\t}\n\t\t});\n\t}\n};\n\nmodule.exports.initialize = function () {\n\tpushNotificationsButton = $(\"#pushNotifications\");\n\n\tif (!isAllowedServiceWorkersHost()) {\n\t\treturn;\n\t}\n\n\t$(\"#pushNotificationsHttps\").hide();\n\n\tif (\"serviceWorker\" in navigator) {\n\t\tnavigator.serviceWorker.register(\"service-worker.js\").then(function (registration) {\n\t\t\tmodule.exports.hasServiceWorker = true;\n\n\t\t\tif (!registration.pushManager) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\treturn registration.pushManager.getSubscription().then(function (subscription) {\n\t\t\t\t$(\"#pushNotificationsUnsupported\").hide();\n\n\t\t\t\tpushNotificationsButton.prop(\"disabled\", false).on(\"click\", onPushButton);\n\n\t\t\t\tclientSubscribed = !!subscription;\n\n\t\t\t\tif (clientSubscribed) {\n\t\t\t\t\talternatePushButton();\n\t\t\t\t}\n\t\t\t});\n\t\t}).catch(function (err) {\n\t\t\t$(\"#pushNotificationsUnsupported span\").text(err);\n\t\t});\n\t}\n};\n\nfunction onPushButton() {\n\tpushNotificationsButton.prop(\"disabled\", true);\n\n\tnavigator.serviceWorker.ready.then(function (registration) {\n\t\treturn registration.pushManager.getSubscription().then(function (existingSubscription) {\n\t\t\tif (existingSubscription) {\n\t\t\t\tsocket.emit(\"push:unregister\");\n\n\t\t\t\treturn existingSubscription.unsubscribe();\n\t\t\t}\n\n\t\t\treturn registration.pushManager.subscribe({\n\t\t\t\tapplicationServerKey: urlBase64ToUint8Array(applicationServerKey),\n\t\t\t\tuserVisibleOnly: true\n\t\t\t}).then(function (subscription) {\n\t\t\t\tvar rawKey = subscription.getKey ? subscription.getKey(\"p256dh\") : \"\";\n\t\t\t\tvar key = rawKey ? window.btoa(String.fromCharCode.apply(null, new Uint8Array(rawKey))) : \"\";\n\t\t\t\tvar rawAuthSecret = subscription.getKey ? subscription.getKey(\"auth\") : \"\";\n\t\t\t\tvar authSecret = rawAuthSecret ? window.btoa(String.fromCharCode.apply(null, new Uint8Array(rawAuthSecret))) : \"\";\n\n\t\t\t\tsocket.emit(\"push:register\", {\n\t\t\t\t\ttoken: storage.get(\"token\"),\n\t\t\t\t\tendpoint: subscription.endpoint,\n\t\t\t\t\tkeys: {\n\t\t\t\t\t\tp256dh: key,\n\t\t\t\t\t\tauth: authSecret\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn true;\n\t\t\t});\n\t\t}).then(function (successful) {\n\t\t\tif (successful) {\n\t\t\t\talternatePushButton().prop(\"disabled\", false);\n\t\t\t}\n\t\t});\n\t}).catch(function (err) {\n\t\t$(\"#pushNotificationsUnsupported\").find(\"span\").text(\"An error has occured: \" + err).end().show();\n\t});\n\n\treturn false;\n}\n\nfunction alternatePushButton() {\n\tvar text = pushNotificationsButton.text();\n\n\treturn pushNotificationsButton.text(pushNotificationsButton.data(\"text-alternate\")).data(\"text-alternate\", text);\n}\n\nfunction urlBase64ToUint8Array(base64String) {\n\tvar padding = \"=\".repeat((4 - base64String.length % 4) % 4);\n\tvar base64 = (base64String + padding).replace(/-/g, \"+\").replace(/_/g, \"/\");\n\n\tvar rawData = window.atob(base64);\n\tvar outputArray = new Uint8Array(rawData.length);\n\n\tfor (var i = 0; i < rawData.length; ++i) {\n\t\toutputArray[i] = rawData.charCodeAt(i);\n\t}\n\n\treturn outputArray;\n}\n\nfunction isAllowedServiceWorkersHost() {\n\treturn location.protocol === \"https:\" || location.hostname === \"localhost\" || location.hostname === \"127.0.0.1\";\n}\n\n/***/ }),\n/* 31 */,\n/* 32 */,\n/* 33 */,\n/* 34 */,\n/* 35 */,\n/* 36 */,\n/* 37 */,\n/* 38 */,\n/* 39 */,\n/* 40 */,\n/* 41 */,\n/* 42 */,\n/* 43 */,\n/* 44 */,\n/* 45 */,\n/* 46 */,\n/* 47 */,\n/* 48 */,\n/* 49 */,\n/* 50 */,\n/* 51 */,\n/* 52 */,\n/* 53 */,\n/* 54 */,\n/* 55 */,\n/* 56 */,\n/* 57 */,\n/* 58 */,\n/* 59 */,\n/* 60 */,\n/* 61 */,\n/* 62 */,\n/* 63 */,\n/* 64 */,\n/* 65 */,\n/* 66 */,\n/* 67 */,\n/* 68 */,\n/* 69 */,\n/* 70 */,\n/* 71 */,\n/* 72 */,\n/* 73 */,\n/* 74 */,\n/* 75 */,\n/* 76 */,\n/* 77 */,\n/* 78 */,\n/* 79 */,\n/* 80 */,\n/* 81 */,\n/* 82 */,\n/* 83 */,\n/* 84 */,\n/* 85 */,\n/* 86 */,\n/* 87 */,\n/* 88 */,\n/* 89 */,\n/* 90 */,\n/* 91 */,\n/* 92 */,\n/* 93 */,\n/* 94 */,\n/* 95 */,\n/* 96 */,\n/* 97 */,\n/* 98 */,\n/* 99 */,\n/* 100 */,\n/* 101 */,\n/* 102 */,\n/* 103 */,\n/* 104 */,\n/* 105 */,\n/* 106 */,\n/* 107 */,\n/* 108 */,\n/* 109 */,\n/* 110 */,\n/* 111 */,\n/* 112 */,\n/* 113 */,\n/* 114 */,\n/* 115 */,\n/* 116 */,\n/* 117 */,\n/* 118 */,\n/* 119 */,\n/* 120 */,\n/* 121 */,\n/* 122 */,\n/* 123 */,\n/* 124 */,\n/* 125 */,\n/* 126 */,\n/* 127 */,\n/* 128 */,\n/* 129 */,\n/* 130 */,\n/* 131 */,\n/* 132 */,\n/* 133 */,\n/* 134 */,\n/* 135 */,\n/* 136 */,\n/* 137 */,\n/* 138 */,\n/* 139 */,\n/* 140 */,\n/* 141 */,\n/* 142 */,\n/* 143 */,\n/* 144 */,\n/* 145 */,\n/* 146 */,\n/* 147 */,\n/* 148 */,\n/* 149 */,\n/* 150 */,\n/* 151 */,\n/* 152 */,\n/* 153 */,\n/* 154 */,\n/* 155 */,\n/* 156 */,\n/* 157 */,\n/* 158 */,\n/* 159 */,\n/* 160 */,\n/* 161 */,\n/* 162 */,\n/* 163 */,\n/* 164 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// Generates a string from \"color-1\" to \"color-32\" based on an input string\n\nmodule.exports = function (str) {\n\tvar hash = 0;\n\tfor (var i = 0; i < str.length; i++) {\n\t\thash += str.charCodeAt(i);\n\t}\n\n\treturn \"color-\" + (1 + hash % 32);\n};\n\n/***/ }),\n/* 165 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// Return true if any section of \"a\" or \"b\" parts (defined by their start/end\n// markers) intersect each other, false otherwise.\n\nfunction anyIntersection(a, b) {\n\treturn a.start <= b.start && b.start < a.end || a.start < b.end && b.end <= a.end || b.start <= a.start && a.start < b.end || b.start < a.end && a.end <= b.end;\n}\n\nmodule.exports = anyIntersection;\n\n/***/ }),\n/* 166 */,\n/* 167 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function (a, b, opt) {\n\tif (arguments.length !== 3) {\n\t\tthrow new Error(\"Handlebars helper `notEqual` expects 3 arguments\");\n\t}\n\n\ta = a.toString();\n\tb = b.toString();\n\n\tif (a !== b) {\n\t\treturn opt.fn(this);\n\t}\n\n\tif (opt.inverse(this) !== \"\") {\n\t\tthrow new Error(\"Handlebars helper `notEqual` does not take an `else` block\");\n\t}\n};\n\n/***/ }),\n/* 168 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar Handlebars = __webpack_require__(1);\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, alias3=depth0 != null ? depth0 : (container.nullContext || {});\n\n return \"<div data-id=\\\"\"\n + alias2(alias1((depth0 != null ? depth0.id : depth0), depth0))\n + \"\\\" data-target=\\\"#chan-\"\n + alias2(alias1((depth0 != null ? depth0.id : depth0), depth0))\n + \"\\\" data-title=\\\"\"\n + alias2(alias1((depth0 != null ? depth0.name : depth0), depth0))\n + \"\\\" class=\\\"chan \"\n + alias2(alias1((depth0 != null ? depth0.type : depth0), depth0))\n + \" chan-\"\n + alias2(__default(__webpack_require__(23)).call(alias3,(depth0 != null ? depth0.name : depth0),{\"name\":\"slugify\",\"hash\":{},\"data\":data}))\n + \"\\\">\\n\"\n + ((stack1 = __default(__webpack_require__(7)).call(alias3,(depth0 != null ? depth0.type : depth0),\"lobby\",{\"name\":\"equal\",\"hash\":{},\"fn\":container.program(2, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t<span class=\\\"badge\"\n + ((stack1 = helpers[\"if\"].call(alias3,(depth0 != null ? depth0.highlight : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\\">\"\n + ((stack1 = helpers[\"if\"].call(alias3,(depth0 != null ? depth0.unread : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(6, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"</span>\\n\"\n + ((stack1 = __default(__webpack_require__(167)).call(alias3,(depth0 != null ? depth0.type : depth0),\"lobby\",{\"name\":\"notEqual\",\"hash\":{},\"fn\":container.program(8, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t<span class=\\\"name\\\" title=\\\"\"\n + alias2(alias1((depth0 != null ? depth0.name : depth0), depth0))\n + \"\\\">\"\n + alias2(alias1((depth0 != null ? depth0.name : depth0), depth0))\n + \"</span>\\n</div>\\n\"\n + ((stack1 = __default(__webpack_require__(7)).call(alias3,(depth0 != null ? depth0.type : depth0),\"lobby\",{\"name\":\"equal\",\"hash\":{},\"fn\":container.program(10, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"2\":function(container,depth0,helpers,partials,data) {\n return \"\t\t<span class=\\\"add-channel-tooltip tooltipped tooltipped-w tooltipped-no-touch\\\" aria-label=\\\"Join a channel…\\\" data-alt-label=\\\"Cancel\\\">\\n\t\t\t<button class=\\\"add-channel\\\" aria-label=\\\"Join a channel…\\\" data-id=\\\"\"\n + container.escapeExpression(container.lambda((depth0 != null ? depth0.id : depth0), depth0))\n + \"\\\"></button>\\n\t\t</span>\\n\";\n},\"4\":function(container,depth0,helpers,partials,data) {\n return \" highlight\";\n},\"6\":function(container,depth0,helpers,partials,data) {\n return container.escapeExpression(__default(__webpack_require__(169)).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.unread : depth0),{\"name\":\"roundBadgeNumber\",\"hash\":{},\"data\":data}));\n},\"8\":function(container,depth0,helpers,partials,data) {\n return \"\t\t<span class=\\\"close-tooltip tooltipped tooltipped-w\\\" aria-label=\\\"Close\\\">\\n\t\t\t<button class=\\\"close\\\" aria-label=\\\"Close\\\"></button>\\n\t\t</span>\\n\";\n},\"10\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = container.invokePartial(__webpack_require__(170),depth0,{\"name\":\"join_channel\",\"data\":data,\"indent\":\"\\t\",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.channels : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"usePartial\":true,\"useData\":true});\n\n/***/ }),\n/* 169 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function (count) {\n\tif (count < 1000) {\n\t\treturn count.toString();\n\t}\n\n\treturn (count / 1000).toFixed(2).slice(0, -1) + \"k\";\n};\n\n/***/ }),\n/* 170 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar Handlebars = __webpack_require__(1);\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"<form id=\\\"join-channel-\"\n + alias4(((helper = (helper = helpers.id || (depth0 != null ? depth0.id : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"id\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" class=\\\"join-form\\\" method=\\\"post\\\" action=\\\"\\\" autocomplete=\\\"off\\\">\\n\t<input type=\\\"text\\\" class=\\\"input\\\" name=\\\"channel\\\" placeholder=\\\"Channel\\\" pattern=\\\"[^\\\\s]+\\\" maxlength=\\\"200\\\" title=\\\"The channel name may not contain spaces\\\" required>\\n\t<input type=\\\"password\\\" class=\\\"input\\\" name=\\\"key\\\" placeholder=\\\"Password (optional)\\\" pattern=\\\"[^\\\\s]+\\\" maxlength=\\\"200\\\" title=\\\"The channel password may not contain spaces\\\" autocomplete=\\\"new-password\\\">\\n\t<button type=\\\"submit\\\" class=\\\"btn btn-small\\\" data-id=\\\"\"\n + alias4(((helper = (helper = helpers.id || (depth0 != null ? depth0.id : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"id\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">Join</button>\\n</form>\\n\";\n},\"useData\":true});\n\n/***/ }),\n/* 171 */,\n/* 172 */,\n/* 173 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar diff;\n\nmodule.exports = function (a, opt) {\n\tif (a !== diff) {\n\t\tdiff = a;\n\t\treturn opt.fn(this);\n\t}\n\n\treturn opt.inverse(this);\n};\n\n/***/ }),\n/* 174 */,\n/* 175 */,\n/* 176 */,\n/* 177 */,\n/* 178 */,\n/* 179 */,\n/* 180 */,\n/* 181 */,\n/* 182 */,\n/* 183 */,\n/* 184 */,\n/* 185 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar $ = __webpack_require__(2);\nvar options = __webpack_require__(13);\nvar socket = __webpack_require__(3);\nvar templates = __webpack_require__(8);\nvar chat = $(\"#chat\");\nvar input = $(\"#input\");\nvar Mousetrap = __webpack_require__(25);\n\nmodule.exports = renderPreview;\n\nfunction renderPreview(preview, msg) {\n\tif (preview.type === \"loading\") {\n\t\treturn;\n\t}\n\n\tpreview.shown = preview.shown && options.shouldOpenMessagePreview(preview.type);\n\n\tvar template = $(templates.msg_preview({ preview: preview }));\n\tvar image = template.find(\"img:first\");\n\n\tif (image.length === 0) {\n\t\treturn appendPreview(preview, msg, template);\n\t}\n\n\t// If there is an image in preview, wait for it to load before appending it to DOM\n\t// This is done to prevent problems keeping scroll to the bottom while images load\n\timage.on(\"load.preview\", function () {\n\t\timage.off(\".preview\");\n\n\t\tappendPreview(preview, msg, template);\n\t});\n\n\t// If the image fails to load, remove it from DOM and still render the preview\n\tif (preview.type === \"link\") {\n\t\timage.on(\"abort.preview error.preview\", function () {\n\t\t\timage.parent().remove();\n\n\t\t\tappendPreview(preview, msg, template);\n\t\t});\n\t}\n}\n\nfunction appendPreview(preview, msg, template) {\n\tvar escapedLink = preview.link.replace(/[\"\\\\]/g, \"\\\\$&\");\n\tvar previewContainer = msg.find(\".preview[data-url=\\\"\" + escapedLink + \"\\\"]\");\n\n\t// This is to fix a very rare case of rendering a preview twice\n\t// This happens when a very large amount of messages is being sent to the client\n\t// and they get queued, so the `preview` object on the server has time to load before\n\t// it actually gets sent to the server, which makes the loaded preview sent twice,\n\t// once in `msg` and another in `msg:preview`\n\tif (!previewContainer.is(\":empty\")) {\n\t\treturn;\n\t}\n\n\tvar container = msg.closest(\".messages\");\n\tvar channelId = container.closest(\".chan\").data(\"id\") || -1;\n\tvar activeChannelId = chat.find(\".chan.active\").data(\"id\") || -2;\n\n\tmsg.find(\".text a[href=\\\"\" + escapedLink + \"\\\"]\").first().after(templates.msg_preview_toggle({ preview: preview }).trim());\n\n\tpreviewContainer.append(template);\n\n\tif (activeChannelId === channelId) {\n\t\tcontainer.trigger(\"keepToBottom\");\n\t}\n}\n\n$(\"#chat\").on(\"click\", \".text .toggle-button\", function () {\n\tvar self = $(this);\n\tvar container = self.closest(\".chat\");\n\tvar content = self.closest(\".content\").find(\".preview[data-url=\\\"\" + self.data(\"url\") + \"\\\"] .toggle-content\");\n\tvar bottom = container.isScrollBottom();\n\n\tself.toggleClass(\"opened\");\n\tcontent.toggleClass(\"show\");\n\n\t// Tell the server we're toggling so it remembers at page reload\n\t// TODO Avoid sending many single events when using `/collapse` or `/expand`\n\t// See https://github.com/thelounge/lounge/issues/1377\n\tsocket.emit(\"msg:preview:toggle\", {\n\t\ttarget: parseInt(self.closest(\".chan\").data(\"id\"), 10),\n\t\tmsgId: parseInt(self.closest(\".msg\").prop(\"id\").replace(\"msg-\", \"\"), 10),\n\t\tlink: self.data(\"url\"),\n\t\tshown: content.hasClass(\"show\")\n\t});\n\n\t// If scrollbar was at the bottom before toggling the preview, keep it at the bottom\n\tif (bottom) {\n\t\tcontainer.scrollBottom();\n\t}\n});\n\n/* Image viewer */\n\nvar imageViewer = $(\"#image-viewer\");\n\n$(\"#windows\").on(\"click\", \".toggle-thumbnail\", function (event) {\n\tvar data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\tvar link = $(this);\n\n\t// Passing `data`, specifically `data.pushState`, to not add the action to the\n\t// history state if back or forward buttons were pressed.\n\topenImageViewer(link, data);\n\n\t// Prevent the link to open a new page since we're opening the image viewer,\n\t// but keep it a link to allow for Ctrl/Cmd+click.\n\t// By binding this event on #chat we prevent input gaining focus after clicking.\n\treturn false;\n});\n\nimageViewer.on(\"click\", function (event) {\n\tvar data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\t// Passing `data`, specifically `data.pushState`, to not add the action to the\n\t// history state if back or forward buttons were pressed.\n\tcloseImageViewer(data);\n});\n\nMousetrap.bind(\"esc\", function () {\n\treturn closeImageViewer();\n});\n\nMousetrap.bind([\"left\", \"right\"], function (e, key) {\n\tif (imageViewer.hasClass(\"opened\")) {\n\t\tvar direction = key === \"left\" ? \"previous\" : \"next\";\n\t\timageViewer.find(\".\" + direction + \"-image-btn\").trigger(\"click\");\n\t}\n});\n\nfunction openImageViewer(link) {\n\tvar _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n\t _ref$pushState = _ref.pushState,\n\t pushState = _ref$pushState === undefined ? true : _ref$pushState;\n\n\t$(\".previous-image\").removeClass(\"previous-image\");\n\t$(\".next-image\").removeClass(\"next-image\");\n\n\t// The next two blocks figure out what are the previous/next images. We first\n\t// look within the same message, as there can be multiple thumbnails per\n\t// message, and if not, we look at previous/next messages and take the\n\t// last/first thumbnail available.\n\t// Only expanded thumbnails are being cycled through.\n\n\t// Previous image\n\tvar previousImage = link.closest(\".preview\").prev(\".preview\").find(\".toggle-content.show .toggle-thumbnail\").last();\n\tif (!previousImage.length) {\n\t\tpreviousImage = link.closest(\".msg\").prevAll().find(\".toggle-content.show .toggle-thumbnail\").last();\n\t}\n\tpreviousImage.addClass(\"previous-image\");\n\n\t// Next image\n\tvar nextImage = link.closest(\".preview\").next(\".preview\").find(\".toggle-content.show .toggle-thumbnail\").first();\n\tif (!nextImage.length) {\n\t\tnextImage = link.closest(\".msg\").nextAll().find(\".toggle-content.show .toggle-thumbnail\").first();\n\t}\n\tnextImage.addClass(\"next-image\");\n\n\timageViewer.html(templates.image_viewer({\n\t\timage: link.find(\"img\").prop(\"src\"),\n\t\tlink: link.prop(\"href\"),\n\t\ttype: link.parent().hasClass(\"toggle-type-link\") ? \"link\" : \"image\",\n\t\thasPreviousImage: previousImage.length > 0,\n\t\thasNextImage: nextImage.length > 0\n\t}));\n\n\t// Turn off transitionend listener before opening the viewer,\n\t// which caused image viewer to become empty in rare cases\n\timageViewer.off(\"transitionend\").addClass(\"opened\");\n\n\t// History management\n\tif (pushState) {\n\t\tvar clickTarget = \"\";\n\t\t// Images can be in a message (channel URL previews) or not (window URL\n\t\t// preview, e.g. changelog). This is sub-optimal and needs improvement to\n\t\t// make image preview more generic and not specific for channel previews.\n\t\tif (link.closest(\".msg\").length > 0) {\n\t\t\tclickTarget = \"#\" + link.closest(\".msg\").prop(\"id\") + \" \";\n\t\t}\n\t\tclickTarget += \"a.toggle-thumbnail[href=\\\"\" + link.prop(\"href\") + \"\\\"] img\";\n\t\thistory.pushState({ clickTarget: clickTarget }, null, null);\n\t}\n}\n\nimageViewer.on(\"click\", \".previous-image-btn\", function () {\n\t$(\".previous-image\").trigger(\"click\");\n\treturn false;\n});\n\nimageViewer.on(\"click\", \".next-image-btn\", function () {\n\t$(\".next-image\").trigger(\"click\");\n\treturn false;\n});\n\nfunction closeImageViewer() {\n\tvar _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n\t _ref2$pushState = _ref2.pushState,\n\t pushState = _ref2$pushState === undefined ? true : _ref2$pushState;\n\n\timageViewer.removeClass(\"opened\").one(\"transitionend\", function () {\n\t\timageViewer.empty();\n\t});\n\n\tinput.trigger(\"focus\");\n\n\t// History management\n\tif (pushState) {\n\t\tvar clickTarget = \"#sidebar \" + (\".chan[data-id=\\\"\" + $(\"#sidebar .chan.active\").data(\"id\") + \"\\\"]\");\n\t\thistory.pushState({ clickTarget: clickTarget }, null, null);\n\t}\n}\n\n/***/ }),\n/* 186 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _ = __webpack_require__(308);\nvar constants = __webpack_require__(24);\nvar templates = __webpack_require__(8);\n\nmodule.exports = {\n\tupdateText: updateText,\n\tgetStoredTypes: getStoredTypes\n};\n\nfunction getStoredTypes(condensed) {\n\tvar obj = {};\n\n\tconstants.condensedTypes.forEach(function (type) {\n\t\tobj[type] = condensed.data(type) || 0;\n\t});\n\n\treturn obj;\n}\n\nfunction updateText(condensed, addedTypes) {\n\tvar obj = getStoredTypes(condensed);\n\n\t_.forOwn(addedTypes, function (count, type) {\n\t\tobj[type] += count;\n\t\tcondensed.data(type, obj[type]);\n\t});\n\n\tvar strings = [];\n\tconstants.condensedTypes.forEach(function (type) {\n\t\tif (obj[type]) {\n\t\t\tswitch (type) {\n\t\t\t\tcase \"away\":\n\t\t\t\t\tstrings.push(obj[type] + (obj[type] > 1 ? \" users have gone away\" : \" user has gone away\"));\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"back\":\n\t\t\t\t\tstrings.push(obj[type] + (obj[type] > 1 ? \" users have come back\" : \" user has come back\"));\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"chghost\":\n\t\t\t\t\tstrings.push(obj[type] + (obj[type] > 1 ? \" users have changed hostname\" : \" user has changed hostname\"));\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"join\":\n\t\t\t\t\tstrings.push(obj[type] + (obj[type] > 1 ? \" users have joined the channel\" : \" user has joined the channel\"));\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"part\":\n\t\t\t\t\tstrings.push(obj[type] + (obj[type] > 1 ? \" users have left the channel\" : \" user has left the channel\"));\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"quit\":\n\t\t\t\t\tstrings.push(obj[type] + (obj[type] > 1 ? \" users have quit\" : \" user has quit\"));\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nick\":\n\t\t\t\t\tstrings.push(obj[type] + (obj[type] > 1 ? \" users have changed nick\" : \" user has changed nick\"));\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"kick\":\n\t\t\t\t\tstrings.push(obj[type] + (obj[type] > 1 ? \" users were kicked\" : \" user was kicked\"));\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"mode\":\n\t\t\t\t\tstrings.push(obj[type] + (obj[type] > 1 ? \" modes were set\" : \" mode was set\"));\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t});\n\n\tvar text = strings.pop();\n\tif (strings.length) {\n\t\ttext = strings.join(\", \") + \", and \" + text;\n\t}\n\n\tcondensed.find(\".condensed-summary .content\").html(text + templates.msg_condensed_toggle());\n}\n\n/***/ }),\n/* 187 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar $ = __webpack_require__(2);\nvar Mousetrap = __webpack_require__(25);\n\nvar socket = __webpack_require__(3);\nvar utils = __webpack_require__(11);\n\nvar sidebar = $(\"#sidebar\");\n\nmodule.exports = {\n\thandleKeybinds: handleKeybinds,\n\topenForm: openForm\n};\n\nfunction toggleButton(network) {\n\t// Transform the + button to a ×\n\tnetwork.find(\"button.add-channel\").toggleClass(\"opened\");\n\n\t// Toggle content of tooltip\n\tvar tooltip = network.find(\".add-channel-tooltip\");\n\tvar altLabel = tooltip.data(\"alt-label\");\n\ttooltip.data(\"alt-label\", tooltip.prop(\"aria-label\"));\n\ttooltip.prop(\"aria-label\", altLabel);\n}\n\nfunction closeForm(network) {\n\tvar form = network.find(\".join-form\");\n\n\tif (form.is(\":visible\")) {\n\t\tform.find(\"input[name='channel']\").val(\"\");\n\t\tform.find(\"input[name='key']\").val(\"\");\n\t\tform.hide();\n\t\ttoggleButton(network);\n\t}\n}\n\nfunction openForm(network) {\n\tvar form = network.find(\".join-form\");\n\n\tif (form.is(\":hidden\")) {\n\t\tform.show();\n\t\ttoggleButton(network);\n\t}\n\n\t// Focus the \"Channel\" field even if the form was already open\n\tform.find(\".input[name='channel']\").trigger(\"focus\");\n}\n\nsidebar.on(\"click\", \".add-channel\", function (e) {\n\tvar id = $(e.target).data(\"id\");\n\tvar joinForm = $(\"#join-channel-\" + id);\n\tvar network = joinForm.closest(\".network\");\n\n\tif (joinForm.is(\":visible\")) {\n\t\tcloseForm(network);\n\t} else {\n\t\topenForm(network);\n\t}\n\n\treturn false;\n});\n\nsidebar.on(\"submit\", \".join-form\", function () {\n\tvar form = $(this);\n\tvar channel = form.find(\"input[name='channel']\");\n\tvar channelString = channel.val();\n\tvar key = form.find(\"input[name='key']\");\n\tvar keyString = key.val();\n\tvar chan = utils.findCurrentNetworkChan(channelString);\n\tif (chan.length) {\n\t\tchan.trigger(\"click\");\n\t} else {\n\t\tsocket.emit(\"input\", {\n\t\t\ttext: \"/join \" + channelString + \" \" + keyString,\n\t\t\ttarget: form.prev().data(\"id\")\n\t\t});\n\t}\n\tcloseForm(form.closest(\".network\"));\n\treturn false;\n});\n\nfunction handleKeybinds() {\n\tsidebar.find(\".join-form input, .join-form button\").each(function () {\n\t\tvar network = $(this).closest(\".network\");\n\t\tMousetrap(this).bind(\"esc\", function () {\n\t\t\treturn closeForm(network);\n\t\t});\n\t});\n}\n\n/***/ }),\n/* 188 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar $ = __webpack_require__(2);\nvar socket = __webpack_require__(3);\nvar templates = __webpack_require__(8);\n\nmodule.exports = {\n\trequestIfNeeded: requestIfNeeded\n};\n\n// Requests version information if it hasn't been retrieved before (or if it has\n// been removed from the page, i.e. when clicking on \"Check now\". Displays a\n// loading state until received.\nfunction requestIfNeeded() {\n\tif ($(\"#version-checker\").is(\":empty\")) {\n\t\trenderVersionChecker({ status: \"loading\" });\n\t\tsocket.emit(\"changelog\");\n\t}\n}\n\nsocket.on(\"changelog\", function (data) {\n\t// 1. Release notes window for the current version\n\t$(\"#changelog\").html(templates.windows.changelog(data.current));\n\n\tvar links = $(\"#changelog .changelog-text a\");\n\t// Make sure all links will open a new tab instead of exiting the application\n\tlinks.prop(\"target\", \"_blank\");\n\t// Add required metadata to image links, to support built-in image viewer\n\tlinks.has(\"img\").addClass(\"toggle-thumbnail\");\n\n\t// 2. Version checker visible in Help window\n\tvar status = void 0;\n\n\tif (data.latest) {\n\t\tstatus = \"new-version\";\n\t} else if (data.current.changelog) {\n\t\tstatus = \"up-to-date\";\n\t} else {\n\t\tstatus = \"error\";\n\t}\n\n\trenderVersionChecker({\n\t\tlatest: data.latest,\n\t\tstatus: status\n\t});\n\n\t// When there is a button to refresh the checker available, display it when\n\t// data is expired. Before that, server would return same information anyway.\n\tif (data.expiresAt) {\n\t\tsetTimeout(function () {\n\t\t\treturn $(\"#version-checker #check-now\").show();\n\t\t}, data.expiresAt - Date.now());\n\t}\n});\n\n// When clicking the \"Check now\" button, remove current checker information and\n// request a new one. Loading will be displayed in the meantime.\n$(\"#help\").on(\"click\", \"#check-now\", function () {\n\t$(\"#version-checker\").empty();\n\trequestIfNeeded();\n});\n\n// Given a status and latest release information, update the version checker\n// (CSS class and content)\nfunction renderVersionChecker(_ref) {\n\tvar status = _ref.status,\n\t latest = _ref.latest;\n\n\t$(\"#version-checker\").prop(\"class\", status).html(templates.version_checker({ latest: latest, status: status }));\n}\n\n/***/ }),\n/* 189 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// vendor libraries\n\n__webpack_require__(190);\nvar $ = __webpack_require__(2);\nvar moment = __webpack_require__(0);\nvar URI = __webpack_require__(158);\nvar fuzzy = __webpack_require__(162);\n\n// our libraries\n__webpack_require__(195);\n__webpack_require__(196);\nvar slideoutMenu = __webpack_require__(197);\nvar templates = __webpack_require__(8);\nvar socket = __webpack_require__(3);\nvar render = __webpack_require__(15);\n__webpack_require__(310);\nvar storage = __webpack_require__(17);\nvar utils = __webpack_require__(11);\n__webpack_require__(30);\n__webpack_require__(331);\n__webpack_require__(332);\nvar Changelog = __webpack_require__(188);\nvar JoinChannel = __webpack_require__(187);\n\n$(function () {\n\tvar sidebar = $(\"#sidebar, #footer\");\n\tvar chat = $(\"#chat\");\n\n\t$(document.body).data(\"app-name\", document.title);\n\n\tvar viewport = $(\"#viewport\");\n\tvar sidebarSlide = slideoutMenu(viewport[0], sidebar[0]);\n\tvar contextMenuContainer = $(\"#context-menu-container\");\n\tvar contextMenu = $(\"#context-menu\");\n\n\t$(\"#main\").on(\"click\", function (e) {\n\t\tif ($(e.target).is(\".lt\")) {\n\t\t\tsidebarSlide.toggle(!sidebarSlide.isOpen());\n\t\t} else if (sidebarSlide.isOpen()) {\n\t\t\tsidebarSlide.toggle(false);\n\t\t}\n\t});\n\n\tviewport.on(\"click\", \".rt\", function (e) {\n\t\tvar self = $(this);\n\t\tviewport.toggleClass(self.prop(\"class\"));\n\t\te.stopPropagation();\n\t\tchat.find(\".chan.active .chat\").trigger(\"msg.sticky\");\n\t});\n\n\tfunction positionContextMenu(that, e) {\n\t\tvar offset;\n\t\tvar menuWidth = contextMenu.outerWidth();\n\t\tvar menuHeight = contextMenu.outerHeight();\n\n\t\tif (that.hasClass(\"menu\")) {\n\t\t\toffset = that.offset();\n\t\t\toffset.left -= menuWidth - that.outerWidth();\n\t\t\toffset.top += that.outerHeight();\n\t\t\treturn offset;\n\t\t}\n\n\t\toffset = { left: e.pageX, top: e.pageY };\n\n\t\tif (window.innerWidth - offset.left < menuWidth) {\n\t\t\toffset.left = window.innerWidth - menuWidth;\n\t\t}\n\n\t\tif (window.innerHeight - offset.top < menuHeight) {\n\t\t\toffset.top = window.innerHeight - menuHeight;\n\t\t}\n\n\t\treturn offset;\n\t}\n\n\tfunction showContextMenu(that, e) {\n\t\tvar target = $(e.currentTarget);\n\t\tvar output = \"\";\n\n\t\tif (target.hasClass(\"user\")) {\n\t\t\toutput = templates.contextmenu_item({\n\t\t\t\tclass: \"user\",\n\t\t\t\taction: \"whois\",\n\t\t\t\ttext: target.text(),\n\t\t\t\tdata: target.data(\"name\")\n\t\t\t});\n\t\t\toutput += templates.contextmenu_divider();\n\t\t\toutput += templates.contextmenu_item({\n\t\t\t\tclass: \"action-whois\",\n\t\t\t\taction: \"whois\",\n\t\t\t\ttext: \"User information\",\n\t\t\t\tdata: target.data(\"name\")\n\t\t\t});\n\t\t\toutput += templates.contextmenu_item({\n\t\t\t\tclass: \"action-query\",\n\t\t\t\taction: \"query\",\n\t\t\t\ttext: \"Direct messages\",\n\t\t\t\tdata: target.data(\"name\")\n\t\t\t});\n\n\t\t\tvar channel = target.closest(\".chan\");\n\t\t\tif (utils.isOpInChannel(channel) && channel.data(\"type\") === \"channel\") {\n\t\t\t\toutput += templates.contextmenu_divider();\n\t\t\t\toutput += templates.contextmenu_item({\n\t\t\t\t\tclass: \"action-kick\",\n\t\t\t\t\taction: \"kick\",\n\t\t\t\t\ttext: \"Kick\",\n\t\t\t\t\tdata: target.data(\"name\")\n\t\t\t\t});\n\t\t\t}\n\t\t} else if (target.hasClass(\"chan\")) {\n\t\t\tvar itemClass = void 0;\n\n\t\t\tif (target.hasClass(\"lobby\")) {\n\t\t\t\titemClass = \"network\";\n\t\t\t} else if (target.hasClass(\"query\")) {\n\t\t\t\titemClass = \"query\";\n\t\t\t} else {\n\t\t\t\titemClass = \"chan\";\n\t\t\t}\n\n\t\t\toutput = templates.contextmenu_item({\n\t\t\t\tclass: itemClass,\n\t\t\t\taction: \"focusChan\",\n\t\t\t\ttext: target.data(\"title\"),\n\t\t\t\tdata: target.data(\"target\")\n\t\t\t});\n\t\t\toutput += templates.contextmenu_divider();\n\t\t\tif (target.hasClass(\"lobby\")) {\n\t\t\t\toutput += templates.contextmenu_item({\n\t\t\t\t\tclass: \"list\",\n\t\t\t\t\taction: \"list\",\n\t\t\t\t\ttext: \"List all channels\",\n\t\t\t\t\tdata: target.data(\"id\")\n\t\t\t\t});\n\t\t\t\toutput += templates.contextmenu_item({\n\t\t\t\t\tclass: \"join\",\n\t\t\t\t\taction: \"join\",\n\t\t\t\t\ttext: \"Join a channel…\",\n\t\t\t\t\tdata: target.data(\"id\")\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (target.hasClass(\"channel\")) {\n\t\t\t\toutput += templates.contextmenu_item({\n\t\t\t\t\tclass: \"list\",\n\t\t\t\t\taction: \"banlist\",\n\t\t\t\t\ttext: \"List banned users\",\n\t\t\t\t\tdata: target.data(\"id\")\n\t\t\t\t});\n\t\t\t}\n\t\t\toutput += templates.contextmenu_item({\n\t\t\t\tclass: \"close\",\n\t\t\t\taction: \"close\",\n\t\t\t\ttext: target.hasClass(\"lobby\") ? \"Disconnect\" : target.hasClass(\"channel\") ? \"Leave\" : \"Close\",\n\t\t\t\tdata: target.data(\"target\")\n\t\t\t});\n\t\t}\n\n\t\tcontextMenuContainer.show();\n\t\tcontextMenu.html(output).css(positionContextMenu($(that), e));\n\n\t\treturn false;\n\t}\n\n\tviewport.on(\"contextmenu\", \".network .chan\", function (e) {\n\t\treturn showContextMenu(this, e);\n\t});\n\n\tviewport.on(\"click contextmenu\", \".user\", function (e) {\n\t\t// If user is selecting text, do not open context menu\n\t\t// This primarily only targets mobile devices where selection is performed with touch\n\t\tif (!window.getSelection().isCollapsed) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn showContextMenu(this, e);\n\t});\n\n\tviewport.on(\"click\", \"#chat .menu\", function (e) {\n\t\te.currentTarget = $(\"#sidebar .chan[data-id=\\\"\" + $(this).closest(\".chan\").data(\"id\") + \"\\\"]\")[0];\n\t\treturn showContextMenu(this, e);\n\t});\n\n\tcontextMenuContainer.on(\"click contextmenu\", function () {\n\t\tcontextMenuContainer.hide();\n\t\treturn false;\n\t});\n\n\tfunction resetInputHeight(input) {\n\t\tinput.style.height = input.style.minHeight;\n\t}\n\n\tvar input = $(\"#input\").history().on(\"input\", function () {\n\t\tvar style = window.getComputedStyle(this);\n\n\t\t// Start by resetting height before computing as scrollHeight does not\n\t\t// decrease when deleting characters\n\t\tresetInputHeight(this);\n\n\t\tthis.style.height = Math.min(Math.round(window.innerHeight - 100), // prevent overflow\n\t\tthis.scrollHeight + Math.round(parseFloat(style.borderTopWidth) || 0) + Math.round(parseFloat(style.borderBottomWidth) || 0)) + \"px\";\n\n\t\tchat.find(\".chan.active .chat\").trigger(\"msg.sticky\"); // fix growing\n\t});\n\n\tvar focus = $.noop;\n\tif (!(\"ontouchstart\" in window || navigator.maxTouchPoints > 0)) {\n\t\tfocus = function focus() {\n\t\t\tif (chat.find(\".active\").hasClass(\"chan\")) {\n\t\t\t\tinput.trigger(\"focus\");\n\t\t\t}\n\t\t};\n\n\t\t$(window).on(\"focus\", focus);\n\n\t\tchat.on(\"click\", \".chat\", function () {\n\t\t\tsetTimeout(function () {\n\t\t\t\tif (window.getSelection().isCollapsed) {\n\t\t\t\t\tfocus();\n\t\t\t\t}\n\t\t\t}, 2);\n\t\t});\n\t}\n\n\tif (navigator.platform.match(/(Mac|iPhone|iPod|iPad)/i)) {\n\t\t$(document.body).addClass(\"is-apple\");\n\t}\n\n\t$(\"#form\").on(\"submit\", function (e) {\n\t\te.preventDefault();\n\t\tutils.forceFocus();\n\t\tvar text = input.val();\n\n\t\tif (text.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tinput.val(\"\");\n\t\tresetInputHeight(input.get(0));\n\n\t\tif (text.charAt(0) === \"/\") {\n\t\t\tvar args = text.substr(1).split(\" \");\n\t\t\tvar cmd = args.shift().toLowerCase();\n\t\t\tif (typeof utils.inputCommands[cmd] === \"function\" && utils.inputCommands[cmd](args)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tsocket.emit(\"input\", {\n\t\t\ttarget: chat.data(\"id\"),\n\t\t\ttext: text\n\t\t});\n\t});\n\n\t$(\"button#set-nick\").on(\"click\", function () {\n\t\tutils.toggleNickEditor(true);\n\n\t\t// Selects existing nick in the editable text field\n\t\tvar element = document.querySelector(\"#nick-value\");\n\t\telement.focus();\n\t\tvar range = document.createRange();\n\t\trange.selectNodeContents(element);\n\t\tvar selection = window.getSelection();\n\t\tselection.removeAllRanges();\n\t\tselection.addRange(range);\n\t});\n\n\t$(\"button#cancel-nick\").on(\"click\", cancelNick);\n\t$(\"button#submit-nick\").on(\"click\", submitNick);\n\n\tfunction submitNick() {\n\t\tvar newNick = $(\"#nick-value\").text().trim();\n\n\t\tif (newNick.length === 0) {\n\t\t\tcancelNick();\n\t\t\treturn;\n\t\t}\n\n\t\tutils.toggleNickEditor(false);\n\n\t\tsocket.emit(\"input\", {\n\t\t\ttarget: chat.data(\"id\"),\n\t\t\ttext: \"/nick \" + newNick\n\t\t});\n\t}\n\n\tfunction cancelNick() {\n\t\tutils.setNick(sidebar.find(\".chan.active\").closest(\".network\").data(\"nick\"));\n\t}\n\n\t$(\"#nick-value\").on(\"keypress\", function (e) {\n\t\tswitch (e.keyCode ? e.keyCode : e.which) {\n\t\t\tcase 13:\n\t\t\t\t// Enter\n\t\t\t\t// Ensures a new line is not added when pressing Enter\n\t\t\t\te.preventDefault();\n\t\t\t\tbreak;\n\t\t}\n\t}).on(\"keyup\", function (e) {\n\t\tswitch (e.keyCode ? e.keyCode : e.which) {\n\t\t\tcase 13:\n\t\t\t\t// Enter\n\t\t\t\tsubmitNick();\n\t\t\t\tbreak;\n\t\t\tcase 27:\n\t\t\t\t// Escape\n\t\t\t\tcancelNick();\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tchat.on(\"click\", \".inline-channel\", function () {\n\t\tvar name = $(this).data(\"chan\");\n\t\tvar chan = utils.findCurrentNetworkChan(name);\n\n\t\tif (chan.length) {\n\t\t\tchan.trigger(\"click\");\n\t\t} else {\n\t\t\tsocket.emit(\"input\", {\n\t\t\t\ttarget: chat.data(\"id\"),\n\t\t\t\ttext: \"/join \" + name\n\t\t\t});\n\t\t}\n\t});\n\n\tchat.on(\"click\", \".condensed-summary .content\", function () {\n\t\t$(this).closest(\".msg.condensed\").toggleClass(\"closed\");\n\t});\n\n\tvar openWindow = function openWindow(e, data) {\n\t\tvar self = $(this);\n\t\tvar target = self.data(\"target\");\n\t\tif (!target) {\n\t\t\treturn;\n\t\t}\n\n\t\t// This is a rather gross hack to account for sources that are in the\n\t\t// sidebar specifically. Needs to be done better when window management gets\n\t\t// refactored.\n\t\tvar inSidebar = self.parents(\"#sidebar, #footer\").length > 0;\n\n\t\tif (inSidebar) {\n\t\t\tchat.data(\"id\", self.data(\"id\"));\n\t\t\tsocket.emit(\"open\", self.data(\"id\"));\n\n\t\t\tsidebar.find(\".active\").removeClass(\"active\");\n\t\t\tself.addClass(\"active\").find(\".badge\").removeClass(\"highlight\").empty();\n\n\t\t\tif (sidebar.find(\".highlight\").length === 0) {\n\t\t\t\tutils.toggleNotificationMarkers(false);\n\t\t\t}\n\n\t\t\tsidebarSlide.toggle(false);\n\t\t}\n\n\t\tvar lastActive = $(\"#windows > .active\");\n\n\t\tlastActive.removeClass(\"active\").find(\".chat\").unsticky();\n\n\t\tvar lastActiveChan = lastActive.find(\".chan.active\");\n\n\t\tif (lastActiveChan.length > 0) {\n\t\t\tlastActiveChan.removeClass(\"active\").find(\".unread-marker\").data(\"unread-id\", 0).appendTo(lastActiveChan.find(\".messages\"));\n\n\t\t\trender.trimMessageInChannel(lastActiveChan, 100);\n\t\t}\n\n\t\tvar chan = $(target).addClass(\"active\").trigger(\"show\");\n\n\t\tvar title = $(document.body).data(\"app-name\");\n\t\tif (chan.data(\"title\")) {\n\t\t\ttitle = chan.data(\"title\") + \" — \" + title;\n\t\t}\n\t\tdocument.title = title;\n\n\t\tvar type = chan.data(\"type\");\n\t\tvar placeholder = \"\";\n\t\tif (type === \"channel\" || type === \"query\") {\n\t\t\tplaceholder = \"Write to \" + chan.data(\"title\");\n\t\t}\n\t\tinput.prop(\"placeholder\", placeholder).prop(\"aria-label\", placeholder);\n\n\t\tif (self.hasClass(\"chan\")) {\n\t\t\t$(\"#chat-container\").addClass(\"active\");\n\t\t\tutils.setNick(self.closest(\".network\").data(\"nick\"));\n\t\t}\n\n\t\tvar chanChat = chan.find(\".chat\");\n\t\tif (chanChat.length > 0 && type !== \"special\") {\n\t\t\tchanChat.sticky();\n\t\t}\n\n\t\tif (chan.data(\"needsNamesRefresh\") === true) {\n\t\t\tchan.data(\"needsNamesRefresh\", false);\n\t\t\tsocket.emit(\"names\", { target: self.data(\"id\") });\n\t\t}\n\n\t\tif (target === \"#settings\") {\n\t\t\t$(\"#session-list\").html(\"<p>Loading…</p>\");\n\t\t\tsocket.emit(\"sessions:get\");\n\t\t}\n\n\t\tif (target === \"#help\" || target === \"#changelog\") {\n\t\t\tChangelog.requestIfNeeded();\n\t\t}\n\n\t\tfocus();\n\n\t\t// Pushes states to history web API when clicking elements with a data-target attribute.\n\t\t// States are very trivial and only contain a single `clickTarget` property which\n\t\t// contains a CSS selector that targets elements which takes the user to a different view\n\t\t// when clicked. The `popstate` event listener will trigger synthetic click events using that\n\t\t// selector and thus take the user to a different view/state.\n\t\tif (data && data.pushState === false) {\n\t\t\treturn;\n\t\t}\n\t\tvar state = {};\n\n\t\tif (self.prop(\"id\")) {\n\t\t\tstate.clickTarget = \"#\" + self.prop(\"id\");\n\t\t} else if (self.hasClass(\"chan\")) {\n\t\t\tstate.clickTarget = \"#sidebar .chan[data-id=\\\"\" + self.data(\"id\") + \"\\\"]\";\n\t\t} else {\n\t\t\tstate.clickTarget = \"#footer button[data-target=\\\"\" + target + \"\\\"]\";\n\t\t}\n\n\t\tif (history && history.pushState) {\n\t\t\tif (data && data.replaceHistory && history.replaceState) {\n\t\t\t\thistory.replaceState(state, null, target);\n\t\t\t} else {\n\t\t\t\thistory.pushState(state, null, target);\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t};\n\n\tsidebar.on(\"click\", \".chan, button\", openWindow);\n\t$(\"#help\").on(\"click\", \"#view-changelog, #back-to-help\", openWindow);\n\t$(\"#changelog\").on(\"click\", \"#back-to-help\", openWindow);\n\n\tsidebar.on(\"click\", \"#sign-out\", function () {\n\t\tsocket.emit(\"sign-out\");\n\t\tstorage.remove(\"token\");\n\n\t\tif (!socket.connected) {\n\t\t\tlocation.reload();\n\t\t}\n\t});\n\n\tfunction closeChan(chan) {\n\t\tvar cmd = \"/close\";\n\n\t\tif (chan.hasClass(\"lobby\")) {\n\t\t\tcmd = \"/quit\";\n\t\t\tvar server = chan.find(\".name\").html();\n\t\t\tif (!confirm(\"Disconnect from \" + server + \"?\")) {\n\t\t\t\t// eslint-disable-line no-alert\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\tsocket.emit(\"input\", {\n\t\t\ttarget: chan.data(\"id\"),\n\t\t\ttext: cmd\n\t\t});\n\t\tchan.css({\n\t\t\ttransition: \"none\",\n\t\t\topacity: 0.4\n\t\t});\n\t\treturn false;\n\t}\n\n\tsidebar.on(\"click\", \".close\", function () {\n\t\tcloseChan($(this).closest(\".chan\"));\n\t});\n\n\tvar contextMenuActions = {\n\t\tjoin: function join(itemData) {\n\t\t\tvar network = $(\"#join-channel-\" + itemData).closest(\".network\");\n\t\t\tJoinChannel.openForm(network);\n\t\t},\n\t\tclose: function close(itemData) {\n\t\t\tcloseChan($(\".networks .chan[data-target=\\\"\" + itemData + \"\\\"]\"));\n\t\t},\n\t\tfocusChan: function focusChan(itemData) {\n\t\t\t$(\".networks .chan[data-target=\\\"\" + itemData + \"\\\"]\").trigger(\"click\");\n\t\t},\n\t\tlist: function list(itemData) {\n\t\t\tsocket.emit(\"input\", {\n\t\t\t\ttarget: itemData,\n\t\t\t\ttext: \"/list\"\n\t\t\t});\n\t\t},\n\t\tbanlist: function banlist(itemData) {\n\t\t\tsocket.emit(\"input\", {\n\t\t\t\ttarget: itemData,\n\t\t\t\ttext: \"/banlist\"\n\t\t\t});\n\t\t},\n\t\twhois: function whois(itemData) {\n\t\t\tvar chan = utils.findCurrentNetworkChan(itemData);\n\n\t\t\tif (chan.length) {\n\t\t\t\tchan.trigger(\"click\");\n\t\t\t}\n\n\t\t\tsocket.emit(\"input\", {\n\t\t\t\ttarget: $(\"#chat\").data(\"id\"),\n\t\t\t\ttext: \"/whois \" + itemData\n\t\t\t});\n\n\t\t\t$(\".channel.active .users .user[data-name=\\\"\" + itemData + \"\\\"]\").trigger(\"click\");\n\t\t},\n\t\tquery: function query(itemData) {\n\t\t\tvar chan = utils.findCurrentNetworkChan(itemData);\n\n\t\t\tif (chan.length) {\n\t\t\t\tchan.trigger(\"click\");\n\t\t\t}\n\n\t\t\tsocket.emit(\"input\", {\n\t\t\t\ttarget: $(\"#chat\").data(\"id\"),\n\t\t\t\ttext: \"/query \" + itemData\n\t\t\t});\n\t\t},\n\t\tkick: function kick(itemData) {\n\t\t\tsocket.emit(\"input\", {\n\t\t\t\ttarget: $(\"#chat\").data(\"id\"),\n\t\t\t\ttext: \"/kick \" + itemData\n\t\t\t});\n\t\t}\n\t};\n\n\tcontextMenuActions.execute = function (name) {\n\t\tfor (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n\t\t\targs[_key - 1] = arguments[_key];\n\t\t}\n\n\t\treturn contextMenuActions[name] && contextMenuActions[name].apply(contextMenuActions, args);\n\t};\n\n\tcontextMenu.on(\"click\", \".context-menu-item\", function () {\n\t\tvar $this = $(this);\n\t\tvar itemData = $this.data(\"data\");\n\t\tvar contextAction = $this.data(\"action\");\n\t\tcontextMenuActions.execute(contextAction, itemData);\n\t});\n\n\tchat.on(\"input\", \".search\", function () {\n\t\tvar value = $(this).val();\n\t\tvar parent = $(this).closest(\".users\");\n\t\tvar names = parent.find(\".names-original\");\n\t\tvar container = parent.find(\".names-filtered\");\n\n\t\tif (!value.length) {\n\t\t\tcontainer.hide();\n\t\t\tnames.show();\n\t\t\treturn;\n\t\t}\n\n\t\tvar fuzzyOptions = {\n\t\t\tpre: \"<b>\",\n\t\t\tpost: \"</b>\",\n\t\t\textract: function extract(el) {\n\t\t\t\treturn $(el).text();\n\t\t\t}\n\t\t};\n\n\t\tvar result = fuzzy.filter(value, names.find(\".user\").toArray(), fuzzyOptions);\n\n\t\tnames.hide();\n\t\tcontainer.html(templates.user_filtered({ matches: result })).show();\n\t});\n\n\tif ($(\"body\").hasClass(\"public\") && (window.location.hash === \"#connect\" || window.location.hash === \"\")) {\n\t\t$(\"#connect\").one(\"show\", function () {\n\t\t\tvar params = URI(document.location.search);\n\t\t\tparams = params.search(true);\n\t\t\t// Possible parameters: name, host, port, password, tls, nick, username, realname, join\n\t\t\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in#Iterating_over_own_properties_only\n\t\t\tfor (var key in params) {\n\t\t\t\tif (params.hasOwnProperty(key)) {\n\t\t\t\t\tvar value = params[key];\n\t\t\t\t\t// \\W searches for non-word characters\n\t\t\t\t\tkey = key.replace(/\\W/g, \"\");\n\n\t\t\t\t\tvar element = $(\"#connect input[name='\" + key + \"']\");\n\t\t\t\t\t// if the element exists, it isn't disabled, and it isn't hidden\n\t\t\t\t\tif (element.length > 0 && !element.is(\":disabled\") && !element.is(\":hidden\")) {\n\t\t\t\t\t\tif (element.is(\":checkbox\")) {\n\t\t\t\t\t\t\telement.prop(\"checked\", value === \"1\" || value === \"true\" ? true : false);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\telement.val(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\t$(document).on(\"visibilitychange focus click\", function () {\n\t\tif (sidebar.find(\".highlight\").length === 0) {\n\t\t\tutils.toggleNotificationMarkers(false);\n\t\t}\n\t});\n\n\t// Compute how many milliseconds are remaining until the next day starts\n\tfunction msUntilNextDay() {\n\t\treturn moment().add(1, \"day\").startOf(\"day\") - moment();\n\t}\n\n\t// Go through all Today/Yesterday date markers in the DOM and recompute their\n\t// labels. When done, restart the timer for the next day.\n\tfunction updateDateMarkers() {\n\t\t$(\".date-marker-text[data-label='Today'], .date-marker-text[data-label='Yesterday']\").closest(\".date-marker-container\").each(function () {\n\t\t\t$(this).replaceWith(templates.date_marker({ time: $(this).data(\"time\") }));\n\t\t});\n\n\t\t// This should always be 24h later but re-computing exact value just in case\n\t\tsetTimeout(updateDateMarkers, msUntilNextDay());\n\t}\n\tsetTimeout(updateDateMarkers, msUntilNextDay());\n\n\twindow.addEventListener(\"popstate\", function (e) {\n\t\tvar state = e.state;\n\n\t\tif (!state) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar clickTarget = state.clickTarget;\n\n\n\t\tif (clickTarget) {\n\t\t\t// This will be true when click target corresponds to opening a thumbnail,\n\t\t\t// browsing to the previous/next thumbnail, or closing the image viewer.\n\t\t\tvar imageViewerRelated = clickTarget.includes(\".toggle-thumbnail\");\n\n\t\t\t// If the click target is not related to the image viewer but the viewer\n\t\t\t// is currently opened, we need to close it.\n\t\t\tif (!imageViewerRelated && $(\"#image-viewer\").hasClass(\"opened\")) {\n\t\t\t\tclickTarget += \", #image-viewer\";\n\t\t\t}\n\n\t\t\t// Emit the click to the target, while making sure it is not going to be\n\t\t\t// added to the state again.\n\t\t\t$(clickTarget).trigger(\"click\", {\n\t\t\t\tpushState: false\n\t\t\t});\n\t\t}\n\t});\n\n\t// Only start opening socket.io connection after all events have been registered\n\tsocket.open();\n});\n\n/***/ }),\n/* 190 */,\n/* 191 */,\n/* 192 */,\n/* 193 */,\n/* 194 */,\n/* 195 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _jquery = __webpack_require__(2);\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/*!\n * inputhistory\n * https://github.com/erming/inputhistory\n * v0.3.1\n */\n(function ($) {\n\t$.inputhistory = {};\n\t$.inputhistory.defaultOptions = {\n\t\thistory: [],\n\t\tpreventSubmit: false\n\t};\n\n\t$.fn.history = // Alias\n\t$.fn.inputhistory = function (options) {\n\t\toptions = $.extend($.inputhistory.defaultOptions, options);\n\n\t\tvar self = this;\n\t\tif (self.length > 1) {\n\t\t\treturn self.each(function () {\n\t\t\t\t$(this).history(options);\n\t\t\t});\n\t\t}\n\n\t\tvar history = options.history;\n\t\thistory.push(\"\");\n\n\t\tvar i = 0;\n\t\tself.on(\"keydown\", function (e) {\n\t\t\tvar key = e.which;\n\t\t\tswitch (key) {\n\t\t\t\tcase 13:\n\t\t\t\t\t// Enter\n\t\t\t\t\tif (e.shiftKey || self.data(\"autocompleting\")) {\n\t\t\t\t\t\treturn; // multiline input\n\t\t\t\t\t}\n\n\t\t\t\t\tif (self.val() != \"\") {\n\t\t\t\t\t\ti = history.length;\n\t\t\t\t\t\thistory[i - 1] = self.val();\n\t\t\t\t\t\thistory.push(\"\");\n\t\t\t\t\t\tif (history[i - 1] == history[i - 2]) {\n\t\t\t\t\t\t\thistory.splice(-2, 1);\n\t\t\t\t\t\t\ti--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!options.preventSubmit) {\n\t\t\t\t\t\tself.parents(\"form\").eq(0).submit();\n\t\t\t\t\t}\n\t\t\t\t\tself.val(\"\");\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 38: // Up\n\t\t\t\tcase 40:\n\t\t\t\t\t// Down\n\t\t\t\t\t// NOTICE: This is specific to The Lounge.\n\t\t\t\t\tif (e.ctrlKey || e.metaKey || self.data(\"autocompleting\")) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.value.indexOf(\"\\n\") >= 0 && key === 38 && this.selectionStart > 0 || key === 40 && this.selectionStart < this.value.length) {\n\t\t\t\t\t\treturn; // don't prevent default\n\t\t\t\t\t}\n\n\t\t\t\t\thistory[i] = self.val();\n\t\t\t\t\tif (key == 38 && i != 0) {\n\t\t\t\t\t\ti--;\n\t\t\t\t\t} else if (key == 40 && i < history.length - 1) {\n\t\t\t\t\t\ti++;\n\t\t\t\t\t}\n\t\t\t\t\tself.val(history[i]);\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\treturn;\n\t\t\t}\n\n\t\t\te.preventDefault();\n\t\t});\n\n\t\treturn this;\n\t};\n})(_jquery2.default);\n\n/***/ }),\n/* 196 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _jquery = __webpack_require__(2);\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function ($) {\n\t$.fn.unsticky = function () {\n\t\treturn this.trigger(\"unstick.sticky\").off(\".sticky\");\n\t};\n\n\t$.fn.sticky = function () {\n\t\tvar self = this;\n\t\tvar stuckToBottom = true;\n\t\tvar lastStick = 0;\n\n\t\tvar keepToBottom = function keepToBottom() {\n\t\t\tif (stuckToBottom) {\n\t\t\t\tself.scrollBottom();\n\t\t\t}\n\t\t};\n\n\t\t$(window).on(\"resize.sticky\", keepToBottom);\n\t\tself.on(\"unstick.sticky\", function () {\n\t\t\t$(window).off(\"resize.sticky\", keepToBottom);\n\t\t}).on(\"scroll.sticky\", function () {\n\t\t\t// When resizing, sometimes the browser sends a bunch of extra scroll events due to content\n\t\t\t// reflow, so if we resized within 250ms we can assume it's one of those. The order of said\n\t\t\t// events is not predictable, and scroll can happen last, so not setting stuckToBottom is\n\t\t\t// not enough, we have to force the scroll still.\n\t\t\tif (stuckToBottom && Date.now() - lastStick < 250) {\n\t\t\t\tself.scrollBottom();\n\t\t\t} else {\n\t\t\t\tstuckToBottom = self.isScrollBottom();\n\t\t\t}\n\t\t}).on(\"scrollBottom.sticky\", function () {\n\t\t\tstuckToBottom = true;\n\t\t\tlastStick = Date.now();\n\t\t\tthis.scrollTop = this.scrollHeight;\n\t\t}).on(\"keepToBottom.sticky\", keepToBottom).scrollBottom();\n\n\t\treturn self;\n\t};\n\n\t$.fn.scrollBottom = function () {\n\t\tthis.trigger(\"scrollBottom.sticky\");\n\t\treturn this;\n\t};\n\n\t$.fn.isScrollBottom = function () {\n\t\tvar el = this[0];\n\t\treturn el.scrollHeight - el.scrollTop - el.offsetHeight <= 30;\n\t};\n})(_jquery2.default);\n\n/***/ }),\n/* 197 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/**\n * Simple slideout menu implementation.\n */\n\nmodule.exports = function slideoutMenu(viewport, menu) {\n\tvar touchStartPos = null;\n\tvar touchCurPos = null;\n\tvar touchStartTime = 0;\n\tvar menuWidth = 0;\n\tvar menuIsOpen = false;\n\tvar menuIsMoving = false;\n\n\tfunction toggleMenu(state) {\n\t\tmenuIsOpen = state;\n\t\tviewport.classList.toggle(\"menu-open\", state);\n\t}\n\n\tfunction disableSlideout() {\n\t\tviewport.removeEventListener(\"ontouchstart\", onTouchStart);\n\t}\n\n\tfunction onTouchStart(e) {\n\t\tif (e.touches.length !== 1) {\n\t\t\tonTouchEnd();\n\t\t\treturn;\n\t\t}\n\n\t\tvar touch = e.touches.item(0);\n\t\tviewport.classList.toggle(\"menu-dragging\", true);\n\n\t\tmenuWidth = parseFloat(window.getComputedStyle(menu).width);\n\n\t\tif (!menuIsOpen && touch.screenX < 50 || menuIsOpen && touch.screenX > menuWidth) {\n\t\t\ttouchStartPos = touch;\n\t\t\ttouchCurPos = touch;\n\t\t\ttouchStartTime = Date.now();\n\n\t\t\tviewport.addEventListener(\"touchmove\", onTouchMove);\n\t\t\tviewport.addEventListener(\"touchend\", onTouchEnd, { passive: true });\n\t\t}\n\t}\n\n\tfunction onTouchMove(e) {\n\t\tvar touch = touchCurPos = e.touches.item(0);\n\t\tvar setX = touch.screenX - touchStartPos.screenX;\n\n\t\tif (Math.abs(setX > 30)) {\n\t\t\tmenuIsMoving = true;\n\t\t}\n\n\t\tif (!menuIsMoving && Math.abs(touch.screenY - touchStartPos.screenY) > 30) {\n\t\t\tonTouchEnd();\n\t\t\treturn;\n\t\t}\n\n\t\tif (menuIsOpen) {\n\t\t\tsetX += menuWidth;\n\t\t}\n\n\t\tif (setX > menuWidth) {\n\t\t\tsetX = menuWidth;\n\t\t} else if (setX < 0) {\n\t\t\tsetX = 0;\n\t\t}\n\n\t\tviewport.style.transform = \"translate3d(\" + setX + \"px, 0, 0)\";\n\n\t\tif (menuIsMoving) {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t}\n\t}\n\n\tfunction onTouchEnd() {\n\t\tvar diff = touchCurPos.screenX - touchStartPos.screenX;\n\t\tvar absDiff = Math.abs(diff);\n\n\t\tif (absDiff > menuWidth / 2 || Date.now() - touchStartTime < 180 && absDiff > 50) {\n\t\t\ttoggleMenu(diff > 0);\n\t\t}\n\n\t\tviewport.removeEventListener(\"touchmove\", onTouchMove);\n\t\tviewport.removeEventListener(\"touchend\", onTouchEnd);\n\t\tviewport.classList.toggle(\"menu-dragging\", false);\n\t\tviewport.style.transform = null;\n\n\t\ttouchStartPos = null;\n\t\ttouchCurPos = null;\n\t\ttouchStartTime = 0;\n\t\tmenuIsMoving = false;\n\t}\n\n\tviewport.addEventListener(\"touchstart\", onTouchStart, { passive: true });\n\n\treturn {\n\t\tdisable: disableSlideout,\n\t\ttoggle: toggleMenu,\n\t\tisOpen: function isOpen() {\n\t\t\treturn menuIsOpen;\n\t\t}\n\t};\n};\n\n/***/ }),\n/* 198 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar map = {\n\t\"./actions/action.tpl\": 199,\n\t\"./actions/away.tpl\": 234,\n\t\"./actions/back.tpl\": 235,\n\t\"./actions/ban_list.tpl\": 236,\n\t\"./actions/channel_list.tpl\": 237,\n\t\"./actions/chghost.tpl\": 238,\n\t\"./actions/ctcp.tpl\": 239,\n\t\"./actions/invite.tpl\": 240,\n\t\"./actions/join.tpl\": 241,\n\t\"./actions/kick.tpl\": 242,\n\t\"./actions/mode.tpl\": 243,\n\t\"./actions/nick.tpl\": 244,\n\t\"./actions/part.tpl\": 245,\n\t\"./actions/quit.tpl\": 246,\n\t\"./actions/topic.tpl\": 247,\n\t\"./actions/topic_set_by.tpl\": 248,\n\t\"./actions/whois.tpl\": 249,\n\t\"./chan.tpl\": 168,\n\t\"./chat.tpl\": 250,\n\t\"./contextmenu_divider.tpl\": 251,\n\t\"./contextmenu_item.tpl\": 252,\n\t\"./date_marker.tpl\": 253,\n\t\"./image_viewer.tpl\": 256,\n\t\"./join_channel.tpl\": 170,\n\t\"./msg.tpl\": 257,\n\t\"./msg_action.tpl\": 268,\n\t\"./msg_condensed.tpl\": 269,\n\t\"./msg_condensed_toggle.tpl\": 270,\n\t\"./msg_preview.tpl\": 271,\n\t\"./msg_preview_toggle.tpl\": 272,\n\t\"./msg_unhandled.tpl\": 273,\n\t\"./network.tpl\": 274,\n\t\"./session.tpl\": 276,\n\t\"./unread_marker.tpl\": 277,\n\t\"./user.tpl\": 278,\n\t\"./user_filtered.tpl\": 280,\n\t\"./user_name.tpl\": 4,\n\t\"./version_checker.tpl\": 281,\n\t\"./windows/changelog.tpl\": 282,\n\t\"./windows/connect.tpl\": 283,\n\t\"./windows/help.tpl\": 284,\n\t\"./windows/settings.tpl\": 285,\n\t\"./windows/sign_in.tpl\": 286\n};\nfunction webpackContext(req) {\n\treturn __webpack_require__(webpackContextResolve(req));\n};\nfunction webpackContextResolve(req) {\n\tvar id = map[req];\n\tif(!(id + 1)) // check for number or string\n\t\tthrow new Error(\"Cannot find module '\" + req + \"'.\");\n\treturn id;\n};\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 198;\n\n/***/ }),\n/* 199 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar Handlebars = __webpack_require__(1);\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n return \"\t<div class=\\\"preview\\\" data-url=\\\"\"\n + container.escapeExpression(container.lambda((depth0 != null ? depth0.link : depth0), depth0))\n + \"\\\"></div>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n return ((stack1 = container.invokePartial(__webpack_require__(4),(depth0 != null ? depth0.from : depth0),{\"name\":\"../user_name\",\"data\":data,\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n + \"<span class=\\\"text\\\">\"\n + ((stack1 = __default(__webpack_require__(5)).call(alias1,(depth0 != null ? depth0.text : depth0),(depth0 != null ? depth0.users : depth0),{\"name\":\"parse\",\"hash\":{},\"data\":data})) != null ? stack1 : \"\")\n + \"</span>\\n\\n\"\n + ((stack1 = helpers.each.call(alias1,(depth0 != null ? depth0.previews : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"usePartial\":true,\"useData\":true});\n\n/***/ }),\n/* 200 */,\n/* 201 */,\n/* 202 */,\n/* 203 */,\n/* 204 */,\n/* 205 */,\n/* 206 */,\n/* 207 */,\n/* 208 */,\n/* 209 */,\n/* 210 */,\n/* 211 */,\n/* 212 */,\n/* 213 */,\n/* 214 */,\n/* 215 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// Styling control codes\n\nvar BOLD = \"\\x02\";\nvar COLOR = \"\\x03\";\nvar HEX_COLOR = \"\\x04\";\nvar RESET = \"\\x0f\";\nvar REVERSE = \"\\x16\";\nvar ITALIC = \"\\x1d\";\nvar UNDERLINE = \"\\x1f\";\nvar STRIKETHROUGH = \"\\x1e\";\nvar MONOSPACE = \"\\x11\";\n\n// Color code matcher, with format `XX,YY` where both `XX` and `YY` are\n// integers, `XX` is the text color and `YY` is an optional background color.\nvar colorRx = /^(\\d{1,2})(?:,(\\d{1,2}))?/;\n\n// 6-char Hex color code matcher\nvar hexColorRx = /^([0-9a-f]{6})(?:,([0-9a-f]{6}))?/i;\n\n// Represents all other control codes that to be ignored/filtered from the text\nvar controlCodesRx = /[\\u0000-\\u001F]/g;\n\n// Converts a given text into an array of objects, each of them representing a\n// similarly styled section of the text. Each object carries the `text`, style\n// information (`bold`, `textColor`, `bgcolor`, `italic`,\n// `underline`, `strikethrough`, `monospace`), and `start`/`end` cursors.\nfunction parseStyle(text) {\n\tvar result = [];\n\tvar start = 0;\n\tvar position = 0;\n\n\t// At any given time, these carry style information since last time a styling\n\t// control code was met.\n\tvar colorCodes = void 0,\n\t bold = void 0,\n\t textColor = void 0,\n\t bgColor = void 0,\n\t hexColor = void 0,\n\t hexBgColor = void 0,\n\t italic = void 0,\n\t underline = void 0,\n\t strikethrough = void 0,\n\t monospace = void 0;\n\n\tvar resetStyle = function resetStyle() {\n\t\tbold = false;\n\t\ttextColor = undefined;\n\t\tbgColor = undefined;\n\t\thexColor = undefined;\n\t\thexBgColor = undefined;\n\t\titalic = false;\n\t\tunderline = false;\n\t\tstrikethrough = false;\n\t\tmonospace = false;\n\t};\n\tresetStyle();\n\n\t// When called, this \"closes\" the current fragment by adding an entry to the\n\t// `result` array using the styling information set last time a control code\n\t// was met.\n\tvar emitFragment = function emitFragment() {\n\t\t// Uses the text fragment starting from the last control code position up to\n\t\t// the current position\n\t\tvar textPart = text.slice(start, position);\n\n\t\t// Filters out all non-style related control codes present in this text\n\t\tvar processedText = textPart.replace(controlCodesRx, \"\");\n\n\t\tif (processedText.length) {\n\t\t\t// Current fragment starts where the previous one ends, or at 0 if none\n\t\t\tvar fragmentStart = result.length ? result[result.length - 1].end : 0;\n\n\t\t\tresult.push({\n\t\t\t\tbold: bold,\n\t\t\t\ttextColor: textColor,\n\t\t\t\tbgColor: bgColor,\n\t\t\t\thexColor: hexColor,\n\t\t\t\thexBgColor: hexBgColor,\n\t\t\t\titalic: italic,\n\t\t\t\tunderline: underline,\n\t\t\t\tstrikethrough: strikethrough,\n\t\t\t\tmonospace: monospace,\n\t\t\t\ttext: processedText,\n\t\t\t\tstart: fragmentStart,\n\t\t\t\tend: fragmentStart + processedText.length\n\t\t\t});\n\t\t}\n\n\t\t// Now that a fragment has been \"closed\", the next one will start after that\n\t\tstart = position + 1;\n\t};\n\n\t// This loop goes through each character of the given text one by one by\n\t// bumping the `position` cursor. Every time a new special \"styling\" character\n\t// is met, an object gets created (with `emitFragment()`)information on text\n\t// encountered since the previous styling character.\n\twhile (position < text.length) {\n\t\tswitch (text[position]) {\n\t\t\tcase RESET:\n\t\t\t\temitFragment();\n\t\t\t\tresetStyle();\n\t\t\t\tbreak;\n\n\t\t\t// Meeting a BOLD character means that the ongoing text is either going to\n\t\t\t// be in bold or that the previous one was in bold and the following one\n\t\t\t// must be reset.\n\t\t\t// This same behavior applies to COLOR, REVERSE, ITALIC, and UNDERLINE.\n\t\t\tcase BOLD:\n\t\t\t\temitFragment();\n\t\t\t\tbold = !bold;\n\t\t\t\tbreak;\n\n\t\t\tcase COLOR:\n\t\t\t\temitFragment();\n\n\t\t\t\t// Go one step further to find the corresponding color\n\t\t\t\tcolorCodes = text.slice(position + 1).match(colorRx);\n\n\t\t\t\tif (colorCodes) {\n\t\t\t\t\ttextColor = Number(colorCodes[1]);\n\t\t\t\t\tif (colorCodes[2]) {\n\t\t\t\t\t\tbgColor = Number(colorCodes[2]);\n\t\t\t\t\t}\n\t\t\t\t\t// Color code length is > 1, so bump the current position cursor by as\n\t\t\t\t\t// much (and reset the start cursor for the current text block as well)\n\t\t\t\t\tposition += colorCodes[0].length;\n\t\t\t\t\tstart = position + 1;\n\t\t\t\t} else {\n\t\t\t\t\t// If no color codes were found, toggles back to no colors (like BOLD).\n\t\t\t\t\ttextColor = undefined;\n\t\t\t\t\tbgColor = undefined;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase HEX_COLOR:\n\t\t\t\temitFragment();\n\n\t\t\t\tcolorCodes = text.slice(position + 1).match(hexColorRx);\n\n\t\t\t\tif (colorCodes) {\n\t\t\t\t\thexColor = colorCodes[1].toUpperCase();\n\t\t\t\t\tif (colorCodes[2]) {\n\t\t\t\t\t\thexBgColor = colorCodes[2].toUpperCase();\n\t\t\t\t\t}\n\t\t\t\t\t// Color code length is > 1, so bump the current position cursor by as\n\t\t\t\t\t// much (and reset the start cursor for the current text block as well)\n\t\t\t\t\tposition += colorCodes[0].length;\n\t\t\t\t\tstart = position + 1;\n\t\t\t\t} else {\n\t\t\t\t\t// If no color codes were found, toggles back to no colors (like BOLD).\n\t\t\t\t\thexColor = undefined;\n\t\t\t\t\thexBgColor = undefined;\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase REVERSE:\n\t\t\t\t{\n\t\t\t\t\temitFragment();\n\t\t\t\t\tvar tmp = bgColor;\n\t\t\t\t\tbgColor = textColor;\n\t\t\t\t\ttextColor = tmp;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\tcase ITALIC:\n\t\t\t\temitFragment();\n\t\t\t\titalic = !italic;\n\t\t\t\tbreak;\n\n\t\t\tcase UNDERLINE:\n\t\t\t\temitFragment();\n\t\t\t\tunderline = !underline;\n\t\t\t\tbreak;\n\n\t\t\tcase STRIKETHROUGH:\n\t\t\t\temitFragment();\n\t\t\t\tstrikethrough = !strikethrough;\n\t\t\t\tbreak;\n\n\t\t\tcase MONOSPACE:\n\t\t\t\temitFragment();\n\t\t\t\tmonospace = !monospace;\n\t\t\t\tbreak;\n\t\t}\n\n\t\t// Evaluate the next character at the next iteration\n\t\tposition += 1;\n\t}\n\n\t// The entire text has been parsed, so we finalize the current text fragment.\n\temitFragment();\n\n\treturn result;\n}\n\nvar properties = [\"bold\", \"textColor\", \"bgColor\", \"hexColor\", \"hexBgColor\", \"italic\", \"underline\", \"strikethrough\", \"monospace\"];\n\nfunction prepare(text) {\n\treturn parseStyle(text)\n\t// This optimizes fragments by combining them together when all their values\n\t// for the properties defined above are equal.\n\t.reduce(function (prev, curr) {\n\t\tif (prev.length) {\n\t\t\tvar lastEntry = prev[prev.length - 1];\n\t\t\tif (properties.every(function (key) {\n\t\t\t\treturn curr[key] === lastEntry[key];\n\t\t\t})) {\n\t\t\t\tlastEntry.text += curr.text;\n\t\t\t\tlastEntry.end += curr.text.length;\n\t\t\t\treturn prev;\n\t\t\t}\n\t\t}\n\t\treturn prev.concat([curr]);\n\t}, []);\n}\n\nmodule.exports = prepare;\n\n/***/ }),\n/* 216 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// Escapes the RegExp special characters \"^\", \"$\", \"\", \".\", \"*\", \"+\", \"?\", \"(\",\n// \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in string.\n// See https://lodash.com/docs/#escapeRegExp\n\nvar escapeRegExp = __webpack_require__(166);\n\n// Given an array of channel prefixes (such as \"#\" and \"&\") and an array of user\n// modes (such as \"@\" and \"+\"), this function extracts channels and nicks from a\n// text.\n// It returns an array of objects for each channel found with their start index,\n// end index and channel name.\nfunction findChannels(text, channelPrefixes, userModes) {\n\t// `userModePattern` is necessary to ignore user modes in /whois responses.\n\t// For example, a voiced user in #thelounge will have a /whois response of:\n\t// > foo is on the following channels: +#thelounge\n\t// We need to explicitly ignore user modes to parse such channels correctly.\n\tvar userModePattern = userModes.map(escapeRegExp).join(\"\");\n\tvar channelPrefixPattern = channelPrefixes.map(escapeRegExp).join(\"\");\n\tvar channelPattern = \"(?:^|\\\\s)[\" + userModePattern + \"]*([\" + channelPrefixPattern + \"][^ \\x07]+)\";\n\tvar channelRegExp = new RegExp(channelPattern, \"g\");\n\n\tvar result = [];\n\tvar match = void 0;\n\n\tdo {\n\t\t// With global (\"g\") regexes, calling `exec` multiple times will find\n\t\t// successive matches in the same string.\n\t\tmatch = channelRegExp.exec(text);\n\n\t\tif (match) {\n\t\t\tresult.push({\n\t\t\t\tstart: match.index + match[0].length - match[1].length,\n\t\t\t\tend: match.index + match[0].length,\n\t\t\t\tchannel: match[1]\n\t\t\t});\n\t\t}\n\t} while (match);\n\n\treturn result;\n}\n\nmodule.exports = findChannels;\n\n/***/ }),\n/* 217 */,\n/* 218 */,\n/* 219 */,\n/* 220 */,\n/* 221 */,\n/* 222 */,\n/* 223 */,\n/* 224 */,\n/* 225 */,\n/* 226 */,\n/* 227 */,\n/* 228 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar URI = __webpack_require__(158);\n\n// Known schemes to detect in a text. If a text contains `foo...bar://foo.com`,\n// the parsed scheme should be `foo...bar` but if it contains\n// `foo...http://foo.com`, we assume the scheme to extract will be `http`.\nvar commonSchemes = [\"http\", \"https\", \"ftp\", \"sftp\", \"smb\", \"file\", \"irc\", \"ircs\", \"svn\", \"git\", \"steam\", \"mumble\", \"ts3server\", \"svn+ssh\", \"ssh\"];\n\nfunction findLinks(text) {\n\tvar result = [];\n\n\t// URI.withinString() identifies URIs within text, e.g. to translate them to\n\t// <a>-Tags.\n\t// See https://medialize.github.io/URI.js/docs.html#static-withinString\n\t// In our case, we store each URI encountered in a result array.\n\ttry {\n\t\tURI.withinString(text, function (url, start, end) {\n\t\t\tvar parsedScheme = void 0;\n\n\t\t\ttry {\n\t\t\t\t// Extract the scheme of the URL detected, if there is one\n\t\t\t\tparsedScheme = URI(url).scheme().toLowerCase();\n\t\t\t} catch (e) {\n\t\t\t\t// URI may throw an exception for malformed urls,\n\t\t\t\t// as to why withinString finds these in the first place is a mystery\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Check if the scheme of the detected URL matches a common one above.\n\t\t\t// In a URL like `foo..http://example.com`, the scheme would be `foo..http`,\n\t\t\t// so we need to clean up the end of the scheme and filter out the rest.\n\t\t\tvar matchedScheme = commonSchemes.find(function (scheme) {\n\t\t\t\treturn parsedScheme.endsWith(scheme);\n\t\t\t});\n\n\t\t\t// A known scheme was found, extract the unknown part from the URL\n\t\t\tif (matchedScheme) {\n\t\t\t\tvar prefix = parsedScheme.length - matchedScheme.length;\n\t\t\t\tstart += prefix;\n\t\t\t\turl = url.slice(prefix);\n\t\t\t}\n\n\t\t\t// The URL matched but does not start with a scheme (`www.foo.com`), add it\n\t\t\tif (!parsedScheme.length) {\n\t\t\t\turl = \"http://\" + url;\n\t\t\t}\n\n\t\t\tresult.push({\n\t\t\t\tstart: start,\n\t\t\t\tend: end,\n\t\t\t\tlink: url\n\t\t\t});\n\t\t});\n\t} catch (e) {\n\t\t// withinString is wrapped in a try/catch due to https://github.com/medialize/URI.js/issues/359\n\t}\n\n\treturn result;\n}\n\nmodule.exports = findLinks;\n\n/***/ }),\n/* 229 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar emojiRegExp = __webpack_require__(230)();\n\nfunction findEmoji(text) {\n\tvar result = [];\n\tvar match = void 0;\n\n\twhile (match = emojiRegExp.exec(text)) {\n\t\tresult.push({\n\t\t\tstart: match.index,\n\t\t\tend: match.index + match[0].length,\n\t\t\temoji: match[0]\n\t\t});\n\t}\n\n\treturn result;\n}\n\nmodule.exports = findEmoji;\n\n/***/ }),\n/* 230 */,\n/* 231 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar nickRegExp = /([\\w[\\]\\\\`^{|}-]+)/g;\n\nfunction findNames(text, users) {\n\tvar result = [];\n\n\t// Return early if we don't have any nicknames to find\n\tif (users.length === 0) {\n\t\treturn result;\n\t}\n\n\tvar match = void 0;\n\twhile (match = nickRegExp.exec(text)) {\n\t\tif (users.indexOf(match[1]) > -1) {\n\t\t\tresult.push({\n\t\t\t\tstart: match.index,\n\t\t\t\tend: match.index + match[1].length,\n\t\t\t\tnick: match[1]\n\t\t\t});\n\t\t}\n\t}\n\n\treturn result;\n}\n\nmodule.exports = findNames;\n\n/***/ }),\n/* 232 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar anyIntersection = __webpack_require__(165);\nvar fill = __webpack_require__(233);\n\nvar Object_assign = Object.assign;\n\nif (typeof Object_assign !== \"function\") {\n\tObject_assign = function Object_assign(target) {\n\t\tArray.prototype.slice.call(arguments, 1).forEach(function (obj) {\n\t\t\tObject.keys(obj).forEach(function (key) {\n\t\t\t\ttarget[key] = obj[key];\n\t\t\t});\n\t\t});\n\t\treturn target;\n\t};\n}\n\n// Merge text part information within a styling fragment\nfunction assign(textPart, fragment) {\n\tvar fragStart = fragment.start;\n\tvar start = Math.max(fragment.start, textPart.start);\n\tvar end = Math.min(fragment.end, textPart.end);\n\n\treturn Object_assign({}, fragment, {\n\t\tstart: start,\n\t\tend: end,\n\t\ttext: fragment.text.slice(start - fragStart, end - fragStart)\n\t});\n}\n\n// Merge the style fragments withing the text parts, taking into account\n// boundaries and text sections that have not matched to links or channels.\n// For example, given a string \"foobar\" where \"foo\" and \"bar\" have been\n// identified as parts (channels, links, etc.) and \"fo\", \"ob\" and \"ar\" have 3\n// different styles, the first resulting part will contain fragments \"fo\" and\n// \"o\", and the second resulting part will contain \"b\" and \"ar\". \"o\" and \"b\"\n// fragments will contain duplicate styling attributes.\nfunction merge(textParts, styleFragments) {\n\t// Re-build the overall text (without control codes) from the style fragments\n\tvar cleanText = styleFragments.reduce(function (acc, frag) {\n\t\treturn acc + frag.text;\n\t}, \"\");\n\n\t// Every section of the original text that has not been captured in a \"part\"\n\t// is filled with \"text\" parts, dummy objects with start/end but no extra\n\t// metadata.\n\tvar allParts = textParts.concat(fill(textParts, cleanText)).sort(function (a, b) {\n\t\treturn a.start - b.start;\n\t});\n\n\t// Distribute the style fragments within the text parts\n\treturn allParts.map(function (textPart) {\n\t\ttextPart.fragments = styleFragments.filter(function (fragment) {\n\t\t\treturn anyIntersection(textPart, fragment);\n\t\t}).map(function (fragment) {\n\t\t\treturn assign(textPart, fragment);\n\t\t});\n\n\t\treturn textPart;\n\t});\n}\n\nmodule.exports = merge;\n\n/***/ }),\n/* 233 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// Create plain text entries corresponding to areas of the text that match no\n// existing entries. Returns an empty array if all parts of the text have been\n// parsed into recognizable entries already.\n\nfunction fill(existingEntries, text) {\n\tvar position = 0;\n\n\t// Fill inner parts of the text. For example, if text is `foobarbaz` and both\n\t// `foo` and `baz` have matched into an entry, this will return a dummy entry\n\t// corresponding to `bar`.\n\tvar result = existingEntries.reduce(function (acc, textSegment) {\n\t\tif (textSegment.start > position) {\n\t\t\tacc.push({\n\t\t\t\tstart: position,\n\t\t\t\tend: textSegment.start\n\t\t\t});\n\t\t}\n\t\tposition = textSegment.end;\n\t\treturn acc;\n\t}, []);\n\n\t// Complete the unmatched end of the text with a dummy entry\n\tif (position < text.length) {\n\t\tresult.push({\n\t\t\tstart: position,\n\t\t\tend: text.length\n\t\t});\n\t}\n\n\treturn result;\n}\n\nmodule.exports = fill;\n\n/***/ }),\n/* 234 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar Handlebars = __webpack_require__(1);\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = container.invokePartial(__webpack_require__(4),(depth0 != null ? depth0.from : depth0),{\"name\":\"../user_name\",\"data\":data,\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n + \"is away\\n<i class=\\\"away-message\\\">(\"\n + ((stack1 = __default(__webpack_require__(5)).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.text : depth0),{\"name\":\"parse\",\"hash\":{},\"data\":data})) != null ? stack1 : \"\")\n + \")</i>\\n\";\n},\"usePartial\":true,\"useData\":true});\n\n/***/ }),\n/* 235 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar Handlebars = __webpack_require__(1);\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = container.invokePartial(__webpack_require__(4),(depth0 != null ? depth0.from : depth0),{\"name\":\"../user_name\",\"data\":data,\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n + \"is back\\n\";\n},\"usePartial\":true,\"useData\":true});\n\n/***/ }),\n/* 236 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar Handlebars = __webpack_require__(1);\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n return \"\t\t\t<tr>\\n\t\t\t\t<td class=\\\"hostmask\\\">\"\n + container.escapeExpression(container.lambda((depth0 != null ? depth0.hostmask : depth0), depth0))\n + \"</td>\\n\t\t\t\t<td class=\\\"banned_by\\\">\"\n + ((stack1 = __default(__webpack_require__(5)).call(alias1,(depth0 != null ? depth0.banned_by : depth0),{\"name\":\"parse\",\"hash\":{},\"data\":data})) != null ? stack1 : \"\")\n + \"</td>\\n\t\t\t\t<td class=\\\"banned_at\\\">\"\n + ((stack1 = __default(__webpack_require__(12)).call(alias1,(depth0 != null ? depth0.banned_at : depth0),{\"name\":\"localetime\",\"hash\":{},\"data\":data})) != null ? stack1 : \"\")\n + \"</td>\\n\t\t\t</tr>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \"<table class=\\\"ban-list\\\">\\n\t<thead>\\n\t\t<tr>\\n\t\t\t<th class=\\\"hostmask\\\">Banned</th>\\n\t\t\t<th class=\\\"banned_by\\\">Banned By</th>\\n\t\t\t<th class=\\\"banned_at\\\">Banned At</th>\\n\t\t</tr>\\n\t</thead>\\n\t<tbody>\\n\"\n + ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.bans : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t</tbody>\\n</table>\\n\";\n},\"useData\":true});\n\n/***/ }),\n/* 237 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar Handlebars = __webpack_require__(1);\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n return \"\t\t\t<tr>\\n\t\t\t\t<td class=\\\"channel\\\">\"\n + ((stack1 = __default(__webpack_require__(5)).call(alias1,(depth0 != null ? depth0.channel : depth0),{\"name\":\"parse\",\"hash\":{},\"data\":data})) != null ? stack1 : \"\")\n + \"</td>\\n\t\t\t\t<td class=\\\"users\\\">\"\n + container.escapeExpression(container.lambda((depth0 != null ? depth0.num_users : depth0), depth0))\n + \"</td>\\n\t\t\t\t<td class=\\\"topic\\\">\"\n + ((stack1 = __default(__webpack_require__(5)).call(alias1,(depth0 != null ? depth0.topic : depth0),{\"name\":\"parse\",\"hash\":{},\"data\":data})) != null ? stack1 : \"\")\n + \"</td>\\n\t\t\t</tr>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \"<table class=\\\"channel-list\\\">\\n\t<thead>\\n\t\t<tr>\\n\t\t\t<th class=\\\"channel\\\">Channel</th>\\n\t\t\t<th class=\\\"users\\\">Users</th>\\n\t\t\t<th class=\\\"topic\\\">Topic</th>\\n\t\t</tr>\\n\t</thead>\\n\t<tbody>\\n\"\n + ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.channels : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t</tbody>\\n</table>\\n\";\n},\"useData\":true});\n\n/***/ }),\n/* 238 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar Handlebars = __webpack_require__(1);\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \"username to <b>\"\n + container.escapeExpression(container.lambda((depth0 != null ? depth0.new_ident : depth0), depth0))\n + \"</b>\"\n + ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.new_host : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(2, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"2\":function(container,depth0,helpers,partials,data) {\n return \", and\";\n},\"4\":function(container,depth0,helpers,partials,data) {\n return \"hostname to <i class=\\\"hostmask\\\">\"\n + container.escapeExpression(container.lambda((depth0 != null ? depth0.new_host : depth0), depth0))\n + \"</i>\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n return ((stack1 = container.invokePartial(__webpack_require__(4),depth0,{\"name\":\"../user_name\",\"hash\":{\"mode\":((stack1 = (depth0 != null ? depth0.from : depth0)) != null ? stack1.mode : stack1),\"nick\":((stack1 = (depth0 != null ? depth0.from : depth0)) != null ? stack1.nick : stack1)},\"data\":data,\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n + \"has changed\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.new_ident : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.new_host : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\";\n},\"usePartial\":true,\"useData\":true});\n\n/***/ }),\n/* 239 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar Handlebars = __webpack_require__(1);\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = container.invokePartial(__webpack_require__(4),(depth0 != null ? depth0.from : depth0),{\"name\":\"../user_name\",\"data\":data,\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n + \"<b>\"\n + container.escapeExpression(container.lambda((depth0 != null ? depth0.ctcpType : depth0), depth0))\n + \"</b> <span class=\\\"ctcp-message\\\">\"\n + ((stack1 = __default(__webpack_require__(5)).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.ctcpMessage : depth0),{\"name\":\"parse\",\"hash\":{},\"data\":data})) != null ? stack1 : \"\")\n + \"</span>\\n\";\n},\"usePartial\":true,\"useData\":true});\n\n/***/ }),\n/* 240 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar Handlebars = __webpack_require__(1);\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n return \"\tyou\\n\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = container.invokePartial(__webpack_require__(4),(depth0 != null ? depth0.target : depth0),{\"name\":\"../user_name\",\"data\":data,\"indent\":\"\\t\",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n return ((stack1 = container.invokePartial(__webpack_require__(4),(depth0 != null ? depth0.from : depth0),{\"name\":\"../user_name\",\"data\":data,\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n + \"invited\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.invitedYou : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.program(3, data, 0),\"data\":data})) != null ? stack1 : \"\")\n + \"to\\n\"\n + ((stack1 = __default(__webpack_require__(5)).call(alias1,(depth0 != null ? depth0.channel : depth0),{\"name\":\"parse\",\"hash\":{},\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\";\n},\"usePartial\":true,\"useData\":true});\n\n/***/ }),\n/* 241 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar Handlebars = __webpack_require__(1);\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = container.invokePartial(__webpack_require__(4),(depth0 != null ? depth0.from : depth0),{\"name\":\"../user_name\",\"data\":data,\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n + \"<i class=\\\"hostmask\\\">(\"\n + container.escapeExpression(container.lambda((depth0 != null ? depth0.hostmask : depth0), depth0))\n + \")</i>\\nhas joined the channel\\n\";\n},\"usePartial\":true,\"useData\":true});\n\n/***/ }),\n/* 242 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar Handlebars = __webpack_require__(1);\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \"\t<i class=\\\"part-reason\\\">(\"\n + ((stack1 = __default(__webpack_require__(5)).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.text : depth0),{\"name\":\"parse\",\"hash\":{},\"data\":data})) != null ? stack1 : \"\")\n + \")</i>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = container.invokePartial(__webpack_require__(4),(depth0 != null ? depth0.from : depth0),{\"name\":\"../user_name\",\"data\":data,\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n + \"has kicked\\n\"\n + ((stack1 = container.invokePartial(__webpack_require__(4),(depth0 != null ? depth0.target : depth0),{\"name\":\"../user_name\",\"data\":data,\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n + ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.text : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"usePartial\":true,\"useData\":true});\n\n/***/ }),\n/* 243 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar Handlebars = __webpack_require__(1);\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = container.invokePartial(__webpack_require__(4),(depth0 != null ? depth0.from : depth0),{\"name\":\"../user_name\",\"data\":data,\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n + \"sets mode\\n\"\n + ((stack1 = __default(__webpack_require__(5)).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.text : depth0),{\"name\":\"parse\",\"hash\":{},\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\";\n},\"usePartial\":true,\"useData\":true});\n\n/***/ }),\n/* 244 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar Handlebars = __webpack_require__(1);\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = container.invokePartial(__webpack_require__(4),(depth0 != null ? depth0.from : depth0),{\"name\":\"../user_name\",\"data\":data,\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n + \"is now known as\\n\"\n + ((stack1 = container.invokePartial(__webpack_require__(4),depth0,{\"name\":\"../user_name\",\"hash\":{\"mode\":((stack1 = (depth0 != null ? depth0.from : depth0)) != null ? stack1.mode : stack1),\"nick\":(depth0 != null ? depth0.new_nick : depth0)},\"data\":data,\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"usePartial\":true,\"useData\":true});\n\n/***/ }),\n/* 245 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar Handlebars = __webpack_require__(1);\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \"\t<i class=\\\"part-reason\\\">(\"\n + ((stack1 = __default(__webpack_require__(5)).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.text : depth0),{\"name\":\"parse\",\"hash\":{},\"data\":data})) != null ? stack1 : \"\")\n + \")</i>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = container.invokePartial(__webpack_require__(4),(depth0 != null ? depth0.from : depth0),{\"name\":\"../user_name\",\"data\":data,\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n + \"<i class=\\\"hostmask\\\">(\"\n + container.escapeExpression(container.lambda((depth0 != null ? depth0.hostmask : depth0), depth0))\n + \")</i>\\nhas left the channel\\n\"\n + ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.text : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"usePartial\":true,\"useData\":true});\n\n/***/ }),\n/* 246 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar Handlebars = __webpack_require__(1);\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \"\t<i class=\\\"quit-reason\\\">(\"\n + ((stack1 = __default(__webpack_require__(5)).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.text : depth0),{\"name\":\"parse\",\"hash\":{},\"data\":data})) != null ? stack1 : \"\")\n + \")</i>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = container.invokePartial(__webpack_require__(4),(depth0 != null ? depth0.from : depth0),{\"name\":\"../user_name\",\"data\":data,\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n + \"<i class=\\\"hostmask\\\">(\"\n + container.escapeExpression(container.lambda((depth0 != null ? depth0.hostmask : depth0), depth0))\n + \")</i>\\nhas quit\\n\"\n + ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.text : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"usePartial\":true,\"useData\":true});\n\n/***/ }),\n/* 247 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar Handlebars = __webpack_require__(1);\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = container.invokePartial(__webpack_require__(4),(depth0 != null ? depth0.from : depth0),{\"name\":\"../user_name\",\"data\":data,\"indent\":\"\\t\",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n + \"\thas changed the topic to:\\n\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n return \"\tThe topic is:\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n return ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.from : depth0)) != null ? stack1.nick : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.program(3, data, 0),\"data\":data})) != null ? stack1 : \"\")\n + \"\\n<span class=\\\"new-topic\\\">\"\n + ((stack1 = __default(__webpack_require__(5)).call(alias1,(depth0 != null ? depth0.text : depth0),{\"name\":\"parse\",\"hash\":{},\"data\":data})) != null ? stack1 : \"\")\n + \"</span>\\n\";\n},\"usePartial\":true,\"useData\":true});\n\n/***/ }),\n/* 248 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar Handlebars = __webpack_require__(1);\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \"Topic set by\\n\"\n + ((stack1 = container.invokePartial(__webpack_require__(4),(depth0 != null ? depth0.from : depth0),{\"name\":\"../user_name\",\"data\":data,\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n + \"on \"\n + container.escapeExpression(__default(__webpack_require__(12)).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.when : depth0),{\"name\":\"localetime\",\"hash\":{},\"data\":data}))\n + \"\\n\";\n},\"usePartial\":true,\"useData\":true});\n\n/***/ }),\n/* 249 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar Handlebars = __webpack_require__(1);\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \"\t<dt>Logged in as:</dt>\\n\t<dd>\"\n + container.escapeExpression(container.lambda(((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.account : stack1), depth0))\n + \"</dd>\\n\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression;\n\n return \"\t<dt>Actual host:</dt>\\n\t<dd class=\\\"hostmask\\\"><a href=\\\"https://ipinfo.io/\"\n + alias2(alias1(((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.actualip : stack1), depth0))\n + \"\\\" target=\\\"_blank\\\" rel=\\\"noopener\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.actualip : stack1), depth0))\n + \"</a>\"\n + ((stack1 = __default(__webpack_require__(167)).call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.actualhost : stack1),((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.actualip : stack1),{\"name\":\"notEqual\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"</dd>\\n\";\n},\"4\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \" (\"\n + container.escapeExpression(container.lambda(((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.actualhost : stack1), depth0))\n + \")\";\n},\"6\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \"\t<dt>Real name:</dt>\\n\t<dd>\"\n + ((stack1 = __default(__webpack_require__(5)).call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.real_name : stack1),{\"name\":\"parse\",\"hash\":{},\"data\":data})) != null ? stack1 : \"\")\n + \"</dd>\\n\";\n},\"8\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \"\t<dt>Registered nick:</dt>\\n\t<dd>\"\n + container.escapeExpression(container.lambda(((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.registered_nick : stack1), depth0))\n + \"</dd>\\n\";\n},\"10\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \"\t<dt>Channels:</dt>\\n\t<dd>\"\n + ((stack1 = __default(__webpack_require__(5)).call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.channels : stack1),{\"name\":\"parse\",\"hash\":{},\"data\":data})) != null ? stack1 : \"\")\n + \"</dd>\\n\";\n},\"12\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \"\t<dt>Modes:</dt>\\n\t<dd>\"\n + container.escapeExpression(container.lambda(((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.modes : stack1), depth0))\n + \"</dd>\\n\";\n},\"14\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \"\t<dt>Special:</dt>\\n\t<dd>\"\n + container.escapeExpression(container.lambda(((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.special : stack1), depth0))\n + \"</dd>\\n\";\n},\"16\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \"\t<dt>Operator:</dt>\\n\t<dd>\"\n + container.escapeExpression(container.lambda(((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.operator : stack1), depth0))\n + \"</dd>\\n\";\n},\"18\":function(container,depth0,helpers,partials,data) {\n return \"\t<dt>Available for help:</dt>\\n\t<dd>Yes</dd>\\n\";\n},\"20\":function(container,depth0,helpers,partials,data) {\n return \"\t<dt>Is a bot:</dt>\\n\t<dd>Yes</dd>\\n\";\n},\"22\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \"\t<dt>Away:</dt>\\n\t<dd>\"\n + ((stack1 = __default(__webpack_require__(5)).call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.away : stack1),{\"name\":\"parse\",\"hash\":{},\"data\":data})) != null ? stack1 : \"\")\n + \"</dd>\\n\";\n},\"24\":function(container,depth0,helpers,partials,data) {\n return \"\t<dt>Secure connection:</dt>\\n\t<dd>Yes</dd>\\n\";\n},\"26\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression;\n\n return \"\t<dt>Connected to:</dt>\\n\t<dd>\"\n + alias2(alias1(((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.server : stack1), depth0))\n + \" <i>(\"\n + alias2(alias1(((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.server_info : stack1), depth0))\n + \")</i></dd>\\n\";\n},\"28\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \"\t<dt>Connected at:</dt>\\n\t<dd>\"\n + container.escapeExpression(__default(__webpack_require__(12)).call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.logonTime : stack1),{\"name\":\"localetime\",\"hash\":{},\"data\":data}))\n + \"</dd>\\n\";\n},\"30\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \"\t<dt>Idle since:</dt>\\n\t<dd>\"\n + container.escapeExpression(__default(__webpack_require__(12)).call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.idleTime : stack1),{\"name\":\"localetime\",\"hash\":{},\"data\":data}))\n + \"</dd>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.lambda, alias3=container.escapeExpression;\n\n return \"<p>\"\n + ((stack1 = container.invokePartial(__webpack_require__(4),depth0,{\"name\":\"../user_name\",\"hash\":{\"nick\":((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.nick : stack1)},\"data\":data,\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n + \"</p>\\n<dl class=\\\"whois\\\">\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.account : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\t<dt>Host mask:</dt>\\n\t<dd class=\\\"hostmask\\\">\"\n + alias3(alias2(((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.user : stack1), depth0))\n + \"@\"\n + alias3(alias2(((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.host : stack1), depth0))\n + \"</dd>\\n\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.actualhost : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.real_name : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(6, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.registered_nick : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(8, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.channels : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(10, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.modes : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(12, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.special : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(14, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.operator : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(16, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.helpop : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(18, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.bot : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(20, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.away : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(22, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.secure : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(24, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.server : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(26, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.logonTime : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(28, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.idle : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(30, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"</dl>\\n\";\n},\"usePartial\":true,\"useData\":true});\n\n/***/ }),\n/* 250 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar Handlebars = __webpack_require__(1);\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, alias3=depth0 != null ? depth0 : (container.nullContext || {});\n\n return \"<div\\n\tid=\\\"chan-\"\n + alias2(alias1((depth0 != null ? depth0.id : depth0), depth0))\n + \"\\\"\\n\tclass=\\\"chan \"\n + alias2(alias1((depth0 != null ? depth0.type : depth0), depth0))\n + \"\\\"\\n\tdata-id=\\\"\"\n + alias2(alias1((depth0 != null ? depth0.id : depth0), depth0))\n + \"\\\"\\n\tdata-title=\\\"\"\n + alias2(alias1((depth0 != null ? depth0.name : depth0), depth0))\n + \"\\\"\\n\tdata-type=\\\"\"\n + alias2(alias1((depth0 != null ? depth0.type : depth0), depth0))\n + \"\\\"\\n>\\n\t<div class=\\\"header\\\">\\n\t\t<button class=\\\"lt\\\" aria-label=\\\"Toggle channel list\\\"></button>\\n\"\n + ((stack1 = __default(__webpack_require__(7)).call(alias3,(depth0 != null ? depth0.type : depth0),\"channel\",{\"name\":\"equal\",\"hash\":{},\"fn\":container.program(2, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t\t<button class=\\\"menu\\\" aria-label=\\\"Open the context menu\\\"></button>\\n\t\t<span class=\\\"title\\\">\"\n + alias2(alias1((depth0 != null ? depth0.name : depth0), depth0))\n + \"</span>\\n\t\t<span title=\\\"\"\n + alias2(alias1((depth0 != null ? depth0.topic : depth0), depth0))\n + \"\\\" class=\\\"topic\\\">\"\n + ((stack1 = __default(__webpack_require__(5)).call(alias3,(depth0 != null ? depth0.topic : depth0),{\"name\":\"parse\",\"hash\":{},\"data\":data})) != null ? stack1 : \"\")\n + \"</span>\\n\t</div>\\n\t<div class=\\\"chat\\\">\\n\t\t<div class=\\\"show-more\"\n + ((stack1 = helpers[\"if\"].call(alias3,((stack1 = (depth0 != null ? depth0.messages : depth0)) != null ? stack1.length : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\\">\\n\t\t\t<button class=\\\"show-more-button\\\" data-id=\\\"\"\n + alias2(alias1((depth0 != null ? depth0.id : depth0), depth0))\n + \"\\\">Show older messages</button>\\n\t\t</div>\\n\t\t<div class=\\\"messages\\\"></div>\\n\t</div>\\n\"\n + ((stack1 = __default(__webpack_require__(7)).call(alias3,(depth0 != null ? depth0.type : depth0),\"channel\",{\"name\":\"equal\",\"hash\":{},\"fn\":container.program(6, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"</div>\\n\";\n},\"2\":function(container,depth0,helpers,partials,data) {\n return \"\t\t\t<span class=\\\"rt-tooltip tooltipped tooltipped-w\\\" aria-label=\\\"Toggle user list\\\">\\n\t\t\t\t<button class=\\\"rt\\\" aria-label=\\\"Toggle user list\\\"></button>\\n\t\t\t</span>\\n\";\n},\"4\":function(container,depth0,helpers,partials,data) {\n return \" show\";\n},\"6\":function(container,depth0,helpers,partials,data) {\n return \"\t<aside class=\\\"sidebar\\\">\\n\t\t<div class=\\\"users\\\">\\n\t\t\t<div class=\\\"count\\\">\\n\t\t\t\t<input type=\\\"search\\\" class=\\\"search\\\" aria-label=\\\"Search among the user list\\\" tabindex=\\\"-1\\\">\\n\t\t\t</div>\\n\t\t\t<div class=\\\"names names-filtered\\\"></div>\\n\t\t\t<div class=\\\"names names-original\\\"></div>\\n\t\t</div>\\n\t</aside>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.channels : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"useData\":true});\n\n/***/ }),\n/* 251 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar Handlebars = __webpack_require__(1);\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n return \"<li class=\\\"context-menu-divider\\\" />\\n\";\n},\"useData\":true});\n\n/***/ }),\n/* 252 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar Handlebars = __webpack_require__(1);\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var helper;\n\n return \" data-data=\\\"\"\n + container.escapeExpression(((helper = (helper = helpers.data || (depth0 != null ? depth0.data : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"data\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\"\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"<li class=\\\"context-menu-item context-menu-\"\n + alias4(((helper = (helper = helpers[\"class\"] || (depth0 != null ? depth0[\"class\"] : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"class\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" data-action=\\\"\"\n + alias4(((helper = (helper = helpers.action || (depth0 != null ? depth0.action : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"action\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\"\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.data : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \">\\n\t\"\n + alias4(((helper = (helper = helpers.text || (depth0 != null ? depth0.text : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"text\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\n</li>\\n\";\n},\"useData\":true});\n\n/***/ }),\n/* 253 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar Handlebars = __webpack_require__(1);\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var alias1=container.escapeExpression, alias2=depth0 != null ? depth0 : (container.nullContext || {});\n\n return \"<div class=\\\"date-marker-container tooltipped tooltipped-s\\\" data-time=\\\"\"\n + alias1(container.lambda((depth0 != null ? depth0.time : depth0), depth0))\n + \"\\\" aria-label=\\\"\"\n + alias1(__default(__webpack_require__(254)).call(alias2,(depth0 != null ? depth0.time : depth0),{\"name\":\"localedate\",\"hash\":{},\"data\":data}))\n + \"\\\">\\n\t<div class=\\\"date-marker\\\">\\n\t\t<span class=\\\"date-marker-text\\\" data-label=\\\"\"\n + alias1(__default(__webpack_require__(255)).call(alias2,(depth0 != null ? depth0.time : depth0),{\"name\":\"friendlydate\",\"hash\":{},\"data\":data}))\n + \"\\\"></span>\\n\t</div>\\n</div>\\n\";\n},\"useData\":true});\n\n/***/ }),\n/* 254 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar moment = __webpack_require__(0);\n\nmodule.exports = function (time) {\n\treturn moment(time).format(\"D MMMM YYYY\");\n};\n\n/***/ }),\n/* 255 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar moment = __webpack_require__(0);\n\nmodule.exports = function (time) {\n\t// See http://momentjs.com/docs/#/displaying/calendar-time/\n\treturn moment(time).calendar(null, {\n\t\tsameDay: \"[Today]\",\n\t\tlastDay: \"[Yesterday]\",\n\t\tlastWeek: \"D MMMM YYYY\",\n\t\tsameElse: \"D MMMM YYYY\"\n\t});\n};\n\n/***/ }),\n/* 256 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar Handlebars = __webpack_require__(1);\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n return \" <button class=\\\"previous-image-btn\\\" aria-label=\\\"Previous image\\\"></button>\\n\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n return \" <button class=\\\"next-image-btn\\\" aria-label=\\\"Next image\\\"></button>\\n\";\n},\"5\":function(container,depth0,helpers,partials,data) {\n return \" Open image\\n\";\n},\"7\":function(container,depth0,helpers,partials,data) {\n return \" Visit page\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.lambda, alias3=container.escapeExpression;\n\n return \"<button class=\\\"close-btn\\\" aria-label=\\\"Close\\\"></button>\\n\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.hasPreviousImage : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.hasNextImage : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n<a class=\\\"image-link\\\" href=\\\"\"\n + alias3(alias2((depth0 != null ? depth0.link : depth0), depth0))\n + \"\\\" target=\\\"_blank\\\">\\n <img src=\\\"\"\n + alias3(alias2((depth0 != null ? depth0.image : depth0), depth0))\n + \"\\\" decoding=\\\"async\\\" alt=\\\"\\\">\\n</a>\\n\\n<a class=\\\"btn open-btn\\\" href=\\\"\"\n + alias3(alias2((depth0 != null ? depth0.link : depth0), depth0))\n + \"\\\" target=\\\"_blank\\\">\\n\"\n + ((stack1 = __default(__webpack_require__(7)).call(alias1,(depth0 != null ? depth0.type : depth0),\"image\",{\"name\":\"equal\",\"hash\":{},\"fn\":container.program(5, data, 0),\"inverse\":container.program(7, data, 0),\"data\":data})) != null ? stack1 : \"\")\n + \"</a>\\n\";\n},\"useData\":true});\n\n/***/ }),\n/* 257 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar Handlebars = __webpack_require__(1);\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n return \" self\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n return \" highlight\";\n},\"5\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \" data-from=\\\"\"\n + container.escapeExpression(container.lambda(((stack1 = (depth0 != null ? depth0.from : depth0)) != null ? stack1.nick : stack1), depth0))\n + \"\\\"\";\n},\"7\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = container.invokePartial(__webpack_require__(4),(depth0 != null ? depth0.from : depth0),{\"name\":\"user_name\",\"data\":data,\"indent\":\"\\t\\t\\t\",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"9\":function(container,depth0,helpers,partials,data) {\n return \"\t\t\t<div class=\\\"preview\\\" data-url=\\\"\"\n + container.escapeExpression(container.lambda((depth0 != null ? depth0.link : depth0), depth0))\n + \"\\\"></div>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, alias3=depth0 != null ? depth0 : (container.nullContext || {});\n\n return \"<div class=\\\"msg \"\n + alias2(alias1((depth0 != null ? depth0.type : depth0), depth0))\n + ((stack1 = helpers[\"if\"].call(alias3,(depth0 != null ? depth0.self : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + ((stack1 = helpers[\"if\"].call(alias3,(depth0 != null ? depth0.highlight : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\\" id=\\\"msg-\"\n + alias2(alias1((depth0 != null ? depth0.id : depth0), depth0))\n + \"\\\" data-time=\\\"\"\n + alias2(alias1((depth0 != null ? depth0.time : depth0), depth0))\n + \"\\\"\"\n + ((stack1 = helpers[\"if\"].call(alias3,((stack1 = (depth0 != null ? depth0.from : depth0)) != null ? stack1.nick : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(5, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \">\\n\t<span class=\\\"time tooltipped tooltipped-e\\\" aria-label=\\\"\"\n + alias2(__default(__webpack_require__(12)).call(alias3,(depth0 != null ? depth0.time : depth0),{\"name\":\"localetime\",\"hash\":{},\"data\":data}))\n + \"\\\">\\n\t\t\"\n + alias2(__default(__webpack_require__(21)).call(alias3,(depth0 != null ? depth0.time : depth0),{\"name\":\"tz\",\"hash\":{},\"data\":data}))\n + \"\\n\t</span>\\n\t<span class=\\\"from\\\">\\n\"\n + ((stack1 = helpers[\"if\"].call(alias3,((stack1 = (depth0 != null ? depth0.from : depth0)) != null ? stack1.nick : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(7, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t</span>\\n\t<span class=\\\"content\\\">\\n\t\t<span class=\\\"text\\\">\"\n + ((stack1 = __default(__webpack_require__(5)).call(alias3,(depth0 != null ? depth0.text : depth0),(depth0 != null ? depth0.users : depth0),{\"name\":\"parse\",\"hash\":{},\"data\":data})) != null ? stack1 : \"\")\n + \"</span>\\n\\n\"\n + ((stack1 = helpers.each.call(alias3,(depth0 != null ? depth0.previews : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(9, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t</span>\\n</div>\\n\";\n},\"usePartial\":true,\"useData\":true});\n\n/***/ }),\n/* 258 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar $ = __webpack_require__(2);\nvar fuzzy = __webpack_require__(162);\nvar Mousetrap = __webpack_require__(25);\n\nvar _require = __webpack_require__(259),\n Textcomplete = _require.Textcomplete,\n Textarea = _require.Textarea;\n\nvar emojiMap = __webpack_require__(267);\nvar options = __webpack_require__(13);\nvar constants = __webpack_require__(24);\n\nvar input = $(\"#input\");\nvar textcomplete = void 0;\n\nmodule.exports = {\n\tenable: enableAutocomplete,\n\tdisable: function disable() {\n\t\tinput.off(\"input.tabcomplete\");\n\t\tMousetrap(input.get(0)).off(\"tab\", \"keydown\");\n\n\t\tif (textcomplete) {\n\t\t\ttextcomplete.destroy();\n\t\t\ttextcomplete = null;\n\t\t}\n\t}\n};\n\nvar chat = $(\"#chat\");\nvar sidebar = $(\"#sidebar\");\nvar emojiSearchTerms = Object.keys(emojiMap);\nvar emojiStrategy = {\n\tid: \"emoji\",\n\tmatch: /\\B:([-+\\w:?]{2,}):?$/,\n\tsearch: function search(term, callback) {\n\t\t// Trim colon from the matched term,\n\t\t// as we are unable to get a clean string from match regex\n\t\tterm = term.replace(/:$/, \"\"), callback(fuzzyGrep(term, emojiSearchTerms));\n\t},\n\ttemplate: function template(_ref) {\n\t\tvar _ref2 = _slicedToArray(_ref, 2),\n\t\t string = _ref2[0],\n\t\t original = _ref2[1];\n\n\t\treturn \"<span class=\\\"emoji\\\">\" + emojiMap[original] + \"</span> \" + string;\n\t},\n\treplace: function replace(_ref3) {\n\t\tvar _ref4 = _slicedToArray(_ref3, 2),\n\t\t original = _ref4[1];\n\n\t\treturn emojiMap[original];\n\t},\n\n\tindex: 1\n};\n\nvar nicksStrategy = {\n\tid: \"nicks\",\n\tmatch: /\\B(@([a-zA-Z_[\\]\\\\^{}|`@][a-zA-Z0-9_[\\]\\\\^{}|`-]*)?)$/,\n\tsearch: function search(term, callback) {\n\t\tterm = term.slice(1);\n\t\tif (term[0] === \"@\") {\n\t\t\tcallback(completeNicks(term.slice(1), true).map(function (val) {\n\t\t\t\treturn [\"@\" + val[0], \"@\" + val[1]];\n\t\t\t}));\n\t\t} else {\n\t\t\tcallback(completeNicks(term, true));\n\t\t}\n\t},\n\ttemplate: function template(_ref5) {\n\t\tvar _ref6 = _slicedToArray(_ref5, 1),\n\t\t string = _ref6[0];\n\n\t\treturn string;\n\t},\n\treplace: function replace(_ref7) {\n\t\tvar _ref8 = _slicedToArray(_ref7, 2),\n\t\t original = _ref8[1];\n\n\t\tvar position = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n\n\t\t// If no postfix specified, return autocompleted nick as-is\n\t\tif (!options.nickPostfix) {\n\t\t\treturn original;\n\t\t}\n\n\t\t// If there is whitespace in the input already, append space to nick\n\t\tif (position > 0 && /\\s/.test(input.val())) {\n\t\t\treturn original + \" \";\n\t\t}\n\n\t\t// If nick is first in the input, append specified postfix\n\t\treturn original + options.nickPostfix;\n\t},\n\n\tindex: 1\n};\n\nvar chanStrategy = {\n\tid: \"chans\",\n\tmatch: /\\B((#|\\+|&|![A-Z0-9]{5})([^\\x00\\x0A\\x0D\\x20\\x2C\\x3A]+(:[^\\x00\\x0A\\x0D\\x20\\x2C\\x3A]*)?)?)$/,\n\tsearch: function search(term, callback, match) {\n\t\tcallback(completeChans(match[0]));\n\t},\n\ttemplate: function template(_ref9) {\n\t\tvar _ref10 = _slicedToArray(_ref9, 1),\n\t\t string = _ref10[0];\n\n\t\treturn string;\n\t},\n\treplace: function replace(_ref11) {\n\t\tvar _ref12 = _slicedToArray(_ref11, 2),\n\t\t original = _ref12[1];\n\n\t\treturn original;\n\t},\n\n\tindex: 1\n};\n\nvar commandStrategy = {\n\tid: \"commands\",\n\tmatch: /^\\/(\\w*)$/,\n\tsearch: function search(term, callback) {\n\t\tcallback(completeCommands(\"/\" + term));\n\t},\n\ttemplate: function template(_ref13) {\n\t\tvar _ref14 = _slicedToArray(_ref13, 1),\n\t\t string = _ref14[0];\n\n\t\treturn string;\n\t},\n\treplace: function replace(_ref15) {\n\t\tvar _ref16 = _slicedToArray(_ref15, 2),\n\t\t original = _ref16[1];\n\n\t\treturn original;\n\t},\n\n\tindex: 1\n};\n\nvar foregroundColorStrategy = {\n\tid: \"foreground-colors\",\n\tmatch: /\\x03(\\d{0,2}|[A-Za-z ]{0,10})$/,\n\tsearch: function search(term, callback) {\n\t\tterm = term.toLowerCase();\n\n\t\tvar matchingColorCodes = constants.colorCodeMap.filter(function (i) {\n\t\t\treturn fuzzy.test(term, i[0]) || fuzzy.test(term, i[1]);\n\t\t}).map(function (i) {\n\t\t\tif (fuzzy.test(term, i[1])) {\n\t\t\t\treturn [i[0], fuzzy.match(term, i[1], {\n\t\t\t\t\tpre: \"<b>\",\n\t\t\t\t\tpost: \"</b>\"\n\t\t\t\t}).rendered];\n\t\t\t}\n\t\t\treturn i;\n\t\t});\n\n\t\tcallback(matchingColorCodes);\n\t},\n\ttemplate: function template(value) {\n\t\treturn \"<span class=\\\"irc-fg\" + parseInt(value[0], 10) + \"\\\">\" + value[1] + \"</span>\";\n\t},\n\treplace: function replace(value) {\n\t\treturn \"\\x03\" + value[0];\n\t},\n\n\tindex: 1\n};\n\nvar backgroundColorStrategy = {\n\tid: \"background-colors\",\n\tmatch: /\\x03(\\d{2}),(\\d{0,2}|[A-Za-z ]{0,10})$/,\n\tsearch: function search(term, callback, match) {\n\t\tterm = term.toLowerCase();\n\t\tvar matchingColorCodes = constants.colorCodeMap.filter(function (i) {\n\t\t\treturn fuzzy.test(term, i[0]) || fuzzy.test(term, i[1]);\n\t\t}).map(function (pair) {\n\t\t\tif (fuzzy.test(term, pair[1])) {\n\t\t\t\treturn [pair[0], fuzzy.match(term, pair[1], {\n\t\t\t\t\tpre: \"<b>\",\n\t\t\t\t\tpost: \"</b>\"\n\t\t\t\t}).rendered];\n\t\t\t}\n\t\t\treturn pair;\n\t\t}).map(function (pair) {\n\t\t\treturn pair.concat(match[1]);\n\t\t}); // Needed to pass fg color to `template`...\n\n\t\tcallback(matchingColorCodes);\n\t},\n\ttemplate: function template(value) {\n\t\treturn \"<span class=\\\"irc-fg\" + parseInt(value[2], 10) + \" irc-bg irc-bg\" + parseInt(value[0], 10) + \"\\\">\" + value[1] + \"</span>\";\n\t},\n\treplace: function replace(value) {\n\t\treturn \"\\x03$1,\" + value[0];\n\t},\n\n\tindex: 2\n};\n\nfunction enableAutocomplete() {\n\tvar tabCount = 0;\n\tvar lastMatch = \"\";\n\tvar currentMatches = [];\n\n\tinput.on(\"input.tabcomplete\", function () {\n\t\ttabCount = 0;\n\t\tcurrentMatches = [];\n\t\tlastMatch = \"\";\n\t});\n\n\tMousetrap(input.get(0)).bind(\"tab\", function (e) {\n\t\tif (input.data(\"autocompleting\")) {\n\t\t\treturn;\n\t\t}\n\n\t\te.preventDefault();\n\n\t\tvar text = input.val();\n\n\t\tif (input.get(0).selectionStart !== text.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (tabCount === 0) {\n\t\t\tlastMatch = text.split(/\\s/).pop();\n\n\t\t\tif (lastMatch.length === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcurrentMatches = completeNicks(lastMatch, false);\n\n\t\t\tif (currentMatches.length === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tvar position = input.get(0).selectionStart - lastMatch.length;\n\t\tvar newMatch = nicksStrategy.replace([0, currentMatches[tabCount % currentMatches.length]], position);\n\n\t\tinput.val(text.substr(0, position) + newMatch);\n\n\t\tlastMatch = newMatch;\n\t\ttabCount++;\n\t}, \"keydown\");\n\n\tvar editor = new Textarea(input.get(0));\n\ttextcomplete = new Textcomplete(editor, {\n\t\tdropdown: {\n\t\t\tclassName: \"textcomplete-menu\",\n\t\t\tplacement: \"top\"\n\t\t}\n\t});\n\n\ttextcomplete.register([emojiStrategy, nicksStrategy, chanStrategy, commandStrategy, foregroundColorStrategy, backgroundColorStrategy]);\n\n\t// Activate the first item by default\n\t// https://github.com/yuku-t/textcomplete/issues/93\n\ttextcomplete.on(\"rendered\", function () {\n\t\tif (textcomplete.dropdown.items.length > 0) {\n\t\t\ttextcomplete.dropdown.items[0].activate();\n\t\t}\n\t});\n\n\ttextcomplete.on(\"show\", function () {\n\t\tinput.data(\"autocompleting\", true);\n\t});\n\n\ttextcomplete.on(\"hidden\", function () {\n\t\tinput.data(\"autocompleting\", false);\n\t});\n}\n\nfunction fuzzyGrep(term, array) {\n\tvar results = fuzzy.filter(term, array, {\n\t\tpre: \"<b>\",\n\t\tpost: \"</b>\"\n\t});\n\treturn results.map(function (el) {\n\t\treturn [el.string, el.original];\n\t});\n}\n\nfunction completeNicks(word, isFuzzy) {\n\tvar users = chat.find(\".active .users\");\n\tword = word.toLowerCase();\n\n\t// Lobbies and private chats do not have an user list\n\tif (!users.length) {\n\t\treturn [];\n\t}\n\n\tvar words = users.data(\"nicks\");\n\tif (isFuzzy) {\n\t\treturn fuzzyGrep(word, words);\n\t}\n\treturn $.grep(words, function (w) {\n\t\treturn !w.toLowerCase().indexOf(word);\n\t});\n}\n\nfunction completeCommands(word) {\n\tvar words = constants.commands.slice();\n\n\treturn fuzzyGrep(word, words);\n}\n\nfunction completeChans(word) {\n\tvar words = [];\n\n\tsidebar.find(\".chan.active\").parent().find(\".chan\").each(function () {\n\t\tvar self = $(this);\n\t\tif (!self.hasClass(\"lobby\")) {\n\t\t\twords.push(self.data(\"title\"));\n\t\t}\n\t});\n\n\treturn fuzzyGrep(word, words);\n}\n\n/***/ }),\n/* 259 */,\n/* 260 */,\n/* 261 */,\n/* 262 */,\n/* 263 */,\n/* 264 */,\n/* 265 */,\n/* 266 */,\n/* 267 */\n/***/ (function(module, exports) {\n\nmodule.exports = {\"100\":\"💯\",\"1234\":\"🔢\",\"interrobang\":\"⁉️\",\"tm\":\"™️\",\"information_source\":\"ℹ️\",\"left_right_arrow\":\"↔️\",\"arrow_up_down\":\"↕️\",\"arrow_upper_left\":\"↖️\",\"arrow_upper_right\":\"↗️\",\"arrow_lower_right\":\"↘️\",\"arrow_lower_left\":\"↙️\",\"keyboard\":\"⌨️\",\"sunny\":\"☀️\",\"cloud\":\"☁️\",\"umbrella2\":\"☂️\",\"snowman2\":\"☃️\",\"comet\":\"☄️\",\"ballot_box_with_check\":\"☑️\",\"umbrella\":\"☔\",\"coffee\":\"☕\",\"shamrock\":\"☘️\",\"skull_crossbones\":\"☠️\",\"radioactive\":\"☢️\",\"biohazard\":\"☣️\",\"orthodox_cross\":\"☦️\",\"wheel_of_dharma\":\"☸️\",\"frowning2\":\"☹️\",\"white_frowning_face\":\"☹️\",\"female_sign\":\"♀️\",\"male_sign\":\"♂️\",\"aries\":\"♈\",\"taurus\":\"♉\",\"sagittarius\":\"♐\",\"capricorn\":\"♑\",\"aquarius\":\"♒\",\"pisces\":\"♓\",\"spades\":\"♠️\",\"clubs\":\"♣️\",\"hearts\":\"♥️\",\"diamonds\":\"♦️\",\"hotsprings\":\"♨️\",\"hammer_pick\":\"⚒️\",\"anchor\":\"⚓\",\"crossed_swords\":\"⚔️\",\"medical_symbol\":\"⚕️\",\"scales\":\"⚖️\",\"alembic\":\"⚗️\",\"gear\":\"⚙️\",\"scissors\":\"✂️\",\"white_check_mark\":\"✅\",\"airplane\":\"✈️\",\"envelope\":\"✉️\",\"black_nib\":\"✒️\",\"heavy_check_mark\":\"✔️\",\"heavy_multiplication_x\":\"✖️\",\"star_of_david\":\"✡️\",\"sparkles\":\"✨\",\"eight_spoked_asterisk\":\"✳️\",\"eight_pointed_black_star\":\"✴️\",\"snowflake\":\"❄️\",\"sparkle\":\"❇️\",\"question\":\"❓\",\"grey_question\":\"❔\",\"grey_exclamation\":\"❕\",\"exclamation\":\"❗\",\"heart_exclamation\":\"❣️\",\"heart\":\"❤️\",\"heavy_plus_sign\":\"➕\",\"heavy_minus_sign\":\"➖\",\"heavy_division_sign\":\"➗\",\"arrow_heading_up\":\"⤴️\",\"arrow_heading_down\":\"⤵️\",\"wavy_dash\":\"〰️\",\"congratulations\":\"㊗️\",\"secret\":\"㊙️\",\"grinning\":\"😀\",\"smiley\":\"😃\",\"smile\":\"😄\",\"grin\":\"😁\",\"laughing\":\"😆\",\"satisfied\":\"😆\",\"sweat_smile\":\"😅\",\"joy\":\"😂\",\"rofl\":\"🤣\",\"relaxed\":\"☺️\",\"blush\":\"😊\",\"innocent\":\"😇\",\"slight_smile\":\"🙂\",\"upside_down\":\"🙃\",\"wink\":\"😉\",\"relieved\":\"😌\",\"heart_eyes\":\"😍\",\"kissing_heart\":\"😘\",\"kissing\":\"😗\",\"kissing_smiling_eyes\":\"😙\",\"kissing_closed_eyes\":\"😚\",\"yum\":\"😋\",\"stuck_out_tongue_winking_eye\":\"😜\",\"stuck_out_tongue_closed_eyes\":\"😝\",\"stuck_out_tongue\":\"😛\",\"money_mouth\":\"🤑\",\"hugging\":\"🤗\",\"nerd\":\"🤓\",\"sunglasses\":\"😎\",\"clown\":\"🤡\",\"cowboy\":\"🤠\",\"smirk\":\"😏\",\"unamused\":\"😒\",\"disappointed\":\"😞\",\"pensive\":\"😔\",\"worried\":\"😟\",\"confused\":\"😕\",\"slight_frown\":\"🙁\",\"persevere\":\"😣\",\"confounded\":\"😖\",\"tired_face\":\"😫\",\"weary\":\"😩\",\"triumph\":\"😤\",\"angry\":\"😠\",\"rage\":\"😡\",\"no_mouth\":\"😶\",\"neutral_face\":\"😐\",\"expressionless\":\"😑\",\"hushed\":\"😯\",\"frowning\":\"😦\",\"anguished\":\"😧\",\"open_mouth\":\"😮\",\"astonished\":\"😲\",\"dizzy_face\":\"😵\",\"flushed\":\"😳\",\"scream\":\"😱\",\"fearful\":\"😨\",\"cold_sweat\":\"😰\",\"cry\":\"😢\",\"disappointed_relieved\":\"😥\",\"drooling_face\":\"🤤\",\"sob\":\"😭\",\"sweat\":\"😓\",\"sleepy\":\"😪\",\"sleeping\":\"😴\",\"rolling_eyes\":\"🙄\",\"thinking\":\"🤔\",\"lying_face\":\"🤥\",\"liar\":\"🤥\",\"grimacing\":\"😬\",\"zipper_mouth\":\"🤐\",\"nauseated_face\":\"🤢\",\"sick\":\"🤢\",\"sneezing_face\":\"🤧\",\"mask\":\"😷\",\"thermometer_face\":\"🤒\",\"face_with_thermometer\":\"🤒\",\"head_bandage\":\"🤕\",\"smiling_imp\":\"😈\",\"imp\":\"👿\",\"japanese_ogre\":\"👹\",\"japanese_goblin\":\"👺\",\"poop\":\"💩\",\"shit\":\"💩\",\"hankey\":\"💩\",\"ghost\":\"👻\",\"skull\":\"💀\",\"skeleton\":\"💀\",\"alien\":\"👽\",\"space_invader\":\"👾\",\"robot\":\"🤖\",\"jack_o_lantern\":\"🎃\",\"smiley_cat\":\"😺\",\"smile_cat\":\"😸\",\"joy_cat\":\"😹\",\"heart_eyes_cat\":\"😻\",\"smirk_cat\":\"😼\",\"kissing_cat\":\"😽\",\"scream_cat\":\"🙀\",\"crying_cat_face\":\"😿\",\"pouting_cat\":\"😾\",\"open_hands\":\"👐\",\"raised_hands\":\"🙌\",\"clap\":\"👏\",\"pray\":\"🙏\",\"handshake\":\"🤝\",\"shaking_hands\":\"🤝\",\"thumbsup\":\"👍\",\"+1\":\"👍\",\"thumbsdown\":\"👎\",\"-1\":\"👎\",\"punch\":\"👊\",\"fist\":\"✊\",\"left_facing_fist\":\"🤛\",\"right_facing_fist\":\"🤜\",\"fingers_crossed\":\"🤞\",\"hand_with_index_and_middle_finger_crossed\":\"🤞\",\"v\":\"✌️\",\"metal\":\"🤘\",\"sign_of_the_horns\":\"🤘\",\"ok_hand\":\"👌\",\"point_left\":\"👈\",\"point_right\":\"👉\",\"point_up_2\":\"👆\",\"point_down\":\"👇\",\"point_up\":\"☝️\",\"raised_hand\":\"✋\",\"raised_back_of_hand\":\"🤚\",\"hand_splayed\":\"🖐️\",\"vulcan\":\"🖖\",\"raised_hand_with_part_between_middle_and_ring_fingers\":\"🖖\",\"wave\":\"👋\",\"call_me\":\"🤙\",\"muscle\":\"💪\",\"middle_finger\":\"🖕\",\"writing_hand\":\"✍️\",\"selfie\":\"🤳\",\"nail_care\":\"💅\",\"ring\":\"💍\",\"lipstick\":\"💄\",\"kiss\":\"💋\",\"lips\":\"👄\",\"tongue\":\"👅\",\"ear\":\"👂\",\"nose\":\"👃\",\"footprints\":\"👣\",\"eye\":\"👁️\",\"eyes\":\"👀\",\"speaking_head\":\"🗣️\",\"bust_in_silhouette\":\"👤\",\"busts_in_silhouette\":\"👥\",\"baby\":\"👶\",\"boy\":\"👦\",\"girl\":\"👧\",\"man\":\"👨\",\"woman\":\"👩\",\"blond_haired_woman\":\"👱‍♀️\",\"blond_haired_person\":\"👱\",\"person_with_blond_hair\":\"👱\",\"blond_haired_man\":\"👱‍♂️\",\"older_man\":\"👴\",\"older_woman\":\"👵\",\"grandma\":\"👵\",\"man_with_chinese_cap\":\"👲\",\"man_with_gua_pi_mao\":\"👲\",\"woman_wearing_turban\":\"👳‍♀️\",\"person_wearing_turban\":\"👳\",\"man_with_turban\":\"👳\",\"man_wearing_turban\":\"👳‍♂️\",\"woman_police_officer\":\"👮‍♀️\",\"police_officer\":\"👮\",\"cop\":\"👮\",\"man_police_officer\":\"👮‍♂️\",\"woman_construction_worker\":\"👷‍♀️\",\"construction_worker\":\"👷\",\"man_construction_worker\":\"👷‍♂️\",\"woman_guard\":\"💂‍♀️\",\"guard\":\"💂\",\"man_guard\":\"💂‍♂️\",\"woman_detective\":\"🕵️‍♀️\",\"detective\":\"🕵️\",\"spy\":\"🕵️\",\"sleuth_or_spy\":\"🕵️\",\"man_detective\":\"🕵️‍♂️\",\"woman_health_worker\":\"👩‍⚕️\",\"man_health_worker\":\"👨‍⚕️\",\"woman_farmer\":\"👩‍🌾\",\"man_farmer\":\"👨‍🌾\",\"woman_cook\":\"👩‍🍳\",\"man_cook\":\"👨‍🍳\",\"woman_student\":\"👩‍🎓\",\"man_student\":\"👨‍🎓\",\"woman_singer\":\"👩‍🎤\",\"man_singer\":\"👨‍🎤\",\"woman_teacher\":\"👩‍🏫\",\"man_teacher\":\"👨‍🏫\",\"woman_factory_worker\":\"👩‍🏭\",\"man_factory_worker\":\"👨‍🏭\",\"woman_technologist\":\"👩‍💻\",\"man_technologist\":\"👨‍💻\",\"woman_office_worker\":\"👩‍💼\",\"man_office_worker\":\"👨‍💼\",\"woman_mechanic\":\"👩‍🔧\",\"man_mechanic\":\"👨‍🔧\",\"woman_scientist\":\"👩‍🔬\",\"man_scientist\":\"👨‍🔬\",\"woman_artist\":\"👩‍🎨\",\"man_artist\":\"👨‍🎨\",\"woman_firefighter\":\"👩‍🚒\",\"man_firefighter\":\"👨‍🚒\",\"woman_pilot\":\"👩‍✈️\",\"man_pilot\":\"👨‍✈️\",\"woman_astronaut\":\"👩‍🚀\",\"man_astronaut\":\"👨‍🚀\",\"woman_judge\":\"👩‍⚖️\",\"man_judge\":\"👨‍⚖️\",\"mrs_claus\":\"🤶\",\"mother_christmas\":\"🤶\",\"santa\":\"🎅\",\"princess\":\"👸\",\"prince\":\"🤴\",\"bride_with_veil\":\"👰\",\"man_in_tuxedo\":\"🤵\",\"angel\":\"👼\",\"pregnant_woman\":\"🤰\",\"expecting_woman\":\"🤰\",\"woman_bowing\":\"🙇‍♀️\",\"person_bowing\":\"🙇\",\"man_bowing\":\"🙇‍♂️\",\"person_tipping_hand\":\"💁\",\"information_desk_person\":\"💁\",\"man_tipping_hand\":\"💁‍♂️\",\"woman_tipping_hand\":\"💁‍♀️\",\"person_gesturing_no\":\"🙅\",\"no_good\":\"🙅\",\"man_gesturing_no\":\"🙅‍♂️\",\"woman_gesturing_no\":\"🙅‍♀️\",\"person_gesturing_ok\":\"🙆\",\"ok_woman\":\"🙆\",\"man_gesturing_ok\":\"🙆‍♂️\",\"woman_gesturing_ok\":\"🙆‍♀️\",\"person_raising_hand\":\"🙋\",\"man_raising_hand\":\"🙋‍♂️\",\"woman_raising_hand\":\"🙋‍♀️\",\"woman_facepalming\":\"🤦‍♀️\",\"man_facepalming\":\"🤦‍♂️\",\"person_facepalming\":\"🤦\",\"face_palm\":\"🤦\",\"woman_shrugging\":\"🤷‍♀️\",\"man_shrugging\":\"🤷‍♂️\",\"person_shrugging\":\"🤷\",\"person_pouting\":\"🙎\",\"man_pouting\":\"🙎‍♂️\",\"woman_pouting\":\"🙎‍♀️\",\"person_frowning\":\"🙍\",\"man_frowning\":\"🙍‍♂️\",\"woman_frowning\":\"🙍‍♀️\",\"person_getting_haircut\":\"💇\",\"man_getting_haircut\":\"💇‍♂️\",\"woman_getting_haircut\":\"💇‍♀️\",\"person_getting_massage\":\"💆\",\"man_getting_face_massage\":\"💆‍♂️\",\"woman_getting_face_massage\":\"💆‍♀️\",\"levitate\":\"🕴️\",\"dancer\":\"💃\",\"man_dancing\":\"🕺\",\"male_dancer\":\"🕺\",\"people_with_bunny_ears_partying\":\"👯\",\"dancers\":\"👯\",\"men_with_bunny_ears_partying\":\"👯‍♂️\",\"women_with_bunny_ears_partying\":\"👯‍♀️\",\"woman_walking\":\"🚶‍♀️\",\"person_walking\":\"🚶\",\"man_walking\":\"🚶‍♂️\",\"woman_running\":\"🏃‍♀️\",\"person_running\":\"🏃\",\"runner\":\"🏃\",\"man_running\":\"🏃‍♂️\",\"couple\":\"👫\",\"two_women_holding_hands\":\"👭\",\"two_men_holding_hands\":\"👬\",\"couple_with_heart\":\"💑\",\"couple_ww\":\"👩‍❤️‍👩\",\"couple_mm\":\"👨‍❤️‍👨\",\"couplekiss\":\"💏\",\"kiss_ww\":\"👩‍❤️‍💋‍👩\",\"kiss_mm\":\"👨‍❤️‍💋‍👨\",\"family\":\"👪\",\"family_mwg\":\"👨‍👩‍👧\",\"family_mwgb\":\"👨‍👩‍👧‍👦\",\"family_mwbb\":\"👨‍👩‍👦‍👦\",\"family_mwgg\":\"👨‍👩‍👧‍👧\",\"family_wwb\":\"👩‍👩‍👦\",\"family_wwg\":\"👩‍👩‍👧\",\"family_wwgb\":\"👩‍👩‍👧‍👦\",\"family_wwbb\":\"👩‍👩‍👦‍👦\",\"family_wwgg\":\"👩‍👩‍👧‍👧\",\"family_mmb\":\"👨‍👨‍👦\",\"family_mmg\":\"👨‍👨‍👧\",\"family_mmgb\":\"👨‍👨‍👧‍👦\",\"family_mmbb\":\"👨‍👨‍👦‍👦\",\"family_mmgg\":\"👨‍👨‍👧‍👧\",\"family_woman_boy\":\"👩‍👦\",\"family_woman_girl\":\"👩‍👧\",\"family_woman_girl_boy\":\"👩‍👧‍👦\",\"family_woman_boy_boy\":\"👩‍👦‍👦\",\"family_woman_girl_girl\":\"👩‍👧‍👧\",\"family_man_boy\":\"👨‍👦\",\"family_man_girl\":\"👨‍👧\",\"family_man_girl_boy\":\"👨‍👧‍👦\",\"family_man_boy_boy\":\"👨‍👦‍👦\",\"family_man_girl_girl\":\"👨‍👧‍👧\",\"womans_clothes\":\"👚\",\"shirt\":\"👕\",\"jeans\":\"👖\",\"necktie\":\"👔\",\"dress\":\"👗\",\"bikini\":\"👙\",\"kimono\":\"👘\",\"high_heel\":\"👠\",\"sandal\":\"👡\",\"boot\":\"👢\",\"mans_shoe\":\"👞\",\"athletic_shoe\":\"👟\",\"womans_hat\":\"👒\",\"tophat\":\"🎩\",\"mortar_board\":\"🎓\",\"crown\":\"👑\",\"helmet_with_cross\":\"⛑️\",\"school_satchel\":\"🎒\",\"pouch\":\"👝\",\"purse\":\"👛\",\"handbag\":\"👜\",\"briefcase\":\"💼\",\"eyeglasses\":\"👓\",\"dark_sunglasses\":\"🕶️\",\"closed_umbrella\":\"🌂\",\"dog\":\"🐶\",\"cat\":\"🐱\",\"mouse\":\"🐭\",\"hamster\":\"🐹\",\"rabbit\":\"🐰\",\"fox\":\"🦊\",\"bear\":\"🐻\",\"panda_face\":\"🐼\",\"koala\":\"🐨\",\"tiger\":\"🐯\",\"lion_face\":\"🦁\",\"cow\":\"🐮\",\"pig\":\"🐷\",\"pig_nose\":\"🐽\",\"frog\":\"🐸\",\"monkey_face\":\"🐵\",\"see_no_evil\":\"🙈\",\"hear_no_evil\":\"🙉\",\"speak_no_evil\":\"🙊\",\"monkey\":\"🐒\",\"chicken\":\"🐔\",\"penguin\":\"🐧\",\"bird\":\"🐦\",\"baby_chick\":\"🐤\",\"hatching_chick\":\"🐣\",\"hatched_chick\":\"🐥\",\"duck\":\"🦆\",\"eagle\":\"🦅\",\"owl\":\"🦉\",\"bat\":\"🦇\",\"wolf\":\"🐺\",\"boar\":\"🐗\",\"horse\":\"🐴\",\"unicorn\":\"🦄\",\"bee\":\"🐝\",\"bug\":\"🐛\",\"butterfly\":\"🦋\",\"snail\":\"🐌\",\"shell\":\"🐚\",\"beetle\":\"🐞\",\"ant\":\"🐜\",\"spider\":\"🕷️\",\"spider_web\":\"🕸️\",\"turtle\":\"🐢\",\"snake\":\"🐍\",\"lizard\":\"🦎\",\"scorpion\":\"🦂\",\"crab\":\"🦀\",\"squid\":\"🦑\",\"octopus\":\"🐙\",\"shrimp\":\"🦐\",\"tropical_fish\":\"🐠\",\"fish\":\"🐟\",\"blowfish\":\"🐡\",\"dolphin\":\"🐬\",\"shark\":\"🦈\",\"whale\":\"🐳\",\"whale2\":\"🐋\",\"crocodile\":\"🐊\",\"leopard\":\"🐆\",\"tiger2\":\"🐅\",\"water_buffalo\":\"🐃\",\"ox\":\"🐂\",\"cow2\":\"🐄\",\"deer\":\"🦌\",\"dromedary_camel\":\"🐪\",\"camel\":\"🐫\",\"elephant\":\"🐘\",\"rhino\":\"🦏\",\"gorilla\":\"🦍\",\"racehorse\":\"🐎\",\"pig2\":\"🐖\",\"goat\":\"🐐\",\"ram\":\"🐏\",\"sheep\":\"🐑\",\"dog2\":\"🐕\",\"poodle\":\"🐩\",\"cat2\":\"🐈\",\"rooster\":\"🐓\",\"turkey\":\"🦃\",\"dove\":\"🕊️\",\"rabbit2\":\"🐇\",\"mouse2\":\"🐁\",\"rat\":\"🐀\",\"chipmunk\":\"🐿️\",\"feet\":\"🐾\",\"paw_prints\":\"🐾\",\"dragon\":\"🐉\",\"dragon_face\":\"🐲\",\"cactus\":\"🌵\",\"christmas_tree\":\"🎄\",\"evergreen_tree\":\"🌲\",\"deciduous_tree\":\"🌳\",\"palm_tree\":\"🌴\",\"seedling\":\"🌱\",\"herb\":\"🌿\",\"four_leaf_clover\":\"🍀\",\"bamboo\":\"🎍\",\"tanabata_tree\":\"🎋\",\"leaves\":\"🍃\",\"fallen_leaf\":\"🍂\",\"maple_leaf\":\"🍁\",\"mushroom\":\"🍄\",\"ear_of_rice\":\"🌾\",\"bouquet\":\"💐\",\"tulip\":\"🌷\",\"rose\":\"🌹\",\"wilted_rose\":\"🥀\",\"wilted_flower\":\"🥀\",\"sunflower\":\"🌻\",\"blossom\":\"🌼\",\"cherry_blossom\":\"🌸\",\"hibiscus\":\"🌺\",\"earth_americas\":\"🌎\",\"earth_africa\":\"🌍\",\"earth_asia\":\"🌏\",\"full_moon\":\"🌕\",\"waning_gibbous_moon\":\"🌖\",\"last_quarter_moon\":\"🌗\",\"waning_crescent_moon\":\"🌘\",\"new_moon\":\"🌑\",\"waxing_crescent_moon\":\"🌒\",\"first_quarter_moon\":\"🌓\",\"waxing_gibbous_moon\":\"🌔\",\"new_moon_with_face\":\"🌚\",\"full_moon_with_face\":\"🌝\",\"sun_with_face\":\"🌞\",\"first_quarter_moon_with_face\":\"🌛\",\"last_quarter_moon_with_face\":\"🌜\",\"crescent_moon\":\"🌙\",\"dizzy\":\"💫\",\"star\":\"⭐\",\"star2\":\"🌟\",\"zap\":\"⚡\",\"fire\":\"🔥\",\"flame\":\"🔥\",\"boom\":\"💥\",\"white_sun_small_cloud\":\"🌤️\",\"partly_sunny\":\"⛅\",\"white_sun_cloud\":\"🌥️\",\"white_sun_rain_cloud\":\"🌦️\",\"white_sun_behind_cloud_with_rain\":\"🌦️\",\"rainbow\":\"🌈\",\"cloud_rain\":\"🌧️\",\"thunder_cloud_rain\":\"⛈️\",\"cloud_lightning\":\"🌩️\",\"cloud_snow\":\"🌨️\",\"snowman\":\"⛄\",\"wind_blowing_face\":\"🌬️\",\"dash\":\"💨\",\"cloud_tornado\":\"🌪️\",\"fog\":\"🌫️\",\"ocean\":\"🌊\",\"droplet\":\"💧\",\"sweat_drops\":\"💦\",\"giraffe\":\"🦒\",\"zebra\":\"🦓\",\"hedgehog\":\"🦔\",\"sauropod\":\"🦕\",\"t_rex\":\"🦖\",\"cricket\":\"🦗\",\"green_apple\":\"🍏\",\"apple\":\"🍎\",\"pear\":\"🍐\",\"tangerine\":\"🍊\",\"lemon\":\"🍋\",\"banana\":\"🍌\",\"watermelon\":\"🍉\",\"grapes\":\"🍇\",\"strawberry\":\"🍓\",\"melon\":\"🍈\",\"cherries\":\"🍒\",\"peach\":\"🍑\",\"pineapple\":\"🍍\",\"kiwi\":\"🥝\",\"avocado\":\"🥑\",\"tomato\":\"🍅\",\"eggplant\":\"🍆\",\"cucumber\":\"🥒\",\"carrot\":\"🥕\",\"corn\":\"🌽\",\"hot_pepper\":\"🌶️\",\"potato\":\"🥔\",\"sweet_potato\":\"🍠\",\"chestnut\":\"🌰\",\"peanuts\":\"🥜\",\"shelled_peanut\":\"🥜\",\"honey_pot\":\"🍯\",\"croissant\":\"🥐\",\"bread\":\"🍞\",\"french_bread\":\"🥖\",\"baguette_bread\":\"🥖\",\"cheese\":\"🧀\",\"egg\":\"🥚\",\"cooking\":\"🍳\",\"bacon\":\"🥓\",\"pancakes\":\"🥞\",\"fried_shrimp\":\"🍤\",\"poultry_leg\":\"🍗\",\"meat_on_bone\":\"🍖\",\"pizza\":\"🍕\",\"hotdog\":\"🌭\",\"hamburger\":\"🍔\",\"fries\":\"🍟\",\"stuffed_flatbread\":\"🥙\",\"stuffed_pita\":\"🥙\",\"taco\":\"🌮\",\"burrito\":\"🌯\",\"salad\":\"🥗\",\"shallow_pan_of_food\":\"🥘\",\"paella\":\"🥘\",\"spaghetti\":\"🍝\",\"ramen\":\"🍜\",\"stew\":\"🍲\",\"fish_cake\":\"🍥\",\"sushi\":\"🍣\",\"bento\":\"🍱\",\"curry\":\"🍛\",\"rice_ball\":\"🍙\",\"rice\":\"🍚\",\"rice_cracker\":\"🍘\",\"oden\":\"🍢\",\"dango\":\"🍡\",\"shaved_ice\":\"🍧\",\"ice_cream\":\"🍨\",\"icecream\":\"🍦\",\"cake\":\"🍰\",\"birthday\":\"🎂\",\"custard\":\"🍮\",\"pudding\":\"🍮\",\"flan\":\"🍮\",\"lollipop\":\"🍭\",\"candy\":\"🍬\",\"chocolate_bar\":\"🍫\",\"popcorn\":\"🍿\",\"doughnut\":\"🍩\",\"cookie\":\"🍪\",\"milk\":\"🥛\",\"baby_bottle\":\"🍼\",\"tea\":\"🍵\",\"sake\":\"🍶\",\"beer\":\"🍺\",\"beers\":\"🍻\",\"champagne_glass\":\"🥂\",\"clinking_glass\":\"🥂\",\"wine_glass\":\"🍷\",\"tumbler_glass\":\"🥃\",\"whisky\":\"🥃\",\"cocktail\":\"🍸\",\"tropical_drink\":\"🍹\",\"champagne\":\"🍾\",\"bottle_with_popping_cork\":\"🍾\",\"spoon\":\"🥄\",\"fork_and_knife\":\"🍴\",\"fork_knife_plate\":\"🍽️\",\"dumpling\":\"🥟\",\"fortune_cookie\":\"🥠\",\"takeout_box\":\"🥡\",\"chopsticks\":\"🥢\",\"bowl_with_spoon\":\"🥣\",\"cup_with_straw\":\"🥤\",\"coconut\":\"🥥\",\"broccoli\":\"🥦\",\"pie\":\"🥧\",\"pretzel\":\"🥨\",\"cut_of_meat\":\"🥩\",\"sandwich\":\"🥪\",\"canned_food\":\"🥫\",\"soccer\":\"⚽\",\"basketball\":\"🏀\",\"football\":\"🏈\",\"baseball\":\"⚾\",\"tennis\":\"🎾\",\"volleyball\":\"🏐\",\"rugby_football\":\"🏉\",\"8ball\":\"🎱\",\"ping_pong\":\"🏓\",\"table_tennis\":\"🏓\",\"badminton\":\"🏸\",\"goal\":\"🥅\",\"hockey\":\"🏒\",\"field_hockey\":\"🏑\",\"cricket_game\":\"🏏\",\"cricket_bat_ball\":\"🏏\",\"golf\":\"⛳\",\"bow_and_arrow\":\"🏹\",\"archery\":\"🏹\",\"fishing_pole_and_fish\":\"🎣\",\"boxing_glove\":\"🥊\",\"martial_arts_uniform\":\"🥋\",\"karate_uniform\":\"🥋\",\"ice_skate\":\"⛸️\",\"ski\":\"🎿\",\"skier\":\"⛷️\",\"snowboarder\":\"🏂\",\"woman_lifting_weights\":\"🏋️‍♀️\",\"person_lifting_weights\":\"🏋️\",\"lifter\":\"🏋️\",\"weight_lifter\":\"🏋️\",\"man_lifting_weights\":\"🏋️‍♂️\",\"person_fencing\":\"🤺\",\"fencer\":\"🤺\",\"women_wrestling\":\"🤼‍♀️\",\"men_wrestling\":\"🤼‍♂️\",\"people_wrestling\":\"🤼\",\"wrestlers\":\"🤼\",\"woman_cartwheeling\":\"🤸‍♀️\",\"man_cartwheeling\":\"🤸‍♂️\",\"person_doing_cartwheel\":\"🤸\",\"woman_bouncing_ball\":\"⛹️‍♀️\",\"person_bouncing_ball\":\"⛹️\",\"basketball_player\":\"⛹️\",\"person_with_ball\":\"⛹️\",\"man_bouncing_ball\":\"⛹️‍♂️\",\"woman_playing_handball\":\"🤾‍♀️\",\"man_playing_handball\":\"🤾‍♂️\",\"person_playing_handball\":\"🤾\",\"woman_golfing\":\"🏌️‍♀️\",\"person_golfing\":\"🏌️\",\"golfer\":\"🏌️\",\"man_golfing\":\"🏌️‍♂️\",\"woman_surfing\":\"🏄‍♀️\",\"person_surfing\":\"🏄\",\"surfer\":\"🏄\",\"man_surfing\":\"🏄‍♂️\",\"woman_swimming\":\"🏊‍♀️\",\"person_swimming\":\"🏊\",\"swimmer\":\"🏊\",\"man_swimming\":\"🏊‍♂️\",\"woman_playing_water_polo\":\"🤽‍♀️\",\"man_playing_water_polo\":\"🤽‍♂️\",\"person_playing_water_polo\":\"🤽\",\"woman_rowing_boat\":\"🚣‍♀️\",\"person_rowing_boat\":\"🚣\",\"man_rowing_boat\":\"🚣‍♂️\",\"horse_racing\":\"🏇\",\"woman_biking\":\"🚴‍♀️\",\"person_biking\":\"🚴\",\"bicyclist\":\"🚴\",\"man_biking\":\"🚴‍♂️\",\"woman_mountain_biking\":\"🚵‍♀️\",\"person_mountain_biking\":\"🚵\",\"mountain_bicyclist\":\"🚵\",\"man_mountain_biking\":\"🚵‍♂️\",\"running_shirt_with_sash\":\"🎽\",\"medal\":\"🏅\",\"military_medal\":\"🎖️\",\"first_place\":\"🥇\",\"second_place\":\"🥈\",\"third_place\":\"🥉\",\"trophy\":\"🏆\",\"rosette\":\"🏵️\",\"reminder_ribbon\":\"🎗️\",\"ticket\":\"🎫\",\"tickets\":\"🎟️\",\"circus_tent\":\"🎪\",\"woman_juggling\":\"🤹‍♀️\",\"man_juggling\":\"🤹‍♂️\",\"person_juggling\":\"🤹\",\"juggler\":\"🤹\",\"performing_arts\":\"🎭\",\"art\":\"🎨\",\"clapper\":\"🎬\",\"microphone\":\"🎤\",\"headphones\":\"🎧\",\"musical_score\":\"🎼\",\"musical_keyboard\":\"🎹\",\"drum\":\"🥁\",\"saxophone\":\"🎷\",\"trumpet\":\"🎺\",\"guitar\":\"🎸\",\"violin\":\"🎻\",\"game_die\":\"🎲\",\"dart\":\"🎯\",\"bowling\":\"🎳\",\"video_game\":\"🎮\",\"slot_machine\":\"🎰\",\"sled\":\"🛷\",\"breast_feeding\":\"🤱\",\"person_in_steamy_room\":\"🧖\",\"person_climbing\":\"🧗\",\"person_in_lotus_position\":\"🧘\",\"woman_in_steamy_room\":\"🧖‍♀️\",\"man_in_steamy_room\":\"🧖‍♂️\",\"woman_climbing\":\"🧗‍♀️\",\"man_climbing\":\"🧗‍♂️\",\"woman_in_lotus_position\":\"🧘‍♀️\",\"man_in_lotus_position\":\"🧘‍♂️\",\"red_car\":\"🚗\",\"taxi\":\"🚕\",\"blue_car\":\"🚙\",\"bus\":\"🚌\",\"trolleybus\":\"🚎\",\"race_car\":\"🏎️\",\"racing_car\":\"🏎️\",\"police_car\":\"🚓\",\"ambulance\":\"🚑\",\"fire_engine\":\"🚒\",\"minibus\":\"🚐\",\"truck\":\"🚚\",\"articulated_lorry\":\"🚛\",\"tractor\":\"🚜\",\"scooter\":\"🛴\",\"bike\":\"🚲\",\"motor_scooter\":\"🛵\",\"motorbike\":\"🛵\",\"motorcycle\":\"🏍️\",\"rotating_light\":\"🚨\",\"oncoming_police_car\":\"🚔\",\"oncoming_bus\":\"🚍\",\"oncoming_automobile\":\"🚘\",\"oncoming_taxi\":\"🚖\",\"aerial_tramway\":\"🚡\",\"mountain_cableway\":\"🚠\",\"suspension_railway\":\"🚟\",\"railway_car\":\"🚃\",\"train\":\"🚋\",\"mountain_railway\":\"🚞\",\"monorail\":\"🚝\",\"bullettrain_side\":\"🚄\",\"bullettrain_front\":\"🚅\",\"light_rail\":\"🚈\",\"steam_locomotive\":\"🚂\",\"train2\":\"🚆\",\"metro\":\"🚇\",\"tram\":\"🚊\",\"station\":\"🚉\",\"helicopter\":\"🚁\",\"airplane_small\":\"🛩️\",\"small_airplane\":\"🛩️\",\"airplane_departure\":\"🛫\",\"airplane_arriving\":\"🛬\",\"rocket\":\"🚀\",\"satellite_orbital\":\"🛰️\",\"seat\":\"💺\",\"canoe\":\"🛶\",\"kayak\":\"🛶\",\"sailboat\":\"⛵\",\"motorboat\":\"🛥️\",\"speedboat\":\"🚤\",\"cruise_ship\":\"🛳️\",\"passenger_ship\":\"🛳️\",\"ferry\":\"⛴️\",\"ship\":\"🚢\",\"construction\":\"🚧\",\"fuelpump\":\"⛽\",\"busstop\":\"🚏\",\"vertical_traffic_light\":\"🚦\",\"traffic_light\":\"🚥\",\"map\":\"🗺️\",\"moyai\":\"🗿\",\"statue_of_liberty\":\"🗽\",\"fountain\":\"⛲\",\"tokyo_tower\":\"🗼\",\"european_castle\":\"🏰\",\"japanese_castle\":\"🏯\",\"stadium\":\"🏟️\",\"ferris_wheel\":\"🎡\",\"roller_coaster\":\"🎢\",\"carousel_horse\":\"🎠\",\"beach_umbrella\":\"⛱️\",\"umbrella_on_ground\":\"⛱️\",\"beach\":\"🏖️\",\"island\":\"🏝️\",\"mountain\":\"⛰️\",\"mountain_snow\":\"🏔️\",\"snow_capped_mountain\":\"🏔️\",\"mount_fuji\":\"🗻\",\"volcano\":\"🌋\",\"desert\":\"🏜️\",\"camping\":\"🏕️\",\"tent\":\"⛺\",\"railway_track\":\"🛤️\",\"railroad_track\":\"🛤️\",\"motorway\":\"🛣️\",\"construction_site\":\"🏗️\",\"building_construction\":\"🏗️\",\"factory\":\"🏭\",\"house\":\"🏠\",\"house_with_garden\":\"🏡\",\"homes\":\"🏘️\",\"house_buildings\":\"🏘️\",\"house_abandoned\":\"🏚️\",\"derelict_house_building\":\"🏚️\",\"office\":\"🏢\",\"department_store\":\"🏬\",\"post_office\":\"🏣\",\"european_post_office\":\"🏤\",\"hospital\":\"🏥\",\"bank\":\"🏦\",\"hotel\":\"🏨\",\"convenience_store\":\"🏪\",\"school\":\"🏫\",\"love_hotel\":\"🏩\",\"wedding\":\"💒\",\"classical_building\":\"🏛️\",\"church\":\"⛪\",\"mosque\":\"🕌\",\"synagogue\":\"🕍\",\"kaaba\":\"🕋\",\"shinto_shrine\":\"⛩️\",\"japan\":\"🗾\",\"rice_scene\":\"🎑\",\"park\":\"🏞️\",\"sunrise\":\"🌅\",\"sunrise_over_mountains\":\"🌄\",\"stars\":\"🌠\",\"sparkler\":\"🎇\",\"fireworks\":\"🎆\",\"city_sunset\":\"🌇\",\"city_sunrise\":\"🌇\",\"city_dusk\":\"🌆\",\"cityscape\":\"🏙️\",\"night_with_stars\":\"🌃\",\"milky_way\":\"🌌\",\"bridge_at_night\":\"🌉\",\"foggy\":\"🌁\",\"flying_saucer\":\"🛸\",\"watch\":\"⌚\",\"iphone\":\"📱\",\"calling\":\"📲\",\"computer\":\"💻\",\"desktop\":\"🖥️\",\"printer\":\"🖨️\",\"mouse_three_button\":\"🖱️\",\"three_button_mouse\":\"🖱️\",\"trackball\":\"🖲️\",\"joystick\":\"🕹️\",\"compression\":\"🗜️\",\"minidisc\":\"💽\",\"floppy_disk\":\"💾\",\"cd\":\"💿\",\"dvd\":\"📀\",\"vhs\":\"📼\",\"camera\":\"📷\",\"camera_with_flash\":\"📸\",\"video_camera\":\"📹\",\"movie_camera\":\"🎥\",\"projector\":\"📽️\",\"film_frames\":\"🎞️\",\"telephone_receiver\":\"📞\",\"telephone\":\"☎️\",\"pager\":\"📟\",\"fax\":\"📠\",\"tv\":\"📺\",\"radio\":\"📻\",\"microphone2\":\"🎙️\",\"studio_microphone\":\"🎙️\",\"level_slider\":\"🎚️\",\"control_knobs\":\"🎛️\",\"stopwatch\":\"⏱️\",\"timer\":\"⏲️\",\"alarm_clock\":\"⏰\",\"clock\":\"🕰️\",\"hourglass\":\"⌛\",\"hourglass_flowing_sand\":\"⏳\",\"satellite\":\"📡\",\"battery\":\"🔋\",\"electric_plug\":\"🔌\",\"bulb\":\"💡\",\"flashlight\":\"🔦\",\"candle\":\"🕯️\",\"wastebasket\":\"🗑️\",\"oil\":\"🛢️\",\"money_with_wings\":\"💸\",\"dollar\":\"💵\",\"yen\":\"💴\",\"euro\":\"💶\",\"pound\":\"💷\",\"moneybag\":\"💰\",\"credit_card\":\"💳\",\"gem\":\"💎\",\"wrench\":\"🔧\",\"hammer\":\"🔨\",\"tools\":\"🛠️\",\"hammer_and_wrench\":\"🛠️\",\"pick\":\"⛏️\",\"nut_and_bolt\":\"🔩\",\"chains\":\"⛓️\",\"gun\":\"🔫\",\"bomb\":\"💣\",\"knife\":\"🔪\",\"dagger\":\"🗡️\",\"shield\":\"🛡️\",\"smoking\":\"🚬\",\"coffin\":\"⚰️\",\"urn\":\"⚱️\",\"amphora\":\"🏺\",\"crystal_ball\":\"🔮\",\"prayer_beads\":\"📿\",\"barber\":\"💈\",\"telescope\":\"🔭\",\"microscope\":\"🔬\",\"hole\":\"🕳️\",\"pill\":\"💊\",\"syringe\":\"💉\",\"thermometer\":\"🌡️\",\"toilet\":\"🚽\",\"potable_water\":\"🚰\",\"shower\":\"🚿\",\"bathtub\":\"🛁\",\"bath\":\"🛀\",\"bellhop\":\"🛎️\",\"key\":\"🔑\",\"key2\":\"🗝️\",\"old_key\":\"🗝️\",\"door\":\"🚪\",\"couch\":\"🛋️\",\"bed\":\"🛏️\",\"sleeping_accommodation\":\"🛌\",\"frame_photo\":\"🖼️\",\"frame_with_picture\":\"🖼️\",\"shopping_bags\":\"🛍️\",\"shopping_cart\":\"🛒\",\"shopping_trolley\":\"🛒\",\"gift\":\"🎁\",\"balloon\":\"🎈\",\"flags\":\"🎏\",\"ribbon\":\"🎀\",\"confetti_ball\":\"🎊\",\"tada\":\"🎉\",\"dolls\":\"🎎\",\"izakaya_lantern\":\"🏮\",\"wind_chime\":\"🎐\",\"envelope_with_arrow\":\"📩\",\"incoming_envelope\":\"📨\",\"email\":\"📧\",\"love_letter\":\"💌\",\"inbox_tray\":\"📥\",\"outbox_tray\":\"📤\",\"package\":\"📦\",\"label\":\"🏷️\",\"mailbox_closed\":\"📪\",\"mailbox\":\"📫\",\"mailbox_with_mail\":\"📬\",\"mailbox_with_no_mail\":\"📭\",\"postbox\":\"📮\",\"postal_horn\":\"📯\",\"scroll\":\"📜\",\"page_with_curl\":\"📃\",\"page_facing_up\":\"📄\",\"bookmark_tabs\":\"📑\",\"bar_chart\":\"📊\",\"chart_with_upwards_trend\":\"📈\",\"chart_with_downwards_trend\":\"📉\",\"notepad_spiral\":\"🗒️\",\"spiral_note_pad\":\"🗒️\",\"calendar_spiral\":\"🗓️\",\"spiral_calendar_pad\":\"🗓️\",\"calendar\":\"📆\",\"date\":\"📅\",\"card_index\":\"📇\",\"card_box\":\"🗃️\",\"ballot_box\":\"🗳️\",\"file_cabinet\":\"🗄️\",\"clipboard\":\"📋\",\"file_folder\":\"📁\",\"open_file_folder\":\"📂\",\"dividers\":\"🗂️\",\"newspaper2\":\"🗞️\",\"rolled_up_newspaper\":\"🗞️\",\"newspaper\":\"📰\",\"notebook\":\"📓\",\"notebook_with_decorative_cover\":\"📔\",\"ledger\":\"📒\",\"closed_book\":\"📕\",\"green_book\":\"📗\",\"blue_book\":\"📘\",\"orange_book\":\"📙\",\"books\":\"📚\",\"book\":\"📖\",\"bookmark\":\"🔖\",\"link\":\"🔗\",\"paperclip\":\"📎\",\"paperclips\":\"🖇️\",\"triangular_ruler\":\"📐\",\"straight_ruler\":\"📏\",\"pushpin\":\"📌\",\"round_pushpin\":\"📍\",\"pen_ballpoint\":\"🖊️\",\"lower_left_ballpoint_pen\":\"🖊️\",\"pen_fountain\":\"🖋️\",\"lower_left_fountain_pen\":\"🖋️\",\"paintbrush\":\"🖌️\",\"crayon\":\"🖍️\",\"pencil\":\"📝\",\"memo\":\"📝\",\"pencil2\":\"✏️\",\"mag\":\"🔍\",\"mag_right\":\"🔎\",\"lock_with_ink_pen\":\"🔏\",\"closed_lock_with_key\":\"🔐\",\"lock\":\"🔒\",\"unlock\":\"🔓\",\"orange_heart\":\"🧡\",\"yellow_heart\":\"💛\",\"green_heart\":\"💚\",\"blue_heart\":\"💙\",\"purple_heart\":\"💜\",\"black_heart\":\"🖤\",\"broken_heart\":\"💔\",\"two_hearts\":\"💕\",\"revolving_hearts\":\"💞\",\"heartbeat\":\"💓\",\"heartpulse\":\"💗\",\"sparkling_heart\":\"💖\",\"cupid\":\"💘\",\"gift_heart\":\"💝\",\"heart_decoration\":\"💟\",\"peace\":\"☮️\",\"cross\":\"✝️\",\"star_and_crescent\":\"☪️\",\"om_symbol\":\"🕉️\",\"six_pointed_star\":\"🔯\",\"menorah\":\"🕎\",\"yin_yang\":\"☯️\",\"place_of_worship\":\"🛐\",\"worship_symbol\":\"🛐\",\"ophiuchus\":\"⛎\",\"gemini\":\"♊\",\"cancer\":\"♋\",\"leo\":\"♌\",\"virgo\":\"♍\",\"libra\":\"♎\",\"scorpius\":\"♏\",\"id\":\"🆔\",\"atom\":\"⚛️\",\"accept\":\"🉑\",\"mobile_phone_off\":\"📴\",\"vibration_mode\":\"📳\",\"u6709\":\"🈶\",\"u7121\":\"🈚\",\"u7533\":\"🈸\",\"u55b6\":\"🈺\",\"u6708\":\"🈷️\",\"vs\":\"🆚\",\"white_flower\":\"💮\",\"ideograph_advantage\":\"🉐\",\"u5408\":\"🈴\",\"u6e80\":\"🈵\",\"u5272\":\"🈹\",\"u7981\":\"🈲\",\"a\":\"🅰️\",\"b\":\"🅱️\",\"ab\":\"🆎\",\"cl\":\"🆑\",\"o2\":\"🅾️\",\"sos\":\"🆘\",\"x\":\"❌\",\"o\":\"⭕\",\"octagonal_sign\":\"🛑\",\"stop_sign\":\"🛑\",\"no_entry\":\"⛔\",\"name_badge\":\"📛\",\"no_entry_sign\":\"🚫\",\"anger\":\"💢\",\"no_pedestrians\":\"🚷\",\"do_not_litter\":\"🚯\",\"no_bicycles\":\"🚳\",\"non_potable_water\":\"🚱\",\"underage\":\"🔞\",\"no_mobile_phones\":\"📵\",\"no_smoking\":\"🚭\",\"bangbang\":\"‼️\",\"low_brightness\":\"🔅\",\"high_brightness\":\"🔆\",\"part_alternation_mark\":\"〽️\",\"warning\":\"⚠️\",\"children_crossing\":\"🚸\",\"trident\":\"🔱\",\"fleur_de-lis\":\"⚜️\",\"beginner\":\"🔰\",\"recycle\":\"♻️\",\"u6307\":\"🈯\",\"chart\":\"💹\",\"negative_squared_cross_mark\":\"❎\",\"globe_with_meridians\":\"🌐\",\"diamond_shape_with_a_dot_inside\":\"💠\",\"m\":\"Ⓜ️\",\"cyclone\":\"🌀\",\"zzz\":\"💤\",\"atm\":\"🏧\",\"wc\":\"🚾\",\"wheelchair\":\"♿\",\"parking\":\"🅿️\",\"u7a7a\":\"🈳\",\"sa\":\"🈂️\",\"passport_control\":\"🛂\",\"customs\":\"🛃\",\"baggage_claim\":\"🛄\",\"left_luggage\":\"🛅\",\"mens\":\"🚹\",\"womens\":\"🚺\",\"baby_symbol\":\"🚼\",\"restroom\":\"🚻\",\"put_litter_in_its_place\":\"🚮\",\"cinema\":\"🎦\",\"signal_strength\":\"📶\",\"koko\":\"🈁\",\"symbols\":\"🔣\",\"abc\":\"🔤\",\"abcd\":\"🔡\",\"capital_abcd\":\"🔠\",\"ng\":\"🆖\",\"ok\":\"🆗\",\"up\":\"🆙\",\"cool\":\"🆒\",\"new\":\"🆕\",\"free\":\"🆓\",\"zero\":\"0️⃣\",\"one\":\"1️⃣\",\"two\":\"2️⃣\",\"three\":\"3️⃣\",\"four\":\"4️⃣\",\"five\":\"5️⃣\",\"six\":\"6️⃣\",\"seven\":\"7️⃣\",\"eight\":\"8️⃣\",\"nine\":\"9️⃣\",\"keycap_ten\":\"🔟\",\"hash\":\"#️⃣\",\"asterisk\":\"*️⃣\",\"arrow_forward\":\"▶️\",\"pause_button\":\"⏸️\",\"double_vertical_bar\":\"⏸️\",\"play_pause\":\"⏯️\",\"stop_button\":\"⏹️\",\"record_button\":\"⏺️\",\"eject\":\"⏏️\",\"track_next\":\"⏭️\",\"next_track\":\"⏭️\",\"track_previous\":\"⏮️\",\"previous_track\":\"⏮️\",\"fast_forward\":\"⏩\",\"rewind\":\"⏪\",\"arrow_double_up\":\"⏫\",\"arrow_double_down\":\"⏬\",\"arrow_backward\":\"◀️\",\"arrow_up_small\":\"🔼\",\"arrow_down_small\":\"🔽\",\"arrow_right\":\"➡️\",\"arrow_left\":\"⬅️\",\"arrow_up\":\"⬆️\",\"arrow_down\":\"⬇️\",\"arrow_right_hook\":\"↪️\",\"leftwards_arrow_with_hook\":\"↩️\",\"twisted_rightwards_arrows\":\"🔀\",\"repeat\":\"🔁\",\"repeat_one\":\"🔂\",\"arrows_counterclockwise\":\"🔄\",\"arrows_clockwise\":\"🔃\",\"musical_note\":\"🎵\",\"notes\":\"🎶\",\"heavy_dollar_sign\":\"💲\",\"currency_exchange\":\"💱\",\"copyright\":\"©️\",\"registered\":\"®️\",\"curly_loop\":\"➰\",\"loop\":\"➿\",\"end\":\"🔚\",\"back\":\"🔙\",\"on\":\"🔛\",\"top\":\"🔝\",\"soon\":\"🔜\",\"radio_button\":\"🔘\",\"white_circle\":\"⚪\",\"black_circle\":\"⚫\",\"red_circle\":\"🔴\",\"blue_circle\":\"🔵\",\"small_red_triangle\":\"🔺\",\"small_red_triangle_down\":\"🔻\",\"small_orange_diamond\":\"🔸\",\"small_blue_diamond\":\"🔹\",\"large_orange_diamond\":\"🔶\",\"large_blue_diamond\":\"🔷\",\"white_square_button\":\"🔳\",\"black_square_button\":\"🔲\",\"black_small_square\":\"▪️\",\"white_small_square\":\"▫️\",\"black_medium_small_square\":\"◾\",\"white_medium_small_square\":\"◽\",\"black_medium_square\":\"◼️\",\"white_medium_square\":\"◻️\",\"black_large_square\":\"⬛\",\"white_large_square\":\"⬜\",\"speaker\":\"🔈\",\"mute\":\"🔇\",\"sound\":\"🔉\",\"loud_sound\":\"🔊\",\"bell\":\"🔔\",\"no_bell\":\"🔕\",\"mega\":\"📣\",\"loudspeaker\":\"📢\",\"speech_left\":\"🗨️\",\"left_speech_bubble\":\"🗨️\",\"eye_in_speech_bubble\":\"👁️‍🗨️\",\"speech_balloon\":\"💬\",\"thought_balloon\":\"💭\",\"anger_right\":\"🗯️\",\"right_anger_bubble\":\"🗯️\",\"black_joker\":\"🃏\",\"flower_playing_cards\":\"🎴\",\"mahjong\":\"🀄\",\"clock1\":\"🕐\",\"clock2\":\"🕑\",\"clock3\":\"🕒\",\"clock4\":\"🕓\",\"clock5\":\"🕔\",\"clock6\":\"🕕\",\"clock7\":\"🕖\",\"clock8\":\"🕗\",\"clock9\":\"🕘\",\"clock10\":\"🕙\",\"clock11\":\"🕚\",\"clock12\":\"🕛\",\"clock130\":\"🕜\",\"clock230\":\"🕝\",\"clock330\":\"🕞\",\"clock430\":\"🕟\",\"clock530\":\"🕠\",\"clock630\":\"🕡\",\"clock730\":\"🕢\",\"clock830\":\"🕣\",\"clock930\":\"🕤\",\"clock1030\":\"🕥\",\"clock1130\":\"🕦\",\"clock1230\":\"🕧\",\"flag_white\":\"🏳️\",\"waving_white_flag\":\"🏳️\",\"flag_black\":\"🏴\",\"waving_black_flag\":\"🏴\",\"checkered_flag\":\"🏁\",\"triangular_flag_on_post\":\"🚩\",\"rainbow_flag\":\"🏳️‍🌈\",\"gay_pride_flag\":\"🏳️‍🌈\",\"flag_af\":\"🇦🇫\",\"flag_ax\":\"🇦🇽\",\"flag_al\":\"🇦🇱\",\"flag_dz\":\"🇩🇿\",\"flag_as\":\"🇦🇸\",\"flag_ad\":\"🇦🇩\",\"flag_ao\":\"🇦🇴\",\"flag_ai\":\"🇦🇮\",\"flag_aq\":\"🇦🇶\",\"flag_ag\":\"🇦🇬\",\"flag_ar\":\"🇦🇷\",\"flag_am\":\"🇦🇲\",\"flag_aw\":\"🇦🇼\",\"flag_au\":\"🇦🇺\",\"flag_at\":\"🇦🇹\",\"flag_az\":\"🇦🇿\",\"flag_bs\":\"🇧🇸\",\"flag_bh\":\"🇧🇭\",\"flag_bd\":\"🇧🇩\",\"flag_bb\":\"🇧🇧\",\"flag_by\":\"🇧🇾\",\"flag_be\":\"🇧🇪\",\"flag_bz\":\"🇧🇿\",\"flag_bj\":\"🇧🇯\",\"flag_bm\":\"🇧🇲\",\"flag_bt\":\"🇧🇹\",\"flag_bo\":\"🇧🇴\",\"flag_ba\":\"🇧🇦\",\"flag_bw\":\"🇧🇼\",\"flag_br\":\"🇧🇷\",\"flag_io\":\"🇮🇴\",\"flag_vg\":\"🇻🇬\",\"flag_bn\":\"🇧🇳\",\"flag_bg\":\"🇧🇬\",\"flag_bf\":\"🇧🇫\",\"flag_bi\":\"🇧🇮\",\"flag_kh\":\"🇰🇭\",\"flag_cm\":\"🇨🇲\",\"flag_ca\":\"🇨🇦\",\"flag_ic\":\"🇮🇨\",\"flag_cv\":\"🇨🇻\",\"flag_bq\":\"🇧🇶\",\"flag_ky\":\"🇰🇾\",\"flag_cf\":\"🇨🇫\",\"flag_td\":\"🇹🇩\",\"flag_cl\":\"🇨🇱\",\"chile\":\"🇨🇱\",\"flag_cn\":\"🇨🇳\",\"flag_cx\":\"🇨🇽\",\"flag_cc\":\"🇨🇨\",\"flag_co\":\"🇨🇴\",\"flag_km\":\"🇰🇲\",\"flag_cg\":\"🇨🇬\",\"flag_cd\":\"🇨🇩\",\"congo\":\"🇨🇩\",\"flag_ck\":\"🇨🇰\",\"flag_cr\":\"🇨🇷\",\"flag_ci\":\"🇨🇮\",\"flag_hr\":\"🇭🇷\",\"flag_cu\":\"🇨🇺\",\"flag_cw\":\"🇨🇼\",\"flag_cy\":\"🇨🇾\",\"flag_cz\":\"🇨🇿\",\"flag_dk\":\"🇩🇰\",\"flag_dj\":\"🇩🇯\",\"flag_dm\":\"🇩🇲\",\"flag_do\":\"🇩🇴\",\"flag_ec\":\"🇪🇨\",\"flag_eg\":\"🇪🇬\",\"flag_sv\":\"🇸🇻\",\"flag_gq\":\"🇬🇶\",\"flag_er\":\"🇪🇷\",\"flag_ee\":\"🇪🇪\",\"flag_et\":\"🇪🇹\",\"flag_eu\":\"🇪🇺\",\"flag_fk\":\"🇫🇰\",\"flag_fo\":\"🇫🇴\",\"flag_fj\":\"🇫🇯\",\"flag_fi\":\"🇫🇮\",\"flag_fr\":\"🇫🇷\",\"flag_gf\":\"🇬🇫\",\"flag_pf\":\"🇵🇫\",\"flag_tf\":\"🇹🇫\",\"flag_ga\":\"🇬🇦\",\"flag_gm\":\"🇬🇲\",\"flag_ge\":\"🇬🇪\",\"flag_de\":\"🇩🇪\",\"flag_gh\":\"🇬🇭\",\"flag_gi\":\"🇬🇮\",\"flag_gr\":\"🇬🇷\",\"flag_gl\":\"🇬🇱\",\"flag_gd\":\"🇬🇩\",\"flag_gp\":\"🇬🇵\",\"flag_gu\":\"🇬🇺\",\"flag_gt\":\"🇬🇹\",\"flag_gg\":\"🇬🇬\",\"flag_gn\":\"🇬🇳\",\"flag_gw\":\"🇬🇼\",\"flag_gy\":\"🇬🇾\",\"flag_ht\":\"🇭🇹\",\"flag_hn\":\"🇭🇳\",\"flag_hk\":\"🇭🇰\",\"flag_hu\":\"🇭🇺\",\"flag_is\":\"🇮🇸\",\"flag_in\":\"🇮🇳\",\"flag_id\":\"🇮🇩\",\"indonesia\":\"🇮🇩\",\"flag_ir\":\"🇮🇷\",\"flag_iq\":\"🇮🇶\",\"flag_ie\":\"🇮🇪\",\"flag_im\":\"🇮🇲\",\"flag_il\":\"🇮🇱\",\"flag_it\":\"🇮🇹\",\"flag_jm\":\"🇯🇲\",\"flag_jp\":\"🇯🇵\",\"crossed_flags\":\"🎌\",\"flag_je\":\"🇯🇪\",\"flag_jo\":\"🇯🇴\",\"flag_kz\":\"🇰🇿\",\"flag_ke\":\"🇰🇪\",\"flag_ki\":\"🇰🇮\",\"flag_xk\":\"🇽🇰\",\"flag_kw\":\"🇰🇼\",\"flag_kg\":\"🇰🇬\",\"flag_la\":\"🇱🇦\",\"flag_lv\":\"🇱🇻\",\"flag_lb\":\"🇱🇧\",\"flag_ls\":\"🇱🇸\",\"flag_lr\":\"🇱🇷\",\"flag_ly\":\"🇱🇾\",\"flag_li\":\"🇱🇮\",\"flag_lt\":\"🇱🇹\",\"flag_lu\":\"🇱🇺\",\"flag_mo\":\"🇲🇴\",\"flag_mk\":\"🇲🇰\",\"flag_mg\":\"🇲🇬\",\"flag_mw\":\"🇲🇼\",\"flag_my\":\"🇲🇾\",\"flag_mv\":\"🇲🇻\",\"flag_ml\":\"🇲🇱\",\"flag_mt\":\"🇲🇹\",\"flag_mh\":\"🇲🇭\",\"flag_mq\":\"🇲🇶\",\"flag_mr\":\"🇲🇷\",\"flag_mu\":\"🇲🇺\",\"flag_yt\":\"🇾🇹\",\"flag_mx\":\"🇲🇽\",\"flag_fm\":\"🇫🇲\",\"flag_md\":\"🇲🇩\",\"flag_mc\":\"🇲🇨\",\"flag_mn\":\"🇲🇳\",\"flag_me\":\"🇲🇪\",\"flag_ms\":\"🇲🇸\",\"flag_ma\":\"🇲🇦\",\"flag_mz\":\"🇲🇿\",\"flag_mm\":\"🇲🇲\",\"flag_na\":\"🇳🇦\",\"flag_nr\":\"🇳🇷\",\"flag_np\":\"🇳🇵\",\"flag_nl\":\"🇳🇱\",\"flag_nc\":\"🇳🇨\",\"flag_nz\":\"🇳🇿\",\"flag_ni\":\"🇳🇮\",\"flag_ne\":\"🇳🇪\",\"flag_ng\":\"🇳🇬\",\"nigeria\":\"🇳🇬\",\"flag_nu\":\"🇳🇺\",\"flag_nf\":\"🇳🇫\",\"flag_kp\":\"🇰🇵\",\"flag_mp\":\"🇲🇵\",\"flag_no\":\"🇳🇴\",\"flag_om\":\"🇴🇲\",\"flag_pk\":\"🇵🇰\",\"flag_pw\":\"🇵🇼\",\"flag_ps\":\"🇵🇸\",\"flag_pa\":\"🇵🇦\",\"flag_pg\":\"🇵🇬\",\"flag_py\":\"🇵🇾\",\"flag_pe\":\"🇵🇪\",\"flag_ph\":\"🇵🇭\",\"flag_pn\":\"🇵🇳\",\"flag_pl\":\"🇵🇱\",\"flag_pt\":\"🇵🇹\",\"flag_pr\":\"🇵🇷\",\"flag_qa\":\"🇶🇦\",\"flag_re\":\"🇷🇪\",\"flag_ro\":\"🇷🇴\",\"flag_ru\":\"🇷🇺\",\"flag_rw\":\"🇷🇼\",\"flag_ws\":\"🇼🇸\",\"flag_sm\":\"🇸🇲\",\"flag_st\":\"🇸🇹\",\"flag_sa\":\"🇸🇦\",\"saudiarabia\":\"🇸🇦\",\"saudi\":\"🇸🇦\",\"flag_sn\":\"🇸🇳\",\"flag_rs\":\"🇷🇸\",\"flag_sc\":\"🇸🇨\",\"flag_sl\":\"🇸🇱\",\"flag_sg\":\"🇸🇬\",\"flag_sx\":\"🇸🇽\",\"flag_sk\":\"🇸🇰\",\"flag_si\":\"🇸🇮\",\"flag_gs\":\"🇬🇸\",\"flag_sb\":\"🇸🇧\",\"flag_so\":\"🇸🇴\",\"flag_za\":\"🇿🇦\",\"flag_kr\":\"🇰🇷\",\"flag_ss\":\"🇸🇸\",\"flag_es\":\"🇪🇸\",\"flag_lk\":\"🇱🇰\",\"flag_bl\":\"🇧🇱\",\"flag_sh\":\"🇸🇭\",\"flag_kn\":\"🇰🇳\",\"flag_lc\":\"🇱🇨\",\"flag_pm\":\"🇵🇲\",\"flag_vc\":\"🇻🇨\",\"flag_sd\":\"🇸🇩\",\"flag_sr\":\"🇸🇷\",\"flag_sz\":\"🇸🇿\",\"flag_se\":\"🇸🇪\",\"flag_ch\":\"🇨🇭\",\"flag_sy\":\"🇸🇾\",\"flag_tw\":\"🇹🇼\",\"flag_tj\":\"🇹🇯\",\"flag_tz\":\"🇹🇿\",\"flag_th\":\"🇹🇭\",\"flag_tl\":\"🇹🇱\",\"flag_tg\":\"🇹🇬\",\"flag_tk\":\"🇹🇰\",\"flag_to\":\"🇹🇴\",\"flag_tt\":\"🇹🇹\",\"flag_tn\":\"🇹🇳\",\"flag_tr\":\"🇹🇷\",\"flag_tm\":\"🇹🇲\",\"turkmenistan\":\"🇹🇲\",\"flag_tc\":\"🇹🇨\",\"flag_tv\":\"🇹🇻\",\"tuvalu\":\"🇹🇻\",\"flag_vi\":\"🇻🇮\",\"flag_ug\":\"🇺🇬\",\"flag_ua\":\"🇺🇦\",\"flag_ae\":\"🇦🇪\",\"flag_gb\":\"🇬🇧\",\"flag_us\":\"🇺🇸\",\"flag_uy\":\"🇺🇾\",\"flag_uz\":\"🇺🇿\",\"flag_vu\":\"🇻🇺\",\"flag_va\":\"🇻🇦\",\"flag_ve\":\"🇻🇪\",\"flag_vn\":\"🇻🇳\",\"flag_wf\":\"🇼🇫\",\"flag_eh\":\"🇪🇭\",\"flag_ye\":\"🇾🇪\",\"flag_zm\":\"🇿🇲\",\"flag_zw\":\"🇿🇼\",\"flag_ac\":\"🇦🇨\",\"flag_ta\":\"🇹🇦\",\"flag_bv\":\"🇧🇻\",\"flag_hm\":\"🇭🇲\",\"flag_sj\":\"🇸🇯\",\"flag_um\":\"🇺🇲\",\"flag_ea\":\"🇪🇦\",\"flag_cp\":\"🇨🇵\",\"flag_dg\":\"🇩🇬\",\"flag_mf\":\"🇲🇫\",\"united_nations\":\"🇺🇳\",\"england\":\"🏴󠁧󠁢󠁥󠁮󠁧󠁿\",\"scotland\":\"🏴󠁧󠁢󠁳󠁣󠁴󠁿\",\"wales\":\"🏴󠁧󠁢󠁷󠁬󠁳󠁿\",\"asterisk_symbol\":\"*️\",\"regional_indicator_z\":\"🇿\",\"regional_indicator_y\":\"🇾\",\"regional_indicator_x\":\"🇽\",\"pound_symbol\":\"#️\",\"regional_indicator_w\":\"🇼\",\"regional_indicator_v\":\"🇻\",\"regional_indicator_u\":\"🇺\",\"regional_indicator_t\":\"🇹\",\"regional_indicator_s\":\"🇸\",\"regional_indicator_r\":\"🇷\",\"regional_indicator_q\":\"🇶\",\"regional_indicator_p\":\"🇵\",\"regional_indicator_o\":\"🇴\",\"regional_indicator_n\":\"🇳\",\"regional_indicator_m\":\"🇲\",\"regional_indicator_l\":\"🇱\",\"regional_indicator_k\":\"🇰\",\"regional_indicator_j\":\"🇯\",\"regional_indicator_i\":\"🇮\",\"regional_indicator_h\":\"🇭\",\"regional_indicator_g\":\"🇬\",\"regional_indicator_f\":\"🇫\",\"regional_indicator_e\":\"🇪\",\"regional_indicator_d\":\"🇩\",\"regional_indicator_c\":\"🇨\",\"regional_indicator_b\":\"🇧\",\"regional_indicator_a\":\"🇦\",\"digit_nine\":\"9️\",\"digit_eight\":\"8️\",\"digit_seven\":\"7️\",\"digit_six\":\"6️\",\"digit_five\":\"5️\",\"digit_four\":\"4️\",\"digit_three\":\"3️\",\"digit_two\":\"2️\",\"digit_one\":\"1️\",\"digit_zero\":\"0️\",\"family_man_woman_boy\":\"👨‍👩‍👦\",\"couple_with_heart_woman_man\":\"👩‍❤️‍👨\",\"kiss_woman_man\":\"👩‍❤️‍💋‍👨\",\"face_with_raised_eyebrow\":\"🤨\",\"star_struck\":\"🤩\",\"crazy_face\":\"🤪\",\"shushing_face\":\"🤫\",\"face_with_symbols_over_mouth\":\"🤬\",\"face_with_hand_over_mouth\":\"🤭\",\"face_vomiting\":\"🤮\",\"exploding_head\":\"🤯\",\"face_with_monocle\":\"🧐\",\"adult\":\"🧑\",\"child\":\"🧒\",\"older_adult\":\"🧓\",\"bearded_person\":\"🧔\",\"woman_with_headscarf\":\"🧕\",\"brain\":\"🧠\",\"billed_cap\":\"🧢\",\"mage\":\"🧙\",\"fairy\":\"🧚\",\"vampire\":\"🧛\",\"merperson\":\"🧜\",\"elf\":\"🧝\",\"genie\":\"🧞\",\"zombie\":\"🧟\",\"scarf\":\"🧣\",\"gloves\":\"🧤\",\"coat\":\"🧥\",\"socks\":\"🧦\",\"love_you_gesture\":\"🤟\",\"palms_up_together\":\"🤲\",\"woman_mage\":\"🧙‍♀️\",\"man_mage\":\"🧙‍♂️\",\"woman_fairy\":\"🧚‍♀️\",\"man_fairy\":\"🧚‍♂️\",\"woman_vampire\":\"🧛‍♀️\",\"man_vampire\":\"🧛‍♂️\",\"mermaid\":\"🧜‍♀️\",\"merman\":\"🧜‍♂️\",\"woman_elf\":\"🧝‍♀️\",\"man_elf\":\"🧝‍♂️\",\"woman_genie\":\"🧞‍♀️\",\"man_genie\":\"🧞‍♂️\",\"woman_zombie\":\"🧟‍♀️\",\"man_zombie\":\"🧟‍♂️\"}\n\n/***/ }),\n/* 268 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar Handlebars = __webpack_require__(1);\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n return \" self\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n return \" highlight\";\n},\"5\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \" data-from=\\\"\"\n + container.escapeExpression(container.lambda(((stack1 = (depth0 != null ? depth0.from : depth0)) != null ? stack1.nick : stack1), depth0))\n + \"\\\"\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, alias3=depth0 != null ? depth0 : (container.nullContext || {});\n\n return \"<div class=\\\"msg \"\n + alias2(alias1((depth0 != null ? depth0.type : depth0), depth0))\n + ((stack1 = helpers[\"if\"].call(alias3,(depth0 != null ? depth0.self : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + ((stack1 = helpers[\"if\"].call(alias3,(depth0 != null ? depth0.highlight : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\\"\\n\tdata-type=\\\"\"\n + alias2(alias1((depth0 != null ? depth0.type : depth0), depth0))\n + \"\\\" id=\\\"msg-\"\n + alias2(alias1((depth0 != null ? depth0.id : depth0), depth0))\n + \"\\\" data-time=\\\"\"\n + alias2(alias1((depth0 != null ? depth0.time : depth0), depth0))\n + \"\\\"\"\n + ((stack1 = helpers[\"if\"].call(alias3,((stack1 = (depth0 != null ? depth0.from : depth0)) != null ? stack1.nick : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(5, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \">\\n\t<span class=\\\"time tooltipped tooltipped-e\\\" aria-label=\\\"\"\n + alias2(__default(__webpack_require__(12)).call(alias3,(depth0 != null ? depth0.time : depth0),{\"name\":\"localetime\",\"hash\":{},\"data\":data}))\n + \"\\\">\\n\t\t\"\n + alias2(__default(__webpack_require__(21)).call(alias3,(depth0 != null ? depth0.time : depth0),{\"name\":\"tz\",\"hash\":{},\"data\":data}))\n + \"\\n\t</span>\\n\t<span class=\\\"from\\\"></span>\\n\t<span class=\\\"content\\\"></span>\\n</div>\\n\";\n},\"useData\":true});\n\n/***/ }),\n/* 269 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar Handlebars = __webpack_require__(1);\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var alias1=container.escapeExpression;\n\n return \"<div class=\\\"msg condensed closed\\\" data-time=\\\"\"\n + alias1(container.lambda((depth0 != null ? depth0.time : depth0), depth0))\n + \"\\\">\\n\t<div class=\\\"condensed-summary\\\">\\n\t\t<span class=\\\"time\\\">\"\n + alias1(__default(__webpack_require__(21)).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.time : depth0),{\"name\":\"tz\",\"hash\":{},\"data\":data}))\n + \"</span>\\n\t\t<span class=\\\"from\\\"></span>\\n\t\t<span class=\\\"content\\\"></span>\\n\t</div>\\n</div>\\n\";\n},\"useData\":true});\n\n/***/ }),\n/* 270 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar Handlebars = __webpack_require__(1);\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n return \"<button class=\\\"toggle-button\\\" aria-label=\\\"Toggle status messages\\\"></button>\\n\";\n},\"useData\":true});\n\n/***/ }),\n/* 271 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar Handlebars = __webpack_require__(1);\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n return \"<div class=\\\"toggle-content toggle-type-\"\n + container.escapeExpression(container.lambda((depth0 != null ? depth0.type : depth0), depth0))\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.shown : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(2, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\\">\\n\"\n + ((stack1 = __default(__webpack_require__(7)).call(alias1,(depth0 != null ? depth0.type : depth0),\"image\",{\"name\":\"equal\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + ((stack1 = __default(__webpack_require__(7)).call(alias1,(depth0 != null ? depth0.type : depth0),\"audio\",{\"name\":\"equal\",\"hash\":{},\"fn\":container.program(6, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + ((stack1 = __default(__webpack_require__(7)).call(alias1,(depth0 != null ? depth0.type : depth0),\"video\",{\"name\":\"equal\",\"hash\":{},\"fn\":container.program(8, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + ((stack1 = __default(__webpack_require__(7)).call(alias1,(depth0 != null ? depth0.type : depth0),\"link\",{\"name\":\"equal\",\"hash\":{},\"fn\":container.program(10, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"</div>\\n\";\n},\"2\":function(container,depth0,helpers,partials,data) {\n return \" show\";\n},\"4\":function(container,depth0,helpers,partials,data) {\n var alias1=container.lambda, alias2=container.escapeExpression;\n\n return \"\t\t<a class=\\\"toggle-thumbnail\\\" href=\\\"\"\n + alias2(alias1((depth0 != null ? depth0.link : depth0), depth0))\n + \"\\\" target=\\\"_blank\\\" rel=\\\"noopener\\\">\\n\t\t\t<img src=\\\"\"\n + alias2(alias1((depth0 != null ? depth0.thumb : depth0), depth0))\n + \"\\\" decoding=\\\"async\\\" alt=\\\"\\\">\\n\t\t</a>\\n\";\n},\"6\":function(container,depth0,helpers,partials,data) {\n var alias1=container.lambda, alias2=container.escapeExpression;\n\n return \"\t\t<audio controls preload=\\\"metadata\\\">\\n\t\t\t<source src=\\\"\"\n + alias2(alias1((depth0 != null ? depth0.link : depth0), depth0))\n + \"\\\" type=\\\"\"\n + alias2(alias1((depth0 != null ? depth0.res : depth0), depth0))\n + \"\\\">\\n\t\t\tYour browser does not support the audio element.\\n\t\t</audio>\\n\";\n},\"8\":function(container,depth0,helpers,partials,data) {\n var alias1=container.lambda, alias2=container.escapeExpression;\n\n return \"\t\t<video width=\\\"320\\\" height=\\\"240\\\" preload=\\\"metadata\\\" controls>\\n\t\t\t<source src=\\\"\"\n + alias2(alias1((depth0 != null ? depth0.link : depth0), depth0))\n + \"\\\" type=\\\"\"\n + alias2(alias1((depth0 != null ? depth0.res : depth0), depth0))\n + \"\\\">\\n\t\t\tYour browser does not support the video element.\\n\t\t</video>\\n\";\n},\"10\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression;\n\n return ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.thumb : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(11, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t\t<a class=\\\"toggle-text\\\" href=\\\"\"\n + alias2(alias1((depth0 != null ? depth0.link : depth0), depth0))\n + \"\\\" target=\\\"_blank\\\" rel=\\\"noopener\\\">\\n\t\t\t<div class=\\\"head\\\" title=\\\"\"\n + alias2(alias1((depth0 != null ? depth0.head : depth0), depth0))\n + \"\\\">\"\n + alias2(alias1((depth0 != null ? depth0.head : depth0), depth0))\n + \"</div>\\n\t\t\t<div class=\\\"body\\\" title=\\\"\"\n + alias2(alias1((depth0 != null ? depth0.body : depth0), depth0))\n + \"\\\">\"\n + alias2(alias1((depth0 != null ? depth0.body : depth0), depth0))\n + \"</div>\\n\t\t</a>\\n\";\n},\"11\":function(container,depth0,helpers,partials,data) {\n var alias1=container.lambda, alias2=container.escapeExpression;\n\n return \"\t\t\t<a class=\\\"toggle-thumbnail\\\" href=\\\"\"\n + alias2(alias1((depth0 != null ? depth0.link : depth0), depth0))\n + \"\\\" target=\\\"_blank\\\" rel=\\\"noopener\\\">\\n\t\t\t\t<img src=\\\"\"\n + alias2(alias1((depth0 != null ? depth0.thumb : depth0), depth0))\n + \"\\\" decoding=\\\"async\\\" alt=\\\"\\\" class=\\\"thumb\\\">\\n\t\t\t</a>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = helpers.blockHelperMissing.call(depth0,container.lambda((depth0 != null ? depth0.preview : depth0), depth0),{\"name\":\"preview\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"useData\":true});\n\n/***/ }),\n/* 272 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar Handlebars = __webpack_require__(1);\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n return \"<button class=\\\"toggle-button toggle-preview \"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.shown : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(2, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\\"\\n data-url=\\\"\"\n + container.escapeExpression(container.lambda((depth0 != null ? depth0.link : depth0), depth0))\n + \"\\\"\\n\"\n + ((stack1 = __default(__webpack_require__(7)).call(alias1,(depth0 != null ? depth0.type : depth0),\"image\",{\"name\":\"equal\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.program(6, data, 0),\"data\":data})) != null ? stack1 : \"\")\n + \"></button>\\n\";\n},\"2\":function(container,depth0,helpers,partials,data) {\n return \" opened\";\n},\"4\":function(container,depth0,helpers,partials,data) {\n return \" aria-label=\\\"Toggle image preview\\\"\\n\";\n},\"6\":function(container,depth0,helpers,partials,data) {\n return \" aria-label=\\\"Toggle website preview\\\"\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = helpers.blockHelperMissing.call(depth0,container.lambda((depth0 != null ? depth0.preview : depth0), depth0),{\"name\":\"preview\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"useData\":true});\n\n/***/ }),\n/* 273 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar Handlebars = __webpack_require__(1);\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n return \" self\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n return \" highlight\";\n},\"5\":function(container,depth0,helpers,partials,data) {\n return \"\t\t\t<span>\"\n + container.escapeExpression(container.lambda(depth0, depth0))\n + \"</span>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, alias3=container.lambda;\n\n return \"<div class=\\\"msg msg-\"\n + alias2(__default(__webpack_require__(23)).call(alias1,(depth0 != null ? depth0.command : depth0),{\"name\":\"slugify\",\"hash\":{},\"data\":data}))\n + \" \"\n + alias2(alias3((depth0 != null ? depth0.type : depth0), depth0))\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.self : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.highlight : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\\" id=\\\"msg-\"\n + alias2(alias3((depth0 != null ? depth0.id : depth0), depth0))\n + \"\\\" data-time=\\\"\"\n + alias2(alias3((depth0 != null ? depth0.time : depth0), depth0))\n + \"\\\">\\n\t<span class=\\\"time tooltipped tooltipped-e\\\" aria-label=\\\"\"\n + alias2(__default(__webpack_require__(12)).call(alias1,(depth0 != null ? depth0.time : depth0),{\"name\":\"localetime\",\"hash\":{},\"data\":data}))\n + \"\\\">\\n\t\t\"\n + alias2(__default(__webpack_require__(21)).call(alias1,(depth0 != null ? depth0.time : depth0),{\"name\":\"tz\",\"hash\":{},\"data\":data}))\n + \"\\n\t</span>\\n\t<span class=\\\"from\\\">[\"\n + alias2(alias3((depth0 != null ? depth0.command : depth0), depth0))\n + \"]</span>\\n\t<span class=\\\"content\\\">\\n\"\n + ((stack1 = helpers.each.call(alias1,(depth0 != null ? depth0.params : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(5, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t</span>\\n</div>\\n\";\n},\"useData\":true});\n\n/***/ }),\n/* 274 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar Handlebars = __webpack_require__(1);\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, alias3=depth0 != null ? depth0 : (container.nullContext || {});\n\n return \"<section id=\\\"network-\"\n + alias2(alias1((depth0 != null ? depth0.id : depth0), depth0))\n + \"\\\" class=\\\"network name-\"\n + alias2(__default(__webpack_require__(23)).call(alias3,(depth0 != null ? depth0.name : depth0),{\"name\":\"slugify\",\"hash\":{},\"data\":data}))\n + \" \"\n + ((stack1 = helpers[\"if\"].call(alias3,((stack1 = (depth0 != null ? depth0.serverOptions : depth0)) != null ? stack1.NETWORK : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(2, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\\" data-id=\\\"\"\n + alias2(alias1((depth0 != null ? depth0.id : depth0), depth0))\n + \"\\\" data-nick=\\\"\"\n + alias2(alias1((depth0 != null ? depth0.nick : depth0), depth0))\n + \"\\\" data-options=\\\"\"\n + alias2(__default(__webpack_require__(275)).call(alias3,(depth0 != null ? depth0.serverOptions : depth0),{\"name\":\"tojson\",\"hash\":{},\"data\":data}))\n + \"\\\">\\n\"\n + ((stack1 = container.invokePartial(__webpack_require__(168),depth0,{\"name\":\"chan\",\"data\":data,\"indent\":\"\\t\",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n + \"</section>\\n\";\n},\"2\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \"network-\"\n + container.escapeExpression(__default(__webpack_require__(23)).call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? depth0.serverOptions : depth0)) != null ? stack1.NETWORK : stack1),{\"name\":\"slugify\",\"hash\":{},\"data\":data}));\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.networks : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"usePartial\":true,\"useData\":true});\n\n/***/ }),\n/* 275 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function tojson(context) {\n\treturn JSON.stringify(context);\n};\n\n/***/ }),\n/* 276 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar Handlebars = __webpack_require__(1);\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var alias1=container.lambda, alias2=container.escapeExpression;\n\n return \"\t<strong>\"\n + alias2(alias1((depth0 != null ? depth0.agent : depth0), depth0))\n + \"</strong>\\n\t<a href=\\\"https://ipinfo.io/\"\n + alias2(alias1((depth0 != null ? depth0.ip : depth0), depth0))\n + \"\\\" target=\\\"_blank\\\" rel=\\\"noopener\\\">\"\n + alias2(alias1((depth0 != null ? depth0.ip : depth0), depth0))\n + \"</a>\\n\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression;\n\n return \"\t<button class=\\\"btn pull-right remove-session\\\" data-token=\\\"\"\n + alias2(alias1((depth0 != null ? depth0.token : depth0), depth0))\n + \"\\\">Disconnect</button>\\n\\n\t<strong>\"\n + alias2(alias1((depth0 != null ? depth0.agent : depth0), depth0))\n + \"</strong>\\n\t<a href=\\\"https://ipinfo.io/\"\n + alias2(alias1((depth0 != null ? depth0.ip : depth0), depth0))\n + \"\\\" target=\\\"_blank\\\" rel=\\\"noopener\\\">\"\n + alias2(alias1((depth0 != null ? depth0.ip : depth0), depth0))\n + \"</a>\\n\t<br>\\n\"\n + ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.active : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.program(6, data, 0),\"data\":data})) != null ? stack1 : \"\");\n},\"4\":function(container,depth0,helpers,partials,data) {\n return \"\t\t<em>Currently active</em>\\n\";\n},\"6\":function(container,depth0,helpers,partials,data) {\n return \"\t\tLast used on <time>\"\n + container.escapeExpression(__default(__webpack_require__(12)).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.lastUse : depth0),{\"name\":\"localetime\",\"hash\":{},\"data\":data}))\n + \"</time>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \"<p>\\n\"\n + ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.current : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.program(3, data, 0),\"data\":data})) != null ? stack1 : \"\")\n + \"</p>\\n\";\n},\"useData\":true});\n\n/***/ }),\n/* 277 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar Handlebars = __webpack_require__(1);\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n return \"<div class=\\\"unread-marker\\\">\\n\t<span class=\\\"unread-marker-text\\\"></span>\\n</div>\\n\";\n},\"useData\":true});\n\n/***/ }),\n/* 278 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar Handlebars = __webpack_require__(1);\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n return \"\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = __default(__webpack_require__(173)).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.mode : depth0),{\"name\":\"diff\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + ((stack1 = container.invokePartial(__webpack_require__(4),depth0,{\"name\":\"user_name\",\"data\":data,\"indent\":\"\\t\",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"4\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n return ((stack1 = helpers.unless.call(alias1,(data && data.first),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(5, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t<div class=\\\"user-mode \"\n + container.escapeExpression(__default(__webpack_require__(279)).call(alias1,(depth0 != null ? depth0.mode : depth0),{\"name\":\"modes\",\"hash\":{},\"data\":data}))\n + \"\\\">\\n\";\n},\"5\":function(container,depth0,helpers,partials,data) {\n return \"\t\t</div>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n return ((stack1 = __default(__webpack_require__(173)).call(alias1,\"reset\",{\"name\":\"diff\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\"\n + ((stack1 = helpers.each.call(alias1,(depth0 != null ? depth0.users : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"</div>\\n\";\n},\"usePartial\":true,\"useData\":true});\n\n/***/ }),\n/* 279 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function (mode) {\n\tvar modes = {\n\t\t\"~\": \"owner\",\n\t\t\"&\": \"admin\",\n\t\t\"!\": \"admin\",\n\t\t\"@\": \"op\",\n\t\t\"%\": \"half-op\",\n\t\t\"+\": \"voice\",\n\t\t\"\": \"normal\"\n\t};\n\treturn modes[mode];\n};\n\n/***/ }),\n/* 280 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar Handlebars = __webpack_require__(1);\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=container.lambda, alias2=container.escapeExpression;\n\n return \"\t<span role=\\\"button\\\" class=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? depth0.original : depth0)) != null ? stack1.className : stack1), depth0))\n + \"\\\" data-name=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? depth0.original : depth0)) != null ? stack1.dataset : stack1)) != null ? stack1.name : stack1), depth0))\n + \"\\\">\"\n + ((stack1 = ((helper = (helper = helpers.string || (depth0 != null ? depth0.string : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"string\",\"hash\":{},\"data\":data}) : helper))) != null ? stack1 : \"\")\n + \"</span>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \"<div class=\\\"user-mode user-mode-search\\\">\\n\"\n + ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.matches : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"</div>\\n\";\n},\"useData\":true});\n\n/***/ }),\n/* 281 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar Handlebars = __webpack_require__(1);\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n return \"\t<p>\\n\t\tChecking for updates...\\n\t</p>\\n\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = __default(__webpack_require__(7)).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.status : depth0),\"new-version\",{\"name\":\"equal\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.program(7, data, 0),\"data\":data})) != null ? stack1 : \"\");\n},\"4\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression;\n\n return \"\t<p>\\n\t\tThe Lounge <b>\"\n + alias2(alias1(((stack1 = (depth0 != null ? depth0.latest : depth0)) != null ? stack1.version : stack1), depth0))\n + \"</b>\"\n + ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? depth0.latest : depth0)) != null ? stack1.prerelease : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(5, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\t\tis now available.\\n\t\t<br>\\n\\n\t\t<a href=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? depth0.latest : depth0)) != null ? stack1.url : stack1), depth0))\n + \"\\\" target=\\\"_blank\\\" rel=\\\"noopener\\\">\\n\t\t\tRead more on GitHub\\n\t\t</a>\\n\t</p>\\n\";\n},\"5\":function(container,depth0,helpers,partials,data) {\n return \" (pre-release)\";\n},\"7\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = __default(__webpack_require__(7)).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.status : depth0),\"up-to-date\",{\"name\":\"equal\",\"hash\":{},\"fn\":container.program(8, data, 0),\"inverse\":container.program(10, data, 0),\"data\":data})) != null ? stack1 : \"\");\n},\"8\":function(container,depth0,helpers,partials,data) {\n return \"\t<p>\\n\t\tThe Lounge is up to date!\\n\t</p>\\n\\n\t<button id=\\\"check-now\\\" class=\\\"btn btn-small\\\">Check now</button>\\n\";\n},\"10\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = __default(__webpack_require__(7)).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.status : depth0),\"error\",{\"name\":\"equal\",\"hash\":{},\"fn\":container.program(11, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"11\":function(container,depth0,helpers,partials,data) {\n return \"\t<p>\\n\t\tInformation about latest releases could not be retrieved.\\n\t</p>\\n\\n\t<button id=\\\"check-now\\\" class=\\\"btn btn-small\\\">Try again</button>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = __default(__webpack_require__(7)).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.status : depth0),\"loading\",{\"name\":\"equal\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.program(3, data, 0),\"data\":data})) != null ? stack1 : \"\");\n},\"useData\":true});\n\n/***/ }),\n/* 282 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar Handlebars = __webpack_require__(1);\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n return \"\t\t<h1 class=\\\"title\\\">Release notes for \"\n + container.escapeExpression(((helper = (helper = helpers.version || (depth0 != null ? depth0.version : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === \"function\" ? helper.call(alias1,{\"name\":\"version\",\"hash\":{},\"data\":data}) : helper)))\n + \"</h1>\\n\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.changelog : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(2, data, 0),\"inverse\":container.program(4, data, 0),\"data\":data})) != null ? stack1 : \"\");\n},\"2\":function(container,depth0,helpers,partials,data) {\n var stack1, helper;\n\n return \"\t\t\t<h3>Introduction</h3>\\n\t\t\t<div class=\\\"changelog-text\\\">\"\n + ((stack1 = ((helper = (helper = helpers.changelog || (depth0 != null ? depth0.changelog : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"changelog\",\"hash\":{},\"data\":data}) : helper))) != null ? stack1 : \"\")\n + \"</div>\\n\";\n},\"4\":function(container,depth0,helpers,partials,data) {\n var helper;\n\n return \"\t\t\t<p>Unable to retrieve releases from GitHub.</p>\\n\t\t\t<p><a href=\\\"https://github.com/thelounge/lounge/releases/tag/v\"\n + container.escapeExpression(((helper = (helper = helpers.version || (depth0 != null ? depth0.version : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"version\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" target=\\\"_blank\\\" rel=\\\"noopener\\\">View release notes for this version on GitHub</a></p>\\n\";\n},\"6\":function(container,depth0,helpers,partials,data) {\n return \"\t\t<p>Loading changelog…</p>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \"<div class=\\\"header\\\">\\n\t<button class=\\\"lt\\\" aria-label=\\\"Toggle channel list\\\"></button>\\n</div>\\n<div class=\\\"container\\\">\\n\t<a href=\\\"#\\\" id=\\\"back-to-help\\\" data-target=\\\"#help\\\">« Help</a>\\n\\n\"\n + ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.version : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.program(6, data, 0),\"data\":data})) != null ? stack1 : \"\")\n + \"</div>\\n\";\n},\"useData\":true});\n\n/***/ }),\n/* 283 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar Handlebars = __webpack_require__(1);\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n return \"The Lounge - \";\n},\"3\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.lockNetwork : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"4\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \"\t\t\t\t\tto \"\n + container.escapeExpression(container.lambda(((stack1 = (depth0 != null ? depth0.defaults : depth0)) != null ? stack1.name : stack1), depth0))\n + \"\\n\";\n},\"6\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, alias3=depth0 != null ? depth0 : (container.nullContext || {});\n\n return \"\t\t<div>\\n\t\t\t<div class=\\\"col-sm-12\\\">\\n\t\t\t\t<h2>Network settings</h2>\\n\t\t\t</div>\\n\t\t\t<div class=\\\"col-sm-3\\\">\\n\t\t\t\t<label for=\\\"connect:name\\\">Name</label>\\n\t\t\t</div>\\n\t\t\t<div class=\\\"col-sm-9\\\">\\n\t\t\t\t<input class=\\\"input\\\" id=\\\"connect:name\\\" name=\\\"name\\\" value=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? depth0.defaults : depth0)) != null ? stack1.name : stack1), depth0))\n + \"\\\">\\n\t\t\t</div>\\n\t\t\t<div class=\\\"col-sm-3\\\">\\n\t\t\t\t<label for=\\\"connect:host\\\">Server</label>\\n\t\t\t</div>\\n\t\t\t<div class=\\\"col-sm-6 col-xs-8\\\">\\n\t\t\t\t<input class=\\\"input\\\" id=\\\"connect:host\\\" name=\\\"host\\\" value=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? depth0.defaults : depth0)) != null ? stack1.host : stack1), depth0))\n + \"\\\" aria-label=\\\"Server address\\\" \"\n + ((stack1 = helpers[\"if\"].call(alias3,(depth0 != null ? depth0.lockNetwork : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(7, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \">\\n\t\t\t</div>\\n\t\t\t<div class=\\\"col-sm-3 col-xs-4\\\">\\n\t\t\t\t<div class=\\\"port\\\">\\n\t\t\t\t\t<input class=\\\"input\\\" type=\\\"number\\\" min=\\\"1\\\" max=\\\"65535\\\" name=\\\"port\\\" value=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? depth0.defaults : depth0)) != null ? stack1.port : stack1), depth0))\n + \"\\\" aria-label=\\\"Server port\\\" \"\n + ((stack1 = helpers[\"if\"].call(alias3,(depth0 != null ? depth0.lockNetwork : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(7, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \">\\n\t\t\t\t</div>\\n\t\t\t</div>\\n\t\t\t<div class=\\\"clearfix\\\"></div>\\n\t\t\t<div class=\\\"col-sm-9 col-sm-offset-3\\\">\\n\t\t\t\t<label class=\\\"tls\\\">\\n\t\t\t\t\t<input type=\\\"checkbox\\\" name=\\\"tls\\\" \"\n + ((stack1 = helpers[\"if\"].call(alias3,((stack1 = (depth0 != null ? depth0.defaults : depth0)) != null ? stack1.tls : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(9, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \" \"\n + ((stack1 = helpers[\"if\"].call(alias3,(depth0 != null ? depth0.lockNetwork : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(7, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \">\\n\t\t\t\t\tEnable TLS/SSL\\n\t\t\t\t</label>\\n\t\t\t</div>\\n\t\t\t<div class=\\\"clearfix\\\"></div>\\n\t\t</div>\\n\";\n},\"7\":function(container,depth0,helpers,partials,data) {\n return \"disabled\";\n},\"9\":function(container,depth0,helpers,partials,data) {\n return \"checked\";\n},\"11\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \"\t\t<div class=\\\"col-sm-3\\\">\\n\t\t\t<label for=\\\"connect:username\\\">Username</label>\\n\t\t</div>\\n\t\t<div class=\\\"col-sm-9\\\">\\n\t\t\t<input class=\\\"input username\\\" id=\\\"connect:username\\\" name=\\\"username\\\" value=\\\"\"\n + container.escapeExpression(container.lambda(((stack1 = (depth0 != null ? depth0.defaults : depth0)) != null ? stack1.username : stack1), depth0))\n + \"\\\">\\n\t\t</div>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.lambda, alias3=container.escapeExpression;\n\n return \"<div class=\\\"header\\\">\\n\t<button class=\\\"lt\\\" aria-label=\\\"Toggle channel list\\\"></button>\\n</div>\\n<form class=\\\"container\\\" method=\\\"post\\\" action=\\\"\\\" data-event=\\\"conn\\\">\\n\t<div class=\\\"row\\\">\\n\t\t<div class=\\\"col-sm-12\\\">\\n\t\t\t<h1 class=\\\"title\\\">\\n\t\t\t\t\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0[\"public\"] : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\t\t\t\tConnect\\n\"\n + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.displayNetwork : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t\t\t</h1>\\n\t\t</div>\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.displayNetwork : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(6, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t\t<div class=\\\"col-sm-12\\\">\\n\t\t\t<h2>User preferences</h2>\\n\t\t</div>\\n\t\t<div class=\\\"col-sm-3\\\">\\n\t\t\t<label for=\\\"connect:nick\\\">Nick</label>\\n\t\t</div>\\n\t\t<div class=\\\"col-sm-9\\\">\\n\t\t\t<input class=\\\"input nick\\\" id=\\\"connect:nick\\\" name=\\\"nick\\\" value=\\\"\"\n + alias3(alias2(((stack1 = (depth0 != null ? depth0.defaults : depth0)) != null ? stack1.nick : stack1), depth0))\n + \"\\\">\\n\t\t</div>\\n\"\n + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.useHexIp : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(11, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t\t<div class=\\\"col-sm-3\\\">\\n\t\t\t<label for=\\\"connect:password\\\">Password</label>\\n\t\t</div>\\n\t\t<div class=\\\"col-sm-9\\\">\\n\t\t\t<input class=\\\"input\\\" id=\\\"connect:password\\\" type=\\\"password\\\" name=\\\"password\\\" value=\\\"\"\n + alias3(alias2(((stack1 = (depth0 != null ? depth0.defaults : depth0)) != null ? stack1.password : stack1), depth0))\n + \"\\\">\\n\t\t</div>\\n\t\t<div class=\\\"col-sm-3\\\">\\n\t\t\t<label for=\\\"connect:realname\\\">Real name</label>\\n\t\t</div>\\n\t\t<div class=\\\"col-sm-9\\\">\\n\t\t\t<input class=\\\"input\\\" id=\\\"connect:realname\\\" name=\\\"realname\\\" value=\\\"\"\n + alias3(alias2(((stack1 = (depth0 != null ? depth0.defaults : depth0)) != null ? stack1.realname : stack1), depth0))\n + \"\\\">\\n\t\t</div>\\n\t\t<div class=\\\"col-sm-3\\\">\\n\t\t\t<label for=\\\"connect:channels\\\">Channels</label>\\n\t\t</div>\\n\t\t<div class=\\\"col-sm-9\\\">\\n\t\t\t<input class=\\\"input\\\" id=\\\"connect:channels\\\" name=\\\"join\\\" value=\\\"\"\n + alias3(alias2(((stack1 = (depth0 != null ? depth0.defaults : depth0)) != null ? stack1.join : stack1), depth0))\n + \"\\\">\\n\t\t</div>\\n\t\t<div class=\\\"col-sm-9 col-sm-offset-3\\\">\\n\t\t\t<button type=\\\"submit\\\" class=\\\"btn\\\">Connect</button>\\n\t\t</div>\\n\t</div>\\n</form>\\n\";\n},\"useData\":true});\n\n/***/ }),\n/* 284 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar Handlebars = __webpack_require__(1);\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"\t\t\t<p>\\n\t\t\t\tThe Lounge is running from source\\n\t\t\t\t(<a href=\\\"https://github.com/thelounge/lounge/tree/\"\n + alias4(((helper = (helper = helpers.gitCommit || (depth0 != null ? depth0.gitCommit : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"gitCommit\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" target=\\\"_blank\\\" rel=\\\"noopener\\\">commit <code>\"\n + alias4(((helper = (helper = helpers.gitCommit || (depth0 != null ? depth0.gitCommit : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"gitCommit\",\"hash\":{},\"data\":data}) : helper)))\n + \"</code></a>).\\n\t\t\t</p>\\n\\n\t\t\t<ul>\\n\t\t\t\t<li>\\n\t\t\t\t\tCompare\\n\t\t\t\t\t<a href=\\\"https://github.com/thelounge/lounge/compare/\"\n + alias4(((helper = (helper = helpers.gitCommit || (depth0 != null ? depth0.gitCommit : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"gitCommit\",\"hash\":{},\"data\":data}) : helper)))\n + \"...master\\\" target=\\\"_blank\\\" rel=\\\"noopener\\\">between <code>\"\n + alias4(((helper = (helper = helpers.gitCommit || (depth0 != null ? depth0.gitCommit : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"gitCommit\",\"hash\":{},\"data\":data}) : helper)))\n + \"</code> and <code>master</code></a>\\n\t\t\t\t\tto see what you are missing\\n\t\t\t\t</li>\\n\t\t\t\t<li>\\n\t\t\t\t\tCompare\\n\t\t\t\t\t<a href=\\\"https://github.com/thelounge/lounge/compare/\"\n + alias4(((helper = (helper = helpers.version || (depth0 != null ? depth0.version : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"version\",\"hash\":{},\"data\":data}) : helper)))\n + \"...\"\n + alias4(((helper = (helper = helpers.gitCommit || (depth0 != null ? depth0.gitCommit : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"gitCommit\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" target=\\\"_blank\\\" rel=\\\"noopener\\\">between <code>\"\n + alias4(((helper = (helper = helpers.version || (depth0 != null ? depth0.version : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"version\",\"hash\":{},\"data\":data}) : helper)))\n + \"</code> and <code>\"\n + alias4(((helper = (helper = helpers.gitCommit || (depth0 != null ? depth0.gitCommit : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"gitCommit\",\"hash\":{},\"data\":data}) : helper)))\n + \"</code></a>\\n\t\t\t\t\tto see your local changes</li>\\n\t\t\t</ul>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n return \"<div class=\\\"header\\\">\\n\t<button class=\\\"lt\\\" aria-label=\\\"Toggle channel list\\\"></button>\\n</div>\\n<div class=\\\"container\\\">\\n\t<h1 class=\\\"title\\\">Help</h1>\\n\\n\t<h2>\\n\t\t<small class=\\\"pull-right\\\">\\n\t\t\tv\"\n + container.escapeExpression(((helper = (helper = helpers.version || (depth0 != null ? depth0.version : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === \"function\" ? helper.call(alias1,{\"name\":\"version\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\n\t\t\t(<a href=\\\"#\\\" id=\\\"view-changelog\\\" data-target=\\\"#changelog\\\">release notes</a>)\\n\t\t</small>\\n\t\tAbout The Lounge\\n\t</h2>\\n\\n\t<div class=\\\"about\\\">\\n\t\t<div id=\\\"version-checker\\\"></div>\\n\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.gitCommit : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\t\t<p>\\n\t\t\t<a href=\\\"https://thelounge.github.io/\\\" target=\\\"_blank\\\" rel=\\\"noopener\\\" class=\\\"website-link\\\">Website</a>\\n\t\t</p>\\n\t\t<p>\\n\t\t\t<a href=\\\"https://thelounge.github.io/docs/\\\" target=\\\"_blank\\\" rel=\\\"noopener\\\" class=\\\"documentation-link\\\">Documentation</a>\\n\t\t</p>\\n\t\t<p>\\n\t\t\t<a href=\\\"https://github.com/thelounge/lounge/issues/new\\\" target=\\\"_blank\\\" rel=\\\"noopener\\\" class=\\\"report-issue-link\\\">Report an issue…</a>\\n\t\t</p>\\n\t</div>\\n\\n\t<h2>Keyboard Shortcuts</h2>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<kbd class=\\\"key-all\\\">Ctrl</kbd><kbd class=\\\"key-apple\\\">⌘</kbd> + <kbd>↑</kbd> / <kbd>↓</kbd>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>Switch to the previous/next window in the channel list.</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<kbd class=\\\"key-all\\\">Ctrl</kbd><kbd class=\\\"key-apple\\\">⌘</kbd> + <kbd>K</kbd>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>\\n\t\t\t\tMark any text typed after this shortcut to be colored. After\\n\t\t\t\thitting this shortcut, enter an integer in the range\\n\t\t\t\t<code>0—15</code> to select the desired color, or use the\\n\t\t\t\tautocompletion menu to choose a color name (see below).\\n\t\t\t</p>\\n\t\t\t<p>\\n\t\t\t\tBackground color can be specified by putting a comma and\\n\t\t\t\tanother integer in the range <code>0—15</code> after the\\n\t\t\t\tforeground color number (autocompletion works too).\\n\t\t\t</p>\\n\t\t\t<p>\\n\t\t\t\tA color reference can be found\\n\t\t\t\t<a href=\\\"https://modern.ircdocs.horse/formatting.html#colors\\\" target=\\\"_blank\\\" rel=\\\"noopener\\\">here</a>.\\n\t\t\t</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<kbd class=\\\"key-all\\\">Ctrl</kbd><kbd class=\\\"key-apple\\\">⌘</kbd> + <kbd>B</kbd>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>Mark all text typed after this shortcut as bold.</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<kbd class=\\\"key-all\\\">Ctrl</kbd><kbd class=\\\"key-apple\\\">⌘</kbd> + <kbd>U</kbd>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>Mark all text typed after this shortcut as underlined.</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<kbd class=\\\"key-all\\\">Ctrl</kbd><kbd class=\\\"key-apple\\\">⌘</kbd> + <kbd>I</kbd>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>Mark all text typed after this shortcut as italics.</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<kbd class=\\\"key-all\\\">Ctrl</kbd><kbd class=\\\"key-apple\\\">⌘</kbd> + <kbd>S</kbd>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>Mark all text typed after this shortcut as struck through.</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<kbd class=\\\"key-all\\\">Ctrl</kbd><kbd class=\\\"key-apple\\\">⌘</kbd> + <kbd>M</kbd>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>Mark all text typed after this shortcut as monospaced.</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<kbd class=\\\"key-all\\\">Ctrl</kbd><kbd class=\\\"key-apple\\\">⌘</kbd> + <kbd>O</kbd>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>\\n\t\t\t\tMark all text typed after this shortcut to be reset to its\\n\t\t\t\toriginal formatting.\\n\t\t\t</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<h2>Autocompletion</h2>\\n\\n\t<p>\\n\t\tTo auto-complete nicknames, channels, commands, and emoji, type one of the characters below to open\\n\t\ta suggestion list. Use the <kbd>↑</kbd> and <kbd>↓</kbd> keys to highlight an item, and insert it by\\n\t\tpressing <kbd>Tab</kbd> or <kbd>Enter</kbd> (or by clicking the desired item).\\n\t</p>\\n\t<p>\\n\t\tAutocompletion can be disabled in settings.\\n\t</p>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>@</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>Nickname</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>#</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>Channel</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>Commands (see list of commands below)</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>:</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>Emoji (note: requires two search characters, to avoid conflicting with common emoticons like <code>:)</code>)</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<h2>Commands</h2>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/away [message]</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>Mark yourself as away with an optional message.</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/back</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>Remove your away status (set with <code>/away</code>).</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/ban nick</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>Ban (<code>+b</code>) a user from the current channel.\\n\t\t\tThis can be a nickname or a hostmask.</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/banlist</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>Load the banlist for the current channel.</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/collapse</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>\\n\t\t\t\tCollapse all previews in the current channel (opposite of\\n\t\t\t\t<code>/expand</code>)\\n\t\t\t</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/connect host [port]</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>\\n\t\t\t\tConnect to a new IRC network. If <code>port</code> starts with\\n\t\t\t\ta <code>+</code> sign, the connection will be made secure\\n\t\t\t\tusing TLS.\\n\t\t\t</p>\\n\t\t\t<p>Alias: <code>/server</code></p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/ctcp target cmd [args]</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>\\n\t\t\t\tSend a <abbr title=\\\"Client-to-client protocol\\\">CTCP</abbr>\\n\t\t\t\trequest. Read more about this on\\n\t\t\t\t<a href=\\\"https://en.wikipedia.org/wiki/Client-to-client_protocol\\\" target=\\\"_blank\\\" rel=\\\"noopener\\\">the dedicated Wikipedia article</a>.\\n\t\t\t</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/deop nick [...nick]</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>\\n\t\t\t\tRemove op (<code>-o</code>) from one or several users in the\\n\t\t\t\tcurrent channel.\\n\t\t\t</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/devoice nick [...nick]</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>\\n\t\t\t\tRemove voice (<code>-v</code>) from one or several users in\\n\t\t\t\tthe current channel.\\n\t\t\t</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/disconnect [message]</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>\\n\t\t\t\tDisconnect from the current network with an\\n\t\t\t\toptionally-provided message.\\n\t\t\t</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/expand</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>\\n\t\t\t\tExpand all previews in the current channel (opposite of\\n\t\t\t\t<code>/collapse</code>)\\n\t\t\t</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/invite nick [channel]</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>\\n\t\t\t\tInvite a user to the specified channel. If\\n\t\t\t\t<code>channel</code> is ommitted, user will be invited to the\\n\t\t\t\tcurrent channel.\\n\t\t\t</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/join channel</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>Join a channel.</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/kick nick</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>Kick a user from the current channel.</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/list</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>Retrieve a list of available channels on this network.</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/me message</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>\\n\t\t\t\tSend an action message to the current channel. The Lounge will\\n\t\t\t\tdisplay it inline, as if the message was posted in the third\\n\t\t\t\tperson.\\n\t\t\t</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/mode flags [args]</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>\\n\t\t\t\tSet the given flags to the current channel if the active\\n\t\t\t\twindow is a channel, another user if the active window is a\\n\t\t\t\tprivate message window, or yourself if the current window is a\\n\t\t\t\tserver window.\\n\t\t\t</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/msg channel message</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>Send a message to the specified channel.</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/nick newnick</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>Change your nickname on the current network.</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/notice channel message</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>Sends a notice message to the specified channel.</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/op nick [...nick]</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>\\n\t\t\t\tGive op (<code>+o</code>) to one or several users in the\\n\t\t\t\tcurrent channel.\\n\t\t\t</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/part [channel]</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>\\n\t\t\t\tClose the specified channel or private message window, or the\\n\t\t\t\tcurrent channel if <code>channel</code> is ommitted.\\n\t\t\t</p>\\n\t\t\t<p>Aliases: <code>/close</code>, <code>/leave</code></p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/rejoin</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>\\n\t\t\t\tLeave and immediately rejoin the current channel. Useful to\\n\t\t\t\tquickly get op from ChanServ in an empty channel, for example.\\n\t\t\t</p>\\n\t\t\t<p>Alias: <code>/cycle</code></p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/query nick</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>Send a private message to the specified user.</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/quit [message]</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>\\n\t\t\t\tDisconnect from the current network with an optional message.\\n\t\t\t</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/raw message</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>Send a raw message to the current IRC network.</p>\\n\t\t\t<p>Aliases: <code>/quote</code>, <code>/send</code></p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/slap nick</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>Slap someone in the current channel with a trout!</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/topic newtopic</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>Set the topic in the current channel.</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/unban nick</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>Unban (<code>-b</code>) a user from the current channel.\\n\t\t\t\tThis can be a nickname or a hostmask.</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/voice nick [...nick]</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>\\n\t\t\t\tGive voice (<code>+v</code>) to one or several users in the\\n\t\t\t\tcurrent channel.\\n\t\t\t</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/whois nick</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>\\n\t\t\t\tRetrieve information about the given user on the current\\n\t\t\t\tnetwork.\\n\t\t\t</p>\\n\t\t</div>\\n\t</div>\\n</div>\\n\";\n},\"useData\":true});\n\n/***/ }),\n/* 285 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar Handlebars = __webpack_require__(1);\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"\t\t\t\t\t<option value=\\\"\"\n + alias4(((helper = (helper = helpers.name || (depth0 != null ? depth0.name : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"name\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\\n\t\t\t\t\t\t\"\n + alias4(((helper = (helper = helpers.displayName || (depth0 != null ? depth0.displayName : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"displayName\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\n\t\t\t\t\t</option>\\n\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n return \"\t\t<div class=\\\"col-sm-12\\\">\\n\t\t\t<h2>Link previews</h2>\\n\t\t</div>\\n\t\t<div class=\\\"col-sm-6\\\">\\n\t\t\t<label class=\\\"opt\\\">\\n\t\t\t\t<input type=\\\"checkbox\\\" name=\\\"media\\\">\\n\t\t\t\tAuto-expand media\\n\t\t\t</label>\\n\t\t</div>\\n\t\t<div class=\\\"col-sm-6\\\">\\n\t\t\t<label class=\\\"opt\\\">\\n\t\t\t\t<input type=\\\"checkbox\\\" name=\\\"links\\\">\\n\t\t\t\tAuto-expand websites\\n\t\t\t</label>\\n\t\t</div>\\n\";\n},\"5\":function(container,depth0,helpers,partials,data) {\n return \"\t\t<div class=\\\"col-sm-12\\\">\\n\t\t\t<h2>Push Notifications</h2>\\n\t\t</div>\\n\t\t<div class=\\\"col-sm-12\\\">\\n\t\t\t<button type=\\\"button\\\" class=\\\"btn\\\" id=\\\"pushNotifications\\\" disabled data-text-alternate=\\\"Unsubscribe from push notifications\\\">Subscribe to push notifications</button>\\n\t\t\t<div class=\\\"error\\\" id=\\\"pushNotificationsHttps\\\">\\n\t\t\t\t<strong>Warning</strong>:\\n\t\t\t\tPush notifications are only supported over HTTPS connections.\\n\t\t\t</div>\\n\t\t\t<div class=\\\"error\\\" id=\\\"pushNotificationsUnsupported\\\">\\n\t\t\t\t<strong>Warning</strong>:\\n\t\t\t\t<span>Push notifications are not supported by your browser.</span>\\n\t\t\t</div>\\n\t\t</div>\\n\";\n},\"7\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = helpers.unless.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.ldapEnabled : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(8, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"8\":function(container,depth0,helpers,partials,data) {\n return \"\t\t<div id=\\\"change-password\\\">\\n\t\t\t<form action=\\\"\\\" method=\\\"post\\\" data-event=\\\"change-password\\\">\\n\t\t\t\t<div class=\\\"col-sm-12\\\">\\n\t\t\t\t\t<h2>Change password</h2>\\n\t\t\t\t</div>\\n\t\t\t\t<div class=\\\"col-sm-12\\\">\\n\t\t\t\t\t<label for=\\\"old_password_input\\\" class=\\\"sr-only\\\">Enter current password</label>\\n\t\t\t\t\t<input type=\\\"password\\\" id=\\\"old_password_input\\\" name=\\\"old_password\\\" class=\\\"input\\\" placeholder=\\\"Enter current password\\\">\\n\t\t\t\t</div>\\n\t\t\t\t<div class=\\\"col-sm-12\\\">\\n\t\t\t\t\t<label for=\\\"new_password_input\\\" class=\\\"sr-only\\\">Enter desired new password</label>\\n\t\t\t\t\t<input type=\\\"password\\\" id=\\\"new_password_input\\\" name=\\\"new_password\\\" class=\\\"input\\\" placeholder=\\\"Enter desired new password\\\">\\n\t\t\t\t</div>\\n\t\t\t\t<div class=\\\"col-sm-12\\\">\\n\t\t\t\t\t<label for=\\\"verify_password_input\\\" class=\\\"sr-only\\\">Repeat new password</label>\\n\t\t\t\t\t<input type=\\\"password\\\" id=\\\"verify_password_input\\\" name=\\\"verify_password\\\" class=\\\"input\\\" placeholder=\\\"Repeat new password\\\">\\n\t\t\t\t</div>\\n\t\t\t\t<div class=\\\"col-sm-12 feedback\\\"></div>\\n\t\t\t\t<div class=\\\"col-sm-12\\\">\\n\t\t\t\t\t<button type=\\\"submit\\\" class=\\\"btn\\\">Change password</button>\\n\t\t\t\t</div>\\n\t\t\t</form>\\n\t\t</div>\\n\";\n},\"10\":function(container,depth0,helpers,partials,data) {\n return \"\t\t<div class=\\\"session-list\\\">\\n\t\t\t<h2>Sessions</h2>\\n\\n\t\t\t<h3>Current session</h3>\\n\t\t\t<div id=\\\"session-current\\\"></div>\\n\\n\t\t\t<h3>Other sessions</h3>\\n\t\t\t<div id=\\\"session-list\\\"></div>\\n\t\t</div>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n return \"<div class=\\\"header\\\">\\n\t<button class=\\\"lt\\\" aria-label=\\\"Toggle channel list\\\"></button>\\n</div>\\n<div class=\\\"container\\\">\\n\t<h1 class=\\\"title\\\">Settings</h1>\\n\\n\t<div class=\\\"row\\\">\\n\t\t<div class=\\\"col-sm-12\\\">\\n\t\t\t<h2>Messages</h2>\\n\t\t</div>\\n\t\t<div class=\\\"col-sm-6\\\">\\n\t\t\t<label class=\\\"opt\\\">\\n\t\t\t\t<input type=\\\"checkbox\\\" name=\\\"motd\\\">\\n\t\t\t\tShow <abbr title=\\\"Message Of The Day\\\">MOTD</abbr>\\n\t\t\t</label>\\n\t\t</div>\\n\t\t<div class=\\\"col-sm-6\\\">\\n\t\t\t<label class=\\\"opt\\\">\\n\t\t\t\t<input type=\\\"checkbox\\\" name=\\\"showSeconds\\\">\\n\t\t\t\tShow seconds in timestamp\\n\t\t\t</label>\\n\t\t</div>\\n\t\t<div class=\\\"col-sm-12\\\">\\n\t\t\t<h2>\\n\t\t\t\tStatus messages\\n\t\t\t\t<span class=\\\"tooltipped tooltipped-n tooltipped-no-delay\\\" aria-label=\\\"Joins, parts, kicks, nick changes, away changes, and mode changes\\\">\\n\t\t\t\t\t<button class=\\\"extra-help\\\" aria-label=\\\"Joins, parts, kicks, nick changes, away changes, and mode changes\\\"></button>\\n\t\t\t\t</span>\\n\t\t\t</h2>\\n\t\t</div>\\n\t\t<div class=\\\"col-sm-12\\\">\\n\t\t\t<label class=\\\"opt\\\">\\n\t\t\t\t<input type=\\\"radio\\\" name=\\\"statusMessages\\\" value=\\\"shown\\\">\\n\t\t\t\tShow all status messages individually\\n\t\t\t</label>\\n\t\t\t<label class=\\\"opt\\\">\\n\t\t\t\t<input type=\\\"radio\\\" name=\\\"statusMessages\\\" value=\\\"condensed\\\">\\n\t\t\t\tCondense status messages together\\n\t\t\t</label>\\n\t\t\t<label class=\\\"opt\\\">\\n\t\t\t\t<input type=\\\"radio\\\" name=\\\"statusMessages\\\" value=\\\"hidden\\\">\\n\t\t\t\tHide all status messages\\n\t\t\t</label>\\n\t\t</div>\\n\t\t<div class=\\\"col-sm-12\\\">\\n\t\t\t<h2>Visual Aids</h2>\\n\t\t</div>\\n\t\t<div class=\\\"col-sm-12\\\">\\n\t\t\t<label class=\\\"opt\\\">\\n\t\t\t\t<input type=\\\"checkbox\\\" name=\\\"coloredNicks\\\">\\n\t\t\t\tEnable colored nicknames\\n\t\t\t</label>\\n\t\t\t<label class=\\\"opt\\\">\\n\t\t\t\t<input type=\\\"checkbox\\\" name=\\\"autocomplete\\\">\\n\t\t\t\tEnable autocomplete\\n\t\t\t</label>\\n\t\t</div>\\n\t\t<div class=\\\"col-sm-12\\\">\\n\t\t\t<label class=\\\"opt\\\">\\n\t\t\t\t<label for=\\\"nickPostfix\\\" class=\\\"sr-only\\\">Nick autocomplete postfix (e.g. <code>, </code>)</label>\\n\t\t\t\t<input type=\\\"text\\\" id=\\\"nickPostfix\\\" name=\\\"nickPostfix\\\" class=\\\"input\\\" placeholder=\\\"Nick autocomplete postfix (e.g. ', ')\\\">\\n\t\t\t</label>\\n\t\t</div>\\n\\n\t\t<div class=\\\"col-sm-12\\\">\\n\t\t\t<h2>Theme</h2>\\n\t\t</div>\\n\t\t<div class=\\\"col-sm-12\\\">\\n\t\t\t<label for=\\\"theme-select\\\" class=\\\"sr-only\\\">Theme</label>\\n\t\t\t<select id=\\\"theme-select\\\" name=\\\"theme\\\" class=\\\"input\\\">\\n\"\n + ((stack1 = helpers.each.call(alias1,(depth0 != null ? depth0.themes : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t\t\t</select>\\n\t\t</div>\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.prefetch : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0[\"public\"] : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(5, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t\t<div class=\\\"col-sm-12\\\">\\n\t\t\t<h2>Browser Notifications</h2>\\n\t\t</div>\\n\t\t<div class=\\\"col-sm-12\\\">\\n\t\t\t<label class=\\\"opt\\\">\\n\t\t\t<input id=\\\"desktopNotifications\\\" type=\\\"checkbox\\\" name=\\\"desktopNotifications\\\">\\n\t\t\tEnable browser notifications<br>\\n\t\t\t<div class=\\\"error\\\" id=\\\"warnUnsupportedDesktopNotifications\\\">\\n\t\t\t\t<strong>Warning</strong>:\\n\t\t\t\tNotifications are not supported by your browser.\\n\t\t\t</div>\\n\t\t\t<div class=\\\"error\\\" id=\\\"warnBlockedDesktopNotifications\\\">\\n\t\t\t\t<strong>Warning</strong>:\\n\t\t\t\tNotifications are blocked by your browser.\\n\t\t\t</div>\\n\t\t\t</label>\\n\t\t</div>\\n\t\t<div class=\\\"col-sm-12\\\">\\n\t\t\t<label class=\\\"opt\\\">\\n\t\t\t<input type=\\\"checkbox\\\" name=\\\"notification\\\">\\n\t\t\tEnable notification sound\\n\t\t\t</label>\\n\t\t</div>\\n\t\t<div class=\\\"col-sm-12\\\">\\n\t\t\t<div class=\\\"opt\\\">\\n\t\t\t\t<button id=\\\"play\\\">Play sound</button>\\n\t\t\t</div>\\n\t\t</div>\\n\\n\t\t<div class=\\\"col-sm-12\\\">\\n\t\t\t<label class=\\\"opt\\\">\\n\t\t\t\t<input type=\\\"checkbox\\\" name=\\\"notifyAllMessages\\\">\\n\t\t\t\tEnable notification for all messages\\n\t\t\t</label>\\n\t\t</div>\\n\\n\t\t<div class=\\\"col-sm-12\\\">\\n\t\t\t<label class=\\\"opt\\\">\\n\t\t\t\t<label for=\\\"highlights\\\" class=\\\"sr-only\\\">Custom highlights (comma-separated keywords)</label>\\n\t\t\t\t<input type=\\\"text\\\" id=\\\"highlights\\\" name=\\\"highlights\\\" class=\\\"input\\\" placeholder=\\\"Custom highlights (comma-separated keywords)\\\">\\n\t\t\t</label>\\n\t\t</div>\\n\\n\"\n + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0[\"public\"] : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(7, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t\t<div class=\\\"col-sm-12\\\">\\n\t\t\t<h2>Custom Stylesheet</h2>\\n\t\t</div>\\n\t\t<div class=\\\"col-sm-12\\\">\\n\t\t\t<label for=\\\"user-specified-css-input\\\" class=\\\"sr-only\\\">Custom stylesheet. You can override any style with CSS here.</label>\\n\t\t\t<textarea class=\\\"input\\\" name=\\\"userStyles\\\" id=\\\"user-specified-css-input\\\" placeholder=\\\"/* You can override any style with CSS here */\\\"></textarea>\\n\t\t</div>\\n\t</div>\\n\\n\"\n + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0[\"public\"] : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(10, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"</div>\\n\";\n},\"useData\":true});\n\n/***/ }),\n/* 286 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar Handlebars = __webpack_require__(1);\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n return \"<form class=\\\"container\\\" method=\\\"post\\\" action=\\\"\\\">\\n\t<div class=\\\"row\\\">\\n\t\t<div class=\\\"col-xs-12\\\">\\n\t\t\t<h1 class=\\\"title\\\">Sign in to The Lounge</h1>\\n\t\t</div>\\n\t\t<div class=\\\"col-xs-12\\\">\\n\t\t\t<label>\\n\t\t\t\tUsername\\n\t\t\t\t<input class=\\\"input\\\" name=\\\"user\\\" autofocus>\\n\t\t\t</label>\\n\t\t</div>\\n\t\t<div class=\\\"col-xs-12\\\">\\n\t\t\t<label>\\n\t\t\t\tPassword\\n\t\t\t\t<input class=\\\"input\\\" type=\\\"password\\\" name=\\\"password\\\">\\n\t\t\t</label>\\n\t\t</div>\\n\t\t<div class=\\\"col-xs-12 error\\\" style=\\\"display: none;\\\">Authentication failed.</div>\\n\t\t<div class=\\\"col-xs-12\\\">\\n\t\t\t<button type=\\\"submit\\\" class=\\\"btn\\\">Sign in</button>\\n\t\t</div>\\n\t</div>\\n</form>\\n\";\n},\"useData\":true});\n\n/***/ }),\n/* 287 */,\n/* 288 */,\n/* 289 */,\n/* 290 */,\n/* 291 */,\n/* 292 */,\n/* 293 */,\n/* 294 */,\n/* 295 */,\n/* 296 */,\n/* 297 */,\n/* 298 */,\n/* 299 */,\n/* 300 */,\n/* 301 */,\n/* 302 */,\n/* 303 */,\n/* 304 */\n/***/ (function(module, exports) {\n\n/* (ignored) */\n\n/***/ }),\n/* 305 */,\n/* 306 */,\n/* 307 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar $ = __webpack_require__(2);\nvar sidebar = $(\"#sidebar, #footer\");\nvar socket = __webpack_require__(3);\nvar options = __webpack_require__(13);\n\nmodule.exports = function () {\n\tsidebar.find(\".networks\").sortable({\n\t\taxis: \"y\",\n\t\tcontainment: \"parent\",\n\t\tcursor: \"move\",\n\t\tdistance: 12,\n\t\titems: \".network\",\n\t\thandle: \".lobby\",\n\t\tplaceholder: \"network-placeholder\",\n\t\tforcePlaceholderSize: true,\n\t\ttolerance: \"pointer\", // Use the pointer to figure out where the network is in the list\n\n\t\tupdate: function update() {\n\t\t\tvar order = [];\n\t\t\tsidebar.find(\".network\").each(function () {\n\t\t\t\tvar id = $(this).data(\"id\");\n\t\t\t\torder.push(id);\n\t\t\t});\n\t\t\tsocket.emit(\"sort\", {\n\t\t\t\ttype: \"networks\",\n\t\t\t\torder: order\n\t\t\t});\n\n\t\t\toptions.ignoreSortSync = true;\n\t\t}\n\t});\n\tsidebar.find(\".network\").sortable({\n\t\taxis: \"y\",\n\t\tcontainment: \"parent\",\n\t\tcursor: \"move\",\n\t\tdistance: 12,\n\t\titems: \".chan:not(.lobby)\",\n\t\tplaceholder: \"chan-placeholder\",\n\t\tforcePlaceholderSize: true,\n\t\ttolerance: \"pointer\", // Use the pointer to figure out where the channel is in the list\n\n\t\tupdate: function update(e, ui) {\n\t\t\tvar order = [];\n\t\t\tvar network = ui.item.parent();\n\t\t\tnetwork.find(\".chan\").each(function () {\n\t\t\t\tvar id = $(this).data(\"id\");\n\t\t\t\torder.push(id);\n\t\t\t});\n\t\t\tsocket.emit(\"sort\", {\n\t\t\t\ttype: \"channels\",\n\t\t\t\ttarget: network.data(\"id\"),\n\t\t\t\torder: order\n\t\t\t});\n\n\t\t\toptions.ignoreSortSync = true;\n\t\t}\n\t});\n};\n\n/***/ }),\n/* 308 */,\n/* 309 */,\n/* 310 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(311);\n__webpack_require__(312);\n__webpack_require__(313);\n__webpack_require__(314);\n__webpack_require__(315);\n__webpack_require__(316);\n__webpack_require__(318);\n__webpack_require__(319);\n__webpack_require__(320);\n__webpack_require__(321);\n__webpack_require__(322);\n__webpack_require__(323);\n__webpack_require__(324);\n__webpack_require__(325);\n__webpack_require__(326);\n__webpack_require__(327);\n__webpack_require__(328);\n__webpack_require__(329);\n__webpack_require__(330);\n__webpack_require__(188);\n\n/***/ }),\n/* 311 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar $ = __webpack_require__(2);\nvar socket = __webpack_require__(3);\nvar storage = __webpack_require__(17);\nvar utils = __webpack_require__(11);\nvar templates = __webpack_require__(8);\n\nsocket.on(\"auth\", function (data) {\n\t// If we reconnected and serverHash differs, that means the server restarted\n\t// And we will reload the page to grab the latest version\n\tif (utils.serverHash > -1 && data.serverHash > -1 && data.serverHash !== utils.serverHash) {\n\t\tsocket.disconnect();\n\t\t$(\"#connection-error\").text(\"Server restarted, reloading…\");\n\t\tlocation.reload(true);\n\t\treturn;\n\t}\n\n\tvar login = $(\"#sign-in\");\n\n\tif (data.serverHash > -1) {\n\t\tutils.serverHash = data.serverHash;\n\n\t\tlogin.html(templates.windows.sign_in());\n\n\t\tlogin.find(\"form\").on(\"submit\", function () {\n\t\t\tvar form = $(this);\n\n\t\t\tform.find(\".btn\").prop(\"disabled\", true);\n\n\t\t\tvar values = {};\n\t\t\t$.each(form.serializeArray(), function (i, obj) {\n\t\t\t\tvalues[obj.name] = obj.value;\n\t\t\t});\n\n\t\t\tstorage.set(\"user\", values.user);\n\n\t\t\tsocket.emit(\"auth\", values);\n\n\t\t\treturn false;\n\t\t});\n\t} else {\n\t\tlogin.find(\".btn\").prop(\"disabled\", false);\n\t}\n\n\tvar token = void 0;\n\tvar user = storage.get(\"user\");\n\n\tif (!data.success) {\n\t\tif (login.length === 0) {\n\t\t\tsocket.disconnect();\n\t\t\t$(\"#connection-error\").text(\"Authentication failed, reloading…\");\n\t\t\tlocation.reload();\n\t\t\treturn;\n\t\t}\n\n\t\tstorage.remove(\"token\");\n\n\t\tvar error = login.find(\".error\");\n\t\terror.show().closest(\"form\").one(\"submit\", function () {\n\t\t\terror.hide();\n\t\t});\n\t} else if (user) {\n\t\ttoken = storage.get(\"token\");\n\n\t\tif (token) {\n\t\t\t$(\"#loading-page-message, #connection-error\").text(\"Authorizing…\");\n\n\t\t\tsocket.emit(\"auth\", {\n\t\t\t\tuser: user,\n\t\t\t\ttoken: token,\n\t\t\t\tlastMessage: utils.lastMessageId\n\t\t\t});\n\t\t}\n\t}\n\n\tif (user) {\n\t\tlogin.find(\"input[name='user']\").val(user);\n\t}\n\n\tif (token) {\n\t\treturn;\n\t}\n\n\t$(\"#footer\").find(\".sign-in\").trigger(\"click\", {\n\t\tpushState: false\n\t});\n});\n\n/***/ }),\n/* 312 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar $ = __webpack_require__(2);\nvar socket = __webpack_require__(3);\n\nsocket.on(\"change-password\", function (data) {\n\tvar passwordForm = $(\"#change-password\");\n\tif (data.error || data.success) {\n\t\tvar message = data.success ? data.success : data.error;\n\t\tvar feedback = passwordForm.find(\".feedback\");\n\n\t\tif (data.success) {\n\t\t\tfeedback.addClass(\"success\").removeClass(\"error\");\n\t\t} else {\n\t\t\tfeedback.addClass(\"error\").removeClass(\"success\");\n\t\t}\n\n\t\tfeedback.text(message).show();\n\t\tfeedback.closest(\"form\").one(\"submit\", function () {\n\t\t\tfeedback.hide();\n\t\t});\n\t}\n\n\tpasswordForm.find(\"input\").val(\"\").end().find(\".btn\").prop(\"disabled\", false);\n});\n\n/***/ }),\n/* 313 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar $ = __webpack_require__(2);\nvar escape = __webpack_require__(32);\nvar socket = __webpack_require__(3);\nvar render = __webpack_require__(15);\nvar webpush = __webpack_require__(30);\nvar sidebar = $(\"#sidebar\");\nvar storage = __webpack_require__(17);\nvar utils = __webpack_require__(11);\n\nsocket.on(\"init\", function (data) {\n\t$(\"#loading-page-message, #connection-error\").text(\"Rendering…\");\n\n\tvar lastMessageId = utils.lastMessageId;\n\tvar previousActive = 0;\n\n\tif (lastMessageId > -1) {\n\t\tpreviousActive = sidebar.find(\".active\").data(\"id\");\n\t\tsidebar.find(\".networks\").empty();\n\t}\n\n\tif (data.networks.length === 0) {\n\t\tsidebar.find(\".empty\").show();\n\n\t\t$(\"#footer\").find(\".connect\").trigger(\"click\", {\n\t\t\tpushState: false\n\t\t});\n\t} else {\n\t\trender.renderNetworks(data);\n\t}\n\n\tif (lastMessageId > -1) {\n\t\t$(\"#connection-error\").removeClass(\"shown\");\n\t\t$(\".show-more-button, #input\").prop(\"disabled\", false);\n\t\t$(\"#submit\").show();\n\t} else {\n\t\tif (data.token) {\n\t\t\tstorage.set(\"token\", data.token);\n\t\t}\n\n\t\twebpush.configurePushNotifications(data.pushSubscription, data.applicationServerKey);\n\n\t\t$(\"body\").removeClass(\"signed-out\");\n\t\t$(\"#loading\").remove();\n\t\t$(\"#sign-in\").remove();\n\n\t\tif (window.g_LoungeErrorHandler) {\n\t\t\twindow.removeEventListener(\"error\", window.g_LoungeErrorHandler);\n\t\t\twindow.g_LoungeErrorHandler = null;\n\t\t}\n\t}\n\n\topenCorrectChannel(previousActive, data.active);\n});\n\nfunction openCorrectChannel(clientActive, serverActive) {\n\tvar target = $();\n\n\t// Open last active channel\n\tif (clientActive > 0) {\n\t\ttarget = sidebar.find(\".chan[data-id=\\\"\" + clientActive + \"\\\"]\");\n\t}\n\n\t// Open window provided in location.hash\n\tif (target.length === 0 && window.location.hash) {\n\t\ttarget = $(\"[data-target=\\\"\" + escape(window.location.hash) + \"\\\"]\").first();\n\t}\n\n\t// Open last active channel according to the server\n\tif (serverActive > 0 && target.length === 0) {\n\t\ttarget = sidebar.find(\".chan[data-id=\\\"\" + serverActive + \"\\\"]\");\n\t}\n\n\t// Open first available channel\n\tif (target.length === 0) {\n\t\ttarget = sidebar.find(\".chan\").first();\n\t}\n\n\t// If target channel is found, open it\n\tif (target.length > 0) {\n\t\ttarget.trigger(\"click\", {\n\t\t\treplaceHistory: true\n\t\t});\n\n\t\treturn;\n\t}\n\n\t// Open the connect window\n\t$(\"#footer .connect\").trigger(\"click\", {\n\t\tpushState: false\n\t});\n}\n\n/***/ }),\n/* 314 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar $ = __webpack_require__(2);\nvar socket = __webpack_require__(3);\nvar render = __webpack_require__(15);\nvar chat = $(\"#chat\");\nvar templates = __webpack_require__(8);\nvar sidebar = $(\"#sidebar\");\n\nsocket.on(\"join\", function (data) {\n\tvar id = data.network;\n\tvar network = sidebar.find(\"#network-\" + id);\n\tnetwork.append(templates.chan({\n\t\tchannels: [data.chan]\n\t}));\n\tchat.append(templates.chat({\n\t\tchannels: [data.chan]\n\t}));\n\trender.renderChannel(data.chan);\n\n\t// Queries do not automatically focus, unless the user did a whois\n\tif (data.chan.type === \"query\" && !data.shouldOpen) {\n\t\treturn;\n\t}\n\n\tsidebar.find(\".chan\").sort(function (a, b) {\n\t\treturn $(a).data(\"id\") - $(b).data(\"id\");\n\t}).last().trigger(\"click\");\n});\n\n/***/ }),\n/* 315 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar $ = __webpack_require__(2);\nvar socket = __webpack_require__(3);\nvar render = __webpack_require__(15);\nvar condensed = __webpack_require__(186);\nvar chat = $(\"#chat\");\n\nsocket.on(\"more\", function (data) {\n\tvar chan = chat.find(\"#chan-\" + data.chan);\n\tvar type = chan.data(\"type\");\n\tchan = chan.find(\".messages\");\n\n\t// get the scrollable wrapper around messages\n\tvar scrollable = chan.closest(\".chat\");\n\tvar heightOld = chan.height() - scrollable.scrollTop();\n\n\t// If there are no more messages to show, just hide the button and do nothing else\n\tif (!data.messages.length) {\n\t\tscrollable.find(\".show-more\").removeClass(\"show\");\n\t\treturn;\n\t}\n\n\t// Remove the date-change marker we put at the top, because it may\n\t// not actually be a date change now\n\tvar children = $(chan).children();\n\tif (children.eq(0).hasClass(\"date-marker-container\")) {\n\t\t// Check top most child\n\t\tchildren.eq(0).remove();\n\t} else if (children.eq(1).hasClass(\"date-marker-container\")) {\n\t\t// The unread-marker could be at index 0, which will cause the date-marker to become \"stuck\"\n\t\tchildren.eq(1).remove();\n\t} else if (children.eq(0).hasClass(\"condensed\") && children.eq(0).children(\".date-marker-container\").eq(0).hasClass(\"date-marker-container\")) {\n\t\tchildren.eq(0).children(\".date-marker-container\").eq(0).remove();\n\t}\n\n\t// Add the older messages\n\tvar documentFragment = render.buildChannelMessages($(document.createDocumentFragment()), data.chan, type, data.messages);\n\tchan.prepend(documentFragment);\n\n\t// Move unread marker to correct spot if needed\n\tvar unreadMarker = chan.find(\".unread-marker\");\n\tvar firstUnread = unreadMarker.data(\"unread-id\");\n\n\tif (firstUnread > 0) {\n\t\tvar first = chan.find(\"#msg-\" + firstUnread);\n\n\t\tif (!first.length) {\n\t\t\tchan.prepend(unreadMarker);\n\t\t} else {\n\t\t\tvar parent = first.parent();\n\n\t\t\tif (parent.hasClass(\"condensed\")) {\n\t\t\t\tfirst = parent;\n\t\t\t}\n\n\t\t\tunreadMarker.data(\"unread-id\", 0);\n\n\t\t\tfirst.before(unreadMarker);\n\t\t}\n\t}\n\n\t// Join duplicate condensed messages together\n\tvar condensedDuplicate = chan.find(\".msg.condensed + .msg.condensed\");\n\n\tif (condensedDuplicate) {\n\t\tvar condensedCorrect = condensedDuplicate.prev();\n\n\t\tcondensed.updateText(condensedCorrect, condensed.getStoredTypes(condensedDuplicate));\n\n\t\tcondensedCorrect.append(condensedDuplicate.find(\".msg\")).toggleClass(\"closed\", condensedDuplicate.hasClass(\"closed\"));\n\n\t\tcondensedDuplicate.remove();\n\t}\n\n\t// restore scroll position\n\tvar position = chan.height() - heightOld;\n\tscrollable.finish().scrollTop(position);\n\n\t// We have to do this hack due to smooth scrolling in browsers,\n\t// as scrollTop does not apply correctly\n\tif (window.requestAnimationFrame) {\n\t\twindow.requestAnimationFrame(function () {\n\t\t\treturn scrollable.scrollTop(position);\n\t\t});\n\t}\n\n\tif (data.messages.length !== 100) {\n\t\tscrollable.find(\".show-more\").removeClass(\"show\");\n\t}\n\n\tscrollable.find(\".show-more-button\").text(\"Show older messages\").prop(\"disabled\", false);\n});\n\nchat.on(\"click\", \".show-more-button\", function () {\n\tvar self = $(this);\n\tvar lastMessage = self.closest(\".chat\").find(\".msg:not(.condensed)\").first();\n\tvar lastMessageId = -1;\n\n\tif (lastMessage.length > 0) {\n\t\tlastMessageId = parseInt(lastMessage.prop(\"id\").replace(\"msg-\", \"\"), 10);\n\t}\n\n\tself.text(\"Loading older messages…\").prop(\"disabled\", true);\n\n\tsocket.emit(\"more\", {\n\t\ttarget: self.data(\"id\"),\n\t\tlastId: lastMessageId\n\t});\n});\n\n/***/ }),\n/* 316 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar $ = __webpack_require__(2);\nvar socket = __webpack_require__(3);\nvar render = __webpack_require__(15);\nvar utils = __webpack_require__(11);\nvar options = __webpack_require__(13);\nvar helpers_roundBadgeNumber = __webpack_require__(169);\nvar cleanIrcMessage = __webpack_require__(317);\nvar webpush = __webpack_require__(30);\nvar chat = $(\"#chat\");\nvar sidebar = $(\"#sidebar\");\n\nvar pop = void 0;\ntry {\n\tpop = new Audio();\n\tpop.src = \"audio/pop.ogg\";\n} catch (e) {\n\tpop = {\n\t\tplay: $.noop\n\t};\n}\n\nsocket.on(\"msg\", function (data) {\n\t// We set a maximum timeout of 2 seconds so that messages don't take too long to appear.\n\tutils.requestIdleCallback(function () {\n\t\treturn processReceivedMessage(data);\n\t}, 2000);\n});\n\nfunction processReceivedMessage(data) {\n\tvar targetId = data.chan;\n\tvar target = \"#chan-\" + targetId;\n\tvar channel = chat.find(target);\n\tvar sidebarTarget = sidebar.find(\"[data-target='\" + target + \"']\");\n\n\t// Display received notices and errors in currently active channel.\n\t// Reloading the page will put them back into the lobby window.\n\tif (data.msg.showInActive) {\n\t\tvar activeOnNetwork = sidebarTarget.parent().find(\".active\");\n\n\t\t// We only want to put errors/notices in active channel if they arrive on the same network\n\t\tif (activeOnNetwork.length > 0) {\n\t\t\ttargetId = data.chan = activeOnNetwork.data(\"id\");\n\n\t\t\ttarget = \"#chan-\" + targetId;\n\t\t\tchannel = chat.find(target);\n\t\t\tsidebarTarget = sidebar.find(\"[data-target='\" + target + \"']\");\n\t\t}\n\t}\n\n\tvar container = channel.find(\".messages\");\n\tvar activeChannelId = chat.find(\".chan.active\").data(\"id\");\n\n\tif (data.msg.type === \"channel_list\" || data.msg.type === \"ban_list\") {\n\t\t$(container).empty();\n\t}\n\n\t// Add message to the container\n\trender.appendMessage(container, targetId, channel.data(\"type\"), data.msg);\n\n\tif (activeChannelId === targetId) {\n\t\tcontainer.trigger(\"keepToBottom\");\n\t}\n\n\tnotifyMessage(targetId, channel, data);\n\n\tvar lastVisible = container.find(\"div:visible\").last();\n\tif (data.msg.self || lastVisible.hasClass(\"unread-marker\") || lastVisible.hasClass(\"date-marker\") && lastVisible.prev().hasClass(\"unread-marker\")) {\n\t\tcontainer.find(\".unread-marker\").data(\"unread-id\", 0).appendTo(container);\n\t}\n\n\t// Clear unread/highlight counter if self-message\n\tif (data.msg.self) {\n\t\tsidebarTarget.find(\".badge\").removeClass(\"highlight\").empty();\n\t}\n\n\tvar messageLimit = 0;\n\n\tif (activeChannelId !== targetId) {\n\t\t// If message arrives in non active channel, keep only 100 messages\n\t\tmessageLimit = 100;\n\t} else if (container.isScrollBottom()) {\n\t\t// If message arrives in active channel, keep 500 messages if scroll is currently at the bottom\n\t\tmessageLimit = 500;\n\t}\n\n\tif (messageLimit > 0) {\n\t\trender.trimMessageInChannel(channel, messageLimit);\n\t}\n\n\tif ((data.msg.type === \"message\" || data.msg.type === \"action\") && channel.hasClass(\"channel\")) {\n\t\tvar nicks = channel.find(\".users\").data(\"nicks\");\n\t\tif (nicks) {\n\t\t\tvar find = nicks.indexOf(data.msg.from.nick);\n\t\t\tif (find !== -1) {\n\t\t\t\tnicks.splice(find, 1);\n\t\t\t\tnicks.unshift(data.msg.from.nick);\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction notifyMessage(targetId, channel, msg) {\n\tvar unread = msg.unread;\n\tmsg = msg.msg;\n\n\tif (msg.self) {\n\t\treturn;\n\t}\n\n\tvar button = sidebar.find(\".chan[data-id='\" + targetId + \"']\");\n\tif (msg.highlight || options.notifyAllMessages && msg.type === \"message\") {\n\t\tif (!document.hasFocus() || !channel.hasClass(\"active\")) {\n\t\t\tif (options.notification) {\n\t\t\t\ttry {\n\t\t\t\t\tpop.play();\n\t\t\t\t} catch (exception) {\n\t\t\t\t\t// On mobile, sounds can not be played without user interaction.\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tutils.toggleNotificationMarkers(true);\n\n\t\t\tif (options.desktopNotifications && Notification.permission === \"granted\") {\n\t\t\t\tvar title = void 0;\n\t\t\t\tvar body = void 0;\n\n\t\t\t\tif (msg.type === \"invite\") {\n\t\t\t\t\ttitle = \"New channel invite:\";\n\t\t\t\t\tbody = msg.from.nick + \" invited you to \" + msg.channel;\n\t\t\t\t} else {\n\t\t\t\t\ttitle = msg.from.nick;\n\t\t\t\t\tif (!button.hasClass(\"query\")) {\n\t\t\t\t\t\ttitle += \" (\" + button.data(\"title\").trim() + \")\";\n\t\t\t\t\t}\n\t\t\t\t\tif (msg.type === \"message\") {\n\t\t\t\t\t\ttitle += \" says:\";\n\t\t\t\t\t}\n\t\t\t\t\tbody = cleanIrcMessage(msg.text);\n\t\t\t\t}\n\n\t\t\t\tvar timestamp = Date.parse(msg.time);\n\n\t\t\t\ttry {\n\t\t\t\t\tif (webpush.hasServiceWorker) {\n\t\t\t\t\t\tnavigator.serviceWorker.ready.then(function (registration) {\n\t\t\t\t\t\t\tregistration.active.postMessage({\n\t\t\t\t\t\t\t\ttype: \"notification\",\n\t\t\t\t\t\t\t\tchanId: targetId,\n\t\t\t\t\t\t\t\ttimestamp: timestamp,\n\t\t\t\t\t\t\t\ttitle: title,\n\t\t\t\t\t\t\t\tbody: body\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar notify = new Notification(title, {\n\t\t\t\t\t\t\ttag: \"chan-\" + targetId,\n\t\t\t\t\t\t\tbadge: \"img/logo-64.png\",\n\t\t\t\t\t\t\ticon: \"img/touch-icon-192x192.png\",\n\t\t\t\t\t\t\tbody: body,\n\t\t\t\t\t\t\ttimestamp: timestamp\n\t\t\t\t\t\t});\n\t\t\t\t\t\tnotify.addEventListener(\"click\", function () {\n\t\t\t\t\t\t\twindow.focus();\n\t\t\t\t\t\t\tbutton.trigger(\"click\");\n\t\t\t\t\t\t\tthis.close();\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} catch (exception) {\n\t\t\t\t\t// `new Notification(...)` is not supported and should be silenced.\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (!unread || button.hasClass(\"active\")) {\n\t\treturn;\n\t}\n\n\tvar badge = button.find(\".badge\").html(helpers_roundBadgeNumber(unread));\n\n\tif (msg.highlight) {\n\t\tbadge.addClass(\"highlight\");\n\t}\n}\n\n/***/ }),\n/* 317 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar matchFormatting = /\\x02|\\x1D|\\x1F|\\x16|\\x0F|\\x11|\\x1E|\\x03(?:[0-9]{1,2}(?:,[0-9]{1,2})?)?|\\x04(?:[0-9a-f]{6}(?:,[0-9a-f]{6})?)?/gi;\n\nmodule.exports = function (message) {\n return message.replace(matchFormatting, \"\").trim();\n};\n\n/***/ }),\n/* 318 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar $ = __webpack_require__(2);\nvar renderPreview = __webpack_require__(185);\nvar socket = __webpack_require__(3);\nvar utils = __webpack_require__(11);\n\nsocket.on(\"msg:preview\", function (data) {\n\t// Previews are not as important, we can wait longer for them to appear\n\tutils.requestIdleCallback(function () {\n\t\treturn renderPreview(data.preview, $(\"#msg-\" + data.id));\n\t}, 6000);\n});\n\n/***/ }),\n/* 319 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar socket = __webpack_require__(3);\nvar render = __webpack_require__(15);\n\nsocket.on(\"names\", render.renderChannelUsers);\n\n/***/ }),\n/* 320 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar $ = __webpack_require__(2);\nvar socket = __webpack_require__(3);\nvar render = __webpack_require__(15);\nvar sidebar = $(\"#sidebar\");\n\nsocket.on(\"network\", function (data) {\n\trender.renderNetworks(data, true);\n\n\tsidebar.find(\".chan\").last().trigger(\"click\");\n\n\t$(\"#connect\").find(\".btn\").prop(\"disabled\", false);\n});\n\nsocket.on(\"network_changed\", function (data) {\n\tsidebar.find(\"#network-\" + data.network).data(\"options\", data.serverOptions);\n});\n\n/***/ }),\n/* 321 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar $ = __webpack_require__(2);\nvar socket = __webpack_require__(3);\nvar utils = __webpack_require__(11);\nvar sidebar = $(\"#sidebar\");\n\nsocket.on(\"nick\", function (data) {\n\tvar id = data.network;\n\tvar nick = data.nick;\n\tvar network = sidebar.find(\"#network-\" + id).data(\"nick\", nick);\n\tif (network.find(\".active\").length) {\n\t\tutils.setNick(nick);\n\t}\n});\n\n/***/ }),\n/* 322 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar $ = __webpack_require__(2);\nvar socket = __webpack_require__(3);\n\n// Sync unread badge and marker when other clients open a channel\nsocket.on(\"open\", function (id) {\n\tif (id < 1) {\n\t\treturn;\n\t}\n\n\tvar channel = $(\"#chat #chan-\" + id);\n\n\t// Don't do anything if the channel is active on this client\n\tif (channel.length === 0 || channel.hasClass(\"active\")) {\n\t\treturn;\n\t}\n\n\t// Clear the unread badge\n\t$(\"#sidebar\").find(\".chan[data-id='\" + id + \"'] .badge\").removeClass(\"highlight\").empty();\n\n\t// Move unread marker to the bottom\n\tchannel.find(\".unread-marker\").data(\"unread-id\", 0).appendTo(channel.find(\".messages\"));\n});\n\n/***/ }),\n/* 323 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar $ = __webpack_require__(2);\nvar socket = __webpack_require__(3);\nvar sidebar = $(\"#sidebar\");\n\nsocket.on(\"part\", function (data) {\n\tvar chanMenuItem = sidebar.find(\".chan[data-id='\" + data.chan + \"']\");\n\n\t// When parting from the active channel/query, jump to the network's lobby\n\tif (chanMenuItem.hasClass(\"active\")) {\n\t\tchanMenuItem.parent(\".network\").find(\".lobby\").trigger(\"click\");\n\t}\n\n\tchanMenuItem.remove();\n\t$(\"#chan-\" + data.chan).remove();\n});\n\n/***/ }),\n/* 324 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar $ = __webpack_require__(2);\nvar chat = $(\"#chat\");\nvar socket = __webpack_require__(3);\nvar sidebar = $(\"#sidebar\");\n\nsocket.on(\"quit\", function (data) {\n\tvar id = data.network;\n\tvar network = sidebar.find(\"#network-\" + id);\n\n\tnetwork.children(\".chan\").each(function () {\n\t\t// this = child\n\t\tchat.find($(this).data(\"target\")).remove();\n\t});\n\n\tnetwork.remove();\n\n\tvar chan = sidebar.find(\".chan\").eq(0).trigger(\"click\");\n\n\tif (chan.length === 0) {\n\t\tsidebar.find(\".empty\").show();\n\t}\n});\n\n/***/ }),\n/* 325 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar $ = __webpack_require__(2);\nvar socket = __webpack_require__(3);\nvar options = __webpack_require__(13);\n\nsocket.on(\"sync_sort\", function (data) {\n\t// Syncs the order of channels or networks when they are reordered\n\tif (options.ignoreSortSync) {\n\t\toptions.ignoreSortSync = false;\n\t\treturn; // Ignore syncing because we 'caused' it\n\t}\n\n\tvar type = data.type;\n\tvar order = data.order;\n\n\tif (type === \"networks\") {\n\t\tvar container = $(\".networks\");\n\n\t\t$.each(order, function (index, value) {\n\t\t\tvar position = $(container.children()[index]);\n\n\t\t\tif (position.data(\"id\") === value) {\n\t\t\t\t// Network in correct place\n\t\t\t\treturn true; // No point in continuing\n\t\t\t}\n\n\t\t\tvar network = container.find(\"#network-\" + value);\n\n\t\t\t$(network).insertBefore(position);\n\t\t});\n\t} else if (type === \"channels\") {\n\t\tvar network = $(\"#network-\" + data.target);\n\n\t\t$.each(order, function (index, value) {\n\t\t\tif (index === 0) {\n\t\t\t\t// Shouldn't attempt to move lobby\n\t\t\t\treturn true; // same as `continue` -> skip to next item\n\t\t\t}\n\n\t\t\tvar position = $(network.children()[index]); // Target channel at position\n\n\t\t\tif (position.data(\"id\") === value) {\n\t\t\t\t// Channel in correct place\n\t\t\t\treturn true; // No point in continuing\n\t\t\t}\n\n\t\t\tvar channel = network.find(\".chan[data-id=\" + value + \"]\"); // Channel at position\n\n\t\t\t$(channel).insertBefore(position);\n\t\t});\n\t}\n});\n\n/***/ }),\n/* 326 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar $ = __webpack_require__(2);\nvar socket = __webpack_require__(3);\nvar helpers_parse = __webpack_require__(5);\n\nsocket.on(\"topic\", function (data) {\n\tvar topic = $(\"#chan-\" + data.chan).find(\".header .topic\");\n\ttopic.html(helpers_parse(data.topic));\n\t// .prop() is safe escape-wise but consider the capabilities of the attribute\n\ttopic.prop(\"title\", data.topic);\n});\n\n/***/ }),\n/* 327 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar $ = __webpack_require__(2);\nvar socket = __webpack_require__(3);\nvar chat = $(\"#chat\");\n\nsocket.on(\"users\", function (data) {\n\tvar chan = chat.find(\"#chan-\" + data.chan);\n\n\tif (chan.hasClass(\"active\")) {\n\t\tsocket.emit(\"names\", {\n\t\t\ttarget: data.chan\n\t\t});\n\t} else {\n\t\tchan.data(\"needsNamesRefresh\", true);\n\t}\n});\n\n/***/ }),\n/* 328 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar socket = __webpack_require__(3);\nvar storage = __webpack_require__(17);\n\nsocket.on(\"sign-out\", function () {\n\tstorage.remove(\"token\");\n\tlocation.reload();\n});\n\n/***/ }),\n/* 329 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar $ = __webpack_require__(2);\nvar socket = __webpack_require__(3);\nvar templates = __webpack_require__(8);\n\nsocket.on(\"sessions:list\", function (data) {\n\tdata.sort(function (a, b) {\n\t\treturn b.lastUse - a.lastUse;\n\t});\n\n\tvar html = \"\";\n\tdata.forEach(function (connection) {\n\t\tif (connection.current) {\n\t\t\t$(\"#session-current\").html(templates.session(connection));\n\t\t\treturn;\n\t\t}\n\n\t\thtml += templates.session(connection);\n\t});\n\n\tif (html.length === 0) {\n\t\thtml = \"<p><em>You are not currently logged in to any other device.</em></p>\";\n\t}\n\n\t$(\"#session-list\").html(html);\n});\n\n$(\"#settings\").on(\"click\", \".remove-session\", function () {\n\tsocket.emit(\"sign-out\", $(this).data(\"token\"));\n\n\treturn false;\n});\n\n/***/ }),\n/* 330 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar $ = __webpack_require__(2);\nvar socket = __webpack_require__(3);\nvar templates = __webpack_require__(8);\nvar options = __webpack_require__(13);\nvar webpush = __webpack_require__(30);\n\nsocket.on(\"configuration\", function (data) {\n\tif (!options.initialize) {\n\t\treturn;\n\t}\n\n\t$(\"#settings\").html(templates.windows.settings(data));\n\t$(\"#connect\").html(templates.windows.connect(data));\n\t$(\"#help\").html(templates.windows.help(data));\n\t$(\"#changelog\").html(templates.windows.changelog());\n\n\t$(\"#play\").on(\"click\", function () {\n\t\tvar pop = new Audio();\n\t\tpop.src = \"audio/pop.ogg\";\n\t\tpop.play();\n\t});\n\n\toptions.initialize();\n\twebpush.initialize();\n\n\tvar forms = $(\"#connect form, #change-password form\");\n\n\tforms.on(\"submit\", function () {\n\t\tvar form = $(this);\n\t\tvar event = form.data(\"event\");\n\n\t\tform.find(\".btn\").prop(\"disabled\", true);\n\n\t\tvar values = {};\n\t\t$.each(form.serializeArray(), function (i, obj) {\n\t\t\tif (obj.value !== \"\") {\n\t\t\t\tvalues[obj.name] = obj.value;\n\t\t\t}\n\t\t});\n\n\t\tsocket.emit(event, values);\n\n\t\treturn false;\n\t});\n\n\t$(\".nick\").on(\"focusin\", function () {\n\t\t// Need to set the first \"lastvalue\", so it can be used in the below function\n\t\tvar nick = $(this);\n\t\tnick.data(\"lastvalue\", nick.val());\n\t}).on(\"input\", function () {\n\t\tvar nick = $(this).val();\n\t\tvar usernameInput = forms.find(\".username\");\n\n\t\t// Because this gets called /after/ it has already changed, we need use the previous value\n\t\tvar lastValue = $(this).data(\"lastvalue\");\n\n\t\t// They were the same before the change, so update the username field\n\t\tif (usernameInput.val() === lastValue) {\n\t\t\tusernameInput.val(nick);\n\t\t}\n\n\t\t// Store the \"previous\" value, for next time\n\t\t$(this).data(\"lastvalue\", nick);\n\t});\n});\n\n/***/ }),\n/* 331 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar $ = __webpack_require__(2);\nvar Mousetrap = __webpack_require__(25);\nvar input = $(\"#input\");\nvar sidebar = $(\"#sidebar\");\nvar windows = $(\"#windows\");\nvar contextMenuContainer = $(\"#context-menu-container\");\n\nMousetrap.bind([\"pageup\", \"pagedown\"], function (e, key) {\n\tvar container = windows.find(\".window.active\");\n\n\t// Chat windows scroll message container\n\tif (container.prop(\"id\") === \"chat-container\") {\n\t\tcontainer = container.find(\".chan.active .chat\");\n\t}\n\n\tcontainer.finish();\n\n\tvar offset = container.get(0).clientHeight * 0.9;\n\tvar scrollTop = container.scrollTop();\n\n\tif (key === \"pageup\") {\n\t\tscrollTop = Math.floor(scrollTop - offset);\n\t} else {\n\t\tscrollTop = Math.ceil(scrollTop + offset);\n\t}\n\n\tcontainer.animate({\n\t\tscrollTop: scrollTop\n\t}, 200);\n\n\treturn false;\n});\n\nMousetrap.bind([\"mod+up\", \"mod+down\"], function (e, keys) {\n\tvar channels = sidebar.find(\".chan\");\n\tvar index = channels.index(channels.filter(\".active\"));\n\tvar direction = keys.split(\"+\").pop();\n\tvar target = void 0;\n\n\tswitch (direction) {\n\t\tcase \"up\":\n\t\t\ttarget = (channels.length + (index - 1 + channels.length)) % channels.length;\n\t\t\tbreak;\n\n\t\tcase \"down\":\n\t\t\ttarget = (channels.length + (index + 1 + channels.length)) % channels.length;\n\t\t\tbreak;\n\t}\n\n\tchannels.eq(target).click();\n});\n\nMousetrap.bind([\"escape\"], function () {\n\tcontextMenuContainer.hide();\n});\n\nvar colorsHotkeys = {\n\tk: \"\\x03\",\n\tb: \"\\x02\",\n\tu: \"\\x1F\",\n\ti: \"\\x1D\",\n\to: \"\\x0F\",\n\ts: \"\\x1e\",\n\tm: \"\\x11\"\n};\n\nfor (var hotkey in colorsHotkeys) {\n\tMousetrap.bind(\"mod+\" + hotkey, function (e) {\n\t\te.preventDefault();\n\n\t\tvar cursorPosStart = input.prop(\"selectionStart\");\n\t\tvar cursorPosEnd = input.prop(\"selectionEnd\");\n\t\tvar value = input.val();\n\t\tvar newValue = value.substring(0, cursorPosStart) + colorsHotkeys[e.key];\n\n\t\tif (cursorPosStart === cursorPosEnd) {\n\t\t\t// If no text is selected, insert at cursor\n\t\t\tnewValue += value.substring(cursorPosEnd, value.length);\n\t\t} else {\n\t\t\t// If text is selected, insert formatting character at start and the end\n\t\t\tnewValue += value.substring(cursorPosStart, cursorPosEnd) + colorsHotkeys[e.key] + value.substring(cursorPosEnd, value.length);\n\t\t}\n\n\t\tinput.val(newValue).get(0).setSelectionRange(cursorPosStart + 1, cursorPosEnd + 1);\n\t});\n}\n\n/***/ }),\n/* 332 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar $ = __webpack_require__(2);\nvar chat = document.getElementById(\"chat\");\n\nfunction copyMessages() {\n\tvar selection = window.getSelection();\n\n\t// If selection does not span multiple elements, do nothing\n\tif (selection.anchorNode === selection.focusNode) {\n\t\treturn;\n\t}\n\n\tvar range = selection.getRangeAt(0);\n\tvar documentFragment = range.cloneContents();\n\tvar div = document.createElement(\"div\");\n\n\t$(documentFragment).find(\".from .user\").each(function (_, el) {\n\t\tel = $(el);\n\t\tel.text(\"<\" + el.text() + \">\");\n\t});\n\n\tdiv.id = \"js-copy-hack\";\n\tdiv.appendChild(documentFragment);\n\tchat.appendChild(div);\n\n\tselection.selectAllChildren(div);\n\n\twindow.setTimeout(function () {\n\t\tchat.removeChild(div);\n\t\tselection.removeAllRanges();\n\t\tselection.addRange(range);\n\t}, 0);\n}\n\n$(chat).on(\"copy\", \".messages\", copyMessages);\n\n/***/ })\n],[189]);\n\n\n// WEBPACK FOOTER //\n// js/bundle.js","\"use strict\";\n\nconst $ = require(\"jquery\");\nconst io = require(\"socket.io-client\");\nconst utils = require(\"./utils\");\nconst path = window.location.pathname + \"socket.io/\";\n\nconst socket = io({\n\ttransports: $(document.body).data(\"transports\"),\n\tpath: path,\n\tautoConnect: false,\n\treconnection: !$(document.body).hasClass(\"public\"),\n});\n\nsocket.on(\"disconnect\", handleDisconnect);\nsocket.on(\"connect_error\", handleDisconnect);\nsocket.on(\"error\", handleDisconnect);\n\nsocket.on(\"reconnecting\", function(attempt) {\n\t$(\"#loading-page-message, #connection-error\").text(`Reconnecting… (attempt ${attempt})`);\n});\n\nsocket.on(\"connecting\", function() {\n\t$(\"#loading-page-message, #connection-error\").text(\"Connecting…\");\n});\n\nsocket.on(\"connect\", function() {\n\t// Clear send buffer when reconnecting, socket.io would emit these\n\t// immediately upon connection and it will have no effect, so we ensure\n\t// nothing is sent to the server that might have happened.\n\tsocket.sendBuffer = [];\n\n\t$(\"#loading-page-message, #connection-error\").text(\"Finalizing connection…\");\n});\n\nsocket.on(\"authorized\", function() {\n\t$(\"#loading-page-message, #connection-error\").text(\"Loading messages…\");\n});\n\nfunction handleDisconnect(data) {\n\tconst message = data.message || data;\n\n\t$(\"#loading-page-message, #connection-error\").text(`Waiting to reconnect… (${message})`).addClass(\"shown\");\n\t$(\".show-more-button, #input\").prop(\"disabled\", true);\n\t$(\"#submit\").hide();\n\n\t// If the server shuts down, socket.io skips reconnection\n\t// and we have to manually call connect to start the process\n\tif (socket.io.skipReconnect) {\n\t\tutils.requestIdleCallback(() => socket.connect(), 2000);\n\t}\n}\n\nmodule.exports = socket;\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/socket.js","var Handlebars = require(\"/home/travis/build/thelounge/lounge/node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var alias1=container.escapeExpression, alias2=container.lambda;\n\n return \"<span role=\\\"button\\\" class=\\\"user \"\n + alias1(__default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/colorClass.js\")).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.nick : depth0),{\"name\":\"colorClass\",\"hash\":{},\"data\":data}))\n + \"\\\" data-name=\\\"\"\n + alias1(alias2((depth0 != null ? depth0.nick : depth0), depth0))\n + \"\\\">\"\n + alias1(alias2((depth0 != null ? depth0.mode : depth0), depth0))\n + alias1(alias2((depth0 != null ? depth0.nick : depth0), depth0))\n + \"</span>\\n\";\n},\"useData\":true});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./client/views/user_name.tpl\n// module id = 4\n// module chunks = 0","\"use strict\";\n\nconst Handlebars = require(\"handlebars/runtime\");\nconst parseStyle = require(\"./ircmessageparser/parseStyle\");\nconst anyIntersection = require(\"./ircmessageparser/anyIntersection\");\nconst findChannels = require(\"./ircmessageparser/findChannels\");\nconst findLinks = require(\"./ircmessageparser/findLinks\");\nconst findEmoji = require(\"./ircmessageparser/findEmoji\");\nconst findNames = require(\"./ircmessageparser/findNames\");\nconst merge = require(\"./ircmessageparser/merge\");\nconst colorClass = require(\"./colorClass\");\n\n// Create an HTML `span` with styling information for a given fragment\nfunction createFragment(fragment) {\n\tconst classes = [];\n\tif (fragment.bold) {\n\t\tclasses.push(\"irc-bold\");\n\t}\n\tif (fragment.textColor !== undefined) {\n\t\tclasses.push(\"irc-fg\" + fragment.textColor);\n\t}\n\tif (fragment.bgColor !== undefined) {\n\t\tclasses.push(\"irc-bg\" + fragment.bgColor);\n\t}\n\tif (fragment.italic) {\n\t\tclasses.push(\"irc-italic\");\n\t}\n\tif (fragment.underline) {\n\t\tclasses.push(\"irc-underline\");\n\t}\n\tif (fragment.strikethrough) {\n\t\tclasses.push(\"irc-strikethrough\");\n\t}\n\tif (fragment.monospace) {\n\t\tclasses.push(\"irc-monospace\");\n\t}\n\n\tlet attributes = classes.length ? ` class=\"${classes.join(\" \")}\"` : \"\";\n\tconst escapedText = Handlebars.Utils.escapeExpression(fragment.text);\n\n\tif (fragment.hexColor) {\n\t\tattributes += ` style=\"color:#${fragment.hexColor}`;\n\n\t\tif (fragment.hexBgColor) {\n\t\t\tattributes += `;background-color:#${fragment.hexBgColor}`;\n\t\t}\n\n\t\tattributes += '\"';\n\t}\n\n\tif (attributes.length) {\n\t\treturn `<span${attributes}>${escapedText}</span>`;\n\t}\n\n\treturn escapedText;\n}\n\n// Transform an IRC message potentially filled with styling control codes, URLs,\n// nicknames, and channels into a string of HTML elements to display on the client.\nmodule.exports = function parse(text, users) {\n\t// if it's not the users we're expecting, but rather is passed from Handlebars (occurs when users passed to template is null or undefined)\n\tif (users && users.hash) {\n\t\tusers = [];\n\t}\n\n\t// Extract the styling information and get the plain text version from it\n\tconst styleFragments = parseStyle(text);\n\tconst cleanText = styleFragments.map((fragment) => fragment.text).join(\"\");\n\n\t// On the plain text, find channels and URLs, returned as \"parts\". Parts are\n\t// arrays of objects containing start and end markers, as well as metadata\n\t// depending on what was found (channel or link).\n\tconst channelPrefixes = [\"#\", \"&\"]; // TODO Channel prefixes should be RPL_ISUPPORT.CHANTYPES\n\tconst userModes = [\"!\", \"@\", \"%\", \"+\"]; // TODO User modes should be RPL_ISUPPORT.PREFIX\n\tconst channelParts = findChannels(cleanText, channelPrefixes, userModes);\n\tconst linkParts = findLinks(cleanText);\n\tconst emojiParts = findEmoji(cleanText);\n\tconst nameParts = findNames(cleanText, (users || []));\n\n\t// Sort all parts identified based on their position in the original text\n\tconst parts = channelParts\n\t\t.concat(linkParts)\n\t\t.concat(emojiParts)\n\t\t.concat(nameParts)\n\t\t.sort((a, b) => a.start - b.start || b.end - a.end)\n\t\t.reduce((prev, curr) => {\n\t\t\tconst intersection = prev.some((p) => anyIntersection(p, curr));\n\n\t\t\tif (intersection) {\n\t\t\t\treturn prev;\n\t\t\t}\n\t\t\treturn prev.concat([curr]);\n\t\t}, []);\n\n\t// Merge the styling information with the channels / URLs / nicks / text objects and\n\t// generate HTML strings with the resulting fragments\n\treturn merge(parts, styleFragments).map((textPart) => {\n\t\t// Create HTML strings with styling information\n\t\tconst fragments = textPart.fragments.map(createFragment).join(\"\");\n\n\t\t// Wrap these potentially styled fragments with links and channel buttons\n\t\tif (textPart.link) {\n\t\t\tconst escapedLink = Handlebars.Utils.escapeExpression(textPart.link);\n\t\t\treturn `<a href=\"${escapedLink}\" target=\"_blank\" rel=\"noopener\">${fragments}</a>`;\n\t\t} else if (textPart.channel) {\n\t\t\tconst escapedChannel = Handlebars.Utils.escapeExpression(textPart.channel);\n\t\t\treturn `<span class=\"inline-channel\" role=\"button\" tabindex=\"0\" data-chan=\"${escapedChannel}\">${fragments}</span>`;\n\t\t} else if (textPart.emoji) {\n\t\t\treturn `<span class=\"emoji\">${fragments}</span>`;\n\t\t} else if (textPart.nick) {\n\t\t\tconst nick = Handlebars.Utils.escapeExpression(textPart.nick);\n\t\t\treturn `<span role=\"button\" class=\"user ${colorClass(nick)}\" data-name=\"${nick}\">${fragments}</span>`;\n\t\t}\n\n\t\treturn fragments;\n\t}).join(\"\");\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/libs/handlebars/parse.js","\"use strict\";\n\nmodule.exports = function(a, b, opt) {\n\tif (arguments.length !== 3) {\n\t\tthrow new Error(\"Handlebars helper `equal` expects 3 arguments\");\n\t}\n\n\ta = a.toString();\n\tb = b.toString();\n\n\tif (a === b) {\n\t\treturn opt.fn(this);\n\t}\n\n\treturn opt.inverse(this);\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/libs/handlebars/equal.js","\"use strict\";\n\n// This creates a version of `require()` in the context of the current\n// directory, so we iterate over its content, which is a map statically built by\n// Webpack.\n// Second argument says it's recursive, third makes sure we only load templates.\nconst requireViews = require.context(\".\", true, /\\.tpl$/);\n\nmodule.exports = requireViews.keys().reduce((acc, path) => {\n\t// We are going to create nested properties on the accumulator object.\n\tlet tmp = acc;\n\n\t// Split path by folders, and create a new property if necessary/\n\t// First 2 characters are \"./\"/\n\t// Last element in the array ends with `.tpl` and needs to be `require`d.\n\tpath.substr(2).split(\"/\").forEach((key) => {\n\t\tif (key.endsWith(\".tpl\")) { //\n\t\t\ttmp[key.substr(0, key.length - 4)] = requireViews(path);\n\t\t} else {\n\t\t\ttmp[key] = tmp[key] || {};\n\t\t}\n\t\ttmp = tmp[key];\n\t});\n\n\treturn acc;\n}, {});\n\n\n\n// WEBPACK FOOTER //\n// ./client/views/index.js","\"use strict\";\n\nmodule.exports = function() {\n\treturn function() {};\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./scripts/noop.js\n// module id = 10\n// module chunks = 0","\"use strict\";\n\nconst $ = require(\"jquery\");\nconst escape = require(\"css.escape\");\nconst input = $(\"#input\");\n\nvar serverHash = -1;\nvar lastMessageId = -1;\n\nmodule.exports = {\n\tinputCommands: {collapse, expand, join},\n\tfindCurrentNetworkChan,\n\tserverHash,\n\tlastMessageId,\n\tconfirmExit,\n\tforceFocus,\n\tmove,\n\tresetHeight,\n\tsetNick,\n\ttoggleNickEditor,\n\ttoggleNotificationMarkers,\n\trequestIdleCallback,\n\tisOpInChannel,\n};\n\nfunction findCurrentNetworkChan(name) {\n\tname = name.toLowerCase();\n\n\treturn $(\".network .chan.active\")\n\t\t.parent(\".network\")\n\t\t.find(\".chan\")\n\t\t.filter(function() {\n\t\t\treturn $(this).data(\"title\").toLowerCase() === name;\n\t\t})\n\t\t.first();\n}\n\nfunction resetHeight(element) {\n\telement.style.height = element.style.minHeight;\n}\n\n// Given a channel element will determine if the lounge user is Op in that channel\nfunction isOpInChannel(channel) {\n\tconst channelID = channel.data(\"id\");\n\tconst network = $(\"#sidebar .network\").has(`.chan[data-id=\"${channelID}\"]`);\n\tconst ownNick = network.data(\"nick\");\n\tconst isOP = channel.find(`.users .user-mode.op .user[data-name=\"${escape(ownNick)}\"]`).length;\n\treturn isOP;\n}\n\n// Triggering click event opens the virtual keyboard on mobile\n// This can only be called from another interactive event (e.g. button click)\nfunction forceFocus() {\n\tinput.trigger(\"click\").trigger(\"focus\");\n}\n\nfunction collapse() {\n\t$(\".chan.active .toggle-button.toggle-preview.opened\").click();\n\treturn true;\n}\n\nfunction expand() {\n\t$(\".chan.active .toggle-button.toggle-preview:not(.opened)\").click();\n\treturn true;\n}\n\nfunction join(args) {\n\tconst channel = args[0];\n\tif (channel) {\n\t\tconst chan = findCurrentNetworkChan(channel);\n\t\tif (chan.length) {\n\t\t\tchan.trigger(\"click\");\n\t\t}\n\t}\n}\n\nfunction toggleNickEditor(toggle) {\n\t$(\"#nick\").toggleClass(\"editable\", toggle);\n\t$(\"#nick-value\").prop(\"contenteditable\", toggle);\n}\n\nfunction setNick(nick) {\n\t// Closes the nick editor when canceling, changing channel, or when a nick\n\t// is set in a different tab / browser / device.\n\ttoggleNickEditor(false);\n\n\t$(\"#nick-value\").text(nick);\n}\n\nconst favicon = $(\"#favicon\");\n\nfunction toggleNotificationMarkers(newState) {\n\t// Toggles the favicon to red when there are unread notifications\n\tif (favicon.data(\"toggled\") !== newState) {\n\t\tvar old = favicon.prop(\"href\");\n\t\tfavicon.prop(\"href\", favicon.data(\"other\"));\n\t\tfavicon.data(\"other\", old);\n\t\tfavicon.data(\"toggled\", newState);\n\t}\n\n\t// Toggles a dot on the menu icon when there are unread notifications\n\t$(\"#viewport .lt\").toggleClass(\"notified\", newState);\n}\n\nfunction confirmExit() {\n\tif ($(\"body\").hasClass(\"public\")) {\n\t\twindow.onbeforeunload = function() {\n\t\t\treturn \"Are you sure you want to navigate away from this page?\";\n\t\t};\n\t}\n}\n\nfunction move(array, old_index, new_index) {\n\tif (new_index >= array.length) {\n\t\tlet k = new_index - array.length;\n\t\twhile ((k--) + 1) {\n\t\t\tthis.push(undefined);\n\t\t}\n\t}\n\tarray.splice(new_index, 0, array.splice(old_index, 1)[0]);\n\treturn array;\n}\n\nfunction requestIdleCallback(callback, timeout) {\n\tif (window.requestIdleCallback) {\n\t\t// During an idle period the user agent will run idle callbacks in FIFO order\n\t\t// until either the idle period ends or there are no more idle callbacks eligible to be run.\n\t\twindow.requestIdleCallback(callback, {timeout: timeout});\n\t} else {\n\t\tcallback();\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/utils.js","\"use strict\";\n\nconst moment = require(\"moment\");\n\nmodule.exports = function(time) {\n\treturn moment(time).format(\"D MMMM YYYY, HH:mm:ss\");\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/libs/handlebars/localetime.js","\"use strict\";\n\nconst $ = require(\"jquery\");\nconst escapeRegExp = require(\"lodash/escapeRegExp\");\nconst userStyles = $(\"#user-specified-css\");\nconst storage = require(\"./localStorage\");\nconst tz = require(\"./libs/handlebars/tz\");\n\nconst windows = $(\"#windows\");\nconst chat = $(\"#chat\");\n\n// Default options\nconst options = {\n\tautocomplete: true,\n\tnickPostfix: \"\",\n\tcoloredNicks: true,\n\tdesktopNotifications: false,\n\thighlights: [],\n\tlinks: true,\n\tmotd: true,\n\tnotification: true,\n\tnotifyAllMessages: false,\n\tshowSeconds: false,\n\tstatusMessages: \"condensed\",\n\ttheme: $(\"#theme\").prop(\"href\").match(/themes\\/(.*?)\\.css$/), // TODO: Make this a data attribute in v3\n\tmedia: true,\n\tuserStyles: userStyles.text(),\n};\nlet userOptions = JSON.parse(storage.get(\"settings\")) || {};\n\noptions.theme = options.theme ? options.theme[1] : \"example\"; // TODO: Remove in v3\n\nfor (const key in options) {\n\tif (userOptions[key] !== undefined) {\n\t\toptions[key] = userOptions[key];\n\t}\n}\n\n// Apply custom CSS on page load\nif (typeof userOptions.userStyles === \"string\" && !/[?&]nocss/.test(window.location.search)) {\n\tuserStyles.html(userOptions.userStyles);\n}\n\nuserOptions = null;\n\nmodule.exports = options;\n\n// Due to cyclical dependency, have to require it after exports\nconst autocompletion = require(\"./autocompletion\");\n\nmodule.exports.shouldOpenMessagePreview = function(type) {\n\treturn type === \"link\" ? options.links : options.media;\n};\n\nmodule.exports.initialize = () => {\n\tmodule.exports.initialize = null;\n\n\tconst settings = $(\"#settings\");\n\n\tfor (var i in options) {\n\t\tif (i === \"userStyles\") {\n\t\t\tsettings.find(\"#user-specified-css-input\").val(options[i]);\n\t\t} else if (i === \"highlights\") {\n\t\t\tsettings.find(\"input[name=\" + i + \"]\").val(options[i]);\n\t\t} else if (i === \"nickPostfix\") {\n\t\t\tsettings.find(\"input[name=\" + i + \"]\").val(options[i]);\n\t\t} else if (i === \"statusMessages\") {\n\t\t\tsettings.find(`input[name=${i}][value=${options[i]}]`)\n\t\t\t\t.prop(\"checked\", true);\n\t\t} else if (i === \"theme\") {\n\t\t\t$(\"#theme\").prop(\"href\", \"themes/\" + options[i] + \".css\");\n\t\t\tsettings.find(\"select[name=\" + i + \"]\").val(options[i]);\n\t\t} else if (options[i]) {\n\t\t\tsettings.find(\"input[name=\" + i + \"]\").prop(\"checked\", true);\n\t\t}\n\t}\n\n\tconst desktopNotificationsCheckbox = $(\"#desktopNotifications\");\n\tconst warningUnsupported = $(\"#warnUnsupportedDesktopNotifications\");\n\tconst warningBlocked = $(\"#warnBlockedDesktopNotifications\").hide();\n\n\t// Updates the checkbox and warning in settings when the Settings page is\n\t// opened or when the checkbox state is changed.\n\t// When notifications are not supported, this is never called (because\n\t// checkbox state can not be changed).\n\tconst updateDesktopNotificationStatus = function() {\n\t\tif (Notification.permission === \"denied\") {\n\t\t\tdesktopNotificationsCheckbox.prop(\"disabled\", true);\n\t\t\tdesktopNotificationsCheckbox.prop(\"checked\", false);\n\t\t\twarningBlocked.show();\n\t\t} else {\n\t\t\tif (Notification.permission === \"default\" && desktopNotificationsCheckbox.prop(\"checked\")) {\n\t\t\t\tdesktopNotificationsCheckbox.prop(\"checked\", false);\n\t\t\t}\n\t\t\tdesktopNotificationsCheckbox.prop(\"disabled\", false);\n\t\t\twarningBlocked.hide();\n\t\t}\n\t};\n\n\t// If browser does not support notifications, override existing settings and\n\t// display proper message in settings.\n\tif ((\"Notification\" in window)) {\n\t\twarningUnsupported.hide();\n\t\twindows.on(\"show\", \"#settings\", updateDesktopNotificationStatus);\n\t} else {\n\t\toptions.desktopNotifications = false;\n\t\tdesktopNotificationsCheckbox.prop(\"disabled\", true);\n\t\tdesktopNotificationsCheckbox.prop(\"checked\", false);\n\t}\n\n\tsettings.on(\"change\", \"input, select, textarea\", function() {\n\t\tconst self = $(this);\n\t\tconst type = self.prop(\"type\");\n\t\tconst name = self.prop(\"name\");\n\n\t\tif (type === \"password\") {\n\t\t\treturn;\n\t\t} else if (type === \"radio\") {\n\t\t\tif (self.prop(\"checked\")) {\n\t\t\t\toptions[name] = self.val();\n\t\t\t}\n\t\t} else if (type === \"checkbox\") {\n\t\t\toptions[name] = self.prop(\"checked\");\n\t\t} else {\n\t\t\toptions[name] = self.val();\n\t\t}\n\n\t\tstorage.set(\"settings\", JSON.stringify(options));\n\n\t\tif (name === \"motd\") {\n\t\t\tchat.toggleClass(\"hide-\" + name, !self.prop(\"checked\"));\n\t\t} else if (name === \"statusMessages\") {\n\t\t\tchat.toggleClass(\"hide-status-messages\", options[name] === \"hidden\");\n\t\t\tchat.toggleClass(\"condensed-status-messages\", options[name] === \"condensed\");\n\t\t} else if (name === \"coloredNicks\") {\n\t\t\tchat.toggleClass(\"colored-nicks\", self.prop(\"checked\"));\n\t\t} else if (name === \"theme\") {\n\t\t\t$(\"#theme\").prop(\"href\", \"themes/\" + options[name] + \".css\");\n\t\t} else if (name === \"userStyles\") {\n\t\t\tuserStyles.html(options[name]);\n\t\t} else if (name === \"highlights\") {\n\t\t\tvar highlightString = options[name];\n\t\t\toptions.highlights = highlightString.split(\",\").map(function(h) {\n\t\t\t\treturn h.trim();\n\t\t\t}).filter(function(h) {\n\t\t\t\t// Ensure we don't have empty string in the list of highlights\n\t\t\t\t// otherwise, users get notifications for everything\n\t\t\t\treturn h !== \"\";\n\t\t\t});\n\t\t\t// Construct regex with wordboundary for every highlight item\n\t\t\tconst highlightsTokens = options.highlights.map(function(h) {\n\t\t\t\treturn escapeRegExp(h);\n\t\t\t});\n\t\t\tif (highlightsTokens && highlightsTokens.length) {\n\t\t\t\tmodule.exports.highlightsRE = new RegExp(\"\\\\b(?:\" + highlightsTokens.join(\"|\") + \")\\\\b\", \"i\");\n\t\t\t} else {\n\t\t\t\tmodule.exports.highlightsRE = null;\n\t\t\t}\n\t\t} else if (name === \"nickPostfix\") {\n\t\t\toptions.nickPostfix = options[name];\n\t\t} else if (name === \"showSeconds\") {\n\t\t\tchat.find(\".msg > .time\").each(function() {\n\t\t\t\t$(this).text(tz($(this).parent().data(\"time\")));\n\t\t\t});\n\t\t\tchat.toggleClass(\"show-seconds\", self.prop(\"checked\"));\n\t\t} else if (name === \"autocomplete\") {\n\t\t\tif (self.prop(\"checked\")) {\n\t\t\t\tautocompletion.enable();\n\t\t\t} else {\n\t\t\t\tautocompletion.disable();\n\t\t\t}\n\t\t} else if (name === \"desktopNotifications\") {\n\t\t\tif ($(this).prop(\"checked\") && Notification.permission !== \"granted\") {\n\t\t\t\tNotification.requestPermission(updateDesktopNotificationStatus);\n\t\t\t}\n\t\t}\n\t}).find(\"input\")\n\t\t.trigger(\"change\");\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/options.js","\"use strict\";\n\nconst $ = require(\"jquery\");\nconst templates = require(\"../views\");\nconst options = require(\"./options\");\nconst renderPreview = require(\"./renderPreview\");\nconst utils = require(\"./utils\");\nconst sorting = require(\"./sorting\");\nconst constants = require(\"./constants\");\nconst condensed = require(\"./condensed\");\nconst JoinChannel = require(\"./join-channel\");\nconst helpers_parse = require(\"./libs/handlebars/parse\");\n\nconst chat = $(\"#chat\");\nconst sidebar = $(\"#sidebar\");\n\nrequire(\"intersection-observer\");\n\nconst historyObserver = window.IntersectionObserver ?\n\tnew window.IntersectionObserver(loadMoreHistory, {\n\t\troot: chat.get(0),\n\t}) : null;\n\nmodule.exports = {\n\tappendMessage,\n\tbuildChannelMessages,\n\trenderChannel,\n\trenderChannelUsers,\n\trenderNetworks,\n\ttrimMessageInChannel,\n};\n\nfunction buildChannelMessages(container, chanId, chanType, messages) {\n\treturn messages.reduce((docFragment, message) => {\n\t\tappendMessage(docFragment, chanId, chanType, message);\n\t\treturn docFragment;\n\t}, container);\n}\n\nfunction appendMessage(container, chanId, chanType, msg) {\n\tif (utils.lastMessageId < msg.id) {\n\t\tutils.lastMessageId = msg.id;\n\t}\n\n\tlet lastChild = container.children(\".msg, .date-marker-container\").last();\n\tconst renderedMessage = buildChatMessage(msg);\n\n\t// Check if date changed\n\tconst msgTime = new Date(msg.time);\n\tconst prevMsgTime = new Date(lastChild.data(\"time\"));\n\n\t// Insert date marker if date changed compared to previous message\n\tif (prevMsgTime.toDateString() !== msgTime.toDateString()) {\n\t\tlastChild = $(templates.date_marker({time: msg.time}));\n\t\tcontainer.append(lastChild);\n\t}\n\n\t// If current window is not a channel or this message is not condensable,\n\t// then just append the message to container and be done with it\n\tif (constants.condensedTypes.indexOf(msg.type) === -1 || chanType !== \"channel\") {\n\t\tcontainer.append(renderedMessage);\n\t\treturn;\n\t}\n\n\tconst obj = {};\n\tobj[msg.type] = 1;\n\n\t// If the previous message is already condensed,\n\t// we just append to it and update text\n\tif (lastChild.hasClass(\"condensed\")) {\n\t\tlastChild.append(renderedMessage);\n\t\tcondensed.updateText(lastChild, obj);\n\t\treturn;\n\t}\n\n\t// Always create a condensed container\n\tconst newCondensed = $(templates.msg_condensed({time: msg.time}));\n\n\tcondensed.updateText(newCondensed, obj);\n\tnewCondensed.append(renderedMessage);\n\tcontainer.append(newCondensed);\n}\n\nfunction buildChatMessage(msg) {\n\tconst type = msg.type;\n\tlet template = \"msg\";\n\n\t// See if any of the custom highlight regexes match\n\tif (!msg.highlight && !msg.self\n\t\t&& options.highlightsRE\n\t\t&& (type === \"message\" || type === \"notice\")\n\t\t&& options.highlightsRE.exec(msg.text)) {\n\t\tmsg.highlight = true;\n\t}\n\n\tif (constants.actionTypes.indexOf(type) !== -1) {\n\t\tmsg.template = \"actions/\" + type;\n\t\ttemplate = \"msg_action\";\n\t} else if (type === \"unhandled\") {\n\t\ttemplate = \"msg_unhandled\";\n\t}\n\n\tconst renderedMessage = $(templates[template](msg));\n\tconst content = renderedMessage.find(\".content\");\n\n\tif (template === \"msg_action\") {\n\t\tcontent.html(templates.actions[type](msg));\n\t}\n\n\tmsg.previews.forEach((preview) => {\n\t\trenderPreview(preview, renderedMessage);\n\t});\n\n\treturn renderedMessage;\n}\n\nfunction renderChannel(data) {\n\trenderChannelMessages(data);\n\n\tif (data.type === \"channel\") {\n\t\trenderChannelUsers(data);\n\t}\n\n\tif (historyObserver) {\n\t\thistoryObserver.observe(chat.find(\"#chan-\" + data.id + \" .show-more\").get(0));\n\t}\n}\n\nfunction renderChannelMessages(data) {\n\tconst documentFragment = buildChannelMessages($(document.createDocumentFragment()), data.id, data.type, data.messages);\n\tconst channel = chat.find(\"#chan-\" + data.id + \" .messages\").append(documentFragment);\n\n\trenderUnreadMarker($(templates.unread_marker()), data.firstUnread, channel);\n}\n\nfunction renderUnreadMarker(template, firstUnread, channel) {\n\tif (firstUnread > 0) {\n\t\tlet first = channel.find(\"#msg-\" + firstUnread);\n\n\t\tif (!first.length) {\n\t\t\ttemplate.data(\"unread-id\", firstUnread);\n\t\t\tchannel.prepend(template);\n\t\t} else {\n\t\t\tconst parent = first.parent();\n\n\t\t\tif (parent.hasClass(\"condensed\")) {\n\t\t\t\tfirst = parent;\n\t\t\t}\n\n\t\t\tfirst.before(template);\n\t\t}\n\t} else {\n\t\tchannel.append(template);\n\t}\n}\n\nfunction renderChannelUsers(data) {\n\tconst users = chat.find(\"#chan-\" + data.id).find(\".users\");\n\tconst nicks = data.users\n\t\t.concat() // Make a copy of the user list, sort is applied in-place\n\t\t.sort((a, b) => b.lastMessage - a.lastMessage)\n\t\t.map((a) => a.nick);\n\n\tconst search = users\n\t\t.find(\".search\")\n\t\t.prop(\"placeholder\", nicks.length + \" \" + (nicks.length === 1 ? \"user\" : \"users\"));\n\n\tusers\n\t\t.data(\"nicks\", nicks)\n\t\t.find(\".names-original\")\n\t\t.html(templates.user(data));\n\n\t// Refresh user search\n\tif (search.val().length) {\n\t\tsearch.trigger(\"input\");\n\t}\n}\n\nfunction renderNetworks(data, singleNetwork) {\n\tsidebar.find(\".empty\").hide();\n\tsidebar.find(\".networks\").append(\n\t\ttemplates.network({\n\t\t\tnetworks: data.networks,\n\t\t})\n\t);\n\n\t// Add keyboard handlers to the \"Join a channel…\" form inputs/button\n\tJoinChannel.handleKeybinds();\n\n\tlet newChannels;\n\tconst channels = $.map(data.networks, function(n) {\n\t\treturn n.channels;\n\t});\n\n\tif (!singleNetwork && utils.lastMessageId > -1) {\n\t\tnewChannels = [];\n\n\t\tchannels.forEach((channel) => {\n\t\t\tconst chan = $(\"#chan-\" + channel.id);\n\n\t\t\tif (chan.length > 0) {\n\t\t\t\tif (chan.data(\"type\") === \"channel\") {\n\t\t\t\t\tchan\n\t\t\t\t\t\t.data(\"needsNamesRefresh\", true)\n\t\t\t\t\t\t.find(\".header .topic\")\n\t\t\t\t\t\t.html(helpers_parse(channel.topic))\n\t\t\t\t\t\t.prop(\"title\", channel.topic);\n\t\t\t\t}\n\n\t\t\t\tif (channel.messages.length > 0) {\n\t\t\t\t\tconst container = chan.find(\".messages\");\n\t\t\t\t\tbuildChannelMessages(container, channel.id, channel.type, channel.messages);\n\n\t\t\t\t\tconst unreadMarker = container.find(\".unread-marker\").data(\"unread-id\", 0);\n\t\t\t\t\trenderUnreadMarker(unreadMarker, channel.firstUnread, container);\n\n\t\t\t\t\tif (container.find(\".msg\").length >= 100) {\n\t\t\t\t\t\tcontainer.find(\".show-more\").addClass(\"show\");\n\t\t\t\t\t}\n\n\t\t\t\t\tcontainer.trigger(\"keepToBottom\");\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tnewChannels.push(channel);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tnewChannels = channels;\n\t}\n\n\tif (newChannels.length > 0) {\n\t\tchat.append(\n\t\t\ttemplates.chat({\n\t\t\t\tchannels: newChannels,\n\t\t\t})\n\t\t);\n\n\t\tnewChannels.forEach((channel) => {\n\t\t\trenderChannel(channel);\n\n\t\t\tif (channel.type === \"channel\") {\n\t\t\t\tchat.find(\"#chan-\" + channel.id).data(\"needsNamesRefresh\", true);\n\t\t\t}\n\t\t});\n\t}\n\n\tutils.confirmExit();\n\tsorting();\n\n\tif (sidebar.find(\".highlight\").length) {\n\t\tutils.toggleNotificationMarkers(true);\n\t}\n}\n\nfunction trimMessageInChannel(channel, messageLimit) {\n\tconst messages = channel.find(\".messages .msg\").slice(0, -messageLimit);\n\n\tif (messages.length === 0) {\n\t\treturn;\n\t}\n\n\tmessages.remove();\n\n\tchannel.find(\".show-more\").addClass(\"show\");\n\n\t// Remove date-separators that would otherwise be \"stuck\" at the top of the channel\n\tchannel.find(\".date-marker-container\").each(function() {\n\t\tif ($(this).next().hasClass(\"date-marker-container\")) {\n\t\t\t$(this).remove();\n\t\t}\n\t});\n}\n\nfunction loadMoreHistory(entries) {\n\tentries.forEach((entry) => {\n\t\tif (!entry.isIntersecting) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar target = $(entry.target).find(\".show-more-button\");\n\n\t\tif (target.prop(\"disabled\")) {\n\t\t\treturn;\n\t\t}\n\n\t\ttarget.trigger(\"click\");\n\t});\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/render.js","\"use strict\";\n\nmodule.exports = {\n\tset: function(key, value) {\n\t\ttry {\n\t\t\twindow.localStorage.setItem(key, value);\n\t\t} catch (e) {\n\t\t\t// Do nothing. If we end up here, web storage quota exceeded, or user is\n\t\t\t// in Safari's private browsing where localStorage's setItem is not\n\t\t\t// available. See http://stackoverflow.com/q/14555347/1935861.\n\t\t}\n\t},\n\tget: function(key) {\n\t\treturn window.localStorage.getItem(key);\n\t},\n\tremove: function(key, value) {\n\t\twindow.localStorage.removeItem(key, value);\n\t},\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/localStorage.js","\"use strict\";\n\nconst moment = require(\"moment\");\nconst constants = require(\"../../constants\");\n\nmodule.exports = function(time) {\n\tconst options = require(\"../../options\");\n\tconst format = options.showSeconds ? constants.timeFormats.msgWithSeconds : constants.timeFormats.msgDefault;\n\treturn moment(time).format(format);\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/libs/handlebars/tz.js","\"use strict\";\n\nconst escape = require(\"css.escape\");\n\nmodule.exports = function(orig) {\n\treturn escape(orig.toLowerCase());\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/libs/handlebars/slugify.js","\"use strict\";\n\nconst colorCodeMap = [\n\t[\"00\", \"White\"],\n\t[\"01\", \"Black\"],\n\t[\"02\", \"Blue\"],\n\t[\"03\", \"Green\"],\n\t[\"04\", \"Red\"],\n\t[\"05\", \"Brown\"],\n\t[\"06\", \"Magenta\"],\n\t[\"07\", \"Orange\"],\n\t[\"08\", \"Yellow\"],\n\t[\"09\", \"Light Green\"],\n\t[\"10\", \"Cyan\"],\n\t[\"11\", \"Light Cyan\"],\n\t[\"12\", \"Light Blue\"],\n\t[\"13\", \"Pink\"],\n\t[\"14\", \"Grey\"],\n\t[\"15\", \"Light Grey\"],\n];\n\nconst commands = [\n\t\"/as\",\n\t\"/away\",\n\t\"/back\",\n\t\"/ban\",\n\t\"/banlist\",\n\t\"/bs\",\n\t\"/close\",\n\t\"/collapse\",\n\t\"/connect\",\n\t\"/cs\",\n\t\"/ctcp\",\n\t\"/cycle\",\n\t\"/deop\",\n\t\"/devoice\",\n\t\"/disconnect\",\n\t\"/expand\",\n\t\"/ho\",\n\t\"/hs\",\n\t\"/invite\",\n\t\"/join\",\n\t\"/kick\",\n\t\"/leave\",\n\t\"/list\",\n\t\"/me\",\n\t\"/mode\",\n\t\"/ms\",\n\t\"/msg\",\n\t\"/nick\",\n\t\"/notice\",\n\t\"/ns\",\n\t\"/op\",\n\t\"/os\",\n\t\"/part\",\n\t\"/query\",\n\t\"/quit\",\n\t\"/raw\",\n\t\"/rejoin\",\n\t\"/rs\",\n\t\"/say\",\n\t\"/send\",\n\t\"/server\",\n\t\"/slap\",\n\t\"/topic\",\n\t\"/unban\",\n\t\"/voice\",\n\t\"/whois\",\n];\n\nconst actionTypes = [\n\t\"away\",\n\t\"back\",\n\t\"ban_list\",\n\t\"invite\",\n\t\"join\",\n\t\"mode\",\n\t\"kick\",\n\t\"nick\",\n\t\"part\",\n\t\"quit\",\n\t\"topic\",\n\t\"topic_set_by\",\n\t\"action\",\n\t\"whois\",\n\t\"ctcp\",\n\t\"chghost\",\n\t\"channel_list\",\n];\n\nconst condensedTypes = [\n\t\"away\",\n\t\"back\",\n\t\"chghost\",\n\t\"join\",\n\t\"part\",\n\t\"quit\",\n\t\"nick\",\n\t\"kick\",\n\t\"mode\",\n];\n\nconst timeFormats = {\n\tmsgDefault: \"HH:mm\",\n\tmsgWithSeconds: \"HH:mm:ss\",\n};\n\nmodule.exports = {\n\tcolorCodeMap: colorCodeMap,\n\tcommands: commands,\n\tcondensedTypes: condensedTypes,\n\tcondensedTypesQuery: \".\" + condensedTypes.join(\", .\"),\n\tactionTypes: actionTypes,\n\ttimeFormats: timeFormats,\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/constants.js","\"use strict\";\n\nconst $ = require(\"jquery\");\nconst storage = require(\"./localStorage\");\nconst socket = require(\"./socket\");\n\nlet pushNotificationsButton;\nlet clientSubscribed = null;\nlet applicationServerKey;\n\nif (\"serviceWorker\" in navigator) {\n\tnavigator.serviceWorker.addEventListener(\"message\", (event) => {\n\t\tif (event.data && event.data.type === \"open\") {\n\t\t\t$(\"#sidebar\").find(`.chan[data-target=\"#${event.data.channel}\"]`).trigger(\"click\");\n\t\t}\n\t});\n}\n\nmodule.exports.hasServiceWorker = false;\n\nmodule.exports.configurePushNotifications = (subscribedOnServer, key) => {\n\tapplicationServerKey = key;\n\n\t// If client has push registration but the server knows nothing about it,\n\t// this subscription is broken and client has to register again\n\tif (clientSubscribed === true && subscribedOnServer === false) {\n\t\tpushNotificationsButton.prop(\"disabled\", true);\n\n\t\tnavigator.serviceWorker.ready\n\t\t\t.then((registration) => registration.pushManager.getSubscription())\n\t\t\t.then((subscription) => subscription && subscription.unsubscribe())\n\t\t\t.then((successful) => {\n\t\t\t\tif (successful) {\n\t\t\t\t\talternatePushButton().prop(\"disabled\", false);\n\t\t\t\t}\n\t\t\t});\n\t}\n};\n\nmodule.exports.initialize = () => {\n\tpushNotificationsButton = $(\"#pushNotifications\");\n\n\tif (!isAllowedServiceWorkersHost()) {\n\t\treturn;\n\t}\n\n\t$(\"#pushNotificationsHttps\").hide();\n\n\tif (\"serviceWorker\" in navigator) {\n\t\tnavigator.serviceWorker.register(\"service-worker.js\").then((registration) => {\n\t\t\tmodule.exports.hasServiceWorker = true;\n\n\t\t\tif (!registration.pushManager) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\treturn registration.pushManager.getSubscription().then((subscription) => {\n\t\t\t\t$(\"#pushNotificationsUnsupported\").hide();\n\n\t\t\t\tpushNotificationsButton\n\t\t\t\t\t.prop(\"disabled\", false)\n\t\t\t\t\t.on(\"click\", onPushButton);\n\n\t\t\t\tclientSubscribed = !!subscription;\n\n\t\t\t\tif (clientSubscribed) {\n\t\t\t\t\talternatePushButton();\n\t\t\t\t}\n\t\t\t});\n\t\t}).catch((err) => {\n\t\t\t$(\"#pushNotificationsUnsupported span\").text(err);\n\t\t});\n\t}\n};\n\nfunction onPushButton() {\n\tpushNotificationsButton.prop(\"disabled\", true);\n\n\tnavigator.serviceWorker.ready.then((registration) =>\n\t\tregistration.pushManager.getSubscription().then((existingSubscription) => {\n\t\t\tif (existingSubscription) {\n\t\t\t\tsocket.emit(\"push:unregister\");\n\n\t\t\t\treturn existingSubscription.unsubscribe();\n\t\t\t}\n\n\t\t\treturn registration.pushManager.subscribe({\n\t\t\t\tapplicationServerKey: urlBase64ToUint8Array(applicationServerKey),\n\t\t\t\tuserVisibleOnly: true,\n\t\t\t}).then((subscription) => {\n\t\t\t\tconst rawKey = subscription.getKey ? subscription.getKey(\"p256dh\") : \"\";\n\t\t\t\tconst key = rawKey ? window.btoa(String.fromCharCode.apply(null, new Uint8Array(rawKey))) : \"\";\n\t\t\t\tconst rawAuthSecret = subscription.getKey ? subscription.getKey(\"auth\") : \"\";\n\t\t\t\tconst authSecret = rawAuthSecret ? window.btoa(String.fromCharCode.apply(null, new Uint8Array(rawAuthSecret))) : \"\";\n\n\t\t\t\tsocket.emit(\"push:register\", {\n\t\t\t\t\ttoken: storage.get(\"token\"),\n\t\t\t\t\tendpoint: subscription.endpoint,\n\t\t\t\t\tkeys: {\n\t\t\t\t\t\tp256dh: key,\n\t\t\t\t\t\tauth: authSecret,\n\t\t\t\t\t},\n\t\t\t\t});\n\n\t\t\t\treturn true;\n\t\t\t});\n\t\t}).then((successful) => {\n\t\t\tif (successful) {\n\t\t\t\talternatePushButton().prop(\"disabled\", false);\n\t\t\t}\n\t\t})\n\t).catch((err) => {\n\t\t$(\"#pushNotificationsUnsupported\")\n\t\t\t.find(\"span\").text(`An error has occured: ${err}`).end()\n\t\t\t.show();\n\t});\n\n\treturn false;\n}\n\nfunction alternatePushButton() {\n\tconst text = pushNotificationsButton.text();\n\n\treturn pushNotificationsButton\n\t\t.text(pushNotificationsButton.data(\"text-alternate\"))\n\t\t.data(\"text-alternate\", text);\n}\n\nfunction urlBase64ToUint8Array(base64String) {\n\tconst padding = \"=\".repeat((4 - base64String.length % 4) % 4);\n\tconst base64 = (base64String + padding)\n\t\t.replace(/-/g, \"+\")\n\t\t.replace(/_/g, \"/\");\n\n\tconst rawData = window.atob(base64);\n\tconst outputArray = new Uint8Array(rawData.length);\n\n\tfor (let i = 0; i < rawData.length; ++i) {\n\t\toutputArray[i] = rawData.charCodeAt(i);\n\t}\n\n\treturn outputArray;\n}\n\nfunction isAllowedServiceWorkersHost() {\n\treturn location.protocol === \"https:\" || location.hostname === \"localhost\" || location.hostname === \"127.0.0.1\";\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/webpush.js","\"use strict\";\n\n// Generates a string from \"color-1\" to \"color-32\" based on an input string\nmodule.exports = function(str) {\n\tvar hash = 0;\n\tfor (var i = 0; i < str.length; i++) {\n\t\thash += str.charCodeAt(i);\n\t}\n\n\treturn \"color-\" + (1 + hash % 32);\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/libs/handlebars/colorClass.js","\"use strict\";\n\n// Return true if any section of \"a\" or \"b\" parts (defined by their start/end\n// markers) intersect each other, false otherwise.\nfunction anyIntersection(a, b) {\n\treturn a.start <= b.start && b.start < a.end ||\n\t\ta.start < b.end && b.end <= a.end ||\n\t\tb.start <= a.start && a.start < b.end ||\n\t\tb.start < a.end && a.end <= b.end;\n}\n\nmodule.exports = anyIntersection;\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/libs/handlebars/ircmessageparser/anyIntersection.js","\"use strict\";\n\nmodule.exports = function(a, b, opt) {\n\tif (arguments.length !== 3) {\n\t\tthrow new Error(\"Handlebars helper `notEqual` expects 3 arguments\");\n\t}\n\n\ta = a.toString();\n\tb = b.toString();\n\n\tif (a !== b) {\n\t\treturn opt.fn(this);\n\t}\n\n\tif (opt.inverse(this) !== \"\") {\n\t\tthrow new Error(\"Handlebars helper `notEqual` does not take an `else` block\");\n\t}\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/libs/handlebars/notEqual.js","var Handlebars = require(\"/home/travis/build/thelounge/lounge/node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, alias3=depth0 != null ? depth0 : (container.nullContext || {});\n\n return \"<div data-id=\\\"\"\n + alias2(alias1((depth0 != null ? depth0.id : depth0), depth0))\n + \"\\\" data-target=\\\"#chan-\"\n + alias2(alias1((depth0 != null ? depth0.id : depth0), depth0))\n + \"\\\" data-title=\\\"\"\n + alias2(alias1((depth0 != null ? depth0.name : depth0), depth0))\n + \"\\\" class=\\\"chan \"\n + alias2(alias1((depth0 != null ? depth0.type : depth0), depth0))\n + \" chan-\"\n + alias2(__default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/slugify.js\")).call(alias3,(depth0 != null ? depth0.name : depth0),{\"name\":\"slugify\",\"hash\":{},\"data\":data}))\n + \"\\\">\\n\"\n + ((stack1 = __default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/equal.js\")).call(alias3,(depth0 != null ? depth0.type : depth0),\"lobby\",{\"name\":\"equal\",\"hash\":{},\"fn\":container.program(2, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t<span class=\\\"badge\"\n + ((stack1 = helpers[\"if\"].call(alias3,(depth0 != null ? depth0.highlight : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\\">\"\n + ((stack1 = helpers[\"if\"].call(alias3,(depth0 != null ? depth0.unread : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(6, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"</span>\\n\"\n + ((stack1 = __default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/notEqual.js\")).call(alias3,(depth0 != null ? depth0.type : depth0),\"lobby\",{\"name\":\"notEqual\",\"hash\":{},\"fn\":container.program(8, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t<span class=\\\"name\\\" title=\\\"\"\n + alias2(alias1((depth0 != null ? depth0.name : depth0), depth0))\n + \"\\\">\"\n + alias2(alias1((depth0 != null ? depth0.name : depth0), depth0))\n + \"</span>\\n</div>\\n\"\n + ((stack1 = __default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/equal.js\")).call(alias3,(depth0 != null ? depth0.type : depth0),\"lobby\",{\"name\":\"equal\",\"hash\":{},\"fn\":container.program(10, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"2\":function(container,depth0,helpers,partials,data) {\n return \"\t\t<span class=\\\"add-channel-tooltip tooltipped tooltipped-w tooltipped-no-touch\\\" aria-label=\\\"Join a channel…\\\" data-alt-label=\\\"Cancel\\\">\\n\t\t\t<button class=\\\"add-channel\\\" aria-label=\\\"Join a channel…\\\" data-id=\\\"\"\n + container.escapeExpression(container.lambda((depth0 != null ? depth0.id : depth0), depth0))\n + \"\\\"></button>\\n\t\t</span>\\n\";\n},\"4\":function(container,depth0,helpers,partials,data) {\n return \" highlight\";\n},\"6\":function(container,depth0,helpers,partials,data) {\n return container.escapeExpression(__default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/roundBadgeNumber.js\")).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.unread : depth0),{\"name\":\"roundBadgeNumber\",\"hash\":{},\"data\":data}));\n},\"8\":function(container,depth0,helpers,partials,data) {\n return \"\t\t<span class=\\\"close-tooltip tooltipped tooltipped-w\\\" aria-label=\\\"Close\\\">\\n\t\t\t<button class=\\\"close\\\" aria-label=\\\"Close\\\"></button>\\n\t\t</span>\\n\";\n},\"10\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = container.invokePartial(require(\"/home/travis/build/thelounge/lounge/client/views/join_channel.tpl\"),depth0,{\"name\":\"join_channel\",\"data\":data,\"indent\":\"\\t\",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.channels : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"usePartial\":true,\"useData\":true});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./client/views/chan.tpl\n// module id = 168\n// module chunks = 0","\"use strict\";\n\nmodule.exports = function(count) {\n\tif (count < 1000) {\n\t\treturn count.toString();\n\t}\n\n\treturn (count / 1000).toFixed(2).slice(0, -1) + \"k\";\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/libs/handlebars/roundBadgeNumber.js","var Handlebars = require(\"/home/travis/build/thelounge/lounge/node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"<form id=\\\"join-channel-\"\n + alias4(((helper = (helper = helpers.id || (depth0 != null ? depth0.id : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"id\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" class=\\\"join-form\\\" method=\\\"post\\\" action=\\\"\\\" autocomplete=\\\"off\\\">\\n\t<input type=\\\"text\\\" class=\\\"input\\\" name=\\\"channel\\\" placeholder=\\\"Channel\\\" pattern=\\\"[^\\\\s]+\\\" maxlength=\\\"200\\\" title=\\\"The channel name may not contain spaces\\\" required>\\n\t<input type=\\\"password\\\" class=\\\"input\\\" name=\\\"key\\\" placeholder=\\\"Password (optional)\\\" pattern=\\\"[^\\\\s]+\\\" maxlength=\\\"200\\\" title=\\\"The channel password may not contain spaces\\\" autocomplete=\\\"new-password\\\">\\n\t<button type=\\\"submit\\\" class=\\\"btn btn-small\\\" data-id=\\\"\"\n + alias4(((helper = (helper = helpers.id || (depth0 != null ? depth0.id : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"id\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">Join</button>\\n</form>\\n\";\n},\"useData\":true});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./client/views/join_channel.tpl\n// module id = 170\n// module chunks = 0","\"use strict\";\n\nvar diff;\n\nmodule.exports = function(a, opt) {\n\tif (a !== diff) {\n\t\tdiff = a;\n\t\treturn opt.fn(this);\n\t}\n\n\treturn opt.inverse(this);\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/libs/handlebars/diff.js","\"use strict\";\n\nconst $ = require(\"jquery\");\nconst options = require(\"./options\");\nconst socket = require(\"./socket\");\nconst templates = require(\"../views\");\nconst chat = $(\"#chat\");\nconst input = $(\"#input\");\nconst Mousetrap = require(\"mousetrap\");\n\nmodule.exports = renderPreview;\n\nfunction renderPreview(preview, msg) {\n\tif (preview.type === \"loading\") {\n\t\treturn;\n\t}\n\n\tpreview.shown = preview.shown && options.shouldOpenMessagePreview(preview.type);\n\n\tconst template = $(templates.msg_preview({preview: preview}));\n\tconst image = template.find(\"img:first\");\n\n\tif (image.length === 0) {\n\t\treturn appendPreview(preview, msg, template);\n\t}\n\n\t// If there is an image in preview, wait for it to load before appending it to DOM\n\t// This is done to prevent problems keeping scroll to the bottom while images load\n\timage.on(\"load.preview\", () => {\n\t\timage.off(\".preview\");\n\n\t\tappendPreview(preview, msg, template);\n\t});\n\n\t// If the image fails to load, remove it from DOM and still render the preview\n\tif (preview.type === \"link\") {\n\t\timage.on(\"abort.preview error.preview\", () => {\n\t\t\timage.parent().remove();\n\n\t\t\tappendPreview(preview, msg, template);\n\t\t});\n\t}\n}\n\nfunction appendPreview(preview, msg, template) {\n\tconst escapedLink = preview.link.replace(/[\"\\\\]/g, \"\\\\$&\");\n\tconst previewContainer = msg.find(`.preview[data-url=\"${escapedLink}\"]`);\n\n\t// This is to fix a very rare case of rendering a preview twice\n\t// This happens when a very large amount of messages is being sent to the client\n\t// and they get queued, so the `preview` object on the server has time to load before\n\t// it actually gets sent to the server, which makes the loaded preview sent twice,\n\t// once in `msg` and another in `msg:preview`\n\tif (!previewContainer.is(\":empty\")) {\n\t\treturn;\n\t}\n\n\tconst container = msg.closest(\".messages\");\n\tconst channelId = container.closest(\".chan\").data(\"id\") || -1;\n\tconst activeChannelId = chat.find(\".chan.active\").data(\"id\") || -2;\n\n\tmsg.find(`.text a[href=\"${escapedLink}\"]`)\n\t\t.first()\n\t\t.after(templates.msg_preview_toggle({preview: preview}).trim());\n\n\tpreviewContainer.append(template);\n\n\tif (activeChannelId === channelId) {\n\t\tcontainer.trigger(\"keepToBottom\");\n\t}\n}\n\n$(\"#chat\").on(\"click\", \".text .toggle-button\", function() {\n\tconst self = $(this);\n\tconst container = self.closest(\".chat\");\n\tconst content = self.closest(\".content\")\n\t\t.find(`.preview[data-url=\"${self.data(\"url\")}\"] .toggle-content`);\n\tconst bottom = container.isScrollBottom();\n\n\tself.toggleClass(\"opened\");\n\tcontent.toggleClass(\"show\");\n\n\t// Tell the server we're toggling so it remembers at page reload\n\t// TODO Avoid sending many single events when using `/collapse` or `/expand`\n\t// See https://github.com/thelounge/lounge/issues/1377\n\tsocket.emit(\"msg:preview:toggle\", {\n\t\ttarget: parseInt(self.closest(\".chan\").data(\"id\"), 10),\n\t\tmsgId: parseInt(self.closest(\".msg\").prop(\"id\").replace(\"msg-\", \"\"), 10),\n\t\tlink: self.data(\"url\"),\n\t\tshown: content.hasClass(\"show\"),\n\t});\n\n\t// If scrollbar was at the bottom before toggling the preview, keep it at the bottom\n\tif (bottom) {\n\t\tcontainer.scrollBottom();\n\t}\n});\n\n/* Image viewer */\n\nconst imageViewer = $(\"#image-viewer\");\n\n$(\"#windows\").on(\"click\", \".toggle-thumbnail\", function(event, data = {}) {\n\tconst link = $(this);\n\n\t// Passing `data`, specifically `data.pushState`, to not add the action to the\n\t// history state if back or forward buttons were pressed.\n\topenImageViewer(link, data);\n\n\t// Prevent the link to open a new page since we're opening the image viewer,\n\t// but keep it a link to allow for Ctrl/Cmd+click.\n\t// By binding this event on #chat we prevent input gaining focus after clicking.\n\treturn false;\n});\n\nimageViewer.on(\"click\", function(event, data = {}) {\n\t// Passing `data`, specifically `data.pushState`, to not add the action to the\n\t// history state if back or forward buttons were pressed.\n\tcloseImageViewer(data);\n});\n\nMousetrap.bind(\"esc\", () => closeImageViewer());\n\nMousetrap.bind([\"left\", \"right\"], (e, key) => {\n\tif (imageViewer.hasClass(\"opened\")) {\n\t\tconst direction = key === \"left\" ? \"previous\" : \"next\";\n\t\timageViewer.find(`.${direction}-image-btn`).trigger(\"click\");\n\t}\n});\n\nfunction openImageViewer(link, {pushState = true} = {}) {\n\t$(\".previous-image\").removeClass(\"previous-image\");\n\t$(\".next-image\").removeClass(\"next-image\");\n\n\t// The next two blocks figure out what are the previous/next images. We first\n\t// look within the same message, as there can be multiple thumbnails per\n\t// message, and if not, we look at previous/next messages and take the\n\t// last/first thumbnail available.\n\t// Only expanded thumbnails are being cycled through.\n\n\t// Previous image\n\tlet previousImage = link.closest(\".preview\").prev(\".preview\")\n\t\t.find(\".toggle-content.show .toggle-thumbnail\").last();\n\tif (!previousImage.length) {\n\t\tpreviousImage = link.closest(\".msg\").prevAll()\n\t\t\t.find(\".toggle-content.show .toggle-thumbnail\").last();\n\t}\n\tpreviousImage.addClass(\"previous-image\");\n\n\t// Next image\n\tlet nextImage = link.closest(\".preview\").next(\".preview\")\n\t\t.find(\".toggle-content.show .toggle-thumbnail\").first();\n\tif (!nextImage.length) {\n\t\tnextImage = link.closest(\".msg\").nextAll()\n\t\t\t.find(\".toggle-content.show .toggle-thumbnail\").first();\n\t}\n\tnextImage.addClass(\"next-image\");\n\n\timageViewer.html(templates.image_viewer({\n\t\timage: link.find(\"img\").prop(\"src\"),\n\t\tlink: link.prop(\"href\"),\n\t\ttype: link.parent().hasClass(\"toggle-type-link\") ? \"link\" : \"image\",\n\t\thasPreviousImage: previousImage.length > 0,\n\t\thasNextImage: nextImage.length > 0,\n\t}));\n\n\t// Turn off transitionend listener before opening the viewer,\n\t// which caused image viewer to become empty in rare cases\n\timageViewer\n\t\t.off(\"transitionend\")\n\t\t.addClass(\"opened\");\n\n\t// History management\n\tif (pushState) {\n\t\tlet clickTarget = \"\";\n\t\t// Images can be in a message (channel URL previews) or not (window URL\n\t\t// preview, e.g. changelog). This is sub-optimal and needs improvement to\n\t\t// make image preview more generic and not specific for channel previews.\n\t\tif (link.closest(\".msg\").length > 0) {\n\t\t\tclickTarget = `#${link.closest(\".msg\").prop(\"id\")} `;\n\t\t}\n\t\tclickTarget += `a.toggle-thumbnail[href=\"${link.prop(\"href\")}\"] img`;\n\t\thistory.pushState({clickTarget}, null, null);\n\t}\n}\n\nimageViewer.on(\"click\", \".previous-image-btn\", function() {\n\t$(\".previous-image\").trigger(\"click\");\n\treturn false;\n});\n\nimageViewer.on(\"click\", \".next-image-btn\", function() {\n\t$(\".next-image\").trigger(\"click\");\n\treturn false;\n});\n\nfunction closeImageViewer({pushState = true} = {}) {\n\timageViewer\n\t\t.removeClass(\"opened\")\n\t\t.one(\"transitionend\", function() {\n\t\t\timageViewer.empty();\n\t\t});\n\n\tinput.trigger(\"focus\");\n\n\t// History management\n\tif (pushState) {\n\t\tconst clickTarget =\n\t\t\t\"#sidebar \" +\n\t\t\t`.chan[data-id=\"${$(\"#sidebar .chan.active\").data(\"id\")}\"]`;\n\t\thistory.pushState({clickTarget}, null, null);\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/renderPreview.js","\"use strict\";\n\nconst _ = require(\"lodash\");\nconst constants = require(\"./constants\");\nconst templates = require(\"../views\");\n\nmodule.exports = {\n\tupdateText,\n\tgetStoredTypes,\n};\n\nfunction getStoredTypes(condensed) {\n\tconst obj = {};\n\n\tconstants.condensedTypes.forEach((type) => {\n\t\tobj[type] = condensed.data(type) || 0;\n\t});\n\n\treturn obj;\n}\n\nfunction updateText(condensed, addedTypes) {\n\tconst obj = getStoredTypes(condensed);\n\n\t_.forOwn(addedTypes, (count, type) => {\n\t\tobj[type] += count;\n\t\tcondensed.data(type, obj[type]);\n\t});\n\n\tconst strings = [];\n\tconstants.condensedTypes.forEach((type) => {\n\t\tif (obj[type]) {\n\t\t\tswitch (type) {\n\t\t\tcase \"away\":\n\t\t\t\tstrings.push(obj[type] + (obj[type] > 1 ? \" users have gone away\" : \" user has gone away\"));\n\t\t\t\tbreak;\n\t\t\tcase \"back\":\n\t\t\t\tstrings.push(obj[type] + (obj[type] > 1 ? \" users have come back\" : \" user has come back\"));\n\t\t\t\tbreak;\n\t\t\tcase \"chghost\":\n\t\t\t\tstrings.push(obj[type] + (obj[type] > 1 ? \" users have changed hostname\" : \" user has changed hostname\"));\n\t\t\t\tbreak;\n\t\t\tcase \"join\":\n\t\t\t\tstrings.push(obj[type] + (obj[type] > 1 ? \" users have joined the channel\" : \" user has joined the channel\"));\n\t\t\t\tbreak;\n\t\t\tcase \"part\":\n\t\t\t\tstrings.push(obj[type] + (obj[type] > 1 ? \" users have left the channel\" : \" user has left the channel\"));\n\t\t\t\tbreak;\n\t\t\tcase \"quit\":\n\t\t\t\tstrings.push(obj[type] + (obj[type] > 1 ? \" users have quit\" : \" user has quit\"));\n\t\t\t\tbreak;\n\t\t\tcase \"nick\":\n\t\t\t\tstrings.push(obj[type] + (obj[type] > 1 ? \" users have changed nick\" : \" user has changed nick\"));\n\t\t\t\tbreak;\n\t\t\tcase \"kick\":\n\t\t\t\tstrings.push(obj[type] + (obj[type] > 1 ? \" users were kicked\" : \" user was kicked\"));\n\t\t\t\tbreak;\n\t\t\tcase \"mode\":\n\t\t\t\tstrings.push(obj[type] + (obj[type] > 1 ? \" modes were set\" : \" mode was set\"));\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t});\n\n\tlet text = strings.pop();\n\tif (strings.length) {\n\t\ttext = strings.join(\", \") + \", and \" + text;\n\t}\n\n\tcondensed.find(\".condensed-summary .content\")\n\t\t.html(text + templates.msg_condensed_toggle());\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/condensed.js","\"use strict\";\n\nconst $ = require(\"jquery\");\nconst Mousetrap = require(\"mousetrap\");\n\nconst socket = require(\"./socket\");\nconst utils = require(\"./utils\");\n\nconst sidebar = $(\"#sidebar\");\n\nmodule.exports = {\n\thandleKeybinds,\n\topenForm,\n};\n\nfunction toggleButton(network) {\n\t// Transform the + button to a ×\n\tnetwork.find(\"button.add-channel\").toggleClass(\"opened\");\n\n\t// Toggle content of tooltip\n\tconst tooltip = network.find(\".add-channel-tooltip\");\n\tconst altLabel = tooltip.data(\"alt-label\");\n\ttooltip.data(\"alt-label\", tooltip.prop(\"aria-label\"));\n\ttooltip.prop(\"aria-label\", altLabel);\n}\n\nfunction closeForm(network) {\n\tconst form = network.find(\".join-form\");\n\n\tif (form.is(\":visible\")) {\n\t\tform.find(\"input[name='channel']\").val(\"\");\n\t\tform.find(\"input[name='key']\").val(\"\");\n\t\tform.hide();\n\t\ttoggleButton(network);\n\t}\n}\n\nfunction openForm(network) {\n\tconst form = network.find(\".join-form\");\n\n\tif (form.is(\":hidden\")) {\n\t\tform.show();\n\t\ttoggleButton(network);\n\t}\n\n\t// Focus the \"Channel\" field even if the form was already open\n\tform.find(\".input[name='channel']\").trigger(\"focus\");\n}\n\nsidebar.on(\"click\", \".add-channel\", function(e) {\n\tconst id = $(e.target).data(\"id\");\n\tconst joinForm = $(`#join-channel-${id}`);\n\tconst network = joinForm.closest(\".network\");\n\n\tif (joinForm.is(\":visible\")) {\n\t\tcloseForm(network);\n\t} else {\n\t\topenForm(network);\n\t}\n\n\treturn false;\n});\n\nsidebar.on(\"submit\", \".join-form\", function() {\n\tconst form = $(this);\n\tconst channel = form.find(\"input[name='channel']\");\n\tconst channelString = channel.val();\n\tconst key = form.find(\"input[name='key']\");\n\tconst keyString = key.val();\n\tconst chan = utils.findCurrentNetworkChan(channelString);\n\tif (chan.length) {\n\t\tchan.trigger(\"click\");\n\t} else {\n\t\tsocket.emit(\"input\", {\n\t\t\ttext: `/join ${channelString} ${keyString}`,\n\t\t\ttarget: form.prev().data(\"id\"),\n\t\t});\n\t}\n\tcloseForm(form.closest(\".network\"));\n\treturn false;\n});\n\nfunction handleKeybinds() {\n\tsidebar.find(\".join-form input, .join-form button\").each(function() {\n\t\tconst network = $(this).closest(\".network\");\n\t\tMousetrap(this).bind(\"esc\", () => closeForm(network));\n\t});\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/join-channel.js","\"use strict\";\n\nconst $ = require(\"jquery\");\nconst socket = require(\"../socket\");\nconst templates = require(\"../../views\");\n\nmodule.exports = {\n\trequestIfNeeded,\n};\n\n// Requests version information if it hasn't been retrieved before (or if it has\n// been removed from the page, i.e. when clicking on \"Check now\". Displays a\n// loading state until received.\nfunction requestIfNeeded() {\n\tif ($(\"#version-checker\").is(\":empty\")) {\n\t\trenderVersionChecker({status: \"loading\"});\n\t\tsocket.emit(\"changelog\");\n\t}\n}\n\nsocket.on(\"changelog\", function(data) {\n\t// 1. Release notes window for the current version\n\t$(\"#changelog\").html(templates.windows.changelog(data.current));\n\n\tconst links = $(\"#changelog .changelog-text a\");\n\t// Make sure all links will open a new tab instead of exiting the application\n\tlinks.prop(\"target\", \"_blank\");\n\t// Add required metadata to image links, to support built-in image viewer\n\tlinks.has(\"img\").addClass(\"toggle-thumbnail\");\n\n\t// 2. Version checker visible in Help window\n\tlet status;\n\n\tif (data.latest) {\n\t\tstatus = \"new-version\";\n\t} else if (data.current.changelog) {\n\t\tstatus = \"up-to-date\";\n\t} else {\n\t\tstatus = \"error\";\n\t}\n\n\trenderVersionChecker({\n\t\tlatest: data.latest,\n\t\tstatus,\n\t});\n\n\t// When there is a button to refresh the checker available, display it when\n\t// data is expired. Before that, server would return same information anyway.\n\tif (data.expiresAt) {\n\t\tsetTimeout(\n\t\t\t() => $(\"#version-checker #check-now\").show(),\n\t\t\tdata.expiresAt - Date.now()\n\t\t);\n\t}\n});\n\n// When clicking the \"Check now\" button, remove current checker information and\n// request a new one. Loading will be displayed in the meantime.\n$(\"#help\").on(\"click\", \"#check-now\", () => {\n\t$(\"#version-checker\").empty();\n\trequestIfNeeded();\n});\n\n// Given a status and latest release information, update the version checker\n// (CSS class and content)\nfunction renderVersionChecker({status, latest}) {\n\t$(\"#version-checker\").prop(\"class\", status)\n\t\t.html(templates.version_checker({latest, status}));\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/socket-events/changelog.js","\"use strict\";\n\n// vendor libraries\nrequire(\"jquery-ui/ui/widgets/sortable\");\nconst $ = require(\"jquery\");\nconst moment = require(\"moment\");\nconst URI = require(\"urijs\");\nconst fuzzy = require(\"fuzzy\");\n\n// our libraries\nrequire(\"./libs/jquery/inputhistory\");\nrequire(\"./libs/jquery/stickyscroll\");\nconst slideoutMenu = require(\"./libs/slideout\");\nconst templates = require(\"../views\");\nconst socket = require(\"./socket\");\nconst render = require(\"./render\");\nrequire(\"./socket-events\");\nconst storage = require(\"./localStorage\");\nconst utils = require(\"./utils\");\nrequire(\"./webpush\");\nrequire(\"./keybinds\");\nrequire(\"./clipboard\");\nconst Changelog = require(\"./socket-events/changelog\");\nconst JoinChannel = require(\"./join-channel\");\n\n$(function() {\n\tvar sidebar = $(\"#sidebar, #footer\");\n\tvar chat = $(\"#chat\");\n\n\t$(document.body).data(\"app-name\", document.title);\n\n\tvar viewport = $(\"#viewport\");\n\tvar sidebarSlide = slideoutMenu(viewport[0], sidebar[0]);\n\tvar contextMenuContainer = $(\"#context-menu-container\");\n\tvar contextMenu = $(\"#context-menu\");\n\n\t$(\"#main\").on(\"click\", function(e) {\n\t\tif ($(e.target).is(\".lt\")) {\n\t\t\tsidebarSlide.toggle(!sidebarSlide.isOpen());\n\t\t} else if (sidebarSlide.isOpen()) {\n\t\t\tsidebarSlide.toggle(false);\n\t\t}\n\t});\n\n\tviewport.on(\"click\", \".rt\", function(e) {\n\t\tvar self = $(this);\n\t\tviewport.toggleClass(self.prop(\"class\"));\n\t\te.stopPropagation();\n\t\tchat.find(\".chan.active .chat\").trigger(\"msg.sticky\");\n\t});\n\n\tfunction positionContextMenu(that, e) {\n\t\tvar offset;\n\t\tvar menuWidth = contextMenu.outerWidth();\n\t\tvar menuHeight = contextMenu.outerHeight();\n\n\t\tif (that.hasClass(\"menu\")) {\n\t\t\toffset = that.offset();\n\t\t\toffset.left -= menuWidth - that.outerWidth();\n\t\t\toffset.top += that.outerHeight();\n\t\t\treturn offset;\n\t\t}\n\n\t\toffset = {left: e.pageX, top: e.pageY};\n\n\t\tif ((window.innerWidth - offset.left) < menuWidth) {\n\t\t\toffset.left = window.innerWidth - menuWidth;\n\t\t}\n\n\t\tif ((window.innerHeight - offset.top) < menuHeight) {\n\t\t\toffset.top = window.innerHeight - menuHeight;\n\t\t}\n\n\t\treturn offset;\n\t}\n\n\tfunction showContextMenu(that, e) {\n\t\tvar target = $(e.currentTarget);\n\t\tvar output = \"\";\n\n\t\tif (target.hasClass(\"user\")) {\n\t\t\toutput = templates.contextmenu_item({\n\t\t\t\tclass: \"user\",\n\t\t\t\taction: \"whois\",\n\t\t\t\ttext: target.text(),\n\t\t\t\tdata: target.data(\"name\"),\n\t\t\t});\n\t\t\toutput += templates.contextmenu_divider();\n\t\t\toutput += templates.contextmenu_item({\n\t\t\t\tclass: \"action-whois\",\n\t\t\t\taction: \"whois\",\n\t\t\t\ttext: \"User information\",\n\t\t\t\tdata: target.data(\"name\"),\n\t\t\t});\n\t\t\toutput += templates.contextmenu_item({\n\t\t\t\tclass: \"action-query\",\n\t\t\t\taction: \"query\",\n\t\t\t\ttext: \"Direct messages\",\n\t\t\t\tdata: target.data(\"name\"),\n\t\t\t});\n\n\t\t\tconst channel = target.closest(\".chan\");\n\t\t\tif (utils.isOpInChannel(channel) && channel.data(\"type\") === \"channel\") {\n\t\t\t\toutput += templates.contextmenu_divider();\n\t\t\t\toutput += templates.contextmenu_item({\n\t\t\t\t\tclass: \"action-kick\",\n\t\t\t\t\taction: \"kick\",\n\t\t\t\t\ttext: \"Kick\",\n\t\t\t\t\tdata: target.data(\"name\"),\n\t\t\t\t});\n\t\t\t}\n\t\t} else if (target.hasClass(\"chan\")) {\n\t\t\tlet itemClass;\n\n\t\t\tif (target.hasClass(\"lobby\")) {\n\t\t\t\titemClass = \"network\";\n\t\t\t} else if (target.hasClass(\"query\")) {\n\t\t\t\titemClass = \"query\";\n\t\t\t} else {\n\t\t\t\titemClass = \"chan\";\n\t\t\t}\n\n\t\t\toutput = templates.contextmenu_item({\n\t\t\t\tclass: itemClass,\n\t\t\t\taction: \"focusChan\",\n\t\t\t\ttext: target.data(\"title\"),\n\t\t\t\tdata: target.data(\"target\"),\n\t\t\t});\n\t\t\toutput += templates.contextmenu_divider();\n\t\t\tif (target.hasClass(\"lobby\")) {\n\t\t\t\toutput += templates.contextmenu_item({\n\t\t\t\t\tclass: \"list\",\n\t\t\t\t\taction: \"list\",\n\t\t\t\t\ttext: \"List all channels\",\n\t\t\t\t\tdata: target.data(\"id\"),\n\t\t\t\t});\n\t\t\t\toutput += templates.contextmenu_item({\n\t\t\t\t\tclass: \"join\",\n\t\t\t\t\taction: \"join\",\n\t\t\t\t\ttext: \"Join a channel…\",\n\t\t\t\t\tdata: target.data(\"id\"),\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (target.hasClass(\"channel\")) {\n\t\t\t\toutput += templates.contextmenu_item({\n\t\t\t\t\tclass: \"list\",\n\t\t\t\t\taction: \"banlist\",\n\t\t\t\t\ttext: \"List banned users\",\n\t\t\t\t\tdata: target.data(\"id\"),\n\t\t\t\t});\n\t\t\t}\n\t\t\toutput += templates.contextmenu_item({\n\t\t\t\tclass: \"close\",\n\t\t\t\taction: \"close\",\n\t\t\t\ttext: target.hasClass(\"lobby\") ? \"Disconnect\" : target.hasClass(\"channel\") ? \"Leave\" : \"Close\",\n\t\t\t\tdata: target.data(\"target\"),\n\t\t\t});\n\t\t}\n\n\t\tcontextMenuContainer.show();\n\t\tcontextMenu\n\t\t\t.html(output)\n\t\t\t.css(positionContextMenu($(that), e));\n\n\t\treturn false;\n\t}\n\n\tviewport.on(\"contextmenu\", \".network .chan\", function(e) {\n\t\treturn showContextMenu(this, e);\n\t});\n\n\tviewport.on(\"click contextmenu\", \".user\", function(e) {\n\t\t// If user is selecting text, do not open context menu\n\t\t// This primarily only targets mobile devices where selection is performed with touch\n\t\tif (!window.getSelection().isCollapsed) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn showContextMenu(this, e);\n\t});\n\n\tviewport.on(\"click\", \"#chat .menu\", function(e) {\n\t\te.currentTarget = $(`#sidebar .chan[data-id=\"${$(this).closest(\".chan\").data(\"id\")}\"]`)[0];\n\t\treturn showContextMenu(this, e);\n\t});\n\n\tcontextMenuContainer.on(\"click contextmenu\", function() {\n\t\tcontextMenuContainer.hide();\n\t\treturn false;\n\t});\n\n\tfunction resetInputHeight(input) {\n\t\tinput.style.height = input.style.minHeight;\n\t}\n\n\tvar input = $(\"#input\")\n\t\t.history()\n\t\t.on(\"input\", function() {\n\t\t\tvar style = window.getComputedStyle(this);\n\n\t\t\t// Start by resetting height before computing as scrollHeight does not\n\t\t\t// decrease when deleting characters\n\t\t\tresetInputHeight(this);\n\n\t\t\tthis.style.height = Math.min(\n\t\t\t\tMath.round(window.innerHeight - 100), // prevent overflow\n\t\t\t\tthis.scrollHeight\n\t\t\t\t+ Math.round(parseFloat(style.borderTopWidth) || 0)\n\t\t\t\t+ Math.round(parseFloat(style.borderBottomWidth) || 0)\n\t\t\t) + \"px\";\n\n\t\t\tchat.find(\".chan.active .chat\").trigger(\"msg.sticky\"); // fix growing\n\t\t});\n\n\tvar focus = $.noop;\n\tif (!(\"ontouchstart\" in window || navigator.maxTouchPoints > 0)) {\n\t\tfocus = function() {\n\t\t\tif (chat.find(\".active\").hasClass(\"chan\")) {\n\t\t\t\tinput.trigger(\"focus\");\n\t\t\t}\n\t\t};\n\n\t\t$(window).on(\"focus\", focus);\n\n\t\tchat.on(\"click\", \".chat\", function() {\n\t\t\tsetTimeout(function() {\n\t\t\t\tif (window.getSelection().isCollapsed) {\n\t\t\t\t\tfocus();\n\t\t\t\t}\n\t\t\t}, 2);\n\t\t});\n\t}\n\n\tif (navigator.platform.match(/(Mac|iPhone|iPod|iPad)/i)) {\n\t\t$(document.body).addClass(\"is-apple\");\n\t}\n\n\t$(\"#form\").on(\"submit\", function(e) {\n\t\te.preventDefault();\n\t\tutils.forceFocus();\n\t\tvar text = input.val();\n\n\t\tif (text.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tinput.val(\"\");\n\t\tresetInputHeight(input.get(0));\n\n\t\tif (text.charAt(0) === \"/\") {\n\t\t\tconst args = text.substr(1).split(\" \");\n\t\t\tconst cmd = args.shift().toLowerCase();\n\t\t\tif (typeof utils.inputCommands[cmd] === \"function\" && utils.inputCommands[cmd](args)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tsocket.emit(\"input\", {\n\t\t\ttarget: chat.data(\"id\"),\n\t\t\ttext: text,\n\t\t});\n\t});\n\n\t$(\"button#set-nick\").on(\"click\", function() {\n\t\tutils.toggleNickEditor(true);\n\n\t\t// Selects existing nick in the editable text field\n\t\tvar element = document.querySelector(\"#nick-value\");\n\t\telement.focus();\n\t\tvar range = document.createRange();\n\t\trange.selectNodeContents(element);\n\t\tvar selection = window.getSelection();\n\t\tselection.removeAllRanges();\n\t\tselection.addRange(range);\n\t});\n\n\t$(\"button#cancel-nick\").on(\"click\", cancelNick);\n\t$(\"button#submit-nick\").on(\"click\", submitNick);\n\n\tfunction submitNick() {\n\t\tvar newNick = $(\"#nick-value\").text().trim();\n\n\t\tif (newNick.length === 0) {\n\t\t\tcancelNick();\n\t\t\treturn;\n\t\t}\n\n\t\tutils.toggleNickEditor(false);\n\n\t\tsocket.emit(\"input\", {\n\t\t\ttarget: chat.data(\"id\"),\n\t\t\ttext: \"/nick \" + newNick,\n\t\t});\n\t}\n\n\tfunction cancelNick() {\n\t\tutils.setNick(sidebar.find(\".chan.active\").closest(\".network\").data(\"nick\"));\n\t}\n\n\t$(\"#nick-value\").on(\"keypress\", function(e) {\n\t\tswitch (e.keyCode ? e.keyCode : e.which) {\n\t\tcase 13: // Enter\n\t\t\t// Ensures a new line is not added when pressing Enter\n\t\t\te.preventDefault();\n\t\t\tbreak;\n\t\t}\n\t}).on(\"keyup\", function(e) {\n\t\tswitch (e.keyCode ? e.keyCode : e.which) {\n\t\tcase 13: // Enter\n\t\t\tsubmitNick();\n\t\t\tbreak;\n\t\tcase 27: // Escape\n\t\t\tcancelNick();\n\t\t\tbreak;\n\t\t}\n\t});\n\n\tchat.on(\"click\", \".inline-channel\", function() {\n\t\tvar name = $(this).data(\"chan\");\n\t\tvar chan = utils.findCurrentNetworkChan(name);\n\n\t\tif (chan.length) {\n\t\t\tchan.trigger(\"click\");\n\t\t} else {\n\t\t\tsocket.emit(\"input\", {\n\t\t\t\ttarget: chat.data(\"id\"),\n\t\t\t\ttext: \"/join \" + name,\n\t\t\t});\n\t\t}\n\t});\n\n\tchat.on(\"click\", \".condensed-summary .content\", function() {\n\t\t$(this).closest(\".msg.condensed\").toggleClass(\"closed\");\n\t});\n\n\tconst openWindow = function openWindow(e, data) {\n\t\tvar self = $(this);\n\t\tvar target = self.data(\"target\");\n\t\tif (!target) {\n\t\t\treturn;\n\t\t}\n\n\t\t// This is a rather gross hack to account for sources that are in the\n\t\t// sidebar specifically. Needs to be done better when window management gets\n\t\t// refactored.\n\t\tconst inSidebar = self.parents(\"#sidebar, #footer\").length > 0;\n\n\t\tif (inSidebar) {\n\t\t\tchat.data(\n\t\t\t\t\"id\",\n\t\t\t\tself.data(\"id\")\n\t\t\t);\n\t\t\tsocket.emit(\n\t\t\t\t\"open\",\n\t\t\t\tself.data(\"id\")\n\t\t\t);\n\n\t\t\tsidebar.find(\".active\").removeClass(\"active\");\n\t\t\tself.addClass(\"active\")\n\t\t\t\t.find(\".badge\")\n\t\t\t\t.removeClass(\"highlight\")\n\t\t\t\t.empty();\n\n\t\t\tif (sidebar.find(\".highlight\").length === 0) {\n\t\t\t\tutils.toggleNotificationMarkers(false);\n\t\t\t}\n\n\t\t\tsidebarSlide.toggle(false);\n\t\t}\n\n\t\tvar lastActive = $(\"#windows > .active\");\n\n\t\tlastActive\n\t\t\t.removeClass(\"active\")\n\t\t\t.find(\".chat\")\n\t\t\t.unsticky();\n\n\t\tconst lastActiveChan = lastActive.find(\".chan.active\");\n\n\t\tif (lastActiveChan.length > 0) {\n\t\t\tlastActiveChan\n\t\t\t\t.removeClass(\"active\")\n\t\t\t\t.find(\".unread-marker\")\n\t\t\t\t.data(\"unread-id\", 0)\n\t\t\t\t.appendTo(lastActiveChan.find(\".messages\"));\n\n\t\t\trender.trimMessageInChannel(lastActiveChan, 100);\n\t\t}\n\n\t\tvar chan = $(target)\n\t\t\t.addClass(\"active\")\n\t\t\t.trigger(\"show\");\n\n\t\tlet title = $(document.body).data(\"app-name\");\n\t\tif (chan.data(\"title\")) {\n\t\t\ttitle = chan.data(\"title\") + \" — \" + title;\n\t\t}\n\t\tdocument.title = title;\n\n\t\tconst type = chan.data(\"type\");\n\t\tvar placeholder = \"\";\n\t\tif (type === \"channel\" || type === \"query\") {\n\t\t\tplaceholder = `Write to ${chan.data(\"title\")}`;\n\t\t}\n\t\tinput.prop(\"placeholder\", placeholder).prop(\"aria-label\", placeholder);\n\n\t\tif (self.hasClass(\"chan\")) {\n\t\t\t$(\"#chat-container\").addClass(\"active\");\n\t\t\tutils.setNick(self.closest(\".network\").data(\"nick\"));\n\t\t}\n\n\t\tvar chanChat = chan.find(\".chat\");\n\t\tif (chanChat.length > 0 && type !== \"special\") {\n\t\t\tchanChat.sticky();\n\t\t}\n\n\t\tif (chan.data(\"needsNamesRefresh\") === true) {\n\t\t\tchan.data(\"needsNamesRefresh\", false);\n\t\t\tsocket.emit(\"names\", {target: self.data(\"id\")});\n\t\t}\n\n\t\tif (target === \"#settings\") {\n\t\t\t$(\"#session-list\").html(\"<p>Loading…</p>\");\n\t\t\tsocket.emit(\"sessions:get\");\n\t\t}\n\n\t\tif (target === \"#help\" || target === \"#changelog\") {\n\t\t\tChangelog.requestIfNeeded();\n\t\t}\n\n\t\tfocus();\n\n\t\t// Pushes states to history web API when clicking elements with a data-target attribute.\n\t\t// States are very trivial and only contain a single `clickTarget` property which\n\t\t// contains a CSS selector that targets elements which takes the user to a different view\n\t\t// when clicked. The `popstate` event listener will trigger synthetic click events using that\n\t\t// selector and thus take the user to a different view/state.\n\t\tif (data && data.pushState === false) {\n\t\t\treturn;\n\t\t}\n\t\tconst state = {};\n\n\t\tif (self.prop(\"id\")) {\n\t\t\tstate.clickTarget = `#${self.prop(\"id\")}`;\n\t\t} else if (self.hasClass(\"chan\")) {\n\t\t\tstate.clickTarget = `#sidebar .chan[data-id=\"${self.data(\"id\")}\"]`;\n\t\t} else {\n\t\t\tstate.clickTarget = `#footer button[data-target=\"${target}\"]`;\n\t\t}\n\n\t\tif (history && history.pushState) {\n\t\t\tif (data && data.replaceHistory && history.replaceState) {\n\t\t\t\thistory.replaceState(state, null, target);\n\t\t\t} else {\n\t\t\t\thistory.pushState(state, null, target);\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t};\n\n\tsidebar.on(\"click\", \".chan, button\", openWindow);\n\t$(\"#help\").on(\"click\", \"#view-changelog, #back-to-help\", openWindow);\n\t$(\"#changelog\").on(\"click\", \"#back-to-help\", openWindow);\n\n\tsidebar.on(\"click\", \"#sign-out\", function() {\n\t\tsocket.emit(\"sign-out\");\n\t\tstorage.remove(\"token\");\n\n\t\tif (!socket.connected) {\n\t\t\tlocation.reload();\n\t\t}\n\t});\n\n\tfunction closeChan(chan) {\n\t\tvar cmd = \"/close\";\n\n\t\tif (chan.hasClass(\"lobby\")) {\n\t\t\tcmd = \"/quit\";\n\t\t\tvar server = chan.find(\".name\").html();\n\t\t\tif (!confirm(\"Disconnect from \" + server + \"?\")) { // eslint-disable-line no-alert\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\tsocket.emit(\"input\", {\n\t\t\ttarget: chan.data(\"id\"),\n\t\t\ttext: cmd,\n\t\t});\n\t\tchan.css({\n\t\t\ttransition: \"none\",\n\t\t\topacity: 0.4,\n\t\t});\n\t\treturn false;\n\t}\n\n\tsidebar.on(\"click\", \".close\", function() {\n\t\tcloseChan($(this).closest(\".chan\"));\n\t});\n\n\tconst contextMenuActions = {\n\t\tjoin: function(itemData) {\n\t\t\tconst network = $(`#join-channel-${itemData}`).closest(\".network\");\n\t\t\tJoinChannel.openForm(network);\n\t\t},\n\t\tclose: function(itemData) {\n\t\t\tcloseChan($(`.networks .chan[data-target=\"${itemData}\"]`));\n\t\t},\n\t\tfocusChan: function(itemData) {\n\t\t\t$(`.networks .chan[data-target=\"${itemData}\"]`).trigger(\"click\");\n\t\t},\n\t\tlist: function(itemData) {\n\t\t\tsocket.emit(\"input\", {\n\t\t\t\ttarget: itemData,\n\t\t\t\ttext: \"/list\",\n\t\t\t});\n\t\t},\n\t\tbanlist: function(itemData) {\n\t\t\tsocket.emit(\"input\", {\n\t\t\t\ttarget: itemData,\n\t\t\t\ttext: \"/banlist\",\n\t\t\t});\n\t\t},\n\t\twhois: function(itemData) {\n\t\t\tconst chan = utils.findCurrentNetworkChan(itemData);\n\n\t\t\tif (chan.length) {\n\t\t\t\tchan.trigger(\"click\");\n\t\t\t}\n\n\t\t\tsocket.emit(\"input\", {\n\t\t\t\ttarget: $(\"#chat\").data(\"id\"),\n\t\t\t\ttext: \"/whois \" + itemData,\n\t\t\t});\n\n\t\t\t$(`.channel.active .users .user[data-name=\"${itemData}\"]`).trigger(\"click\");\n\t\t},\n\t\tquery: function(itemData) {\n\t\t\tconst chan = utils.findCurrentNetworkChan(itemData);\n\n\t\t\tif (chan.length) {\n\t\t\t\tchan.trigger(\"click\");\n\t\t\t}\n\n\t\t\tsocket.emit(\"input\", {\n\t\t\t\ttarget: $(\"#chat\").data(\"id\"),\n\t\t\t\ttext: \"/query \" + itemData,\n\t\t\t});\n\t\t},\n\t\tkick: function(itemData) {\n\t\t\tsocket.emit(\"input\", {\n\t\t\t\ttarget: $(\"#chat\").data(\"id\"),\n\t\t\t\ttext: \"/kick \" + itemData,\n\t\t\t});\n\t\t},\n\t};\n\n\tcontextMenuActions.execute = (name, ...args) => contextMenuActions[name] && contextMenuActions[name](...args);\n\n\tcontextMenu.on(\"click\", \".context-menu-item\", function() {\n\t\tconst $this = $(this);\n\t\tconst itemData = $this.data(\"data\");\n\t\tconst contextAction = $this.data(\"action\");\n\t\tcontextMenuActions.execute(contextAction, itemData);\n\t});\n\n\tchat.on(\"input\", \".search\", function() {\n\t\tconst value = $(this).val();\n\t\tconst parent = $(this).closest(\".users\");\n\t\tconst names = parent.find(\".names-original\");\n\t\tconst container = parent.find(\".names-filtered\");\n\n\t\tif (!value.length) {\n\t\t\tcontainer.hide();\n\t\t\tnames.show();\n\t\t\treturn;\n\t\t}\n\n\t\tconst fuzzyOptions = {\n\t\t\tpre: \"<b>\",\n\t\t\tpost: \"</b>\",\n\t\t\textract: (el) => $(el).text(),\n\t\t};\n\n\t\tconst result = fuzzy.filter(\n\t\t\tvalue,\n\t\t\tnames.find(\".user\").toArray(),\n\t\t\tfuzzyOptions\n\t\t);\n\n\t\tnames.hide();\n\t\tcontainer.html(templates.user_filtered({matches: result})).show();\n\t});\n\n\tif ($(\"body\").hasClass(\"public\") && (window.location.hash === \"#connect\" || window.location.hash === \"\")) {\n\t\t$(\"#connect\").one(\"show\", function() {\n\t\t\tvar params = URI(document.location.search);\n\t\t\tparams = params.search(true);\n\t\t\t// Possible parameters: name, host, port, password, tls, nick, username, realname, join\n\t\t\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in#Iterating_over_own_properties_only\n\t\t\tfor (var key in params) {\n\t\t\t\tif (params.hasOwnProperty(key)) {\n\t\t\t\t\tvar value = params[key];\n\t\t\t\t\t// \\W searches for non-word characters\n\t\t\t\t\tkey = key.replace(/\\W/g, \"\");\n\n\t\t\t\t\tvar element = $(\"#connect input[name='\" + key + \"']\");\n\t\t\t\t\t// if the element exists, it isn't disabled, and it isn't hidden\n\t\t\t\t\tif (element.length > 0 && !element.is(\":disabled\") && !element.is(\":hidden\")) {\n\t\t\t\t\t\tif (element.is(\":checkbox\")) {\n\t\t\t\t\t\t\telement.prop(\"checked\", (value === \"1\" || value === \"true\") ? true : false);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\telement.val(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\t$(document).on(\"visibilitychange focus click\", () => {\n\t\tif (sidebar.find(\".highlight\").length === 0) {\n\t\t\tutils.toggleNotificationMarkers(false);\n\t\t}\n\t});\n\n\t// Compute how many milliseconds are remaining until the next day starts\n\tfunction msUntilNextDay() {\n\t\treturn moment().add(1, \"day\").startOf(\"day\") - moment();\n\t}\n\n\t// Go through all Today/Yesterday date markers in the DOM and recompute their\n\t// labels. When done, restart the timer for the next day.\n\tfunction updateDateMarkers() {\n\t\t$(\".date-marker-text[data-label='Today'], .date-marker-text[data-label='Yesterday']\")\n\t\t\t.closest(\".date-marker-container\")\n\t\t\t.each(function() {\n\t\t\t\t$(this).replaceWith(templates.date_marker({time: $(this).data(\"time\")}));\n\t\t\t});\n\n\t\t// This should always be 24h later but re-computing exact value just in case\n\t\tsetTimeout(updateDateMarkers, msUntilNextDay());\n\t}\n\tsetTimeout(updateDateMarkers, msUntilNextDay());\n\n\twindow.addEventListener(\"popstate\", (e) => {\n\t\tconst {state} = e;\n\t\tif (!state) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet {clickTarget} = state;\n\n\t\tif (clickTarget) {\n\t\t\t// This will be true when click target corresponds to opening a thumbnail,\n\t\t\t// browsing to the previous/next thumbnail, or closing the image viewer.\n\t\t\tconst imageViewerRelated = clickTarget.includes(\".toggle-thumbnail\");\n\n\t\t\t// If the click target is not related to the image viewer but the viewer\n\t\t\t// is currently opened, we need to close it.\n\t\t\tif (!imageViewerRelated && $(\"#image-viewer\").hasClass(\"opened\")) {\n\t\t\t\tclickTarget += \", #image-viewer\";\n\t\t\t}\n\n\t\t\t// Emit the click to the target, while making sure it is not going to be\n\t\t\t// added to the state again.\n\t\t\t$(clickTarget).trigger(\"click\", {\n\t\t\t\tpushState: false,\n\t\t\t});\n\t\t}\n\t});\n\n\t// Only start opening socket.io connection after all events have been registered\n\tsocket.open();\n});\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/lounge.js","import jQuery from \"jquery\";\n\n/*!\n * inputhistory\n * https://github.com/erming/inputhistory\n * v0.3.1\n */\n(function($) {\n\t$.inputhistory = {};\n\t$.inputhistory.defaultOptions = {\n\t\thistory: [],\n\t\tpreventSubmit: false\n\t};\n\t\n\t$.fn.history = // Alias\n\t$.fn.inputhistory = function(options) {\n\t\toptions = $.extend(\n\t\t\t$.inputhistory.defaultOptions,\n\t\t\toptions\n\t\t);\n\t\t\n\t\tvar self = this;\n\t\tif (self.length > 1) {\n\t\t\treturn self.each(function() {\n\t\t\t\t$(this).history(options);\n\t\t\t});\n\t\t}\n\t\t\n\t\tvar history = options.history;\n\t\thistory.push(\"\");\n\t\t\n\t\tvar i = 0;\n\t\tself.on(\"keydown\", function(e) {\n\t\t\tvar key = e.which;\n\t\t\tswitch (key) {\n\t\t\tcase 13: // Enter\n\t\t\t\tif (e.shiftKey || self.data(\"autocompleting\")) {\n\t\t\t\t\treturn; // multiline input\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (self.val() != \"\") {\n\t\t\t\t\ti = history.length;\n\t\t\t\t\thistory[i - 1] = self.val();\n\t\t\t\t\thistory.push(\"\");\n\t\t\t\t\tif (history[i - 1] == history[i - 2]) {\n\t\t\t\t\t\thistory.splice(-2, 1);\n\t\t\t\t\t\ti--;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!options.preventSubmit) {\n\t\t\t\t\tself.parents(\"form\").eq(0).submit();\n\t\t\t\t}\n\t\t\t\tself.val(\"\");\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 38: // Up\n\t\t\tcase 40: // Down\n\t\t\t\t// NOTICE: This is specific to The Lounge.\n\t\t\t\tif (e.ctrlKey || e.metaKey || self.data(\"autocompleting\")) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (\n\t\t\t\t\tthis.value.indexOf(\"\\n\") >= 0\n\t\t\t\t\t&&\n\t\t\t\t\t(key === 38 && this.selectionStart > 0)\n\t\t\t\t\t||\n\t\t\t\t\t(key === 40 && this.selectionStart < this.value.length))\n\t\t\t\t{\n\t\t\t\t\treturn; // don't prevent default\n\t\t\t\t}\n\n\t\t\t\thistory[i] = self.val();\n\t\t\t\tif (key == 38 && i != 0) {\n\t\t\t\t\ti--;\n\t\t\t\t} else if (key == 40 && i < history.length - 1) {\n\t\t\t\t\ti++;\n\t\t\t\t}\n\t\t\t\tself.val(history[i]);\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tdefault:\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\te.preventDefault();\n\t\t});\n\t\t\n\t\treturn this;\n\t}\n})(jQuery);\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/libs/jquery/inputhistory.js","import jQuery from \"jquery\";\n\n(function($) {\n\t$.fn.unsticky = function() {\n\t\treturn this.trigger(\"unstick.sticky\").off(\".sticky\");\n\t};\n\n\t$.fn.sticky = function() {\n\t\tvar self = this;\n\t\tvar stuckToBottom = true;\n\t\tvar lastStick = 0;\n\n\t\tvar keepToBottom = function() {\n\t\t\tif (stuckToBottom) {\n\t\t\t\tself.scrollBottom();\n\t\t\t}\n\t\t};\n\n\t\t$(window).on(\"resize.sticky\", keepToBottom);\n\t\tself\n\t\t\t.on(\"unstick.sticky\", function() {\n\t\t\t\t$(window).off(\"resize.sticky\", keepToBottom);\n\t\t\t})\n\t\t\t.on(\"scroll.sticky\", function() {\n\t\t\t\t// When resizing, sometimes the browser sends a bunch of extra scroll events due to content\n\t\t\t\t// reflow, so if we resized within 250ms we can assume it's one of those. The order of said\n\t\t\t\t// events is not predictable, and scroll can happen last, so not setting stuckToBottom is\n\t\t\t\t// not enough, we have to force the scroll still.\n\t\t\t\tif (stuckToBottom && Date.now() - lastStick < 250) {\n\t\t\t\t\tself.scrollBottom();\n\t\t\t\t} else {\n\t\t\t\t\tstuckToBottom = self.isScrollBottom();\n\t\t\t\t}\n\t\t\t})\n\t\t\t.on(\"scrollBottom.sticky\", function() {\n\t\t\t\tstuckToBottom = true;\n\t\t\t\tlastStick = Date.now();\n\t\t\t\tthis.scrollTop = this.scrollHeight;\n\t\t\t})\n\t\t\t.on(\"keepToBottom.sticky\", keepToBottom)\n\t\t\t.scrollBottom();\n\n\t\treturn self;\n\t};\n\n\t$.fn.scrollBottom = function() {\n\t\tthis.trigger(\"scrollBottom.sticky\");\n\t\treturn this;\n\t};\n\n\t$.fn.isScrollBottom = function() {\n\t\tvar el = this[0];\n\t\treturn el.scrollHeight - el.scrollTop - el.offsetHeight <= 30;\n\t};\n})(jQuery);\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/libs/jquery/stickyscroll.js","\"use strict\";\n\n/**\n * Simple slideout menu implementation.\n */\nmodule.exports = function slideoutMenu(viewport, menu) {\n\tvar touchStartPos = null;\n\tvar touchCurPos = null;\n\tvar touchStartTime = 0;\n\tvar menuWidth = 0;\n\tvar menuIsOpen = false;\n\tvar menuIsMoving = false;\n\n\tfunction toggleMenu(state) {\n\t\tmenuIsOpen = state;\n\t\tviewport.classList.toggle(\"menu-open\", state);\n\t}\n\n\tfunction disableSlideout() {\n\t\tviewport.removeEventListener(\"ontouchstart\", onTouchStart);\n\t}\n\n\tfunction onTouchStart(e) {\n\t\tif (e.touches.length !== 1) {\n\t\t\tonTouchEnd();\n\t\t\treturn;\n\t\t}\n\n\t\tvar touch = e.touches.item(0);\n\t\tviewport.classList.toggle(\"menu-dragging\", true);\n\n\t\tmenuWidth = parseFloat(window.getComputedStyle(menu).width);\n\n\t\tif ((!menuIsOpen && touch.screenX < 50) || (menuIsOpen && touch.screenX > menuWidth)) {\n\t\t\ttouchStartPos = touch;\n\t\t\ttouchCurPos = touch;\n\t\t\ttouchStartTime = Date.now();\n\n\t\t\tviewport.addEventListener(\"touchmove\", onTouchMove);\n\t\t\tviewport.addEventListener(\"touchend\", onTouchEnd, {passive: true});\n\t\t}\n\t}\n\n\tfunction onTouchMove(e) {\n\t\tvar touch = touchCurPos = e.touches.item(0);\n\t\tvar setX = touch.screenX - touchStartPos.screenX;\n\n\t\tif (Math.abs(setX > 30)) {\n\t\t\tmenuIsMoving = true;\n\t\t}\n\n\t\tif (!menuIsMoving && Math.abs(touch.screenY - touchStartPos.screenY) > 30) {\n\t\t\tonTouchEnd();\n\t\t\treturn;\n\t\t}\n\n\t\tif (menuIsOpen) {\n\t\t\tsetX += menuWidth;\n\t\t}\n\n\t\tif (setX > menuWidth) {\n\t\t\tsetX = menuWidth;\n\t\t} else if (setX < 0) {\n\t\t\tsetX = 0;\n\t\t}\n\n\t\tviewport.style.transform = \"translate3d(\" + setX + \"px, 0, 0)\";\n\n\t\tif (menuIsMoving) {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t}\n\t}\n\n\tfunction onTouchEnd() {\n\t\tvar diff = touchCurPos.screenX - touchStartPos.screenX;\n\t\tvar absDiff = Math.abs(diff);\n\n\t\tif (absDiff > menuWidth / 2 || Date.now() - touchStartTime < 180 && absDiff > 50) {\n\t\t\ttoggleMenu(diff > 0);\n\t\t}\n\n\t\tviewport.removeEventListener(\"touchmove\", onTouchMove);\n\t\tviewport.removeEventListener(\"touchend\", onTouchEnd);\n\t\tviewport.classList.toggle(\"menu-dragging\", false);\n\t\tviewport.style.transform = null;\n\n\t\ttouchStartPos = null;\n\t\ttouchCurPos = null;\n\t\ttouchStartTime = 0;\n\t\tmenuIsMoving = false;\n\t}\n\n\tviewport.addEventListener(\"touchstart\", onTouchStart, {passive: true});\n\n\treturn {\n\t\tdisable: disableSlideout,\n\t\ttoggle: toggleMenu,\n\t\tisOpen: function() {\n\t\t\treturn menuIsOpen;\n\t\t},\n\t};\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/libs/slideout.js","var map = {\n\t\"./actions/action.tpl\": 199,\n\t\"./actions/away.tpl\": 234,\n\t\"./actions/back.tpl\": 235,\n\t\"./actions/ban_list.tpl\": 236,\n\t\"./actions/channel_list.tpl\": 237,\n\t\"./actions/chghost.tpl\": 238,\n\t\"./actions/ctcp.tpl\": 239,\n\t\"./actions/invite.tpl\": 240,\n\t\"./actions/join.tpl\": 241,\n\t\"./actions/kick.tpl\": 242,\n\t\"./actions/mode.tpl\": 243,\n\t\"./actions/nick.tpl\": 244,\n\t\"./actions/part.tpl\": 245,\n\t\"./actions/quit.tpl\": 246,\n\t\"./actions/topic.tpl\": 247,\n\t\"./actions/topic_set_by.tpl\": 248,\n\t\"./actions/whois.tpl\": 249,\n\t\"./chan.tpl\": 168,\n\t\"./chat.tpl\": 250,\n\t\"./contextmenu_divider.tpl\": 251,\n\t\"./contextmenu_item.tpl\": 252,\n\t\"./date_marker.tpl\": 253,\n\t\"./image_viewer.tpl\": 256,\n\t\"./join_channel.tpl\": 170,\n\t\"./msg.tpl\": 257,\n\t\"./msg_action.tpl\": 268,\n\t\"./msg_condensed.tpl\": 269,\n\t\"./msg_condensed_toggle.tpl\": 270,\n\t\"./msg_preview.tpl\": 271,\n\t\"./msg_preview_toggle.tpl\": 272,\n\t\"./msg_unhandled.tpl\": 273,\n\t\"./network.tpl\": 274,\n\t\"./session.tpl\": 276,\n\t\"./unread_marker.tpl\": 277,\n\t\"./user.tpl\": 278,\n\t\"./user_filtered.tpl\": 280,\n\t\"./user_name.tpl\": 4,\n\t\"./version_checker.tpl\": 281,\n\t\"./windows/changelog.tpl\": 282,\n\t\"./windows/connect.tpl\": 283,\n\t\"./windows/help.tpl\": 284,\n\t\"./windows/settings.tpl\": 285,\n\t\"./windows/sign_in.tpl\": 286\n};\nfunction webpackContext(req) {\n\treturn __webpack_require__(webpackContextResolve(req));\n};\nfunction webpackContextResolve(req) {\n\tvar id = map[req];\n\tif(!(id + 1)) // check for number or string\n\t\tthrow new Error(\"Cannot find module '\" + req + \"'.\");\n\treturn id;\n};\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 198;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./client/views \\.tpl$\n// module id = 198\n// module chunks = 0","var Handlebars = require(\"/home/travis/build/thelounge/lounge/node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n return \"\t<div class=\\\"preview\\\" data-url=\\\"\"\n + container.escapeExpression(container.lambda((depth0 != null ? depth0.link : depth0), depth0))\n + \"\\\"></div>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n return ((stack1 = container.invokePartial(require(\"/home/travis/build/thelounge/lounge/client/views/user_name.tpl\"),(depth0 != null ? depth0.from : depth0),{\"name\":\"../user_name\",\"data\":data,\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n + \"<span class=\\\"text\\\">\"\n + ((stack1 = __default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/parse.js\")).call(alias1,(depth0 != null ? depth0.text : depth0),(depth0 != null ? depth0.users : depth0),{\"name\":\"parse\",\"hash\":{},\"data\":data})) != null ? stack1 : \"\")\n + \"</span>\\n\\n\"\n + ((stack1 = helpers.each.call(alias1,(depth0 != null ? depth0.previews : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"usePartial\":true,\"useData\":true});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./client/views/actions/action.tpl\n// module id = 199\n// module chunks = 0","\"use strict\";\n\n// Styling control codes\nconst BOLD = \"\\x02\";\nconst COLOR = \"\\x03\";\nconst HEX_COLOR = \"\\x04\";\nconst RESET = \"\\x0f\";\nconst REVERSE = \"\\x16\";\nconst ITALIC = \"\\x1d\";\nconst UNDERLINE = \"\\x1f\";\nconst STRIKETHROUGH = \"\\x1e\";\nconst MONOSPACE = \"\\x11\";\n\n// Color code matcher, with format `XX,YY` where both `XX` and `YY` are\n// integers, `XX` is the text color and `YY` is an optional background color.\nconst colorRx = /^(\\d{1,2})(?:,(\\d{1,2}))?/;\n\n// 6-char Hex color code matcher\nconst hexColorRx = /^([0-9a-f]{6})(?:,([0-9a-f]{6}))?/i;\n\n// Represents all other control codes that to be ignored/filtered from the text\nconst controlCodesRx = /[\\u0000-\\u001F]/g;\n\n// Converts a given text into an array of objects, each of them representing a\n// similarly styled section of the text. Each object carries the `text`, style\n// information (`bold`, `textColor`, `bgcolor`, `italic`,\n// `underline`, `strikethrough`, `monospace`), and `start`/`end` cursors.\nfunction parseStyle(text) {\n\tconst result = [];\n\tlet start = 0;\n\tlet position = 0;\n\n\t// At any given time, these carry style information since last time a styling\n\t// control code was met.\n\tlet colorCodes, bold, textColor, bgColor, hexColor, hexBgColor, italic, underline, strikethrough, monospace;\n\n\tconst resetStyle = () => {\n\t\tbold = false;\n\t\ttextColor = undefined;\n\t\tbgColor = undefined;\n\t\thexColor = undefined;\n\t\thexBgColor = undefined;\n\t\titalic = false;\n\t\tunderline = false;\n\t\tstrikethrough = false;\n\t\tmonospace = false;\n\t};\n\tresetStyle();\n\n\t// When called, this \"closes\" the current fragment by adding an entry to the\n\t// `result` array using the styling information set last time a control code\n\t// was met.\n\tconst emitFragment = () => {\n\t\t// Uses the text fragment starting from the last control code position up to\n\t\t// the current position\n\t\tconst textPart = text.slice(start, position);\n\n\t\t// Filters out all non-style related control codes present in this text\n\t\tconst processedText = textPart.replace(controlCodesRx, \"\");\n\n\t\tif (processedText.length) {\n\t\t\t// Current fragment starts where the previous one ends, or at 0 if none\n\t\t\tconst fragmentStart = result.length ? result[result.length - 1].end : 0;\n\n\t\t\tresult.push({\n\t\t\t\tbold,\n\t\t\t\ttextColor,\n\t\t\t\tbgColor,\n\t\t\t\thexColor,\n\t\t\t\thexBgColor,\n\t\t\t\titalic,\n\t\t\t\tunderline,\n\t\t\t\tstrikethrough,\n\t\t\t\tmonospace,\n\t\t\t\ttext: processedText,\n\t\t\t\tstart: fragmentStart,\n\t\t\t\tend: fragmentStart + processedText.length,\n\t\t\t});\n\t\t}\n\n\t\t// Now that a fragment has been \"closed\", the next one will start after that\n\t\tstart = position + 1;\n\t};\n\n\t// This loop goes through each character of the given text one by one by\n\t// bumping the `position` cursor. Every time a new special \"styling\" character\n\t// is met, an object gets created (with `emitFragment()`)information on text\n\t// encountered since the previous styling character.\n\twhile (position < text.length) {\n\t\tswitch (text[position]) {\n\t\tcase RESET:\n\t\t\temitFragment();\n\t\t\tresetStyle();\n\t\t\tbreak;\n\n\t\t// Meeting a BOLD character means that the ongoing text is either going to\n\t\t// be in bold or that the previous one was in bold and the following one\n\t\t// must be reset.\n\t\t// This same behavior applies to COLOR, REVERSE, ITALIC, and UNDERLINE.\n\t\tcase BOLD:\n\t\t\temitFragment();\n\t\t\tbold = !bold;\n\t\t\tbreak;\n\n\t\tcase COLOR:\n\t\t\temitFragment();\n\n\t\t\t// Go one step further to find the corresponding color\n\t\t\tcolorCodes = text.slice(position + 1).match(colorRx);\n\n\t\t\tif (colorCodes) {\n\t\t\t\ttextColor = Number(colorCodes[1]);\n\t\t\t\tif (colorCodes[2]) {\n\t\t\t\t\tbgColor = Number(colorCodes[2]);\n\t\t\t\t}\n\t\t\t\t// Color code length is > 1, so bump the current position cursor by as\n\t\t\t\t// much (and reset the start cursor for the current text block as well)\n\t\t\t\tposition += colorCodes[0].length;\n\t\t\t\tstart = position + 1;\n\t\t\t} else {\n\t\t\t\t// If no color codes were found, toggles back to no colors (like BOLD).\n\t\t\t\ttextColor = undefined;\n\t\t\t\tbgColor = undefined;\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase HEX_COLOR:\n\t\t\temitFragment();\n\n\t\t\tcolorCodes = text.slice(position + 1).match(hexColorRx);\n\n\t\t\tif (colorCodes) {\n\t\t\t\thexColor = colorCodes[1].toUpperCase();\n\t\t\t\tif (colorCodes[2]) {\n\t\t\t\t\thexBgColor = colorCodes[2].toUpperCase();\n\t\t\t\t}\n\t\t\t\t// Color code length is > 1, so bump the current position cursor by as\n\t\t\t\t// much (and reset the start cursor for the current text block as well)\n\t\t\t\tposition += colorCodes[0].length;\n\t\t\t\tstart = position + 1;\n\t\t\t} else {\n\t\t\t\t// If no color codes were found, toggles back to no colors (like BOLD).\n\t\t\t\thexColor = undefined;\n\t\t\t\thexBgColor = undefined;\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\tcase REVERSE: {\n\t\t\temitFragment();\n\t\t\tconst tmp = bgColor;\n\t\t\tbgColor = textColor;\n\t\t\ttextColor = tmp;\n\t\t\tbreak;\n\t\t}\n\t\tcase ITALIC:\n\t\t\temitFragment();\n\t\t\titalic = !italic;\n\t\t\tbreak;\n\n\t\tcase UNDERLINE:\n\t\t\temitFragment();\n\t\t\tunderline = !underline;\n\t\t\tbreak;\n\n\t\tcase STRIKETHROUGH:\n\t\t\temitFragment();\n\t\t\tstrikethrough = !strikethrough;\n\t\t\tbreak;\n\n\t\tcase MONOSPACE:\n\t\t\temitFragment();\n\t\t\tmonospace = !monospace;\n\t\t\tbreak;\n\t\t}\n\n\t\t// Evaluate the next character at the next iteration\n\t\tposition += 1;\n\t}\n\n\t// The entire text has been parsed, so we finalize the current text fragment.\n\temitFragment();\n\n\treturn result;\n}\n\nconst properties = [\"bold\", \"textColor\", \"bgColor\", \"hexColor\", \"hexBgColor\", \"italic\", \"underline\", \"strikethrough\", \"monospace\"];\n\nfunction prepare(text) {\n\treturn parseStyle(text)\n\t\t// This optimizes fragments by combining them together when all their values\n\t\t// for the properties defined above are equal.\n\t\t.reduce((prev, curr) => {\n\t\t\tif (prev.length) {\n\t\t\t\tconst lastEntry = prev[prev.length - 1];\n\t\t\t\tif (properties.every((key) => curr[key] === lastEntry[key])) {\n\t\t\t\t\tlastEntry.text += curr.text;\n\t\t\t\t\tlastEntry.end += curr.text.length;\n\t\t\t\t\treturn prev;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn prev.concat([curr]);\n\t\t}, []);\n}\n\nmodule.exports = prepare;\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/libs/handlebars/ircmessageparser/parseStyle.js","\"use strict\";\n\n// Escapes the RegExp special characters \"^\", \"$\", \"\", \".\", \"*\", \"+\", \"?\", \"(\",\n// \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in string.\n// See https://lodash.com/docs/#escapeRegExp\nconst escapeRegExp = require(\"lodash/escapeRegExp\");\n\n// Given an array of channel prefixes (such as \"#\" and \"&\") and an array of user\n// modes (such as \"@\" and \"+\"), this function extracts channels and nicks from a\n// text.\n// It returns an array of objects for each channel found with their start index,\n// end index and channel name.\nfunction findChannels(text, channelPrefixes, userModes) {\n\t// `userModePattern` is necessary to ignore user modes in /whois responses.\n\t// For example, a voiced user in #thelounge will have a /whois response of:\n\t// > foo is on the following channels: +#thelounge\n\t// We need to explicitly ignore user modes to parse such channels correctly.\n\tconst userModePattern = userModes.map(escapeRegExp).join(\"\");\n\tconst channelPrefixPattern = channelPrefixes.map(escapeRegExp).join(\"\");\n\tconst channelPattern = `(?:^|\\\\s)[${userModePattern}]*([${channelPrefixPattern}][^ \\u0007]+)`;\n\tconst channelRegExp = new RegExp(channelPattern, \"g\");\n\n\tconst result = [];\n\tlet match;\n\n\tdo {\n\t\t// With global (\"g\") regexes, calling `exec` multiple times will find\n\t\t// successive matches in the same string.\n\t\tmatch = channelRegExp.exec(text);\n\n\t\tif (match) {\n\t\t\tresult.push({\n\t\t\t\tstart: match.index + match[0].length - match[1].length,\n\t\t\t\tend: match.index + match[0].length,\n\t\t\t\tchannel: match[1],\n\t\t\t});\n\t\t}\n\t} while (match);\n\n\treturn result;\n}\n\nmodule.exports = findChannels;\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/libs/handlebars/ircmessageparser/findChannels.js","\"use strict\";\n\nconst URI = require(\"urijs\");\n\n// Known schemes to detect in a text. If a text contains `foo...bar://foo.com`,\n// the parsed scheme should be `foo...bar` but if it contains\n// `foo...http://foo.com`, we assume the scheme to extract will be `http`.\nconst commonSchemes = [\n\t\"http\", \"https\",\n\t\"ftp\", \"sftp\",\n\t\"smb\", \"file\",\n\t\"irc\", \"ircs\",\n\t\"svn\", \"git\",\n\t\"steam\", \"mumble\", \"ts3server\",\n\t\"svn+ssh\", \"ssh\",\n];\n\nfunction findLinks(text) {\n\tconst result = [];\n\n\t// URI.withinString() identifies URIs within text, e.g. to translate them to\n\t// <a>-Tags.\n\t// See https://medialize.github.io/URI.js/docs.html#static-withinString\n\t// In our case, we store each URI encountered in a result array.\n\ttry {\n\t\tURI.withinString(text, function(url, start, end) {\n\t\t\tlet parsedScheme;\n\n\t\t\ttry {\n\t\t\t\t// Extract the scheme of the URL detected, if there is one\n\t\t\t\tparsedScheme = URI(url).scheme().toLowerCase();\n\t\t\t} catch (e) {\n\t\t\t\t// URI may throw an exception for malformed urls,\n\t\t\t\t// as to why withinString finds these in the first place is a mystery\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Check if the scheme of the detected URL matches a common one above.\n\t\t\t// In a URL like `foo..http://example.com`, the scheme would be `foo..http`,\n\t\t\t// so we need to clean up the end of the scheme and filter out the rest.\n\t\t\tconst matchedScheme = commonSchemes.find((scheme) => parsedScheme.endsWith(scheme));\n\n\t\t\t// A known scheme was found, extract the unknown part from the URL\n\t\t\tif (matchedScheme) {\n\t\t\t\tconst prefix = parsedScheme.length - matchedScheme.length;\n\t\t\t\tstart += prefix;\n\t\t\t\turl = url.slice(prefix);\n\t\t\t}\n\n\t\t\t// The URL matched but does not start with a scheme (`www.foo.com`), add it\n\t\t\tif (!parsedScheme.length) {\n\t\t\t\turl = \"http://\" + url;\n\t\t\t}\n\n\t\t\tresult.push({\n\t\t\t\tstart: start,\n\t\t\t\tend: end,\n\t\t\t\tlink: url,\n\t\t\t});\n\t\t});\n\t} catch (e) {\n\t\t// withinString is wrapped in a try/catch due to https://github.com/medialize/URI.js/issues/359\n\t}\n\n\treturn result;\n}\n\nmodule.exports = findLinks;\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/libs/handlebars/ircmessageparser/findLinks.js","\"use strict\";\n\nconst emojiRegExp = require(\"emoji-regex\")();\n\nfunction findEmoji(text) {\n\tconst result = [];\n\tlet match;\n\n\twhile ((match = emojiRegExp.exec(text))) {\n\t\tresult.push({\n\t\t\tstart: match.index,\n\t\t\tend: match.index + match[0].length,\n\t\t\temoji: match[0],\n\t\t});\n\t}\n\n\treturn result;\n}\n\nmodule.exports = findEmoji;\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/libs/handlebars/ircmessageparser/findEmoji.js","\"use strict\";\n\nconst nickRegExp = /([\\w[\\]\\\\`^{|}-]+)/g;\n\nfunction findNames(text, users) {\n\tconst result = [];\n\n\t// Return early if we don't have any nicknames to find\n\tif (users.length === 0) {\n\t\treturn result;\n\t}\n\n\tlet match;\n\twhile ((match = nickRegExp.exec(text))) {\n\t\tif (users.indexOf(match[1]) > -1) {\n\t\t\tresult.push({\n\t\t\t\tstart: match.index,\n\t\t\t\tend: match.index + match[1].length,\n\t\t\t\tnick: match[1],\n\t\t\t});\n\t\t}\n\t}\n\n\treturn result;\n}\n\nmodule.exports = findNames;\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/libs/handlebars/ircmessageparser/findNames.js","\"use strict\";\n\nconst anyIntersection = require(\"./anyIntersection\");\nconst fill = require(\"./fill\");\n\nlet Object_assign = Object.assign;\n\nif (typeof Object_assign !== \"function\") {\n\tObject_assign = function(target) {\n\t\tArray.prototype.slice.call(arguments, 1).forEach(function(obj) {\n\t\t\tObject.keys(obj).forEach(function(key) {\n\t\t\t\ttarget[key] = obj[key];\n\t\t\t});\n\t\t});\n\t\treturn target;\n\t};\n}\n\n// Merge text part information within a styling fragment\nfunction assign(textPart, fragment) {\n\tconst fragStart = fragment.start;\n\tconst start = Math.max(fragment.start, textPart.start);\n\tconst end = Math.min(fragment.end, textPart.end);\n\n\treturn Object_assign({}, fragment, {\n\t\tstart: start,\n\t\tend: end,\n\t\ttext: fragment.text.slice(start - fragStart, end - fragStart),\n\t});\n}\n\n// Merge the style fragments withing the text parts, taking into account\n// boundaries and text sections that have not matched to links or channels.\n// For example, given a string \"foobar\" where \"foo\" and \"bar\" have been\n// identified as parts (channels, links, etc.) and \"fo\", \"ob\" and \"ar\" have 3\n// different styles, the first resulting part will contain fragments \"fo\" and\n// \"o\", and the second resulting part will contain \"b\" and \"ar\". \"o\" and \"b\"\n// fragments will contain duplicate styling attributes.\nfunction merge(textParts, styleFragments) {\n\t// Re-build the overall text (without control codes) from the style fragments\n\tconst cleanText = styleFragments.reduce((acc, frag) => acc + frag.text, \"\");\n\n\t// Every section of the original text that has not been captured in a \"part\"\n\t// is filled with \"text\" parts, dummy objects with start/end but no extra\n\t// metadata.\n\tconst allParts = textParts\n\t\t.concat(fill(textParts, cleanText))\n\t\t.sort((a, b) => a.start - b.start);\n\n\t// Distribute the style fragments within the text parts\n\treturn allParts.map((textPart) => {\n\t\ttextPart.fragments = styleFragments\n\t\t\t.filter((fragment) => anyIntersection(textPart, fragment))\n\t\t\t.map((fragment) => assign(textPart, fragment));\n\n\t\treturn textPart;\n\t});\n}\n\nmodule.exports = merge;\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/libs/handlebars/ircmessageparser/merge.js","\"use strict\";\n\n// Create plain text entries corresponding to areas of the text that match no\n// existing entries. Returns an empty array if all parts of the text have been\n// parsed into recognizable entries already.\nfunction fill(existingEntries, text) {\n\tlet position = 0;\n\n\t// Fill inner parts of the text. For example, if text is `foobarbaz` and both\n\t// `foo` and `baz` have matched into an entry, this will return a dummy entry\n\t// corresponding to `bar`.\n\tconst result = existingEntries.reduce((acc, textSegment) => {\n\t\tif (textSegment.start > position) {\n\t\t\tacc.push({\n\t\t\t\tstart: position,\n\t\t\t\tend: textSegment.start,\n\t\t\t});\n\t\t}\n\t\tposition = textSegment.end;\n\t\treturn acc;\n\t}, []);\n\n\t// Complete the unmatched end of the text with a dummy entry\n\tif (position < text.length) {\n\t\tresult.push({\n\t\t\tstart: position,\n\t\t\tend: text.length,\n\t\t});\n\t}\n\n\treturn result;\n}\n\nmodule.exports = fill;\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/libs/handlebars/ircmessageparser/fill.js","var Handlebars = require(\"/home/travis/build/thelounge/lounge/node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = container.invokePartial(require(\"/home/travis/build/thelounge/lounge/client/views/user_name.tpl\"),(depth0 != null ? depth0.from : depth0),{\"name\":\"../user_name\",\"data\":data,\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n + \"is away\\n<i class=\\\"away-message\\\">(\"\n + ((stack1 = __default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/parse.js\")).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.text : depth0),{\"name\":\"parse\",\"hash\":{},\"data\":data})) != null ? stack1 : \"\")\n + \")</i>\\n\";\n},\"usePartial\":true,\"useData\":true});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./client/views/actions/away.tpl\n// module id = 234\n// module chunks = 0","var Handlebars = require(\"/home/travis/build/thelounge/lounge/node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = container.invokePartial(require(\"/home/travis/build/thelounge/lounge/client/views/user_name.tpl\"),(depth0 != null ? depth0.from : depth0),{\"name\":\"../user_name\",\"data\":data,\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n + \"is back\\n\";\n},\"usePartial\":true,\"useData\":true});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./client/views/actions/back.tpl\n// module id = 235\n// module chunks = 0","var Handlebars = require(\"/home/travis/build/thelounge/lounge/node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n return \"\t\t\t<tr>\\n\t\t\t\t<td class=\\\"hostmask\\\">\"\n + container.escapeExpression(container.lambda((depth0 != null ? depth0.hostmask : depth0), depth0))\n + \"</td>\\n\t\t\t\t<td class=\\\"banned_by\\\">\"\n + ((stack1 = __default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/parse.js\")).call(alias1,(depth0 != null ? depth0.banned_by : depth0),{\"name\":\"parse\",\"hash\":{},\"data\":data})) != null ? stack1 : \"\")\n + \"</td>\\n\t\t\t\t<td class=\\\"banned_at\\\">\"\n + ((stack1 = __default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/localetime.js\")).call(alias1,(depth0 != null ? depth0.banned_at : depth0),{\"name\":\"localetime\",\"hash\":{},\"data\":data})) != null ? stack1 : \"\")\n + \"</td>\\n\t\t\t</tr>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \"<table class=\\\"ban-list\\\">\\n\t<thead>\\n\t\t<tr>\\n\t\t\t<th class=\\\"hostmask\\\">Banned</th>\\n\t\t\t<th class=\\\"banned_by\\\">Banned By</th>\\n\t\t\t<th class=\\\"banned_at\\\">Banned At</th>\\n\t\t</tr>\\n\t</thead>\\n\t<tbody>\\n\"\n + ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.bans : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t</tbody>\\n</table>\\n\";\n},\"useData\":true});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./client/views/actions/ban_list.tpl\n// module id = 236\n// module chunks = 0","var Handlebars = require(\"/home/travis/build/thelounge/lounge/node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n return \"\t\t\t<tr>\\n\t\t\t\t<td class=\\\"channel\\\">\"\n + ((stack1 = __default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/parse.js\")).call(alias1,(depth0 != null ? depth0.channel : depth0),{\"name\":\"parse\",\"hash\":{},\"data\":data})) != null ? stack1 : \"\")\n + \"</td>\\n\t\t\t\t<td class=\\\"users\\\">\"\n + container.escapeExpression(container.lambda((depth0 != null ? depth0.num_users : depth0), depth0))\n + \"</td>\\n\t\t\t\t<td class=\\\"topic\\\">\"\n + ((stack1 = __default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/parse.js\")).call(alias1,(depth0 != null ? depth0.topic : depth0),{\"name\":\"parse\",\"hash\":{},\"data\":data})) != null ? stack1 : \"\")\n + \"</td>\\n\t\t\t</tr>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \"<table class=\\\"channel-list\\\">\\n\t<thead>\\n\t\t<tr>\\n\t\t\t<th class=\\\"channel\\\">Channel</th>\\n\t\t\t<th class=\\\"users\\\">Users</th>\\n\t\t\t<th class=\\\"topic\\\">Topic</th>\\n\t\t</tr>\\n\t</thead>\\n\t<tbody>\\n\"\n + ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.channels : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t</tbody>\\n</table>\\n\";\n},\"useData\":true});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./client/views/actions/channel_list.tpl\n// module id = 237\n// module chunks = 0","var Handlebars = require(\"/home/travis/build/thelounge/lounge/node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \"username to <b>\"\n + container.escapeExpression(container.lambda((depth0 != null ? depth0.new_ident : depth0), depth0))\n + \"</b>\"\n + ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.new_host : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(2, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"2\":function(container,depth0,helpers,partials,data) {\n return \", and\";\n},\"4\":function(container,depth0,helpers,partials,data) {\n return \"hostname to <i class=\\\"hostmask\\\">\"\n + container.escapeExpression(container.lambda((depth0 != null ? depth0.new_host : depth0), depth0))\n + \"</i>\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n return ((stack1 = container.invokePartial(require(\"/home/travis/build/thelounge/lounge/client/views/user_name.tpl\"),depth0,{\"name\":\"../user_name\",\"hash\":{\"mode\":((stack1 = (depth0 != null ? depth0.from : depth0)) != null ? stack1.mode : stack1),\"nick\":((stack1 = (depth0 != null ? depth0.from : depth0)) != null ? stack1.nick : stack1)},\"data\":data,\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n + \"has changed\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.new_ident : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.new_host : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\";\n},\"usePartial\":true,\"useData\":true});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./client/views/actions/chghost.tpl\n// module id = 238\n// module chunks = 0","var Handlebars = require(\"/home/travis/build/thelounge/lounge/node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = container.invokePartial(require(\"/home/travis/build/thelounge/lounge/client/views/user_name.tpl\"),(depth0 != null ? depth0.from : depth0),{\"name\":\"../user_name\",\"data\":data,\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n + \"<b>\"\n + container.escapeExpression(container.lambda((depth0 != null ? depth0.ctcpType : depth0), depth0))\n + \"</b> <span class=\\\"ctcp-message\\\">\"\n + ((stack1 = __default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/parse.js\")).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.ctcpMessage : depth0),{\"name\":\"parse\",\"hash\":{},\"data\":data})) != null ? stack1 : \"\")\n + \"</span>\\n\";\n},\"usePartial\":true,\"useData\":true});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./client/views/actions/ctcp.tpl\n// module id = 239\n// module chunks = 0","var Handlebars = require(\"/home/travis/build/thelounge/lounge/node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n return \"\tyou\\n\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = container.invokePartial(require(\"/home/travis/build/thelounge/lounge/client/views/user_name.tpl\"),(depth0 != null ? depth0.target : depth0),{\"name\":\"../user_name\",\"data\":data,\"indent\":\"\\t\",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n return ((stack1 = container.invokePartial(require(\"/home/travis/build/thelounge/lounge/client/views/user_name.tpl\"),(depth0 != null ? depth0.from : depth0),{\"name\":\"../user_name\",\"data\":data,\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n + \"invited\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.invitedYou : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.program(3, data, 0),\"data\":data})) != null ? stack1 : \"\")\n + \"to\\n\"\n + ((stack1 = __default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/parse.js\")).call(alias1,(depth0 != null ? depth0.channel : depth0),{\"name\":\"parse\",\"hash\":{},\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\";\n},\"usePartial\":true,\"useData\":true});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./client/views/actions/invite.tpl\n// module id = 240\n// module chunks = 0","var Handlebars = require(\"/home/travis/build/thelounge/lounge/node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = container.invokePartial(require(\"/home/travis/build/thelounge/lounge/client/views/user_name.tpl\"),(depth0 != null ? depth0.from : depth0),{\"name\":\"../user_name\",\"data\":data,\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n + \"<i class=\\\"hostmask\\\">(\"\n + container.escapeExpression(container.lambda((depth0 != null ? depth0.hostmask : depth0), depth0))\n + \")</i>\\nhas joined the channel\\n\";\n},\"usePartial\":true,\"useData\":true});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./client/views/actions/join.tpl\n// module id = 241\n// module chunks = 0","var Handlebars = require(\"/home/travis/build/thelounge/lounge/node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \"\t<i class=\\\"part-reason\\\">(\"\n + ((stack1 = __default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/parse.js\")).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.text : depth0),{\"name\":\"parse\",\"hash\":{},\"data\":data})) != null ? stack1 : \"\")\n + \")</i>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = container.invokePartial(require(\"/home/travis/build/thelounge/lounge/client/views/user_name.tpl\"),(depth0 != null ? depth0.from : depth0),{\"name\":\"../user_name\",\"data\":data,\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n + \"has kicked\\n\"\n + ((stack1 = container.invokePartial(require(\"/home/travis/build/thelounge/lounge/client/views/user_name.tpl\"),(depth0 != null ? depth0.target : depth0),{\"name\":\"../user_name\",\"data\":data,\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n + ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.text : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"usePartial\":true,\"useData\":true});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./client/views/actions/kick.tpl\n// module id = 242\n// module chunks = 0","var Handlebars = require(\"/home/travis/build/thelounge/lounge/node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = container.invokePartial(require(\"/home/travis/build/thelounge/lounge/client/views/user_name.tpl\"),(depth0 != null ? depth0.from : depth0),{\"name\":\"../user_name\",\"data\":data,\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n + \"sets mode\\n\"\n + ((stack1 = __default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/parse.js\")).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.text : depth0),{\"name\":\"parse\",\"hash\":{},\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\";\n},\"usePartial\":true,\"useData\":true});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./client/views/actions/mode.tpl\n// module id = 243\n// module chunks = 0","var Handlebars = require(\"/home/travis/build/thelounge/lounge/node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = container.invokePartial(require(\"/home/travis/build/thelounge/lounge/client/views/user_name.tpl\"),(depth0 != null ? depth0.from : depth0),{\"name\":\"../user_name\",\"data\":data,\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n + \"is now known as\\n\"\n + ((stack1 = container.invokePartial(require(\"/home/travis/build/thelounge/lounge/client/views/user_name.tpl\"),depth0,{\"name\":\"../user_name\",\"hash\":{\"mode\":((stack1 = (depth0 != null ? depth0.from : depth0)) != null ? stack1.mode : stack1),\"nick\":(depth0 != null ? depth0.new_nick : depth0)},\"data\":data,\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"usePartial\":true,\"useData\":true});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./client/views/actions/nick.tpl\n// module id = 244\n// module chunks = 0","var Handlebars = require(\"/home/travis/build/thelounge/lounge/node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \"\t<i class=\\\"part-reason\\\">(\"\n + ((stack1 = __default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/parse.js\")).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.text : depth0),{\"name\":\"parse\",\"hash\":{},\"data\":data})) != null ? stack1 : \"\")\n + \")</i>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = container.invokePartial(require(\"/home/travis/build/thelounge/lounge/client/views/user_name.tpl\"),(depth0 != null ? depth0.from : depth0),{\"name\":\"../user_name\",\"data\":data,\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n + \"<i class=\\\"hostmask\\\">(\"\n + container.escapeExpression(container.lambda((depth0 != null ? depth0.hostmask : depth0), depth0))\n + \")</i>\\nhas left the channel\\n\"\n + ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.text : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"usePartial\":true,\"useData\":true});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./client/views/actions/part.tpl\n// module id = 245\n// module chunks = 0","var Handlebars = require(\"/home/travis/build/thelounge/lounge/node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \"\t<i class=\\\"quit-reason\\\">(\"\n + ((stack1 = __default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/parse.js\")).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.text : depth0),{\"name\":\"parse\",\"hash\":{},\"data\":data})) != null ? stack1 : \"\")\n + \")</i>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = container.invokePartial(require(\"/home/travis/build/thelounge/lounge/client/views/user_name.tpl\"),(depth0 != null ? depth0.from : depth0),{\"name\":\"../user_name\",\"data\":data,\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n + \"<i class=\\\"hostmask\\\">(\"\n + container.escapeExpression(container.lambda((depth0 != null ? depth0.hostmask : depth0), depth0))\n + \")</i>\\nhas quit\\n\"\n + ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.text : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"usePartial\":true,\"useData\":true});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./client/views/actions/quit.tpl\n// module id = 246\n// module chunks = 0","var Handlebars = require(\"/home/travis/build/thelounge/lounge/node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = container.invokePartial(require(\"/home/travis/build/thelounge/lounge/client/views/user_name.tpl\"),(depth0 != null ? depth0.from : depth0),{\"name\":\"../user_name\",\"data\":data,\"indent\":\"\\t\",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n + \"\thas changed the topic to:\\n\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n return \"\tThe topic is:\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n return ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.from : depth0)) != null ? stack1.nick : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.program(3, data, 0),\"data\":data})) != null ? stack1 : \"\")\n + \"\\n<span class=\\\"new-topic\\\">\"\n + ((stack1 = __default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/parse.js\")).call(alias1,(depth0 != null ? depth0.text : depth0),{\"name\":\"parse\",\"hash\":{},\"data\":data})) != null ? stack1 : \"\")\n + \"</span>\\n\";\n},\"usePartial\":true,\"useData\":true});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./client/views/actions/topic.tpl\n// module id = 247\n// module chunks = 0","var Handlebars = require(\"/home/travis/build/thelounge/lounge/node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \"Topic set by\\n\"\n + ((stack1 = container.invokePartial(require(\"/home/travis/build/thelounge/lounge/client/views/user_name.tpl\"),(depth0 != null ? depth0.from : depth0),{\"name\":\"../user_name\",\"data\":data,\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n + \"on \"\n + container.escapeExpression(__default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/localetime.js\")).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.when : depth0),{\"name\":\"localetime\",\"hash\":{},\"data\":data}))\n + \"\\n\";\n},\"usePartial\":true,\"useData\":true});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./client/views/actions/topic_set_by.tpl\n// module id = 248\n// module chunks = 0","var Handlebars = require(\"/home/travis/build/thelounge/lounge/node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \"\t<dt>Logged in as:</dt>\\n\t<dd>\"\n + container.escapeExpression(container.lambda(((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.account : stack1), depth0))\n + \"</dd>\\n\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression;\n\n return \"\t<dt>Actual host:</dt>\\n\t<dd class=\\\"hostmask\\\"><a href=\\\"https://ipinfo.io/\"\n + alias2(alias1(((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.actualip : stack1), depth0))\n + \"\\\" target=\\\"_blank\\\" rel=\\\"noopener\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.actualip : stack1), depth0))\n + \"</a>\"\n + ((stack1 = __default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/notEqual.js\")).call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.actualhost : stack1),((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.actualip : stack1),{\"name\":\"notEqual\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"</dd>\\n\";\n},\"4\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \" (\"\n + container.escapeExpression(container.lambda(((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.actualhost : stack1), depth0))\n + \")\";\n},\"6\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \"\t<dt>Real name:</dt>\\n\t<dd>\"\n + ((stack1 = __default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/parse.js\")).call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.real_name : stack1),{\"name\":\"parse\",\"hash\":{},\"data\":data})) != null ? stack1 : \"\")\n + \"</dd>\\n\";\n},\"8\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \"\t<dt>Registered nick:</dt>\\n\t<dd>\"\n + container.escapeExpression(container.lambda(((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.registered_nick : stack1), depth0))\n + \"</dd>\\n\";\n},\"10\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \"\t<dt>Channels:</dt>\\n\t<dd>\"\n + ((stack1 = __default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/parse.js\")).call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.channels : stack1),{\"name\":\"parse\",\"hash\":{},\"data\":data})) != null ? stack1 : \"\")\n + \"</dd>\\n\";\n},\"12\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \"\t<dt>Modes:</dt>\\n\t<dd>\"\n + container.escapeExpression(container.lambda(((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.modes : stack1), depth0))\n + \"</dd>\\n\";\n},\"14\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \"\t<dt>Special:</dt>\\n\t<dd>\"\n + container.escapeExpression(container.lambda(((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.special : stack1), depth0))\n + \"</dd>\\n\";\n},\"16\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \"\t<dt>Operator:</dt>\\n\t<dd>\"\n + container.escapeExpression(container.lambda(((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.operator : stack1), depth0))\n + \"</dd>\\n\";\n},\"18\":function(container,depth0,helpers,partials,data) {\n return \"\t<dt>Available for help:</dt>\\n\t<dd>Yes</dd>\\n\";\n},\"20\":function(container,depth0,helpers,partials,data) {\n return \"\t<dt>Is a bot:</dt>\\n\t<dd>Yes</dd>\\n\";\n},\"22\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \"\t<dt>Away:</dt>\\n\t<dd>\"\n + ((stack1 = __default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/parse.js\")).call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.away : stack1),{\"name\":\"parse\",\"hash\":{},\"data\":data})) != null ? stack1 : \"\")\n + \"</dd>\\n\";\n},\"24\":function(container,depth0,helpers,partials,data) {\n return \"\t<dt>Secure connection:</dt>\\n\t<dd>Yes</dd>\\n\";\n},\"26\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression;\n\n return \"\t<dt>Connected to:</dt>\\n\t<dd>\"\n + alias2(alias1(((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.server : stack1), depth0))\n + \" <i>(\"\n + alias2(alias1(((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.server_info : stack1), depth0))\n + \")</i></dd>\\n\";\n},\"28\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \"\t<dt>Connected at:</dt>\\n\t<dd>\"\n + container.escapeExpression(__default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/localetime.js\")).call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.logonTime : stack1),{\"name\":\"localetime\",\"hash\":{},\"data\":data}))\n + \"</dd>\\n\";\n},\"30\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \"\t<dt>Idle since:</dt>\\n\t<dd>\"\n + container.escapeExpression(__default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/localetime.js\")).call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.idleTime : stack1),{\"name\":\"localetime\",\"hash\":{},\"data\":data}))\n + \"</dd>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.lambda, alias3=container.escapeExpression;\n\n return \"<p>\"\n + ((stack1 = container.invokePartial(require(\"/home/travis/build/thelounge/lounge/client/views/user_name.tpl\"),depth0,{\"name\":\"../user_name\",\"hash\":{\"nick\":((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.nick : stack1)},\"data\":data,\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n + \"</p>\\n<dl class=\\\"whois\\\">\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.account : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\t<dt>Host mask:</dt>\\n\t<dd class=\\\"hostmask\\\">\"\n + alias3(alias2(((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.user : stack1), depth0))\n + \"@\"\n + alias3(alias2(((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.host : stack1), depth0))\n + \"</dd>\\n\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.actualhost : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.real_name : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(6, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.registered_nick : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(8, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.channels : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(10, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.modes : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(12, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.special : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(14, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.operator : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(16, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.helpop : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(18, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.bot : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(20, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.away : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(22, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.secure : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(24, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.server : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(26, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.logonTime : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(28, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.whois : depth0)) != null ? stack1.idle : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(30, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"</dl>\\n\";\n},\"usePartial\":true,\"useData\":true});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./client/views/actions/whois.tpl\n// module id = 249\n// module chunks = 0","var Handlebars = require(\"/home/travis/build/thelounge/lounge/node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, alias3=depth0 != null ? depth0 : (container.nullContext || {});\n\n return \"<div\\n\tid=\\\"chan-\"\n + alias2(alias1((depth0 != null ? depth0.id : depth0), depth0))\n + \"\\\"\\n\tclass=\\\"chan \"\n + alias2(alias1((depth0 != null ? depth0.type : depth0), depth0))\n + \"\\\"\\n\tdata-id=\\\"\"\n + alias2(alias1((depth0 != null ? depth0.id : depth0), depth0))\n + \"\\\"\\n\tdata-title=\\\"\"\n + alias2(alias1((depth0 != null ? depth0.name : depth0), depth0))\n + \"\\\"\\n\tdata-type=\\\"\"\n + alias2(alias1((depth0 != null ? depth0.type : depth0), depth0))\n + \"\\\"\\n>\\n\t<div class=\\\"header\\\">\\n\t\t<button class=\\\"lt\\\" aria-label=\\\"Toggle channel list\\\"></button>\\n\"\n + ((stack1 = __default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/equal.js\")).call(alias3,(depth0 != null ? depth0.type : depth0),\"channel\",{\"name\":\"equal\",\"hash\":{},\"fn\":container.program(2, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t\t<button class=\\\"menu\\\" aria-label=\\\"Open the context menu\\\"></button>\\n\t\t<span class=\\\"title\\\">\"\n + alias2(alias1((depth0 != null ? depth0.name : depth0), depth0))\n + \"</span>\\n\t\t<span title=\\\"\"\n + alias2(alias1((depth0 != null ? depth0.topic : depth0), depth0))\n + \"\\\" class=\\\"topic\\\">\"\n + ((stack1 = __default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/parse.js\")).call(alias3,(depth0 != null ? depth0.topic : depth0),{\"name\":\"parse\",\"hash\":{},\"data\":data})) != null ? stack1 : \"\")\n + \"</span>\\n\t</div>\\n\t<div class=\\\"chat\\\">\\n\t\t<div class=\\\"show-more\"\n + ((stack1 = helpers[\"if\"].call(alias3,((stack1 = (depth0 != null ? depth0.messages : depth0)) != null ? stack1.length : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\\">\\n\t\t\t<button class=\\\"show-more-button\\\" data-id=\\\"\"\n + alias2(alias1((depth0 != null ? depth0.id : depth0), depth0))\n + \"\\\">Show older messages</button>\\n\t\t</div>\\n\t\t<div class=\\\"messages\\\"></div>\\n\t</div>\\n\"\n + ((stack1 = __default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/equal.js\")).call(alias3,(depth0 != null ? depth0.type : depth0),\"channel\",{\"name\":\"equal\",\"hash\":{},\"fn\":container.program(6, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"</div>\\n\";\n},\"2\":function(container,depth0,helpers,partials,data) {\n return \"\t\t\t<span class=\\\"rt-tooltip tooltipped tooltipped-w\\\" aria-label=\\\"Toggle user list\\\">\\n\t\t\t\t<button class=\\\"rt\\\" aria-label=\\\"Toggle user list\\\"></button>\\n\t\t\t</span>\\n\";\n},\"4\":function(container,depth0,helpers,partials,data) {\n return \" show\";\n},\"6\":function(container,depth0,helpers,partials,data) {\n return \"\t<aside class=\\\"sidebar\\\">\\n\t\t<div class=\\\"users\\\">\\n\t\t\t<div class=\\\"count\\\">\\n\t\t\t\t<input type=\\\"search\\\" class=\\\"search\\\" aria-label=\\\"Search among the user list\\\" tabindex=\\\"-1\\\">\\n\t\t\t</div>\\n\t\t\t<div class=\\\"names names-filtered\\\"></div>\\n\t\t\t<div class=\\\"names names-original\\\"></div>\\n\t\t</div>\\n\t</aside>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.channels : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"useData\":true});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./client/views/chat.tpl\n// module id = 250\n// module chunks = 0","var Handlebars = require(\"/home/travis/build/thelounge/lounge/node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n return \"<li class=\\\"context-menu-divider\\\" />\\n\";\n},\"useData\":true});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./client/views/contextmenu_divider.tpl\n// module id = 251\n// module chunks = 0","var Handlebars = require(\"/home/travis/build/thelounge/lounge/node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var helper;\n\n return \" data-data=\\\"\"\n + container.escapeExpression(((helper = (helper = helpers.data || (depth0 != null ? depth0.data : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"data\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\"\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"<li class=\\\"context-menu-item context-menu-\"\n + alias4(((helper = (helper = helpers[\"class\"] || (depth0 != null ? depth0[\"class\"] : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"class\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" data-action=\\\"\"\n + alias4(((helper = (helper = helpers.action || (depth0 != null ? depth0.action : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"action\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\"\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.data : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \">\\n\t\"\n + alias4(((helper = (helper = helpers.text || (depth0 != null ? depth0.text : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"text\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\n</li>\\n\";\n},\"useData\":true});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./client/views/contextmenu_item.tpl\n// module id = 252\n// module chunks = 0","var Handlebars = require(\"/home/travis/build/thelounge/lounge/node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var alias1=container.escapeExpression, alias2=depth0 != null ? depth0 : (container.nullContext || {});\n\n return \"<div class=\\\"date-marker-container tooltipped tooltipped-s\\\" data-time=\\\"\"\n + alias1(container.lambda((depth0 != null ? depth0.time : depth0), depth0))\n + \"\\\" aria-label=\\\"\"\n + alias1(__default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/localedate.js\")).call(alias2,(depth0 != null ? depth0.time : depth0),{\"name\":\"localedate\",\"hash\":{},\"data\":data}))\n + \"\\\">\\n\t<div class=\\\"date-marker\\\">\\n\t\t<span class=\\\"date-marker-text\\\" data-label=\\\"\"\n + alias1(__default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/friendlydate.js\")).call(alias2,(depth0 != null ? depth0.time : depth0),{\"name\":\"friendlydate\",\"hash\":{},\"data\":data}))\n + \"\\\"></span>\\n\t</div>\\n</div>\\n\";\n},\"useData\":true});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./client/views/date_marker.tpl\n// module id = 253\n// module chunks = 0","\"use strict\";\n\nconst moment = require(\"moment\");\n\nmodule.exports = function(time) {\n\treturn moment(time).format(\"D MMMM YYYY\");\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/libs/handlebars/localedate.js","\"use strict\";\n\nconst moment = require(\"moment\");\n\nmodule.exports = function(time) {\n\t// See http://momentjs.com/docs/#/displaying/calendar-time/\n\treturn moment(time).calendar(null, {\n\t\tsameDay: \"[Today]\",\n\t\tlastDay: \"[Yesterday]\",\n\t\tlastWeek: \"D MMMM YYYY\",\n\t\tsameElse: \"D MMMM YYYY\",\n\t});\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/libs/handlebars/friendlydate.js","var Handlebars = require(\"/home/travis/build/thelounge/lounge/node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n return \" <button class=\\\"previous-image-btn\\\" aria-label=\\\"Previous image\\\"></button>\\n\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n return \" <button class=\\\"next-image-btn\\\" aria-label=\\\"Next image\\\"></button>\\n\";\n},\"5\":function(container,depth0,helpers,partials,data) {\n return \" Open image\\n\";\n},\"7\":function(container,depth0,helpers,partials,data) {\n return \" Visit page\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.lambda, alias3=container.escapeExpression;\n\n return \"<button class=\\\"close-btn\\\" aria-label=\\\"Close\\\"></button>\\n\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.hasPreviousImage : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.hasNextImage : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n<a class=\\\"image-link\\\" href=\\\"\"\n + alias3(alias2((depth0 != null ? depth0.link : depth0), depth0))\n + \"\\\" target=\\\"_blank\\\">\\n <img src=\\\"\"\n + alias3(alias2((depth0 != null ? depth0.image : depth0), depth0))\n + \"\\\" decoding=\\\"async\\\" alt=\\\"\\\">\\n</a>\\n\\n<a class=\\\"btn open-btn\\\" href=\\\"\"\n + alias3(alias2((depth0 != null ? depth0.link : depth0), depth0))\n + \"\\\" target=\\\"_blank\\\">\\n\"\n + ((stack1 = __default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/equal.js\")).call(alias1,(depth0 != null ? depth0.type : depth0),\"image\",{\"name\":\"equal\",\"hash\":{},\"fn\":container.program(5, data, 0),\"inverse\":container.program(7, data, 0),\"data\":data})) != null ? stack1 : \"\")\n + \"</a>\\n\";\n},\"useData\":true});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./client/views/image_viewer.tpl\n// module id = 256\n// module chunks = 0","var Handlebars = require(\"/home/travis/build/thelounge/lounge/node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n return \" self\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n return \" highlight\";\n},\"5\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \" data-from=\\\"\"\n + container.escapeExpression(container.lambda(((stack1 = (depth0 != null ? depth0.from : depth0)) != null ? stack1.nick : stack1), depth0))\n + \"\\\"\";\n},\"7\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = container.invokePartial(require(\"/home/travis/build/thelounge/lounge/client/views/user_name.tpl\"),(depth0 != null ? depth0.from : depth0),{\"name\":\"user_name\",\"data\":data,\"indent\":\"\\t\\t\\t\",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"9\":function(container,depth0,helpers,partials,data) {\n return \"\t\t\t<div class=\\\"preview\\\" data-url=\\\"\"\n + container.escapeExpression(container.lambda((depth0 != null ? depth0.link : depth0), depth0))\n + \"\\\"></div>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, alias3=depth0 != null ? depth0 : (container.nullContext || {});\n\n return \"<div class=\\\"msg \"\n + alias2(alias1((depth0 != null ? depth0.type : depth0), depth0))\n + ((stack1 = helpers[\"if\"].call(alias3,(depth0 != null ? depth0.self : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + ((stack1 = helpers[\"if\"].call(alias3,(depth0 != null ? depth0.highlight : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\\" id=\\\"msg-\"\n + alias2(alias1((depth0 != null ? depth0.id : depth0), depth0))\n + \"\\\" data-time=\\\"\"\n + alias2(alias1((depth0 != null ? depth0.time : depth0), depth0))\n + \"\\\"\"\n + ((stack1 = helpers[\"if\"].call(alias3,((stack1 = (depth0 != null ? depth0.from : depth0)) != null ? stack1.nick : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(5, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \">\\n\t<span class=\\\"time tooltipped tooltipped-e\\\" aria-label=\\\"\"\n + alias2(__default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/localetime.js\")).call(alias3,(depth0 != null ? depth0.time : depth0),{\"name\":\"localetime\",\"hash\":{},\"data\":data}))\n + \"\\\">\\n\t\t\"\n + alias2(__default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/tz.js\")).call(alias3,(depth0 != null ? depth0.time : depth0),{\"name\":\"tz\",\"hash\":{},\"data\":data}))\n + \"\\n\t</span>\\n\t<span class=\\\"from\\\">\\n\"\n + ((stack1 = helpers[\"if\"].call(alias3,((stack1 = (depth0 != null ? depth0.from : depth0)) != null ? stack1.nick : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(7, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t</span>\\n\t<span class=\\\"content\\\">\\n\t\t<span class=\\\"text\\\">\"\n + ((stack1 = __default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/parse.js\")).call(alias3,(depth0 != null ? depth0.text : depth0),(depth0 != null ? depth0.users : depth0),{\"name\":\"parse\",\"hash\":{},\"data\":data})) != null ? stack1 : \"\")\n + \"</span>\\n\\n\"\n + ((stack1 = helpers.each.call(alias3,(depth0 != null ? depth0.previews : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(9, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t</span>\\n</div>\\n\";\n},\"usePartial\":true,\"useData\":true});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./client/views/msg.tpl\n// module id = 257\n// module chunks = 0","\"use strict\";\n\nconst $ = require(\"jquery\");\nconst fuzzy = require(\"fuzzy\");\nconst Mousetrap = require(\"mousetrap\");\nconst {Textcomplete, Textarea} = require(\"textcomplete\");\nconst emojiMap = require(\"./libs/simplemap.json\");\nconst options = require(\"./options\");\nconst constants = require(\"./constants\");\n\nconst input = $(\"#input\");\nlet textcomplete;\n\nmodule.exports = {\n\tenable: enableAutocomplete,\n\tdisable: () => {\n\t\tinput.off(\"input.tabcomplete\");\n\t\tMousetrap(input.get(0)).off(\"tab\", \"keydown\");\n\n\t\tif (textcomplete) {\n\t\t\ttextcomplete.destroy();\n\t\t\ttextcomplete = null;\n\t\t}\n\t},\n};\n\nconst chat = $(\"#chat\");\nconst sidebar = $(\"#sidebar\");\nconst emojiSearchTerms = Object.keys(emojiMap);\nconst emojiStrategy = {\n\tid: \"emoji\",\n\tmatch: /\\B:([-+\\w:?]{2,}):?$/,\n\tsearch(term, callback) {\n\t\t// Trim colon from the matched term,\n\t\t// as we are unable to get a clean string from match regex\n\t\tterm = term.replace(/:$/, \"\"),\n\t\tcallback(fuzzyGrep(term, emojiSearchTerms));\n\t},\n\ttemplate([string, original]) {\n\t\treturn `<span class=\"emoji\">${emojiMap[original]}</span> ${string}`;\n\t},\n\treplace([, original]) {\n\t\treturn emojiMap[original];\n\t},\n\tindex: 1,\n};\n\nconst nicksStrategy = {\n\tid: \"nicks\",\n\tmatch: /\\B(@([a-zA-Z_[\\]\\\\^{}|`@][a-zA-Z0-9_[\\]\\\\^{}|`-]*)?)$/,\n\tsearch(term, callback) {\n\t\tterm = term.slice(1);\n\t\tif (term[0] === \"@\") {\n\t\t\tcallback(completeNicks(term.slice(1), true)\n\t\t\t\t.map((val) => [\"@\" + val[0], \"@\" + val[1]]));\n\t\t} else {\n\t\t\tcallback(completeNicks(term, true));\n\t\t}\n\t},\n\ttemplate([string]) {\n\t\treturn string;\n\t},\n\treplace([, original], position = 1) {\n\t\t// If no postfix specified, return autocompleted nick as-is\n\t\tif (!options.nickPostfix) {\n\t\t\treturn original;\n\t\t}\n\n\t\t// If there is whitespace in the input already, append space to nick\n\t\tif (position > 0 && /\\s/.test(input.val())) {\n\t\t\treturn original + \" \";\n\t\t}\n\n\t\t// If nick is first in the input, append specified postfix\n\t\treturn original + options.nickPostfix;\n\t},\n\tindex: 1,\n};\n\nconst chanStrategy = {\n\tid: \"chans\",\n\tmatch: /\\B((#|\\+|&|![A-Z0-9]{5})([^\\x00\\x0A\\x0D\\x20\\x2C\\x3A]+(:[^\\x00\\x0A\\x0D\\x20\\x2C\\x3A]*)?)?)$/,\n\tsearch(term, callback, match) {\n\t\tcallback(completeChans(match[0]));\n\t},\n\ttemplate([string]) {\n\t\treturn string;\n\t},\n\treplace([, original]) {\n\t\treturn original;\n\t},\n\tindex: 1,\n};\n\nconst commandStrategy = {\n\tid: \"commands\",\n\tmatch: /^\\/(\\w*)$/,\n\tsearch(term, callback) {\n\t\tcallback(completeCommands(\"/\" + term));\n\t},\n\ttemplate([string]) {\n\t\treturn string;\n\t},\n\treplace([, original]) {\n\t\treturn original;\n\t},\n\tindex: 1,\n};\n\nconst foregroundColorStrategy = {\n\tid: \"foreground-colors\",\n\tmatch: /\\x03(\\d{0,2}|[A-Za-z ]{0,10})$/,\n\tsearch(term, callback) {\n\t\tterm = term.toLowerCase();\n\n\t\tconst matchingColorCodes = constants.colorCodeMap\n\t\t\t.filter((i) => fuzzy.test(term, i[0]) || fuzzy.test(term, i[1]))\n\t\t\t.map((i) => {\n\t\t\t\tif (fuzzy.test(term, i[1])) {\n\t\t\t\t\treturn [i[0], fuzzy.match(term, i[1], {\n\t\t\t\t\t\tpre: \"<b>\",\n\t\t\t\t\t\tpost: \"</b>\",\n\t\t\t\t\t}).rendered];\n\t\t\t\t}\n\t\t\t\treturn i;\n\t\t\t});\n\n\t\tcallback(matchingColorCodes);\n\t},\n\ttemplate(value) {\n\t\treturn `<span class=\"irc-fg${parseInt(value[0], 10)}\">${value[1]}</span>`;\n\t},\n\treplace(value) {\n\t\treturn \"\\x03\" + value[0];\n\t},\n\tindex: 1,\n};\n\nconst backgroundColorStrategy = {\n\tid: \"background-colors\",\n\tmatch: /\\x03(\\d{2}),(\\d{0,2}|[A-Za-z ]{0,10})$/,\n\tsearch(term, callback, match) {\n\t\tterm = term.toLowerCase();\n\t\tconst matchingColorCodes = constants.colorCodeMap\n\t\t\t.filter((i) => fuzzy.test(term, i[0]) || fuzzy.test(term, i[1]))\n\t\t\t.map((pair) => {\n\t\t\t\tif (fuzzy.test(term, pair[1])) {\n\t\t\t\t\treturn [pair[0], fuzzy.match(term, pair[1], {\n\t\t\t\t\t\tpre: \"<b>\",\n\t\t\t\t\t\tpost: \"</b>\",\n\t\t\t\t\t}).rendered];\n\t\t\t\t}\n\t\t\t\treturn pair;\n\t\t\t})\n\t\t\t.map((pair) => pair.concat(match[1])); // Needed to pass fg color to `template`...\n\n\t\tcallback(matchingColorCodes);\n\t},\n\ttemplate(value) {\n\t\treturn `<span class=\"irc-fg${parseInt(value[2], 10)} irc-bg irc-bg${parseInt(value[0], 10)}\">${value[1]}</span>`;\n\t},\n\treplace(value) {\n\t\treturn \"\\x03$1,\" + value[0];\n\t},\n\tindex: 2,\n};\n\nfunction enableAutocomplete() {\n\tlet tabCount = 0;\n\tlet lastMatch = \"\";\n\tlet currentMatches = [];\n\n\tinput.on(\"input.tabcomplete\", () => {\n\t\ttabCount = 0;\n\t\tcurrentMatches = [];\n\t\tlastMatch = \"\";\n\t});\n\n\tMousetrap(input.get(0)).bind(\"tab\", (e) => {\n\t\tif (input.data(\"autocompleting\")) {\n\t\t\treturn;\n\t\t}\n\n\t\te.preventDefault();\n\n\t\tconst text = input.val();\n\n\t\tif (input.get(0).selectionStart !== text.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (tabCount === 0) {\n\t\t\tlastMatch = text.split(/\\s/).pop();\n\n\t\t\tif (lastMatch.length === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcurrentMatches = completeNicks(lastMatch, false);\n\n\t\t\tif (currentMatches.length === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tconst position = input.get(0).selectionStart - lastMatch.length;\n\t\tconst newMatch = nicksStrategy.replace([0, currentMatches[tabCount % currentMatches.length]], position);\n\n\t\tinput.val(text.substr(0, position) + newMatch);\n\n\t\tlastMatch = newMatch;\n\t\ttabCount++;\n\t}, \"keydown\");\n\n\tconst editor = new Textarea(input.get(0));\n\ttextcomplete = new Textcomplete(editor, {\n\t\tdropdown: {\n\t\t\tclassName: \"textcomplete-menu\",\n\t\t\tplacement: \"top\",\n\t\t},\n\t});\n\n\ttextcomplete.register([\n\t\temojiStrategy,\n\t\tnicksStrategy,\n\t\tchanStrategy,\n\t\tcommandStrategy,\n\t\tforegroundColorStrategy,\n\t\tbackgroundColorStrategy,\n\t]);\n\n\t// Activate the first item by default\n\t// https://github.com/yuku-t/textcomplete/issues/93\n\ttextcomplete.on(\"rendered\", () => {\n\t\tif (textcomplete.dropdown.items.length > 0) {\n\t\t\ttextcomplete.dropdown.items[0].activate();\n\t\t}\n\t});\n\n\ttextcomplete.on(\"show\", () => {\n\t\tinput.data(\"autocompleting\", true);\n\t});\n\n\ttextcomplete.on(\"hidden\", () => {\n\t\tinput.data(\"autocompleting\", false);\n\t});\n}\n\nfunction fuzzyGrep(term, array) {\n\tconst results = fuzzy.filter(\n\t\tterm,\n\t\tarray,\n\t\t{\n\t\t\tpre: \"<b>\",\n\t\t\tpost: \"</b>\",\n\t\t}\n\t);\n\treturn results.map((el) => [el.string, el.original]);\n}\n\nfunction completeNicks(word, isFuzzy) {\n\tconst users = chat.find(\".active .users\");\n\tword = word.toLowerCase();\n\n\t// Lobbies and private chats do not have an user list\n\tif (!users.length) {\n\t\treturn [];\n\t}\n\n\tconst words = users.data(\"nicks\");\n\tif (isFuzzy) {\n\t\treturn fuzzyGrep(word, words);\n\t}\n\treturn $.grep(\n\t\twords,\n\t\t(w) => !w.toLowerCase().indexOf(word)\n\t);\n}\n\nfunction completeCommands(word) {\n\tconst words = constants.commands.slice();\n\n\treturn fuzzyGrep(word, words);\n}\n\nfunction completeChans(word) {\n\tconst words = [];\n\n\tsidebar.find(\".chan.active\")\n\t\t.parent()\n\t\t.find(\".chan\")\n\t\t.each(function() {\n\t\t\tconst self = $(this);\n\t\t\tif (!self.hasClass(\"lobby\")) {\n\t\t\t\twords.push(self.data(\"title\"));\n\t\t\t}\n\t\t});\n\n\treturn fuzzyGrep(word, words);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/autocompletion.js","module.exports = {\"100\":\"💯\",\"1234\":\"🔢\",\"interrobang\":\"⁉️\",\"tm\":\"™️\",\"information_source\":\"ℹ️\",\"left_right_arrow\":\"↔️\",\"arrow_up_down\":\"↕️\",\"arrow_upper_left\":\"↖️\",\"arrow_upper_right\":\"↗️\",\"arrow_lower_right\":\"↘️\",\"arrow_lower_left\":\"↙️\",\"keyboard\":\"⌨️\",\"sunny\":\"☀️\",\"cloud\":\"☁️\",\"umbrella2\":\"☂️\",\"snowman2\":\"☃️\",\"comet\":\"☄️\",\"ballot_box_with_check\":\"☑️\",\"umbrella\":\"☔\",\"coffee\":\"☕\",\"shamrock\":\"☘️\",\"skull_crossbones\":\"☠️\",\"radioactive\":\"☢️\",\"biohazard\":\"☣️\",\"orthodox_cross\":\"☦️\",\"wheel_of_dharma\":\"☸️\",\"frowning2\":\"☹️\",\"white_frowning_face\":\"☹️\",\"female_sign\":\"♀️\",\"male_sign\":\"♂️\",\"aries\":\"♈\",\"taurus\":\"♉\",\"sagittarius\":\"♐\",\"capricorn\":\"♑\",\"aquarius\":\"♒\",\"pisces\":\"♓\",\"spades\":\"♠️\",\"clubs\":\"♣️\",\"hearts\":\"♥️\",\"diamonds\":\"♦️\",\"hotsprings\":\"♨️\",\"hammer_pick\":\"⚒️\",\"anchor\":\"⚓\",\"crossed_swords\":\"⚔️\",\"medical_symbol\":\"⚕️\",\"scales\":\"⚖️\",\"alembic\":\"⚗️\",\"gear\":\"⚙️\",\"scissors\":\"✂️\",\"white_check_mark\":\"✅\",\"airplane\":\"✈️\",\"envelope\":\"✉️\",\"black_nib\":\"✒️\",\"heavy_check_mark\":\"✔️\",\"heavy_multiplication_x\":\"✖️\",\"star_of_david\":\"✡️\",\"sparkles\":\"✨\",\"eight_spoked_asterisk\":\"✳️\",\"eight_pointed_black_star\":\"✴️\",\"snowflake\":\"❄️\",\"sparkle\":\"❇️\",\"question\":\"❓\",\"grey_question\":\"❔\",\"grey_exclamation\":\"❕\",\"exclamation\":\"❗\",\"heart_exclamation\":\"❣️\",\"heart\":\"❤️\",\"heavy_plus_sign\":\"➕\",\"heavy_minus_sign\":\"➖\",\"heavy_division_sign\":\"➗\",\"arrow_heading_up\":\"⤴️\",\"arrow_heading_down\":\"⤵️\",\"wavy_dash\":\"〰️\",\"congratulations\":\"㊗️\",\"secret\":\"㊙️\",\"grinning\":\"😀\",\"smiley\":\"😃\",\"smile\":\"😄\",\"grin\":\"😁\",\"laughing\":\"😆\",\"satisfied\":\"😆\",\"sweat_smile\":\"😅\",\"joy\":\"😂\",\"rofl\":\"🤣\",\"relaxed\":\"☺️\",\"blush\":\"😊\",\"innocent\":\"😇\",\"slight_smile\":\"🙂\",\"upside_down\":\"🙃\",\"wink\":\"😉\",\"relieved\":\"😌\",\"heart_eyes\":\"😍\",\"kissing_heart\":\"😘\",\"kissing\":\"😗\",\"kissing_smiling_eyes\":\"😙\",\"kissing_closed_eyes\":\"😚\",\"yum\":\"😋\",\"stuck_out_tongue_winking_eye\":\"😜\",\"stuck_out_tongue_closed_eyes\":\"😝\",\"stuck_out_tongue\":\"😛\",\"money_mouth\":\"🤑\",\"hugging\":\"🤗\",\"nerd\":\"🤓\",\"sunglasses\":\"😎\",\"clown\":\"🤡\",\"cowboy\":\"🤠\",\"smirk\":\"😏\",\"unamused\":\"😒\",\"disappointed\":\"😞\",\"pensive\":\"😔\",\"worried\":\"😟\",\"confused\":\"😕\",\"slight_frown\":\"🙁\",\"persevere\":\"😣\",\"confounded\":\"😖\",\"tired_face\":\"😫\",\"weary\":\"😩\",\"triumph\":\"😤\",\"angry\":\"😠\",\"rage\":\"😡\",\"no_mouth\":\"😶\",\"neutral_face\":\"😐\",\"expressionless\":\"😑\",\"hushed\":\"😯\",\"frowning\":\"😦\",\"anguished\":\"😧\",\"open_mouth\":\"😮\",\"astonished\":\"😲\",\"dizzy_face\":\"😵\",\"flushed\":\"😳\",\"scream\":\"😱\",\"fearful\":\"😨\",\"cold_sweat\":\"😰\",\"cry\":\"😢\",\"disappointed_relieved\":\"😥\",\"drooling_face\":\"🤤\",\"sob\":\"😭\",\"sweat\":\"😓\",\"sleepy\":\"😪\",\"sleeping\":\"😴\",\"rolling_eyes\":\"🙄\",\"thinking\":\"🤔\",\"lying_face\":\"🤥\",\"liar\":\"🤥\",\"grimacing\":\"😬\",\"zipper_mouth\":\"🤐\",\"nauseated_face\":\"🤢\",\"sick\":\"🤢\",\"sneezing_face\":\"🤧\",\"mask\":\"😷\",\"thermometer_face\":\"🤒\",\"face_with_thermometer\":\"🤒\",\"head_bandage\":\"🤕\",\"smiling_imp\":\"😈\",\"imp\":\"👿\",\"japanese_ogre\":\"👹\",\"japanese_goblin\":\"👺\",\"poop\":\"💩\",\"shit\":\"💩\",\"hankey\":\"💩\",\"ghost\":\"👻\",\"skull\":\"💀\",\"skeleton\":\"💀\",\"alien\":\"👽\",\"space_invader\":\"👾\",\"robot\":\"🤖\",\"jack_o_lantern\":\"🎃\",\"smiley_cat\":\"😺\",\"smile_cat\":\"😸\",\"joy_cat\":\"😹\",\"heart_eyes_cat\":\"😻\",\"smirk_cat\":\"😼\",\"kissing_cat\":\"😽\",\"scream_cat\":\"🙀\",\"crying_cat_face\":\"😿\",\"pouting_cat\":\"😾\",\"open_hands\":\"👐\",\"raised_hands\":\"🙌\",\"clap\":\"👏\",\"pray\":\"🙏\",\"handshake\":\"🤝\",\"shaking_hands\":\"🤝\",\"thumbsup\":\"👍\",\"+1\":\"👍\",\"thumbsdown\":\"👎\",\"-1\":\"👎\",\"punch\":\"👊\",\"fist\":\"✊\",\"left_facing_fist\":\"🤛\",\"right_facing_fist\":\"🤜\",\"fingers_crossed\":\"🤞\",\"hand_with_index_and_middle_finger_crossed\":\"🤞\",\"v\":\"✌️\",\"metal\":\"🤘\",\"sign_of_the_horns\":\"🤘\",\"ok_hand\":\"👌\",\"point_left\":\"👈\",\"point_right\":\"👉\",\"point_up_2\":\"👆\",\"point_down\":\"👇\",\"point_up\":\"☝️\",\"raised_hand\":\"✋\",\"raised_back_of_hand\":\"🤚\",\"hand_splayed\":\"🖐️\",\"vulcan\":\"🖖\",\"raised_hand_with_part_between_middle_and_ring_fingers\":\"🖖\",\"wave\":\"👋\",\"call_me\":\"🤙\",\"muscle\":\"💪\",\"middle_finger\":\"🖕\",\"writing_hand\":\"✍️\",\"selfie\":\"🤳\",\"nail_care\":\"💅\",\"ring\":\"💍\",\"lipstick\":\"💄\",\"kiss\":\"💋\",\"lips\":\"👄\",\"tongue\":\"👅\",\"ear\":\"👂\",\"nose\":\"👃\",\"footprints\":\"👣\",\"eye\":\"👁️\",\"eyes\":\"👀\",\"speaking_head\":\"🗣️\",\"bust_in_silhouette\":\"👤\",\"busts_in_silhouette\":\"👥\",\"baby\":\"👶\",\"boy\":\"👦\",\"girl\":\"👧\",\"man\":\"👨\",\"woman\":\"👩\",\"blond_haired_woman\":\"👱‍♀️\",\"blond_haired_person\":\"👱\",\"person_with_blond_hair\":\"👱\",\"blond_haired_man\":\"👱‍♂️\",\"older_man\":\"👴\",\"older_woman\":\"👵\",\"grandma\":\"👵\",\"man_with_chinese_cap\":\"👲\",\"man_with_gua_pi_mao\":\"👲\",\"woman_wearing_turban\":\"👳‍♀️\",\"person_wearing_turban\":\"👳\",\"man_with_turban\":\"👳\",\"man_wearing_turban\":\"👳‍♂️\",\"woman_police_officer\":\"👮‍♀️\",\"police_officer\":\"👮\",\"cop\":\"👮\",\"man_police_officer\":\"👮‍♂️\",\"woman_construction_worker\":\"👷‍♀️\",\"construction_worker\":\"👷\",\"man_construction_worker\":\"👷‍♂️\",\"woman_guard\":\"💂‍♀️\",\"guard\":\"💂\",\"man_guard\":\"💂‍♂️\",\"woman_detective\":\"🕵️‍♀️\",\"detective\":\"🕵️\",\"spy\":\"🕵️\",\"sleuth_or_spy\":\"🕵️\",\"man_detective\":\"🕵️‍♂️\",\"woman_health_worker\":\"👩‍⚕️\",\"man_health_worker\":\"👨‍⚕️\",\"woman_farmer\":\"👩‍🌾\",\"man_farmer\":\"👨‍🌾\",\"woman_cook\":\"👩‍🍳\",\"man_cook\":\"👨‍🍳\",\"woman_student\":\"👩‍🎓\",\"man_student\":\"👨‍🎓\",\"woman_singer\":\"👩‍🎤\",\"man_singer\":\"👨‍🎤\",\"woman_teacher\":\"👩‍🏫\",\"man_teacher\":\"👨‍🏫\",\"woman_factory_worker\":\"👩‍🏭\",\"man_factory_worker\":\"👨‍🏭\",\"woman_technologist\":\"👩‍💻\",\"man_technologist\":\"👨‍💻\",\"woman_office_worker\":\"👩‍💼\",\"man_office_worker\":\"👨‍💼\",\"woman_mechanic\":\"👩‍🔧\",\"man_mechanic\":\"👨‍🔧\",\"woman_scientist\":\"👩‍🔬\",\"man_scientist\":\"👨‍🔬\",\"woman_artist\":\"👩‍🎨\",\"man_artist\":\"👨‍🎨\",\"woman_firefighter\":\"👩‍🚒\",\"man_firefighter\":\"👨‍🚒\",\"woman_pilot\":\"👩‍✈️\",\"man_pilot\":\"👨‍✈️\",\"woman_astronaut\":\"👩‍🚀\",\"man_astronaut\":\"👨‍🚀\",\"woman_judge\":\"👩‍⚖️\",\"man_judge\":\"👨‍⚖️\",\"mrs_claus\":\"🤶\",\"mother_christmas\":\"🤶\",\"santa\":\"🎅\",\"princess\":\"👸\",\"prince\":\"🤴\",\"bride_with_veil\":\"👰\",\"man_in_tuxedo\":\"🤵\",\"angel\":\"👼\",\"pregnant_woman\":\"🤰\",\"expecting_woman\":\"🤰\",\"woman_bowing\":\"🙇‍♀️\",\"person_bowing\":\"🙇\",\"man_bowing\":\"🙇‍♂️\",\"person_tipping_hand\":\"💁\",\"information_desk_person\":\"💁\",\"man_tipping_hand\":\"💁‍♂️\",\"woman_tipping_hand\":\"💁‍♀️\",\"person_gesturing_no\":\"🙅\",\"no_good\":\"🙅\",\"man_gesturing_no\":\"🙅‍♂️\",\"woman_gesturing_no\":\"🙅‍♀️\",\"person_gesturing_ok\":\"🙆\",\"ok_woman\":\"🙆\",\"man_gesturing_ok\":\"🙆‍♂️\",\"woman_gesturing_ok\":\"🙆‍♀️\",\"person_raising_hand\":\"🙋\",\"man_raising_hand\":\"🙋‍♂️\",\"woman_raising_hand\":\"🙋‍♀️\",\"woman_facepalming\":\"🤦‍♀️\",\"man_facepalming\":\"🤦‍♂️\",\"person_facepalming\":\"🤦\",\"face_palm\":\"🤦\",\"woman_shrugging\":\"🤷‍♀️\",\"man_shrugging\":\"🤷‍♂️\",\"person_shrugging\":\"🤷\",\"person_pouting\":\"🙎\",\"man_pouting\":\"🙎‍♂️\",\"woman_pouting\":\"🙎‍♀️\",\"person_frowning\":\"🙍\",\"man_frowning\":\"🙍‍♂️\",\"woman_frowning\":\"🙍‍♀️\",\"person_getting_haircut\":\"💇\",\"man_getting_haircut\":\"💇‍♂️\",\"woman_getting_haircut\":\"💇‍♀️\",\"person_getting_massage\":\"💆\",\"man_getting_face_massage\":\"💆‍♂️\",\"woman_getting_face_massage\":\"💆‍♀️\",\"levitate\":\"🕴️\",\"dancer\":\"💃\",\"man_dancing\":\"🕺\",\"male_dancer\":\"🕺\",\"people_with_bunny_ears_partying\":\"👯\",\"dancers\":\"👯\",\"men_with_bunny_ears_partying\":\"👯‍♂️\",\"women_with_bunny_ears_partying\":\"👯‍♀️\",\"woman_walking\":\"🚶‍♀️\",\"person_walking\":\"🚶\",\"man_walking\":\"🚶‍♂️\",\"woman_running\":\"🏃‍♀️\",\"person_running\":\"🏃\",\"runner\":\"🏃\",\"man_running\":\"🏃‍♂️\",\"couple\":\"👫\",\"two_women_holding_hands\":\"👭\",\"two_men_holding_hands\":\"👬\",\"couple_with_heart\":\"💑\",\"couple_ww\":\"👩‍❤️‍👩\",\"couple_mm\":\"👨‍❤️‍👨\",\"couplekiss\":\"💏\",\"kiss_ww\":\"👩‍❤️‍💋‍👩\",\"kiss_mm\":\"👨‍❤️‍💋‍👨\",\"family\":\"👪\",\"family_mwg\":\"👨‍👩‍👧\",\"family_mwgb\":\"👨‍👩‍👧‍👦\",\"family_mwbb\":\"👨‍👩‍👦‍👦\",\"family_mwgg\":\"👨‍👩‍👧‍👧\",\"family_wwb\":\"👩‍👩‍👦\",\"family_wwg\":\"👩‍👩‍👧\",\"family_wwgb\":\"👩‍👩‍👧‍👦\",\"family_wwbb\":\"👩‍👩‍👦‍👦\",\"family_wwgg\":\"👩‍👩‍👧‍👧\",\"family_mmb\":\"👨‍👨‍👦\",\"family_mmg\":\"👨‍👨‍👧\",\"family_mmgb\":\"👨‍👨‍👧‍👦\",\"family_mmbb\":\"👨‍👨‍👦‍👦\",\"family_mmgg\":\"👨‍👨‍👧‍👧\",\"family_woman_boy\":\"👩‍👦\",\"family_woman_girl\":\"👩‍👧\",\"family_woman_girl_boy\":\"👩‍👧‍👦\",\"family_woman_boy_boy\":\"👩‍👦‍👦\",\"family_woman_girl_girl\":\"👩‍👧‍👧\",\"family_man_boy\":\"👨‍👦\",\"family_man_girl\":\"👨‍👧\",\"family_man_girl_boy\":\"👨‍👧‍👦\",\"family_man_boy_boy\":\"👨‍👦‍👦\",\"family_man_girl_girl\":\"👨‍👧‍👧\",\"womans_clothes\":\"👚\",\"shirt\":\"👕\",\"jeans\":\"👖\",\"necktie\":\"👔\",\"dress\":\"👗\",\"bikini\":\"👙\",\"kimono\":\"👘\",\"high_heel\":\"👠\",\"sandal\":\"👡\",\"boot\":\"👢\",\"mans_shoe\":\"👞\",\"athletic_shoe\":\"👟\",\"womans_hat\":\"👒\",\"tophat\":\"🎩\",\"mortar_board\":\"🎓\",\"crown\":\"👑\",\"helmet_with_cross\":\"⛑️\",\"school_satchel\":\"🎒\",\"pouch\":\"👝\",\"purse\":\"👛\",\"handbag\":\"👜\",\"briefcase\":\"💼\",\"eyeglasses\":\"👓\",\"dark_sunglasses\":\"🕶️\",\"closed_umbrella\":\"🌂\",\"dog\":\"🐶\",\"cat\":\"🐱\",\"mouse\":\"🐭\",\"hamster\":\"🐹\",\"rabbit\":\"🐰\",\"fox\":\"🦊\",\"bear\":\"🐻\",\"panda_face\":\"🐼\",\"koala\":\"🐨\",\"tiger\":\"🐯\",\"lion_face\":\"🦁\",\"cow\":\"🐮\",\"pig\":\"🐷\",\"pig_nose\":\"🐽\",\"frog\":\"🐸\",\"monkey_face\":\"🐵\",\"see_no_evil\":\"🙈\",\"hear_no_evil\":\"🙉\",\"speak_no_evil\":\"🙊\",\"monkey\":\"🐒\",\"chicken\":\"🐔\",\"penguin\":\"🐧\",\"bird\":\"🐦\",\"baby_chick\":\"🐤\",\"hatching_chick\":\"🐣\",\"hatched_chick\":\"🐥\",\"duck\":\"🦆\",\"eagle\":\"🦅\",\"owl\":\"🦉\",\"bat\":\"🦇\",\"wolf\":\"🐺\",\"boar\":\"🐗\",\"horse\":\"🐴\",\"unicorn\":\"🦄\",\"bee\":\"🐝\",\"bug\":\"🐛\",\"butterfly\":\"🦋\",\"snail\":\"🐌\",\"shell\":\"🐚\",\"beetle\":\"🐞\",\"ant\":\"🐜\",\"spider\":\"🕷️\",\"spider_web\":\"🕸️\",\"turtle\":\"🐢\",\"snake\":\"🐍\",\"lizard\":\"🦎\",\"scorpion\":\"🦂\",\"crab\":\"🦀\",\"squid\":\"🦑\",\"octopus\":\"🐙\",\"shrimp\":\"🦐\",\"tropical_fish\":\"🐠\",\"fish\":\"🐟\",\"blowfish\":\"🐡\",\"dolphin\":\"🐬\",\"shark\":\"🦈\",\"whale\":\"🐳\",\"whale2\":\"🐋\",\"crocodile\":\"🐊\",\"leopard\":\"🐆\",\"tiger2\":\"🐅\",\"water_buffalo\":\"🐃\",\"ox\":\"🐂\",\"cow2\":\"🐄\",\"deer\":\"🦌\",\"dromedary_camel\":\"🐪\",\"camel\":\"🐫\",\"elephant\":\"🐘\",\"rhino\":\"🦏\",\"gorilla\":\"🦍\",\"racehorse\":\"🐎\",\"pig2\":\"🐖\",\"goat\":\"🐐\",\"ram\":\"🐏\",\"sheep\":\"🐑\",\"dog2\":\"🐕\",\"poodle\":\"🐩\",\"cat2\":\"🐈\",\"rooster\":\"🐓\",\"turkey\":\"🦃\",\"dove\":\"🕊️\",\"rabbit2\":\"🐇\",\"mouse2\":\"🐁\",\"rat\":\"🐀\",\"chipmunk\":\"🐿️\",\"feet\":\"🐾\",\"paw_prints\":\"🐾\",\"dragon\":\"🐉\",\"dragon_face\":\"🐲\",\"cactus\":\"🌵\",\"christmas_tree\":\"🎄\",\"evergreen_tree\":\"🌲\",\"deciduous_tree\":\"🌳\",\"palm_tree\":\"🌴\",\"seedling\":\"🌱\",\"herb\":\"🌿\",\"four_leaf_clover\":\"🍀\",\"bamboo\":\"🎍\",\"tanabata_tree\":\"🎋\",\"leaves\":\"🍃\",\"fallen_leaf\":\"🍂\",\"maple_leaf\":\"🍁\",\"mushroom\":\"🍄\",\"ear_of_rice\":\"🌾\",\"bouquet\":\"💐\",\"tulip\":\"🌷\",\"rose\":\"🌹\",\"wilted_rose\":\"🥀\",\"wilted_flower\":\"🥀\",\"sunflower\":\"🌻\",\"blossom\":\"🌼\",\"cherry_blossom\":\"🌸\",\"hibiscus\":\"🌺\",\"earth_americas\":\"🌎\",\"earth_africa\":\"🌍\",\"earth_asia\":\"🌏\",\"full_moon\":\"🌕\",\"waning_gibbous_moon\":\"🌖\",\"last_quarter_moon\":\"🌗\",\"waning_crescent_moon\":\"🌘\",\"new_moon\":\"🌑\",\"waxing_crescent_moon\":\"🌒\",\"first_quarter_moon\":\"🌓\",\"waxing_gibbous_moon\":\"🌔\",\"new_moon_with_face\":\"🌚\",\"full_moon_with_face\":\"🌝\",\"sun_with_face\":\"🌞\",\"first_quarter_moon_with_face\":\"🌛\",\"last_quarter_moon_with_face\":\"🌜\",\"crescent_moon\":\"🌙\",\"dizzy\":\"💫\",\"star\":\"⭐\",\"star2\":\"🌟\",\"zap\":\"⚡\",\"fire\":\"🔥\",\"flame\":\"🔥\",\"boom\":\"💥\",\"white_sun_small_cloud\":\"🌤️\",\"partly_sunny\":\"⛅\",\"white_sun_cloud\":\"🌥️\",\"white_sun_rain_cloud\":\"🌦️\",\"white_sun_behind_cloud_with_rain\":\"🌦️\",\"rainbow\":\"🌈\",\"cloud_rain\":\"🌧️\",\"thunder_cloud_rain\":\"⛈️\",\"cloud_lightning\":\"🌩️\",\"cloud_snow\":\"🌨️\",\"snowman\":\"⛄\",\"wind_blowing_face\":\"🌬️\",\"dash\":\"💨\",\"cloud_tornado\":\"🌪️\",\"fog\":\"🌫️\",\"ocean\":\"🌊\",\"droplet\":\"💧\",\"sweat_drops\":\"💦\",\"giraffe\":\"🦒\",\"zebra\":\"🦓\",\"hedgehog\":\"🦔\",\"sauropod\":\"🦕\",\"t_rex\":\"🦖\",\"cricket\":\"🦗\",\"green_apple\":\"🍏\",\"apple\":\"🍎\",\"pear\":\"🍐\",\"tangerine\":\"🍊\",\"lemon\":\"🍋\",\"banana\":\"🍌\",\"watermelon\":\"🍉\",\"grapes\":\"🍇\",\"strawberry\":\"🍓\",\"melon\":\"🍈\",\"cherries\":\"🍒\",\"peach\":\"🍑\",\"pineapple\":\"🍍\",\"kiwi\":\"🥝\",\"avocado\":\"🥑\",\"tomato\":\"🍅\",\"eggplant\":\"🍆\",\"cucumber\":\"🥒\",\"carrot\":\"🥕\",\"corn\":\"🌽\",\"hot_pepper\":\"🌶️\",\"potato\":\"🥔\",\"sweet_potato\":\"🍠\",\"chestnut\":\"🌰\",\"peanuts\":\"🥜\",\"shelled_peanut\":\"🥜\",\"honey_pot\":\"🍯\",\"croissant\":\"🥐\",\"bread\":\"🍞\",\"french_bread\":\"🥖\",\"baguette_bread\":\"🥖\",\"cheese\":\"🧀\",\"egg\":\"🥚\",\"cooking\":\"🍳\",\"bacon\":\"🥓\",\"pancakes\":\"🥞\",\"fried_shrimp\":\"🍤\",\"poultry_leg\":\"🍗\",\"meat_on_bone\":\"🍖\",\"pizza\":\"🍕\",\"hotdog\":\"🌭\",\"hamburger\":\"🍔\",\"fries\":\"🍟\",\"stuffed_flatbread\":\"🥙\",\"stuffed_pita\":\"🥙\",\"taco\":\"🌮\",\"burrito\":\"🌯\",\"salad\":\"🥗\",\"shallow_pan_of_food\":\"🥘\",\"paella\":\"🥘\",\"spaghetti\":\"🍝\",\"ramen\":\"🍜\",\"stew\":\"🍲\",\"fish_cake\":\"🍥\",\"sushi\":\"🍣\",\"bento\":\"🍱\",\"curry\":\"🍛\",\"rice_ball\":\"🍙\",\"rice\":\"🍚\",\"rice_cracker\":\"🍘\",\"oden\":\"🍢\",\"dango\":\"🍡\",\"shaved_ice\":\"🍧\",\"ice_cream\":\"🍨\",\"icecream\":\"🍦\",\"cake\":\"🍰\",\"birthday\":\"🎂\",\"custard\":\"🍮\",\"pudding\":\"🍮\",\"flan\":\"🍮\",\"lollipop\":\"🍭\",\"candy\":\"🍬\",\"chocolate_bar\":\"🍫\",\"popcorn\":\"🍿\",\"doughnut\":\"🍩\",\"cookie\":\"🍪\",\"milk\":\"🥛\",\"baby_bottle\":\"🍼\",\"tea\":\"🍵\",\"sake\":\"🍶\",\"beer\":\"🍺\",\"beers\":\"🍻\",\"champagne_glass\":\"🥂\",\"clinking_glass\":\"🥂\",\"wine_glass\":\"🍷\",\"tumbler_glass\":\"🥃\",\"whisky\":\"🥃\",\"cocktail\":\"🍸\",\"tropical_drink\":\"🍹\",\"champagne\":\"🍾\",\"bottle_with_popping_cork\":\"🍾\",\"spoon\":\"🥄\",\"fork_and_knife\":\"🍴\",\"fork_knife_plate\":\"🍽️\",\"dumpling\":\"🥟\",\"fortune_cookie\":\"🥠\",\"takeout_box\":\"🥡\",\"chopsticks\":\"🥢\",\"bowl_with_spoon\":\"🥣\",\"cup_with_straw\":\"🥤\",\"coconut\":\"🥥\",\"broccoli\":\"🥦\",\"pie\":\"🥧\",\"pretzel\":\"🥨\",\"cut_of_meat\":\"🥩\",\"sandwich\":\"🥪\",\"canned_food\":\"🥫\",\"soccer\":\"⚽\",\"basketball\":\"🏀\",\"football\":\"🏈\",\"baseball\":\"⚾\",\"tennis\":\"🎾\",\"volleyball\":\"🏐\",\"rugby_football\":\"🏉\",\"8ball\":\"🎱\",\"ping_pong\":\"🏓\",\"table_tennis\":\"🏓\",\"badminton\":\"🏸\",\"goal\":\"🥅\",\"hockey\":\"🏒\",\"field_hockey\":\"🏑\",\"cricket_game\":\"🏏\",\"cricket_bat_ball\":\"🏏\",\"golf\":\"⛳\",\"bow_and_arrow\":\"🏹\",\"archery\":\"🏹\",\"fishing_pole_and_fish\":\"🎣\",\"boxing_glove\":\"🥊\",\"martial_arts_uniform\":\"🥋\",\"karate_uniform\":\"🥋\",\"ice_skate\":\"⛸️\",\"ski\":\"🎿\",\"skier\":\"⛷️\",\"snowboarder\":\"🏂\",\"woman_lifting_weights\":\"🏋️‍♀️\",\"person_lifting_weights\":\"🏋️\",\"lifter\":\"🏋️\",\"weight_lifter\":\"🏋️\",\"man_lifting_weights\":\"🏋️‍♂️\",\"person_fencing\":\"🤺\",\"fencer\":\"🤺\",\"women_wrestling\":\"🤼‍♀️\",\"men_wrestling\":\"🤼‍♂️\",\"people_wrestling\":\"🤼\",\"wrestlers\":\"🤼\",\"woman_cartwheeling\":\"🤸‍♀️\",\"man_cartwheeling\":\"🤸‍♂️\",\"person_doing_cartwheel\":\"🤸\",\"woman_bouncing_ball\":\"⛹️‍♀️\",\"person_bouncing_ball\":\"⛹️\",\"basketball_player\":\"⛹️\",\"person_with_ball\":\"⛹️\",\"man_bouncing_ball\":\"⛹️‍♂️\",\"woman_playing_handball\":\"🤾‍♀️\",\"man_playing_handball\":\"🤾‍♂️\",\"person_playing_handball\":\"🤾\",\"woman_golfing\":\"🏌️‍♀️\",\"person_golfing\":\"🏌️\",\"golfer\":\"🏌️\",\"man_golfing\":\"🏌️‍♂️\",\"woman_surfing\":\"🏄‍♀️\",\"person_surfing\":\"🏄\",\"surfer\":\"🏄\",\"man_surfing\":\"🏄‍♂️\",\"woman_swimming\":\"🏊‍♀️\",\"person_swimming\":\"🏊\",\"swimmer\":\"🏊\",\"man_swimming\":\"🏊‍♂️\",\"woman_playing_water_polo\":\"🤽‍♀️\",\"man_playing_water_polo\":\"🤽‍♂️\",\"person_playing_water_polo\":\"🤽\",\"woman_rowing_boat\":\"🚣‍♀️\",\"person_rowing_boat\":\"🚣\",\"man_rowing_boat\":\"🚣‍♂️\",\"horse_racing\":\"🏇\",\"woman_biking\":\"🚴‍♀️\",\"person_biking\":\"🚴\",\"bicyclist\":\"🚴\",\"man_biking\":\"🚴‍♂️\",\"woman_mountain_biking\":\"🚵‍♀️\",\"person_mountain_biking\":\"🚵\",\"mountain_bicyclist\":\"🚵\",\"man_mountain_biking\":\"🚵‍♂️\",\"running_shirt_with_sash\":\"🎽\",\"medal\":\"🏅\",\"military_medal\":\"🎖️\",\"first_place\":\"🥇\",\"second_place\":\"🥈\",\"third_place\":\"🥉\",\"trophy\":\"🏆\",\"rosette\":\"🏵️\",\"reminder_ribbon\":\"🎗️\",\"ticket\":\"🎫\",\"tickets\":\"🎟️\",\"circus_tent\":\"🎪\",\"woman_juggling\":\"🤹‍♀️\",\"man_juggling\":\"🤹‍♂️\",\"person_juggling\":\"🤹\",\"juggler\":\"🤹\",\"performing_arts\":\"🎭\",\"art\":\"🎨\",\"clapper\":\"🎬\",\"microphone\":\"🎤\",\"headphones\":\"🎧\",\"musical_score\":\"🎼\",\"musical_keyboard\":\"🎹\",\"drum\":\"🥁\",\"saxophone\":\"🎷\",\"trumpet\":\"🎺\",\"guitar\":\"🎸\",\"violin\":\"🎻\",\"game_die\":\"🎲\",\"dart\":\"🎯\",\"bowling\":\"🎳\",\"video_game\":\"🎮\",\"slot_machine\":\"🎰\",\"sled\":\"🛷\",\"breast_feeding\":\"🤱\",\"person_in_steamy_room\":\"🧖\",\"person_climbing\":\"🧗\",\"person_in_lotus_position\":\"🧘\",\"woman_in_steamy_room\":\"🧖‍♀️\",\"man_in_steamy_room\":\"🧖‍♂️\",\"woman_climbing\":\"🧗‍♀️\",\"man_climbing\":\"🧗‍♂️\",\"woman_in_lotus_position\":\"🧘‍♀️\",\"man_in_lotus_position\":\"🧘‍♂️\",\"red_car\":\"🚗\",\"taxi\":\"🚕\",\"blue_car\":\"🚙\",\"bus\":\"🚌\",\"trolleybus\":\"🚎\",\"race_car\":\"🏎️\",\"racing_car\":\"🏎️\",\"police_car\":\"🚓\",\"ambulance\":\"🚑\",\"fire_engine\":\"🚒\",\"minibus\":\"🚐\",\"truck\":\"🚚\",\"articulated_lorry\":\"🚛\",\"tractor\":\"🚜\",\"scooter\":\"🛴\",\"bike\":\"🚲\",\"motor_scooter\":\"🛵\",\"motorbike\":\"🛵\",\"motorcycle\":\"🏍️\",\"rotating_light\":\"🚨\",\"oncoming_police_car\":\"🚔\",\"oncoming_bus\":\"🚍\",\"oncoming_automobile\":\"🚘\",\"oncoming_taxi\":\"🚖\",\"aerial_tramway\":\"🚡\",\"mountain_cableway\":\"🚠\",\"suspension_railway\":\"🚟\",\"railway_car\":\"🚃\",\"train\":\"🚋\",\"mountain_railway\":\"🚞\",\"monorail\":\"🚝\",\"bullettrain_side\":\"🚄\",\"bullettrain_front\":\"🚅\",\"light_rail\":\"🚈\",\"steam_locomotive\":\"🚂\",\"train2\":\"🚆\",\"metro\":\"🚇\",\"tram\":\"🚊\",\"station\":\"🚉\",\"helicopter\":\"🚁\",\"airplane_small\":\"🛩️\",\"small_airplane\":\"🛩️\",\"airplane_departure\":\"🛫\",\"airplane_arriving\":\"🛬\",\"rocket\":\"🚀\",\"satellite_orbital\":\"🛰️\",\"seat\":\"💺\",\"canoe\":\"🛶\",\"kayak\":\"🛶\",\"sailboat\":\"⛵\",\"motorboat\":\"🛥️\",\"speedboat\":\"🚤\",\"cruise_ship\":\"🛳️\",\"passenger_ship\":\"🛳️\",\"ferry\":\"⛴️\",\"ship\":\"🚢\",\"construction\":\"🚧\",\"fuelpump\":\"⛽\",\"busstop\":\"🚏\",\"vertical_traffic_light\":\"🚦\",\"traffic_light\":\"🚥\",\"map\":\"🗺️\",\"moyai\":\"🗿\",\"statue_of_liberty\":\"🗽\",\"fountain\":\"⛲\",\"tokyo_tower\":\"🗼\",\"european_castle\":\"🏰\",\"japanese_castle\":\"🏯\",\"stadium\":\"🏟️\",\"ferris_wheel\":\"🎡\",\"roller_coaster\":\"🎢\",\"carousel_horse\":\"🎠\",\"beach_umbrella\":\"⛱️\",\"umbrella_on_ground\":\"⛱️\",\"beach\":\"🏖️\",\"island\":\"🏝️\",\"mountain\":\"⛰️\",\"mountain_snow\":\"🏔️\",\"snow_capped_mountain\":\"🏔️\",\"mount_fuji\":\"🗻\",\"volcano\":\"🌋\",\"desert\":\"🏜️\",\"camping\":\"🏕️\",\"tent\":\"⛺\",\"railway_track\":\"🛤️\",\"railroad_track\":\"🛤️\",\"motorway\":\"🛣️\",\"construction_site\":\"🏗️\",\"building_construction\":\"🏗️\",\"factory\":\"🏭\",\"house\":\"🏠\",\"house_with_garden\":\"🏡\",\"homes\":\"🏘️\",\"house_buildings\":\"🏘️\",\"house_abandoned\":\"🏚️\",\"derelict_house_building\":\"🏚️\",\"office\":\"🏢\",\"department_store\":\"🏬\",\"post_office\":\"🏣\",\"european_post_office\":\"🏤\",\"hospital\":\"🏥\",\"bank\":\"🏦\",\"hotel\":\"🏨\",\"convenience_store\":\"🏪\",\"school\":\"🏫\",\"love_hotel\":\"🏩\",\"wedding\":\"💒\",\"classical_building\":\"🏛️\",\"church\":\"⛪\",\"mosque\":\"🕌\",\"synagogue\":\"🕍\",\"kaaba\":\"🕋\",\"shinto_shrine\":\"⛩️\",\"japan\":\"🗾\",\"rice_scene\":\"🎑\",\"park\":\"🏞️\",\"sunrise\":\"🌅\",\"sunrise_over_mountains\":\"🌄\",\"stars\":\"🌠\",\"sparkler\":\"🎇\",\"fireworks\":\"🎆\",\"city_sunset\":\"🌇\",\"city_sunrise\":\"🌇\",\"city_dusk\":\"🌆\",\"cityscape\":\"🏙️\",\"night_with_stars\":\"🌃\",\"milky_way\":\"🌌\",\"bridge_at_night\":\"🌉\",\"foggy\":\"🌁\",\"flying_saucer\":\"🛸\",\"watch\":\"⌚\",\"iphone\":\"📱\",\"calling\":\"📲\",\"computer\":\"💻\",\"desktop\":\"🖥️\",\"printer\":\"🖨️\",\"mouse_three_button\":\"🖱️\",\"three_button_mouse\":\"🖱️\",\"trackball\":\"🖲️\",\"joystick\":\"🕹️\",\"compression\":\"🗜️\",\"minidisc\":\"💽\",\"floppy_disk\":\"💾\",\"cd\":\"💿\",\"dvd\":\"📀\",\"vhs\":\"📼\",\"camera\":\"📷\",\"camera_with_flash\":\"📸\",\"video_camera\":\"📹\",\"movie_camera\":\"🎥\",\"projector\":\"📽️\",\"film_frames\":\"🎞️\",\"telephone_receiver\":\"📞\",\"telephone\":\"☎️\",\"pager\":\"📟\",\"fax\":\"📠\",\"tv\":\"📺\",\"radio\":\"📻\",\"microphone2\":\"🎙️\",\"studio_microphone\":\"🎙️\",\"level_slider\":\"🎚️\",\"control_knobs\":\"🎛️\",\"stopwatch\":\"⏱️\",\"timer\":\"⏲️\",\"alarm_clock\":\"⏰\",\"clock\":\"🕰️\",\"hourglass\":\"⌛\",\"hourglass_flowing_sand\":\"⏳\",\"satellite\":\"📡\",\"battery\":\"🔋\",\"electric_plug\":\"🔌\",\"bulb\":\"💡\",\"flashlight\":\"🔦\",\"candle\":\"🕯️\",\"wastebasket\":\"🗑️\",\"oil\":\"🛢️\",\"money_with_wings\":\"💸\",\"dollar\":\"💵\",\"yen\":\"💴\",\"euro\":\"💶\",\"pound\":\"💷\",\"moneybag\":\"💰\",\"credit_card\":\"💳\",\"gem\":\"💎\",\"wrench\":\"🔧\",\"hammer\":\"🔨\",\"tools\":\"🛠️\",\"hammer_and_wrench\":\"🛠️\",\"pick\":\"⛏️\",\"nut_and_bolt\":\"🔩\",\"chains\":\"⛓️\",\"gun\":\"🔫\",\"bomb\":\"💣\",\"knife\":\"🔪\",\"dagger\":\"🗡️\",\"shield\":\"🛡️\",\"smoking\":\"🚬\",\"coffin\":\"⚰️\",\"urn\":\"⚱️\",\"amphora\":\"🏺\",\"crystal_ball\":\"🔮\",\"prayer_beads\":\"📿\",\"barber\":\"💈\",\"telescope\":\"🔭\",\"microscope\":\"🔬\",\"hole\":\"🕳️\",\"pill\":\"💊\",\"syringe\":\"💉\",\"thermometer\":\"🌡️\",\"toilet\":\"🚽\",\"potable_water\":\"🚰\",\"shower\":\"🚿\",\"bathtub\":\"🛁\",\"bath\":\"🛀\",\"bellhop\":\"🛎️\",\"key\":\"🔑\",\"key2\":\"🗝️\",\"old_key\":\"🗝️\",\"door\":\"🚪\",\"couch\":\"🛋️\",\"bed\":\"🛏️\",\"sleeping_accommodation\":\"🛌\",\"frame_photo\":\"🖼️\",\"frame_with_picture\":\"🖼️\",\"shopping_bags\":\"🛍️\",\"shopping_cart\":\"🛒\",\"shopping_trolley\":\"🛒\",\"gift\":\"🎁\",\"balloon\":\"🎈\",\"flags\":\"🎏\",\"ribbon\":\"🎀\",\"confetti_ball\":\"🎊\",\"tada\":\"🎉\",\"dolls\":\"🎎\",\"izakaya_lantern\":\"🏮\",\"wind_chime\":\"🎐\",\"envelope_with_arrow\":\"📩\",\"incoming_envelope\":\"📨\",\"email\":\"📧\",\"love_letter\":\"💌\",\"inbox_tray\":\"📥\",\"outbox_tray\":\"📤\",\"package\":\"📦\",\"label\":\"🏷️\",\"mailbox_closed\":\"📪\",\"mailbox\":\"📫\",\"mailbox_with_mail\":\"📬\",\"mailbox_with_no_mail\":\"📭\",\"postbox\":\"📮\",\"postal_horn\":\"📯\",\"scroll\":\"📜\",\"page_with_curl\":\"📃\",\"page_facing_up\":\"📄\",\"bookmark_tabs\":\"📑\",\"bar_chart\":\"📊\",\"chart_with_upwards_trend\":\"📈\",\"chart_with_downwards_trend\":\"📉\",\"notepad_spiral\":\"🗒️\",\"spiral_note_pad\":\"🗒️\",\"calendar_spiral\":\"🗓️\",\"spiral_calendar_pad\":\"🗓️\",\"calendar\":\"📆\",\"date\":\"📅\",\"card_index\":\"📇\",\"card_box\":\"🗃️\",\"ballot_box\":\"🗳️\",\"file_cabinet\":\"🗄️\",\"clipboard\":\"📋\",\"file_folder\":\"📁\",\"open_file_folder\":\"📂\",\"dividers\":\"🗂️\",\"newspaper2\":\"🗞️\",\"rolled_up_newspaper\":\"🗞️\",\"newspaper\":\"📰\",\"notebook\":\"📓\",\"notebook_with_decorative_cover\":\"📔\",\"ledger\":\"📒\",\"closed_book\":\"📕\",\"green_book\":\"📗\",\"blue_book\":\"📘\",\"orange_book\":\"📙\",\"books\":\"📚\",\"book\":\"📖\",\"bookmark\":\"🔖\",\"link\":\"🔗\",\"paperclip\":\"📎\",\"paperclips\":\"🖇️\",\"triangular_ruler\":\"📐\",\"straight_ruler\":\"📏\",\"pushpin\":\"📌\",\"round_pushpin\":\"📍\",\"pen_ballpoint\":\"🖊️\",\"lower_left_ballpoint_pen\":\"🖊️\",\"pen_fountain\":\"🖋️\",\"lower_left_fountain_pen\":\"🖋️\",\"paintbrush\":\"🖌️\",\"crayon\":\"🖍️\",\"pencil\":\"📝\",\"memo\":\"📝\",\"pencil2\":\"✏️\",\"mag\":\"🔍\",\"mag_right\":\"🔎\",\"lock_with_ink_pen\":\"🔏\",\"closed_lock_with_key\":\"🔐\",\"lock\":\"🔒\",\"unlock\":\"🔓\",\"orange_heart\":\"🧡\",\"yellow_heart\":\"💛\",\"green_heart\":\"💚\",\"blue_heart\":\"💙\",\"purple_heart\":\"💜\",\"black_heart\":\"🖤\",\"broken_heart\":\"💔\",\"two_hearts\":\"💕\",\"revolving_hearts\":\"💞\",\"heartbeat\":\"💓\",\"heartpulse\":\"💗\",\"sparkling_heart\":\"💖\",\"cupid\":\"💘\",\"gift_heart\":\"💝\",\"heart_decoration\":\"💟\",\"peace\":\"☮️\",\"cross\":\"✝️\",\"star_and_crescent\":\"☪️\",\"om_symbol\":\"🕉️\",\"six_pointed_star\":\"🔯\",\"menorah\":\"🕎\",\"yin_yang\":\"☯️\",\"place_of_worship\":\"🛐\",\"worship_symbol\":\"🛐\",\"ophiuchus\":\"⛎\",\"gemini\":\"♊\",\"cancer\":\"♋\",\"leo\":\"♌\",\"virgo\":\"♍\",\"libra\":\"♎\",\"scorpius\":\"♏\",\"id\":\"🆔\",\"atom\":\"⚛️\",\"accept\":\"🉑\",\"mobile_phone_off\":\"📴\",\"vibration_mode\":\"📳\",\"u6709\":\"🈶\",\"u7121\":\"🈚\",\"u7533\":\"🈸\",\"u55b6\":\"🈺\",\"u6708\":\"🈷️\",\"vs\":\"🆚\",\"white_flower\":\"💮\",\"ideograph_advantage\":\"🉐\",\"u5408\":\"🈴\",\"u6e80\":\"🈵\",\"u5272\":\"🈹\",\"u7981\":\"🈲\",\"a\":\"🅰️\",\"b\":\"🅱️\",\"ab\":\"🆎\",\"cl\":\"🆑\",\"o2\":\"🅾️\",\"sos\":\"🆘\",\"x\":\"❌\",\"o\":\"⭕\",\"octagonal_sign\":\"🛑\",\"stop_sign\":\"🛑\",\"no_entry\":\"⛔\",\"name_badge\":\"📛\",\"no_entry_sign\":\"🚫\",\"anger\":\"💢\",\"no_pedestrians\":\"🚷\",\"do_not_litter\":\"🚯\",\"no_bicycles\":\"🚳\",\"non_potable_water\":\"🚱\",\"underage\":\"🔞\",\"no_mobile_phones\":\"📵\",\"no_smoking\":\"🚭\",\"bangbang\":\"‼️\",\"low_brightness\":\"🔅\",\"high_brightness\":\"🔆\",\"part_alternation_mark\":\"〽️\",\"warning\":\"⚠️\",\"children_crossing\":\"🚸\",\"trident\":\"🔱\",\"fleur_de-lis\":\"⚜️\",\"beginner\":\"🔰\",\"recycle\":\"♻️\",\"u6307\":\"🈯\",\"chart\":\"💹\",\"negative_squared_cross_mark\":\"❎\",\"globe_with_meridians\":\"🌐\",\"diamond_shape_with_a_dot_inside\":\"💠\",\"m\":\"Ⓜ️\",\"cyclone\":\"🌀\",\"zzz\":\"💤\",\"atm\":\"🏧\",\"wc\":\"🚾\",\"wheelchair\":\"♿\",\"parking\":\"🅿️\",\"u7a7a\":\"🈳\",\"sa\":\"🈂️\",\"passport_control\":\"🛂\",\"customs\":\"🛃\",\"baggage_claim\":\"🛄\",\"left_luggage\":\"🛅\",\"mens\":\"🚹\",\"womens\":\"🚺\",\"baby_symbol\":\"🚼\",\"restroom\":\"🚻\",\"put_litter_in_its_place\":\"🚮\",\"cinema\":\"🎦\",\"signal_strength\":\"📶\",\"koko\":\"🈁\",\"symbols\":\"🔣\",\"abc\":\"🔤\",\"abcd\":\"🔡\",\"capital_abcd\":\"🔠\",\"ng\":\"🆖\",\"ok\":\"🆗\",\"up\":\"🆙\",\"cool\":\"🆒\",\"new\":\"🆕\",\"free\":\"🆓\",\"zero\":\"0️⃣\",\"one\":\"1️⃣\",\"two\":\"2️⃣\",\"three\":\"3️⃣\",\"four\":\"4️⃣\",\"five\":\"5️⃣\",\"six\":\"6️⃣\",\"seven\":\"7️⃣\",\"eight\":\"8️⃣\",\"nine\":\"9️⃣\",\"keycap_ten\":\"🔟\",\"hash\":\"#️⃣\",\"asterisk\":\"*️⃣\",\"arrow_forward\":\"▶️\",\"pause_button\":\"⏸️\",\"double_vertical_bar\":\"⏸️\",\"play_pause\":\"⏯️\",\"stop_button\":\"⏹️\",\"record_button\":\"⏺️\",\"eject\":\"⏏️\",\"track_next\":\"⏭️\",\"next_track\":\"⏭️\",\"track_previous\":\"⏮️\",\"previous_track\":\"⏮️\",\"fast_forward\":\"⏩\",\"rewind\":\"⏪\",\"arrow_double_up\":\"⏫\",\"arrow_double_down\":\"⏬\",\"arrow_backward\":\"◀️\",\"arrow_up_small\":\"🔼\",\"arrow_down_small\":\"🔽\",\"arrow_right\":\"➡️\",\"arrow_left\":\"⬅️\",\"arrow_up\":\"⬆️\",\"arrow_down\":\"⬇️\",\"arrow_right_hook\":\"↪️\",\"leftwards_arrow_with_hook\":\"↩️\",\"twisted_rightwards_arrows\":\"🔀\",\"repeat\":\"🔁\",\"repeat_one\":\"🔂\",\"arrows_counterclockwise\":\"🔄\",\"arrows_clockwise\":\"🔃\",\"musical_note\":\"🎵\",\"notes\":\"🎶\",\"heavy_dollar_sign\":\"💲\",\"currency_exchange\":\"💱\",\"copyright\":\"©️\",\"registered\":\"®️\",\"curly_loop\":\"➰\",\"loop\":\"➿\",\"end\":\"🔚\",\"back\":\"🔙\",\"on\":\"🔛\",\"top\":\"🔝\",\"soon\":\"🔜\",\"radio_button\":\"🔘\",\"white_circle\":\"⚪\",\"black_circle\":\"⚫\",\"red_circle\":\"🔴\",\"blue_circle\":\"🔵\",\"small_red_triangle\":\"🔺\",\"small_red_triangle_down\":\"🔻\",\"small_orange_diamond\":\"🔸\",\"small_blue_diamond\":\"🔹\",\"large_orange_diamond\":\"🔶\",\"large_blue_diamond\":\"🔷\",\"white_square_button\":\"🔳\",\"black_square_button\":\"🔲\",\"black_small_square\":\"▪️\",\"white_small_square\":\"▫️\",\"black_medium_small_square\":\"◾\",\"white_medium_small_square\":\"◽\",\"black_medium_square\":\"◼️\",\"white_medium_square\":\"◻️\",\"black_large_square\":\"⬛\",\"white_large_square\":\"⬜\",\"speaker\":\"🔈\",\"mute\":\"🔇\",\"sound\":\"🔉\",\"loud_sound\":\"🔊\",\"bell\":\"🔔\",\"no_bell\":\"🔕\",\"mega\":\"📣\",\"loudspeaker\":\"📢\",\"speech_left\":\"🗨️\",\"left_speech_bubble\":\"🗨️\",\"eye_in_speech_bubble\":\"👁️‍🗨️\",\"speech_balloon\":\"💬\",\"thought_balloon\":\"💭\",\"anger_right\":\"🗯️\",\"right_anger_bubble\":\"🗯️\",\"black_joker\":\"🃏\",\"flower_playing_cards\":\"🎴\",\"mahjong\":\"🀄\",\"clock1\":\"🕐\",\"clock2\":\"🕑\",\"clock3\":\"🕒\",\"clock4\":\"🕓\",\"clock5\":\"🕔\",\"clock6\":\"🕕\",\"clock7\":\"🕖\",\"clock8\":\"🕗\",\"clock9\":\"🕘\",\"clock10\":\"🕙\",\"clock11\":\"🕚\",\"clock12\":\"🕛\",\"clock130\":\"🕜\",\"clock230\":\"🕝\",\"clock330\":\"🕞\",\"clock430\":\"🕟\",\"clock530\":\"🕠\",\"clock630\":\"🕡\",\"clock730\":\"🕢\",\"clock830\":\"🕣\",\"clock930\":\"🕤\",\"clock1030\":\"🕥\",\"clock1130\":\"🕦\",\"clock1230\":\"🕧\",\"flag_white\":\"🏳️\",\"waving_white_flag\":\"🏳️\",\"flag_black\":\"🏴\",\"waving_black_flag\":\"🏴\",\"checkered_flag\":\"🏁\",\"triangular_flag_on_post\":\"🚩\",\"rainbow_flag\":\"🏳️‍🌈\",\"gay_pride_flag\":\"🏳️‍🌈\",\"flag_af\":\"🇦🇫\",\"flag_ax\":\"🇦🇽\",\"flag_al\":\"🇦🇱\",\"flag_dz\":\"🇩🇿\",\"flag_as\":\"🇦🇸\",\"flag_ad\":\"🇦🇩\",\"flag_ao\":\"🇦🇴\",\"flag_ai\":\"🇦🇮\",\"flag_aq\":\"🇦🇶\",\"flag_ag\":\"🇦🇬\",\"flag_ar\":\"🇦🇷\",\"flag_am\":\"🇦🇲\",\"flag_aw\":\"🇦🇼\",\"flag_au\":\"🇦🇺\",\"flag_at\":\"🇦🇹\",\"flag_az\":\"🇦🇿\",\"flag_bs\":\"🇧🇸\",\"flag_bh\":\"🇧🇭\",\"flag_bd\":\"🇧🇩\",\"flag_bb\":\"🇧🇧\",\"flag_by\":\"🇧🇾\",\"flag_be\":\"🇧🇪\",\"flag_bz\":\"🇧🇿\",\"flag_bj\":\"🇧🇯\",\"flag_bm\":\"🇧🇲\",\"flag_bt\":\"🇧🇹\",\"flag_bo\":\"🇧🇴\",\"flag_ba\":\"🇧🇦\",\"flag_bw\":\"🇧🇼\",\"flag_br\":\"🇧🇷\",\"flag_io\":\"🇮🇴\",\"flag_vg\":\"🇻🇬\",\"flag_bn\":\"🇧🇳\",\"flag_bg\":\"🇧🇬\",\"flag_bf\":\"🇧🇫\",\"flag_bi\":\"🇧🇮\",\"flag_kh\":\"🇰🇭\",\"flag_cm\":\"🇨🇲\",\"flag_ca\":\"🇨🇦\",\"flag_ic\":\"🇮🇨\",\"flag_cv\":\"🇨🇻\",\"flag_bq\":\"🇧🇶\",\"flag_ky\":\"🇰🇾\",\"flag_cf\":\"🇨🇫\",\"flag_td\":\"🇹🇩\",\"flag_cl\":\"🇨🇱\",\"chile\":\"🇨🇱\",\"flag_cn\":\"🇨🇳\",\"flag_cx\":\"🇨🇽\",\"flag_cc\":\"🇨🇨\",\"flag_co\":\"🇨🇴\",\"flag_km\":\"🇰🇲\",\"flag_cg\":\"🇨🇬\",\"flag_cd\":\"🇨🇩\",\"congo\":\"🇨🇩\",\"flag_ck\":\"🇨🇰\",\"flag_cr\":\"🇨🇷\",\"flag_ci\":\"🇨🇮\",\"flag_hr\":\"🇭🇷\",\"flag_cu\":\"🇨🇺\",\"flag_cw\":\"🇨🇼\",\"flag_cy\":\"🇨🇾\",\"flag_cz\":\"🇨🇿\",\"flag_dk\":\"🇩🇰\",\"flag_dj\":\"🇩🇯\",\"flag_dm\":\"🇩🇲\",\"flag_do\":\"🇩🇴\",\"flag_ec\":\"🇪🇨\",\"flag_eg\":\"🇪🇬\",\"flag_sv\":\"🇸🇻\",\"flag_gq\":\"🇬🇶\",\"flag_er\":\"🇪🇷\",\"flag_ee\":\"🇪🇪\",\"flag_et\":\"🇪🇹\",\"flag_eu\":\"🇪🇺\",\"flag_fk\":\"🇫🇰\",\"flag_fo\":\"🇫🇴\",\"flag_fj\":\"🇫🇯\",\"flag_fi\":\"🇫🇮\",\"flag_fr\":\"🇫🇷\",\"flag_gf\":\"🇬🇫\",\"flag_pf\":\"🇵🇫\",\"flag_tf\":\"🇹🇫\",\"flag_ga\":\"🇬🇦\",\"flag_gm\":\"🇬🇲\",\"flag_ge\":\"🇬🇪\",\"flag_de\":\"🇩🇪\",\"flag_gh\":\"🇬🇭\",\"flag_gi\":\"🇬🇮\",\"flag_gr\":\"🇬🇷\",\"flag_gl\":\"🇬🇱\",\"flag_gd\":\"🇬🇩\",\"flag_gp\":\"🇬🇵\",\"flag_gu\":\"🇬🇺\",\"flag_gt\":\"🇬🇹\",\"flag_gg\":\"🇬🇬\",\"flag_gn\":\"🇬🇳\",\"flag_gw\":\"🇬🇼\",\"flag_gy\":\"🇬🇾\",\"flag_ht\":\"🇭🇹\",\"flag_hn\":\"🇭🇳\",\"flag_hk\":\"🇭🇰\",\"flag_hu\":\"🇭🇺\",\"flag_is\":\"🇮🇸\",\"flag_in\":\"🇮🇳\",\"flag_id\":\"🇮🇩\",\"indonesia\":\"🇮🇩\",\"flag_ir\":\"🇮🇷\",\"flag_iq\":\"🇮🇶\",\"flag_ie\":\"🇮🇪\",\"flag_im\":\"🇮🇲\",\"flag_il\":\"🇮🇱\",\"flag_it\":\"🇮🇹\",\"flag_jm\":\"🇯🇲\",\"flag_jp\":\"🇯🇵\",\"crossed_flags\":\"🎌\",\"flag_je\":\"🇯🇪\",\"flag_jo\":\"🇯🇴\",\"flag_kz\":\"🇰🇿\",\"flag_ke\":\"🇰🇪\",\"flag_ki\":\"🇰🇮\",\"flag_xk\":\"🇽🇰\",\"flag_kw\":\"🇰🇼\",\"flag_kg\":\"🇰🇬\",\"flag_la\":\"🇱🇦\",\"flag_lv\":\"🇱🇻\",\"flag_lb\":\"🇱🇧\",\"flag_ls\":\"🇱🇸\",\"flag_lr\":\"🇱🇷\",\"flag_ly\":\"🇱🇾\",\"flag_li\":\"🇱🇮\",\"flag_lt\":\"🇱🇹\",\"flag_lu\":\"🇱🇺\",\"flag_mo\":\"🇲🇴\",\"flag_mk\":\"🇲🇰\",\"flag_mg\":\"🇲🇬\",\"flag_mw\":\"🇲🇼\",\"flag_my\":\"🇲🇾\",\"flag_mv\":\"🇲🇻\",\"flag_ml\":\"🇲🇱\",\"flag_mt\":\"🇲🇹\",\"flag_mh\":\"🇲🇭\",\"flag_mq\":\"🇲🇶\",\"flag_mr\":\"🇲🇷\",\"flag_mu\":\"🇲🇺\",\"flag_yt\":\"🇾🇹\",\"flag_mx\":\"🇲🇽\",\"flag_fm\":\"🇫🇲\",\"flag_md\":\"🇲🇩\",\"flag_mc\":\"🇲🇨\",\"flag_mn\":\"🇲🇳\",\"flag_me\":\"🇲🇪\",\"flag_ms\":\"🇲🇸\",\"flag_ma\":\"🇲🇦\",\"flag_mz\":\"🇲🇿\",\"flag_mm\":\"🇲🇲\",\"flag_na\":\"🇳🇦\",\"flag_nr\":\"🇳🇷\",\"flag_np\":\"🇳🇵\",\"flag_nl\":\"🇳🇱\",\"flag_nc\":\"🇳🇨\",\"flag_nz\":\"🇳🇿\",\"flag_ni\":\"🇳🇮\",\"flag_ne\":\"🇳🇪\",\"flag_ng\":\"🇳🇬\",\"nigeria\":\"🇳🇬\",\"flag_nu\":\"🇳🇺\",\"flag_nf\":\"🇳🇫\",\"flag_kp\":\"🇰🇵\",\"flag_mp\":\"🇲🇵\",\"flag_no\":\"🇳🇴\",\"flag_om\":\"🇴🇲\",\"flag_pk\":\"🇵🇰\",\"flag_pw\":\"🇵🇼\",\"flag_ps\":\"🇵🇸\",\"flag_pa\":\"🇵🇦\",\"flag_pg\":\"🇵🇬\",\"flag_py\":\"🇵🇾\",\"flag_pe\":\"🇵🇪\",\"flag_ph\":\"🇵🇭\",\"flag_pn\":\"🇵🇳\",\"flag_pl\":\"🇵🇱\",\"flag_pt\":\"🇵🇹\",\"flag_pr\":\"🇵🇷\",\"flag_qa\":\"🇶🇦\",\"flag_re\":\"🇷🇪\",\"flag_ro\":\"🇷🇴\",\"flag_ru\":\"🇷🇺\",\"flag_rw\":\"🇷🇼\",\"flag_ws\":\"🇼🇸\",\"flag_sm\":\"🇸🇲\",\"flag_st\":\"🇸🇹\",\"flag_sa\":\"🇸🇦\",\"saudiarabia\":\"🇸🇦\",\"saudi\":\"🇸🇦\",\"flag_sn\":\"🇸🇳\",\"flag_rs\":\"🇷🇸\",\"flag_sc\":\"🇸🇨\",\"flag_sl\":\"🇸🇱\",\"flag_sg\":\"🇸🇬\",\"flag_sx\":\"🇸🇽\",\"flag_sk\":\"🇸🇰\",\"flag_si\":\"🇸🇮\",\"flag_gs\":\"🇬🇸\",\"flag_sb\":\"🇸🇧\",\"flag_so\":\"🇸🇴\",\"flag_za\":\"🇿🇦\",\"flag_kr\":\"🇰🇷\",\"flag_ss\":\"🇸🇸\",\"flag_es\":\"🇪🇸\",\"flag_lk\":\"🇱🇰\",\"flag_bl\":\"🇧🇱\",\"flag_sh\":\"🇸🇭\",\"flag_kn\":\"🇰🇳\",\"flag_lc\":\"🇱🇨\",\"flag_pm\":\"🇵🇲\",\"flag_vc\":\"🇻🇨\",\"flag_sd\":\"🇸🇩\",\"flag_sr\":\"🇸🇷\",\"flag_sz\":\"🇸🇿\",\"flag_se\":\"🇸🇪\",\"flag_ch\":\"🇨🇭\",\"flag_sy\":\"🇸🇾\",\"flag_tw\":\"🇹🇼\",\"flag_tj\":\"🇹🇯\",\"flag_tz\":\"🇹🇿\",\"flag_th\":\"🇹🇭\",\"flag_tl\":\"🇹🇱\",\"flag_tg\":\"🇹🇬\",\"flag_tk\":\"🇹🇰\",\"flag_to\":\"🇹🇴\",\"flag_tt\":\"🇹🇹\",\"flag_tn\":\"🇹🇳\",\"flag_tr\":\"🇹🇷\",\"flag_tm\":\"🇹🇲\",\"turkmenistan\":\"🇹🇲\",\"flag_tc\":\"🇹🇨\",\"flag_tv\":\"🇹🇻\",\"tuvalu\":\"🇹🇻\",\"flag_vi\":\"🇻🇮\",\"flag_ug\":\"🇺🇬\",\"flag_ua\":\"🇺🇦\",\"flag_ae\":\"🇦🇪\",\"flag_gb\":\"🇬🇧\",\"flag_us\":\"🇺🇸\",\"flag_uy\":\"🇺🇾\",\"flag_uz\":\"🇺🇿\",\"flag_vu\":\"🇻🇺\",\"flag_va\":\"🇻🇦\",\"flag_ve\":\"🇻🇪\",\"flag_vn\":\"🇻🇳\",\"flag_wf\":\"🇼🇫\",\"flag_eh\":\"🇪🇭\",\"flag_ye\":\"🇾🇪\",\"flag_zm\":\"🇿🇲\",\"flag_zw\":\"🇿🇼\",\"flag_ac\":\"🇦🇨\",\"flag_ta\":\"🇹🇦\",\"flag_bv\":\"🇧🇻\",\"flag_hm\":\"🇭🇲\",\"flag_sj\":\"🇸🇯\",\"flag_um\":\"🇺🇲\",\"flag_ea\":\"🇪🇦\",\"flag_cp\":\"🇨🇵\",\"flag_dg\":\"🇩🇬\",\"flag_mf\":\"🇲🇫\",\"united_nations\":\"🇺🇳\",\"england\":\"🏴󠁧󠁢󠁥󠁮󠁧󠁿\",\"scotland\":\"🏴󠁧󠁢󠁳󠁣󠁴󠁿\",\"wales\":\"🏴󠁧󠁢󠁷󠁬󠁳󠁿\",\"asterisk_symbol\":\"*️\",\"regional_indicator_z\":\"🇿\",\"regional_indicator_y\":\"🇾\",\"regional_indicator_x\":\"🇽\",\"pound_symbol\":\"#️\",\"regional_indicator_w\":\"🇼\",\"regional_indicator_v\":\"🇻\",\"regional_indicator_u\":\"🇺\",\"regional_indicator_t\":\"🇹\",\"regional_indicator_s\":\"🇸\",\"regional_indicator_r\":\"🇷\",\"regional_indicator_q\":\"🇶\",\"regional_indicator_p\":\"🇵\",\"regional_indicator_o\":\"🇴\",\"regional_indicator_n\":\"🇳\",\"regional_indicator_m\":\"🇲\",\"regional_indicator_l\":\"🇱\",\"regional_indicator_k\":\"🇰\",\"regional_indicator_j\":\"🇯\",\"regional_indicator_i\":\"🇮\",\"regional_indicator_h\":\"🇭\",\"regional_indicator_g\":\"🇬\",\"regional_indicator_f\":\"🇫\",\"regional_indicator_e\":\"🇪\",\"regional_indicator_d\":\"🇩\",\"regional_indicator_c\":\"🇨\",\"regional_indicator_b\":\"🇧\",\"regional_indicator_a\":\"🇦\",\"digit_nine\":\"9️\",\"digit_eight\":\"8️\",\"digit_seven\":\"7️\",\"digit_six\":\"6️\",\"digit_five\":\"5️\",\"digit_four\":\"4️\",\"digit_three\":\"3️\",\"digit_two\":\"2️\",\"digit_one\":\"1️\",\"digit_zero\":\"0️\",\"family_man_woman_boy\":\"👨‍👩‍👦\",\"couple_with_heart_woman_man\":\"👩‍❤️‍👨\",\"kiss_woman_man\":\"👩‍❤️‍💋‍👨\",\"face_with_raised_eyebrow\":\"🤨\",\"star_struck\":\"🤩\",\"crazy_face\":\"🤪\",\"shushing_face\":\"🤫\",\"face_with_symbols_over_mouth\":\"🤬\",\"face_with_hand_over_mouth\":\"🤭\",\"face_vomiting\":\"🤮\",\"exploding_head\":\"🤯\",\"face_with_monocle\":\"🧐\",\"adult\":\"🧑\",\"child\":\"🧒\",\"older_adult\":\"🧓\",\"bearded_person\":\"🧔\",\"woman_with_headscarf\":\"🧕\",\"brain\":\"🧠\",\"billed_cap\":\"🧢\",\"mage\":\"🧙\",\"fairy\":\"🧚\",\"vampire\":\"🧛\",\"merperson\":\"🧜\",\"elf\":\"🧝\",\"genie\":\"🧞\",\"zombie\":\"🧟\",\"scarf\":\"🧣\",\"gloves\":\"🧤\",\"coat\":\"🧥\",\"socks\":\"🧦\",\"love_you_gesture\":\"🤟\",\"palms_up_together\":\"🤲\",\"woman_mage\":\"🧙‍♀️\",\"man_mage\":\"🧙‍♂️\",\"woman_fairy\":\"🧚‍♀️\",\"man_fairy\":\"🧚‍♂️\",\"woman_vampire\":\"🧛‍♀️\",\"man_vampire\":\"🧛‍♂️\",\"mermaid\":\"🧜‍♀️\",\"merman\":\"🧜‍♂️\",\"woman_elf\":\"🧝‍♀️\",\"man_elf\":\"🧝‍♂️\",\"woman_genie\":\"🧞‍♀️\",\"man_genie\":\"🧞‍♂️\",\"woman_zombie\":\"🧟‍♀️\",\"man_zombie\":\"🧟‍♂️\"}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./client/js/libs/simplemap.json\n// module id = 267\n// module chunks = 0","var Handlebars = require(\"/home/travis/build/thelounge/lounge/node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n return \" self\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n return \" highlight\";\n},\"5\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \" data-from=\\\"\"\n + container.escapeExpression(container.lambda(((stack1 = (depth0 != null ? depth0.from : depth0)) != null ? stack1.nick : stack1), depth0))\n + \"\\\"\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, alias3=depth0 != null ? depth0 : (container.nullContext || {});\n\n return \"<div class=\\\"msg \"\n + alias2(alias1((depth0 != null ? depth0.type : depth0), depth0))\n + ((stack1 = helpers[\"if\"].call(alias3,(depth0 != null ? depth0.self : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + ((stack1 = helpers[\"if\"].call(alias3,(depth0 != null ? depth0.highlight : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\\"\\n\tdata-type=\\\"\"\n + alias2(alias1((depth0 != null ? depth0.type : depth0), depth0))\n + \"\\\" id=\\\"msg-\"\n + alias2(alias1((depth0 != null ? depth0.id : depth0), depth0))\n + \"\\\" data-time=\\\"\"\n + alias2(alias1((depth0 != null ? depth0.time : depth0), depth0))\n + \"\\\"\"\n + ((stack1 = helpers[\"if\"].call(alias3,((stack1 = (depth0 != null ? depth0.from : depth0)) != null ? stack1.nick : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(5, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \">\\n\t<span class=\\\"time tooltipped tooltipped-e\\\" aria-label=\\\"\"\n + alias2(__default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/localetime.js\")).call(alias3,(depth0 != null ? depth0.time : depth0),{\"name\":\"localetime\",\"hash\":{},\"data\":data}))\n + \"\\\">\\n\t\t\"\n + alias2(__default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/tz.js\")).call(alias3,(depth0 != null ? depth0.time : depth0),{\"name\":\"tz\",\"hash\":{},\"data\":data}))\n + \"\\n\t</span>\\n\t<span class=\\\"from\\\"></span>\\n\t<span class=\\\"content\\\"></span>\\n</div>\\n\";\n},\"useData\":true});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./client/views/msg_action.tpl\n// module id = 268\n// module chunks = 0","var Handlebars = require(\"/home/travis/build/thelounge/lounge/node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var alias1=container.escapeExpression;\n\n return \"<div class=\\\"msg condensed closed\\\" data-time=\\\"\"\n + alias1(container.lambda((depth0 != null ? depth0.time : depth0), depth0))\n + \"\\\">\\n\t<div class=\\\"condensed-summary\\\">\\n\t\t<span class=\\\"time\\\">\"\n + alias1(__default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/tz.js\")).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.time : depth0),{\"name\":\"tz\",\"hash\":{},\"data\":data}))\n + \"</span>\\n\t\t<span class=\\\"from\\\"></span>\\n\t\t<span class=\\\"content\\\"></span>\\n\t</div>\\n</div>\\n\";\n},\"useData\":true});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./client/views/msg_condensed.tpl\n// module id = 269\n// module chunks = 0","var Handlebars = require(\"/home/travis/build/thelounge/lounge/node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n return \"<button class=\\\"toggle-button\\\" aria-label=\\\"Toggle status messages\\\"></button>\\n\";\n},\"useData\":true});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./client/views/msg_condensed_toggle.tpl\n// module id = 270\n// module chunks = 0","var Handlebars = require(\"/home/travis/build/thelounge/lounge/node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n return \"<div class=\\\"toggle-content toggle-type-\"\n + container.escapeExpression(container.lambda((depth0 != null ? depth0.type : depth0), depth0))\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.shown : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(2, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\\">\\n\"\n + ((stack1 = __default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/equal.js\")).call(alias1,(depth0 != null ? depth0.type : depth0),\"image\",{\"name\":\"equal\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + ((stack1 = __default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/equal.js\")).call(alias1,(depth0 != null ? depth0.type : depth0),\"audio\",{\"name\":\"equal\",\"hash\":{},\"fn\":container.program(6, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + ((stack1 = __default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/equal.js\")).call(alias1,(depth0 != null ? depth0.type : depth0),\"video\",{\"name\":\"equal\",\"hash\":{},\"fn\":container.program(8, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + ((stack1 = __default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/equal.js\")).call(alias1,(depth0 != null ? depth0.type : depth0),\"link\",{\"name\":\"equal\",\"hash\":{},\"fn\":container.program(10, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"</div>\\n\";\n},\"2\":function(container,depth0,helpers,partials,data) {\n return \" show\";\n},\"4\":function(container,depth0,helpers,partials,data) {\n var alias1=container.lambda, alias2=container.escapeExpression;\n\n return \"\t\t<a class=\\\"toggle-thumbnail\\\" href=\\\"\"\n + alias2(alias1((depth0 != null ? depth0.link : depth0), depth0))\n + \"\\\" target=\\\"_blank\\\" rel=\\\"noopener\\\">\\n\t\t\t<img src=\\\"\"\n + alias2(alias1((depth0 != null ? depth0.thumb : depth0), depth0))\n + \"\\\" decoding=\\\"async\\\" alt=\\\"\\\">\\n\t\t</a>\\n\";\n},\"6\":function(container,depth0,helpers,partials,data) {\n var alias1=container.lambda, alias2=container.escapeExpression;\n\n return \"\t\t<audio controls preload=\\\"metadata\\\">\\n\t\t\t<source src=\\\"\"\n + alias2(alias1((depth0 != null ? depth0.link : depth0), depth0))\n + \"\\\" type=\\\"\"\n + alias2(alias1((depth0 != null ? depth0.res : depth0), depth0))\n + \"\\\">\\n\t\t\tYour browser does not support the audio element.\\n\t\t</audio>\\n\";\n},\"8\":function(container,depth0,helpers,partials,data) {\n var alias1=container.lambda, alias2=container.escapeExpression;\n\n return \"\t\t<video width=\\\"320\\\" height=\\\"240\\\" preload=\\\"metadata\\\" controls>\\n\t\t\t<source src=\\\"\"\n + alias2(alias1((depth0 != null ? depth0.link : depth0), depth0))\n + \"\\\" type=\\\"\"\n + alias2(alias1((depth0 != null ? depth0.res : depth0), depth0))\n + \"\\\">\\n\t\t\tYour browser does not support the video element.\\n\t\t</video>\\n\";\n},\"10\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression;\n\n return ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.thumb : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(11, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t\t<a class=\\\"toggle-text\\\" href=\\\"\"\n + alias2(alias1((depth0 != null ? depth0.link : depth0), depth0))\n + \"\\\" target=\\\"_blank\\\" rel=\\\"noopener\\\">\\n\t\t\t<div class=\\\"head\\\" title=\\\"\"\n + alias2(alias1((depth0 != null ? depth0.head : depth0), depth0))\n + \"\\\">\"\n + alias2(alias1((depth0 != null ? depth0.head : depth0), depth0))\n + \"</div>\\n\t\t\t<div class=\\\"body\\\" title=\\\"\"\n + alias2(alias1((depth0 != null ? depth0.body : depth0), depth0))\n + \"\\\">\"\n + alias2(alias1((depth0 != null ? depth0.body : depth0), depth0))\n + \"</div>\\n\t\t</a>\\n\";\n},\"11\":function(container,depth0,helpers,partials,data) {\n var alias1=container.lambda, alias2=container.escapeExpression;\n\n return \"\t\t\t<a class=\\\"toggle-thumbnail\\\" href=\\\"\"\n + alias2(alias1((depth0 != null ? depth0.link : depth0), depth0))\n + \"\\\" target=\\\"_blank\\\" rel=\\\"noopener\\\">\\n\t\t\t\t<img src=\\\"\"\n + alias2(alias1((depth0 != null ? depth0.thumb : depth0), depth0))\n + \"\\\" decoding=\\\"async\\\" alt=\\\"\\\" class=\\\"thumb\\\">\\n\t\t\t</a>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = helpers.blockHelperMissing.call(depth0,container.lambda((depth0 != null ? depth0.preview : depth0), depth0),{\"name\":\"preview\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"useData\":true});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./client/views/msg_preview.tpl\n// module id = 271\n// module chunks = 0","var Handlebars = require(\"/home/travis/build/thelounge/lounge/node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n return \"<button class=\\\"toggle-button toggle-preview \"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.shown : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(2, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\\"\\n data-url=\\\"\"\n + container.escapeExpression(container.lambda((depth0 != null ? depth0.link : depth0), depth0))\n + \"\\\"\\n\"\n + ((stack1 = __default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/equal.js\")).call(alias1,(depth0 != null ? depth0.type : depth0),\"image\",{\"name\":\"equal\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.program(6, data, 0),\"data\":data})) != null ? stack1 : \"\")\n + \"></button>\\n\";\n},\"2\":function(container,depth0,helpers,partials,data) {\n return \" opened\";\n},\"4\":function(container,depth0,helpers,partials,data) {\n return \" aria-label=\\\"Toggle image preview\\\"\\n\";\n},\"6\":function(container,depth0,helpers,partials,data) {\n return \" aria-label=\\\"Toggle website preview\\\"\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = helpers.blockHelperMissing.call(depth0,container.lambda((depth0 != null ? depth0.preview : depth0), depth0),{\"name\":\"preview\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"useData\":true});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./client/views/msg_preview_toggle.tpl\n// module id = 272\n// module chunks = 0","var Handlebars = require(\"/home/travis/build/thelounge/lounge/node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n return \" self\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n return \" highlight\";\n},\"5\":function(container,depth0,helpers,partials,data) {\n return \"\t\t\t<span>\"\n + container.escapeExpression(container.lambda(depth0, depth0))\n + \"</span>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, alias3=container.lambda;\n\n return \"<div class=\\\"msg msg-\"\n + alias2(__default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/slugify.js\")).call(alias1,(depth0 != null ? depth0.command : depth0),{\"name\":\"slugify\",\"hash\":{},\"data\":data}))\n + \" \"\n + alias2(alias3((depth0 != null ? depth0.type : depth0), depth0))\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.self : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.highlight : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\\" id=\\\"msg-\"\n + alias2(alias3((depth0 != null ? depth0.id : depth0), depth0))\n + \"\\\" data-time=\\\"\"\n + alias2(alias3((depth0 != null ? depth0.time : depth0), depth0))\n + \"\\\">\\n\t<span class=\\\"time tooltipped tooltipped-e\\\" aria-label=\\\"\"\n + alias2(__default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/localetime.js\")).call(alias1,(depth0 != null ? depth0.time : depth0),{\"name\":\"localetime\",\"hash\":{},\"data\":data}))\n + \"\\\">\\n\t\t\"\n + alias2(__default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/tz.js\")).call(alias1,(depth0 != null ? depth0.time : depth0),{\"name\":\"tz\",\"hash\":{},\"data\":data}))\n + \"\\n\t</span>\\n\t<span class=\\\"from\\\">[\"\n + alias2(alias3((depth0 != null ? depth0.command : depth0), depth0))\n + \"]</span>\\n\t<span class=\\\"content\\\">\\n\"\n + ((stack1 = helpers.each.call(alias1,(depth0 != null ? depth0.params : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(5, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t</span>\\n</div>\\n\";\n},\"useData\":true});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./client/views/msg_unhandled.tpl\n// module id = 273\n// module chunks = 0","var Handlebars = require(\"/home/travis/build/thelounge/lounge/node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, alias3=depth0 != null ? depth0 : (container.nullContext || {});\n\n return \"<section id=\\\"network-\"\n + alias2(alias1((depth0 != null ? depth0.id : depth0), depth0))\n + \"\\\" class=\\\"network name-\"\n + alias2(__default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/slugify.js\")).call(alias3,(depth0 != null ? depth0.name : depth0),{\"name\":\"slugify\",\"hash\":{},\"data\":data}))\n + \" \"\n + ((stack1 = helpers[\"if\"].call(alias3,((stack1 = (depth0 != null ? depth0.serverOptions : depth0)) != null ? stack1.NETWORK : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(2, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\\" data-id=\\\"\"\n + alias2(alias1((depth0 != null ? depth0.id : depth0), depth0))\n + \"\\\" data-nick=\\\"\"\n + alias2(alias1((depth0 != null ? depth0.nick : depth0), depth0))\n + \"\\\" data-options=\\\"\"\n + alias2(__default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/tojson.js\")).call(alias3,(depth0 != null ? depth0.serverOptions : depth0),{\"name\":\"tojson\",\"hash\":{},\"data\":data}))\n + \"\\\">\\n\"\n + ((stack1 = container.invokePartial(require(\"/home/travis/build/thelounge/lounge/client/views/chan.tpl\"),depth0,{\"name\":\"chan\",\"data\":data,\"indent\":\"\\t\",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n + \"</section>\\n\";\n},\"2\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \"network-\"\n + container.escapeExpression(__default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/slugify.js\")).call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? depth0.serverOptions : depth0)) != null ? stack1.NETWORK : stack1),{\"name\":\"slugify\",\"hash\":{},\"data\":data}));\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.networks : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"usePartial\":true,\"useData\":true});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./client/views/network.tpl\n// module id = 274\n// module chunks = 0","\"use strict\";\n\nmodule.exports = function tojson(context) {\n\treturn JSON.stringify(context);\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/libs/handlebars/tojson.js","var Handlebars = require(\"/home/travis/build/thelounge/lounge/node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var alias1=container.lambda, alias2=container.escapeExpression;\n\n return \"\t<strong>\"\n + alias2(alias1((depth0 != null ? depth0.agent : depth0), depth0))\n + \"</strong>\\n\t<a href=\\\"https://ipinfo.io/\"\n + alias2(alias1((depth0 != null ? depth0.ip : depth0), depth0))\n + \"\\\" target=\\\"_blank\\\" rel=\\\"noopener\\\">\"\n + alias2(alias1((depth0 != null ? depth0.ip : depth0), depth0))\n + \"</a>\\n\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression;\n\n return \"\t<button class=\\\"btn pull-right remove-session\\\" data-token=\\\"\"\n + alias2(alias1((depth0 != null ? depth0.token : depth0), depth0))\n + \"\\\">Disconnect</button>\\n\\n\t<strong>\"\n + alias2(alias1((depth0 != null ? depth0.agent : depth0), depth0))\n + \"</strong>\\n\t<a href=\\\"https://ipinfo.io/\"\n + alias2(alias1((depth0 != null ? depth0.ip : depth0), depth0))\n + \"\\\" target=\\\"_blank\\\" rel=\\\"noopener\\\">\"\n + alias2(alias1((depth0 != null ? depth0.ip : depth0), depth0))\n + \"</a>\\n\t<br>\\n\"\n + ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.active : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.program(6, data, 0),\"data\":data})) != null ? stack1 : \"\");\n},\"4\":function(container,depth0,helpers,partials,data) {\n return \"\t\t<em>Currently active</em>\\n\";\n},\"6\":function(container,depth0,helpers,partials,data) {\n return \"\t\tLast used on <time>\"\n + container.escapeExpression(__default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/localetime.js\")).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.lastUse : depth0),{\"name\":\"localetime\",\"hash\":{},\"data\":data}))\n + \"</time>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \"<p>\\n\"\n + ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.current : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.program(3, data, 0),\"data\":data})) != null ? stack1 : \"\")\n + \"</p>\\n\";\n},\"useData\":true});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./client/views/session.tpl\n// module id = 276\n// module chunks = 0","var Handlebars = require(\"/home/travis/build/thelounge/lounge/node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n return \"<div class=\\\"unread-marker\\\">\\n\t<span class=\\\"unread-marker-text\\\"></span>\\n</div>\\n\";\n},\"useData\":true});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./client/views/unread_marker.tpl\n// module id = 277\n// module chunks = 0","var Handlebars = require(\"/home/travis/build/thelounge/lounge/node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n return \"\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = __default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/diff.js\")).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.mode : depth0),{\"name\":\"diff\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + ((stack1 = container.invokePartial(require(\"/home/travis/build/thelounge/lounge/client/views/user_name.tpl\"),depth0,{\"name\":\"user_name\",\"data\":data,\"indent\":\"\\t\",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"4\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n return ((stack1 = helpers.unless.call(alias1,(data && data.first),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(5, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t<div class=\\\"user-mode \"\n + container.escapeExpression(__default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/modes.js\")).call(alias1,(depth0 != null ? depth0.mode : depth0),{\"name\":\"modes\",\"hash\":{},\"data\":data}))\n + \"\\\">\\n\";\n},\"5\":function(container,depth0,helpers,partials,data) {\n return \"\t\t</div>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n return ((stack1 = __default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/diff.js\")).call(alias1,\"reset\",{\"name\":\"diff\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\"\n + ((stack1 = helpers.each.call(alias1,(depth0 != null ? depth0.users : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"</div>\\n\";\n},\"usePartial\":true,\"useData\":true});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./client/views/user.tpl\n// module id = 278\n// module chunks = 0","\"use strict\";\n\nmodule.exports = function(mode) {\n\tvar modes = {\n\t\t\"~\": \"owner\",\n\t\t\"&\": \"admin\",\n\t\t\"!\": \"admin\",\n\t\t\"@\": \"op\",\n\t\t\"%\": \"half-op\",\n\t\t\"+\": \"voice\",\n\t\t\"\": \"normal\",\n\t};\n\treturn modes[mode];\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/libs/handlebars/modes.js","var Handlebars = require(\"/home/travis/build/thelounge/lounge/node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=container.lambda, alias2=container.escapeExpression;\n\n return \"\t<span role=\\\"button\\\" class=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? depth0.original : depth0)) != null ? stack1.className : stack1), depth0))\n + \"\\\" data-name=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? depth0.original : depth0)) != null ? stack1.dataset : stack1)) != null ? stack1.name : stack1), depth0))\n + \"\\\">\"\n + ((stack1 = ((helper = (helper = helpers.string || (depth0 != null ? depth0.string : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"string\",\"hash\":{},\"data\":data}) : helper))) != null ? stack1 : \"\")\n + \"</span>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \"<div class=\\\"user-mode user-mode-search\\\">\\n\"\n + ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.matches : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"</div>\\n\";\n},\"useData\":true});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./client/views/user_filtered.tpl\n// module id = 280\n// module chunks = 0","var Handlebars = require(\"/home/travis/build/thelounge/lounge/node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n return \"\t<p>\\n\t\tChecking for updates...\\n\t</p>\\n\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = __default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/equal.js\")).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.status : depth0),\"new-version\",{\"name\":\"equal\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.program(7, data, 0),\"data\":data})) != null ? stack1 : \"\");\n},\"4\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression;\n\n return \"\t<p>\\n\t\tThe Lounge <b>\"\n + alias2(alias1(((stack1 = (depth0 != null ? depth0.latest : depth0)) != null ? stack1.version : stack1), depth0))\n + \"</b>\"\n + ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? depth0.latest : depth0)) != null ? stack1.prerelease : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(5, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\t\tis now available.\\n\t\t<br>\\n\\n\t\t<a href=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? depth0.latest : depth0)) != null ? stack1.url : stack1), depth0))\n + \"\\\" target=\\\"_blank\\\" rel=\\\"noopener\\\">\\n\t\t\tRead more on GitHub\\n\t\t</a>\\n\t</p>\\n\";\n},\"5\":function(container,depth0,helpers,partials,data) {\n return \" (pre-release)\";\n},\"7\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = __default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/equal.js\")).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.status : depth0),\"up-to-date\",{\"name\":\"equal\",\"hash\":{},\"fn\":container.program(8, data, 0),\"inverse\":container.program(10, data, 0),\"data\":data})) != null ? stack1 : \"\");\n},\"8\":function(container,depth0,helpers,partials,data) {\n return \"\t<p>\\n\t\tThe Lounge is up to date!\\n\t</p>\\n\\n\t<button id=\\\"check-now\\\" class=\\\"btn btn-small\\\">Check now</button>\\n\";\n},\"10\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = __default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/equal.js\")).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.status : depth0),\"error\",{\"name\":\"equal\",\"hash\":{},\"fn\":container.program(11, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"11\":function(container,depth0,helpers,partials,data) {\n return \"\t<p>\\n\t\tInformation about latest releases could not be retrieved.\\n\t</p>\\n\\n\t<button id=\\\"check-now\\\" class=\\\"btn btn-small\\\">Try again</button>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = __default(require(\"/home/travis/build/thelounge/lounge/client/js/libs/handlebars/equal.js\")).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.status : depth0),\"loading\",{\"name\":\"equal\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.program(3, data, 0),\"data\":data})) != null ? stack1 : \"\");\n},\"useData\":true});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./client/views/version_checker.tpl\n// module id = 281\n// module chunks = 0","var Handlebars = require(\"/home/travis/build/thelounge/lounge/node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n return \"\t\t<h1 class=\\\"title\\\">Release notes for \"\n + container.escapeExpression(((helper = (helper = helpers.version || (depth0 != null ? depth0.version : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === \"function\" ? helper.call(alias1,{\"name\":\"version\",\"hash\":{},\"data\":data}) : helper)))\n + \"</h1>\\n\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.changelog : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(2, data, 0),\"inverse\":container.program(4, data, 0),\"data\":data})) != null ? stack1 : \"\");\n},\"2\":function(container,depth0,helpers,partials,data) {\n var stack1, helper;\n\n return \"\t\t\t<h3>Introduction</h3>\\n\t\t\t<div class=\\\"changelog-text\\\">\"\n + ((stack1 = ((helper = (helper = helpers.changelog || (depth0 != null ? depth0.changelog : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"changelog\",\"hash\":{},\"data\":data}) : helper))) != null ? stack1 : \"\")\n + \"</div>\\n\";\n},\"4\":function(container,depth0,helpers,partials,data) {\n var helper;\n\n return \"\t\t\t<p>Unable to retrieve releases from GitHub.</p>\\n\t\t\t<p><a href=\\\"https://github.com/thelounge/lounge/releases/tag/v\"\n + container.escapeExpression(((helper = (helper = helpers.version || (depth0 != null ? depth0.version : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"version\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" target=\\\"_blank\\\" rel=\\\"noopener\\\">View release notes for this version on GitHub</a></p>\\n\";\n},\"6\":function(container,depth0,helpers,partials,data) {\n return \"\t\t<p>Loading changelog…</p>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \"<div class=\\\"header\\\">\\n\t<button class=\\\"lt\\\" aria-label=\\\"Toggle channel list\\\"></button>\\n</div>\\n<div class=\\\"container\\\">\\n\t<a href=\\\"#\\\" id=\\\"back-to-help\\\" data-target=\\\"#help\\\">« Help</a>\\n\\n\"\n + ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.version : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.program(6, data, 0),\"data\":data})) != null ? stack1 : \"\")\n + \"</div>\\n\";\n},\"useData\":true});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./client/views/windows/changelog.tpl\n// module id = 282\n// module chunks = 0","var Handlebars = require(\"/home/travis/build/thelounge/lounge/node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n return \"The Lounge - \";\n},\"3\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.lockNetwork : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"4\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \"\t\t\t\t\tto \"\n + container.escapeExpression(container.lambda(((stack1 = (depth0 != null ? depth0.defaults : depth0)) != null ? stack1.name : stack1), depth0))\n + \"\\n\";\n},\"6\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, alias3=depth0 != null ? depth0 : (container.nullContext || {});\n\n return \"\t\t<div>\\n\t\t\t<div class=\\\"col-sm-12\\\">\\n\t\t\t\t<h2>Network settings</h2>\\n\t\t\t</div>\\n\t\t\t<div class=\\\"col-sm-3\\\">\\n\t\t\t\t<label for=\\\"connect:name\\\">Name</label>\\n\t\t\t</div>\\n\t\t\t<div class=\\\"col-sm-9\\\">\\n\t\t\t\t<input class=\\\"input\\\" id=\\\"connect:name\\\" name=\\\"name\\\" value=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? depth0.defaults : depth0)) != null ? stack1.name : stack1), depth0))\n + \"\\\">\\n\t\t\t</div>\\n\t\t\t<div class=\\\"col-sm-3\\\">\\n\t\t\t\t<label for=\\\"connect:host\\\">Server</label>\\n\t\t\t</div>\\n\t\t\t<div class=\\\"col-sm-6 col-xs-8\\\">\\n\t\t\t\t<input class=\\\"input\\\" id=\\\"connect:host\\\" name=\\\"host\\\" value=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? depth0.defaults : depth0)) != null ? stack1.host : stack1), depth0))\n + \"\\\" aria-label=\\\"Server address\\\" \"\n + ((stack1 = helpers[\"if\"].call(alias3,(depth0 != null ? depth0.lockNetwork : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(7, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \">\\n\t\t\t</div>\\n\t\t\t<div class=\\\"col-sm-3 col-xs-4\\\">\\n\t\t\t\t<div class=\\\"port\\\">\\n\t\t\t\t\t<input class=\\\"input\\\" type=\\\"number\\\" min=\\\"1\\\" max=\\\"65535\\\" name=\\\"port\\\" value=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? depth0.defaults : depth0)) != null ? stack1.port : stack1), depth0))\n + \"\\\" aria-label=\\\"Server port\\\" \"\n + ((stack1 = helpers[\"if\"].call(alias3,(depth0 != null ? depth0.lockNetwork : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(7, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \">\\n\t\t\t\t</div>\\n\t\t\t</div>\\n\t\t\t<div class=\\\"clearfix\\\"></div>\\n\t\t\t<div class=\\\"col-sm-9 col-sm-offset-3\\\">\\n\t\t\t\t<label class=\\\"tls\\\">\\n\t\t\t\t\t<input type=\\\"checkbox\\\" name=\\\"tls\\\" \"\n + ((stack1 = helpers[\"if\"].call(alias3,((stack1 = (depth0 != null ? depth0.defaults : depth0)) != null ? stack1.tls : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(9, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \" \"\n + ((stack1 = helpers[\"if\"].call(alias3,(depth0 != null ? depth0.lockNetwork : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(7, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \">\\n\t\t\t\t\tEnable TLS/SSL\\n\t\t\t\t</label>\\n\t\t\t</div>\\n\t\t\t<div class=\\\"clearfix\\\"></div>\\n\t\t</div>\\n\";\n},\"7\":function(container,depth0,helpers,partials,data) {\n return \"disabled\";\n},\"9\":function(container,depth0,helpers,partials,data) {\n return \"checked\";\n},\"11\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \"\t\t<div class=\\\"col-sm-3\\\">\\n\t\t\t<label for=\\\"connect:username\\\">Username</label>\\n\t\t</div>\\n\t\t<div class=\\\"col-sm-9\\\">\\n\t\t\t<input class=\\\"input username\\\" id=\\\"connect:username\\\" name=\\\"username\\\" value=\\\"\"\n + container.escapeExpression(container.lambda(((stack1 = (depth0 != null ? depth0.defaults : depth0)) != null ? stack1.username : stack1), depth0))\n + \"\\\">\\n\t\t</div>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.lambda, alias3=container.escapeExpression;\n\n return \"<div class=\\\"header\\\">\\n\t<button class=\\\"lt\\\" aria-label=\\\"Toggle channel list\\\"></button>\\n</div>\\n<form class=\\\"container\\\" method=\\\"post\\\" action=\\\"\\\" data-event=\\\"conn\\\">\\n\t<div class=\\\"row\\\">\\n\t\t<div class=\\\"col-sm-12\\\">\\n\t\t\t<h1 class=\\\"title\\\">\\n\t\t\t\t\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0[\"public\"] : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\t\t\t\tConnect\\n\"\n + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.displayNetwork : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t\t\t</h1>\\n\t\t</div>\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.displayNetwork : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(6, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t\t<div class=\\\"col-sm-12\\\">\\n\t\t\t<h2>User preferences</h2>\\n\t\t</div>\\n\t\t<div class=\\\"col-sm-3\\\">\\n\t\t\t<label for=\\\"connect:nick\\\">Nick</label>\\n\t\t</div>\\n\t\t<div class=\\\"col-sm-9\\\">\\n\t\t\t<input class=\\\"input nick\\\" id=\\\"connect:nick\\\" name=\\\"nick\\\" value=\\\"\"\n + alias3(alias2(((stack1 = (depth0 != null ? depth0.defaults : depth0)) != null ? stack1.nick : stack1), depth0))\n + \"\\\">\\n\t\t</div>\\n\"\n + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.useHexIp : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(11, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t\t<div class=\\\"col-sm-3\\\">\\n\t\t\t<label for=\\\"connect:password\\\">Password</label>\\n\t\t</div>\\n\t\t<div class=\\\"col-sm-9\\\">\\n\t\t\t<input class=\\\"input\\\" id=\\\"connect:password\\\" type=\\\"password\\\" name=\\\"password\\\" value=\\\"\"\n + alias3(alias2(((stack1 = (depth0 != null ? depth0.defaults : depth0)) != null ? stack1.password : stack1), depth0))\n + \"\\\">\\n\t\t</div>\\n\t\t<div class=\\\"col-sm-3\\\">\\n\t\t\t<label for=\\\"connect:realname\\\">Real name</label>\\n\t\t</div>\\n\t\t<div class=\\\"col-sm-9\\\">\\n\t\t\t<input class=\\\"input\\\" id=\\\"connect:realname\\\" name=\\\"realname\\\" value=\\\"\"\n + alias3(alias2(((stack1 = (depth0 != null ? depth0.defaults : depth0)) != null ? stack1.realname : stack1), depth0))\n + \"\\\">\\n\t\t</div>\\n\t\t<div class=\\\"col-sm-3\\\">\\n\t\t\t<label for=\\\"connect:channels\\\">Channels</label>\\n\t\t</div>\\n\t\t<div class=\\\"col-sm-9\\\">\\n\t\t\t<input class=\\\"input\\\" id=\\\"connect:channels\\\" name=\\\"join\\\" value=\\\"\"\n + alias3(alias2(((stack1 = (depth0 != null ? depth0.defaults : depth0)) != null ? stack1.join : stack1), depth0))\n + \"\\\">\\n\t\t</div>\\n\t\t<div class=\\\"col-sm-9 col-sm-offset-3\\\">\\n\t\t\t<button type=\\\"submit\\\" class=\\\"btn\\\">Connect</button>\\n\t\t</div>\\n\t</div>\\n</form>\\n\";\n},\"useData\":true});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./client/views/windows/connect.tpl\n// module id = 283\n// module chunks = 0","var Handlebars = require(\"/home/travis/build/thelounge/lounge/node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"\t\t\t<p>\\n\t\t\t\tThe Lounge is running from source\\n\t\t\t\t(<a href=\\\"https://github.com/thelounge/lounge/tree/\"\n + alias4(((helper = (helper = helpers.gitCommit || (depth0 != null ? depth0.gitCommit : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"gitCommit\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" target=\\\"_blank\\\" rel=\\\"noopener\\\">commit <code>\"\n + alias4(((helper = (helper = helpers.gitCommit || (depth0 != null ? depth0.gitCommit : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"gitCommit\",\"hash\":{},\"data\":data}) : helper)))\n + \"</code></a>).\\n\t\t\t</p>\\n\\n\t\t\t<ul>\\n\t\t\t\t<li>\\n\t\t\t\t\tCompare\\n\t\t\t\t\t<a href=\\\"https://github.com/thelounge/lounge/compare/\"\n + alias4(((helper = (helper = helpers.gitCommit || (depth0 != null ? depth0.gitCommit : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"gitCommit\",\"hash\":{},\"data\":data}) : helper)))\n + \"...master\\\" target=\\\"_blank\\\" rel=\\\"noopener\\\">between <code>\"\n + alias4(((helper = (helper = helpers.gitCommit || (depth0 != null ? depth0.gitCommit : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"gitCommit\",\"hash\":{},\"data\":data}) : helper)))\n + \"</code> and <code>master</code></a>\\n\t\t\t\t\tto see what you are missing\\n\t\t\t\t</li>\\n\t\t\t\t<li>\\n\t\t\t\t\tCompare\\n\t\t\t\t\t<a href=\\\"https://github.com/thelounge/lounge/compare/\"\n + alias4(((helper = (helper = helpers.version || (depth0 != null ? depth0.version : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"version\",\"hash\":{},\"data\":data}) : helper)))\n + \"...\"\n + alias4(((helper = (helper = helpers.gitCommit || (depth0 != null ? depth0.gitCommit : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"gitCommit\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" target=\\\"_blank\\\" rel=\\\"noopener\\\">between <code>\"\n + alias4(((helper = (helper = helpers.version || (depth0 != null ? depth0.version : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"version\",\"hash\":{},\"data\":data}) : helper)))\n + \"</code> and <code>\"\n + alias4(((helper = (helper = helpers.gitCommit || (depth0 != null ? depth0.gitCommit : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"gitCommit\",\"hash\":{},\"data\":data}) : helper)))\n + \"</code></a>\\n\t\t\t\t\tto see your local changes</li>\\n\t\t\t</ul>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n return \"<div class=\\\"header\\\">\\n\t<button class=\\\"lt\\\" aria-label=\\\"Toggle channel list\\\"></button>\\n</div>\\n<div class=\\\"container\\\">\\n\t<h1 class=\\\"title\\\">Help</h1>\\n\\n\t<h2>\\n\t\t<small class=\\\"pull-right\\\">\\n\t\t\tv\"\n + container.escapeExpression(((helper = (helper = helpers.version || (depth0 != null ? depth0.version : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === \"function\" ? helper.call(alias1,{\"name\":\"version\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\n\t\t\t(<a href=\\\"#\\\" id=\\\"view-changelog\\\" data-target=\\\"#changelog\\\">release notes</a>)\\n\t\t</small>\\n\t\tAbout The Lounge\\n\t</h2>\\n\\n\t<div class=\\\"about\\\">\\n\t\t<div id=\\\"version-checker\\\"></div>\\n\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.gitCommit : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\\n\t\t<p>\\n\t\t\t<a href=\\\"https://thelounge.github.io/\\\" target=\\\"_blank\\\" rel=\\\"noopener\\\" class=\\\"website-link\\\">Website</a>\\n\t\t</p>\\n\t\t<p>\\n\t\t\t<a href=\\\"https://thelounge.github.io/docs/\\\" target=\\\"_blank\\\" rel=\\\"noopener\\\" class=\\\"documentation-link\\\">Documentation</a>\\n\t\t</p>\\n\t\t<p>\\n\t\t\t<a href=\\\"https://github.com/thelounge/lounge/issues/new\\\" target=\\\"_blank\\\" rel=\\\"noopener\\\" class=\\\"report-issue-link\\\">Report an issue…</a>\\n\t\t</p>\\n\t</div>\\n\\n\t<h2>Keyboard Shortcuts</h2>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<kbd class=\\\"key-all\\\">Ctrl</kbd><kbd class=\\\"key-apple\\\">⌘</kbd> + <kbd>↑</kbd> / <kbd>↓</kbd>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>Switch to the previous/next window in the channel list.</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<kbd class=\\\"key-all\\\">Ctrl</kbd><kbd class=\\\"key-apple\\\">⌘</kbd> + <kbd>K</kbd>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>\\n\t\t\t\tMark any text typed after this shortcut to be colored. After\\n\t\t\t\thitting this shortcut, enter an integer in the range\\n\t\t\t\t<code>0—15</code> to select the desired color, or use the\\n\t\t\t\tautocompletion menu to choose a color name (see below).\\n\t\t\t</p>\\n\t\t\t<p>\\n\t\t\t\tBackground color can be specified by putting a comma and\\n\t\t\t\tanother integer in the range <code>0—15</code> after the\\n\t\t\t\tforeground color number (autocompletion works too).\\n\t\t\t</p>\\n\t\t\t<p>\\n\t\t\t\tA color reference can be found\\n\t\t\t\t<a href=\\\"https://modern.ircdocs.horse/formatting.html#colors\\\" target=\\\"_blank\\\" rel=\\\"noopener\\\">here</a>.\\n\t\t\t</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<kbd class=\\\"key-all\\\">Ctrl</kbd><kbd class=\\\"key-apple\\\">⌘</kbd> + <kbd>B</kbd>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>Mark all text typed after this shortcut as bold.</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<kbd class=\\\"key-all\\\">Ctrl</kbd><kbd class=\\\"key-apple\\\">⌘</kbd> + <kbd>U</kbd>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>Mark all text typed after this shortcut as underlined.</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<kbd class=\\\"key-all\\\">Ctrl</kbd><kbd class=\\\"key-apple\\\">⌘</kbd> + <kbd>I</kbd>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>Mark all text typed after this shortcut as italics.</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<kbd class=\\\"key-all\\\">Ctrl</kbd><kbd class=\\\"key-apple\\\">⌘</kbd> + <kbd>S</kbd>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>Mark all text typed after this shortcut as struck through.</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<kbd class=\\\"key-all\\\">Ctrl</kbd><kbd class=\\\"key-apple\\\">⌘</kbd> + <kbd>M</kbd>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>Mark all text typed after this shortcut as monospaced.</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<kbd class=\\\"key-all\\\">Ctrl</kbd><kbd class=\\\"key-apple\\\">⌘</kbd> + <kbd>O</kbd>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>\\n\t\t\t\tMark all text typed after this shortcut to be reset to its\\n\t\t\t\toriginal formatting.\\n\t\t\t</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<h2>Autocompletion</h2>\\n\\n\t<p>\\n\t\tTo auto-complete nicknames, channels, commands, and emoji, type one of the characters below to open\\n\t\ta suggestion list. Use the <kbd>↑</kbd> and <kbd>↓</kbd> keys to highlight an item, and insert it by\\n\t\tpressing <kbd>Tab</kbd> or <kbd>Enter</kbd> (or by clicking the desired item).\\n\t</p>\\n\t<p>\\n\t\tAutocompletion can be disabled in settings.\\n\t</p>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>@</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>Nickname</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>#</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>Channel</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>Commands (see list of commands below)</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>:</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>Emoji (note: requires two search characters, to avoid conflicting with common emoticons like <code>:)</code>)</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<h2>Commands</h2>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/away [message]</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>Mark yourself as away with an optional message.</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/back</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>Remove your away status (set with <code>/away</code>).</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/ban nick</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>Ban (<code>+b</code>) a user from the current channel.\\n\t\t\tThis can be a nickname or a hostmask.</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/banlist</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>Load the banlist for the current channel.</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/collapse</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>\\n\t\t\t\tCollapse all previews in the current channel (opposite of\\n\t\t\t\t<code>/expand</code>)\\n\t\t\t</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/connect host [port]</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>\\n\t\t\t\tConnect to a new IRC network. If <code>port</code> starts with\\n\t\t\t\ta <code>+</code> sign, the connection will be made secure\\n\t\t\t\tusing TLS.\\n\t\t\t</p>\\n\t\t\t<p>Alias: <code>/server</code></p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/ctcp target cmd [args]</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>\\n\t\t\t\tSend a <abbr title=\\\"Client-to-client protocol\\\">CTCP</abbr>\\n\t\t\t\trequest. Read more about this on\\n\t\t\t\t<a href=\\\"https://en.wikipedia.org/wiki/Client-to-client_protocol\\\" target=\\\"_blank\\\" rel=\\\"noopener\\\">the dedicated Wikipedia article</a>.\\n\t\t\t</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/deop nick [...nick]</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>\\n\t\t\t\tRemove op (<code>-o</code>) from one or several users in the\\n\t\t\t\tcurrent channel.\\n\t\t\t</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/devoice nick [...nick]</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>\\n\t\t\t\tRemove voice (<code>-v</code>) from one or several users in\\n\t\t\t\tthe current channel.\\n\t\t\t</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/disconnect [message]</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>\\n\t\t\t\tDisconnect from the current network with an\\n\t\t\t\toptionally-provided message.\\n\t\t\t</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/expand</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>\\n\t\t\t\tExpand all previews in the current channel (opposite of\\n\t\t\t\t<code>/collapse</code>)\\n\t\t\t</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/invite nick [channel]</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>\\n\t\t\t\tInvite a user to the specified channel. If\\n\t\t\t\t<code>channel</code> is ommitted, user will be invited to the\\n\t\t\t\tcurrent channel.\\n\t\t\t</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/join channel</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>Join a channel.</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/kick nick</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>Kick a user from the current channel.</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/list</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>Retrieve a list of available channels on this network.</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/me message</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>\\n\t\t\t\tSend an action message to the current channel. The Lounge will\\n\t\t\t\tdisplay it inline, as if the message was posted in the third\\n\t\t\t\tperson.\\n\t\t\t</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/mode flags [args]</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>\\n\t\t\t\tSet the given flags to the current channel if the active\\n\t\t\t\twindow is a channel, another user if the active window is a\\n\t\t\t\tprivate message window, or yourself if the current window is a\\n\t\t\t\tserver window.\\n\t\t\t</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/msg channel message</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>Send a message to the specified channel.</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/nick newnick</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>Change your nickname on the current network.</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/notice channel message</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>Sends a notice message to the specified channel.</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/op nick [...nick]</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>\\n\t\t\t\tGive op (<code>+o</code>) to one or several users in the\\n\t\t\t\tcurrent channel.\\n\t\t\t</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/part [channel]</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>\\n\t\t\t\tClose the specified channel or private message window, or the\\n\t\t\t\tcurrent channel if <code>channel</code> is ommitted.\\n\t\t\t</p>\\n\t\t\t<p>Aliases: <code>/close</code>, <code>/leave</code></p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/rejoin</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>\\n\t\t\t\tLeave and immediately rejoin the current channel. Useful to\\n\t\t\t\tquickly get op from ChanServ in an empty channel, for example.\\n\t\t\t</p>\\n\t\t\t<p>Alias: <code>/cycle</code></p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/query nick</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>Send a private message to the specified user.</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/quit [message]</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>\\n\t\t\t\tDisconnect from the current network with an optional message.\\n\t\t\t</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/raw message</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>Send a raw message to the current IRC network.</p>\\n\t\t\t<p>Aliases: <code>/quote</code>, <code>/send</code></p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/slap nick</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>Slap someone in the current channel with a trout!</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/topic newtopic</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>Set the topic in the current channel.</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/unban nick</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>Unban (<code>-b</code>) a user from the current channel.\\n\t\t\t\tThis can be a nickname or a hostmask.</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/voice nick [...nick]</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>\\n\t\t\t\tGive voice (<code>+v</code>) to one or several users in the\\n\t\t\t\tcurrent channel.\\n\t\t\t</p>\\n\t\t</div>\\n\t</div>\\n\\n\t<div class=\\\"help-item\\\">\\n\t\t<div class=\\\"subject\\\">\\n\t\t\t<code>/whois nick</code>\\n\t\t</div>\\n\t\t<div class=\\\"description\\\">\\n\t\t\t<p>\\n\t\t\t\tRetrieve information about the given user on the current\\n\t\t\t\tnetwork.\\n\t\t\t</p>\\n\t\t</div>\\n\t</div>\\n</div>\\n\";\n},\"useData\":true});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./client/views/windows/help.tpl\n// module id = 284\n// module chunks = 0","var Handlebars = require(\"/home/travis/build/thelounge/lounge/node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"\t\t\t\t\t<option value=\\\"\"\n + alias4(((helper = (helper = helpers.name || (depth0 != null ? depth0.name : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"name\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\\n\t\t\t\t\t\t\"\n + alias4(((helper = (helper = helpers.displayName || (depth0 != null ? depth0.displayName : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"displayName\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\n\t\t\t\t\t</option>\\n\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n return \"\t\t<div class=\\\"col-sm-12\\\">\\n\t\t\t<h2>Link previews</h2>\\n\t\t</div>\\n\t\t<div class=\\\"col-sm-6\\\">\\n\t\t\t<label class=\\\"opt\\\">\\n\t\t\t\t<input type=\\\"checkbox\\\" name=\\\"media\\\">\\n\t\t\t\tAuto-expand media\\n\t\t\t</label>\\n\t\t</div>\\n\t\t<div class=\\\"col-sm-6\\\">\\n\t\t\t<label class=\\\"opt\\\">\\n\t\t\t\t<input type=\\\"checkbox\\\" name=\\\"links\\\">\\n\t\t\t\tAuto-expand websites\\n\t\t\t</label>\\n\t\t</div>\\n\";\n},\"5\":function(container,depth0,helpers,partials,data) {\n return \"\t\t<div class=\\\"col-sm-12\\\">\\n\t\t\t<h2>Push Notifications</h2>\\n\t\t</div>\\n\t\t<div class=\\\"col-sm-12\\\">\\n\t\t\t<button type=\\\"button\\\" class=\\\"btn\\\" id=\\\"pushNotifications\\\" disabled data-text-alternate=\\\"Unsubscribe from push notifications\\\">Subscribe to push notifications</button>\\n\t\t\t<div class=\\\"error\\\" id=\\\"pushNotificationsHttps\\\">\\n\t\t\t\t<strong>Warning</strong>:\\n\t\t\t\tPush notifications are only supported over HTTPS connections.\\n\t\t\t</div>\\n\t\t\t<div class=\\\"error\\\" id=\\\"pushNotificationsUnsupported\\\">\\n\t\t\t\t<strong>Warning</strong>:\\n\t\t\t\t<span>Push notifications are not supported by your browser.</span>\\n\t\t\t</div>\\n\t\t</div>\\n\";\n},\"7\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = helpers.unless.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.ldapEnabled : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(8, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"8\":function(container,depth0,helpers,partials,data) {\n return \"\t\t<div id=\\\"change-password\\\">\\n\t\t\t<form action=\\\"\\\" method=\\\"post\\\" data-event=\\\"change-password\\\">\\n\t\t\t\t<div class=\\\"col-sm-12\\\">\\n\t\t\t\t\t<h2>Change password</h2>\\n\t\t\t\t</div>\\n\t\t\t\t<div class=\\\"col-sm-12\\\">\\n\t\t\t\t\t<label for=\\\"old_password_input\\\" class=\\\"sr-only\\\">Enter current password</label>\\n\t\t\t\t\t<input type=\\\"password\\\" id=\\\"old_password_input\\\" name=\\\"old_password\\\" class=\\\"input\\\" placeholder=\\\"Enter current password\\\">\\n\t\t\t\t</div>\\n\t\t\t\t<div class=\\\"col-sm-12\\\">\\n\t\t\t\t\t<label for=\\\"new_password_input\\\" class=\\\"sr-only\\\">Enter desired new password</label>\\n\t\t\t\t\t<input type=\\\"password\\\" id=\\\"new_password_input\\\" name=\\\"new_password\\\" class=\\\"input\\\" placeholder=\\\"Enter desired new password\\\">\\n\t\t\t\t</div>\\n\t\t\t\t<div class=\\\"col-sm-12\\\">\\n\t\t\t\t\t<label for=\\\"verify_password_input\\\" class=\\\"sr-only\\\">Repeat new password</label>\\n\t\t\t\t\t<input type=\\\"password\\\" id=\\\"verify_password_input\\\" name=\\\"verify_password\\\" class=\\\"input\\\" placeholder=\\\"Repeat new password\\\">\\n\t\t\t\t</div>\\n\t\t\t\t<div class=\\\"col-sm-12 feedback\\\"></div>\\n\t\t\t\t<div class=\\\"col-sm-12\\\">\\n\t\t\t\t\t<button type=\\\"submit\\\" class=\\\"btn\\\">Change password</button>\\n\t\t\t\t</div>\\n\t\t\t</form>\\n\t\t</div>\\n\";\n},\"10\":function(container,depth0,helpers,partials,data) {\n return \"\t\t<div class=\\\"session-list\\\">\\n\t\t\t<h2>Sessions</h2>\\n\\n\t\t\t<h3>Current session</h3>\\n\t\t\t<div id=\\\"session-current\\\"></div>\\n\\n\t\t\t<h3>Other sessions</h3>\\n\t\t\t<div id=\\\"session-list\\\"></div>\\n\t\t</div>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n return \"<div class=\\\"header\\\">\\n\t<button class=\\\"lt\\\" aria-label=\\\"Toggle channel list\\\"></button>\\n</div>\\n<div class=\\\"container\\\">\\n\t<h1 class=\\\"title\\\">Settings</h1>\\n\\n\t<div class=\\\"row\\\">\\n\t\t<div class=\\\"col-sm-12\\\">\\n\t\t\t<h2>Messages</h2>\\n\t\t</div>\\n\t\t<div class=\\\"col-sm-6\\\">\\n\t\t\t<label class=\\\"opt\\\">\\n\t\t\t\t<input type=\\\"checkbox\\\" name=\\\"motd\\\">\\n\t\t\t\tShow <abbr title=\\\"Message Of The Day\\\">MOTD</abbr>\\n\t\t\t</label>\\n\t\t</div>\\n\t\t<div class=\\\"col-sm-6\\\">\\n\t\t\t<label class=\\\"opt\\\">\\n\t\t\t\t<input type=\\\"checkbox\\\" name=\\\"showSeconds\\\">\\n\t\t\t\tShow seconds in timestamp\\n\t\t\t</label>\\n\t\t</div>\\n\t\t<div class=\\\"col-sm-12\\\">\\n\t\t\t<h2>\\n\t\t\t\tStatus messages\\n\t\t\t\t<span class=\\\"tooltipped tooltipped-n tooltipped-no-delay\\\" aria-label=\\\"Joins, parts, kicks, nick changes, away changes, and mode changes\\\">\\n\t\t\t\t\t<button class=\\\"extra-help\\\" aria-label=\\\"Joins, parts, kicks, nick changes, away changes, and mode changes\\\"></button>\\n\t\t\t\t</span>\\n\t\t\t</h2>\\n\t\t</div>\\n\t\t<div class=\\\"col-sm-12\\\">\\n\t\t\t<label class=\\\"opt\\\">\\n\t\t\t\t<input type=\\\"radio\\\" name=\\\"statusMessages\\\" value=\\\"shown\\\">\\n\t\t\t\tShow all status messages individually\\n\t\t\t</label>\\n\t\t\t<label class=\\\"opt\\\">\\n\t\t\t\t<input type=\\\"radio\\\" name=\\\"statusMessages\\\" value=\\\"condensed\\\">\\n\t\t\t\tCondense status messages together\\n\t\t\t</label>\\n\t\t\t<label class=\\\"opt\\\">\\n\t\t\t\t<input type=\\\"radio\\\" name=\\\"statusMessages\\\" value=\\\"hidden\\\">\\n\t\t\t\tHide all status messages\\n\t\t\t</label>\\n\t\t</div>\\n\t\t<div class=\\\"col-sm-12\\\">\\n\t\t\t<h2>Visual Aids</h2>\\n\t\t</div>\\n\t\t<div class=\\\"col-sm-12\\\">\\n\t\t\t<label class=\\\"opt\\\">\\n\t\t\t\t<input type=\\\"checkbox\\\" name=\\\"coloredNicks\\\">\\n\t\t\t\tEnable colored nicknames\\n\t\t\t</label>\\n\t\t\t<label class=\\\"opt\\\">\\n\t\t\t\t<input type=\\\"checkbox\\\" name=\\\"autocomplete\\\">\\n\t\t\t\tEnable autocomplete\\n\t\t\t</label>\\n\t\t</div>\\n\t\t<div class=\\\"col-sm-12\\\">\\n\t\t\t<label class=\\\"opt\\\">\\n\t\t\t\t<label for=\\\"nickPostfix\\\" class=\\\"sr-only\\\">Nick autocomplete postfix (e.g. <code>, </code>)</label>\\n\t\t\t\t<input type=\\\"text\\\" id=\\\"nickPostfix\\\" name=\\\"nickPostfix\\\" class=\\\"input\\\" placeholder=\\\"Nick autocomplete postfix (e.g. ', ')\\\">\\n\t\t\t</label>\\n\t\t</div>\\n\\n\t\t<div class=\\\"col-sm-12\\\">\\n\t\t\t<h2>Theme</h2>\\n\t\t</div>\\n\t\t<div class=\\\"col-sm-12\\\">\\n\t\t\t<label for=\\\"theme-select\\\" class=\\\"sr-only\\\">Theme</label>\\n\t\t\t<select id=\\\"theme-select\\\" name=\\\"theme\\\" class=\\\"input\\\">\\n\"\n + ((stack1 = helpers.each.call(alias1,(depth0 != null ? depth0.themes : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t\t\t</select>\\n\t\t</div>\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.prefetch : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0[\"public\"] : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(5, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t\t<div class=\\\"col-sm-12\\\">\\n\t\t\t<h2>Browser Notifications</h2>\\n\t\t</div>\\n\t\t<div class=\\\"col-sm-12\\\">\\n\t\t\t<label class=\\\"opt\\\">\\n\t\t\t<input id=\\\"desktopNotifications\\\" type=\\\"checkbox\\\" name=\\\"desktopNotifications\\\">\\n\t\t\tEnable browser notifications<br>\\n\t\t\t<div class=\\\"error\\\" id=\\\"warnUnsupportedDesktopNotifications\\\">\\n\t\t\t\t<strong>Warning</strong>:\\n\t\t\t\tNotifications are not supported by your browser.\\n\t\t\t</div>\\n\t\t\t<div class=\\\"error\\\" id=\\\"warnBlockedDesktopNotifications\\\">\\n\t\t\t\t<strong>Warning</strong>:\\n\t\t\t\tNotifications are blocked by your browser.\\n\t\t\t</div>\\n\t\t\t</label>\\n\t\t</div>\\n\t\t<div class=\\\"col-sm-12\\\">\\n\t\t\t<label class=\\\"opt\\\">\\n\t\t\t<input type=\\\"checkbox\\\" name=\\\"notification\\\">\\n\t\t\tEnable notification sound\\n\t\t\t</label>\\n\t\t</div>\\n\t\t<div class=\\\"col-sm-12\\\">\\n\t\t\t<div class=\\\"opt\\\">\\n\t\t\t\t<button id=\\\"play\\\">Play sound</button>\\n\t\t\t</div>\\n\t\t</div>\\n\\n\t\t<div class=\\\"col-sm-12\\\">\\n\t\t\t<label class=\\\"opt\\\">\\n\t\t\t\t<input type=\\\"checkbox\\\" name=\\\"notifyAllMessages\\\">\\n\t\t\t\tEnable notification for all messages\\n\t\t\t</label>\\n\t\t</div>\\n\\n\t\t<div class=\\\"col-sm-12\\\">\\n\t\t\t<label class=\\\"opt\\\">\\n\t\t\t\t<label for=\\\"highlights\\\" class=\\\"sr-only\\\">Custom highlights (comma-separated keywords)</label>\\n\t\t\t\t<input type=\\\"text\\\" id=\\\"highlights\\\" name=\\\"highlights\\\" class=\\\"input\\\" placeholder=\\\"Custom highlights (comma-separated keywords)\\\">\\n\t\t\t</label>\\n\t\t</div>\\n\\n\"\n + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0[\"public\"] : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(7, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t\t<div class=\\\"col-sm-12\\\">\\n\t\t\t<h2>Custom Stylesheet</h2>\\n\t\t</div>\\n\t\t<div class=\\\"col-sm-12\\\">\\n\t\t\t<label for=\\\"user-specified-css-input\\\" class=\\\"sr-only\\\">Custom stylesheet. You can override any style with CSS here.</label>\\n\t\t\t<textarea class=\\\"input\\\" name=\\\"userStyles\\\" id=\\\"user-specified-css-input\\\" placeholder=\\\"/* You can override any style with CSS here */\\\"></textarea>\\n\t\t</div>\\n\t</div>\\n\\n\"\n + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0[\"public\"] : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(10, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"</div>\\n\";\n},\"useData\":true});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./client/views/windows/settings.tpl\n// module id = 285\n// module chunks = 0","var Handlebars = require(\"/home/travis/build/thelounge/lounge/node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n return \"<form class=\\\"container\\\" method=\\\"post\\\" action=\\\"\\\">\\n\t<div class=\\\"row\\\">\\n\t\t<div class=\\\"col-xs-12\\\">\\n\t\t\t<h1 class=\\\"title\\\">Sign in to The Lounge</h1>\\n\t\t</div>\\n\t\t<div class=\\\"col-xs-12\\\">\\n\t\t\t<label>\\n\t\t\t\tUsername\\n\t\t\t\t<input class=\\\"input\\\" name=\\\"user\\\" autofocus>\\n\t\t\t</label>\\n\t\t</div>\\n\t\t<div class=\\\"col-xs-12\\\">\\n\t\t\t<label>\\n\t\t\t\tPassword\\n\t\t\t\t<input class=\\\"input\\\" type=\\\"password\\\" name=\\\"password\\\">\\n\t\t\t</label>\\n\t\t</div>\\n\t\t<div class=\\\"col-xs-12 error\\\" style=\\\"display: none;\\\">Authentication failed.</div>\\n\t\t<div class=\\\"col-xs-12\\\">\\n\t\t\t<button type=\\\"submit\\\" class=\\\"btn\\\">Sign in</button>\\n\t\t</div>\\n\t</div>\\n</form>\\n\";\n},\"useData\":true});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./client/views/windows/sign_in.tpl\n// module id = 286\n// module chunks = 0","\"use strict\";\n\nconst $ = require(\"jquery\");\nconst sidebar = $(\"#sidebar, #footer\");\nconst socket = require(\"./socket\");\nconst options = require(\"./options\");\n\nmodule.exports = function() {\n\tsidebar.find(\".networks\").sortable({\n\t\taxis: \"y\",\n\t\tcontainment: \"parent\",\n\t\tcursor: \"move\",\n\t\tdistance: 12,\n\t\titems: \".network\",\n\t\thandle: \".lobby\",\n\t\tplaceholder: \"network-placeholder\",\n\t\tforcePlaceholderSize: true,\n\t\ttolerance: \"pointer\", // Use the pointer to figure out where the network is in the list\n\n\t\tupdate: function() {\n\t\t\tconst order = [];\n\t\t\tsidebar.find(\".network\").each(function() {\n\t\t\t\tconst id = $(this).data(\"id\");\n\t\t\t\torder.push(id);\n\t\t\t});\n\t\t\tsocket.emit(\n\t\t\t\t\"sort\", {\n\t\t\t\t\ttype: \"networks\",\n\t\t\t\t\torder: order,\n\t\t\t\t}\n\t\t\t);\n\n\t\t\toptions.ignoreSortSync = true;\n\t\t},\n\t});\n\tsidebar.find(\".network\").sortable({\n\t\taxis: \"y\",\n\t\tcontainment: \"parent\",\n\t\tcursor: \"move\",\n\t\tdistance: 12,\n\t\titems: \".chan:not(.lobby)\",\n\t\tplaceholder: \"chan-placeholder\",\n\t\tforcePlaceholderSize: true,\n\t\ttolerance: \"pointer\", // Use the pointer to figure out where the channel is in the list\n\n\t\tupdate: function(e, ui) {\n\t\t\tconst order = [];\n\t\t\tconst network = ui.item.parent();\n\t\t\tnetwork.find(\".chan\").each(function() {\n\t\t\t\tconst id = $(this).data(\"id\");\n\t\t\t\torder.push(id);\n\t\t\t});\n\t\t\tsocket.emit(\n\t\t\t\t\"sort\", {\n\t\t\t\t\ttype: \"channels\",\n\t\t\t\t\ttarget: network.data(\"id\"),\n\t\t\t\t\torder: order,\n\t\t\t\t}\n\t\t\t);\n\n\t\t\toptions.ignoreSortSync = true;\n\t\t},\n\t});\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/sorting.js","\"use strict\";\n\nrequire(\"./auth\");\nrequire(\"./change_password\");\nrequire(\"./init\");\nrequire(\"./join\");\nrequire(\"./more\");\nrequire(\"./msg\");\nrequire(\"./msg_preview\");\nrequire(\"./names\");\nrequire(\"./network\");\nrequire(\"./nick\");\nrequire(\"./open\");\nrequire(\"./part\");\nrequire(\"./quit\");\nrequire(\"./sync_sort\");\nrequire(\"./topic\");\nrequire(\"./users\");\nrequire(\"./sign_out\");\nrequire(\"./sessions_list\");\nrequire(\"./configuration\");\nrequire(\"./changelog\");\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/socket-events/index.js","\"use strict\";\n\nconst $ = require(\"jquery\");\nconst socket = require(\"../socket\");\nconst storage = require(\"../localStorage\");\nconst utils = require(\"../utils\");\nconst templates = require(\"../../views\");\n\nsocket.on(\"auth\", function(data) {\n\t// If we reconnected and serverHash differs, that means the server restarted\n\t// And we will reload the page to grab the latest version\n\tif (utils.serverHash > -1 && data.serverHash > -1 && data.serverHash !== utils.serverHash) {\n\t\tsocket.disconnect();\n\t\t$(\"#connection-error\").text(\"Server restarted, reloading…\");\n\t\tlocation.reload(true);\n\t\treturn;\n\t}\n\n\tconst login = $(\"#sign-in\");\n\n\tif (data.serverHash > -1) {\n\t\tutils.serverHash = data.serverHash;\n\n\t\tlogin.html(templates.windows.sign_in());\n\n\t\tlogin.find(\"form\").on(\"submit\", function() {\n\t\t\tconst form = $(this);\n\n\t\t\tform.find(\".btn\").prop(\"disabled\", true);\n\n\t\t\tconst values = {};\n\t\t\t$.each(form.serializeArray(), function(i, obj) {\n\t\t\t\tvalues[obj.name] = obj.value;\n\t\t\t});\n\n\t\t\tstorage.set(\"user\", values.user);\n\n\t\t\tsocket.emit(\"auth\", values);\n\n\t\t\treturn false;\n\t\t});\n\t} else {\n\t\tlogin.find(\".btn\").prop(\"disabled\", false);\n\t}\n\n\tlet token;\n\tconst user = storage.get(\"user\");\n\n\tif (!data.success) {\n\t\tif (login.length === 0) {\n\t\t\tsocket.disconnect();\n\t\t\t$(\"#connection-error\").text(\"Authentication failed, reloading…\");\n\t\t\tlocation.reload();\n\t\t\treturn;\n\t\t}\n\n\t\tstorage.remove(\"token\");\n\n\t\tconst error = login.find(\".error\");\n\t\terror.show().closest(\"form\").one(\"submit\", function() {\n\t\t\terror.hide();\n\t\t});\n\t} else if (user) {\n\t\ttoken = storage.get(\"token\");\n\n\t\tif (token) {\n\t\t\t$(\"#loading-page-message, #connection-error\").text(\"Authorizing…\");\n\n\t\t\tsocket.emit(\"auth\", {\n\t\t\t\tuser: user,\n\t\t\t\ttoken: token,\n\t\t\t\tlastMessage: utils.lastMessageId,\n\t\t\t});\n\t\t}\n\t}\n\n\tif (user) {\n\t\tlogin.find(\"input[name='user']\").val(user);\n\t}\n\n\tif (token) {\n\t\treturn;\n\t}\n\n\t$(\"#footer\")\n\t\t.find(\".sign-in\")\n\t\t.trigger(\"click\", {\n\t\t\tpushState: false,\n\t\t});\n});\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/socket-events/auth.js","\"use strict\";\n\nconst $ = require(\"jquery\");\nconst socket = require(\"../socket\");\n\nsocket.on(\"change-password\", function(data) {\n\tconst passwordForm = $(\"#change-password\");\n\tif (data.error || data.success) {\n\t\tconst message = data.success ? data.success : data.error;\n\t\tconst feedback = passwordForm.find(\".feedback\");\n\n\t\tif (data.success) {\n\t\t\tfeedback.addClass(\"success\").removeClass(\"error\");\n\t\t} else {\n\t\t\tfeedback.addClass(\"error\").removeClass(\"success\");\n\t\t}\n\n\t\tfeedback.text(message).show();\n\t\tfeedback.closest(\"form\").one(\"submit\", function() {\n\t\t\tfeedback.hide();\n\t\t});\n\t}\n\n\tpasswordForm\n\t\t.find(\"input\")\n\t\t.val(\"\")\n\t\t.end()\n\t\t.find(\".btn\")\n\t\t.prop(\"disabled\", false);\n});\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/socket-events/change_password.js","\"use strict\";\n\nconst $ = require(\"jquery\");\nconst escape = require(\"css.escape\");\nconst socket = require(\"../socket\");\nconst render = require(\"../render\");\nconst webpush = require(\"../webpush\");\nconst sidebar = $(\"#sidebar\");\nconst storage = require(\"../localStorage\");\nconst utils = require(\"../utils\");\n\nsocket.on(\"init\", function(data) {\n\t$(\"#loading-page-message, #connection-error\").text(\"Rendering…\");\n\n\tconst lastMessageId = utils.lastMessageId;\n\tlet previousActive = 0;\n\n\tif (lastMessageId > -1) {\n\t\tpreviousActive = sidebar.find(\".active\").data(\"id\");\n\t\tsidebar.find(\".networks\").empty();\n\t}\n\n\tif (data.networks.length === 0) {\n\t\tsidebar.find(\".empty\").show();\n\n\t\t$(\"#footer\").find(\".connect\").trigger(\"click\", {\n\t\t\tpushState: false,\n\t\t});\n\t} else {\n\t\trender.renderNetworks(data);\n\t}\n\n\tif (lastMessageId > -1) {\n\t\t$(\"#connection-error\").removeClass(\"shown\");\n\t\t$(\".show-more-button, #input\").prop(\"disabled\", false);\n\t\t$(\"#submit\").show();\n\t} else {\n\t\tif (data.token) {\n\t\t\tstorage.set(\"token\", data.token);\n\t\t}\n\n\t\twebpush.configurePushNotifications(data.pushSubscription, data.applicationServerKey);\n\n\t\t$(\"body\").removeClass(\"signed-out\");\n\t\t$(\"#loading\").remove();\n\t\t$(\"#sign-in\").remove();\n\n\t\tif (window.g_LoungeErrorHandler) {\n\t\t\twindow.removeEventListener(\"error\", window.g_LoungeErrorHandler);\n\t\t\twindow.g_LoungeErrorHandler = null;\n\t\t}\n\t}\n\n\topenCorrectChannel(previousActive, data.active);\n});\n\nfunction openCorrectChannel(clientActive, serverActive) {\n\tlet target = $();\n\n\t// Open last active channel\n\tif (clientActive > 0) {\n\t\ttarget = sidebar.find(`.chan[data-id=\"${clientActive}\"]`);\n\t}\n\n\t// Open window provided in location.hash\n\tif (target.length === 0 && window.location.hash) {\n\t\ttarget = $(`[data-target=\"${escape(window.location.hash)}\"]`).first();\n\t}\n\n\t// Open last active channel according to the server\n\tif (serverActive > 0 && target.length === 0) {\n\t\ttarget = sidebar.find(`.chan[data-id=\"${serverActive}\"]`);\n\t}\n\n\t// Open first available channel\n\tif (target.length === 0) {\n\t\ttarget = sidebar.find(\".chan\").first();\n\t}\n\n\t// If target channel is found, open it\n\tif (target.length > 0) {\n\t\ttarget.trigger(\"click\", {\n\t\t\treplaceHistory: true,\n\t\t});\n\n\t\treturn;\n\t}\n\n\t// Open the connect window\n\t$(\"#footer .connect\").trigger(\"click\", {\n\t\tpushState: false,\n\t});\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/socket-events/init.js","\"use strict\";\n\nconst $ = require(\"jquery\");\nconst socket = require(\"../socket\");\nconst render = require(\"../render\");\nconst chat = $(\"#chat\");\nconst templates = require(\"../../views\");\nconst sidebar = $(\"#sidebar\");\n\nsocket.on(\"join\", function(data) {\n\tconst id = data.network;\n\tconst network = sidebar.find(\"#network-\" + id);\n\tnetwork.append(\n\t\ttemplates.chan({\n\t\t\tchannels: [data.chan],\n\t\t})\n\t);\n\tchat.append(\n\t\ttemplates.chat({\n\t\t\tchannels: [data.chan],\n\t\t})\n\t);\n\trender.renderChannel(data.chan);\n\n\t// Queries do not automatically focus, unless the user did a whois\n\tif (data.chan.type === \"query\" && !data.shouldOpen) {\n\t\treturn;\n\t}\n\n\tsidebar.find(\".chan\")\n\t\t.sort(function(a, b) {\n\t\t\treturn $(a).data(\"id\") - $(b).data(\"id\");\n\t\t})\n\t\t.last()\n\t\t.trigger(\"click\");\n});\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/socket-events/join.js","\"use strict\";\n\nconst $ = require(\"jquery\");\nconst socket = require(\"../socket\");\nconst render = require(\"../render\");\nconst condensed = require(\"../condensed\");\nconst chat = $(\"#chat\");\n\nsocket.on(\"more\", function(data) {\n\tlet chan = chat.find(\"#chan-\" + data.chan);\n\tconst type = chan.data(\"type\");\n\tchan = chan.find(\".messages\");\n\n\t// get the scrollable wrapper around messages\n\tconst scrollable = chan.closest(\".chat\");\n\tconst heightOld = chan.height() - scrollable.scrollTop();\n\n\t// If there are no more messages to show, just hide the button and do nothing else\n\tif (!data.messages.length) {\n\t\tscrollable.find(\".show-more\").removeClass(\"show\");\n\t\treturn;\n\t}\n\n\t// Remove the date-change marker we put at the top, because it may\n\t// not actually be a date change now\n\tconst children = $(chan).children();\n\tif (children.eq(0).hasClass(\"date-marker-container\")) { // Check top most child\n\t\tchildren.eq(0).remove();\n\t} else if (children.eq(1).hasClass(\"date-marker-container\")) {\n\t\t// The unread-marker could be at index 0, which will cause the date-marker to become \"stuck\"\n\t\tchildren.eq(1).remove();\n\t} else if (children.eq(0).hasClass(\"condensed\") && children.eq(0).children(\".date-marker-container\").eq(0).hasClass(\"date-marker-container\")) {\n\t\tchildren.eq(0).children(\".date-marker-container\").eq(0).remove();\n\t}\n\n\t// Add the older messages\n\tconst documentFragment = render.buildChannelMessages($(document.createDocumentFragment()), data.chan, type, data.messages);\n\tchan.prepend(documentFragment);\n\n\t// Move unread marker to correct spot if needed\n\tconst unreadMarker = chan.find(\".unread-marker\");\n\tconst firstUnread = unreadMarker.data(\"unread-id\");\n\n\tif (firstUnread > 0) {\n\t\tlet first = chan.find(\"#msg-\" + firstUnread);\n\n\t\tif (!first.length) {\n\t\t\tchan.prepend(unreadMarker);\n\t\t} else {\n\t\t\tconst parent = first.parent();\n\n\t\t\tif (parent.hasClass(\"condensed\")) {\n\t\t\t\tfirst = parent;\n\t\t\t}\n\n\t\t\tunreadMarker.data(\"unread-id\", 0);\n\n\t\t\tfirst.before(unreadMarker);\n\t\t}\n\t}\n\n\t// Join duplicate condensed messages together\n\tconst condensedDuplicate = chan.find(\".msg.condensed + .msg.condensed\");\n\n\tif (condensedDuplicate) {\n\t\tconst condensedCorrect = condensedDuplicate.prev();\n\n\t\tcondensed.updateText(condensedCorrect, condensed.getStoredTypes(condensedDuplicate));\n\n\t\tcondensedCorrect\n\t\t\t.append(condensedDuplicate.find(\".msg\"))\n\t\t\t.toggleClass(\"closed\", condensedDuplicate.hasClass(\"closed\"));\n\n\t\tcondensedDuplicate.remove();\n\t}\n\n\t// restore scroll position\n\tconst position = chan.height() - heightOld;\n\tscrollable.finish().scrollTop(position);\n\n\t// We have to do this hack due to smooth scrolling in browsers,\n\t// as scrollTop does not apply correctly\n\tif (window.requestAnimationFrame) {\n\t\twindow.requestAnimationFrame(() => scrollable.scrollTop(position));\n\t}\n\n\tif (data.messages.length !== 100) {\n\t\tscrollable.find(\".show-more\").removeClass(\"show\");\n\t}\n\n\tscrollable.find(\".show-more-button\")\n\t\t.text(\"Show older messages\")\n\t\t.prop(\"disabled\", false);\n});\n\nchat.on(\"click\", \".show-more-button\", function() {\n\tconst self = $(this);\n\tconst lastMessage = self.closest(\".chat\").find(\".msg:not(.condensed)\").first();\n\tlet lastMessageId = -1;\n\n\tif (lastMessage.length > 0) {\n\t\tlastMessageId = parseInt(lastMessage.prop(\"id\").replace(\"msg-\", \"\"), 10);\n\t}\n\n\tself\n\t\t.text(\"Loading older messages…\")\n\t\t.prop(\"disabled\", true);\n\n\tsocket.emit(\"more\", {\n\t\ttarget: self.data(\"id\"),\n\t\tlastId: lastMessageId,\n\t});\n});\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/socket-events/more.js","\"use strict\";\n\nconst $ = require(\"jquery\");\nconst socket = require(\"../socket\");\nconst render = require(\"../render\");\nconst utils = require(\"../utils\");\nconst options = require(\"../options\");\nconst helpers_roundBadgeNumber = require(\"../libs/handlebars/roundBadgeNumber\");\nconst cleanIrcMessage = require(\"../libs/handlebars/ircmessageparser/cleanIrcMessage\");\nconst webpush = require(\"../webpush\");\nconst chat = $(\"#chat\");\nconst sidebar = $(\"#sidebar\");\n\nlet pop;\ntry {\n\tpop = new Audio();\n\tpop.src = \"audio/pop.ogg\";\n} catch (e) {\n\tpop = {\n\t\tplay: $.noop,\n\t};\n}\n\nsocket.on(\"msg\", function(data) {\n\t// We set a maximum timeout of 2 seconds so that messages don't take too long to appear.\n\tutils.requestIdleCallback(() => processReceivedMessage(data), 2000);\n});\n\nfunction processReceivedMessage(data) {\n\tlet targetId = data.chan;\n\tlet target = \"#chan-\" + targetId;\n\tlet channel = chat.find(target);\n\tlet sidebarTarget = sidebar.find(\"[data-target='\" + target + \"']\");\n\n\t// Display received notices and errors in currently active channel.\n\t// Reloading the page will put them back into the lobby window.\n\tif (data.msg.showInActive) {\n\t\tconst activeOnNetwork = sidebarTarget.parent().find(\".active\");\n\n\t\t// We only want to put errors/notices in active channel if they arrive on the same network\n\t\tif (activeOnNetwork.length > 0) {\n\t\t\ttargetId = data.chan = activeOnNetwork.data(\"id\");\n\n\t\t\ttarget = \"#chan-\" + targetId;\n\t\t\tchannel = chat.find(target);\n\t\t\tsidebarTarget = sidebar.find(\"[data-target='\" + target + \"']\");\n\t\t}\n\t}\n\n\tconst container = channel.find(\".messages\");\n\tconst activeChannelId = chat.find(\".chan.active\").data(\"id\");\n\n\tif (data.msg.type === \"channel_list\" || data.msg.type === \"ban_list\") {\n\t\t$(container).empty();\n\t}\n\n\t// Add message to the container\n\trender.appendMessage(\n\t\tcontainer,\n\t\ttargetId,\n\t\tchannel.data(\"type\"),\n\t\tdata.msg\n\t);\n\n\tif (activeChannelId === targetId) {\n\t\tcontainer.trigger(\"keepToBottom\");\n\t}\n\n\tnotifyMessage(targetId, channel, data);\n\n\tvar lastVisible = container.find(\"div:visible\").last();\n\tif (data.msg.self\n\t\t|| lastVisible.hasClass(\"unread-marker\")\n\t\t|| (lastVisible.hasClass(\"date-marker\")\n\t\t&& lastVisible.prev().hasClass(\"unread-marker\"))) {\n\t\tcontainer\n\t\t\t.find(\".unread-marker\")\n\t\t\t.data(\"unread-id\", 0)\n\t\t\t.appendTo(container);\n\t}\n\n\t// Clear unread/highlight counter if self-message\n\tif (data.msg.self) {\n\t\tsidebarTarget.find(\".badge\").removeClass(\"highlight\").empty();\n\t}\n\n\tlet messageLimit = 0;\n\n\tif (activeChannelId !== targetId) {\n\t\t// If message arrives in non active channel, keep only 100 messages\n\t\tmessageLimit = 100;\n\t} else if (container.isScrollBottom()) {\n\t\t// If message arrives in active channel, keep 500 messages if scroll is currently at the bottom\n\t\tmessageLimit = 500;\n\t}\n\n\tif (messageLimit > 0) {\n\t\trender.trimMessageInChannel(channel, messageLimit);\n\t}\n\n\tif ((data.msg.type === \"message\" || data.msg.type === \"action\") && channel.hasClass(\"channel\")) {\n\t\tconst nicks = channel.find(\".users\").data(\"nicks\");\n\t\tif (nicks) {\n\t\t\tconst find = nicks.indexOf(data.msg.from.nick);\n\t\t\tif (find !== -1) {\n\t\t\t\tnicks.splice(find, 1);\n\t\t\t\tnicks.unshift(data.msg.from.nick);\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction notifyMessage(targetId, channel, msg) {\n\tconst unread = msg.unread;\n\tmsg = msg.msg;\n\n\tif (msg.self) {\n\t\treturn;\n\t}\n\n\tconst button = sidebar.find(\".chan[data-id='\" + targetId + \"']\");\n\tif (msg.highlight || (options.notifyAllMessages && msg.type === \"message\")) {\n\t\tif (!document.hasFocus() || !channel.hasClass(\"active\")) {\n\t\t\tif (options.notification) {\n\t\t\t\ttry {\n\t\t\t\t\tpop.play();\n\t\t\t\t} catch (exception) {\n\t\t\t\t\t// On mobile, sounds can not be played without user interaction.\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tutils.toggleNotificationMarkers(true);\n\n\t\t\tif (options.desktopNotifications && Notification.permission === \"granted\") {\n\t\t\t\tlet title;\n\t\t\t\tlet body;\n\n\t\t\t\tif (msg.type === \"invite\") {\n\t\t\t\t\ttitle = \"New channel invite:\";\n\t\t\t\t\tbody = msg.from.nick + \" invited you to \" + msg.channel;\n\t\t\t\t} else {\n\t\t\t\t\ttitle = msg.from.nick;\n\t\t\t\t\tif (!button.hasClass(\"query\")) {\n\t\t\t\t\t\ttitle += \" (\" + button.data(\"title\").trim() + \")\";\n\t\t\t\t\t}\n\t\t\t\t\tif (msg.type === \"message\") {\n\t\t\t\t\t\ttitle += \" says:\";\n\t\t\t\t\t}\n\t\t\t\t\tbody = cleanIrcMessage(msg.text);\n\t\t\t\t}\n\n\t\t\t\tconst timestamp = Date.parse(msg.time);\n\n\t\t\t\ttry {\n\t\t\t\t\tif (webpush.hasServiceWorker) {\n\t\t\t\t\t\tnavigator.serviceWorker.ready.then((registration) => {\n\t\t\t\t\t\t\tregistration.active.postMessage({\n\t\t\t\t\t\t\t\ttype: \"notification\",\n\t\t\t\t\t\t\t\tchanId: targetId,\n\t\t\t\t\t\t\t\ttimestamp: timestamp,\n\t\t\t\t\t\t\t\ttitle: title,\n\t\t\t\t\t\t\t\tbody: body,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst notify = new Notification(title, {\n\t\t\t\t\t\t\ttag: `chan-${targetId}`,\n\t\t\t\t\t\t\tbadge: \"img/logo-64.png\",\n\t\t\t\t\t\t\ticon: \"img/touch-icon-192x192.png\",\n\t\t\t\t\t\t\tbody: body,\n\t\t\t\t\t\t\ttimestamp: timestamp,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tnotify.addEventListener(\"click\", function() {\n\t\t\t\t\t\t\twindow.focus();\n\t\t\t\t\t\t\tbutton.trigger(\"click\");\n\t\t\t\t\t\t\tthis.close();\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} catch (exception) {\n\t\t\t\t\t// `new Notification(...)` is not supported and should be silenced.\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (!unread || button.hasClass(\"active\")) {\n\t\treturn;\n\t}\n\n\tconst badge = button.find(\".badge\").html(helpers_roundBadgeNumber(unread));\n\n\tif (msg.highlight) {\n\t\tbadge.addClass(\"highlight\");\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/socket-events/msg.js","\"use strict\";\n\nconst matchFormatting = /\\x02|\\x1D|\\x1F|\\x16|\\x0F|\\x11|\\x1E|\\x03(?:[0-9]{1,2}(?:,[0-9]{1,2})?)?|\\x04(?:[0-9a-f]{6}(?:,[0-9a-f]{6})?)?/gi;\n\nmodule.exports = (message) => message.replace(matchFormatting, \"\").trim();\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/libs/handlebars/ircmessageparser/cleanIrcMessage.js","\"use strict\";\n\nconst $ = require(\"jquery\");\nconst renderPreview = require(\"../renderPreview\");\nconst socket = require(\"../socket\");\nconst utils = require(\"../utils\");\n\nsocket.on(\"msg:preview\", function(data) {\n\t// Previews are not as important, we can wait longer for them to appear\n\tutils.requestIdleCallback(() => renderPreview(data.preview, $(\"#msg-\" + data.id)), 6000);\n});\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/socket-events/msg_preview.js","\"use strict\";\n\nconst socket = require(\"../socket\");\nconst render = require(\"../render\");\n\nsocket.on(\"names\", render.renderChannelUsers);\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/socket-events/names.js","\"use strict\";\n\nconst $ = require(\"jquery\");\nconst socket = require(\"../socket\");\nconst render = require(\"../render\");\nconst sidebar = $(\"#sidebar\");\n\nsocket.on(\"network\", function(data) {\n\trender.renderNetworks(data, true);\n\n\tsidebar.find(\".chan\")\n\t\t.last()\n\t\t.trigger(\"click\");\n\n\t$(\"#connect\")\n\t\t.find(\".btn\")\n\t\t.prop(\"disabled\", false);\n});\n\nsocket.on(\"network_changed\", function(data) {\n\tsidebar.find(\"#network-\" + data.network).data(\"options\", data.serverOptions);\n});\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/socket-events/network.js","\"use strict\";\n\nconst $ = require(\"jquery\");\nconst socket = require(\"../socket\");\nconst utils = require(\"../utils\");\nconst sidebar = $(\"#sidebar\");\n\nsocket.on(\"nick\", function(data) {\n\tconst id = data.network;\n\tconst nick = data.nick;\n\tconst network = sidebar.find(\"#network-\" + id).data(\"nick\", nick);\n\tif (network.find(\".active\").length) {\n\t\tutils.setNick(nick);\n\t}\n});\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/socket-events/nick.js","\"use strict\";\n\nconst $ = require(\"jquery\");\nconst socket = require(\"../socket\");\n\n// Sync unread badge and marker when other clients open a channel\nsocket.on(\"open\", function(id) {\n\tif (id < 1) {\n\t\treturn;\n\t}\n\n\tconst channel = $(\"#chat #chan-\" + id);\n\n\t// Don't do anything if the channel is active on this client\n\tif (channel.length === 0 || channel.hasClass(\"active\")) {\n\t\treturn;\n\t}\n\n\t// Clear the unread badge\n\t$(\"#sidebar\").find(\".chan[data-id='\" + id + \"'] .badge\")\n\t\t.removeClass(\"highlight\")\n\t\t.empty();\n\n\t// Move unread marker to the bottom\n\tchannel\n\t\t.find(\".unread-marker\")\n\t\t.data(\"unread-id\", 0)\n\t\t.appendTo(channel.find(\".messages\"));\n});\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/socket-events/open.js","\"use strict\";\n\nconst $ = require(\"jquery\");\nconst socket = require(\"../socket\");\nconst sidebar = $(\"#sidebar\");\n\nsocket.on(\"part\", function(data) {\n\tconst chanMenuItem = sidebar.find(\".chan[data-id='\" + data.chan + \"']\");\n\n\t// When parting from the active channel/query, jump to the network's lobby\n\tif (chanMenuItem.hasClass(\"active\")) {\n\t\tchanMenuItem\n\t\t\t.parent(\".network\")\n\t\t\t.find(\".lobby\")\n\t\t\t.trigger(\"click\");\n\t}\n\n\tchanMenuItem.remove();\n\t$(\"#chan-\" + data.chan).remove();\n});\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/socket-events/part.js","\"use strict\";\n\nconst $ = require(\"jquery\");\nconst chat = $(\"#chat\");\nconst socket = require(\"../socket\");\nconst sidebar = $(\"#sidebar\");\n\nsocket.on(\"quit\", function(data) {\n\tconst id = data.network;\n\tconst network = sidebar.find(\"#network-\" + id);\n\n\tnetwork.children(\".chan\").each(function() {\n\t\t// this = child\n\t\tchat.find($(this).data(\"target\")).remove();\n\t});\n\n\tnetwork.remove();\n\n\tconst chan = sidebar.find(\".chan\")\n\t\t.eq(0)\n\t\t.trigger(\"click\");\n\n\tif (chan.length === 0) {\n\t\tsidebar.find(\".empty\").show();\n\t}\n});\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/socket-events/quit.js","\"use strict\";\n\nconst $ = require(\"jquery\");\nconst socket = require(\"../socket\");\nconst options = require(\"../options\");\n\nsocket.on(\"sync_sort\", function(data) {\n\t// Syncs the order of channels or networks when they are reordered\n\tif (options.ignoreSortSync) {\n\t\toptions.ignoreSortSync = false;\n\t\treturn; // Ignore syncing because we 'caused' it\n\t}\n\n\tconst type = data.type;\n\tconst order = data.order;\n\n\tif (type === \"networks\") {\n\t\tconst container = $(\".networks\");\n\n\t\t$.each(order, function(index, value) {\n\t\t\tconst position = $(container.children()[index]);\n\n\t\t\tif (position.data(\"id\") === value) { // Network in correct place\n\t\t\t\treturn true; // No point in continuing\n\t\t\t}\n\n\t\t\tconst network = container.find(\"#network-\" + value);\n\n\t\t\t$(network).insertBefore(position);\n\t\t});\n\t} else if (type === \"channels\") {\n\t\tconst network = $(\"#network-\" + data.target);\n\n\t\t$.each(order, function(index, value) {\n\t\t\tif (index === 0) { // Shouldn't attempt to move lobby\n\t\t\t\treturn true; // same as `continue` -> skip to next item\n\t\t\t}\n\n\t\t\tconst position = $(network.children()[index]); // Target channel at position\n\n\t\t\tif (position.data(\"id\") === value) { // Channel in correct place\n\t\t\t\treturn true; // No point in continuing\n\t\t\t}\n\n\t\t\tconst channel = network.find(\".chan[data-id=\" + value + \"]\"); // Channel at position\n\n\t\t\t$(channel).insertBefore(position);\n\t\t});\n\t}\n});\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/socket-events/sync_sort.js","\"use strict\";\n\nconst $ = require(\"jquery\");\nconst socket = require(\"../socket\");\nconst helpers_parse = require(\"../libs/handlebars/parse\");\n\nsocket.on(\"topic\", function(data) {\n\tconst topic = $(\"#chan-\" + data.chan).find(\".header .topic\");\n\ttopic.html(helpers_parse(data.topic));\n\t// .prop() is safe escape-wise but consider the capabilities of the attribute\n\ttopic.prop(\"title\", data.topic);\n});\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/socket-events/topic.js","\"use strict\";\n\nconst $ = require(\"jquery\");\nconst socket = require(\"../socket\");\nconst chat = $(\"#chat\");\n\nsocket.on(\"users\", function(data) {\n\tconst chan = chat.find(\"#chan-\" + data.chan);\n\n\tif (chan.hasClass(\"active\")) {\n\t\tsocket.emit(\"names\", {\n\t\t\ttarget: data.chan,\n\t\t});\n\t} else {\n\t\tchan.data(\"needsNamesRefresh\", true);\n\t}\n});\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/socket-events/users.js","\"use strict\";\n\nconst socket = require(\"../socket\");\nconst storage = require(\"../localStorage\");\n\nsocket.on(\"sign-out\", function() {\n\tstorage.remove(\"token\");\n\tlocation.reload();\n});\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/socket-events/sign_out.js","\"use strict\";\n\nconst $ = require(\"jquery\");\nconst socket = require(\"../socket\");\nconst templates = require(\"../../views\");\n\nsocket.on(\"sessions:list\", function(data) {\n\tdata.sort((a, b) => b.lastUse - a.lastUse);\n\n\tlet html = \"\";\n\tdata.forEach((connection) => {\n\t\tif (connection.current) {\n\t\t\t$(\"#session-current\").html(templates.session(connection));\n\t\t\treturn;\n\t\t}\n\n\t\thtml += templates.session(connection);\n\t});\n\n\tif (html.length === 0) {\n\t\thtml = \"<p><em>You are not currently logged in to any other device.</em></p>\";\n\t}\n\n\t$(\"#session-list\").html(html);\n});\n\n$(\"#settings\").on(\"click\", \".remove-session\", function() {\n\tsocket.emit(\"sign-out\", $(this).data(\"token\"));\n\n\treturn false;\n});\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/socket-events/sessions_list.js","\"use strict\";\n\nconst $ = require(\"jquery\");\nconst socket = require(\"../socket\");\nconst templates = require(\"../../views\");\nconst options = require(\"../options\");\nconst webpush = require(\"../webpush\");\n\nsocket.on(\"configuration\", function(data) {\n\tif (!options.initialize) {\n\t\treturn;\n\t}\n\n\t$(\"#settings\").html(templates.windows.settings(data));\n\t$(\"#connect\").html(templates.windows.connect(data));\n\t$(\"#help\").html(templates.windows.help(data));\n\t$(\"#changelog\").html(templates.windows.changelog());\n\n\t$(\"#play\").on(\"click\", () => {\n\t\tconst pop = new Audio();\n\t\tpop.src = \"audio/pop.ogg\";\n\t\tpop.play();\n\t});\n\n\toptions.initialize();\n\twebpush.initialize();\n\n\tconst forms = $(\"#connect form, #change-password form\");\n\n\tforms.on(\"submit\", function() {\n\t\tconst form = $(this);\n\t\tconst event = form.data(\"event\");\n\n\t\tform.find(\".btn\").prop(\"disabled\", true);\n\n\t\tconst values = {};\n\t\t$.each(form.serializeArray(), function(i, obj) {\n\t\t\tif (obj.value !== \"\") {\n\t\t\t\tvalues[obj.name] = obj.value;\n\t\t\t}\n\t\t});\n\n\t\tsocket.emit(event, values);\n\n\t\treturn false;\n\t});\n\n\t$(\".nick\")\n\t\t.on(\"focusin\", function() {\n\t\t\t// Need to set the first \"lastvalue\", so it can be used in the below function\n\t\t\tconst nick = $(this);\n\t\t\tnick.data(\"lastvalue\", nick.val());\n\t\t})\n\t\t.on(\"input\", function() {\n\t\t\tconst nick = $(this).val();\n\t\t\tconst usernameInput = forms.find(\".username\");\n\n\t\t\t// Because this gets called /after/ it has already changed, we need use the previous value\n\t\t\tconst lastValue = $(this).data(\"lastvalue\");\n\n\t\t\t// They were the same before the change, so update the username field\n\t\t\tif (usernameInput.val() === lastValue) {\n\t\t\t\tusernameInput.val(nick);\n\t\t\t}\n\n\t\t\t// Store the \"previous\" value, for next time\n\t\t\t$(this).data(\"lastvalue\", nick);\n\t\t});\n});\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/socket-events/configuration.js","\"use strict\";\n\nconst $ = require(\"jquery\");\nconst Mousetrap = require(\"mousetrap\");\nconst input = $(\"#input\");\nconst sidebar = $(\"#sidebar\");\nconst windows = $(\"#windows\");\nconst contextMenuContainer = $(\"#context-menu-container\");\n\nMousetrap.bind([\n\t\"pageup\",\n\t\"pagedown\",\n], function(e, key) {\n\tlet container = windows.find(\".window.active\");\n\n\t// Chat windows scroll message container\n\tif (container.prop(\"id\") === \"chat-container\") {\n\t\tcontainer = container.find(\".chan.active .chat\");\n\t}\n\n\tcontainer.finish();\n\n\tconst offset = container.get(0).clientHeight * 0.9;\n\tlet scrollTop = container.scrollTop();\n\n\tif (key === \"pageup\") {\n\t\tscrollTop = Math.floor(scrollTop - offset);\n\t} else {\n\t\tscrollTop = Math.ceil(scrollTop + offset);\n\t}\n\n\tcontainer.animate({\n\t\tscrollTop: scrollTop,\n\t}, 200);\n\n\treturn false;\n});\n\nMousetrap.bind([\n\t\"mod+up\",\n\t\"mod+down\",\n], function(e, keys) {\n\tconst channels = sidebar.find(\".chan\");\n\tconst index = channels.index(channels.filter(\".active\"));\n\tconst direction = keys.split(\"+\").pop();\n\tlet target;\n\n\tswitch (direction) {\n\tcase \"up\":\n\t\ttarget = (channels.length + (index - 1 + channels.length)) % channels.length;\n\t\tbreak;\n\n\tcase \"down\":\n\t\ttarget = (channels.length + (index + 1 + channels.length)) % channels.length;\n\t\tbreak;\n\t}\n\n\tchannels.eq(target).click();\n});\n\nMousetrap.bind([\n\t\"escape\",\n], function() {\n\tcontextMenuContainer.hide();\n});\n\nconst colorsHotkeys = {\n\tk: \"\\x03\",\n\tb: \"\\x02\",\n\tu: \"\\x1F\",\n\ti: \"\\x1D\",\n\to: \"\\x0F\",\n\ts: \"\\x1e\",\n\tm: \"\\x11\",\n};\n\nfor (const hotkey in colorsHotkeys) {\n\tMousetrap.bind(\"mod+\" + hotkey, function(e) {\n\t\te.preventDefault();\n\n\t\tconst cursorPosStart = input.prop(\"selectionStart\");\n\t\tconst cursorPosEnd = input.prop(\"selectionEnd\");\n\t\tconst value = input.val();\n\t\tlet newValue = value.substring(0, cursorPosStart) + colorsHotkeys[e.key];\n\n\t\tif (cursorPosStart === cursorPosEnd) {\n\t\t\t// If no text is selected, insert at cursor\n\t\t\tnewValue += value.substring(cursorPosEnd, value.length);\n\t\t} else {\n\t\t\t// If text is selected, insert formatting character at start and the end\n\t\t\tnewValue += value.substring(cursorPosStart, cursorPosEnd) + colorsHotkeys[e.key] + value.substring(cursorPosEnd, value.length);\n\t\t}\n\n\t\tinput\n\t\t\t.val(newValue)\n\t\t\t.get(0).setSelectionRange(cursorPosStart + 1, cursorPosEnd + 1);\n\t});\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/keybinds.js","\"use strict\";\n\nconst $ = require(\"jquery\");\nconst chat = document.getElementById(\"chat\");\n\nfunction copyMessages() {\n\tconst selection = window.getSelection();\n\n\t// If selection does not span multiple elements, do nothing\n\tif (selection.anchorNode === selection.focusNode) {\n\t\treturn;\n\t}\n\n\tconst range = selection.getRangeAt(0);\n\tconst documentFragment = range.cloneContents();\n\tconst div = document.createElement(\"div\");\n\n\t$(documentFragment)\n\t\t.find(\".from .user\")\n\t\t.each((_, el) => {\n\t\t\tel = $(el);\n\t\t\tel.text(`<${el.text()}>`);\n\t\t});\n\n\tdiv.id = \"js-copy-hack\";\n\tdiv.appendChild(documentFragment);\n\tchat.appendChild(div);\n\n\tselection.selectAllChildren(div);\n\n\twindow.setTimeout(() => {\n\t\tchat.removeChild(div);\n\t\tselection.removeAllRanges();\n\t\tselection.addRange(range);\n\t}, 0);\n}\n\n$(chat).on(\"copy\", \".messages\", copyMessages);\n\n\n\n// WEBPACK FOOTER //\n// ./client/js/clipboard.js"],"sourceRoot":""}
\No newline at end of file