Repository: VictoriaMetrics/VictoriaMetrics
Pull request #6449 (2024-06-10 12:28:15)

Automatic update operator docs from VictoriaMetrics/operator@310a860


Patch:
diff --git a/app/vmui/packages/vmui/package-lock.json b/app/vmui/packages/vmui/package-lock.json
index 7499f667d..d895e367a 100644
--- a/app/vmui/packages/vmui/package-lock.json
+++ b/app/vmui/packages/vmui/package-lock.json
@@ -11,7 +11,6 @@
         "@types/lodash.debounce": "^4.0.6",
         "@types/lodash.get": "^4.4.6",
         "@types/lodash.throttle": "^4.1.6",
-        "@types/marked": "^5.0.0",
         "@types/node": "^20.4.0",
         "@types/qs": "^6.9.7",
         "@types/react-input-mask": "^3.0.2",
@@ -22,7 +21,8 @@
         "lodash.debounce": "^4.0.8",
         "lodash.get": "^4.4.2",
         "lodash.throttle": "^4.1.1",
-        "marked": "^5.1.0",
+        "marked": "^12.0.2",
+        "marked-emoji": "^1.4.0",
         "preact": "^10.7.1",
         "qs": "^6.10.3",
         "react-input-mask": "^2.0.4",
@@ -4272,11 +4272,6 @@
         "@types/lodash": "*"
       }
     },
-    "node_modules/@types/marked": {
-      "version": "5.0.2",
-      "resolved": "https://registry.npmjs.org/@types/marked/-/marked-5.0.2.tgz",
-      "integrity": "sha512-OucS4KMHhFzhz27KxmWg7J+kIYqyqoW5kdIEI319hqARQQUTqhao3M/F+uFnDXD0Rg72iDDZxZNxq5gvctmLlg=="
-    },
     "node_modules/@types/mime": {
       "version": "1.3.5",
       "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz",
@@ -13598,14 +13593,22 @@
       }
     },
     "node_modules/marked": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/marked/-/marked-5.1.2.tgz",
-      "integrity": "sha512-ahRPGXJpjMjwSOlBoTMZAK7ATXkli5qCPxZ21TG44rx1KEo44bii4ekgTDQPNRQ4Kh7JMb9Ub1PVk1NxRSsorg==",
+      "version": "12.0.2",
+      "resolved": "https://registry.npmjs.org/marked/-/marked-12.0.2.tgz",
+      "integrity": "sha512-qXUm7e/YKFoqFPYPa3Ukg9xlI5cyAtGmyEIzMfW//m6kXwCy2Ps9DYf5ioijFKQ8qyuscrHoY04iJGctu2Kg0Q==",
       "bin": {
         "marked": "bin/marked.js"
       },
       "engines": {
-        "node": ">= 16"
+        "node": ">= 18"
+      }
+    },
+    "node_modules/marked-emoji": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/marked-emoji/-/marked-emoji-1.4.0.tgz",
+      "integrity": "sha512-/2TJfGzXpiBBq+X3akHHbTrAjZPJDwR+7FV6SyQLECnQEfaoVkrpKZJzHhPTAq3Sl/A1l2frMT0u6b38VBBlNg==",
+      "peerDependencies": {
+        "marked": ">=4 <13"
       }
     },
     "node_modules/mdn-data": {
diff --git a/app/vmui/packages/vmui/package.json b/app/vmui/packages/vmui/package.json
index 6682b1052..5af4c67b6 100644
--- a/app/vmui/packages/vmui/package.json
+++ b/app/vmui/packages/vmui/package.json
@@ -7,7 +7,6 @@
     "@types/lodash.debounce": "^4.0.6",
     "@types/lodash.get": "^4.4.6",
     "@types/lodash.throttle": "^4.1.6",
-    "@types/marked": "^5.0.0",
     "@types/node": "^20.4.0",
     "@types/qs": "^6.9.7",
     "@types/react-input-mask": "^3.0.2",
@@ -18,7 +17,8 @@
     "lodash.debounce": "^4.0.8",
     "lodash.get": "^4.4.2",
     "lodash.throttle": "^4.1.1",
-    "marked": "^5.1.0",
+    "marked": "^12.0.2",
+    "marked-emoji": "^1.4.0",
     "preact": "^10.7.1",
     "qs": "^6.10.3",
     "react-input-mask": "^2.0.4",
diff --git a/app/vmui/packages/vmui/src/AppLogs.tsx b/app/vmui/packages/vmui/src/AppLogs.tsx
index 698abf94e..d041679e0 100644
--- a/app/vmui/packages/vmui/src/AppLogs.tsx
+++ b/app/vmui/packages/vmui/src/AppLogs.tsx
@@ -4,6 +4,7 @@ import AppContextProvider from "./contexts/AppContextProvider";
 import ThemeProvider from "./components/Main/ThemeProvider/ThemeProvider";
 import ExploreLogs from "./pages/ExploreLogs/ExploreLogs";
 import LogsLayout from "./layouts/LogsLayout/LogsLayout";
+import "./constants/markedPlugins";
 
 const AppLogs: FC = () => {
   const [loadedTheme, setLoadedTheme] = useState(false);
diff --git a/app/vmui/packages/vmui/src/constants/emojis.ts b/app/vmui/packages/vmui/src/constants/emojis.ts
new file mode 100644
index 000000000..9f189d734
--- /dev/null
+++ b/app/vmui/packages/vmui/src/constants/emojis.ts
@@ -0,0 +1,1915 @@
+export default {
+  "100": "💯",
+  "1234": "🔢",
+  "grinning": "😀",
+  "smiley": "😃",
+  "smile": "😄",
+  "grin": "😁",
+  "laughing": "😆",
+  "satisfied": "😆",
+  "sweat_smile": "😅",
+  "rofl": "🤣",
+  "joy": "😂",
+  "slightly_smiling_face": "🙂",
+  "upside_down_face": "🙃",
+  "melting_face": "🫠",
+  "wink": "😉",
+  "blush": "😊",
+  "innocent": "😇",
+  "smiling_face_with_three_hearts": "🥰",
+  "heart_eyes": "😍",
+  "star_struck": "🤩",
+  "kissing_heart": "😘",
+  "kissing": "😗",
+  "relaxed": "☺️",
+  "kissing_closed_eyes": "😚",
+  "kissing_smiling_eyes": "😙",
+  "smiling_face_with_tear": "🥲",
+  "yum": "😋",
+  "stuck_out_tongue": "😛",
+  "stuck_out_tongue_winking_eye": "😜",
+  "zany_face": "🤪",
+  "stuck_out_tongue_closed_eyes": "😝",
+  "money_mouth_face": "🤑",
+  "hugs": "🤗",
+  "hand_over_mouth": "🤭",
+  "face_with_open_eyes_and_hand_over_mouth": "🫢",
+  "face_with_peeking_eye": "🫣",
+  "shushing_face": "🤫",
+  "thinking": "🤔",
+  "saluting_face": "🫡",
+  "zipper_mouth_face": "🤐",
+  "raised_eyebrow": "🤨",
+  "neutral_face": "😐",
+  "expressionless": "😑",
+  "no_mouth": "😶",
+  "dotted_line_face": "🫥",
+  "face_in_clouds": "😶‍🌫️",
+  "smirk": "😏",
+  "unamused": "😒",
+  "roll_eyes": "🙄",
+  "grimacing": "😬",
+  "face_exhaling": "😮‍💨",
+  "lying_face": "🤥",
+  "shaking_face": "🫨",
+  "relieved": "😌",
+  "pensive": "😔",
+  "sleepy": "😪",
+  "drooling_face": "🤤",
+  "sleeping": "😴",
+  "mask": "😷",
+  "face_with_thermometer": "🤒",
+  "face_with_head_bandage": "🤕",
+  "nauseated_face": "🤢",
+  "vomiting_face": "🤮",
+  "sneezing_face": "🤧",
+  "hot_face": "🥵",
+  "cold_face": "🥶",
+  "woozy_face": "🥴",
+  "dizzy_face": "😵",
+  "face_with_spiral_eyes": "😵‍💫",
+  "exploding_head": "🤯",
+  "cowboy_hat_face": "🤠",
+  "partying_face": "🥳",
+  "disguised_face": "🥸",
+  "sunglasses": "😎",
+  "nerd_face": "🤓",
+  "monocle_face": "🧐",
+  "confused": "😕",
+  "face_with_diagonal_mouth": "🫤",
+  "worried": "😟",
+  "slightly_frowning_face": "🙁",
+  "frowning_face": "☹️",
+  "open_mouth": "😮",
+  "hushed": "😯",
+  "astonished": "😲",
+  "flushed": "😳",
+  "pleading_face": "🥺",
+  "face_holding_back_tears": "🥹",
+  "frowning": "😦",
+  "anguished": "😧",
+  "fearful": "😨",
+  "cold_sweat": "😰",
+  "disappointed_relieved": "😥",
+  "cry": "😢",
+  "sob": "😭",
+  "scream": "😱",
+  "confounded": "😖",
+  "persevere": "😣",
+  "disappointed": "😞",
+  "sweat": "😓",
+  "weary": "😩",
+  "tired_face": "😫",
+  "yawning_face": "🥱",
+  "triumph": "😤",
+  "rage": "😡",
+  "pout": "😡",
+  "angry": "😠",
+  "cursing_face": "🤬",
+  "smiling_imp": "😈",
+  "imp": "👿",
+  "skull": "💀",
+  "skull_and_crossbones": "☠️",
+  "hankey": "💩",
+  "poop": "💩",
+  "shit": "💩",
+  "clown_face": "🤡",
+  "japanese_ogre": "👹",
+  "japanese_goblin": "👺",
+  "ghost": "👻",
+  "alien": "👽",
+  "space_invader": "👾",
+  "robot": "🤖",
+  "smiley_cat": "😺",
+  "smile_cat": "😸",
+  "joy_cat": "😹",
+  "heart_eyes_cat": "😻",
+  "smirk_cat": "😼",
+  "kissing_cat": "😽",
+  "scream_cat": "🙀",
+  "crying_cat_face": "😿",
+  "pouting_cat": "😾",
+  "see_no_evil": "🙈",
+  "hear_no_evil": "🙉",
+  "speak_no_evil": "🙊",
+  "love_letter": "💌",
+  "cupid": "💘",
+  "gift_heart": "💝",
+  "sparkling_heart": "💖",
+  "heartpulse": "💗",
+  "heartbeat": "💓",
+  "revolving_hearts": "💞",
+  "two_hearts": "💕",
+  "heart_decoration": "💟",
+  "heavy_heart_exclamation": "❣️",
+  "broken_heart": "💔",
+  "heart_on_fire": "❤️‍🔥",
+  "mending_heart": "❤️‍🩹",
+  "heart": "❤️",
+  "pink_heart": "🩷",
+  "orange_heart": "🧡",
+  "yellow_heart": "💛",
+  "green_heart": "💚",
+  "blue_heart": "💙",
+  "light_blue_heart": "🩵",
+  "purple_heart": "💜",
+  "brown_heart": "🤎",
+  "black_heart": "🖤",
+  "grey_heart": "🩶",
+  "white_heart": "🤍",
+  "kiss": "💋",
+  "anger": "💢",
+  "boom": "💥",
+  "collision": "💥",
+  "dizzy": "💫",
+  "sweat_drops": "💦",
+  "dash": "💨",
+  "hole": "🕳️",
+  "speech_balloon": "💬",
+  "eye_speech_bubble": "👁️‍🗨️",
+  "left_speech_bubble": "🗨️",
+  "right_anger_bubble": "🗯️",
+  "thought_balloon": "💭",
+  "zzz": "💤",
+  "wave": "👋",
+  "raised_back_of_hand": "🤚",
+  "raised_hand_with_fingers_splayed": "🖐️",
+  "hand": "✋",
+  "raised_hand": "✋",
+  "vulcan_salute": "🖖",
+  "rightwards_hand": "🫱",
+  "leftwards_hand": "🫲",
+  "palm_down_hand": "🫳",
+  "palm_up_hand": "🫴",
+  "leftwards_pushing_hand": "🫷",
+  "rightwards_pushing_hand": "🫸",
+  "ok_hand": "👌",
+  "pinched_fingers": "🤌",
+  "pinching_hand": "🤏",
+  "v": "✌️",
+  "crossed_fingers": "🤞",
+  "hand_with_index_finger_and_thumb_crossed": "🫰",
+  "love_you_gesture": "🤟",
+  "metal": "🤘",
+  "call_me_hand": "🤙",
+  "point_left": "👈",
+  "point_right": "👉",
+  "point_up_2": "👆",
+  "middle_finger": "🖕",
+  "fu": "🖕",
+  "point_down": "👇",
+  "point_up": "☝️",
+  "index_pointing_at_the_viewer": "🫵",
+  "+1": "👍",
+  "thumbsup": "👍",
+  "-1": "👎",
+  "thumbsdown": "👎",
+  "fist_raised": "✊",
+  "fist": "✊",
+  "fist_oncoming": "👊",
+  "facepunch": "👊",
+  "punch": "👊",
+  "fist_left": "🤛",
+  "fist_right": "🤜",
+  "clap": "👏",
+  "raised_hands": "🙌",
+  "heart_hands": "🫶",
+  "open_hands": "👐",
+  "palms_up_together": "🤲",
+  "handshake": "🤝",
+  "pray": "🙏",
+  "writing_hand": "✍️",
+  "nail_care": "💅",
+  "selfie": "🤳",
+  "muscle": "💪",
+  "mechanical_arm": "🦾",
+  "mechanical_leg": "🦿",
+  "leg": "🦵",
+  "foot": "🦶",
+  "ear": "👂",
+  "ear_with_hearing_aid": "🦻",
+  "nose": "👃",
+  "brain": "🧠",
+  "anatomical_heart": "🫀",
+  "lungs": "🫁",
+  "tooth": "🦷",
+  "bone": "🦴",
+  "eyes": "👀",
+  "eye": "👁️",
+  "tongue": "👅",
+  "lips": "👄",
+  "biting_lip": "🫦",
+  "baby": "👶",
+  "child": "🧒",
+  "boy": "👦",
+  "girl": "👧",
+  "adult": "🧑",
+  "blond_haired_person": "👱",
+  "man": "👨",
+  "bearded_person": "🧔",
+  "man_beard": "🧔‍♂️",
+  "woman_beard": "🧔‍♀️",
+  "red_haired_man": "👨‍🦰",
+  "curly_haired_man": "👨‍🦱",
+  "white_haired_man": "👨‍🦳",
+  "bald_man": "👨‍🦲",
+  "woman": "👩",
+  "red_haired_woman": "👩‍🦰",
+  "person_red_hair": "🧑‍🦰",
+  "curly_haired_woman": "👩‍🦱",
+  "person_curly_hair": "🧑‍🦱",
+  "white_haired_woman": "👩‍🦳",
+  "person_white_hair": "🧑‍🦳",
+  "bald_woman": "👩‍🦲",
+  "person_bald": "🧑‍🦲",
+  "blond_haired_woman": "👱‍♀️",
+  "blonde_woman": "👱‍♀️",
+  "blond_haired_man": "👱‍♂️",
+  "older_adult": "🧓",
+  "older_man": "👴",
+  "older_woman": "👵",
+  "frowning_person": "🙍",
+  "frowning_man": "🙍‍♂️",
+  "frowning_woman": "🙍‍♀️",
+  "pouting_face": "🙎",
+  "pouting_man": "🙎‍♂️",
+  "pouting_woman": "🙎‍♀️",
+  "no_good": "🙅",
+  "no_good_man": "🙅‍♂️",
+  "ng_man": "🙅‍♂️",
+  "no_good_woman": "🙅‍♀️",
+  "ng_woman": "🙅‍♀️",
+  "ok_person": "🙆",
+  "ok_man": "🙆‍♂️",
+  "ok_woman": "🙆‍♀️",
+  "tipping_hand_person": "💁",
+  "information_desk_person": "💁",
+  "tipping_hand_man": "💁‍♂️",
+  "sassy_man": "💁‍♂️",
+  "tipping_hand_woman": "💁‍♀️",
+  "sassy_woman": "💁‍♀️",
+  "raising_hand": "🙋",
+  "raising_hand_man": "🙋‍♂️",
+  "raising_hand_woman": "🙋‍♀️",
+  "deaf_person": "🧏",
+  "deaf_man": "🧏‍♂️",
+  "deaf_woman": "🧏‍♀️",
+  "bow": "🙇",
+  "bowing_man": "🙇‍♂️",
+  "bowing_woman": "🙇‍♀️",
+  "facepalm": "🤦",
+  "man_facepalming": "🤦‍♂️",
+  "woman_facepalming": "🤦‍♀️",
+  "shrug": "🤷",
+  "man_shrugging": "🤷‍♂️",
+  "woman_shrugging": "🤷‍♀️",
+  "health_worker": "🧑‍⚕️",
+  "man_health_worker": "👨‍⚕️",
+  "woman_health_worker": "👩‍⚕️",
+  "student": "🧑‍🎓",
+  "man_student": "👨‍🎓",
+  "woman_student": "👩‍🎓",
+  "teacher": "🧑‍🏫",
+  "man_teacher": "👨‍🏫",
+  "woman_teacher": "👩‍🏫",
+  "judge": "🧑‍⚖️",
+  "man_judge": "👨‍⚖️",
+  "woman_judge": "👩‍⚖️",
+  "farmer": "🧑‍🌾",
+  "man_farmer": "👨‍🌾",
+  "woman_farmer": "👩‍🌾",
+  "cook": "🧑‍🍳",
+  "man_cook": "👨‍🍳",
+  "woman_cook": "👩‍🍳",
+  "mechanic": "🧑‍🔧",
+  "man_mechanic": "👨‍🔧",
+  "woman_mechanic": "👩‍🔧",
+  "factory_worker": "🧑‍🏭",
+  "man_factory_worker": "👨‍🏭",
+  "woman_factory_worker": "👩‍🏭",
+  "office_worker": "🧑‍💼",
+  "man_office_worker": "👨‍💼",
+  "woman_office_worker": "👩‍💼",
+  "scientist": "🧑‍🔬",
+  "man_scientist": "👨‍🔬",
+  "woman_scientist": "👩‍🔬",
+  "technologist": "🧑‍💻",
+  "man_technologist": "👨‍💻",
+  "woman_technologist": "👩‍💻",
+  "singer": "🧑‍🎤",
+  "man_singer": "👨‍🎤",
+  "woman_singer": "👩‍🎤",
+  "artist": "🧑‍🎨",
+  "man_artist": "👨‍🎨",
+  "woman_artist": "👩‍🎨",
+  "pilot": "🧑‍✈️",
+  "man_pilot": "👨‍✈️",
+  "woman_pilot": "👩‍✈️",
+  "astronaut": "🧑‍🚀",
+  "man_astronaut": "👨‍🚀",
+  "woman_astronaut": "👩‍🚀",
+  "firefighter": "🧑‍🚒",
+  "man_firefighter": "👨‍🚒",
+  "woman_firefighter": "👩‍🚒",
+  "police_officer": "👮",
+  "cop": "👮",
+  "policeman": "👮‍♂️",
+  "policewoman": "👮‍♀️",
+  "detective": "🕵️",
+  "male_detective": "🕵️‍♂️",
+  "female_detective": "🕵️‍♀️",
+  "guard": "💂",
+  "guardsman": "💂‍♂️",
+  "guardswoman": "💂‍♀️",
+  "ninja": "🥷",
+  "construction_worker": "👷",
+  "construction_worker_man": "👷‍♂️",
+  "construction_worker_woman": "👷‍♀️",
+  "person_with_crown": "🫅",
+  "prince": "🤴",
+  "princess": "👸",
+  "person_with_turban": "👳",
+  "man_with_turban": "👳‍♂️",
+  "woman_with_turban": "👳‍♀️",
+  "man_with_gua_pi_mao": "👲",
+  "woman_with_headscarf": "🧕",
+  "person_in_tuxedo": "🤵",
+  "man_in_tuxedo": "🤵‍♂️",
+  "woman_in_tuxedo": "🤵‍♀️",
+  "person_with_veil": "👰",
+  "man_with_veil": "👰‍♂️",
+  "woman_with_veil": "👰‍♀️",
+  "bride_with_veil": "👰‍♀️",
+  "pregnant_woman": "🤰",
+  "pregnant_man": "🫃",
+  "pregnant_person": "🫄",
+  "breast_feeding": "🤱",
+  "woman_feeding_baby": "👩‍🍼",
+  "man_feeding_baby": "👨‍🍼",
+  "person_feeding_baby": "🧑‍🍼",
+  "angel": "👼",
+  "santa": "🎅",
+  "mrs_claus": "🤶",
+  "mx_claus": "🧑‍🎄",
+  "superhero": "🦸",
+  "superhero_man": "🦸‍♂️",
+  "superhero_woman": "🦸‍♀️",
+  "supervillain": "🦹",
+  "supervillain_man": "🦹‍♂️",
+  "supervillain_woman": "🦹‍♀️",
+  "mage": "🧙",
+  "mage_man": "🧙‍♂️",
+  "mage_woman": "🧙‍♀️",
+  "fairy": "🧚",
+  "fairy_man": "🧚‍♂️",
+  "fairy_woman": "🧚‍♀️",
+  "vampire": "🧛",
+  "vampire_man": "🧛‍♂️",
+  "vampire_woman": "🧛‍♀️",
+  "merperson": "🧜",
+  "merman": "🧜‍♂️",
+  "mermaid": "🧜‍♀️",
+  "elf": "🧝",
+  "elf_man": "🧝‍♂️",
+  "elf_woman": "🧝‍♀️",
+  "genie": "🧞",
+  "genie_man": "🧞‍♂️",
+  "genie_woman": "🧞‍♀️",
+  "zombie": "🧟",
+  "zombie_man": "🧟‍♂️",
+  "zombie_woman": "🧟‍♀️",
+  "troll": "🧌",
+  "massage": "💆",
+  "massage_man": "💆‍♂️",
+  "massage_woman": "💆‍♀️",
+  "haircut": "💇",
+  "haircut_man": "💇‍♂️",
+  "haircut_woman": "💇‍♀️",
+  "walking": "🚶",
+  "walking_man": "🚶‍♂️",
+  "walking_woman": "🚶‍♀️",
+  "standing_person": "🧍",
+  "standing_man": "🧍‍♂️",
+  "standing_woman": "🧍‍♀️",
+  "kneeling_person": "🧎",
+  "kneeling_man": "🧎‍♂️",
+  "kneeling_woman": "🧎‍♀️",
+  "person_with_probing_cane": "🧑‍🦯",
+  "man_with_probing_cane": "👨‍🦯",
+  "woman_with_probing_cane": "👩‍🦯",
+  "person_in_motorized_wheelchair": "🧑‍🦼",
+  "man_in_motorized_wheelchair": "👨‍🦼",
+  "woman_in_motorized_wheelchair": "👩‍🦼",
+  "person_in_manual_wheelchair": "🧑‍🦽",
+  "man_in_manual_wheelchair": "👨‍🦽",
+  "woman_in_manual_wheelchair": "👩‍🦽",
+  "runner": "🏃",
+  "running": "🏃",
+  "running_man": "🏃‍♂️",
+  "running_woman": "🏃‍♀️",
+  "woman_dancing": "💃",
+  "dancer": "💃",
+  "man_dancing": "🕺",
+  "business_suit_levitating": "🕴️",
+  "dancers": "👯",
+  "dancing_men": "👯‍♂️",
+  "dancing_women": "👯‍♀️",
+  "sauna_person": "🧖",
+  "sauna_man": "🧖‍♂️",
+  "sauna_woman": "🧖‍♀️",
+  "climbing": "🧗",
+  "climbing_man": "🧗‍♂️",
+  "climbing_woman": "🧗‍♀️",
+  "person_fencing": "🤺",
+  "horse_racing": "🏇",
+  "skier": "⛷️",
+  "snowboarder": "🏂",
+  "golfing": "🏌️",
+  "golfing_man": "🏌️‍♂️",
+  "golfing_woman": "🏌️‍♀️",
+  "surfer": "🏄",
+  "surfing_man": "🏄‍♂️",
+  "surfing_woman": "🏄‍♀️",
+  "rowboat": "🚣",
+  "rowing_man": "🚣‍♂️",
+  "rowing_woman": "🚣‍♀️",
+  "swimmer": "🏊",
+  "swimming_man": "🏊‍♂️",
+  "swimming_woman": "🏊‍♀️",
+  "bouncing_ball_person": "⛹️",
+  "bouncing_ball_man": "⛹️‍♂️",
+  "basketball_man": "⛹️‍♂️",
+  "bouncing_ball_woman": "⛹️‍♀️",
+  "basketball_woman": "⛹️‍♀️",
+  "weight_lifting": "🏋️",
+  "weight_lifting_man": "🏋️‍♂️",
+  "weight_lifting_woman": "🏋️‍♀️",
+  "bicyclist": "🚴",
+  "biking_man": "🚴‍♂️",
+  "biking_woman": "🚴‍♀️",
+  "mountain_bicyclist": "🚵",
+  "mountain_biking_man": "🚵‍♂️",
+  "mountain_biking_woman": "🚵‍♀️",
+  "cartwheeling": "🤸",
+  "man_cartwheeling": "🤸‍♂️",
+  "woman_cartwheeling": "🤸‍♀️",
+  "wrestling": "🤼",
+  "men_wrestling": "🤼‍♂️",
+  "women_wrestling": "🤼‍♀️",
+  "water_polo": "🤽",
+  "man_playing_water_polo": "🤽‍♂️",
+  "woman_playing_water_polo": "🤽‍♀️",
+  "handball_person": "🤾",
+  "man_playing_handball": "🤾‍♂️",
+  "woman_playing_handball": "🤾‍♀️",
+  "juggling_person": "🤹",
+  "man_juggling": "🤹‍♂️",
+  "woman_juggling": "🤹‍♀️",
+  "lotus_position": "🧘",
+  "lotus_position_man": "🧘‍♂️",
+  "lotus_position_woman": "🧘‍♀️",
+  "bath": "🛀",
+  "sleeping_bed": "🛌",
+  "people_holding_hands": "🧑‍🤝‍🧑",
+  "two_women_holding_hands": "👭",
+  "couple": "👫",
+  "two_men_holding_hands": "👬",
+  "couplekiss": "💏",
+  "couplekiss_man_woman": "👩‍❤️‍💋‍👨",
+  "couplekiss_man_man": "👨‍❤️‍💋‍👨",
+  "couplekiss_woman_woman": "👩‍❤️‍💋‍👩",
+  "couple_with_heart": "💑",
+  "couple_with_heart_woman_man": "👩‍❤️‍👨",
+  "couple_with_heart_man_man": "👨‍❤️‍👨",
+  "couple_with_heart_woman_woman": "👩‍❤️‍👩",
+  "family": "👪",
+  "family_man_woman_boy": "👨‍👩‍👦",
+  "family_man_woman_girl": "👨‍👩‍👧",
+  "family_man_woman_girl_boy": "👨‍👩‍👧‍👦",
+  "family_man_woman_boy_boy": "👨‍👩‍👦‍👦",
+  "family_man_woman_girl_girl": "👨‍👩‍👧‍👧",
+  "family_man_man_boy": "👨‍👨‍👦",
+  "family_man_man_girl": "👨‍👨‍👧",
+  "family_man_man_girl_boy": "👨‍👨‍👧‍👦",
+  "family_man_man_boy_boy": "👨‍👨‍👦‍👦",
+  "family_man_man_girl_girl": "👨‍👨‍👧‍👧",
+  "family_woman_woman_boy": "👩‍👩‍👦",
+  "family_woman_woman_girl": "👩‍👩‍👧",
+  "family_woman_woman_girl_boy": "👩‍👩‍👧‍👦",
+  "family_woman_woman_boy_boy": "👩‍👩‍👦‍👦",
+  "family_woman_woman_girl_girl": "👩‍👩‍👧‍👧",
+  "family_man_boy": "👨‍👦",
+  "family_man_boy_boy": "👨‍👦‍👦",
+  "family_man_girl": "👨‍👧",
+  "family_man_girl_boy": "👨‍👧‍👦",
+  "family_man_girl_girl": "👨‍👧‍👧",
+  "family_woman_boy": "👩‍👦",
+  "family_woman_boy_boy": "👩‍👦‍👦",
+  "family_woman_girl": "👩‍👧",
+  "family_woman_girl_boy": "👩‍👧‍👦",
+  "family_woman_girl_girl": "👩‍👧‍👧",
+  "speaking_head": "🗣️",
+  "bust_in_silhouette": "👤",
+  "busts_in_silhouette": "👥",
+  "people_hugging": "🫂",
+  "footprints": "👣",
+  "monkey_face": "🐵",
+  "monkey": "🐒",
+  "gorilla": "🦍",
+  "orangutan": "🦧",
+  "dog": "🐶",
+  "dog2": "🐕",
+  "guide_dog": "🦮",
+  "service_dog": "🐕‍🦺",
+  "poodle": "🐩",
+  "wolf": "🐺",
+  "fox_face": "🦊",
+  "raccoon": "🦝",
+  "cat": "🐱",
+  "cat2": "🐈",
+  "black_cat": "🐈‍⬛",
+  "lion": "🦁",
+  "tiger": "🐯",
+  "tiger2": "🐅",
+  "leopard": "🐆",
+  "horse": "🐴",
+  "moose": "🫎",
+  "donkey": "🫏",
+  "racehorse": "🐎",
+  "unicorn": "🦄",
+  "zebra": "🦓",
+  "deer": "🦌",
+  "bison": "🦬",
+  "cow": "🐮",
+  "ox": "🐂",
+  "water_buffalo": "🐃",
+  "cow2": "🐄",
+  "pig": "🐷",
+  "pig2": "🐖",
+  "boar": "🐗",
+  "pig_nose": "🐽",
+  "ram": "🐏",
+  "sheep": "🐑",
+  "goat": "🐐",
+  "dromedary_camel": "🐪",
+  "camel": "🐫",
+  "llama": "🦙",
+  "giraffe": "🦒",
+  "elephant": "🐘",
+  "mammoth": "🦣",
+  "rhinoceros": "🦏",
+  "hippopotamus": "🦛",
+  "mouse": "🐭",
+  "mouse2": "🐁",
+  "rat": "🐀",
+  "hamster": "🐹",
+  "rabbit": "🐰",
+  "rabbit2": "🐇",
+  "chipmunk": "🐿️",
+  "beaver": "🦫",
+  "hedgehog": "🦔",
+  "bat": "🦇",
+  "bear": "🐻",
+  "polar_bear": "🐻‍❄️",
+  "koala": "🐨",
+  "panda_face": "🐼",
+  "sloth": "🦥",
+  "otter": "🦦",
+  "skunk": "🦨",
+  "kangaroo": "🦘",
+  "badger": "🦡",
+  "feet": "🐾",
+  "paw_prints": "🐾",
+  "turkey": "🦃",
+  "chicken": "🐔",
+  "rooster": "🐓",
+  "hatching_chick": "🐣",
+  "baby_chick": "🐤",
+  "hatched_chick": "🐥",
+  "bird": "🐦",
+  "penguin": "🐧",
+  "dove": "🕊️",
+  "eagle": "🦅",
+  "duck": "🦆",
+  "swan": "🦢",
+  "owl": "🦉",
+  "dodo": "🦤",
+  "feather": "🪶",
+  "flamingo": "🦩",
+  "peacock": "🦚",
+  "parrot": "🦜",
+  "wing": "🪽",
+  "black_bird": "🐦‍⬛",
+  "goose": "🪿",
+  "frog": "🐸",
+  "crocodile": "🐊",
+  "turtle": "🐢",
+  "lizard": "🦎",
+  "snake": "🐍",
+  "dragon_face": "🐲",
+  "dragon": "🐉",
+  "sauropod": "🦕",
+  "t-rex": "🦖",
+  "whale": "🐳",
+  "whale2": "🐋",
+  "dolphin": "🐬",
+  "flipper": "🐬",
+  "seal": "🦭",
+  "fish": "🐟",
+  "tropical_fish": "🐠",
+  "blowfish": "🐡",
+  "shark": "🦈",
+  "octopus": "🐙",
+  "shell": "🐚",
+  "coral": "🪸",
+  "jellyfish": "🪼",
+  "snail": "🐌",
+  "butterfly": "🦋",
+  "bug": "🐛",
+  "ant": "🐜",
+  "bee": "🐝",
+  "honeybee": "🐝",
+  "beetle": "🪲",
+  "lady_beetle": "🐞",
+  "cricket": "🦗",
+  "cockroach": "🪳",
+  "spider": "🕷️",
+  "spider_web": "🕸️",
+  "scorpion": "🦂",
+  "mosquito": "🦟",
+  "fly": "🪰",
+  "worm": "🪱",
+  "microbe": "🦠",
+  "bouquet": "💐",
+  "cherry_blossom": "🌸",
+  "white_flower": "💮",
+  "lotus": "🪷",
+  "rosette": "🏵️",
+  "rose": "🌹",
+  "wilted_flower": "🥀",
+  "hibiscus": "🌺",
+  "sunflower": "🌻",
+  "blossom": "🌼",
+  "tulip": "🌷",
+  "hyacinth": "🪻",
+  "seedling": "🌱",
+  "potted_plant": "🪴",
+  "evergreen_tree": "🌲",
+  "deciduous_tree": "🌳",
+  "palm_tree": "🌴",
+  "cactus": "🌵",
+  "ear_of_rice": "🌾",
+  "herb": "🌿",
+  "shamrock": "☘️",
+  "four_leaf_clover": "🍀",
+  "maple_leaf": "🍁",
+  "fallen_leaf": "🍂",
+  "leaves": "🍃",
+  "empty_nest": "🪹",
+  "nest_with_eggs": "🪺",
+  "mushroom": "🍄",
+  "grapes": "🍇",
+  "melon": "🍈",
+  "watermelon": "🍉",
+  "tangerine": "🍊",
+  "orange": "🍊",
+  "mandarin": "🍊",
+  "lemon": "🍋",
+  "banana": "🍌",
+  "pineapple": "🍍",
+  "mango": "🥭",
+  "apple": "🍎",
+  "green_apple": "🍏",
+  "pear": "🍐",
+  "peach": "🍑",
+  "cherries": "🍒",
+  "strawberry": "🍓",
+  "blueberries": "🫐",
+  "kiwi_fruit": "🥝",
+  "tomato": "🍅",
+  "olive": "🫒",
+  "coconut": "🥥",
+  "avocado": "🥑",
+  "eggplant": "🍆",
+  "potato": "🥔",
+  "carrot": "🥕",
+  "corn": "🌽",
+  "hot_pepper": "🌶️",
+  "bell_pepper": "🫑",
+  "cucumber": "🥒",
+  "leafy_green": "🥬",
+  "broccoli": "🥦",
+  "garlic": "🧄",
+  "onion": "🧅",
+  "peanuts": "🥜",
+  "beans": "🫘",
+  "chestnut": "🌰",
+  "ginger_root": "🫚",
+  "pea_pod": "🫛",
+  "bread": "🍞",
+  "croissant": "🥐",
+  "baguette_bread": "🥖",
+  "flatbread": "🫓",
+  "pretzel": "🥨",
+  "bagel": "🥯",
+  "pancakes": "🥞",
+  "waffle": "🧇",
+  "cheese": "🧀",
+  "meat_on_bone": "🍖",
+  "poultry_leg": "🍗",
+  "cut_of_meat": "🥩",
+  "bacon": "🥓",
+  "hamburger": "🍔",
+  "fries": "🍟",
+  "pizza": "🍕",
+  "hotdog": "🌭",
+  "sandwich": "🥪",
+  "taco": "🌮",
+  "burrito": "🌯",
+  "tamale": "🫔",
+  "stuffed_flatbread": "🥙",
+  "falafel": "🧆",
+  "egg": "🥚",
+  "fried_egg": "🍳",
+  "shallow_pan_of_food": "🥘",
+  "stew": "🍲",
+  "fondue": "🫕",
+  "bowl_with_spoon": "🥣",
+  "green_salad": "🥗",
+  "popcorn": "🍿",
+  "butter": "🧈",
+  "salt": "🧂",
+  "canned_food": "🥫",
+  "bento": "🍱",
+  "rice_cracker": "🍘",
+  "rice_ball": "🍙",
+  "rice": "🍚",
+  "curry": "🍛",
+  "ramen": "🍜",
+  "spaghetti": "🍝",
+  "sweet_potato": "🍠",
+  "oden": "🍢",
+  "sushi": "🍣",
+  "fried_shrimp": "🍤",
+  "fish_cake": "🍥",
+  "moon_cake": "🥮",
+  "dango": "🍡",
+  "dumpling": "🥟",
+  "fortune_cookie": "🥠",
+  "takeout_box": "🥡",
+  "crab": "🦀",
+  "lobster": "🦞",
+  "shrimp": "🦐",
+  "squid": "🦑",
+  "oyster": "🦪",
+  "icecream": "🍦",
+  "shaved_ice": "🍧",
+  "ice_cream": "🍨",
+  "doughnut": "🍩",
+  "cookie": "🍪",
+  "birthday": "🎂",
+  "cake": "🍰",
+  "cupcake": "🧁",
+  "pie": "🥧",
+  "chocolate_bar": "🍫",
+  "candy": "🍬",
+  "lollipop": "🍭",
+  "custard": "🍮",
+  "honey_pot": "🍯",
+  "baby_bottle": "🍼",
+  "milk_glass": "🥛",
+  "coffee": "☕",
+  "teapot": "🫖",
+  "tea": "🍵",
+  "sake": "🍶",
+  "champagne": "🍾",
+  "wine_glass": "🍷",
+  "cocktail": "🍸",
+  "tropical_drink": "🍹",
+  "beer": "🍺",
+  "beers": "🍻",
+  "clinking_glasses": "🥂",
+  "tumbler_glass": "🥃",
+  "pouring_liquid": "🫗",
+  "cup_with_straw": "🥤",
+  "bubble_tea": "🧋",
+  "beverage_box": "🧃",
+  "mate": "🧉",
+  "ice_cube": "🧊",
+  "chopsticks": "🥢",
+  "plate_with_cutlery": "🍽️",
+  "fork_and_knife": "🍴",
+  "spoon": "🥄",
+  "hocho": "🔪",
+  "knife": "🔪",
+  "jar": "🫙",
+  "amphora": "🏺",
+  "earth_africa": "🌍",
+  "earth_americas": "🌎",
+  "earth_asia": "🌏",
+  "globe_with_meridians": "🌐",
+  "world_map": "🗺️",
+  "japan": "🗾",
+  "compass": "🧭",
+  "mountain_snow": "🏔️",
+  "mountain": "⛰️",
+  "volcano": "🌋",
+  "mount_fuji": "🗻",
+  "camping": "🏕️",
+  "beach_umbrella": "🏖️",
+  "desert": "🏜️",
+  "desert_island": "🏝️",
+  "national_park": "🏞️",
+  "stadium": "🏟️",
+  "classical_building": "🏛️",
+  "building_construction": "🏗️",
+  "bricks": "🧱",
+  "rock": "🪨",
+  "wood": "🪵",
+  "hut": "🛖",
+  "houses": "🏘️",
+  "derelict_house": "🏚️",
+  "house": "🏠",
+  "house_with_garden": "🏡",
+  "office": "🏢",
+  "post_office": "🏣",
+  "european_post_office": "🏤",
+  "hospital": "🏥",
+  "bank": "🏦",
+  "hotel": "🏨",
+  "love_hotel": "🏩",
+  "convenience_store": "🏪",
+  "school": "🏫",
+  "department_store": "🏬",
+  "factory": "🏭",
+  "japanese_castle": "🏯",
+  "european_castle": "🏰",
+  "wedding": "💒",
+  "tokyo_tower": "🗼",
+  "statue_of_liberty": "🗽",
+  "church": "⛪",
+  "mosque": "🕌",
+  "hindu_temple": "🛕",
+  "synagogue": "🕍",
+  "shinto_shrine": "⛩️",
+  "kaaba": "🕋",
+  "fountain": "⛲",
+  "tent": "⛺",
+  "foggy": "🌁",
+  "night_with_stars": "🌃",
+  "cityscape": "🏙️",
+  "sunrise_over_mountains": "🌄",
+  "sunrise": "🌅",
+  "city_sunset": "🌆",
+  "city_sunrise": "🌇",
+  "bridge_at_night": "🌉",
+  "hotsprings": "♨️",
+  "carousel_horse": "🎠",
+  "playground_slide": "🛝",
+  "ferris_wheel": "🎡",
+  "roller_coaster": "🎢",
+  "barber": "💈",
+  "circus_tent": "🎪",
+  "steam_locomotive": "🚂",
+  "railway_car": "🚃",
+  "bullettrain_side": "🚄",
+  "bullettrain_front": "🚅",
+  "train2": "🚆",
+  "metro": "🚇",
+  "light_rail": "🚈",
+  "station": "🚉",
+  "tram": "🚊",
+  "monorail": "🚝",
+  "mountain_railway": "🚞",
+  "train": "🚋",
+  "bus": "🚌",
+  "oncoming_bus": "🚍",
+  "trolleybus": "🚎",
+  "minibus": "🚐",
+  "ambulance": "🚑",
+  "fire_engine": "🚒",
+  "police_car": "🚓",
+  "oncoming_police_car": "🚔",
+  "taxi": "🚕",
+  "oncoming_taxi": "🚖",
+  "car": "🚗",
+  "red_car": "🚗",
+  "oncoming_automobile": "🚘",
+  "blue_car": "🚙",
+  "pickup_truck": "🛻",
+  "truck": "🚚",
+  "articulated_lorry": "🚛",
+  "tractor": "🚜",
+  "racing_car": "🏎️",
+  "motorcycle": "🏍️",
+  "motor_scooter": "🛵",
+  "manual_wheelchair": "🦽",
+  "motorized_wheelchair": "🦼",
+  "auto_rickshaw": "🛺",
+  "bike": "🚲",
+  "kick_scooter": "🛴",
+  "skateboard": "🛹",
+  "roller_skate": "🛼",
+  "busstop": "🚏",
+  "motorway": "🛣️",
+  "railway_track": "🛤️",
+  "oil_drum": "🛢️",
+  "fuelpump": "⛽",
+  "wheel": "🛞",
+  "rotating_light": "🚨",
+  "traffic_light": "🚥",
+  "vertical_traffic_light": "🚦",
+  "stop_sign": "🛑",
+  "construction": "🚧",
+  "anchor": "⚓",
+  "ring_buoy": "🛟",
+  "boat": "⛵",
+  "sailboat": "⛵",
+  "canoe": "🛶",
+  "speedboat": "🚤",
+  "passenger_ship": "🛳️",
+  "ferry": "⛴️",
+  "motor_boat": "🛥️",
+  "ship": "🚢",
+  "airplane": "✈️",
+  "small_airplane": "🛩️",
+  "flight_departure": "🛫",
+  "flight_arrival": "🛬",
+  "parachute": "🪂",
+  "seat": "💺",
+  "helicopter": "🚁",
+  "suspension_railway": "🚟",
+  "mountain_cableway": "🚠",
+  "aerial_tramway": "🚡",
+  "artificial_satellite": "🛰️",
+  "rocket": "🚀",
+  "flying_saucer": "🛸",
+  "bellhop_bell": "🛎️",
+  "luggage": "🧳",
+  "hourglass": "⌛",
+  "hourglass_flowing_sand": "⏳",
+  "watch": "⌚",
+  "alarm_clock": "⏰",
+  "stopwatch": "⏱️",
+  "timer_clock": "⏲️",
+  "mantelpiece_clock": "🕰️",
+  "clock12": "🕛",
+  "clock1230": "🕧",
+  "clock1": "🕐",
+  "clock130": "🕜",
+  "clock2": "🕑",
+  "clock230": "🕝",
+  "clock3": "🕒",
+  "clock330": "🕞",
+  "clock4": "🕓",
+  "clock430": "🕟",
+  "clock5": "🕔",
+  "clock530": "🕠",
+  "clock6": "🕕",
+  "clock630": "🕡",
+  "clock7": "🕖",
+  "clock730": "🕢",
+  "clock8": "🕗",
+  "clock830": "🕣",
+  "clock9": "🕘",
+  "clock930": "🕤",
+  "clock10": "🕙",
+  "clock1030": "🕥",
+  "clock11": "🕚",
+  "clock1130": "🕦",
+  "new_moon": "🌑",
+  "waxing_crescent_moon": "🌒",
+  "first_quarter_moon": "🌓",
+  "moon": "🌔",
+  "waxing_gibbous_moon": "🌔",
+  "full_moon": "🌕",
+  "waning_gibbous_moon": "🌖",
+  "last_quarter_moon": "🌗",
+  "waning_crescent_moon": "🌘",
+  "crescent_moon": "🌙",
+  "new_moon_with_face": "🌚",
+  "first_quarter_moon_with_face": "🌛",
+  "last_quarter_moon_with_face": "🌜",
+  "thermometer": "🌡️",
+  "sunny": "☀️",
+  "full_moon_with_face": "🌝",
+  "sun_with_face": "🌞",
+  "ringed_planet": "🪐",
+  "star": "⭐",
+  "star2": "🌟",
+  "stars": "🌠",
+  "milky_way": "🌌",
+  "cloud": "☁️",
+  "partly_sunny": "⛅",
+  "cloud_with_lightning_and_rain": "⛈️",
+  "sun_behind_small_cloud": "🌤️",
+  "sun_behind_large_cloud": "🌥️",
+  "sun_behind_rain_cloud": "🌦️",
+  "cloud_with_rain": "🌧️",
+  "cloud_with_snow": "🌨️",
+  "cloud_with_lightning": "🌩️",
+  "tornado": "🌪️",
+  "fog": "🌫️",
+  "wind_face": "🌬️",
+  "cyclone": "🌀",
+  "rainbow": "🌈",
+  "closed_umbrella": "🌂",
+  "open_umbrella": "☂️",
+  "umbrella": "☔",
+  "parasol_on_ground": "⛱️",
+  "zap": "⚡",
+  "snowflake": "❄️",
+  "snowman_with_snow": "☃️",
+  "snowman": "⛄",
+  "comet": "☄️",
+  "fire": "🔥",
+  "droplet": "💧",
+  "ocean": "🌊",
+  "jack_o_lantern": "🎃",
+  "christmas_tree": "🎄",
+  "fireworks": "🎆",
+  "sparkler": "🎇",
+  "firecracker": "🧨",
+  "sparkles": "✨",
+  "balloon": "🎈",
+  "tada": "🎉",
+  "confetti_ball": "🎊",
+  "tanabata_tree": "🎋",
+  "bamboo": "🎍",
+  "dolls": "🎎",
+  "flags": "🎏",
+  "wind_chime": "🎐",
+  "rice_scene": "🎑",
+  "red_envelope": "🧧",
+  "ribbon": "🎀",
+  "gift": "🎁",
+  "reminder_ribbon": "🎗️",
+  "tickets": "🎟️",
+  "ticket": "🎫",
+  "medal_military": "🎖️",
+  "trophy": "🏆",
+  "medal_sports": "🏅",
+  "1st_place_medal": "🥇",
+  "2nd_place_medal": "🥈",
+  "3rd_place_medal": "🥉",
+  "soccer": "⚽",
+  "baseball": "⚾",
+  "softball": "🥎",
+  "basketball": "🏀",
+  "volleyball": "🏐",
+  "football": "🏈",
+  "rugby_football": "🏉",
+  "tennis": "🎾",
+  "flying_disc": "🥏",
+  "bowling": "🎳",
+  "cricket_game": "🏏",
+  "field_hockey": "🏑",
+  "ice_hockey": "🏒",
+  "lacrosse": "🥍",
+  "ping_pong": "🏓",
+  "badminton": "🏸",
+  "boxing_glove": "🥊",
+  "martial_arts_uniform": "🥋",
+  "goal_net": "🥅",
+  "golf": "⛳",
+  "ice_skate": "⛸️",
+  "fishing_pole_and_fish": "🎣",
+  "diving_mask": "🤿",
+  "running_shirt_with_sash": "🎽",
+  "ski": "🎿",
+  "sled": "🛷",
+  "curling_stone": "🥌",
+  "dart": "🎯",
+  "yo_yo": "🪀",
+  "kite": "🪁",
+  "gun": "🔫",
+  "8ball": "🎱",
+  "crystal_ball": "🔮",
+  "magic_wand": "🪄",
+  "video_game": "🎮",
+  "joystick": "🕹️",
+  "slot_machine": "🎰",
+  "game_die": "🎲",
+  "jigsaw": "🧩",
+  "teddy_bear": "🧸",
+  "pinata": "🪅",
+  "mirror_ball": "🪩",
+  "nesting_dolls": "🪆",
+  "spades": "♠️",
+  "hearts": "♥️",
+  "diamonds": "♦️",
+  "clubs": "♣️",
+  "chess_pawn": "♟️",
+  "black_joker": "🃏",
+  "mahjong": "🀄",
+  "flower_playing_cards": "🎴",
+  "performing_arts": "🎭",
+  "framed_picture": "🖼️",
+  "art": "🎨",
+  "thread": "🧵",
+  "sewing_needle": "🪡",
+  "yarn": "🧶",
+  "knot": "🪢",
+  "eyeglasses": "👓",
+  "dark_sunglasses": "🕶️",
+  "goggles": "🥽",
+  "lab_coat": "🥼",
+  "safety_vest": "🦺",
+  "necktie": "👔",
+  "shirt": "👕",
+  "tshirt": "👕",
+  "jeans": "👖",
+  "scarf": "🧣",
+  "gloves": "🧤",
+  "coat": "🧥",
+  "socks": "🧦",
+  "dress": "👗",
+  "kimono": "👘",
+  "sari": "🥻",
+  "one_piece_swimsuit": "🩱",
+  "swim_brief": "🩲",
+  "shorts": "🩳",
+  "bikini": "👙",
+  "womans_clothes": "👚",
+  "folding_hand_fan": "🪭",
+  "purse": "👛",
+  "handbag": "👜",
+  "pouch": "👝",
+  "shopping": "🛍️",
+  "school_satchel": "🎒",
+  "thong_sandal": "🩴",
+  "mans_shoe": "👞",
+  "shoe": "👞",
+  "athletic_shoe": "👟",
+  "hiking_boot": "🥾",
+  "flat_shoe": "🥿",
+  "high_heel": "👠",
+  "sandal": "👡",
+  "ballet_shoes": "🩰",
+  "boot": "👢",
+  "hair_pick": "🪮",
+  "crown": "👑",
+  "womans_hat": "👒",
+  "tophat": "🎩",
+  "mortar_board": "🎓",
+  "billed_cap": "🧢",
+  "military_helmet": "🪖",
+  "rescue_worker_helmet": "⛑️",
+  "prayer_beads": "📿",
+  "lipstick": "💄",
+  "ring": "💍",
+  "gem": "💎",
+  "mute": "🔇",
+  "speaker": "🔈",
+  "sound": "🔉",
+  "loud_sound": "🔊",
+  "loudspeaker": "📢",
+  "mega": "📣",
+  "postal_horn": "📯",
+  "bell": "🔔",
+  "no_bell": "🔕",
+  "musical_score": "🎼",
+  "musical_note": "🎵",
+  "notes": "🎶",
+  "studio_microphone": "🎙️",
+  "level_slider": "🎚️",
+  "control_knobs": "🎛️",
+  "microphone": "🎤",
+  "headphones": "🎧",
+  "radio": "📻",
+  "saxophone": "🎷",
+  "accordion": "🪗",
+  "guitar": "🎸",
+  "musical_keyboard": "🎹",
+  "trumpet": "🎺",
+  "violin": "🎻",
+  "banjo": "🪕",
+  "drum": "🥁",
+  "long_drum": "🪘",
+  "maracas": "🪇",
+  "flute": "🪈",
+  "iphone": "📱",
+  "calling": "📲",
+  "phone": "☎️",
+  "telephone": "☎️",
+  "telephone_receiver": "📞",
+  "pager": "📟",
+  "fax": "📠",
+  "battery": "🔋",
+  "low_battery": "🪫",
+  "electric_plug": "🔌",
+  "computer": "💻",
+  "desktop_computer": "🖥️",
+  "printer": "🖨️",
+  "keyboard": "⌨️",
+  "computer_mouse": "🖱️",
+  "trackball": "🖲️",
+  "minidisc": "💽",
+  "floppy_disk": "💾",
+  "cd": "💿",
+  "dvd": "📀",
+  "abacus": "🧮",
+  "movie_camera": "🎥",
+  "film_strip": "🎞️",
+  "film_projector": "📽️",
+  "clapper": "🎬",
+  "tv": "📺",
+  "camera": "📷",
+  "camera_flash": "📸",
+  "video_camera": "📹",
+  "vhs": "📼",
+  "mag": "🔍",
+  "mag_right": "🔎",
+  "candle": "🕯️",
+  "bulb": "💡",
+  "flashlight": "🔦",
+  "izakaya_lantern": "🏮",
+  "lantern": "🏮",
+  "diya_lamp": "🪔",
+  "notebook_with_decorative_cover": "📔",
+  "closed_book": "📕",
+  "book": "📖",
+  "open_book": "📖",
+  "green_book": "📗",
+  "blue_book": "📘",
+  "orange_book": "📙",
+  "books": "📚",
+  "notebook": "📓",
+  "ledger": "📒",
+  "page_with_curl": "📃",
+  "scroll": "📜",
+  "page_facing_up": "📄",
+  "newspaper": "📰",
+  "newspaper_roll": "🗞️",
+  "bookmark_tabs": "📑",
+  "bookmark": "🔖",
+  "label": "🏷️",
+  "moneybag": "💰",
+  "coin": "🪙",
+  "yen": "💴",
+  "dollar": "💵",
+  "euro": "💶",
+  "pound": "💷",
+  "money_with_wings": "💸",
+  "credit_card": "💳",
+  "receipt": "🧾",
+  "chart": "💹",
+  "envelope": "✉️",
+  "email": "📧",
+  "e-mail": "📧",
+  "incoming_envelope": "📨",
+  "envelope_with_arrow": "📩",
+  "outbox_tray": "📤",
+  "inbox_tray": "📥",
+  "package": "📦",
+  "mailbox": "📫",
+  "mailbox_closed": "📪",
+  "mailbox_with_mail": "📬",
+  "mailbox_with_no_mail": "📭",
+  "postbox": "📮",
+  "ballot_box": "🗳️",
+  "pencil2": "✏️",
+  "black_nib": "✒️",
+  "fountain_pen": "🖋️",
+  "pen": "🖊️",
+  "paintbrush": "🖌️",
+  "crayon": "🖍️",
+  "memo": "📝",
+  "pencil": "📝",
+  "briefcase": "💼",
+  "file_folder": "📁",
+  "open_file_folder": "📂",
+  "card_index_dividers": "🗂️",
+  "date": "📅",
+  "calendar": "📆",
+  "spiral_notepad": "🗒️",
+  "spiral_calendar": "🗓️",
+  "card_index": "📇",
+  "chart_with_upwards_trend": "📈",
+  "chart_with_downwards_trend": "📉",
+  "bar_chart": "📊",
+  "clipboard": "📋",
+  "pushpin": "📌",
+  "round_pushpin": "📍",
+  "paperclip": "📎",
+  "paperclips": "🖇️",
+  "straight_ruler": "📏",
+  "triangular_ruler": "📐",
+  "scissors": "✂️",
+  "card_file_box": "🗃️",
+  "file_cabinet": "🗄️",
+  "wastebasket": "🗑️",
+  "lock": "🔒",
+  "unlock": "🔓",
+  "lock_with_ink_pen": "🔏",
+  "closed_lock_with_key": "🔐",
+  "key": "🔑",
+  "old_key": "🗝️",
+  "hammer": "🔨",
+  "axe": "🪓",
+  "pick": "⛏️",
+  "hammer_and_pick": "⚒️",
+  "hammer_and_wrench": "🛠️",
+  "dagger": "🗡️",
+  "crossed_swords": "⚔️",
+  "bomb": "💣",
+  "boomerang": "🪃",
+  "bow_and_arrow": "🏹",
+  "shield": "🛡️",
+  "carpentry_saw": "🪚",
+  "wrench": "🔧",
+  "screwdriver": "🪛",
+  "nut_and_bolt": "🔩",
+  "gear": "⚙️",
+  "clamp": "🗜️",
+  "balance_scale": "⚖️",
+  "probing_cane": "🦯",
+  "link": "🔗",
+  "chains": "⛓️",
+  "hook": "🪝",
+  "toolbox": "🧰",
+  "magnet": "🧲",
+  "ladder": "🪜",
+  "alembic": "⚗️",
+  "test_tube": "🧪",
+  "petri_dish": "🧫",
+  "dna": "🧬",
+  "microscope": "🔬",
+  "telescope": "🔭",
+  "satellite": "📡",
+  "syringe": "💉",
+  "drop_of_blood": "🩸",
+  "pill": "💊",
+  "adhesive_bandage": "🩹",
+  "crutch": "🩼",
+  "stethoscope": "🩺",
+  "x_ray": "🩻",
+  "door": "🚪",
+  "elevator": "🛗",
+  "mirror": "🪞",
+  "window": "🪟",
+  "bed": "🛏️",
+  "couch_and_lamp": "🛋️",
+  "chair": "🪑",
+  "toilet": "🚽",
+  "plunger": "🪠",
+  "shower": "🚿",
+  "bathtub": "🛁",
+  "mouse_trap": "🪤",
+  "razor": "🪒",
+  "lotion_bottle": "🧴",
+  "safety_pin": "🧷",
+  "broom": "🧹",
+  "basket": "🧺",
+  "roll_of_paper": "🧻",
+  "bucket": "🪣",
+  "soap": "🧼",
+  "bubbles": "🫧",
+  "toothbrush": "🪥",
+  "sponge": "🧽",
+  "fire_extinguisher": "🧯",
+  "shopping_cart": "🛒",
+  "smoking": "🚬",
+  "coffin": "⚰️",
+  "headstone": "🪦",
+  "funeral_urn": "⚱️",
+  "nazar_amulet": "🧿",
+  "hamsa": "🪬",
+  "moyai": "🗿",
+  "placard": "🪧",
+  "identification_card": "🪪",
+  "atm": "🏧",
+  "put_litter_in_its_place": "🚮",
+  "potable_water": "🚰",
+  "wheelchair": "♿",
+  "mens": "🚹",
+  "womens": "🚺",
+  "restroom": "🚻",
+  "baby_symbol": "🚼",
+  "wc": "🚾",
+  "passport_control": "🛂",
+  "customs": "🛃",
+  "baggage_claim": "🛄",
+  "left_luggage": "🛅",
+  "warning": "⚠️",
+  "children_crossing": "🚸",
+  "no_entry": "⛔",
+  "no_entry_sign": "🚫",
+  "no_bicycles": "🚳",
+  "no_smoking": "🚭",
+  "do_not_litter": "🚯",
+  "non-potable_water": "🚱",
+  "no_pedestrians": "🚷",
+  "no_mobile_phones": "📵",
+  "underage": "🔞",
+  "radioactive": "☢️",
+  "biohazard": "☣️",
+  "arrow_up": "⬆️",
+  "arrow_upper_right": "↗️",
+  "arrow_right": "➡️",
+  "arrow_lower_right": "↘️",
+  "arrow_down": "⬇️",
+  "arrow_lower_left": "↙️",
+  "arrow_left": "⬅️",
+  "arrow_upper_left": "↖️",
+  "arrow_up_down": "↕️",
+  "left_right_arrow": "↔️",
+  "leftwards_arrow_with_hook": "↩️",
+  "arrow_right_hook": "↪️",
+  "arrow_heading_up": "⤴️",
+  "arrow_heading_down": "⤵️",
+  "arrows_clockwise": "🔃",
+  "arrows_counterclockwise": "🔄",
+  "back": "🔙",
+  "end": "🔚",
+  "on": "🔛",
+  "soon": "🔜",
+  "top": "🔝",
+  "place_of_worship": "🛐",
+  "atom_symbol": "⚛️",
+  "om": "🕉️",
+  "star_of_david": "✡️",
+  "wheel_of_dharma": "☸️",
+  "yin_yang": "☯️",
+  "latin_cross": "✝️",
+  "orthodox_cross": "☦️",
+  "star_and_crescent": "☪️",
+  "peace_symbol": "☮️",
+  "menorah": "🕎",
+  "six_pointed_star": "🔯",
+  "khanda": "🪯",
+  "aries": "♈",
+  "taurus": "♉",
+  "gemini": "♊",
+  "cancer": "♋",
+  "leo": "♌",
+  "virgo": "♍",
+  "libra": "♎",
+  "scorpius": "♏",
+  "sagittarius": "♐",
+  "capricorn": "♑",
+  "aquarius": "♒",
+  "pisces": "♓",
+  "ophiuchus": "⛎",
+  "twisted_rightwards_arrows": "🔀",
+  "repeat": "🔁",
+  "repeat_one": "🔂",
+  "arrow_forward": "▶️",
+  "fast_forward": "⏩",
+  "next_track_button": "⏭️",
+  "play_or_pause_button": "⏯️",
+  "arrow_backward": "◀️",
+  "rewind": "⏪",
+  "previous_track_button": "⏮️",
+  "arrow_up_small": "🔼",
+  "arrow_double_up": "⏫",
+  "arrow_down_small": "🔽",
+  "arrow_double_down": "⏬",
+  "pause_button": "⏸️",
+  "stop_button": "⏹️",
+  "record_button": "⏺️",
+  "eject_button": "⏏️",
+  "cinema": "🎦",
+  "low_brightness": "🔅",
+  "high_brightness": "🔆",
+  "signal_strength": "📶",
+  "wireless": "🛜",
+  "vibration_mode": "📳",
+  "mobile_phone_off": "📴",
+  "female_sign": "♀️",
+  "male_sign": "♂️",
+  "transgender_symbol": "⚧️",
+  "heavy_multiplication_x": "✖️",
+  "heavy_plus_sign": "➕",
+  "heavy_minus_sign": "➖",
+  "heavy_division_sign": "➗",
+  "heavy_equals_sign": "🟰",
+  "infinity": "♾️",
+  "bangbang": "‼️",
+  "interrobang": "⁉️",
+  "question": "❓",
+  "grey_question": "❔",
+  "grey_exclamation": "❕",
+  "exclamation": "❗",
+  "heavy_exclamation_mark": "❗",
+  "wavy_dash": "〰️",
+  "currency_exchange": "💱",
+  "heavy_dollar_sign": "💲",
+  "medical_symbol": "⚕️",
+  "recycle": "♻️",
+  "fleur_de_lis": "⚜️",
+  "trident": "🔱",
+  "name_badge": "📛",
+  "beginner": "🔰",
+  "o": "⭕",
+  "white_check_mark": "✅",
+  "ballot_box_with_check": "☑️",
+  "heavy_check_mark": "✔️",
+  "x": "❌",
+  "negative_squared_cross_mark": "❎",
+  "curly_loop": "➰",
+  "loop": "➿",
+  "part_alternation_mark": "〽️",
+  "eight_spoked_asterisk": "✳️",
+  "eight_pointed_black_star": "✴️",
+  "sparkle": "❇️",
+  "copyright": "©️",
+  "registered": "®️",
+  "tm": "™️",
+  "hash": "#️⃣",
+  "asterisk": "*️⃣",
+  "zero": "0️⃣",
+  "one": "1️⃣",
+  "two": "2️⃣",
+  "three": "3️⃣",
+  "four": "4️⃣",
+  "five": "5️⃣",
+  "six": "6️⃣",
+  "seven": "7️⃣",
+  "eight": "8️⃣",
+  "nine": "9️⃣",
+  "keycap_ten": "🔟",
+  "capital_abcd": "🔠",
+  "abcd": "🔡",
+  "symbols": "🔣",
+  "abc": "🔤",
+  "a": "🅰️",
+  "ab": "🆎",
+  "b": "🅱️",
+  "cl": "🆑",
+  "cool": "🆒",
+  "free": "🆓",
+  "information_source": "ℹ️",
+  "id": "🆔",
+  "m": "Ⓜ️",
+  "new": "🆕",
+  "ng": "🆖",
+  "o2": "🅾️",
+  "ok": "🆗",
+  "parking": "🅿️",
+  "sos": "🆘",
+  "up": "🆙",
+  "vs": "🆚",
+  "koko": "🈁",
+  "sa": "🈂️",
+  "u6708": "🈷️",
+  "u6709": "🈶",
+  "u6307": "🈯",
+  "ideograph_advantage": "🉐",
+  "u5272": "🈹",
+  "u7121": "🈚",
+  "u7981": "🈲",
+  "accept": "🉑",
+  "u7533": "🈸",
+  "u5408": "🈴",
+  "u7a7a": "🈳",
+  "congratulations": "㊗️",
+  "secret": "㊙️",
+  "u55b6": "🈺",
+  "u6e80": "🈵",
+  "red_circle": "🔴",
+  "orange_circle": "🟠",
+  "yellow_circle": "🟡",
+  "green_circle": "🟢",
+  "large_blue_circle": "🔵",
+  "purple_circle": "🟣",
+  "brown_circle": "🟤",
+  "black_circle": "⚫",
+  "white_circle": "⚪",
+  "red_square": "🟥",
+  "orange_square": "🟧",
+  "yellow_square": "🟨",
+  "green_square": "🟩",
+  "blue_square": "🟦",
+  "purple_square": "🟪",
+  "brown_square": "🟫",
+  "black_large_square": "⬛",
+  "white_large_square": "⬜",
+  "black_medium_square": "◼️",
+  "white_medium_square": "◻️",
+  "black_medium_small_square": "◾",
+  "white_medium_small_square": "◽",
+  "black_small_square": "▪️",
+  "white_small_square": "▫️",
+  "large_orange_diamond": "🔶",
+  "large_blue_diamond": "🔷",
+  "small_orange_diamond": "🔸",
+  "small_blue_diamond": "🔹",
+  "small_red_triangle": "🔺",
+  "small_red_triangle_down": "🔻",
+  "diamond_shape_with_a_dot_inside": "💠",
+  "radio_button": "🔘",
+  "white_square_button": "🔳",
+  "black_square_button": "🔲",
+  "checkered_flag": "🏁",
+  "triangular_flag_on_post": "🚩",
+  "crossed_flags": "🎌",
+  "black_flag": "🏴",
+  "white_flag": "🏳️",
+  "rainbow_flag": "🏳️‍🌈",
+  "transgender_flag": "🏳️‍⚧️",
+  "pirate_flag": "🏴‍☠️",
+  "ascension_island": "🇦🇨",
+  "andorra": "🇦🇩",
+  "united_arab_emirates": "🇦🇪",
+  "afghanistan": "🇦🇫",
+  "antigua_barbuda": "🇦🇬",
+  "anguilla": "🇦🇮",
+  "albania": "🇦🇱",
+  "armenia": "🇦🇲",
+  "angola": "🇦🇴",
+  "antarctica": "🇦🇶",
+  "argentina": "🇦🇷",
+  "american_samoa": "🇦🇸",
+  "austria": "🇦🇹",
+  "australia": "🇦🇺",
+  "aruba": "🇦🇼",
+  "aland_islands": "🇦🇽",
+  "azerbaijan": "🇦🇿",
+  "bosnia_herzegovina": "🇧🇦",
+  "barbados": "🇧🇧",
+  "bangladesh": "🇧🇩",
+  "belgium": "🇧🇪",
+  "burkina_faso": "🇧🇫",
+  "bulgaria": "🇧🇬",
+  "bahrain": "🇧🇭",
+  "burundi": "🇧🇮",
+  "benin": "🇧🇯",
+  "st_barthelemy": "🇧🇱",
+  "bermuda": "🇧🇲",
+  "brunei": "🇧🇳",
+  "bolivia": "🇧🇴",
+  "caribbean_netherlands": "🇧🇶",
+  "brazil": "🇧🇷",
+  "bahamas": "🇧🇸",
+  "bhutan": "🇧🇹",
+  "bouvet_island": "🇧🇻",
+  "botswana": "🇧🇼",
+  "belarus": "⬜️🟥⬜",
+  "belize": "🇧🇿",
+  "canada": "🇨🇦",
+  "cocos_islands": "🇨🇨",
+  "congo_kinshasa": "🇨🇩",
+  "central_african_republic": "🇨🇫",
+  "congo_brazzaville": "🇨🇬",
+  "switzerland": "🇨🇭",
+  "cote_divoire": "🇨🇮",
+  "cook_islands": "🇨🇰",
+  "chile": "🇨🇱",
+  "cameroon": "🇨🇲",
+  "cn": "🇨🇳",
+  "colombia": "🇨🇴",
+  "clipperton_island": "🇨🇵",
+  "costa_rica": "🇨🇷",
+  "cuba": "🇨🇺",
+  "cape_verde": "🇨🇻",
+  "curacao": "🇨🇼",
+  "christmas_island": "🇨🇽",
+  "cyprus": "🇨🇾",
+  "czech_republic": "🇨🇿",
+  "de": "🇩🇪",
+  "diego_garcia": "🇩🇬",
+  "djibouti": "🇩🇯",
+  "denmark": "🇩🇰",
+  "dominica": "🇩🇲",
+  "dominican_republic": "🇩🇴",
+  "algeria": "🇩🇿",
+  "ceuta_melilla": "🇪🇦",
+  "ecuador": "🇪🇨",
+  "estonia": "🇪🇪",
+  "egypt": "🇪🇬",
+  "western_sahara": "🇪🇭",
+  "eritrea": "🇪🇷",
+  "es": "🇪🇸",
+  "ethiopia": "🇪🇹",
+  "eu": "🇪🇺",
+  "european_union": "🇪🇺",
+  "finland": "🇫🇮",
+  "fiji": "🇫🇯",
+  "falkland_islands": "🇫🇰",
+  "micronesia": "🇫🇲",
+  "faroe_islands": "🇫🇴",
+  "fr": "🇫🇷",
+  "gabon": "🇬🇦",
+  "gb": "🇬🇧",
+  "uk": "🇬🇧",
+  "grenada": "🇬🇩",
+  "georgia": "🇬🇪",
+  "french_guiana": "🇬🇫",
+  "guernsey": "🇬🇬",
+  "ghana": "🇬🇭",
+  "gibraltar": "🇬🇮",
+  "greenland": "🇬🇱",
+  "gambia": "🇬🇲",
+  "guinea": "🇬🇳",
+  "guadeloupe": "🇬🇵",
+  "equatorial_guinea": "🇬🇶",
+  "greece": "🇬🇷",
+  "south_georgia_south_sandwich_islands": "🇬🇸",
+  "guatemala": "🇬🇹",
+  "guam": "🇬🇺",
+  "guinea_bissau": "🇬🇼",
+  "guyana": "🇬🇾",
+  "hong_kong": "🇭🇰",
+  "heard_mcdonald_islands": "🇭🇲",
+  "honduras": "🇭🇳",
+  "croatia": "🇭🇷",
+  "haiti": "🇭🇹",
+  "hungary": "🇭🇺",
+  "canary_islands": "🇮🇨",
+  "indonesia": "🇮🇩",
+  "ireland": "🇮🇪",
+  "israel": "🇮🇱",
+  "isle_of_man": "🇮🇲",
+  "india": "🇮🇳",
+  "british_indian_ocean_territory": "🇮🇴",
+  "iraq": "🇮🇶",
+  "iran": "🇮🇷",
+  "iceland": "🇮🇸",
+  "it": "🇮🇹",
+  "jersey": "🇯🇪",
+  "jamaica": "🇯🇲",
+  "jordan": "🇯🇴",
+  "jp": "🇯🇵",
+  "kenya": "🇰🇪",
+  "kyrgyzstan": "🇰🇬",
+  "cambodia": "🇰🇭",
+  "kiribati": "🇰🇮",
+  "comoros": "🇰🇲",
+  "st_kitts_nevis": "🇰🇳",
+  "north_korea": "🇰🇵",
+  "kr": "🇰🇷",
+  "kuwait": "🇰🇼",
+  "cayman_islands": "🇰🇾",
+  "kazakhstan": "🇰🇿",
+  "laos": "🇱🇦",
+  "lebanon": "🇱🇧",
+  "st_lucia": "🇱🇨",
+  "liechtenstein": "🇱🇮",
+  "sri_lanka": "🇱🇰",
+  "liberia": "🇱🇷",
+  "lesotho": "🇱🇸",
+  "lithuania": "🇱🇹",
+  "luxembourg": "🇱🇺",
+  "latvia": "🇱🇻",
+  "libya": "🇱🇾",
+  "morocco": "🇲🇦",
+  "monaco": "🇲🇨",
+  "moldova": "🇲🇩",
+  "montenegro": "🇲🇪",
+  "st_martin": "🇲🇫",
+  "madagascar": "🇲🇬",
+  "marshall_islands": "🇲🇭",
+  "macedonia": "🇲🇰",
+  "mali": "🇲🇱",
+  "myanmar": "🇲🇲",
+  "mongolia": "🇲🇳",
+  "macau": "🇲🇴",
+  "northern_mariana_islands": "🇲🇵",
+  "martinique": "🇲🇶",
+  "mauritania": "🇲🇷",
+  "montserrat": "🇲🇸",
+  "malta": "🇲🇹",
+  "mauritius": "🇲🇺",
+  "maldives": "🇲🇻",
+  "malawi": "🇲🇼",
+  "mexico": "🇲🇽",
+  "malaysia": "🇲🇾",
+  "mozambique": "🇲🇿",
+  "namibia": "🇳🇦",
+  "new_caledonia": "🇳🇨",
+  "niger": "🇳🇪",
+  "norfolk_island": "🇳🇫",
+  "nigeria": "🇳🇬",
+  "nicaragua": "🇳🇮",
+  "netherlands": "🇳🇱",
+  "norway": "🇳🇴",
+  "nepal": "🇳🇵",
+  "nauru": "🇳🇷",
+  "niue": "🇳🇺",
+  "new_zealand": "🇳🇿",
+  "oman": "🇴🇲",
+  "panama": "🇵🇦",
+  "peru": "🇵🇪",
+  "french_polynesia": "🇵🇫",
+  "papua_new_guinea": "🇵🇬",
+  "philippines": "🇵🇭",
+  "pakistan": "🇵🇰",
+  "poland": "🇵🇱",
+  "st_pierre_miquelon": "🇵🇲",
+  "pitcairn_islands": "🇵🇳",
+  "puerto_rico": "🇵🇷",
+  "palestinian_territories": "🇵🇸",
+  "portugal": "🇵🇹",
+  "palau": "🇵🇼",
+  "paraguay": "🇵🇾",
+  "qatar": "🇶🇦",
+  "reunion": "🇷🇪",
+  "romania": "🇷🇴",
+  "serbia": "🇷🇸",
+  "ru": "🇷🇺",
+  "rwanda": "🇷🇼",
+  "saudi_arabia": "🇸🇦",
+  "solomon_islands": "🇸🇧",
+  "seychelles": "🇸🇨",
+  "sudan": "🇸🇩",
+  "sweden": "🇸🇪",
+  "singapore": "🇸🇬",
+  "st_helena": "🇸🇭",
+  "slovenia": "🇸🇮",
+  "svalbard_jan_mayen": "🇸🇯",
+  "slovakia": "🇸🇰",
+  "sierra_leone": "🇸🇱",
+  "san_marino": "🇸🇲",
+  "senegal": "🇸🇳",
+  "somalia": "🇸🇴",
+  "suriname": "🇸🇷",
+  "south_sudan": "🇸🇸",
+  "sao_tome_principe": "🇸🇹",
+  "el_salvador": "🇸🇻",
+  "sint_maarten": "🇸🇽",
+  "syria": "🇸🇾",
+  "swaziland": "🇸🇿",
+  "tristan_da_cunha": "🇹🇦",
+  "turks_caicos_islands": "🇹🇨",
+  "chad": "🇹🇩",
+  "french_southern_territories": "🇹🇫",
+  "togo": "🇹🇬",
+  "thailand": "🇹🇭",
+  "tajikistan": "🇹🇯",
+  "tokelau": "🇹🇰",
+  "timor_leste": "🇹🇱",
+  "turkmenistan": "🇹🇲",
+  "tunisia": "🇹🇳",
+  "tonga": "🇹🇴",
+  "tr": "🇹🇷",
+  "trinidad_tobago": "🇹🇹",
+  "tuvalu": "🇹🇻",
+  "taiwan": "🇹🇼",
+  "tanzania": "🇹🇿",
+  "ukraine": "🇺🇦",
+  "uganda": "🇺🇬",
+  "us_outlying_islands": "🇺🇲",
+  "united_nations": "🇺🇳",
+  "us": "🇺🇸",
+  "uruguay": "🇺🇾",
+  "uzbekistan": "🇺🇿",
+  "vatican_city": "🇻🇦",
+  "st_vincent_grenadines": "🇻🇨",
+  "venezuela": "🇻🇪",
+  "british_virgin_islands": "🇻🇬",
+  "us_virgin_islands": "🇻🇮",
+  "vietnam": "🇻🇳",
+  "vanuatu": "🇻🇺",
+  "wallis_futuna": "🇼🇫",
+  "samoa": "🇼🇸",
+  "kosovo": "🇽🇰",
+  "yemen": "🇾🇪",
+  "mayotte": "🇾🇹",
+  "south_africa": "🇿🇦",
+  "zambia": "🇿🇲",
+  "zimbabwe": "🇿🇼",
+  "england": "🏴󠁧󠁢󠁥󠁮󠁧󠁿",
+  "scotland": "🏴󠁧󠁢󠁳󠁣󠁴󠁿",
+  "wales": "🏴󠁧󠁢󠁷󠁬󠁳󠁿"
+};
diff --git a/app/vmui/packages/vmui/src/constants/markedPlugins.ts b/app/vmui/packages/vmui/src/constants/markedPlugins.ts
new file mode 100644
index 000000000..2a7d046c7
--- /dev/null
+++ b/app/vmui/packages/vmui/src/constants/markedPlugins.ts
@@ -0,0 +1,5 @@
+import { markedEmoji } from "marked-emoji";
+import { marked } from "marked";
+import emojis from "./emojis";
+
+marked.use(markedEmoji({ emojis, renderer: (token) => token.emoji }));
diff --git a/app/vmui/packages/vmui/src/hooks/useGetMetricsQL.tsx b/app/vmui/packages/vmui/src/hooks/useGetMetricsQL.tsx
index fb930c4ba..c41e4be92 100644
--- a/app/vmui/packages/vmui/src/hooks/useGetMetricsQL.tsx
+++ b/app/vmui/packages/vmui/src/hooks/useGetMetricsQL.tsx
@@ -54,7 +54,7 @@ const useGetMetricsQL = () => {
 
   const processMarkdown = (text: string) => {
     const div = document.createElement("div");
-    div.innerHTML = marked(text);
+    div.innerHTML = marked(text) as string;
     const groups = div.querySelectorAll(`${CATEGORY_TAG}, ${FUNCTION_TAG}`);
     return processGroups(groups);
   };
diff --git a/app/vmui/packages/vmui/src/pages/ExploreLogs/ExploreLogs.tsx b/app/vmui/packages/vmui/src/pages/ExploreLogs/ExploreLogs.tsx
index 8696531e4..9dbebedb6 100644
--- a/app/vmui/packages/vmui/src/pages/ExploreLogs/ExploreLogs.tsx
+++ b/app/vmui/packages/vmui/src/pages/ExploreLogs/ExploreLogs.tsx
@@ -26,6 +26,7 @@ const ExploreLogs: FC = () => {
   const { logs, isLoading, error, fetchLogs } = useFetchLogs(serverUrl, query, limit);
   const [queryError, setQueryError] = useState<ErrorTypes | string>("");
   const [loaded, isLoaded] = useState(false);
+  const [markdownParsing, setMarkdownParsing] = useState(getFromStorage("LOGS_MARKDOWN") === "true");
 
   const handleRunQuery = () => {
     if (!query) {
@@ -51,6 +52,11 @@ const ExploreLogs: FC = () => {
     saveToStorage("LOGS_LIMIT", `${limit}`);
   };
 
+  const handleChangeMarkdownParsing = (val: boolean) => {
+    saveToStorage("LOGS_MARKDOWN", `${val}`);
+    setMarkdownParsing(val);
+  };
+
   useEffect(() => {
     if (query) handleRunQuery();
   }, [period]);
@@ -65,15 +71,18 @@ const ExploreLogs: FC = () => {
         query={query}
         error={queryError}
         limit={limit}
+        markdownParsing={markdownParsing}
         onChange={setQuery}
         onChangeLimit={handleChangeLimit}
         onRun={handleRunQuery}
+        onChangeMarkdownParsing={handleChangeMarkdownParsing}
       />
       {isLoading && <Spinner />}
       {error && <Alert variant="error">{error}</Alert>}
       <ExploreLogsBody
         data={logs}
         loaded={loaded}
+        markdownParsing={markdownParsing}
       />
     </div>
   );
diff --git a/app/vmui/packages/vmui/src/pages/ExploreLogs/ExploreLogsBody/ExploreLogsBody.tsx b/app/vmui/packages/vmui/src/pages/ExploreLogs/ExploreLogsBody/ExploreLogsBody.tsx
index 7538a0e14..3a66a3503 100644
--- a/app/vmui/packages/vmui/src/pages/ExploreLogs/ExploreLogsBody/ExploreLogsBody.tsx
+++ b/app/vmui/packages/vmui/src/pages/ExploreLogs/ExploreLogsBody/ExploreLogsBody.tsx
@@ -15,10 +15,12 @@ import useBoolean from "../../../hooks/useBoolean";
 import TableLogs from "./TableLogs";
 import GroupLogs from "../GroupLogs/GroupLogs";
 import { DATE_TIME_FORMAT } from "../../../constants/date";
+import { marked } from "marked";
 
 export interface ExploreLogBodyProps {
   data: Logs[];
   loaded?: boolean;
+  markdownParsing: boolean;
 }
 
 enum DisplayType {
@@ -33,7 +35,7 @@ const tabs = [
   { label: "JSON", value: DisplayType.json, icon: <CodeIcon/> },
 ];
 
-const ExploreLogsBody: FC<ExploreLogBodyProps> = ({ data, loaded }) => {
+const ExploreLogsBody: FC<ExploreLogBodyProps> = ({ data, loaded, markdownParsing }) => {
   const { isMobile } = useDeviceDetect();
   const { timezone } = useTimeState();
   const { setSearchParamsFromKeys } = useSearchParamsFromObject();
@@ -46,11 +48,12 @@ const ExploreLogsBody: FC<ExploreLogBodyProps> = ({ data, loaded }) => {
     ...item,
     _vmui_time: item._time ? dayjs(item._time).tz().format(`${DATE_TIME_FORMAT}.SSS`) : "",
     _vmui_data: JSON.stringify(item, null, 2),
+    _vmui_markdown: marked(item._msg.replace(/```/g, "\n```\n")) as string,
   })) as Logs[], [data, timezone]);
 
   const columns = useMemo(() => {
     if (!logs?.length) return [];
-    const hideColumns = ["_vmui_data", "_vmui_time"];
+    const hideColumns = ["_vmui_data", "_vmui_time", "_vmui_markdown"];
     const keys = new Set<string>();
     for (const item of logs) {
       for (const key in item) {
@@ -125,6 +128,7 @@ const ExploreLogsBody: FC<ExploreLogBodyProps> = ({ data, loaded }) => {
               <GroupLogs
                 logs={logs}
                 columns={columns}
+                markdownParsing={markdownParsing}
               />
             )}
             {activeTab === DisplayType.json && (
diff --git a/app/vmui/packages/vmui/src/pages/ExploreLogs/ExploreLogsHeader/ExploreLogsHeader.tsx b/app/vmui/packages/vmui/src/pages/ExploreLogs/ExploreLogsHeader/ExploreLogsHeader.tsx
index 5a7c54973..aed3af35b 100644
--- a/app/vmui/packages/vmui/src/pages/ExploreLogs/ExploreLogsHeader/ExploreLogsHeader.tsx
+++ b/app/vmui/packages/vmui/src/pages/ExploreLogs/ExploreLogsHeader/ExploreLogsHeader.tsx
@@ -6,17 +6,29 @@ import useDeviceDetect from "../../../hooks/useDeviceDetect";
 import Button from "../../../components/Main/Button/Button";
 import QueryEditor from "../../../components/Configurators/QueryEditor/QueryEditor";
 import TextField from "../../../components/Main/TextField/TextField";
+import Switch from "../../../components/Main/Switch/Switch";
 
 export interface ExploreLogHeaderProps {
   query: string;
   limit: number;
   error?: string;
+  markdownParsing: boolean;
   onChange: (val: string) => void;
   onChangeLimit: (val: number) => void;
   onRun: () => void;
+  onChangeMarkdownParsing: (val: boolean) => void;
 }
 
-const ExploreLogsHeader: FC<ExploreLogHeaderProps> = ({ query, limit, error, onChange, onChangeLimit, onRun }) => {
+const ExploreLogsHeader: FC<ExploreLogHeaderProps> = ({
+  query,
+  limit,
+  error,
+  markdownParsing,
+  onChange,
+  onChangeLimit,
+  onRun,
+  onChangeMarkdownParsing,
+}) => {
   const { isMobile } = useDeviceDetect();
 
   const [errorLimit, setErrorLimit] = useState("");
@@ -66,6 +78,14 @@ const ExploreLogsHeader: FC<ExploreLogHeaderProps> = ({ query, limit, error, onC
         />
       </div>
       <div className="vm-explore-logs-header-bottom">
+        <div className="vm-explore-logs-header-bottom-contols">
+          <Switch
+            label={"Markdown parsing"}
+            value={markdownParsing}
+            onChange={onChangeMarkdownParsing}
+            fullWidth={isMobile}
+          />
+        </div>
         <div className="vm-explore-logs-header-bottom-helpful">
           <a
             className="vm-link vm-link_with-icon"
diff --git a/app/vmui/packages/vmui/src/pages/ExploreLogs/ExploreLogsHeader/style.scss b/app/vmui/packages/vmui/src/pages/ExploreLogs/ExploreLogsHeader/style.scss
index 49a439863..1bc7ab0b6 100644
--- a/app/vmui/packages/vmui/src/pages/ExploreLogs/ExploreLogsHeader/style.scss
+++ b/app/vmui/packages/vmui/src/pages/ExploreLogs/ExploreLogsHeader/style.scss
@@ -25,6 +25,10 @@
       justify-content: normal;
     }
 
+    &-contols {
+      flex-grow: 1;
+    }
+
     &__execute {
       display: grid;
     }
diff --git a/app/vmui/packages/vmui/src/pages/ExploreLogs/GroupLogs/GroupLogs.tsx b/app/vmui/packages/vmui/src/pages/ExploreLogs/GroupLogs/GroupLogs.tsx
index 739d0c033..82983a14f 100644
--- a/app/vmui/packages/vmui/src/pages/ExploreLogs/GroupLogs/GroupLogs.tsx
+++ b/app/vmui/packages/vmui/src/pages/ExploreLogs/GroupLogs/GroupLogs.tsx
@@ -11,9 +11,10 @@ import GroupLogsItem from "./GroupLogsItem";
 interface TableLogsProps {
   logs: Logs[];
   columns: string[];
+  markdownParsing: boolean;
 }
 
-const GroupLogs: FC<TableLogsProps> = ({ logs }) => {
+const GroupLogs: FC<TableLogsProps> = ({ logs, markdownParsing }) => {
   const copyToClipboard = useCopyToClipboard();
 
   const [copied, setCopied] = useState<string | null>(null);
@@ -77,6 +78,7 @@ const GroupLogs: FC<TableLogsProps> = ({ logs }) => {
                 <GroupLogsItem
                   key={`${value._msg}${value._time}`}
                   log={value}
+                  markdownParsing={markdownParsing}
                 />
               ))}
             </div>
diff --git a/app/vmui/packages/vmui/src/pages/ExploreLogs/GroupLogs/GroupLogsItem.tsx b/app/vmui/packages/vmui/src/pages/ExploreLogs/GroupLogs/GroupLogsItem.tsx
index 7208de932..64539db0e 100644
--- a/app/vmui/packages/vmui/src/pages/ExploreLogs/GroupLogs/GroupLogsItem.tsx
+++ b/app/vmui/packages/vmui/src/pages/ExploreLogs/GroupLogs/GroupLogsItem.tsx
@@ -10,15 +10,16 @@ import classNames from "classnames";
 
 interface Props {
   log: Logs;
+  markdownParsing: boolean;
 }
 
-const GroupLogsItem: FC<Props> = ({ log }) => {
+const GroupLogsItem: FC<Props> = ({ log, markdownParsing }) => {
   const {
     value: isOpenFields,
     toggle: toggleOpenFields,
   } = useBoolean(false);
 
-  const excludeKeys = ["_stream", "_msg", "_time", "_vmui_time", "_vmui_data"];
+  const excludeKeys = ["_stream", "_msg", "_time", "_vmui_time", "_vmui_data", "_vmui_markdown"];
   const fields = Object.entries(log).filter(([key]) => !excludeKeys.includes(key));
   const hasFields = fields.length > 0;
 
@@ -71,6 +72,7 @@ const GroupLogsItem: FC<Props> = ({ log }) => {
             "vm-group-logs-row-content__msg": true,
             "vm-group-logs-row-content__msg_missing": !log._msg
           })}
+          dangerouslySetInnerHTML={markdownParsing && log._vmui_markdown ? { __html: log._vmui_markdown } : undefined}
         >
           {log._msg || "message missing"}
         </div>
diff --git a/app/vmui/packages/vmui/src/pages/ExploreLogs/GroupLogs/style.scss b/app/vmui/packages/vmui/src/pages/ExploreLogs/GroupLogs/style.scss
index 0710a3f8e..71ee06179 100644
--- a/app/vmui/packages/vmui/src/pages/ExploreLogs/GroupLogs/style.scss
+++ b/app/vmui/packages/vmui/src/pages/ExploreLogs/GroupLogs/style.scss
@@ -96,6 +96,65 @@
           font-style: italic;
           text-align: center;
         }
+
+        /* styles for markdown */
+        p, pre, code {
+          white-space: pre-wrap;
+          word-wrap: break-word;
+          word-break: normal;
+        }
+
+        code:not(pre code), pre {
+          display: inline-block;
+          background: $color-hover-black;
+          border: 1px solid $color-hover-black;
+          border-radius: $border-radius-small;
+          tab-size: 4;
+          font-variant-ligatures: none;
+          margin: calc($padding-small/4) 0;
+        }
+
+        p {
+          font-family: $font-family-global;
+          line-height: 1.4;
+        }
+
+        pre {
+          padding: $padding-small;
+        }
+
+        code {
+          font-size: $font-size-small;
+          padding: calc($padding-small / 4) calc($padding-small / 2);
+        }
+
+        a {
+          color: $color-primary;
+          cursor: pointer;
+
+          &:hover {
+            text-decoration: underline;
+          }
+        }
+
+        strong {
+          font-weight: bold;
+        }
+
+        em {
+          font-style: italic;
+        }
+
+        blockquote {
+          border-left: 4px solid $color-hover-black;
+          margin: calc($padding-small/2) $padding-small;
+          padding: calc($padding-small/2) $padding-small;
+        }
+
+        ul, ol {
+          list-style-position: inside;
+        }
+        /* end styles for markdown */
       }
     }
 
diff --git a/app/vmui/packages/vmui/src/pages/PredefinedPanels/PredefinedPanel/PredefinedPanel.tsx b/app/vmui/packages/vmui/src/pages/PredefinedPanels/PredefinedPanel/PredefinedPanel.tsx
index 268d51a93..3c2dce8e1 100644
--- a/app/vmui/packages/vmui/src/pages/PredefinedPanels/PredefinedPanel/PredefinedPanel.tsx
+++ b/app/vmui/packages/vmui/src/pages/PredefinedPanels/PredefinedPanel/PredefinedPanel.tsx
@@ -89,7 +89,7 @@ const PredefinedPanel: FC<PredefinedPanelsProps> = ({
         <>
           <div>
             <span>Description:</span>
-            <div dangerouslySetInnerHTML={{ __html: marked.parse(description) }}/>
+            <div dangerouslySetInnerHTML={{ __html: marked(description) as string }}/>
           </div>
           <hr/>
         </>
diff --git a/app/vmui/packages/vmui/src/utils/storage.ts b/app/vmui/packages/vmui/src/utils/storage.ts
index 995cf7772..7c5ee7109 100644
--- a/app/vmui/packages/vmui/src/utils/storage.ts
+++ b/app/vmui/packages/vmui/src/utils/storage.ts
@@ -7,6 +7,7 @@ export type StorageKeys = "AUTOCOMPLETE"
     | "DISABLED_DEFAULT_TIMEZONE"
     | "THEME"
     | "LOGS_LIMIT"
+    | "LOGS_MARKDOWN"
     | "EXPLORE_METRICS_TIPS"
     | "QUERY_HISTORY"
     | "QUERY_FAVORITES"
diff --git a/docs/MetricsQL.md b/docs/MetricsQL.md
index 158b0725f..d49ccfb6e 100644
--- a/docs/MetricsQL.md
+++ b/docs/MetricsQL.md
@@ -107,7 +107,7 @@ The list of MetricsQL features on top of PromQL:
 * Trailing commas on all the lists are allowed - label filters, function args and with expressions.
   For instance, the following queries are valid: `m{foo="bar",}`, `f(a, b,)`, `WITH (x=y,) x`.
   This simplifies maintenance of multi-line queries.
-* Metric names and label names may contain any unicode letter. For example `температура{город="Київ"}` is a value MetricsQL expression.
+* Metric names and label names may contain any unicode letter. For example `температура{город="Київ"}` is a valid MetricsQL expression.
 * Metric names and labels names may contain escaped chars. For example, `foo\-bar{baz\=aa="b"}` is valid expression.
   It returns time series with name `foo-bar` containing label `baz=aa` with value `b`.
   Additionally, the following escape sequences are supported:
diff --git a/docs/VictoriaLogs/CHANGELOG.md b/docs/VictoriaLogs/CHANGELOG.md
index 89fa29625..649468cf7 100644
--- a/docs/VictoriaLogs/CHANGELOG.md
+++ b/docs/VictoriaLogs/CHANGELOG.md
@@ -19,6 +19,11 @@ according to [these docs](https://docs.victoriametrics.com/victorialogs/quicksta
 
 ## tip
 
+* FEATURE: treat unexpected syslog message as [RFC3164](https://datatracker.ietf.org/doc/html/rfc3164) containing only the `message` field when using [`unpack_syslog` pipe](https://docs.victoriametrics.com/victorialogs/logsql/#unpack_syslog-pipe).
+* FEATURE: allow using `where` prefix instead of `filter` prefix in [`filter` pipe](https://docs.victoriametrics.com/victorialogs/logsql/#filter-pipe).
+* FEATURE: disallow unescaped `!` char in [LogsQL](https://docs.victoriametrics.com/victorialogs/logsql/) queries, since it permits writing incorrect query, which may look like correct one. For example, `foo!:bar` instead of `foo:!bar`.
+* FEATURE: [web UI](https://docs.victoriametrics.com/VictoriaLogs/querying/#web-ui): add markdown support to the `Group` view. See [this pull request](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/6292).
+
 ## [v0.18.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v0.18.0-victorialogs)
 
 Released at 2024-06-06
diff --git a/docs/VictoriaLogs/LogsQL.md b/docs/VictoriaLogs/LogsQL.md
index 2e063bb00..7ba1cc861 100644
--- a/docs/VictoriaLogs/LogsQL.md
+++ b/docs/VictoriaLogs/LogsQL.md
@@ -1608,6 +1608,12 @@ if the number of log messages with the `error` [word](#word) for them over the l
 _time:1h error | stats by (host) count() logs_count | filter logs_count:> 1_000
 ```
 
+It is allowed to use `where` prefix instead of `filter` prefix for convenience. For example, the following query is equivalent to the previous one:
+
+```logsql
+_time:1h error | stats by (host) count() logs_count | where logs_count:> 1_000
+```
+
 It is allowed to omit `filter` prefix if the used filters do not clash with [pipe names](#pipes).
 So the following query is equivalent to the previous one:
 
@@ -1736,6 +1742,8 @@ Where `exprX` is one of the supported math expressions mentioned below, while `r
 The `as` keyword is optional. The result name can be omitted. In this case the result is stored to a field with the name equal to string represenation
 of the corresponding math expression.
 
+`exprX` may reference `resultNameY` calculated before the given `exprX`.
+
 For example, the following query divides `duration_msecs` field value by 1000, then rounds it to integer and stores the result in the `duration_secs` field:
 
 ```logsql
diff --git a/docs/operator/CHANGELOG.md b/docs/operator/CHANGELOG.md
index b8b554b63..b02a5a125 100644
--- a/docs/operator/CHANGELOG.md
+++ b/docs/operator/CHANGELOG.md
@@ -16,12 +16,18 @@ aliases:
 
 ## Next release
 
+<a name="v0.45.0"></a>
+
+## [v0.45.0](https://github.com/VictoriaMetrics/operator/releases/tag/v0.45.0) - 10 Jun 2024
+
+- [operator](#./README.md): expose only command-line flags related to the operator. Remove all transitive dependency flags. See this [issue](https://github.com/VictoriaMetrics/operator/issues/963) for details.
 - [vmalertmanager](./api.md#vmalertmanager): ignores content of `cr.spec.configSecret` if it's name clashes with secret used by operator for storing alertmanager config. See this [issue](https://github.com/VictoriaMetrics/operator/issues/954) for details.
 - [operator](./README.md): remove finalizer for child objects with non-empty `DeletetionTimestamp`.  See this [issue](https://github.com/VictoriaMetrics/operator/issues/953) for details.
 - [operator](./README.md): skip storageClass check if there is no PVC size change. See this [issue](https://github.com/VictoriaMetrics/operator/issues/957) for details.
 - [vmauth](./api.md#vmauth): fix url when default http port is changed in targetRef. See this [issue](https://github.com/VictoriaMetrics/operator/issues/960) for details.
 - [vmauth](./api.html#vmauth): fix deployment when custom reloader is used. See [this pull request](https://github.com/VictoriaMetrics/operator/pull/964).
 - [prometheus-converter](./README.md): removed dependence on getting the list of API resources for all API groups in the cluster (including those that are not used by the operator). Now API resources are requested only for the required groups (monitoring.coreos.com/*).
+- [alertmanagerconfig-converter](./README.md): fix alertmanagerconfig converting with receiver `opsgenie_configs`. See [this issue](https://github.com/VictoriaMetrics/operator/issues/968).
 
 ## [v0.44.0](https://github.com/VictoriaMetrics/operator/releases/tag/v0.44.0) - 9 May 2024
 
diff --git a/docs/operator/api.md b/docs/operator/api.md
index 74e43b91c..f47c5c9d4 100644
--- a/docs/operator/api.md
+++ b/docs/operator/api.md
@@ -401,7 +401,7 @@ OpsGenieConfig configures notifications via OpsGenie. See https://prometheus.io/
 | tags | Comma separated list of tags attached to the notifications. | string | false |
 | note | Additional alert note. | string | false |
 | priority | Priority level of alert. Possible values are P1, P2, P3, P4, and P5. | string | false |
-| details | A set of arbitrary key/value pairs that provide further detail about the incident. | map[string]string | false |
+| details | A set of arbitrary key/value pairs that provide further detail about the incident. | ReceiverConfigDetails | false |
 | responders | List of responders responsible for notifications. | [][OpsGenieConfigResponder](#opsgenieconfigresponder) | false |
 | entity | Optional field that can be used to specify which domain alert is related to. | string | false |
 | actions | Comma separated list of actions that will be available for the alert. | string | false |
@@ -442,7 +442,7 @@ PagerDutyConfig configures notifications via PagerDuty. See https://prometheus.i
 | class | The class/type of the event. | string | false |
 | group | A cluster or grouping of sources. | string | false |
 | component | The part or component of the affected system that is broken. | string | false |
-| details | Arbitrary key/value pairs that provide further detail about the incident. | PagerDutyDetails | false |
+| details | Arbitrary key/value pairs that provide further detail about the incident. | ReceiverConfigDetails | false |
 | http_config | HTTP client configuration. | *[HTTPConfig](#httpconfig) | false |
 
 [Back to TOC](#table-of-contents)
diff --git a/docs/operator/vars.md b/docs/operator/vars.md
index 205fdf192..93204a4b9 100644
--- a/docs/operator/vars.md
+++ b/docs/operator/vars.md
@@ -10,7 +10,7 @@ menu:
 
 <!-- this doc autogenerated - don't edit it manually -->
 # Auto Generated vars for package config 
- updated at Wed Jun  5 06:58:55 UTC 2024 
+ updated at Mon Jun 10 12:28:11 UTC 2024 
 
 
 | varible name | variable default value | variable required | variable description |
diff --git a/lib/bytesutil/internstring.go b/lib/bytesutil/internstring.go
index e62445ec3..9c19c7840 100644
--- a/lib/bytesutil/internstring.go
+++ b/lib/bytesutil/internstring.go
@@ -19,66 +19,136 @@ var (
 		"See https://en.wikipedia.org/wiki/String_interning . See also -internStringMaxLen and -internStringDisableCache")
 )
 
-func isSkipCache(s string) bool {
-	return *disableCache || len(s) > *internStringMaxLen
+type internStringMap struct {
+	mu           sync.Mutex
+	mutable      map[string]string
+	mutableReads uint64
+
+	readonly atomic.Pointer[map[string]internStringMapEntry]
+
+	nextCleanupTime atomic.Uint64
 }
 
-// InternBytes interns b as a string
-func InternBytes(b []byte) string {
-	s := ToUnsafeString(b)
-	return InternString(s)
+type internStringMapEntry struct {
+	deadline uint64
+	s        string
 }
 
-// InternString returns interned s.
-//
-// This may be needed for reducing the amounts of allocated memory.
-func InternString(s string) string {
-	if isSkipCache(s) {
-		// Make a new copy for s in order to remove references from possible bigger string s refers to.
-		// This also protects from cases when s points to unsafe string - see https://github.com/VictoriaMetrics/VictoriaMetrics/issues/3227
+func newInternStringMap() *internStringMap {
+	ism := &internStringMap{
+		mutable: make(map[string]string),
+	}
+	readonly := make(map[string]internStringMapEntry)
+	ism.readonly.Store(&readonly)
+	ism.nextCleanupTime.Store(fasttime.UnixTimestamp() + 61)
+	return ism
+}
+
+func (m *internStringMap) getReadonly() map[string]internStringMapEntry {
+	return *m.readonly.Load()
+}
+
+func (m *internStringMap) intern(s string) string {
+	if *disableCache || len(s) > *internStringMaxLen {
 		return strings.Clone(s)
 	}
+	currentTime := fasttime.UnixTimestamp()
+	if currentTime >= m.nextCleanupTime.Load() {
+		m.nextCleanupTime.Store(currentTime + 61)
+		m.cleanup()
+	}
 
-	ct := fasttime.UnixTimestamp()
-	if v, ok := internStringsMap.Load(s); ok {
-		e := v.(*ismEntry)
-		if e.lastAccessTime.Load()+10 < ct {
-			// Reduce the frequency of e.lastAccessTime update to once per 10 seconds
-			// in order to improve the fast path speed on systems with many CPU cores.
-			e.lastAccessTime.Store(ct)
-		}
+	readonly := m.getReadonly()
+	e, ok := readonly[s]
+	if ok {
+		// Fast path - the string has been found in readonly map
 		return e.s
 	}
-	// Make a new copy for s in order to remove references from possible bigger string s refers to.
-	sCopy := strings.Clone(s)
-	e := &ismEntry{
-		s: sCopy,
+
+	// Slower path - search for the string in mutable map
+	m.mu.Lock()
+	sInterned, ok := m.mutable[s]
+	if !ok {
+		// Verify whether the s has been already registered by concurrent goroutines in m.readonly
+		readonly = m.getReadonly()
+		e, ok = readonly[s]
+		if !ok {
+			// Slowest path - register the string in mutable map.
+			// Make a new copy for s in order to remove references from possible bigger string s refers to.
+			sInterned = strings.Clone(s)
+			m.mutable[sInterned] = sInterned
+		} else {
+			sInterned = e.s
+		}
 	}
-	e.lastAccessTime.Store(ct)
-	internStringsMap.Store(sCopy, e)
-
-	if needCleanup(&internStringsMapLastCleanupTime, ct) {
-		// Perform a global cleanup for internStringsMap by removing items, which weren't accessed during the last 5 minutes.
-		m := &internStringsMap
-		deadline := ct - uint64(cacheExpireDuration.Seconds())
-		m.Range(func(k, v interface{}) bool {
-			e := v.(*ismEntry)
-			if e.lastAccessTime.Load() < deadline {
-				m.Delete(k)
-			}
-			return true
-		})
+	m.mutableReads++
+	if m.mutableReads > uint64(len(readonly)) {
+		m.migrateMutableToReadonlyLocked()
+		m.mutableReads = 0
 	}
+	m.mu.Unlock()
 
-	return sCopy
+	return sInterned
 }
 
-type ismEntry struct {
-	lastAccessTime atomic.Uint64
-	s              string
+func (m *internStringMap) migrateMutableToReadonlyLocked() {
+	readonly := m.getReadonly()
+	readonlyCopy := make(map[string]internStringMapEntry, len(readonly)+len(m.mutable))
+	for k, e := range readonly {
+		readonlyCopy[k] = e
+	}
+	deadline := fasttime.UnixTimestamp() + uint64(cacheExpireDuration.Seconds()+0.5)
+	for k, s := range m.mutable {
+		readonlyCopy[k] = internStringMapEntry{
+			s:        s,
+			deadline: deadline,
+		}
+	}
+	m.mutable = make(map[string]string)
+	m.readonly.Store(&readonlyCopy)
 }
 
-var (
-	internStringsMap                sync.Map
-	internStringsMapLastCleanupTime atomic.Uint64
-)
+func (m *internStringMap) cleanup() {
+	m.mu.Lock()
+	defer m.mu.Unlock()
+
+	readonly := m.getReadonly()
+	currentTime := fasttime.UnixTimestamp()
+	needCleanup := false
+	for _, e := range readonly {
+		if e.deadline <= currentTime {
+			needCleanup = true
+			break
+		}
+	}
+	if !needCleanup {
+		return
+	}
+
+	readonlyCopy := make(map[string]internStringMapEntry, len(readonly))
+	for k, e := range readonly {
+		if e.deadline > currentTime {
+			readonlyCopy[k] = e
+		}
+	}
+	m.readonly.Store(&readonlyCopy)
+}
+
+func isSkipCache(s string) bool {
+	return *disableCache || len(s) > *internStringMaxLen
+}
+
+// InternBytes interns b as a string
+func InternBytes(b []byte) string {
+	s := ToUnsafeString(b)
+	return InternString(s)
+}
+
+// InternString returns interned s.
+//
+// This may be needed for reducing the amounts of allocated memory.
+func InternString(s string) string {
+	return ism.intern(s)
+}
+
+var ism = newInternStringMap()
diff --git a/lib/logstorage/bitmap.go b/lib/logstorage/bitmap.go
index ac1c10695..350ea0cc8 100644
--- a/lib/logstorage/bitmap.go
+++ b/lib/logstorage/bitmap.go
@@ -98,13 +98,6 @@ func (bm *bitmap) areAllBitsSet() bool {
 	return true
 }
 
-func (bm *bitmap) isSetBit(i int) bool {
-	wordIdx := uint(i) / 64
-	wordOffset := uint(i) % 64
-	word := bm.a[wordIdx]
-	return (word & (1 << wordOffset)) != 0
-}
-
 func (bm *bitmap) andNot(x *bitmap) {
 	if bm.bitsLen != x.bitsLen {
 		logger.Panicf("BUG: cannot merge bitmaps with distinct lengths; %d vs %d", bm.bitsLen, x.bitsLen)
@@ -127,6 +120,13 @@ func (bm *bitmap) or(x *bitmap) {
 	}
 }
 
+func (bm *bitmap) isSetBit(i int) bool {
+	wordIdx := uint(i) / 64
+	wordOffset := uint(i) % 64
+	word := bm.a[wordIdx]
+	return (word & (1 << wordOffset)) != 0
+}
+
 // forEachSetBit calls f for each set bit and clears that bit if f returns false
 func (bm *bitmap) forEachSetBit(f func(idx int) bool) {
 	a := bm.a
@@ -143,7 +143,7 @@ func (bm *bitmap) forEachSetBit(f func(idx int) bool) {
 			}
 			idx := i*64 + j
 			if idx >= bitsLen {
-				break
+				return
 			}
 			if !f(idx) {
 				wordNew &= ^mask
@@ -178,7 +178,7 @@ func (bm *bitmap) forEachSetBitReadonly(f func(idx int)) {
 			}
 			idx := i*64 + j
 			if idx >= bitsLen {
-				break
+				return
 			}
 			f(idx)
 		}
diff --git a/lib/logstorage/bloomfilter.go b/lib/logstorage/bloomfilter.go
index 9c0a5dd6a..f1ef86918 100644
--- a/lib/logstorage/bloomfilter.go
+++ b/lib/logstorage/bloomfilter.go
@@ -32,11 +32,8 @@ type bloomFilter struct {
 }
 
 func (bf *bloomFilter) reset() {
-	bits := bf.bits
-	for i := range bits {
-		bits[i] = 0
-	}
-	bf.bits = bits[:0]
+	clear(bf.bits)
+	bf.bits = bf.bits[:0]
 }
 
 // marshal appends marshaled bf to dst and returns the result.
diff --git a/lib/logstorage/parser.go b/lib/logstorage/parser.go
index 7e56385bb..d3122f5d8 100644
--- a/lib/logstorage/parser.go
+++ b/lib/logstorage/parser.go
@@ -671,7 +671,7 @@ func parseGenericFilter(lex *lexer, fieldName string) (filter, error) {
 }
 
 func getCompoundPhrase(lex *lexer, allowColon bool) (string, error) {
-	stopTokens := []string{"*", ",", "(", ")", "[", "]", "|", ""}
+	stopTokens := []string{"*", ",", "(", ")", "[", "]", "|", "!", ""}
 	if lex.isKeyword(stopTokens...) {
 		return "", fmt.Errorf("compound phrase cannot start with '%s'", lex.token)
 	}
@@ -688,7 +688,7 @@ func getCompoundPhrase(lex *lexer, allowColon bool) (string, error) {
 
 func getCompoundSuffix(lex *lexer, allowColon bool) string {
 	s := ""
-	stopTokens := []string{"*", ",", "(", ")", "[", "]", "|", ""}
+	stopTokens := []string{"*", ",", "(", ")", "[", "]", "|", "!", ""}
 	if !allowColon {
 		stopTokens = append(stopTokens, ":")
 	}
@@ -700,7 +700,7 @@ func getCompoundSuffix(lex *lexer, allowColon bool) string {
 }
 
 func getCompoundToken(lex *lexer) (string, error) {
-	stopTokens := []string{",", "(", ")", "[", "]", "|", ""}
+	stopTokens := []string{",", "(", ")", "[", "]", "|", "!", ""}
 	if lex.isKeyword(stopTokens...) {
 		return "", fmt.Errorf("compound token cannot start with '%s'", lex.token)
 	}
diff --git a/lib/logstorage/pipe.go b/lib/logstorage/pipe.go
index 27aa21d1d..abc9cd80c 100644
--- a/lib/logstorage/pipe.go
+++ b/lib/logstorage/pipe.go
@@ -142,7 +142,7 @@ func parsePipe(lex *lexer) (pipe, error) {
 			return nil, fmt.Errorf("cannot parse 'fields' pipe: %w", err)
 		}
 		return pf, nil
-	case lex.isKeyword("filter"):
+	case lex.isKeyword("filter", "where"):
 		pf, err := parsePipeFilter(lex, true)
 		if err != nil {
 			return nil, fmt.Errorf("cannot parse 'filter' pipe: %w", err)
diff --git a/lib/logstorage/pipe_filter.go b/lib/logstorage/pipe_filter.go
index c1f418f60..c88c6b407 100644
--- a/lib/logstorage/pipe_filter.go
+++ b/lib/logstorage/pipe_filter.go
@@ -110,8 +110,8 @@ func (pfp *pipeFilterProcessor) flush() error {
 
 func parsePipeFilter(lex *lexer, needFilterKeyword bool) (*pipeFilter, error) {
 	if needFilterKeyword {
-		if !lex.isKeyword("filter") {
-			return nil, fmt.Errorf("expecting 'filter'; got %q", lex.token)
+		if !lex.isKeyword("filter", "where") {
+			return nil, fmt.Errorf("expecting 'filter' or 'where'; got %q", lex.token)
 		}
 		lex.nextToken()
 	}
diff --git a/lib/logstorage/pipe_math.go b/lib/logstorage/pipe_math.go
index b0f165b22..350c578ea 100644
--- a/lib/logstorage/pipe_math.go
+++ b/lib/logstorage/pipe_math.go
@@ -703,7 +703,7 @@ func parseMathExprFieldName(lex *lexer) (*mathExpr, error) {
 }
 
 func getCompoundMathToken(lex *lexer) (string, error) {
-	stopTokens := []string{"=", "+", "-", "*", "/", "%", "^", ",", ")", "|", ""}
+	stopTokens := []string{"=", "+", "-", "*", "/", "%", "^", ",", ")", "|", "!", ""}
 	if lex.isKeyword(stopTokens...) {
 		return "", fmt.Errorf("compound token cannot start with '%s'", lex.token)
 	}
diff --git a/lib/logstorage/syslog_parser.go b/lib/logstorage/syslog_parser.go
index 5e4f67fa7..51e5f5ccd 100644
--- a/lib/logstorage/syslog_parser.go
+++ b/lib/logstorage/syslog_parser.go
@@ -239,17 +239,19 @@ func (p *syslogParser) parseRFC5424SDLine(s string) (string, bool) {
 func (p *syslogParser) parseRFC3164(s string) {
 	// See https://datatracker.ietf.org/doc/html/rfc3164
 
+	p.addField("format", "rfc3164")
+
 	// Parse timestamp
 	n := len(time.Stamp)
 	if len(s) < n {
+		p.addField("message", s)
 		return
 	}
 
-	p.addField("format", "rfc3164")
-
 	t, err := time.Parse(time.Stamp, s[:n])
 	if err != nil {
 		// TODO: fall back to parsing ISO8601 timestamp?
+		p.addField("message", s)
 		return
 	}
 	s = s[n:]
@@ -267,6 +269,9 @@ func (p *syslogParser) parseRFC3164(s string) {
 
 	if len(s) == 0 || s[0] != ' ' {
 		// Missing space after the time field
+		if len(s) > 0 {
+			p.addField("message", s)
+		}
 		return
 	}
 	s = s[1:]
diff --git a/lib/protoparser/opentelemetry/firehose/http.go b/lib/protoparser/opentelemetry/firehose/http.go
index a222e7279..d17b14a0d 100644
--- a/lib/protoparser/opentelemetry/firehose/http.go
+++ b/lib/protoparser/opentelemetry/firehose/http.go
@@ -2,6 +2,7 @@ package firehose
 
 import (
 	"fmt"
+	"html"
 	"net/http"
 	"time"
 )
@@ -12,11 +13,12 @@ import (
 func WriteSuccessResponse(w http.ResponseWriter, r *http.Request) {
 	requestID := r.Header.Get("X-Amz-Firehose-Request-Id")
 	if requestID == "" {
-		// This isn't a AWS firehose request - just return an empty response in this case.
+		// This isn't an AWS firehose request - just return an empty response in this case.
 		w.WriteHeader(http.StatusOK)
 		return
 	}
 
+	requestID = html.EscapeString(requestID)
 	body := fmt.Sprintf(`{"requestId":%q,"timestamp":%d}`, requestID, time.Now().UnixMilli())
 
 	h := w.Header()
diff --git a/lib/streamaggr/dedup.go b/lib/streamaggr/dedup.go
index 399e9a3dc..d04980dba 100644
--- a/lib/streamaggr/dedup.go
+++ b/lib/streamaggr/dedup.go
@@ -2,10 +2,13 @@ package streamaggr
 
 import (
 	"sync"
+	"sync/atomic"
 	"unsafe"
 
-	"github.com/VictoriaMetrics/VictoriaMetrics/lib/bytesutil"
 	"github.com/cespare/xxhash/v2"
+
+	"github.com/VictoriaMetrics/VictoriaMetrics/lib/bytesutil"
+	"github.com/VictoriaMetrics/VictoriaMetrics/lib/slicesutil"
 )
 
 const dedupAggrShardsCount = 128
@@ -24,7 +27,12 @@ type dedupAggrShard struct {
 
 type dedupAggrShardNopad struct {
 	mu sync.Mutex
-	m  map[string]dedupAggrSample
+	m  map[string]*dedupAggrSample
+
+	samplesBuf []dedupAggrSample
+
+	sizeBytes  atomic.Uint64
+	itemsCount atomic.Uint64
 }
 
 type dedupAggrSample struct {
@@ -42,7 +50,7 @@ func newDedupAggr() *dedupAggr {
 func (da *dedupAggr) sizeBytes() uint64 {
 	n := uint64(unsafe.Sizeof(*da))
 	for i := range da.shards {
-		n += da.shards[i].sizeBytes()
+		n += da.shards[i].sizeBytes.Load()
 	}
 	return n
 }
@@ -50,28 +58,11 @@ func (da *dedupAggr) sizeBytes() uint64 {
 func (da *dedupAggr) itemsCount() uint64 {
 	n := uint64(0)
 	for i := range da.shards {
-		n += da.shards[i].itemsCount()
+		n += da.shards[i].itemsCount.Load()
 	}
 	return n
 }
 
-func (das *dedupAggrShard) sizeBytes() uint64 {
-	das.mu.Lock()
-	n := uint64(unsafe.Sizeof(*das))
-	for k, s := range das.m {
-		n += uint64(len(k)) + uint64(unsafe.Sizeof(k)+unsafe.Sizeof(s))
-	}
-	das.mu.Unlock()
-	return n
-}
-
-func (das *dedupAggrShard) itemsCount() uint64 {
-	das.mu.Lock()
-	n := uint64(len(das.m))
-	das.mu.Unlock()
-	return n
-}
-
 func (da *dedupAggr) pushSamples(samples []pushSample) {
 	pss := getPerShardSamples()
 	shards := pss.shards
@@ -113,7 +104,7 @@ func (ctx *dedupFlushCtx) reset() {
 	ctx.samples = ctx.samples[:0]
 }
 
-func (da *dedupAggr) flush(f func(samples []pushSample), resetState bool) {
+func (da *dedupAggr) flush(f func(samples []pushSample)) {
 	var wg sync.WaitGroup
 	for i := range da.shards {
 		flushConcurrencyCh <- struct{}{}
@@ -125,7 +116,7 @@ func (da *dedupAggr) flush(f func(samples []pushSample), resetState bool) {
 			}()
 
 			ctx := getDedupFlushCtx()
-			shard.flush(ctx, f, resetState)
+			shard.flush(ctx, f)
 			putDedupFlushCtx(ctx)
 		}(&da.shards[i])
 	}
@@ -169,36 +160,43 @@ func (das *dedupAggrShard) pushSamples(samples []pushSample) {
 
 	m := das.m
 	if m == nil {
-		m = make(map[string]dedupAggrSample, len(samples))
+		m = make(map[string]*dedupAggrSample, len(samples))
 		das.m = m
 	}
+	samplesBuf := das.samplesBuf
 	for _, sample := range samples {
 		s, ok := m[sample.key]
 		if !ok {
+			samplesBuf = slicesutil.SetLength(samplesBuf, len(samplesBuf)+1)
+			s = &samplesBuf[len(samplesBuf)-1]
+			s.value = sample.value
+			s.timestamp = sample.timestamp
+
 			key := bytesutil.InternString(sample.key)
-			m[key] = dedupAggrSample{
-				value:     sample.value,
-				timestamp: sample.timestamp,
-			}
+			m[key] = s
+
+			das.itemsCount.Add(1)
+			das.sizeBytes.Add(uint64(len(key)) + uint64(unsafe.Sizeof(key)+unsafe.Sizeof(s)+unsafe.Sizeof(*s)))
 			continue
 		}
 		// Update the existing value according to logic described at https://docs.victoriametrics.com/#deduplication
 		if sample.timestamp > s.timestamp || (sample.timestamp == s.timestamp && sample.value > s.value) {
-			key := bytesutil.InternString(sample.key)
-			m[key] = dedupAggrSample{
-				value:     sample.value,
-				timestamp: sample.timestamp,
-			}
+			s.value = sample.value
+			s.timestamp = sample.timestamp
 		}
 	}
+	das.samplesBuf = samplesBuf
 }
 
-func (das *dedupAggrShard) flush(ctx *dedupFlushCtx, f func(samples []pushSample), resetState bool) {
+func (das *dedupAggrShard) flush(ctx *dedupFlushCtx, f func(samples []pushSample)) {
 	das.mu.Lock()
 
 	m := das.m
-	if resetState && len(m) > 0 {
-		das.m = make(map[string]dedupAggrSample, len(m))
+	if len(m) > 0 {
+		das.m = make(map[string]*dedupAggrSample, len(m))
+		das.sizeBytes.Store(0)
+		das.itemsCount.Store(0)
+		das.samplesBuf = das.samplesBuf[:0]
 	}
 
 	das.mu.Unlock()
@@ -216,7 +214,7 @@ func (das *dedupAggrShard) flush(ctx *dedupFlushCtx, f func(samples []pushSample
 		})
 
 		// Limit the number of samples per each flush in order to limit memory usage.
-		if len(dstSamples) >= 100_000 {
+		if len(dstSamples) >= 10_000 {
 			f(dstSamples)
 			clear(dstSamples)
 			dstSamples = dstSamples[:0]
diff --git a/lib/streamaggr/deduplicator.go b/lib/streamaggr/deduplicator.go
index 3ec25f5fa..0212bfd9e 100644
--- a/lib/streamaggr/deduplicator.go
+++ b/lib/streamaggr/deduplicator.go
@@ -166,7 +166,7 @@ func (d *Deduplicator) flush(pushFunc PushFunc, dedupInterval time.Duration) {
 		ctx.labels = labels
 		ctx.samples = samples
 		putDeduplicatorFlushCtx(ctx)
-	}, true)
+	})
 
 	duration := time.Since(startTime)
 	d.dedupFlushDuration.Update(duration.Seconds())
diff --git a/lib/streamaggr/streamaggr.go b/lib/streamaggr/streamaggr.go
index 92fdba57a..34ad118cf 100644
--- a/lib/streamaggr/streamaggr.go
+++ b/lib/streamaggr/streamaggr.go
@@ -747,7 +747,7 @@ func (a *aggregator) dedupFlush(dedupInterval time.Duration) {
 
 	startTime := time.Now()
 
-	a.da.flush(a.pushSamples, true)
+	a.da.flush(a.pushSamples)
 
 	d := time.Since(startTime)
 	a.dedupFlushDuration.Update(d.Seconds())


Test patch:
diff --git a/lib/logstorage/bitmap_test.go b/lib/logstorage/bitmap_test.go
index 1b5f2ba8b..41cce6974 100644
--- a/lib/logstorage/bitmap_test.go
+++ b/lib/logstorage/bitmap_test.go
@@ -6,6 +6,8 @@ import (
 
 func TestBitmap(t *testing.T) {
 	for i := 0; i < 100; i++ {
+		bitsLen := i
+
 		bm := getBitmap(i)
 		if bm.bitsLen != i {
 			t.Fatalf("unexpected bits length: %d; want %d", bm.bitsLen, i)
@@ -41,6 +43,9 @@ func TestBitmap(t *testing.T) {
 			}
 			nextIdx++
 		})
+		if nextIdx != bitsLen {
+			t.Fatalf("unexpected number of bits set; got %d; want %d", nextIdx, bitsLen)
+		}
 
 		if !bm.areAllBitsSet() {
 			t.Fatalf("all bits must be set for bitmap with %d bits", i)
@@ -71,6 +76,9 @@ func TestBitmap(t *testing.T) {
 			}
 			nextIdx += 2
 		})
+		if nextIdx < bitsLen {
+			t.Fatalf("unexpected number of bits visited; got %d; want %d", nextIdx, bitsLen)
+		}
 
 		// Clear all the bits
 		bm.forEachSetBit(func(_ int) bool {
diff --git a/lib/logstorage/bitmap_timing_test.go b/lib/logstorage/bitmap_timing_test.go
index 9f364290e..5e0a36f6a 100644
--- a/lib/logstorage/bitmap_timing_test.go
+++ b/lib/logstorage/bitmap_timing_test.go
@@ -4,6 +4,35 @@ import (
 	"testing"
 )
 
+func BenchmarkBitmapIsSetBit(b *testing.B) {
+	const bitsLen = 64 * 1024
+
+	b.Run("no-zero-bits", func(b *testing.B) {
+		bm := getBitmap(bitsLen)
+		bm.setBits()
+		benchmarkBitmapIsSetBit(b, bm)
+		putBitmap(bm)
+	})
+	b.Run("half-zero-bits", func(b *testing.B) {
+		bm := getBitmap(bitsLen)
+		bm.setBits()
+		bm.forEachSetBit(func(idx int) bool {
+			return idx%2 == 0
+		})
+		benchmarkBitmapIsSetBit(b, bm)
+		putBitmap(bm)
+	})
+	b.Run("one-set-bit", func(b *testing.B) {
+		bm := getBitmap(bitsLen)
+		bm.setBits()
+		bm.forEachSetBit(func(idx int) bool {
+			return idx == bitsLen/2
+		})
+		benchmarkBitmapIsSetBit(b, bm)
+		putBitmap(bm)
+	})
+}
+
 func BenchmarkBitmapForEachSetBitReadonly(b *testing.B) {
 	const bitsLen = 64 * 1024
 
@@ -86,19 +115,33 @@ func BenchmarkBitmapForEachSetBit(b *testing.B) {
 	})
 }
 
+func benchmarkBitmapIsSetBit(b *testing.B, bm *bitmap) {
+	bitsLen := bm.bitsLen
+	b.SetBytes(int64(bitsLen))
+	b.ReportAllocs()
+	b.RunParallel(func(pb *testing.PB) {
+		n := 0
+		for pb.Next() {
+			for i := 0; i < bitsLen; i++ {
+				if bm.isSetBit(i) {
+					n++
+				}
+			}
+		}
+		GlobalSink.Add(uint64(n))
+	})
+}
+
 func benchmarkBitmapForEachSetBitReadonly(b *testing.B, bm *bitmap) {
 	b.SetBytes(int64(bm.bitsLen))
 	b.ReportAllocs()
 	b.RunParallel(func(pb *testing.PB) {
-		bmLocal := getBitmap(bm.bitsLen)
 		n := 0
 		for pb.Next() {
-			bmLocal.copyFrom(bm)
-			bmLocal.forEachSetBitReadonly(func(_ int) {
+			bm.forEachSetBitReadonly(func(_ int) {
 				n++
 			})
 		}
-		putBitmap(bmLocal)
 		GlobalSink.Add(uint64(n))
 	})
 }
diff --git a/lib/logstorage/parser_test.go b/lib/logstorage/parser_test.go
index 9cc5e4c55..815c3ab12 100644
--- a/lib/logstorage/parser_test.go
+++ b/lib/logstorage/parser_test.go
@@ -926,8 +926,8 @@ func TestParseQuerySuccess(t *testing.T) {
 	f("foo-bar+baz*", `"foo-bar+baz"*`)
 	f("foo- bar", `foo- bar`)
 	f("foo -bar", `foo -bar`)
-	f("foo!bar", `"foo!bar"`)
-	f("foo:aa!bb:cc", `foo:"aa!bb:cc"`)
+	f("foo!bar", `foo !bar`)
+	f("foo:aa!bb:cc", `foo:aa !bb:cc`)
 	f(`foo:bar:baz`, `foo:"bar:baz"`)
 	f(`foo:(bar baz:xxx)`, `foo:bar foo:"baz:xxx"`)
 	f(`foo:(_time:abc or not z)`, `foo:"_time:abc" or !foo:z`)
diff --git a/lib/logstorage/pipe_filter_test.go b/lib/logstorage/pipe_filter_test.go
index dc244ffb0..31edbc6d9 100644
--- a/lib/logstorage/pipe_filter_test.go
+++ b/lib/logstorage/pipe_filter_test.go
@@ -75,7 +75,7 @@ func TestPipeFilter(t *testing.T) {
 	})
 
 	// multiple rows
-	f("filter x:foo y:bar", [][]Field{
+	f("where x:foo y:bar", [][]Field{
 		{
 			{"a", "f1"},
 			{"x", "foo"},
diff --git a/lib/logstorage/pipe_unpack_syslog_test.go b/lib/logstorage/pipe_unpack_syslog_test.go
index 6b7ddd948..8a670dbf7 100644
--- a/lib/logstorage/pipe_unpack_syslog_test.go
+++ b/lib/logstorage/pipe_unpack_syslog_test.go
@@ -169,6 +169,8 @@ func TestPipeUnpackSyslog(t *testing.T) {
 	}, [][]Field{
 		{
 			{"x", `foobar`},
+			{"format", "rfc3164"},
+			{"message", "foobar"},
 		},
 	})
 
diff --git a/lib/logstorage/syslog_parser_test.go b/lib/logstorage/syslog_parser_test.go
index a82154103..7935f472f 100644
--- a/lib/logstorage/syslog_parser_test.go
+++ b/lib/logstorage/syslog_parser_test.go
@@ -44,10 +44,13 @@ func TestSyslogParser(t *testing.T) {
 	// Incomplete RFC 3164
 	f("", `{}`)
 	f("Jun  3 12:08:33", `{"format":"rfc3164","timestamp":"2024-06-03T12:08:33.000Z"}`)
+	f("Foo  3 12:08:33", `{"format":"rfc3164","message":"Foo  3 12:08:33"}`)
+	f("Foo  3 12:08:33bar", `{"format":"rfc3164","message":"Foo  3 12:08:33bar"}`)
 	f("Jun  3 12:08:33 abcd", `{"format":"rfc3164","timestamp":"2024-06-03T12:08:33.000Z","hostname":"abcd"}`)
 	f("Jun  3 12:08:33 abcd sudo", `{"format":"rfc3164","timestamp":"2024-06-03T12:08:33.000Z","hostname":"abcd","app_name":"sudo"}`)
 	f("Jun  3 12:08:33 abcd sudo[123]", `{"format":"rfc3164","timestamp":"2024-06-03T12:08:33.000Z","hostname":"abcd","app_name":"sudo","proc_id":"123"}`)
 	f("Jun  3 12:08:33 abcd sudo foobar", `{"format":"rfc3164","timestamp":"2024-06-03T12:08:33.000Z","hostname":"abcd","app_name":"sudo","message":"foobar"}`)
+	f(`foo bar baz`, `{"format":"rfc3164","message":"foo bar baz"}`)
 
 	// Incomplete RFC 5424
 	f(`<165>1 2023-06-03T17:42:32.123456789Z mymachine.example.com appname 12345 ID47 [foo@123]`,
diff --git a/lib/streamaggr/dedup_test.go b/lib/streamaggr/dedup_test.go
index f0b4cc951..91ce09e13 100644
--- a/lib/streamaggr/dedup_test.go
+++ b/lib/streamaggr/dedup_test.go
@@ -23,8 +23,8 @@ func TestDedupAggrSerial(t *testing.T) {
 		da.pushSamples(samples)
 	}
 
-	if n := da.sizeBytes(); n > 4_200_000 {
-		t.Fatalf("too big dedupAggr state before flush: %d bytes; it shouldn't exceed 4_200_000 bytes", n)
+	if n := da.sizeBytes(); n > 5_000_000 {
+		t.Fatalf("too big dedupAggr state before flush: %d bytes; it shouldn't exceed 5_000_000 bytes", n)
 	}
 	if n := da.itemsCount(); n != seriesCount {
 		t.Fatalf("unexpected itemsCount; got %d; want %d", n, seriesCount)
@@ -39,7 +39,7 @@ func TestDedupAggrSerial(t *testing.T) {
 		}
 		mu.Unlock()
 	}
-	da.flush(flushSamples, true)
+	da.flush(flushSamples)
 
 	if !reflect.DeepEqual(expectedSamplesMap, flushedSamplesMap) {
 		t.Fatalf("unexpected samples;\ngot\n%v\nwant\n%v", flushedSamplesMap, expectedSamplesMap)
diff --git a/lib/streamaggr/dedup_timing_test.go b/lib/streamaggr/dedup_timing_test.go
index abb1d0451..2b6bab25c 100644
--- a/lib/streamaggr/dedup_timing_test.go
+++ b/lib/streamaggr/dedup_timing_test.go
@@ -4,7 +4,6 @@ import (
 	"fmt"
 	"sync/atomic"
 	"testing"
-	"time"
 
 	"github.com/VictoriaMetrics/VictoriaMetrics/lib/prompbmarshal"
 )
@@ -17,22 +16,8 @@ func BenchmarkDedupAggr(b *testing.B) {
 	}
 }
 
-func BenchmarkDedupAggrFlushSerial(b *testing.B) {
-	as := newTotalAggrState(time.Hour, true, true)
-	benchSamples := newBenchSamples(100_000)
-	da := newDedupAggr()
-	da.pushSamples(benchSamples)
-
-	b.ResetTimer()
-	b.ReportAllocs()
-	b.SetBytes(int64(len(benchSamples)))
-	for i := 0; i < b.N; i++ {
-		da.flush(as.pushSamples, false)
-	}
-}
-
 func benchmarkDedupAggr(b *testing.B, samplesPerPush int) {
-	const loops = 100
+	const loops = 2
 	benchSamples := newBenchSamples(samplesPerPush)
 	da := newDedupAggr()