Free Undetected BitchBot universal

Начинающий
Статус
Оффлайн
Регистрация
2 Апр 2022
Сообщения
105
Реакции[?]
18
Поинты[?]
3K
Искали open-source universal скрипт для FPS/TPS-плэйсов? Представляю вашему вниманию универсальный скрипт BBot (BitchBot).
Он имеет базовые функции, представленные в
Пожалуйста, авторизуйтесь для просмотра ссылки.
.
P.S: не работает в phantom forces, но я создам тему, где выложу рабочую его версию.
Пожалуйста, авторизуйтесь для просмотра ссылки.
P.S: должен работать на всех 6+ эксплоитах
bbot-universal:
local COLOR = 1
local COLOR1 = 2
local COLOR2 = 3
local COMBOBOX = 4
local TOGGLE = 5
local KEYBIND = 6
local DROPBOX = 7
local COLORPICKER = 8
local DOUBLE_COLORPICKERS = 9
local SLIDER = 10
local BUTTON = 11
local LIST = 12
local IMAGE = 13
local TEXTBOX = 14 -- menu type enums and shit

if not BBOT then
    BBOT = { username = "dev" }
end
local menu
assert(getgenv().v2 == nil)
getgenv().v2 = true

local MenuName = isfile("bitchbot/menuname.txt") and readfile("bitchbot/menuname.txt") or nil
local loadstart = tick()
local Nate = isfile("cole.mak")

local customChatSpam = {}
local customKillSay = {}
local e = 2.718281828459045
local placeholderImage = "iVBORw0KGgoAAAANSUhEUgAAAJYAAACWCAYAAAA8AXHiAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAJOgAACToAYJjBRwAADAPSURBVHhe7Z0HeFRV+sZDCyEJCQRICJA6k4plddddXf/KLrgurg1EXcXdZV0bVlCqDRQVAQstNKVJ0QVcAelIDz0UaSGBQChJII10Orz/9ztzJ5kk00lC2vs833NTZs69c85vvvOdc8/5rgvqVa9KUD1Y9aoU1YNVr0pRPVj1qhTVg1WvSlE9WPWqFNWDZUaFubk4sf8g9q5egw2zv8eKid/g5y9GY9HIr7FkzASsmjwVWxcsxMFNsUhPPqG9q16mqrNgpRxJwtKxEzFhQD+8fV8nPOzqiXtdXPBMx2gM/HMnjHm6B/7bsxfWvPk24t4fggOEKjFmMo5OnoKjM2ZiPy1u5iys/m425nw5FuMHD8Lc0ePx/Vdj8MOnIzC93yDsWb5KO1vdU50Ba93MOfj6tVfRw8sP0QToWdpnLk0wr4k3dvkG4Pzv7wVuuwvwaosrnn4436w1Cpq1Qp57a+TymOvmg5ymLXHOlcb35DRqjtwGHshzcaM1Rl7zNii6615cffFVXKV3w4qVSN2zGz9O+w7zYyZh8aRv8MPQYSjKy9euqHar1oKVknAEE/v2RTf3VriTEA12aYiFbq2Q7BcMhEYDQZG4FBCOwvZ65LXTI9svBFn+ocji72LZ9liHsBJjGVm+wchq2R5ZhDPL1RvZLk2Rw/MW/t+fceWjT4E9e7Bl7TosmDgF80d9ja3z/6ddbe1TrQIrKzUVY3u/hD8QpB60mU1a4GRbghQSjStB4cgPDMO5gDBkdtAjM0AsDFkClTloKsI06LJ8g5Dl3RaZDT0JmwsK/tgJ1whXXkoK5o2biAXsPncvX6l9itqhWgHWopgYPNTAHX9lo81hV5VPcBASicLA8BKQpIEFpDJmgEtnHozKMCNonr7I4vXmEvDrY8cjMy0NcyQ+o2e7dvWq9slqrmosWNevX8eInj0Rxcb5xMWVXVwQEByBAvFEbMAMwmQOJHNW5XAZTTxaW3bBjOky+TkK7+sCbNyIJf9biFlDPsHp+MPap615qnFgFZ7LwcAuD+IO8U5uLRkrRTBWki6HMLXXKaDEQ8nPcjQHkjkTuLL9bwJcRhNP1oaerJEXchp6ADETsWfHTswcNhzxGzZpn77mqMaAdfXSZfTv1Bl3Eajl7EakqytgzJROD5XBhjF0d6WtxsFlNHpP6SolHrv23hAc3r8fUwa8h1P7D2q1Uf1VI8D6rNuTuI2VvFgDSuKS9A46BZUCS0Big5QFS8wpuG5Gt2jWeE3e/ioWwyfDsW1jLL7+9wu4cvGiVjPVV9UarFXTp6kYanITbwVUXmAJUBkmVhlw3ZSYy5JJN9m8LT1YQ2DpUsybMRsz3x6g1VL1VLUE60J+Ph7z9MHzhKooKBzntS6vLFCmVrs9V4llNvZCQbsQXE5Oxif/7IWk7XFarVUvVTuwZg8dio4EKtanA71URAk0dlhdgSvbP1SNIvHG21i/ZRNGP/Mvrfaqj6oVWE/4+OFlqTDp9gQUdnvmALJmFQ6XTAlUR7ike/Rui9wmzXHt1Em81+0JZJ86rdXkzVe1ACtx53YVSy1r0RYIjUC6xFIaIObgsWWVBpfRyjbyzbR2/DzyZRw+AtPHjMfqWbO0Wr25uulgxbz4sroFk0WYCmhnBSrjUQPEHDy2zCZcclTQ8NguFBltg5DpF4hs30DktglAXusOKPBph0K/IBS2D0Eh4ZL7ioX+wSjk//Nb+COvZTvk+HDU5tMeWa06GGbU24ZUPXzivZr64PKdf8C+LZsx7C+PaLV783RTwXpJF6kCdEMspcOZDqE4y6PyWJUEl3grgUgBRHAuEaprt98DdHoYebQDd3TC6oi78EPI7YgJvxXjwm/HpPDfYcpt92Lq7f+Habf8EdPCf4u5tNW3/R8O3PNXFHR9Cuj6JC7d8wAKI+9APsE759UWma0InF9wlYEmYOe4NMaF48fRt+tDWi3fHN00sLq4NsOXjbwIVTjOBBiAEjMLl5N8Qlc6YQnizCJF7oSFAHc1xUJBGhmSDTe89dj2B/+jBGv9MaEIUOwbuFiHD9+DJe067SmQlpCYiKWz/sRcz/6DIsHD8XCp3phwe33Ialzd+DRZ3H+zvuQR7iyvH2R1YYesQogU4H9gX3o0/kBnM/LM1xsFavKwbpYUKhuxyz28sfVYEKlgWRqFQGXCvw5LM9r3R6IvgM5dz+AWcFReM27HQY+0g2zR41CekaGdlUVr8TkZPz01VisfHMQfv79A8h7/J+49Cd6RX6OrOaEjF2sOSgqxNg1qrhrzDi898TfcfrAIe2qqk5VClZ+RqZaZLeTLrswKByprIA0QnDWxGNZg8ueLjG9fSiH40G4yuP5uztjakAEerq2wEcv/geJe/dpV1L12hobi9UffoLl9/0NF3o8j6I/dMY5bz8Vm1WKF5O4y8UD6P0Gvnh7IBI2btaupGpUZWDlpp1FJKE6JF4kUEeo9IQqDKm0NAWT855LdXcEKadtgPJOcZF3oZdLE7zZ9a/YF1u1FWqPNv+yBuv7DEJ8lydxhfFZjnSVHAhUBmBZbj7Ak89iwmcjcHDdOu0KKl9VAlZ+RpaC6gg/aA7hSCVEacpK4DqjYHLcc0mXl9s2EOh4J5YFd0QXnmd037e1M1dvZV+7grWfjMKuLj1w9bHncE4A44CiogHLcm8DPNYDEz75HAmbquaLVulgXSwoUt3fIX96lEB2f5qHMoDlPFziubLp/RB2K1YFdcQfeY7pn36qnbVm6TJtw9cx2P/Xp3H5b08jq0VbQ6BvBhJnTcH1VE+MeLMfTh+s/Jir0sGSQH0HY6q8YqiMdgNw8f/XaIlRd6ITy//ixZe0s9VsFdE2fjQcpx/5B4rueQCZHq0q1HupbvHVNzHob91xIb/AcNJKUqWC1dnVTY3+Cjj6MwTqZa08XCk0w/SDebhyO4TgetRv8KZLMzyrj1ArSWubzuTmIPZfr+LS31/GOZkqac0A3wwozlhWAwb0Y8fjtc5dtLNVjioNrJd0UWqe6jKhSgkkMDTH4BKYSuASqEBvtSkgUq3N2rZsqXam2qtdi5ci+fF/c3TbBRmyEcMMKA6bcSri0EG83rmzdqaKV6WAFfPSy/g3L/56SBROM7hOITCpDsJl6BYNYGUIVAS1j0tTPBPAuKoOKTU7E5u/mojzX3ylFv2ZhcVR0+DKPxSPoZ0e1M5UsapwsI7s3I67edFXQjriZIdwnCIgKU7CJZ4rl79nBUeqJcmzPvxQO0vdkKwUHf0GR7izZiHTpZF5SG7Acl1csWvrZvzyw/faGStOFQ6WrFJIC4wgFAJVOE6qY3m40szCJVAZABP4LrCcbX4hqsyUGrxjxRkJVF+/3geYPZtQNVBexhwcN2Jyb/Ha7+/Fl+8MRt6Zs9qZK0YVClYPH18s8m6HLAJhAKoErtOEyl64Utn1XQsOw1wPX7Xy4eole+7c1R4pT/V6X3oqgcqlUqAymqyKwKiv8NajFbsiosLAmj1kqFqkdyU4il1gWDFUjsKVwt8REoYxDPy7enprpdcdXb5wAWPefEeDqnI8VSlj+bJZI3//fox67EntKm5cFQKWrFG/hRdXFBpt8FQqtipvtuBK6aAHGE+NbOiFHm38tNLrjgSqsW/102KqKoDKaO30KGjWEgsWL8Kpvfu1q7kxVQhYj3u2xLrWATgTFI4TgQTIAlhiluCSe4fXCNWYxt54oo5CNa5P/6qHSjNJZIK3B6LvI49qV3RjumGwVk6fpqYWLoZE4wS9zkmCZQuuEzRTuASs8yHhmMOYqqunl1Zy3ZFANb7vAA2qyo2pLJrWJWbu3ImpAwdrV+a8bhgs6QIzgiMIk14BI2DZA5fRc8k8Vw7B2tgmUAXqdU2Xzp9HzDsDge9ujqcyNUnjdEnXEcN7v6VdnfO6oZYc3u1JjHdtgcygCCTTWyU7CJe8VmbYJdiXKYW6NvoTqCb0G1SxUMm9xRtIzSS5IxC7Ee8+eGNLm50GS3Ip/IYwnNdFI4mxVTIBEq9lDi5LwbzYeXahUk5KfIJWct3QpaLzmNj/XQ2qiun+strqkK+PVGvtzf3fXstzaYIfZs5E5nHn86s6DdaAP3XBvOZ+SGU3eJxgHXMQLvFS1wjVc6zUOUOGaqXWDV0qKsKkge9VMFShuKKLwjx3d1zrPRhZ7j5mX2ePZbFdMXos3u3WQ7tix+UUWJJKSOKhi/poHGN8JGCVhyvMIlwSX2UHRmC2py96BYdppdYNXSRUkwd9QKi+Q7pLQ2SyXm50aYxAdTk0Ej81aYwzPMeUzg8Df+luWPZs5vU2jaDnsn1/otc6te+A4cIdlFNgDeryIH4k1adNoCoPl07FXSrOKgPXaYKVGhChttLXJSmoBn9YDFUW66PUhlhzjWzDjFAtJFRJ53LVec5dvYLlv+uMQtazs8lN5IY3Rn6B97o/pcp0VA63rKx/+i2BKNJH4WiQHkkc2TkGl6ELfJhlxK1crpVa+3WxsBBT3hsCzCwNVbnd1mYa2ZIZoVpkApVRP8+chdwnnkeWLBY08157LNelEeZMmODUfUSHwRrZ81lMd2uF08HhBCtM2bEO9sOVzhHkfO+2eCnyVq3E2i/Z8vbtBx9pUDUoB1UJXGxQO+Eqhsq1CY5ll4bKqNH3Pgh0edTpZc5ZHr7AnO/xIUf/jsphsG6lp8nRRSKJnieJUIk5AldRSFSd6gIVVB9+TKhmmvVUZU3BZSOroBGqxVagEqXl5mDNXZ2RK6NEZ7pEvqeQg4CR/R3PxeVQCy+OicEQl6ZI0xm8VSm4+LMluE4QrmTCdS44Ep+4eGBi79e0Emu3LhQUYOqQYcAM+6AymjXPZS9URo3u9SLQvZdhe5mZ8mxaE28UzP8Rk/oP1Eq0Tw6B9UiDZtjbLgRJHMkl0AQmI1iW4BKw5CgjwTTGZLKsuC5IQTX0UwXVWX7mDDMAWTKVUdAMXAaoIvCznVAZNS3styhkec4E8tKN4tEe+OCZ57TS7JPdrZyVkoaurKD8sCgkEpAjjsDFv2XzW/aeiyvmjRiplVh7daEgH9M+/oxQzVBQGbPaSEIScyCZs7JwGT3Vz00dg0o0acBgXO/+L+e8lpp6aIBFY8Ygec9erUTbshusca+8jG+btsSJkHAkEigByxpcSSZwJdPSGLTfXge8lSwhmjZsuAZVg5JUSZo5A1expxKoyoz+7NWEkNtRRFCc8lrNJYj/L4Y4EMTb3dLyZCyBJpHQCFimcMnPpnAVx18aXOnBERjZwBPTBg7SSqudupCXjxmffF7OU5U1h+Bqp8clDpaWNnUtN6XgiL5+mXHto885NWkqOb8uRd6Oob1f10qzLbvASkk8giekovSRiA/WI8FBuAr10bV+JKig+nSEguoMP2s6P7+lpG9i9sAlUF1knS9lTJV07sbSEclDVKbrbke+jxP3Edkd5nHQtmz0GBzetMVQoA3Z1dqT+/bFRNcWOM5uMJ4AiR22E65TtPkebTC0W3ettNqn84Rq5vBRbDkDVBmsA2OyEmfhUp6KUC1TUDnvqUw14qlngD8/4lQKJdUdzpyNYc+yDDtkF1g93H2wq12wAuewZvbAdTRQj3y6cXkS19EdO7XSapcksdmsz7/QoGpQDFVx0hIn4DJ6qoqESrR17Trs/v1fkOPd1iw81kxGh9cf7oYPuz2tlWZddoH1e4KRHR6NeI4GjWDZgku6wWPiuVixEp/VRp3PzcXskV8SqumlPFVZcwQuI1TLZUqhAqEyaljYbbgUEq0W9ZkDyKKxOyxwaYwxQ4bCnqQGNlt8/cw56Mdv4qnQcBwgKAomE7MGVwoD98nsQie8XvsmRIsI1ZxRX9uEymj2wGWEakUlQSX67PkXgAefcOo2T25THxwaOx4Lh9ND25BNsMa+/iq+a+aDI4yvDhGWg7RycBG4snDJXFcOK0mC/tO1bBGfgurL0cA0+6AymjW4MuhBLjBsWFnB3V9ZHdq7F6uj70a+E3Naklce4ybig7/bjrNsgvV3Lz9s9w9S3aCAZQ2uBLpyU7hSg8Pxu1rWDRbl5KoHihugKh9T2TLJ61UWrgx/HS6ERmClmlKo/GS0HwRG4CLP6+iclpqFf+QJvP+Q7YGYzVaXSc2MsCjsD9bhoANwJYeE4X9evhjWw/lViNVNhYTqh9HjcN3O7s+SmXquYqjcbmyeyhEN7c4A/L6HDKnCy8Bjy867NMPQ99/VSrIsq2ClHknCM6zAFH049hOq/UF2wEVLIGApjMk+dHHFknExWmk1W0XncvDDmPG4PnUa0lgnZ/kZnc0/L6ZyqWpQrXJrWmVQib4bNQrJv++CnDYBZuGxaBLAN/bCj/3fxZEd1h8OZRWsZWPZnxKO46Fh9Fh6HKDZBRf/f47xwkNsgMK8fK20mitZij1v3ARcmzpVQSWTnypdpUDiJFzp7IbO6yOwmlAdq4Luz1SZWVmYwZFhoROTpTnubZA4YhTmvm89849VsCYN6Idv3FqoLu4Au0IBy1640kIiVJrImq7Cc+cwf/xEBVUqP88ZAUozZ+ESqIp0EfhFQVV1nspU/RgvXeZ1OBxnebXF9bEx+PiVl7WSzMtqy/e//09Y3ao9QQrDrwTJXrgkcN/YpgNeruGrRAWqBTGTCdW3CioByZhd0Fm4jFCtaVb1nspUA267G7jjXnUf0BxAliyTo0kMfA/97/2zVpJ5WQWru0crNW3wK4PUvTRTuFTXaAYuASuJgfssdx/E9HlTK6nmqYBQ/ThxSjmojGDJ0VG4iqFSMdXNg0o09LXeuPbHvzh8e0dyauGBv2HAX6zneLAK1n3i+jki3MuK+5Vey164ToaE4zMXd/z4+QitpJqlguxs/DjpG1xloH7apQHBKUmwawqXI57L1FPdbKhE0z4ahvhb7kGugyND6TovE8Z+ct/RiqyC9TjBSmZl7JGuUEFlHi7TbvEgX3Oa73mN7927eq1WUs1RQRahmjwVV7/9llA1RFpgOCR15dmAELNwydEWXNUNKtHWZSuwJCAKBfRA5gCyaBwZnqfT+Ki/9Yc0WATr/IWLKpFaEofDewiMNbhMYy7xWGf0UWrGPTtNtk/WHAlUP30zjVB9Q6gk5WVJot1UJ+EyQrW2GkElSjt9GhP8g1Hk6K0dglXUyAuj+/VFfmaWVlp5WQTr9NFjeJeVG894aa+ARdtrAtceHmVuyxxcGQRLEvvXJEn399O303BFeaoGhMqYbLcELoPnKkkRbgsuI1TrbnKgbknvt/LHZYKVZQ4gS8YvTKGrD777z0s4ttfyUmWLrX9o6w58zgo+EKLHbkJjDi7xXKZwGbvFrLDoGrUMWXmqqTPoqaaW6v7S6KGchqu9DoUClTuhyq5+UIle8vDBVXaFDoFFK2jmg4WvvI49K1ZrJZWXxdbfvmQ5xjVyxT7CtJvgWILL4LlMvBZfm8oKrSn3CAuysrBo6kx6KlOoDKkrDUCVThFuD1wCVYE+Auurqacy6p8uzQAntuHnN2uFVa+/jQ1zftBKKi+Lrb9hwU/4poEb9mkea5cDcB0LDcP9NQCsAsYIi2Z8h8vs/k4SqlTZ9MEYogQsJ+BqF6Kg2lDNoRL1dGkOhEQ5DpZbK2wY8C5WMR61JIutv2bWD5jRxAO7Q8KLoZLjHitwydSDgJXIuOyBag6WBJ6S3+DyN9/iBLt8WYmhcqEKNBbhkq7RFC6BqQQuBZUuHBuk+6vmUImeaegF6G91GKw8grXpvSFYNmaCVlJ5WQHre8xo7IE9IRHYSYiM3aFNuBj0Ho8yPDewukqgWvrdbFwkVMfpqVIYE0nKyuJEuwKNnXAZn/ljhGpjDYFK9KSLJxB2G8FybDWpeKyNAz/A8rFOgLVh/k+Y3tgduwlMHL/NdsMllf6bO6vtcmQF1ey5CqpjhOpUYAQkKW8K4XAWrjQ2TH4Ng0rUzcUVCI12IsZqjV/6DMDqb6ZrJZWXxdbfyuD9mwZNCRGhYiXaC9de6RLuuEutk69ukmdSL5vzPS5O+YZQNVJQFWcYJCCOwWWIuVLbsWvQRSLW3Y1Q3Zwbys7qEWmj4EiHwSrwaIOfe72ITd/P00oqL4utf2DrdsQ0bIRdDGh3EJod7C5swiVg8bUnWemdGzTRSqoeEqhWzP0vLpmBqjRcutJwlQNLTHveT7tg5IVGYJN7sxoHlehRAYtfDjXd4ABchR6tMbvHs9i3xvKdFYtgnTyShFE88W4G4jsIzY4gPXYSmhK4Qi16rhOMN3q0aKmVdPOloOK367yCytD9lYXKAJYc7YMrld1fXmg4Yj1qJlSif3DQgg56w1Z+gcYeuPj6IrfWGNfzaZzcf1ArqbwsglV44QKGCFi6MGwnOObhKu+5dtOOtg3C64GByDh5Sivt5imPUK3873xcIFRJhOpkkPYAqQ6loTIHV+knZ5hCxe6Pnkq6v+M1FKqM1DT0dWmMqxpY9sIlr7nMGGvI44+i0MpntwiW6C2CtZfxw9ZQvRW4TD0XPRYt3rcDht9xO3YvXamVdHOUl5GBVfN+pKeagqPs/hRUgZIITgPIFlz0WmWf+SNQ5YYypqKnqqlQiXat/AXDmzRXmyoUVHbCJf+/5t4aL3ax/nRWq2C9QLAO6gWscItwxSm4TD1XGPb7B+L7e/+MuUM/1kqqeuWlZ2D1gv8VQ3UiRI9kgUagchKu06xUgWpzDe7+jPr+s88xu7kfCgiWcbNsMVz88liCSza6QheN7u15tCKrYL3q5Y+ksHBsYZy1jXBtM4FruxW4fmVQu+WxJ/Bl71e0kqpWAtWaH39C0eQpSGT3d1weyUJvY0hZ6Rhc6pk/EnOxImWf5BaPmjf6M6ev33oDG1oFIk+CdxOwiuFqT7AEsLJgtQkCejyDh92sP/PIKlhv3Hs/UsIYS7BBthIu8VymcMlI0Rxccf4ByHj5FfRs20ErqeqkoPrfQhTRUxmhUlkFBSRWmDNwneS395x4bdX91Zx5Kmv6d3i0+nznynisUnCZ8VrnfINw9sGH8frd92glmZdVsL7o9w72dQhELLuRrfRQ4rUMcIUqj7XdAly7AkNxLPoWPMtGrUoJVGt/WozCyZORoEFlTP6mEu2awqWBZQuuE+1Ywez+ttXwmKqsVMpO/S1qb6M5sMQUXGUS7eb7hWDjb+7GmLf7aCWZl1WwFnw1Hiu8WxGmMGymx9piAtd2wiXzWwLXdg2unYRrl4JLj/2eLTHs6SdxjqOPqlDe2XSsXfQzCghVPIfRxwiL6VMzzMJFcErBVQYsgSqbo7/aBlVBbi66C1iBEQZ4rJj835jFWQL3C77BGN8+GEvIhjVZBet4QiImNWiEbQIV4ZJYqzRcOnosA1w72Fcb4YojWHtb+WHpv1/AfAaJlS0F1eKlKJg0GYcJVRKvwZgi3CxcAg0rzBpcBk9FqDxrF1SiJWNj8LmLGy7x89oCS0zBxW5RwALteUKZknBUK828rIIl6s9CtgtU4rXMwlXiueTWjxGunb7tkfHxMPS5/z6tpMqRQLXuZ0JFT3VQg8o08ZstuCRNeNln/pxozwpl97ddoMqpHTGVqT56sgdWe/oycC8PkSVTABIuBNmXp9/mK95q2R5HwsOxISTUClz0XGXh4vHYb36LV+7ppJVU8colVOuXLCNUkxRUkhHniEBFkGzBpR6FJ3CxGzd9WlkyocrURWBHLQrUy0oe43dBYJHUSVZirLJ2jnbCNxA9vGw/WtkmWB/3fgXHORLcwKB8E4/m4ZLpiNJwxYVEIK6JF74bPAiJsVu10ipOuenp2ECo8gjVASNUPLfKdOMIXOz6jHAdN4WqFnoqkaSUelI8Dgc2GQRLzF648ll/C9188PXrr2qlWZZNsJZOm4XlzVtiU1AENnJ0aA2uUp6LDbWjVTucmTgFQ56quMfui8RTbVy2ArmTJmE/R38JhErSggtYjsJl7BaPd2Al68Kxo3kzJNdSTyWKeeM1zGjSEgX88stOIpXxxg645CFSV1hXg/klXjdzrlaaZdnuLKnPSPgmwrOJ8cvGEPs91/Z2wUju1AVv//VvWkk3rtyzZ7Fp+UpCNRH7+CEPEyqVPknMSbiSWGkZukjEMaaqzVCJ7mZbysI+yR8vMBnNFlzyP4RE40474iuRXa96x9sfCeERWE+INrEhNjJgtwoX4RO4drDRt7m4Yum4sdi1cKlWmvMSqGJXrkaOCVTGJCQOwcVvqylUZ/Xstpu713qoEnfEGbpB9j5GkEzNGlwqvvILRjd3H60067ILrOFvvIljDN4FrA3iuRyAa2ubdiiMmYhBXR/WSnNOAtXmlb8oqPYSqoMmUNmCS2AqC5ck3ZUc9ALVrlre/Rk1pFt3LPZorW7jWExZSbjKQiUjwkIObGY2boFJfftqpVmXXWAdjU/EnEaNsF66QoKzgY1qhCvWFC424pZgk5iLMCrP5e6N8UM+Bq5d00p0TALVllVrkD1pgoLqEM8vO65lS38psORIgOyBK5GVeJbdX12BShQl3iok0rBT2wJYYmXhkr/J+2R3e0qi9fkro+wCSzSQQfIuvQEqgWujCVybrcHFmGurZyucW7wEwx97XCvNfuWcOYutv6xD9sSJ2MUPtp8DiEMEw5iAxGG4aEdYUWn6SOypQ1DJ42a+buCB86wbtUvbAbiyafn8mzwH3F7Z/cqPX3gBp3R6rGYXp7yWDbjkpnVxtxgUjAMRt2Dky7aHqabKOXMG29YKVBMUVAdYpspwE6hTQFmFi5VhDi7xVGns/hRUtXRKwZxuYf0VcKSeKUBpZi9c0g3ObeqDsTaSrZnKbrBOnTyNOQ0b4Bc2zhp6obJwbSgDl9y0NoUr1s0duRs2Yuw/e2klWpdAtWPdBmRNmIjt9Jb7WVbJbmv74Cr7zJ/DrMgUQrVXRn91CKr/jhih8sHKdEG6TKuUgctW/nnZ1PpXgpnlwH1f+30b1b+ZDw6FR2ING3ltObgksLcM17agUPzasSPG9x2slWZZ0v3tWL8RmRMmYAeh+pWxncoTEWy6ld8xuOJZgakCFUd/J+oQVCLxVnL7xtRb2QuXrHE/7heErg3dtdLsk0NgTRs9FvHt22M1G2odwXEUro1unriyZxdGPP6EVmJ55aadxc4NmxRU2wjVXpZr3LMocJXKbkM7aAdch1g5p8Mi8Ktn3YNqQu/X8LmLBy6x/lSm5jJQGc0cXDKBeolAfkJvtyjG8uZUc3IILNFw0r9RT6gIiyW4JObaYg4u/n+LpxfWrlqFM2ZGF9L9xW3ajPQJMYSqgYLKuPPHEbhUjKXZQVbYKXqqfTJPVcegEqmRoNy+MYHIkpmDS+a8VBkOyuF3DHnyGaSFh2EVwbENFwP5MnBtbtUWGV9/hS97Pq+VaJBAtSt2C9JjYrCFH2QXX1t2z6KA5QhcpaGq+WnBHdWLkbdikaxrZ9CuAnU7zAiXeKtCequ5bi0x8rmeWon2y2Gw8i9fwVQ2/C8cHa7RESxH4eL/1/L92SdPYOFno1SZCqrNhIrdX6xLI7WXsWRzhv1wmcZc+1lBJ/WRCqoTdRCquJXLDTudZd6qTMBuyxSEErQHR6qVEHY97quMHPdx1LudH8SZyAisptdao9MruNYSnHX8vRguBtyb2MBm4SIAu2+5DbGr1uDotu34dUcczrD728SYSlZFWN0QawdcAtUJeqr9dRQqkXRfchvGUsBuzQSsXHq55Z6+GNjlQa1Ex+QUWKkZmfiBF76KDbmWXqsELh4Jj024+LdNzX2QOmY0fj0QT6gmYAOhknuLxvXzlvYsytEYb5mDa29AqILqQB2Gqhfr5QfPNijisWyiXXtMPBxCo3AX27gwJ0cr1TE5BZbo3U5dcDY6EqtCbMAVRLj493JwEaJ1Lo1xYuRIrG/QSEFVdltZ+d3W1uH6NUCH4/pwQuVR50Z/Rs0ZMhT/kO4rNMKQt4uexxG4xFvl8T2LCWb/P3XRSnVcToN1rugCvuMH+IUgCVil4dLZCRePvu2xTRfB2Mu+PYuW4NrNyhOoDnq542QdhSo1PkHlfr3GL6kxF6rKhyrQ2AlXOmGUCVHZxXP10mWtZMflNFiiD/7WHRmR4Vipea0SuBig2wMXf99KYAQw4xLn4j2L/JD2wrWLlZZEOA961V1PdfXiJUQShjR2Y5mEQ/KhOgqXeKsLrM9JTbzxWfcbW5x5Q2CJRvDDbAsLx5pynqs8XHLrxyxc9FCGWz+GzRnGPYvG9fPm4BKwxOL4GoHqUB32VCLJR7a5dQDyOXgxZBl0Dq5CguXMvFVZ3XAJMyZNQXJbXyxlYxvBKgvXeofhoudiRQhc1jzXLlbe0TCBygMnc+suVF09vTHXozUus56KMzc7CJcK2IMj1NauVdMtJ621VzeOJtW3jR9OdYxW0w/m4JKb1hvKwSXzXqXhKlkoWNpzme5Z3EWoBK4drLRExlTxdRyqJ1j3Yxq1wDVCURYqe+EyBuyxPgF4zLNi8ppVCFipWTn4nqSv09FDmYBlGy6Z9zLAJcF86VWoBriKN2eYwGWE6rC3J07V4e6vO6Ea2VBSakciRVIssY7MpQgvC5e5Z/7IZGg02/BCfoFW+o2pQsASfTVgMC++PZYGle4SbcFl2JyhswKXyc4fVsBWVsphfSQSvD3qNFRdPb0wprEXgQhXqZaMSeEk5ZIjcKkuMCQCrxAqmaqoKFUYWKI+7Tvg7C3RpUaJxXCxmzTGXObhMlkoaAYu6Ra3CFT0igJVXQ3UZfQngfpcD1/V/aUQFkOi3RK4JOmu2YcbaF2lKVwSrC/39kd3H9ubUB1RhYKVfx0Yxw+9KyKy1PyWAkuOGlzmPZfsWbTkucIQGxKCQ/RUiXXYU6UeOqymFGJbB+IC68yQvtI0i7MBLsn2bM/TyjJpWQRLyqxoVXiJ6zZvxg7PpsUz8pbgEs8lYNnjuTazG4yPjMZRf1/UrAfVVZykm5JJy9OEJjeQUBV7JyNckntewCqBy+C5LMMFXaTyfkd27tDOUnGqeFSpT557HplBHbAkKNQGXIab1gou/m5tQ6zAlX9bNPbffz+cu3tVc9WLn/05AnAlNJLdl8RRhEZ5K1OzH640ggXWt0wtxLxk/zp2R1QpYIn6RnREflQEg3lbcJl4LoFLPFdomT2LrFjZ+bOOrvtYGCvLqxnily7TzlR7JUtfJLPLHE8/XGeAbd/DDQQuw8MNSsNl8FLira6zPr9q5IUXdVHamSpelQaWqH/Lljh7azSWl5k8dRYuuf0TSw8mt4AK/dtgd6f7kXn5ina22qWXIm/Fw4QqLSAC2fJYFkJ0mmA4+uQMU7gEqgv0/j97+aGzazPtTJWjSgXrPE3yPhzr2NH8SLEYLjmah8vcnkUZKa4L1CEpnBXn7orNb7+DC4ZT1nhN7P2q8lLzm7ell4omTOGGNJbqKN2gvXCV91x5fP3ONoGGxXuVrEo/w6lzuZjED5LQMcohuAyrUM3DpdbP8zWbxYMFhyJLp8N+j2ZY9VnNfGq+aN6IESo4/9TFA+eDo5BBL3WSwJimrlSZBgmI/XAZPJeMEHMY8B/yD1WToBcLCrWzVp4qH10q4XQqZvIDHYy2MMel498IjcBVfs+ijW1l/D2WcZzMc+XrQ7DR1RX/7TcIRdq5q7tkh7IA9Z6LK84GRSAnOFIlgLOUxdlg9sOVSrBy6N2PtNeraQV5/EtVqErAEh08fgqz+cHioy15LoHL4LnWOQGXJCGJZUXv5N8LwvRYzXNNe+ppbIrdpl1B9VHi9p34qFt31eWNdGmOdHphAeoUgRKPpFJWCkAW4FIpwvk6W3DJPJd0f4f8gxVUsrWuqlRlYInEc8lGjKRbOloI6AmXAou/OwHXdsK1na/bzAqXG9fpYXT/3t4Y1cwdn7/SG4cPJmhXUvU6FZ+ACa+/pp7j2IM2z7MNCnXRSOdoTxLqSi7UZA0qo1mDS8zao/BSO+hRyFBih2+wAjg/I0u7kqpRlYIlOpmdg6/4QdNuibYwFWEdLsNNa0tw6QmX3nBvkbaNFb6NlR3P9+bSiy1s2gRv89wDuvfA/NHjkJdXeWviC/PysGRcDIb16KEevC6ZWia7tsBxaXAO808Hl2QUlOMJSVkZVDqLs7Nwyf3Cq/SAi738cQfPWxUxVVlVOVgiuX/+kY8P8qMj8LMFuAxdojW4GMjbgEtMUlbuZMNtZ4XvlliDr8/Q67DCq5V6ulk3Wq+IWzC6z1uYx+B/7+q1yDpj//x+dtoZ7F21BguGj0BMnzfxcsStqjEfokm+hIXNfZHG8+fqIg0w8TokL5cx8ZsRLslL7wxchhGjwGToFgUs2QjxZSMvdHF1066y6nVTwDLq/ahbURASgBUEwXQFanm4TLaV2QGXWj9fDFfJQkHZnLGLDRdH20OT/Yen9ZHqAU6rfPwwpYkXBhMImeWWh6ULILJTpZP2uzznWp7OLx5I1pbL3yUR/2u04S7umOXmg1jfDkgPZRDOctN4Lcd5TZKX6ygBlzRKxXm6zMClHstiBi57HssicMmM+/WQSDWj/iJBvpm6qWCJRvV8AYe93LE1LKJcUG+Ey6E9i6ZwBWvr58vAVWr9PP8nto9/P8jXHOFrkkPpXdgwGWFRSNGz0VlmAl97hA1+gtCk6aOQRcukSe7SVF0E4QxHEl8nqSklCUkCy0xU5Rl+L5dRsALhkmmJrEBeF01yWFXWbRpHdNPBEq3btAmLWCGnOkaV6xpLw1WyIkLBxb87D5f5PYuylWwvvYuYPJXfNMONMnanahs/yztAO0STFJXGfBHqyPeZpk8ywnXUDFzmsjgb4AqzCZfBU4XjSkgUFnu3U3NUR3Zu12r15qpagCXKuHoNXwYEoiA0AKsIhuky5xK4eDSFi43gCFyObiszJiOxlj7pAM00CYktuMp7LvMpwm3BJV7qLH+WydSXCFSPCl5PdaOqNmAZNeWdd7GzkQsSoyKxhJWqZuatwCWz80a4BCoFF383biszBPQl28qcgcvSVn5bcCUw7rEHrqMcxVmFS01FmIBFu0Qvtc4n0HCTemjFrfysKFU7sERJGdmY7B+A/KD2WEegJLi3BddG/n2Tqefi77LcRuCSe4s3ApcCzAxc1tInGeGy23Mx3rIIFwE1zHOFIzsoAllBkfg3gXrcs2WFrVGvaFVLsIyaP34CfmEFZkSFYxnhKp2EpPyeRYGrVLcoUBEiQ5dYsvNHxVxqGsIIl2Hnj224BCpTuHQq1rIKF99nzCpoBEtMcqOWhcvSkzMErjPipThQGO/aUnmpldOna7VUPVWtwRLJqoUZTz6D+MYNkRQepvYvrhKoOAoTuBzfs+jYhlibnovdtV1wifHnUnDxb9Y8lxxl7uuSPhoLPP3UqoTh3Sr28TGVpWoPllEn84vwY9eHkOzWBIkEbBkbVxLtSrdobVuZEa7SmzMs7Vm0F64ynssGXOpnvs8cXDIlYc5zpfJzXNR3xE/N/dQUQv9OnW8ol0JVq8aAZVRCWjqWPPIYjjZuhORwPVaxcZYHGZ6aYQkuFdSXg0u2lZX2XKYbYq3BJV7rV763IuBSXST/JhOox3lMpyfOCY3EdLdW+C2BGtTlQadTCd1M1TiwjDp98TJW9PoPdjZsgGxdMAHSYQUbVu4zigczxFyO7Vk0B1ecKVz8vyW41EjRDFxGsMzBlcjXHuXxBK8rXx+Ffe1CMMTFVWU5Htmzp1OZ9KqLaixYRl2i/TJ6HNaEhCKjpReS9YSJjSxJ4daz8TfIcppQk4WCpeCS6YjScEm8ZRUumrNwqYlU/k+6vxM8R7bcTuJ7prr5qDzqDzd0x+KYGMMHq+Gq8WCZ6sDxE9j4Rh+sb9kC59r44LgulCNABvts7LU8ytP4N9MELpnnMgsXuySbcPG11uAydosClRzFU8ltoRSeLyc8GnHtgjHRtYVa8fBH2rhXXkZWStU8lL2qVKvAMtXu/YcQO2AgNnXsiMMcUZ4L7oAjISHYRc+2gY2/ng2+MVBnCOwFNA0umYowhUugMlqpmEvg0qwYLgGKr0ugyc3nNF0EssOisdM/GLPcfdDPpYG6qd3DvRUm9+2LlMQj2tXWPtVasEwlz6Bf991cbOvTFxtvvRWb2biZfq2RGRzI+CYY8ewuxTPt4FFyQ8hW/q0cmclSm60B9GQB9HyBNB7jCOMe/l9m5PfTDvH/R4IiVNx0kh5pZ9sAzGjmg/cZK/2d55Flx3/38sOY117F+plzDBdUB1QnwDKnOHq0NTGTsaH/QKx59HGsiorCksauWEcQ4tya4XALbxxv3Qopbf1wpn07pHVoh1Pt/ZHg54u4lj5Y08wD3zdogi/5+rdoMhPe07MN+tzXCZP6v4NlYycg9UiSdra6pzoLljWlFRRif3wiYjdswYqflmDR3AX437TZ+GnaHCz9YQHWLFqKuNhtSDpyFPnnL2rvqpep6sGqV6WoHqx6VYrqwapXpagerHpViurBqlelqB6selWCgP8H0vxXZO18UWEAAAAASUVORK5CYII="
-- please keep this here
local PingStat = game:service("Stats").PerformanceStats.Ping
local function GetLatency()
    return PingStat:GetValue() / 1000
end
placeholderImage = syn.crypt.base64.decode(placeholderImage)
if not isfile("bitchbot/chatspam.txt") then --idk help the user out lol, prevent stupid errors --well it would kinda ig
    writefile(
        "bitchbot/chatspam.txt",
        [[
WSUP FOOL
GET OWNED KID
BBOAT ON TOP
I LOVE BBOT YEAH
PLACEHOLDER TEXT
dear bbot user, edit your chat spam
    ]]
    )
end

if not isfile("bitchbot/killsay.txt") then
    writefile(
        "bitchbot/killsay.txt",
        [[
WSUP FOOL [name]
GET OWNED [name]
[name] just died to my [weapon] everybody laugh
[name] got owned roflsauce
PLACEHOLDER TEXT
dear bbot user, edit your kill say
    ]]
    )
end

do
    local customtxt = readfile("bitchbot/chatspam.txt")
    for s in customtxt:gmatch("[^\n]+") do -- I'm Love String:Match
        table.insert(customChatSpam, s) -- I'm care
    end
    customtxt = readfile("bitchbot/killsay.txt")
    for s in customtxt:gmatch("[^\n]+") do -- I'm Love String:Match
        table.insert(customKillSay, s)
    end
end

local function map(N, OldMin, OldMax, Min, Max)
    return (N - OldMin) / (OldMax - OldMin) * (Max - Min) + Min
end

local function reverse_table(tbl) -- THANKS FINI <33333
    local new_tbl = {}
    for i = 1, #tbl do
        new_tbl[#tbl + 1 - i] = tbl[i]
    end
    return new_tbl
end

local NotifLogs = {}
local CreateNotification
do
    local notes = {}
    local function DrawingObject(t, col)
        local d = Drawing.new(t)

        d.Visible = true
        d.Transparency = 1
        d.Color = col

        return d
    end

    local function Rectangle(sizex, sizey, fill, col)
        local s = DrawingObject("Square", col)

        s.Filled = fill
        s.Thickness = 1
        s.Position = Vector2.new()
        s.Size = Vector2.new(sizex, sizey)

        return s
    end

    local function Text(text)
        local s = DrawingObject("Text", Color3.new(1, 1, 1))

        s.Text = text
        s.Size = 13
        s.Center = false
        s.Outline = true
        s.Position = Vector2.new()
        s.Font = 2

        return s
    end

    CreateNotification = function(t, customcolor) -- TODO i want some kind of prioritized message to the notification list, like a warning or something. warnings have icons too maybe? idk??
        table.insert(NotifLogs, string.format("[%s]: %s", os.date("%X"), t))
        local gap = 25
        local width = 18

        local alpha = 255
        local time = 0
        local estep = 0
        local eestep = 0.02

        local insety = 0

        local Note = {

            enabled = true,

            targetPos = Vector2.new(50, 33),

            size = Vector2.new(200, width),

            drawings = {
                outline = Rectangle(202, width + 2, false, Color3.new(0, 0, 0)),
                fade = Rectangle(202, width + 2, false, Color3.new(0, 0, 0)),
            },

            Remove = function(self, d)
                if d.Position.x < d.Size.x then
                    for k, drawing in pairs(self.drawings) do
                        drawing:Remove()
                        drawing = false
                    end
                    self.enabled = false
                end
            end,

            Update = function(self, num, listLength, dt)
                local pos = self.targetPos

                local indexOffset = (listLength - num) * gap
                if insety < indexOffset then
                    insety -= (insety - indexOffset) * 0.2
                else
                    insety = indexOffset
                end
                local size = self.size

                local tpos = Vector2.new(pos.x - size.x / time - map(alpha, 0, 255, size.x, 0), pos.y + insety)
                self.pos = tpos

                local locRect = {
                    x = math.ceil(tpos.x),
                    y = math.ceil(tpos.y),
                    w = math.floor(size.x - map(255 - alpha, 0, 255, 0, 70)),
                    h = size.y,
                }
                --pos.set(-size.x / fc - map(alpha, 0, 255, size.x, 0), pos.y)

                local fade = math.min(time * 12, alpha)
                fade = fade > 255 and 255 or fade < 0 and 0 or fade

                if self.enabled then
                    local linenum = 1
                    for i, drawing in pairs(self.drawings) do
                        drawing.Transparency = fade / 255

                        if type(i) == "number" then
                            drawing.Position = Vector2.new(locRect.x + 1, locRect.y + i)
                            drawing.Size = Vector2.new(locRect.w - 2, 1)
                        elseif i == "text" then
                            drawing.Position = tpos + Vector2.new(6, 2)
                        elseif i == "outline" then
                            drawing.Position = Vector2.new(locRect.x, locRect.y)
                            drawing.Size = Vector2.new(locRect.w, locRect.h)
                        elseif i == "fade" then
                            drawing.Position = Vector2.new(locRect.x - 1, locRect.y - 1)
                            drawing.Size = Vector2.new(locRect.w + 2, locRect.h + 2)
                            local t = (200 - fade) / 255 / 3
                            drawing.Transparency = t < 0.4 and 0.4 or t
                        elseif i:find("line") then
                            drawing.Position = Vector2.new(locRect.x + linenum, locRect.y + 1)
                            if menu then
                                local mencol = customcolor or (
                                        menu:GetVal("Settings", "Cheat Settings", "Menu Accent") and Color3.fromRGB(unpack(menu:GetVal("Settings", "Cheat Settings", "Menu Accent", COLOR))) or Color3.fromRGB(127, 72, 163)
                                    )
                                local color = linenum == 1 and mencol or Color3.fromRGB(mencol.R * 255 - 40, mencol.G * 255 - 40, mencol.B * 255 - 40) -- super shit
                                if drawing.Color ~= color then
                                    drawing.Color = color
                                end
                            end
                            linenum += 1
                        end
                    end

                    time += estep * dt * 128 -- TODO need to do the duration
                    estep += eestep * dt * 64
                end
            end,

            Fade = function(self, num, len, dt)
                if self.pos.x > self.targetPos.x - 0.2 * len or self.fading then
                    if not self.fading then
                        estep = 0
                    end
                    self.fading = true
                    alpha -= estep / 4 * len * dt * 50
                    eestep += 0.01 * dt * 100
                end
                if alpha <= 0 then
                    self:Remove(self.drawings[1])
                end
            end,
        }

        for i = 1, Note.size.y - 2 do
            local c = 0.28 - i / 80
            Note.drawings[i] = Rectangle(200, 1, true, Color3.new(c, c, c))
        end
        local color = (menu and menu.GetVal) and customcolor or menu:GetVal("Settings", "Cheat Settings", "Menu Accent") and Color3.fromRGB(unpack(menu:GetVal("Settings", "Cheat Settings", "Menu Accent", COLOR))) or Color3.fromRGB(127, 72, 163)

        Note.drawings.text = Text(t)
        if Note.drawings.text.TextBounds.x + 7 > Note.size.x then -- expand the note size to fit if it's less than the default size
            Note.size = Vector2.new(Note.drawings.text.TextBounds.x + 7, Note.size.y)
        end
        Note.drawings.line = Rectangle(1, Note.size.y - 2, true, color)
        Note.drawings.line1 = Rectangle(1, Note.size.y - 2, true, color)

        notes[#notes + 1] = Note
    end

    renderStepped = game.RunService.RenderStepped:Connect(function(dt)
        Camera = workspace.CurrentCamera
        local smallest = math.huge
        for k = 1, #notes do
            local v = notes[k]
            if v and v.enabled then
                smallest = k < smallest and k or smallest
            else
                table.remove(notes, k)
            end
        end
        local length = #notes
        for k = 1, #notes do
            local note = notes[k]
            note:Update(k, length, dt)
            if k <= math.ceil(length / 10) or note.fading then
                note:Fade(k, length, dt)
            end
        end
    end)
    --ANCHOR how to create notification
    --CreateNotification("Loading...")
end

--validity check
--SECTION commented these out for development

-- make_synreadonly(syn)
-- make_synreadonly(Drawing)
-- protectfunction(getgenv)
-- protectfunction(getgc)

-- local init
-- if syn then
--     init = getfenv(saveinstance).script
-- end

-- script.Name = "\1"
-- local function search_hookfunc(tbl)
--     for i,v in pairs(tbl) do
--         local s = getfenv(v).script
--         if is_synapse_function(v) and islclosure(v) and s and s ~= script and s.Name ~= "\1" and s ~= init then
--             if tostring(unpack(debug.getconstants(v))):match("hookfunc") or tostring(unpack(debug.getconstants(v))):match("hookfunction") then
--                 writefile("poop.text", "did the funny")
--                 SX_CRASH()
--                 break
--             end
--         end
--     end
-- end
-- search_hookfunc(getgc())
-- search_hookfunc = nil

--if syn.crypt.derive(BBOT.username, 32) ~= BBOT.check then SX_CRASH() end

--!SECTION
local menuWidth, menuHeight = 500, 600
menu = { -- this is for menu stuffs n shi
    w = menuWidth,
    h = menuHeight,
    x = 0,
    y = 0,
    columns = {
        width = math.floor((menuWidth - 40) / 2),
        left = 17,
        right = math.floor((menuWidth - 20) / 2) + 13,
    },
    activetab = 1,
    open = true,
    fadestart = 0,
    fading = false,
    mousedown = false,
    postable = {},
    options = {},
    clrs = {
        norm = {},
        dark = {},
        togz = {},
    },
    mc = { 127, 72, 163 },
    watermark = {},
    connections = {},
    list = {},
    unloaded = false,
    copied_clr = nil,
    game = "uni",
    tabnames = {}, -- its used to change the tab num to the string (did it like this so its dynamic if u add or remove tabs or whatever :D)
    friends = {},
    priority = {},
    muted = {},
    spectating = false,
    stat_menu = false,
    load_time = 0,
    log_multi = nil,
    mgrouptabz = {},
    backspaceheld = false,
    backspacetime = -1,
    backspaceflags = 0,
    selectall = false,
    modkeys = {
        alt = {
            direction = nil,
        },
        shift = {
            direction = nil,
        },
    },
    modkeydown = function(self, key, direction)
        local keydata = self.modkeys[key]
        return keydata.direction and keydata.direction == direction or false
    end,
    keybinds = {},
    values = {}
}

local function round(num, numDecimalPlaces)
    local mult = 10 ^ (numDecimalPlaces or 0)
    return math.floor(num * mult + 0.5) / mult
end

local function average(t)
    local sum = 0
    for _, v in pairs(t) do -- Get the sum of all numbers in t
        sum = sum + v
    end
    return sum / #t
end

local function clamp(a, lowerNum, higher) -- DONT REMOVE this clamp is better then roblox's because it doesnt error when its not lower or heigher
    if a > higher then
        return higher
    elseif a < lowerNum then
        return lowerNum
    else
        return a
    end
end

local function CreateThread(func, ...) -- improved... yay.
    local thread = coroutine.create(func)
    coroutine.resume(thread, ...)
    return thread
end

local function MultiThreadList(obj, ...)
    local n = #obj
    if n > 0 then
        for i = 1, n do
            local t = obj[i]
            if type(t) == "table" then
                local d = #t
                assert(d ~= 0, "table inserted was not an array or was empty")
                assert(d < 3, ("invalid number of arguments (%d)"):format(d))
                local thetype = type(t[1])
                assert(
                    thetype == "function",
                    ("invalid argument #1: expected 'function', got '%s'"):format(tostring(thetype))
                )

                CreateThread(t[1], unpack(t[2]))
            else
                CreateThread(t, ...)
            end
        end
    else
        for i, v in pairs(obj) do
            CreateThread(v, ...)
        end
    end
end

local DeepRestoreTableFunctions, DeepCleanupTable

DeepRestoreTableFunctions = function(tbl)
    for k, v in next, tbl do
        if type(v) == "function" and is_synapse_function(v) then
            for k1, v1 in next, getupvalues(v) do
                if type(v1) == "function" and islclosure(v1) and not is_synapse_function(v1) then
                    tbl[k] = v1
                end
            end
        end

        if type(v) == "table" then
            DeepRestoreTableFunctions(v)
        end
    end
end

DeepCleanupTable = function(tbl)
    local numTable = #tbl
    local isTableArray = numTable > 0
    if isTableArray then
        for i = 1, numTable do
            local entry = tbl[i]
            local entryType = type(entry)

            if entryType == "table" then
                DeepCleanupTable(tbl)
            end

            tbl[i] = nil
            entry = nil
            entryType = nil
        end
    else
        for k, v in next, tbl do
            if type(v) == "table" then
                DeepCleanupTable(tbl)
            end
        end

        tbl[k] = nil
    end

    numTable = nil
    isTableArray = nil
end

local event = {}

local allevent = {}

function event.new(eventname, eventtable, requirename) -- fyi you can put in a table of choice to make the table you want an "event" pretty cool its like doing & in c lol!
    if eventname then
        assert(
            allevent[eventname] == nil,
            ("the event '%s' already exists in the event table"):format(eventname)
        )
    end
    local newevent = eventtable or {}
    local funcs = {}
    local disconnectlist = {}
    function newevent:fire(...)
        allevent[eventname].fire(...)
    end
    function newevent:connect(func)
        funcs[#funcs + 1] = func
        local disconnected = false
        local function disconnect()
            if not disconnected then
                disconnected = true
                disconnectlist[func] = true
            end
        end
        return disconnect
    end

    local function fire(...)
        local n = #funcs
        local j = 0
        for i = 1, n do
            local func = funcs[i]
            if disconnectlist[func] then
                disconnectlist[func] = nil
            else
                j = j + 1
                funcs[j] = func
            end
        end
        for i = j + 1, n do
            funcs[i] = nil
        end
        for i = 1, j do
            CreateThread(function(...)
                pcall(funcs[i], ...)
            end, ...)
        end
    end

    if eventname then
        allevent[eventname] = {
            event = newevent,
            fire = fire,
        }
    end

    return newevent, fire
end

local function FireEvent(eventname, ...)
    if allevent[eventname] then
        return allevent[eventname].fire(...)
    else
        --warn(("Event %s does not exist!"):format(eventname))
    end
end

local function GetEvent(eventname)
    return allevent[eventname]
end

local BBOT_IMAGES = {}
MultiThreadList({
    function()
        BBOT_IMAGES[1] = game:HttpGet("https://i.imgur.com/9NMuFcQ.png")
    end,
    function()
        BBOT_IMAGES[2] = game:HttpGet("https://i.imgur.com/jG3NjxN.png")
    end,
    function()
        BBOT_IMAGES[3] = game:HttpGet("https://i.imgur.com/2Ty4u2O.png")
    end,
    function()
        BBOT_IMAGES[4] = game:HttpGet("https://i.imgur.com/kNGuTlj.png")
    end,
    function()
        BBOT_IMAGES[5] = game:HttpGet("https://i.imgur.com/OZUR3EY.png")
    end,
    function()
        BBOT_IMAGES[6] = game:HttpGet("https://i.imgur.com/3HGuyVa.png")
    end,
})

-- MULTITHREAD DAT LOADING SO FAST!!!!
local loaded = {}
do
    local function Loopy_Image_Checky()
        for i = 1, 6 do
            local v = BBOT_IMAGES[i]
            if v == nil then
                return true
            elseif not loaded[i] then
                loaded[i] = true
            end
        end
        return false
    end
    while Loopy_Image_Checky() do
        wait(0)
    end
end

if game.PlaceId == 292439477 or game.PlaceId == 299659045 or game.PlaceId == 5281922586 or game.PlaceId == 3568020459
then -- they sometimes open 5281922586
    menu.game = "pf"
    do
        local net

        repeat
            local gc = getgc(true)

            for i = 1, #gc do
                local garbage = gc[i]

                local garbagetype = type(garbage)

                if garbagetype == "table" then
                    net = rawget(garbage, "fetch")
                    if net then
                        break
                    end
                end
            end

            gc = nil
            game.RunService.RenderStepped:Wait()
        until net

        net = nil

        local annoyingFuckingMusic = workspace:FindFirstChild("memes")
        if annoyingFuckingMusic then
            annoyingFuckingMusic:Destroy()
        end
    end -- wait for framwork to load
end

loadstart = tick()

-- nate i miss u D:
-- im back
local NETWORK = game:service("NetworkClient")
local NETWORK_SETTINGS = settings().Network
NETWORK:SetOutgoingKBPSLimit(0)

setfpscap(getgenv().maxfps or 144)

if not isfolder("bitchbot") then
    makefolder("bitchbot")
    if not isfile("bitchbot/relations.bb") then
        writefile("bitchbot/relations.bb", "bb:{{friends:}{priority:}")
    end
else
    if not isfile("bitchbot/relations.bb") then
        writefile("bitchbot/relations.bb", "bb:{{friends:}{priority:}")
    end
    writefile("bitchbot/debuglog.bb", "")
end

if not isfolder("bitchbot/" .. menu.game) then
    makefolder("bitchbot/" .. menu.game)
end

local configs = {}

local function GetConfigs()
    local result = {}
    local directory = "bitchbot\\" .. menu.game
    for k, v in pairs(listfiles(directory)) do
        local clipped = v:sub(#directory + 2)
        if clipped:sub(#clipped - 2) == ".bb" then
            clipped = clipped:sub(0, #clipped - 3)
            result[k] = clipped
            configs[k] = v
        end
    end
    if #result <= 0 then
        writefile("bitchbot/" .. menu.game .. "/Default.bb", "")
    end
    return result
end

local Players = game:GetService("Players")
local LIGHTING = game:GetService("Lighting")
local stats = game:GetService("Stats")

local function UnpackRelations()
    local str = isfile("bitchbot/relations.bb") and readfile("bitchbot/relations.bb") or nil
    local final = {
        friends = {},
        priority = {},
    }
    if str then
        if str:find("bb:{{") then
            writefile("bitchbot/relations.bb", "friends:\npriority:")
            return
        end

        local friends, frend = str:find("friends:")
        local priority, priend = str:find("\npriority:")
        local friendslist = str:sub(frend + 1, priority - 1)
        local prioritylist = str:sub(priend + 1)
        for i in friendslist:gmatch("[^,]+") do
            if not table.find(final.friends, i) then
                table.insert(final.friends, i)
            end
        end
        for i in prioritylist:gmatch("[^,]+") do
            if not table.find(final.priority, i) then
                table.insert(final.priority, i)
            end
        end
    end
    if not menu then
        repeat
            game.RunService.Heartbeat:Wait()
        until menu
    end
    menu.friends = final.friends
    if not table.find(menu.friends, Players.LocalPlayer.Name) then
        table.insert(menu.friends, Players.LocalPlayer.Name)
    end
    menu.priority = final.priority
end

local function WriteRelations()
    local str = "friends:"

    for k, v in next, menu.friends do
        local playerobj
        local userid
        local pass, ret = pcall(function()
            playerobj = Players[v]
        end)

        if not pass then
            local newpass, newret = pcall(function()
                userid = v
            end)
        end

        if userid then
            str ..= tostring(userid) .. ","
        else
            str ..= tostring(playerobj.Name) .. ","
        end
    end

    str ..= "\npriority:"

    for k, v in next, menu.priority do
        local playerobj
        local userid
        local pass, ret = pcall(function()
            playerobj = Players[v]
        end)

        if not pass then
            local newpass, newret = pcall(function()
                userid = v
            end)
        end

        if userid then
            str ..= tostring(userid) .. ","
        else
            str ..= tostring(playerobj.Name) .. ","
        end
    end

    writefile("bitchbot/relations.bb", str)
end
CreateThread(function()
    if (not menu or not menu.GetVal) then
        repeat
            game.RunService.Heartbeat:Wait()
        until (menu and menu.GetVal)
    end
    wait(2)
    UnpackRelations()
    WriteRelations()
end)

local LOCAL_PLAYER = Players.LocalPlayer
local LOCAL_MOUSE = LOCAL_PLAYER:GetMouse()
local TEAMS = game:GetService("Teams")
local INPUT_SERVICE = game:GetService("UserInputService")
local TELEPORT_SERVICE = game:GetService("TeleportService")
local GAME_SETTINGS = UserSettings():GetService("UserGameSettings")
local CACHED_VEC3 = Vector3.new()
local Camera = workspace.CurrentCamera
local SCREEN_SIZE = Camera.ViewportSize
--[[ local ButtonPressed = Instance.new("BindableEvent")
local TogglePressed = Instance.new("BindableEvent") ]]

local ButtonPressed = event.new("bb_buttonpressed")
local TogglePressed = event.new("bb_togglepressed")
local MouseMoved = event.new("bb_mousemoved")

--local PATHFINDING = game:GetService("PathfindingService")
local GRAVITY = Vector3.new(0, -192.6, 0)

menu.x = math.floor((SCREEN_SIZE.x / 2) - (menu.w / 2))
menu.y = math.floor((SCREEN_SIZE.y / 2) - (menu.h / 2))

local Lerp = function(delta, from, to) -- wtf why were these globals thats so exploitable!
    if (delta > 1) then
        return to
    end
    if (delta < 0) then
        return from
    end
    return from + (to - from) * delta
end

local ColorRange = function(value, ranges) -- ty tony for dis function u a homie
    if value <= ranges[1].start then
        return ranges[1].color
    end
    if value >= ranges[#ranges].start then
        return ranges[#ranges].color
    end

    local selected = #ranges
    for i = 1, #ranges - 1 do
        if value < ranges[i + 1].start then
            selected = i
            break
        end
    end
    local minColor = ranges[selected]
    local maxColor = ranges[selected + 1]
    local lerpValue = (value - minColor.start) / (maxColor.start - minColor.start)
    return Color3.new(
        Lerp(lerpValue, minColor.color.r, maxColor.color.r),
        Lerp(lerpValue, minColor.color.g, maxColor.color.g),
        Lerp(lerpValue, minColor.color.b, maxColor.color.b)
    )
end

local bVector2 = {}
do -- vector functions
    function bVector2:getRotate(Vec, Rads)
        local vec = Vec.Unit
        --x2 = cos β x1 − sin β y1
        --y2 = sin β x1 + cos β y1
        local sin = math.sin(Rads)
        local cos = math.cos(Rads)
        local x = (cos * vec.x) - (sin * vec.y)
        local y = (sin * vec.x) + (cos * vec.y)

        return Vector2.new(x, y).Unit * Vec.Magnitude
    end
end
local bColor = {}
do -- color functions
    function bColor:Mult(col, mult)
        return Color3.new(col.R * mult, col.G * mult, col.B * mult)
    end
    function bColor:Add(col, num)
        return Color3.new(col.R + num, col.G + num, col.B + num)
    end
end
local function string_cut(s1, num)
    return num == 0 and s1 or string.sub(s1, 1, num)
end

local textBoxLetters = {
    "A",
    "B",
    "C",
    "D",
    "E",
    "F",
    "G",
    "H",
    "I",
    "J",
    "K",
    "L",
    "M",
    "N",
    "O",
    "P",
    "Q",
    "R",
    "S",
    "T",
    "U",
    "V",
    "W",
    "X",
    "Y",
    "Z",
}

local keyNames = {
    One = "1",
    Two = "2",
    Three = "3",
    Four = "4",
    Five = "5",
    Six = "6",
    Seven = "7",
    Eight = "8",
    Nine = "9",
    Zero = "0",
    LeftBracket = "[",
    RightBracket = "]",
    Semicolon = ";",
    BackSlash = "\\",
    Slash = "/",
    Minus = "-",
    Equals = "=",
    Return = "Enter",
    Backquote = "`",
    CapsLock = "Caps",
    LeftShift = "LShift",
    RightShift = "RShift",
    LeftControl = "LCtrl",
    RightControl = "RCtrl",
    LeftAlt = "LAlt",
    RightAlt = "RAlt",
    Backspace = "Back",
    Plus = "+",
    Multiplaye = "x",
    PageUp = "PgUp",
    PageDown = "PgDown",
    Delete = "Del",
    Insert = "Ins",
    NumLock = "NumL",
    Comma = ",",
    Period = ".",
}
local colemak = {
    E = "F",
    R = "P",
    T = "G",
    Y = "J",
    U = "L",
    I = "U",
    O = "Y",
    P = ";",
    S = "R",
    D = "S",
    F = "T",
    G = "D",
    J = "N",
    K = "E",
    L = "I",
    [";"] = "O",
    N = "K",
}

local keymodifiernames = {
    ["`"] = "~",
    ["1"] = "!",
    ["2"] = "@",
    ["3"] = "#",
    ["4"] = "$",
    ["5"] = "%",
    ["6"] = "^",
    ["7"] = "&",
    ["8"] = "*",
    ["9"] = "(",
    ["0"] = ")",
    ["-"] = "_",
    ["="] = "+",
    ["["] = "{",
    ["]"] = "}",
    ["\\"] = "|",
    [";"] = ":",
    ["'"] = '"',
    [","] = "<",
    ["."] = ".",
    ["/"] = "?",
}

local function KeyEnumToName(key) -- did this all in a function cuz why not
    if key == nil then
        return "None"
    end
    local _key = tostring(key) .. "."
    local _key = _key:gsub("%.", ",")
    local keyname = nil
    local looptime = 0
    for w in _key:gmatch("(.-),") do
        looptime = looptime + 1
        if looptime == 3 then
            keyname = w
        end
    end
    if string.match(keyname, "Keypad") then
        keyname = string.gsub(keyname, "Keypad", "")
    end

    if keyname == "Unknown" or key.Value == 27 then
        return "None"
    end

    if keyNames[keyname] then
        keyname = keyNames[keyname]
    end
    if Nate then
        return colemak[keyname] or keyname
    else
        return keyname
    end
end

local invalidfilekeys = {
    ["\\"] = true,
    ["/"] = true,
    [":"] = true,
    ["*"] = true,
    ["?"] = true,
    ['"'] = true,
    ["<"] = true,
    [">"] = true,
    ["|"] = true,
}

local function KeyModifierToName(key, filename)
    if keymodifiernames[key] ~= nil then
        if filename then
            if invalidfilekeys[keymodifiernames[key]] then
                return ""
            else
                return keymodifiernames[key]
            end
        else
            return keymodifiernames[key]
        end
    else
        return ""
    end
end

local allrender = {}

local RGB = Color3.fromRGB
local Draw = {}
do
    function Draw:UnRender()
        for k, v in pairs(allrender) do
            for k1, v1 in pairs(v) do
                --warn(k1, v1)
                -- ANCHOR WHAT THE FUCK IS GOING ON WITH THIS WHY IS THIS ERRORING BECAUSE OF NUMBER
                if v1 and type(v1) ~= "number" and v1.__OBJECT_EXISTS then
                    v1:Remove()
                else
                    --rconsolewarn(tostring(k),tostring(v),tostring(k1),tostring(v1)) -- idfk why but this shit doesn't print anything out. might as well have it commented out though -nata april 1 21
                end
            end
        end
    end

    function Draw:OutlinedRect(visible, pos_x, pos_y, width, height, clr, tablename)
        local temptable = Drawing.new("Square")
        temptable.Visible = visible
        temptable.Position = Vector2.new(pos_x, pos_y)
        temptable.Size = Vector2.new(width, height)
        temptable.Color = RGB(clr[1], clr[2], clr[3])
        temptable.Filled = false
        temptable.Thickness = 0
        temptable.Transparency = clr[4] / 255
        table.insert(tablename, temptable)
        if not table.find(allrender, tablename) then
            table.insert(allrender, tablename)
        end
    end

    function Draw:FilledRect(visible, pos_x, pos_y, width, height, clr, tablename)
        local temptable = Drawing.new("Square")
        temptable.Visible = visible
        temptable.Position = Vector2.new(pos_x, pos_y)
        temptable.Size = Vector2.new(width, height)
        temptable.Color = RGB(clr[1], clr[2], clr[3])
        temptable.Filled = true
        temptable.Thickness = 0
        temptable.Transparency = clr[4] / 255
        table.insert(tablename, temptable)
        if not table.find(allrender, tablename) then
            table.insert(allrender, tablename)
        end
    end

    function Draw:Line(visible, thickness, start_x, start_y, end_x, end_y, clr, tablename)
        temptable = Drawing.new("Line")
        temptable.Visible = visible
        temptable.Thickness = thickness
        temptable.From = Vector2.new(start_x, start_y)
        temptable.To = Vector2.new(end_x, end_y)
        temptable.Color = RGB(clr[1], clr[2], clr[3])
        temptable.Transparency = clr[4] / 255
        table.insert(tablename, temptable)
        if not table.find(allrender, tablename) then
            table.insert(allrender, tablename)
        end
    end

    function Draw:Image(visible, imagedata, pos_x, pos_y, width, height, transparency, tablename)
        local temptable = Drawing.new("Image")
        temptable.Visible = visible
        temptable.Position = Vector2.new(pos_x, pos_y)
        temptable.Size = Vector2.new(width, height)
        temptable.Transparency = transparency
        temptable.Data = imagedata or placeholderImage
        table.insert(tablename, temptable)
        if not table.find(allrender, tablename) then
            table.insert(allrender, tablename)
        end
    end

    function Draw:Text(text, font, visible, pos_x, pos_y, size, centered, clr, tablename)
        local temptable = Drawing.new("Text")
        temptable.Text = text
        temptable.Visible = visible
        temptable.Position = Vector2.new(pos_x, pos_y)
        temptable.Size = size
        temptable.Center = centered
        temptable.Color = RGB(clr[1], clr[2], clr[3])
        temptable.Transparency = clr[4] / 255
        temptable.Outline = false
        temptable.Font = font
        table.insert(tablename, temptable)
        if not table.find(allrender, tablename) then
            table.insert(allrender, tablename)
        end
    end

    function Draw:OutlinedText(text, font, visible, pos_x, pos_y, size, centered, clr, clr2, tablename)
        local temptable = Drawing.new("Text")
        temptable.Text = text
        temptable.Visible = visible
        temptable.Position = Vector2.new(pos_x, pos_y)
        temptable.Size = size
        temptable.Center = centered
        temptable.Color = RGB(clr[1], clr[2], clr[3])
        temptable.Transparency = clr[4] / 255
        temptable.Outline = true
        temptable.OutlineColor = RGB(clr2[1], clr2[2], clr2[3])
        temptable.Font = font
        if not table.find(allrender, tablename) then
            table.insert(allrender, tablename)
        end
        if tablename then
            table.insert(tablename, temptable)
        end
        return temptable
    end

    function Draw:Triangle(visible, filled, pa, pb, pc, clr, tablename)
        clr = clr or { 255, 255, 255, 1 }
        local temptable = Drawing.new("Triangle")
        temptable.Visible = visible
        temptable.Transparency = clr[4] or 1
        temptable.Color = RGB(clr[1], clr[2], clr[3])
        temptable.Thickness = 4.1
        if pa and pb and pc then
            temptable.PointA = Vector2.new(pa[1], pa[2])
            temptable.PointB = Vector2.new(pb[1], pb[2])
            temptable.PointC = Vector2.new(pc[1], pc[2])
        end
        temptable.Filled = filled
        table.insert(tablename, temptable)
        if tablename and not table.find(allrender, tablename) then
            table.insert(allrender, tablename)
        end
    end

    function Draw:Circle(visible, pos_x, pos_y, size, thickness, sides, clr, tablename)
        local temptable = Drawing.new("Circle")
        temptable.Position = Vector2.new(pos_x, pos_y)
        temptable.Visible = visible
        temptable.Radius = size
        temptable.Thickness = thickness
        temptable.NumSides = sides
        temptable.Transparency = clr[4]
        temptable.Filled = false
        temptable.Color = RGB(clr[1], clr[2], clr[3])
        table.insert(tablename, temptable)
        if not table.find(allrender, tablename) then
            table.insert(allrender, tablename)
        end
    end

    function Draw:FilledCircle(visible, pos_x, pos_y, size, thickness, sides, clr, tablename)
        local temptable = Drawing.new("Circle")
        temptable.Position = Vector2.new(pos_x, pos_y)
        temptable.Visible = visible
        temptable.Radius = size
        temptable.Thickness = thickness
        temptable.NumSides = sides
        temptable.Transparency = clr[4]
        temptable.Filled = true
        temptable.Color = RGB(clr[1], clr[2], clr[3])
        table.insert(tablename, temptable)
        if not table.find(allrender, tablename) then
            table.insert(allrender, tablename)
        end
    end

    --ANCHOR MENU ELEMENTS

    function Draw:MenuOutlinedRect(visible, pos_x, pos_y, width, height, clr, tablename)
        Draw:OutlinedRect(visible, pos_x + menu.x, pos_y + menu.y, width, height, clr, tablename)
        table.insert(menu.postable, { tablename[#tablename], pos_x, pos_y })

        if menu.log_multi ~= nil then
            table.insert(menu.mgrouptabz[menu.log_multi[1]][menu.log_multi[2]], tablename[#tablename])
        end
    end

    function Draw:MenuFilledRect(visible, pos_x, pos_y, width, height, clr, tablename)
        Draw:FilledRect(visible, pos_x + menu.x, pos_y + menu.y, width, height, clr, tablename)
        table.insert(menu.postable, { tablename[#tablename], pos_x, pos_y })

        if menu.log_multi ~= nil then
            table.insert(menu.mgrouptabz[menu.log_multi[1]][menu.log_multi[2]], tablename[#tablename])
        end
    end

    function Draw:MenuImage(visible, imagedata, pos_x, pos_y, width, height, transparency, tablename)
        Draw:Image(visible, imagedata, pos_x + menu.x, pos_y + menu.y, width, height, transparency, tablename)
        table.insert(menu.postable, { tablename[#tablename], pos_x, pos_y })

        if menu.log_multi ~= nil then
            table.insert(menu.mgrouptabz[menu.log_multi[1]][menu.log_multi[2]], tablename[#tablename])
        end
    end

    function Draw:MenuBigText(text, visible, centered, pos_x, pos_y, tablename)
        local text = Draw:OutlinedText(
            text,
            2,
            visible,
            pos_x + menu.x,
            pos_y + menu.y,
            13,
            centered,
            { 255, 255, 255, 255 },
            { 0, 0, 0 },
            tablename
        )
        table.insert(menu.postable, { tablename[#tablename], pos_x, pos_y })

        if menu.log_multi ~= nil then
            table.insert(menu.mgrouptabz[menu.log_multi[1]][menu.log_multi[2]], tablename[#tablename])
        end

        return text
    end

    function Draw:CoolBox(name, x, y, width, height, tab)
        Draw:MenuOutlinedRect(true, x, y, width, height, { 0, 0, 0, 255 }, tab)
        Draw:MenuOutlinedRect(true, x + 1, y + 1, width - 2, height - 2, { 20, 20, 20, 255 }, tab)
        Draw:MenuOutlinedRect(true, x + 2, y + 2, width - 3, 1, { 127, 72, 163, 255 }, tab)
        table.insert(menu.clrs.norm, tab[#tab])
        Draw:MenuOutlinedRect(true, x + 2, y + 3, width - 3, 1, { 87, 32, 123, 255 }, tab)
        table.insert(menu.clrs.dark, tab[#tab])
        Draw:MenuOutlinedRect(true, x + 2, y + 4, width - 3, 1, { 20, 20, 20, 255 }, tab)

        for i = 0, 7 do
            Draw:MenuFilledRect(true, x + 2, y + 5 + (i * 2), width - 4, 2, { 45, 45, 45, 255 }, tab)
            tab[#tab].Color = ColorRange(
                i,
                { [1] = { start = 0, color = RGB(45, 45, 45) }, [2] = { start = 7, color = RGB(35, 35, 35) } }
            )
        end

        Draw:MenuBigText(name, true, false, x + 6, y + 5, tab)
    end

    function Draw:CoolMultiBox(names, x, y, width, height, tab)
        Draw:MenuOutlinedRect(true, x, y, width, height, { 0, 0, 0, 255 }, tab)
        Draw:MenuOutlinedRect(true, x + 1, y + 1, width - 2, height - 2, { 20, 20, 20, 255 }, tab)
        Draw:MenuOutlinedRect(true, x + 2, y + 2, width - 3, 1, { 127, 72, 163, 255 }, tab)
        table.insert(menu.clrs.norm, tab[#tab])
        Draw:MenuOutlinedRect(true, x + 2, y + 3, width - 3, 1, { 87, 32, 123, 255 }, tab)
        table.insert(menu.clrs.dark, tab[#tab])
        Draw:MenuOutlinedRect(true, x + 2, y + 4, width - 3, 1, { 20, 20, 20, 255 }, tab)

        --{35, 35, 35, 255}

        Draw:MenuFilledRect(true, x + 2, y + 5, width - 4, 18, { 30, 30, 30, 255 }, tab)
        Draw:MenuFilledRect(true, x + 2, y + 21, width - 4, 2, { 20, 20, 20, 255 }, tab)

        local selected = {}
        for i = 0, 8 do
            Draw:MenuFilledRect(true, x + 2, y + 5 + (i * 2), width - 159, 2, { 45, 45, 45, 255 }, tab)
            tab[#tab].Color = ColorRange(
                i,
                { [1] = { start = 0, color = RGB(50, 50, 50) }, [2] = { start = 8, color = RGB(35, 35, 35) } }
            )
            table.insert(selected, { postable = #menu.postable, drawn = tab[#tab] })
        end

        local length = 2
        local selected_pos = {}
        local click_pos = {}
        local nametext = {}
        for i, v in ipairs(names) do
            Draw:MenuBigText(v, true, false, x + 4 + length, y + 5, tab)
            if i == 1 then
                tab[#tab].Color = RGB(255, 255, 255)
            else
                tab[#tab].Color = RGB(170, 170, 170)
            end
            table.insert(nametext, tab[#tab])

            Draw:MenuFilledRect(true, x + length + tab[#tab].TextBounds.X + 8, y + 5, 2, 16, { 20, 20, 20, 255 }, tab)
            table.insert(selected_pos, { pos = x + length, length = tab[#tab - 1].TextBounds.X + 8 })
            table.insert(click_pos, {
                x = x + length,
                y = y + 5,
                width = tab[#tab - 1].TextBounds.X + 8,
                height = 18,
                name = v,
                num = i,
            })
            length += tab[#tab - 1].TextBounds.X + 10
        end

        local settab = 1
        for k, v in pairs(selected) do
            menu.postable[v.postable][2] = selected_pos[settab].pos
            v.drawn.Size = Vector2.new(selected_pos[settab].length, 2)
        end

        return { bar = selected, barpos = selected_pos, click_pos = click_pos, nametext = nametext }

        --Draw:MenuBigText(str, true, false, x + 6, y + 5, tab)
    end

    function Draw:Toggle(name, value, unsafe, x, y, tab)
        Draw:MenuOutlinedRect(true, x, y, 12, 12, { 30, 30, 30, 255 }, tab)
        Draw:MenuOutlinedRect(true, x + 1, y + 1, 10, 10, { 0, 0, 0, 255 }, tab)

        local temptable = {}
        for i = 0, 3 do
            Draw:MenuFilledRect(true, x + 2, y + 2 + (i * 2), 8, 2, { 0, 0, 0, 255 }, tab)
            table.insert(temptable, tab[#tab])
            if value then
                tab[#tab].Color = ColorRange(i, {
                    [1] = { start = 0, color = RGB(menu.mc[1], menu.mc[2], menu.mc[3]) },
                    [2] = { start = 3, color = RGB(menu.mc[1] - 40, menu.mc[2] - 40, menu.mc[3] - 40) },
                })
            else
                tab[#tab].Color = ColorRange(i, {
                    [1] = { start = 0, color = RGB(50, 50, 50) },
                    [2] = { start = 3, color = RGB(30, 30, 30) },
                })
            end
        end

        Draw:MenuBigText(name, true, false, x + 16, y - 1, tab)
        if unsafe == true then
            tab[#tab].Color = RGB(245, 239, 120)
        end
        table.insert(temptable, tab[#tab])
        return temptable
    end

    function Draw:Keybind(key, x, y, tab)
        local temptable = {}
        Draw:MenuFilledRect(true, x, y, 44, 16, { 25, 25, 25, 255 }, tab)
        Draw:MenuBigText(KeyEnumToName(key), true, true, x + 22, y + 1, tab)
        table.insert(temptable, tab[#tab])
        Draw:MenuOutlinedRect(true, x, y, 44, 16, { 30, 30, 30, 255 }, tab)
        table.insert(temptable, tab[#tab])
        Draw:MenuOutlinedRect(true, x + 1, y + 1, 42, 14, { 0, 0, 0, 255 }, tab)

        return temptable
    end

    function Draw:ColorPicker(color, x, y, tab)
        local temptable = {}

        Draw:MenuOutlinedRect(true, x, y, 28, 14, { 30, 30, 30, 255 }, tab)
        Draw:MenuOutlinedRect(true, x + 1, y + 1, 26, 12, { 0, 0, 0, 255 }, tab)

        Draw:MenuFilledRect(true, x + 2, y + 2, 24, 10, { color[1], color[2], color[3], 255 }, tab)
        table.insert(temptable, tab[#tab])
        Draw:MenuOutlinedRect(true, x + 2, y + 2, 24, 10, { color[1] - 40, color[2] - 40, color[3] - 40, 255 }, tab)
        table.insert(temptable, tab[#tab])
        Draw:MenuOutlinedRect(true, x + 3, y + 3, 22, 8, { color[1] - 40, color[2] - 40, color[3] - 40, 255 }, tab)
        table.insert(temptable, tab[#tab])

        return temptable
    end

    function Draw:Slider(name, stradd, value, minvalue, maxvalue, customvals, rounded, x, y, length, tab)
        Draw:MenuBigText(name, true, false, x, y - 3, tab)

        for i = 0, 3 do
            Draw:MenuFilledRect(true, x + 2, y + 14 + (i * 2), length - 4, 2, { 0, 0, 0, 255 }, tab)
            tab[#tab].Color = ColorRange(
                i,
                { [1] = { start = 0, color = RGB(50, 50, 50) }, [2] = { start = 3, color = RGB(30, 30, 30) } }
            )
        end

        local temptable = {}
        for i = 0, 3 do
            Draw:MenuFilledRect(
                true,
                x + 2,
                y + 14 + (i * 2),
                (length - 4) * ((value - minvalue) / (maxvalue - minvalue)),
                2,
                { 0, 0, 0, 255 },
                tab
            )
            table.insert(temptable, tab[#tab])
            tab[#tab].Color = ColorRange(i, {
                [1] = { start = 0, color = RGB(menu.mc[1], menu.mc[2], menu.mc[3]) },
                [2] = { start = 3, color = RGB(menu.mc[1] - 40, menu.mc[2] - 40, menu.mc[3] - 40) },
            })
        end
        Draw:MenuOutlinedRect(true, x, y + 12, length, 12, { 30, 30, 30, 255 }, tab)
        Draw:MenuOutlinedRect(true, x + 1, y + 13, length - 2, 10, { 0, 0, 0, 255 }, tab)

        local textstr = ""

        if stradd == nil then
            stradd = ""
        end

        local decplaces = rounded and string.rep("0", math.log(1 / rounded) / math.log(10)) or 1
        if rounded and value == math.floor(value * decplaces) then
            textstr = tostring(value) .. "." .. decplaces .. stradd
        else
            textstr = tostring(value) .. stradd
        end

        Draw:MenuBigText(customvals[value] or textstr, true, true, x + (length * 0.5), y + 11, tab)
        table.insert(temptable, tab[#tab])
        table.insert(temptable, stradd)
        return temptable
    end

    function Draw:Dropbox(name, value, values, x, y, length, tab)
        local temptable = {}
        Draw:MenuBigText(name, true, false, x, y - 3, tab)

        for i = 0, 7 do
            Draw:MenuFilledRect(true, x + 2, y + 14 + (i * 2), length - 4, 2, { 0, 0, 0, 255 }, tab)
            tab[#tab].Color = ColorRange(
                i,
                { [1] = { start = 0, color = RGB(50, 50, 50) }, [2] = { start = 7, color = RGB(35, 35, 35) } }
            )
        end

        Draw:MenuOutlinedRect(true, x, y + 12, length, 22, { 30, 30, 30, 255 }, tab)
        Draw:MenuOutlinedRect(true, x + 1, y + 13, length - 2, 20, { 0, 0, 0, 255 }, tab)

        Draw:MenuBigText(tostring(values[value]), true, false, x + 6, y + 16, tab)
        table.insert(temptable, tab[#tab])

        Draw:MenuBigText("-", true, false, x - 17 + length, y + 16, tab)
        table.insert(temptable, tab[#tab])

        return temptable
    end

    function Draw:Combobox(name, values, x, y, length, tab)
        local temptable = {}
        Draw:MenuBigText(name, true, false, x, y - 3, tab)

        for i = 0, 7 do
            Draw:MenuFilledRect(true, x + 2, y + 14 + (i * 2), length - 4, 2, { 0, 0, 0, 255 }, tab)
            tab[#tab].Color = ColorRange(
                i,
                { [1] = { start = 0, color = RGB(50, 50, 50) }, [2] = { start = 7, color = RGB(35, 35, 35) } }
            )
        end

        Draw:MenuOutlinedRect(true, x, y + 12, length, 22, { 30, 30, 30, 255 }, tab)
        Draw:MenuOutlinedRect(true, x + 1, y + 13, length - 2, 20, { 0, 0, 0, 255 }, tab)
        local textthing = ""
        for k, v in pairs(values) do
            if v[2] then
                if textthing == "" then
                    textthing = v[1]
                else
                    textthing ..= ", " .. v[1]
                end
            end
        end
        textthing = string_cut(textthing, 25)
        textthing = textthing ~= "" and textthing or "None"
        Draw:MenuBigText(textthing, true, false, x + 6, y + 16, tab)
        table.insert(temptable, tab[#tab])

        Draw:MenuBigText("...", true, false, x - 27 + length, y + 16, tab)
        table.insert(temptable, tab[#tab])

        return temptable
    end

    function Draw:Button(name, x, y, length, tab)
        local temptable = {}

        for i = 0, 8 do
            Draw:MenuFilledRect(true, x + 2, y + 2 + (i * 2), length - 4, 2, { 0, 0, 0, 255 }, tab)
            tab[#tab].Color = ColorRange(
                i,
                { [1] = { start = 0, color = RGB(50, 50, 50) }, [2] = { start = 8, color = RGB(35, 35, 35) } }
            )
            table.insert(temptable, tab[#tab])
        end

        Draw:MenuOutlinedRect(true, x, y, length, 22, { 30, 30, 30, 255 }, tab)
        Draw:MenuOutlinedRect(true, x + 1, y + 1, length - 2, 20, { 0, 0, 0, 255 }, tab)
        temptable.text = Draw:MenuBigText(name, true, true, x + math.floor(length * 0.5), y + 4, tab)

        return temptable
    end

    function Draw:List(name, x, y, length, maxamount, columns, tab)
        local temptable = { uparrow = {}, downarrow = {}, liststuff = { rows = {}, words = {} } }

        for i, v in ipairs(name) do
            Draw:MenuBigText(
                v,
                true,
                false,
                (math.floor(length / columns) * i) - math.floor(length / columns) + 30,
                y - 3,
                tab
            )
        end

        Draw:MenuOutlinedRect(true, x, y + 12, length, 22 * maxamount + 4, { 30, 30, 30, 255 }, tab)
        Draw:MenuOutlinedRect(true, x + 1, y + 13, length - 2, 22 * maxamount + 2, { 0, 0, 0, 255 }, tab)

        Draw:MenuFilledRect(true, x + length - 7, y + 16, 1, 1, { menu.mc[1], menu.mc[2], menu.mc[3], 255 }, tab)
        table.insert(temptable.uparrow, tab[#tab])
        table.insert(menu.clrs.norm, tab[#tab])
        Draw:MenuFilledRect(true, x + length - 8, y + 17, 3, 1, { menu.mc[1], menu.mc[2], menu.mc[3], 255 }, tab)
        table.insert(temptable.uparrow, tab[#tab])
        table.insert(menu.clrs.norm, tab[#tab])
        Draw:MenuFilledRect(true, x + length - 9, y + 18, 5, 1, { menu.mc[1], menu.mc[2], menu.mc[3], 255 }, tab)
        table.insert(temptable.uparrow, tab[#tab])
        table.insert(menu.clrs.norm, tab[#tab])

        Draw:MenuFilledRect(
            true,
            x + length - 7,
            y + 16 + (22 * maxamount + 4) - 9,
            1,
            1,
            { menu.mc[1], menu.mc[2], menu.mc[3], 255 },
            tab
        )
        table.insert(temptable.downarrow, tab[#tab])
        table.insert(menu.clrs.norm, tab[#tab])
        Draw:MenuFilledRect(
            true,
            x + length - 8,
            y + 16 + (22 * maxamount + 4) - 10,
            3,
            1,
            { menu.mc[1], menu.mc[2], menu.mc[3], 255 },
            tab
        )
        table.insert(temptable.downarrow, tab[#tab])
        table.insert(menu.clrs.norm, tab[#tab])
        Draw:MenuFilledRect(
            true,
            x + length - 9,
            y + 16 + (22 * maxamount + 4) - 11,
            5,
            1,
            { menu.mc[1], menu.mc[2], menu.mc[3], 255 },
            tab
        )
        table.insert(temptable.downarrow, tab[#tab])
        table.insert(menu.clrs.norm, tab[#tab])

        for i = 1, maxamount do
            temptable.liststuff.rows[i] = {}
            if i ~= maxamount then
                Draw:MenuOutlinedRect(true, x + 4, (y + 13) + (22 * i), length - 8, 2, { 20, 20, 20, 255 }, tab)
                table.insert(temptable.liststuff.rows[i], tab[#tab])
            end

            if columns ~= nil then
                for i1 = 1, columns - 1 do
                    Draw:MenuOutlinedRect(
                        true,
                        x + math.floor(length / columns) * i1,
                        (y + 13) + (22 * i) - 18,
                        2,
                        16,
                        { 20, 20, 20, 255 },
                        tab
                    )
                    table.insert(temptable.liststuff.rows[i], tab[#tab])
                end
            end

            temptable.liststuff.words[i] = {}
            if columns ~= nil then
                for i1 = 1, columns do
                    Draw:MenuBigText(
                        "",
                        true,
                        false,
                        (x + math.floor(length / columns) * i1) - math.floor(length / columns) + 5,
                        (y + 13) + (22 * i) - 16,
                        tab
                    )
                    table.insert(temptable.liststuff.words[i], tab[#tab])
                end
            else
                Draw:MenuBigText("", true, false, x + 5, (y + 13) + (22 * i) - 16, tab)
                table.insert(temptable.liststuff.words[i], tab[#tab])
            end
        end

        return temptable
    end

    function Draw:ImageWithText(size, image, text, x, y, tab)
        local temptable = {}
        Draw:MenuOutlinedRect(true, x, y, size + 4, size + 4, { 30, 30, 30, 255 }, tab)
        Draw:MenuOutlinedRect(true, x + 1, y + 1, size + 2, size + 2, { 0, 0, 0, 255 }, tab)
        Draw:MenuFilledRect(true, x + 2, y + 2, size, size, { 40, 40, 40, 255 }, tab)

        Draw:MenuBigText(text, true, false, x + size + 8, y, tab)
        table.insert(temptable, tab[#tab])

        Draw:MenuImage(true, BBOT_IMAGES[5], x + 2, y + 2, size, size, 1, tab)
        table.insert(temptable, tab[#tab])

        return temptable
    end

    function Draw:TextBox(name, text, x, y, length, tab)
        for i = 0, 8 do
            Draw:MenuFilledRect(true, x + 2, y + 2 + (i * 2), length - 4, 2, { 0, 0, 0, 255 }, tab)
            tab[#tab].Color = ColorRange(
                i,
                { [1] = { start = 0, color = RGB(50, 50, 50) }, [2] = { start = 8, color = RGB(35, 35, 35) } }
            )
        end

        Draw:MenuOutlinedRect(true, x, y, length, 22, { 30, 30, 30, 255 }, tab)
        Draw:MenuOutlinedRect(true, x + 1, y + 1, length - 2, 20, { 0, 0, 0, 255 }, tab)
        Draw:MenuBigText(text, true, false, x + 6, y + 4, tab)

        return tab[#tab]
    end
end

--funny graf
local networkin = {
    incoming = {},
    outgoing = {},
}

for i = 1, 21 do
    networkin.incoming[i] = 20
    networkin.outgoing[i] = 2
end
local lasttick = tick()

local infopos = 400

local graphs = {
    incoming = {
        pos = {
            x = 35,
            y = infopos,
        },
        sides = {},
        graph = {},
    },
    outgoing = {
        pos = {
            x = 35,
            y = infopos + 97,
        },
        sides = {},
        graph = {},
    },
    other = {},
}
--- incoming
Draw:OutlinedText(
    "incoming kbps: 20",
    2,
    false,
    graphs.incoming.pos.x - 1,
    graphs.incoming.pos.y - 15,
    13,
    false,
    { 255, 255, 255, 255 },
    { 10, 10, 10 },
    graphs.incoming.sides
)
Draw:OutlinedText(
    "80",
    2,
    false,
    graphs.incoming.pos.x - 21,
    graphs.incoming.pos.y - 7,
    13,
    false,
    { 255, 255, 255, 255 },
    { 10, 10, 10 },
    graphs.incoming.sides
)

Draw:FilledRect(
    false,
    graphs.incoming.pos.x - 1,
    graphs.incoming.pos.y - 1,
    222,
    82,
    { 10, 10, 10, 50 },
    graphs.incoming.sides
)

Draw:Line(
    false,
    3,
    graphs.incoming.pos.x,
    graphs.incoming.pos.y - 1,
    graphs.incoming.pos.x,
    graphs.incoming.pos.y + 82,
    { 20, 20, 20, 225 },
    graphs.incoming.sides
)
Draw:Line(
    false,
    3,
    graphs.incoming.pos.x,
    graphs.incoming.pos.y + 80,
    graphs.incoming.pos.x + 221,
    graphs.incoming.pos.y + 80,
    { 20, 20, 20, 225 },
    graphs.incoming.sides
)
Draw:Line(
    false,
    3,
    graphs.incoming.pos.x,
    graphs.incoming.pos.y,
    graphs.incoming.pos.x - 6,
    graphs.incoming.pos.y,
    { 20, 20, 20, 225 },
    graphs.incoming.sides
)

Draw:Line(
    false,
    1,
    graphs.incoming.pos.x,
    graphs.incoming.pos.y,
    graphs.incoming.pos.x,
    graphs.incoming.pos.y + 80,
    { 255, 255, 255, 225 },
    graphs.incoming.sides
)
Draw:Line(
    false,
    1,
    graphs.incoming.pos.x,
    graphs.incoming.pos.y + 80,
    graphs.incoming.pos.x + 220,
    graphs.incoming.pos.y + 80,
    { 255, 255, 255, 225 },
    graphs.incoming.sides
)
Draw:Line(
    false,
    1,
    graphs.incoming.pos.x,
    graphs.incoming.pos.y,
    graphs.incoming.pos.x - 5,
    graphs.incoming.pos.y,
    { 255, 255, 255, 225 },
    graphs.incoming.sides
)

for i = 1, 20 do
    Draw:Line(false, 1, 10, 10, 10, 10, { 255, 255, 255, 225 }, graphs.incoming.graph)
end

Draw:Line(false, 1, 10, 10, 10, 10, { 68, 255, 0, 255 }, graphs.incoming.graph)
Draw:OutlinedText("avg: 20", 2, false, 20, 20, 13, false, { 68, 255, 0, 255 }, { 10, 10, 10 }, graphs.incoming.graph)

--- outgoing
Draw:OutlinedText(
    "outgoing kbps: 5",
    2,
    false,
    graphs.outgoing.pos.x - 1,
    graphs.outgoing.pos.y - 15,
    13,
    false,
    { 255, 255, 255, 255 },
    { 10, 10, 10 },
    graphs.outgoing.sides
)
Draw:OutlinedText(
    "10",
    2,
    false,
    graphs.outgoing.pos.x - 21,
    graphs.outgoing.pos.y - 7,
    13,
    false,
    { 255, 255, 255, 255 },
    { 10, 10, 10 },
    graphs.outgoing.sides
)

Draw:FilledRect(
    false,
    graphs.outgoing.pos.x - 1,
    graphs.outgoing.pos.y - 1,
    222,
    82,
    { 10, 10, 10, 50 },
    graphs.outgoing.sides
)

Draw:Line(
    false,
    3,
    graphs.outgoing.pos.x,
    graphs.outgoing.pos.y - 1,
    graphs.outgoing.pos.x,
    graphs.outgoing.pos.y + 82,
    { 20, 20, 20, 225 },
    graphs.outgoing.sides
)
Draw:Line(
    false,
    3,
    graphs.outgoing.pos.x,
    graphs.outgoing.pos.y + 80,
    graphs.outgoing.pos.x + 221,
    graphs.outgoing.pos.y + 80,
    { 20, 20, 20, 225 },
    graphs.outgoing.sides
)
Draw:Line(
    false,
    3,
    graphs.outgoing.pos.x,
    graphs.outgoing.pos.y,
    graphs.outgoing.pos.x - 6,
    graphs.outgoing.pos.y,
    { 20, 20, 20, 225 },
    graphs.outgoing.sides
)

Draw:Line(
    false,
    1,
    graphs.outgoing.pos.x,
    graphs.outgoing.pos.y,
    graphs.outgoing.pos.x,
    graphs.outgoing.pos.y + 80,
    { 255, 255, 255, 225 },
    graphs.outgoing.sides
)
Draw:Line(
    false,
    1,
    graphs.outgoing.pos.x,
    graphs.outgoing.pos.y + 80,
    graphs.outgoing.pos.x + 220,
    graphs.outgoing.pos.y + 80,
    { 255, 255, 255, 225 },
    graphs.outgoing.sides
)
Draw:Line(
    false,
    1,
    graphs.outgoing.pos.x,
    graphs.outgoing.pos.y,
    graphs.outgoing.pos.x - 5,
    graphs.outgoing.pos.y,
    { 255, 255, 255, 225 },
    graphs.outgoing.sides
)

for i = 1, 20 do
    Draw:Line(false, 1, 10, 10, 10, 10, { 255, 255, 255, 225 }, graphs.outgoing.graph)
end

Draw:Line(false, 1, 10, 10, 10, 10, { 68, 255, 0, 255 }, graphs.outgoing.graph)
Draw:OutlinedText("avg: 20", 2, false, 20, 20, 13, false, { 68, 255, 0, 255 }, { 10, 10, 10 }, graphs.outgoing.graph)
-- the fuckin fps and stuff i think xDDDDDd

Draw:OutlinedText(
    "loading...",
    2,
    false,
    35,
    infopos + 180,
    13,
    false,
    { 255, 255, 255, 255 },
    { 10, 10, 10 },
    graphs.other
)

Draw:OutlinedText(
    "[DEBUG LOGS]",
    2,
    false,
    35,
    infopos - 200,
    13,
    false,
    { 255, 255, 255, 255 },
    { 10, 10, 10 },
    graphs.other
)

-- finish

local loadingthing = Draw:OutlinedText(
    "Loading...",
    2,
    true,
    math.floor(SCREEN_SIZE.x / 16),
    math.floor(SCREEN_SIZE.y / 16),
    13,
    true,
    { 255, 50, 200, 255 },
    { 0, 0, 0 }
)

function menu.Initialize(menutable)
    local bbmenu = {} -- this one is for the rendering n shi
    do
        Draw:MenuOutlinedRect(true, 0, 0, menu.w, menu.h, { 0, 0, 0, 255 }, bbmenu) -- first gradent or whatever
        Draw:MenuOutlinedRect(true, 1, 1, menu.w - 2, menu.h - 2, { 20, 20, 20, 255 }, bbmenu)
        Draw:MenuOutlinedRect(true, 2, 2, menu.w - 3, 1, { 127, 72, 163, 255 }, bbmenu)
        table.insert(menu.clrs.norm, bbmenu[#bbmenu])
        Draw:MenuOutlinedRect(true, 2, 3, menu.w - 3, 1, { 87, 32, 123, 255 }, bbmenu)
        table.insert(menu.clrs.dark, bbmenu[#bbmenu])
        Draw:MenuOutlinedRect(true, 2, 4, menu.w - 3, 1, { 20, 20, 20, 255 }, bbmenu)

        for i = 0, 19 do
            Draw:MenuFilledRect(true, 2, 5 + i, menu.w - 4, 1, { 20, 20, 20, 255 }, bbmenu)
            bbmenu[6 + i].Color = ColorRange(
                i,
                { [1] = { start = 0, color = RGB(50, 50, 50) }, [2] = { start = 20, color = RGB(35, 35, 35) } }
            )
        end
        Draw:MenuFilledRect(true, 2, 25, menu.w - 4, menu.h - 27, { 35, 35, 35, 255 }, bbmenu)

        Draw:MenuBigText(MenuName or "Bitch Bot", true, false, 6, 6, bbmenu)

        Draw:MenuOutlinedRect(true, 8, 22, menu.w - 16, menu.h - 30, { 0, 0, 0, 255 }, bbmenu) -- all this shit does the 2nd gradent
        Draw:MenuOutlinedRect(true, 9, 23, menu.w - 18, menu.h - 32, { 20, 20, 20, 255 }, bbmenu)
        Draw:MenuOutlinedRect(true, 10, 24, menu.w - 19, 1, { 127, 72, 163, 255 }, bbmenu)
        table.insert(menu.clrs.norm, bbmenu[#bbmenu])
        Draw:MenuOutlinedRect(true, 10, 25, menu.w - 19, 1, { 87, 32, 123, 255 }, bbmenu)
        table.insert(menu.clrs.dark, bbmenu[#bbmenu])
        Draw:MenuOutlinedRect(true, 10, 26, menu.w - 19, 1, { 20, 20, 20, 255 }, bbmenu)

        for i = 0, 14 do
            Draw:MenuFilledRect(true, 10, 27 + (i * 2), menu.w - 20, 2, { 45, 45, 45, 255 }, bbmenu)
            bbmenu[#bbmenu].Color = ColorRange(
                i,
                { [1] = { start = 0, color = RGB(50, 50, 50) }, [2] = { start = 15, color = RGB(35, 35, 35) } }
            )
        end
        Draw:MenuFilledRect(true, 10, 57, menu.w - 20, menu.h - 67, { 35, 35, 35, 255 }, bbmenu)
    end
    -- ok now the cool part :D
    --ANCHOR menu stuffz

    local tabz = {}
    for i = 1, #menutable do
        tabz[i] = {}
    end

    local tabs = {} -- i like tabby catz 🐱🐱🐱

    menu.multigroups = {}

    for k, v in pairs(menutable) do
        Draw:MenuFilledRect(
            true,
            10 + ((k - 1) * ((menu.w - 20) / #menutable)),
            27,
            ((menu.w - 20) / #menutable),
            32,
            { 30, 30, 30, 255 },
            bbmenu
        )
        Draw:MenuOutlinedRect(
            true,
            10 + ((k - 1) * ((menu.w - 20) / #menutable)),
            27,
            ((menu.w - 20) / #menutable),
            32,
            { 20, 20, 20, 255 },
            bbmenu
        )
        Draw:MenuBigText(
            v.name,
            true,
            true,
            math.floor(10 + ((k - 1) * ((menu.w - 20) / #menutable)) + (((menu.w - 20) / #menutable) * 0.5)),
            35,
            bbmenu
        )
        table.insert(tabs, { bbmenu[#bbmenu - 2], bbmenu[#bbmenu - 1], bbmenu[#bbmenu] })
        table.insert(menu.tabnames, v.name)

        menu.options[v.name] = {}
        menu.multigroups[v.name] = {}
        menu.mgrouptabz[v.name] = {}

        local y_offies = { left = 66, right = 66 }
        if v.content ~= nil then
            for k1, v1 in pairs(v.content) do
                if v1.autopos ~= nil then
                    v1.width = menu.columns.width
                    if v1.autopos == "left" then
                        v1.x = menu.columns.left
                        v1.y = y_offies.left
                    elseif v1.autopos == "right" then
                        v1.x = menu.columns.right
                        v1.y = y_offies.right
                    end
                end

                local groups = {}

                if type(v1.name) == "table" then
                    groups = v1.name
                else
                    table.insert(groups, v1.name)
                end

                local y_pos = 24

                for g_ind, g_name in ipairs(groups) do
                    menu.options[v.name][g_name] = {}
                    if type(v1.name) == "table" then
                        menu.mgrouptabz[v.name][g_name] = {}
                        menu.log_multi = { v.name, g_name }
                    end

                    local content = nil
                    if type(v1.name) == "table" then
                        y_pos = 28
                        content = v1[g_ind].content
                    else
                        y_pos = 24
                        content = v1.content
                    end


                    if content ~= nil then
                        for k2, v2 in pairs(content) do
                            if v2.type == TOGGLE then
                                menu.options[v.name][g_name][v2.name] = {}
                                local unsafe = false
                                if v2.unsafe then
                                    unsafe = true
                                end
                                menu.options[v.name][g_name][v2.name][4] = Draw:Toggle(v2.name, v2.value, unsafe, v1.x + 8, v1.y + y_pos, tabz[k])
                                menu.options[v.name][g_name][v2.name][1] = v2.value
                                menu.options[v.name][g_name][v2.name][7] = v2.value
                                menu.options[v.name][g_name][v2.name][2] = v2.type
                                menu.options[v.name][g_name][v2.name][3] = { v1.x + 7, v1.y + y_pos - 1 }
                                menu.options[v.name][g_name][v2.name][6] = unsafe
                                menu.options[v.name][g_name][v2.name].tooltip = v2.tooltip or nil
                                if v2.extra ~= nil then
                                    if v2.extra.type == KEYBIND then
                                        menu.options[v.name][g_name][v2.name][5] = {}
                                        menu.options[v.name][g_name][v2.name][5][4] = Draw:Keybind(
                                            v2.extra.key,
                                            v1.x + v1.width - 52,
                                            y_pos + v1.y - 2,
                                            tabz[k]
                                        )
                                        menu.options[v.name][g_name][v2.name][5][1] = v2.extra.key
                                        menu.options[v.name][g_name][v2.name][5][2] = v2.extra.type
                                        menu.options[v.name][g_name][v2.name][5][3] = { v1.x + v1.width - 52, y_pos + v1.y - 2 }
                                        menu.options[v.name][g_name][v2.name][5][5] = false
                                        menu.options[v.name][g_name][v2.name][5].toggletype = v2.extra.toggletype == nil and 1 or v2.extra.toggletype
                                        menu.options[v.name][g_name][v2.name][5].relvalue = false
                                        local event = event.new(("%s %s %s"):format(v.name, g_name, v2.name))
                                        event:connect(function(newval)
                                            if menu:GetVal("Visuals", "Keybinds" ,"Log Keybinds") then
                                                CreateNotification(("%s %s %s has been set to %s"):format(v.name, g_name, v2.name, newval and "true" or "false"))
                                            end
                                        end)
                                        menu.options[v.name][g_name][v2.name][5].event = event
                                        menu.options[v.name][g_name][v2.name][5].bind = table.insert(menu.keybinds, {
                                                menu.options[v.name][g_name][v2.name],
                                                tostring(v2.name),
                                                tostring(g_name),
                                                tostring(v.name),
                                            })
                                    elseif v2.extra.type == COLORPICKER then
                                        menu.options[v.name][g_name][v2.name][5] = {}
                                        menu.options[v.name][g_name][v2.name][5][4] = Draw:ColorPicker(
                                            v2.extra.color,
                                            v1.x + v1.width - 38,
                                            y_pos + v1.y - 1,
                                            tabz[k]
                                        )
                                        menu.options[v.name][g_name][v2.name][5][1] = v2.extra.color
                                        menu.options[v.name][g_name][v2.name][5][2] = v2.extra.type
                                        menu.options[v.name][g_name][v2.name][5][3] = { v1.x + v1.width - 38, y_pos + v1.y - 1 }
                                        menu.options[v.name][g_name][v2.name][5][5] = false
                                        menu.options[v.name][g_name][v2.name][5][6] = v2.extra.name
                                    elseif v2.extra.type == DOUBLE_COLORPICKER then
                                        menu.options[v.name][g_name][v2.name][5] = {}
                                        menu.options[v.name][g_name][v2.name][5][1] = {}
                                        menu.options[v.name][g_name][v2.name][5][1][1] = {}
                                        menu.options[v.name][g_name][v2.name][5][1][2] = {}
                                        menu.options[v.name][g_name][v2.name][5][2] = v2.extra.type
                                        for i = 1, 2 do
                                            menu.options[v.name][g_name][v2.name][5][1][i][4] = Draw:ColorPicker(
                                                v2.extra.color[i],
                                                v1.x + v1.width - 38 - ((i - 1) * 34),
                                                y_pos + v1.y - 1,
                                                tabz[k]
                                            )
                                            menu.options[v.name][g_name][v2.name][5][1][i][1] = v2.extra.color[i]
                                            menu.options[v.name][g_name][v2.name][5][1][i][3] = { v1.x + v1.width - 38 - ((i - 1) * 34), y_pos + v1.y - 1 }
                                            menu.options[v.name][g_name][v2.name][5][1][i][5] = false
                                            menu.options[v.name][g_name][v2.name][5][1][i][6] = v2.extra.name[i]
                                        end
                                    end
                                end
                                y_pos += 18
                            elseif v2.type == SLIDER then
                                menu.options[v.name][g_name][v2.name] = {}
                                menu.options[v.name][g_name][v2.name][4] = Draw:Slider(
                                    v2.name,
                                    v2.stradd,
                                    v2.value,
                                    v2.minvalue,
                                    v2.maxvalue,
                                    v2.custom or {},
                                    v2.decimal,
                                    v1.x + 8,
                                    v1.y + y_pos,
                                    v1.width - 16,
                                    tabz[k]
                                )
                                menu.options[v.name][g_name][v2.name][1] = v2.value
                                menu.options[v.name][g_name][v2.name][2] = v2.type
                                menu.options[v.name][g_name][v2.name][3] = { v1.x + 7, v1.y + y_pos - 1, v1.width - 16 }
                                menu.options[v.name][g_name][v2.name][5] = false
                                menu.options[v.name][g_name][v2.name][6] = { v2.minvalue, v2.maxvalue }
                                menu.options[v.name][g_name][v2.name][7] = { v1.x + 7 + v1.width - 38, v1.y + y_pos - 1 }
                                menu.options[v.name][g_name][v2.name].decimal = v2.decimal == nil and nil or v2.decimal
                                menu.options[v.name][g_name][v2.name].stepsize = v2.stepsize
                                menu.options[v.name][g_name][v2.name].shift_stepsize = v2.shift_stepsize
                                menu.options[v.name][g_name][v2.name].custom = v2.custom or {}

                                y_pos += 30
                            elseif v2.type == DROPBOX then
                                menu.options[v.name][g_name][v2.name] = {}
                                menu.options[v.name][g_name][v2.name][1] = v2.value
                                menu.options[v.name][g_name][v2.name][2] = v2.type
                                menu.options[v.name][g_name][v2.name][5] = false
                                menu.options[v.name][g_name][v2.name][6] = v2.values

                                if v2.x == nil then
                                    menu.options[v.name][g_name][v2.name][3] = { v1.x + 7, v1.y + y_pos - 1, v1.width - 16 }
                                    menu.options[v.name][g_name][v2.name][4] = Draw:Dropbox(
                                        v2.name,
                                        v2.value,
                                        v2.values,
                                        v1.x + 8,
                                        v1.y + y_pos,
                                        v1.width - 16,
                                        tabz[k]
                                    )
                                    y_pos += 40
                                else
                                    menu.options[v.name][g_name][v2.name][3] = { v2.x + 7, v2.y - 1, v2.w }
                                    menu.options[v.name][g_name][v2.name][4] = Draw:Dropbox(v2.name, v2.value, v2.values, v2.x + 8, v2.y, v2.w, tabz[k])
                                end
                            elseif v2.type == COMBOBOX then
                                menu.options[v.name][g_name][v2.name] = {}
                                menu.options[v.name][g_name][v2.name][4] = Draw:Combobox(
                                        v2.name,
                                        v2.values,
                                        v1.x + 8,
                                        v1.y + y_pos,
                                        v1.width - 16,
                                        tabz[k]
                                    )
                                menu.options[v.name][g_name][v2.name][1] = v2.values
                                menu.options[v.name][g_name][v2.name][2] = v2.type
                                menu.options[v.name][g_name][v2.name][3] = { v1.x + 7, v1.y + y_pos - 1, v1.width - 16 }
                                menu.options[v.name][g_name][v2.name][5] = false
                                y_pos += 40
                            elseif v2.type == BUTTON then
                                menu.options[v.name][g_name][v2.name] = {}
                                menu.options[v.name][g_name][v2.name][1] = false
                                menu.options[v.name][g_name][v2.name][2] = v2.type
                                menu.options[v.name][g_name][v2.name].name = v2.name
                                menu.options[v.name][g_name][v2.name].groupbox = g_name
                                menu.options[v.name][g_name][v2.name].tab = v.name -- why is it all v, v1, v2 so ugly
                                menu.options[v.name][g_name][v2.name].doubleclick = v2.doubleclick

                                if v2.x == nil then
                                    menu.options[v.name][g_name][v2.name][3] = { v1.x + 7, v1.y + y_pos - 1, v1.width - 16 }
                                    menu.options[v.name][g_name][v2.name][4] = Draw:Button(v2.name, v1.x + 8, v1.y + y_pos, v1.width - 16, tabz[k])
                                    y_pos += 28
                                else
                                    menu.options[v.name][g_name][v2.name][3] = { v2.x + 7, v2.y - 1, v2.w }
                                    menu.options[v.name][g_name][v2.name][4] = Draw:Button(v2.name, v2.x + 8, v2.y, v2.w, tabz[k])
                                end
                            elseif v2.type == TEXTBOX then
                                menu.options[v.name][g_name][v2.name] = {}
                                menu.options[v.name][g_name][v2.name][4] = Draw:TextBox(v2.name, v2.text, v1.x + 8, v1.y + y_pos, v1.width - 16, tabz[k])
                                menu.options[v.name][g_name][v2.name][1] = v2.text
                                menu.options[v.name][g_name][v2.name][2] = v2.type
                                menu.options[v.name][g_name][v2.name][3] = { v1.x + 7, v1.y + y_pos - 1, v1.width - 16 }
                                menu.options[v.name][g_name][v2.name][5] = false
                                menu.options[v.name][g_name][v2.name][6] = v2.file and true or false
                                y_pos += 28
                            elseif v2.type == "list" then
                                menu.options[v.name][g_name][v2.name] = {}
                                menu.options[v.name][g_name][v2.name][4] = Draw:List(
                                    v2.multiname,
                                    v1.x + 8,
                                    v1.y + y_pos,
                                    v1.width - 16,
                                    v2.size,
                                    v2.columns,
                                    tabz[k]
                                )
                                menu.options[v.name][g_name][v2.name][1] = nil
                                menu.options[v.name][g_name][v2.name][2] = v2.type
                                menu.options[v.name][g_name][v2.name][3] = 1
                                menu.options[v.name][g_name][v2.name][5] = {}
                                menu.options[v.name][g_name][v2.name][6] = v2.size
                                menu.options[v.name][g_name][v2.name][7] = v2.columns
                                menu.options[v.name][g_name][v2.name][8] = { v1.x + 8, v1.y + y_pos, v1.width - 16 }
                                y_pos += 22 + (22 * v2.size)
                            elseif v2.type == IMAGE then
                                menu.options[v.name][g_name][v2.name] = {}
                                menu.options[v.name][g_name][v2.name][1] = Draw:ImageWithText(v2.size, nil, v2.text, v1.x + 8, v1.y + y_pos, tabz[k])
                                menu.options[v.name][g_name][v2.name][2] = v2.type
                            end
                        end
                    end

                    menu.log_multi = nil
                end

                y_pos += 2

                if type(v1.name) ~= "table" then
                    if v1.autopos == nil then
                        Draw:CoolBox(v1.name, v1.x, v1.y, v1.width, v1.height, tabz[k])
                    else
                        if v1.autofill then
                            y_pos = (menu.h - 17) - v1.y
                        elseif v1.size ~= nil then
                            y_pos = v1.size
                        end
                        Draw:CoolBox(v1.name, v1.x, v1.y, v1.width, y_pos, tabz[k])
                        y_offies[v1.autopos] += y_pos + 6
                    end
                else
                    if v1.autofill then
                        y_pos = (menu.h - 17) - v1.y
                        y_offies[v1.autopos] += y_pos + 6
                    elseif v1.size ~= nil then
                        y_pos = v1.size
                        y_offies[v1.autopos] += y_pos + 6
                    end

                    local drawn

                    if v1.autopos == nil then
                        drawn = Draw:CoolMultiBox(v1.name, v1.x, v1.y, v1.width, v1.height, tabz[k])
                    else
                        drawn = Draw:CoolMultiBox(v1.name, v1.x, v1.y, v1.width, y_pos, tabz[k])
                    end

                    local group_vals = {}

                    for _i, _v in ipairs(v1.name) do
                        if _i == 1 then
                            group_vals[_v] = true
                        else
                            group_vals[_v] = false
                        end
                    end
                    table.insert(menu.multigroups[v.name], { vals = group_vals, drawn = drawn })
                end
            end
        end
    end

    menu.list.addval = function(list, option)
        table.insert(list[5], option)
    end

    menu.list.removeval = function(list, optionnum)
        if list[1] == optionnum then
            list[1] = nil
        end
        table.remove(list[5], optionnum)
    end

    menu.list.removeall = function(list)
        list[5] = {}
        for k, v in pairs(list[4].liststuff) do
            for i, v1 in ipairs(v) do
                for i1, v2 in ipairs(v1) do
                    v2.Visible = false
                end
            end
        end
    end

    menu.list.setval = function(list, value)
        list[1] = value
    end

    Draw:MenuOutlinedRect(true, 10, 59, menu.w - 20, menu.h - 69, { 20, 20, 20, 255 }, bbmenu)

    Draw:MenuOutlinedRect(true, 11, 58, ((menu.w - 20) / #menutable) - 2, 2, { 35, 35, 35, 255 }, bbmenu)
    local barguy = { bbmenu[#bbmenu], menu.postable[#menu.postable] }

    local function setActiveTab(slot)
        barguy[1].Position = Vector2.new(
            (menu.x + 11 + ((((menu.w - 20) / #menutable) - 2) * (slot - 1))) + ((slot - 1) * 2),
            menu.y + 58
        )
        barguy[2][2] = (11 + ((((menu.w - 20) / #menutable) - 2) * (slot - 1))) + ((slot - 1) * 2)
        barguy[2][3] = 58

        for k, v in pairs(tabs) do
            if k == slot then
                v[1].Visible = false
                v[3].Color = RGB(255, 255, 255)
            else
                v[3].Color = RGB(170, 170, 170)
                v[1].Visible = true
            end
        end

        for k, v in pairs(tabz) do
            if k == slot then
                for k1, v1 in pairs(v) do
                    v1.Visible = true
                end
            else
                for k1, v1 in pairs(v) do
                    v1.Visible = false
                end
            end
        end

        for k, v in pairs(menu.multigroups) do
            if menu.tabnames[menu.activetab] == k then
                for k1, v1 in pairs(v) do
                    for k2, v2 in pairs(v1.vals) do
                        for k3, v3 in pairs(menu.mgrouptabz[k][k2]) do
                            v3.Visible = v2
                        end
                    end
                end
            end
        end
    end

    setActiveTab(menu.activetab)

    local plusminus = {}

    Draw:OutlinedText("_", 1, false, 10, 10, 14, false, { 225, 225, 225, 255 }, { 20, 20, 20 }, plusminus)
    Draw:OutlinedText("+", 1, false, 10, 10, 14, false, { 225, 225, 225, 255 }, { 20, 20, 20 }, plusminus)

    function menu:SetPlusMinus(value, x, y)
        for i, v in ipairs(plusminus) do
            if value == 0 then
                v.Visible = false
            else
                v.Visible = true
            end
        end

        if value ~= 0 then
            plusminus[1].Position = Vector2.new(x + 3 + menu.x, y - 5 + menu.y)
            plusminus[2].Position = Vector2.new(x + 13 + menu.x, y - 1 + menu.y)

            if value == 1 then
                for i, v in ipairs(plusminus) do
                    v.Color = RGB(225, 225, 225)
                    v.OutlineColor = RGB(20, 20, 20)
                end
            else
                for i, v in ipairs(plusminus) do
                    if i + 1 == value then
                        v.Color = RGB(menu.mc[1], menu.mc[2], menu.mc[3])
                    else
                        v.Color = RGB(255, 255, 255)
                    end
                    v.OutlineColor = RGB(0, 0, 0)
                end
            end
        end
    end

    menu:SetPlusMinus(0, 20, 20)

    --DROP BOX THINGY
    local dropboxthingy = {}
    local dropboxtexty = {}

    Draw:OutlinedRect(false, 20, 20, 100, 22, { 20, 20, 20, 255 }, dropboxthingy)
    Draw:OutlinedRect(false, 21, 21, 98, 20, { 0, 0, 0, 255 }, dropboxthingy)
    Draw:FilledRect(false, 22, 22, 96, 18, { 45, 45, 45, 255 }, dropboxthingy)

    for i = 1, 30 do
        Draw:OutlinedText("", 2, false, 20, 20, 13, false, { 255, 255, 255, 255 }, { 0, 0, 0 }, dropboxtexty)
    end

    function menu:SetDropBox(visible, x, y, length, value, values)
        for k, v in pairs(dropboxthingy) do
            v.Visible = visible
        end

        local size = Vector2.new(length, 21 * (#values + 1) + 3)
        -- if y + size.y > SCREEN_SIZE.y then
        --     y = SCREEN_SIZE.y - size.y
        -- end
        -- if x + size.x > SCREEN_SIZE.x then
        --     x = SCREEN_SIZE.x - size.x
        -- end
        -- if y < 0 then
        --     y = 0
        -- end
        -- if x < 0 then
        --     x = 0
        -- end

        local pos = Vector2.new(x, y)
        dropboxthingy[1].Position = pos
        dropboxthingy[2].Position = Vector2.new(x + 1, y + 1)
        dropboxthingy[3].Position = Vector2.new(x + 2, y + 22)

        dropboxthingy[1].Size = size
        dropboxthingy[2].Size = Vector2.new(length - 2, (21 * (#values + 1)) + 1)
        dropboxthingy[3].Size = Vector2.new(length - 4, (21 * #values) + 1 - 1)


       
        if visible then
            for i = 1, #values do
                dropboxtexty[i].Position = Vector2.new(x + 6, y + 26 + ((i - 1) * 21))
                dropboxtexty[i].Visible = true
                dropboxtexty[i].Text = values[i]
                if i == value then
                    dropboxtexty[i].Color = RGB(menu.mc[1], menu.mc[2], menu.mc[3])
                else
                    dropboxtexty[i].Color = RGB(255, 255, 255)
                end
            end
        else
            for k, v in pairs(dropboxtexty) do
                v.Visible = false
            end
        end
        return pos
    end

    local function set_comboboxthingy(visible, x, y, length, values)
        for k, v in pairs(dropboxthingy) do
            v.Visible = visible
        end
        local size = Vector2.new(length, 22 * (#values + 1) + 2)

        if y + size.y > SCREEN_SIZE.y then
            y = SCREEN_SIZE.y - size.y
        end
        if x + size.x > SCREEN_SIZE.x then
            x = SCREEN_SIZE.x - size.x
        end
        if y < 0 then
            y = 0
        end
        if x < 0 then
            x = 0
        end
        local pos = Vector2.new(x,y)
        dropboxthingy[1].Position = pos
        dropboxthingy[2].Position = Vector2.new(x + 1, y + 1)
        dropboxthingy[3].Position = Vector2.new(x + 2, y + 22)

        dropboxthingy[1].Size = size
        dropboxthingy[2].Size = Vector2.new(length - 2, (22 * (#values + 1)))
        dropboxthingy[3].Size = Vector2.new(length - 4, (22 * #values))

        if visible then
            for i = 1, #values do
                dropboxtexty[i].Position = Vector2.new(x + 6, y + 26 + ((i - 1) * 22))
                dropboxtexty[i].Visible = true
                dropboxtexty[i].Text = values[i][1]
                if values[i][2] then
                    dropboxtexty[i].Color = RGB(menu.mc[1], menu.mc[2], menu.mc[3])
                else
                    dropboxtexty[i].Color = RGB(255, 255, 255)
                end
            end
        else
            for k, v in pairs(dropboxtexty) do
                v.Visible = false
            end
        end
        return pos
    end

    menu:SetDropBox(false, 400, 200, 160, 1, { "HI q", "HI q", "HI q" })

    --MODE SELECT THING
    local modeselect = {}

    Draw:OutlinedRect(false, 20, 20, 100, 22, { 20, 20, 20, 255 }, modeselect)
    Draw:OutlinedRect(false, 21, 21, 98, 20, { 0, 0, 0, 255 }, modeselect)
    Draw:FilledRect(false, 22, 22, 96, 18, { 45, 45, 45, 255 }, modeselect)

    local modeselecttext = { "Hold", "Toggle", "Hold Off", "Always" }
    for i = 1, 4 do
        Draw:OutlinedText(
            modeselecttext[i],
            2,
            false,
            20,
            20,
            13,
            false,
            { 255, 255, 255, 255 },
            { 0, 0, 0 },
            modeselect
        )
    end

    function menu:SetKeybindSelect(visible, x, y, value)
        for k, v in pairs(modeselect) do
            v.Visible = visible
        end

        if visible then
            modeselect[1].Position = Vector2.new(x, y)
            modeselect[2].Position = Vector2.new(x + 1, y + 1)
            modeselect[3].Position = Vector2.new(x + 2, y + 2)

            modeselect[1].Size = Vector2.new(70, 22 * 4 - 1)
            modeselect[2].Size = Vector2.new(70 - 2, 22 * 4 - 3)
            modeselect[3].Size = Vector2.new(70 - 4, 22 * 4 - 5)

            for i = 1, 4 do
                modeselect[i + 3].Position = Vector2.new(x + 6, y + 4 + ((i - 1) * 21))
                if value == i then
                    modeselect[i + 3].Color = RGB(menu.mc[1], menu.mc[2], menu.mc[3])
                else
                    modeselect[i + 3].Color = RGB(255, 255, 255)
                end
            end
        end
    end

    menu:SetKeybindSelect(false, 200, 400, 1)

    --COLOR PICKER
    local cp = {
        x = 400,
        y = 40,
        w = 280,
        h = 211,
        alpha = false,
        dragging_m = false,
        dragging_r = false,
        dragging_b = false,
        hsv = {
            h = 0,
            s = 0,
            v = 0,
            a = 0,
        },
        postable = {},
        drawings = {},
    }

    local function ColorpickerOutline(visible, pos_x, pos_y, width, height, clr, tablename) -- doing all this shit to make it easier for me to make this beat look nice and shit ya fell dog :dog_head:
        Draw:OutlinedRect(visible, pos_x + cp.x, pos_y + cp.y, width, height, clr, tablename)
        table.insert(cp.postable, { tablename[#tablename], pos_x, pos_y })
    end

    local function ColorpickerRect(visible, pos_x, pos_y, width, height, clr, tablename)
        Draw:FilledRect(visible, pos_x + cp.x, pos_y + cp.y, width, height, clr, tablename)
        table.insert(cp.postable, { tablename[#tablename], pos_x, pos_y })
    end

    local function ColorpickerImage(visible, imagedata, pos_x, pos_y, width, height, transparency, tablename)
        Draw:Image(visible, imagedata, pos_x, pos_y, width, height, transparency, tablename)
        table.insert(cp.postable, { tablename[#tablename], pos_x, pos_y })
    end

    local function ColorpickerText(text, visible, centered, pos_x, pos_y, tablename)
        Draw:OutlinedText(
            text,
            2,
            visible,
            pos_x + cp.x,
            pos_y + cp.y,
            13,
            centered,
            { 255, 255, 255, 255 },
            { 0, 0, 0 },
            tablename
        )
        table.insert(cp.postable, { tablename[#tablename], pos_x, pos_y })
    end

    ColorpickerRect(false, 1, 1, cp.w, cp.h, { 35, 35, 35, 255 }, cp.drawings)
    ColorpickerOutline(false, 1, 1, cp.w, cp.h, { 0, 0, 0, 255 }, cp.drawings)
    ColorpickerOutline(false, 2, 2, cp.w - 2, cp.h - 2, { 20, 20, 20, 255 }, cp.drawings)
    ColorpickerOutline(false, 3, 3, cp.w - 3, 1, { 127, 72, 163, 255 }, cp.drawings)
    table.insert(menu.clrs.norm, cp.drawings[#cp.drawings])
    ColorpickerOutline(false, 3, 4, cp.w - 3, 1, { 87, 32, 123, 255 }, cp.drawings)
    table.insert(menu.clrs.dark, cp.drawings[#cp.drawings])
    ColorpickerOutline(false, 3, 5, cp.w - 3, 1, { 20, 20, 20, 255 }, cp.drawings)
    ColorpickerText("color picker :D", false, false, 7, 6, cp.drawings)

    ColorpickerText("x", false, false, 268, 4, cp.drawings)

    ColorpickerOutline(false, 10, 23, 160, 160, { 30, 30, 30, 255 }, cp.drawings)
    ColorpickerOutline(false, 11, 24, 158, 158, { 0, 0, 0, 255 }, cp.drawings)
    ColorpickerRect(false, 12, 25, 156, 156, { 0, 0, 0, 255 }, cp.drawings)
    local maincolor = cp.drawings[#cp.drawings]
    ColorpickerImage(false, BBOT_IMAGES[1], 12, 25, 156, 156, 1, cp.drawings)

    --https://i.imgur.com/jG3NjxN.png
    local alphabar = {}
    ColorpickerOutline(false, 10, 189, 160, 14, { 30, 30, 30, 255 }, cp.drawings)
    table.insert(alphabar, cp.drawings[#cp.drawings])
    ColorpickerOutline(false, 11, 190, 158, 12, { 0, 0, 0, 255 }, cp.drawings)
    table.insert(alphabar, cp.drawings[#cp.drawings])
    ColorpickerImage(false, BBOT_IMAGES[2], 12, 191, 159, 10, 1, cp.drawings)
    table.insert(alphabar, cp.drawings[#cp.drawings])

    ColorpickerOutline(false, 176, 23, 14, 160, { 30, 30, 30, 255 }, cp.drawings)
    ColorpickerOutline(false, 177, 24, 12, 158, { 0, 0, 0, 255 }, cp.drawings)
    --https://i.imgur.com/2Ty4u2O.png
    ColorpickerImage(false, BBOT_IMAGES[3], 178, 25, 10, 156, 1, cp.drawings)

    ColorpickerText("New Color", false, false, 198, 23, cp.drawings)
    ColorpickerOutline(false, 197, 37, 75, 40, { 30, 30, 30, 255 }, cp.drawings)
    ColorpickerOutline(false, 198, 38, 73, 38, { 0, 0, 0, 255 }, cp.drawings)
    ColorpickerImage(false, BBOT_IMAGES[4], 199, 39, 71, 36, 1, cp.drawings)

    ColorpickerRect(false, 199, 39, 71, 36, { 255, 0, 0, 255 }, cp.drawings)
    local newcolor = cp.drawings[#cp.drawings]

    ColorpickerText("copy", false, true, 198 + 36, 41, cp.drawings)
    ColorpickerText("paste", false, true, 198 + 37, 56, cp.drawings)
    local newcopy = { cp.drawings[#cp.drawings - 1], cp.drawings[#cp.drawings] }

    ColorpickerText("Old Color", false, false, 198, 77, cp.drawings)
    ColorpickerOutline(false, 197, 91, 75, 40, { 30, 30, 30, 255 }, cp.drawings)
    ColorpickerOutline(false, 198, 92, 73, 38, { 0, 0, 0, 255 }, cp.drawings)
    ColorpickerImage(false, BBOT_IMAGES[4], 199, 93, 71, 36, 1, cp.drawings)

    ColorpickerRect(false, 199, 93, 71, 36, { 255, 0, 0, 255 }, cp.drawings)
    local oldcolor = cp.drawings[#cp.drawings]

    ColorpickerText("copy", false, true, 198 + 36, 103, cp.drawings)
    local oldcopy = { cp.drawings[#cp.drawings] }

    --ColorpickerRect(false, 197, cp.h - 25, 75, 20, {30, 30, 30, 255}, cp.drawings)
    ColorpickerText("[ Apply ]", false, true, 235, cp.h - 23, cp.drawings)
    local applytext = cp.drawings[#cp.drawings]

    local function set_newcolor(r, g, b, a)
        newcolor.Color = RGB(r, g, b)
        if a ~= nil then
            newcolor.Transparency = a / 255
        else
            newcolor.Transparency = 1
        end
    end

    local function set_oldcolor(r, g, b, a)
        oldcolor.Color = RGB(r, g, b)
        cp.oldcolor = oldcolor.Color
        cp.oldcoloralpha = a
        if a ~= nil then
            oldcolor.Transparency = a / 255
        else
            oldcolor.Transparency = 1
        end
    end
    -- all this color picker shit is disgusting, why can't it be in it's own fucking scope. these are all global
    local dragbar_r = {}
    Draw:OutlinedRect(true, 30, 30, 16, 5, { 0, 0, 0, 255 }, cp.drawings)
    table.insert(dragbar_r, cp.drawings[#cp.drawings])
    Draw:OutlinedRect(true, 31, 31, 14, 3, { 255, 255, 255, 255 }, cp.drawings)
    table.insert(dragbar_r, cp.drawings[#cp.drawings])

    local dragbar_b = {}
    Draw:OutlinedRect(true, 30, 30, 5, 16, { 0, 0, 0, 255 }, cp.drawings)
    table.insert(dragbar_b, cp.drawings[#cp.drawings])
    table.insert(alphabar, cp.drawings[#cp.drawings])
    Draw:OutlinedRect(true, 31, 31, 3, 14, { 255, 255, 255, 255 }, cp.drawings)
    table.insert(dragbar_b, cp.drawings[#cp.drawings])
    table.insert(alphabar, cp.drawings[#cp.drawings])

    local dragbar_m = {}
    Draw:OutlinedRect(true, 30, 30, 5, 5, { 0, 0, 0, 255 }, cp.drawings)
    table.insert(dragbar_m, cp.drawings[#cp.drawings])
    Draw:OutlinedRect(true, 31, 31, 3, 3, { 255, 255, 255, 255 }, cp.drawings)
    table.insert(dragbar_m, cp.drawings[#cp.drawings])

    function menu:SetDragBarR(x, y)
        dragbar_r[1].Position = Vector2.new(x, y)
        dragbar_r[2].Position = Vector2.new(x + 1, y + 1)
    end

    function menu:SetDragBarB(x, y)
        dragbar_b[1].Position = Vector2.new(x, y)
        dragbar_b[2].Position = Vector2.new(x + 1, y + 1)
    end

    function menu:SetDragBarM(x, y)
        dragbar_m[1].Position = Vector2.new(x, y)
        dragbar_m[2].Position = Vector2.new(x + 1, y + 1)
    end

    function menu:SetColorPicker(visible, color, value, alpha, text, x, y)
        for k, v in pairs(cp.drawings) do
            v.Visible = visible
        end
        cp.oldalpha = alpha
        if visible then
            cp.x = clamp(x, 0, SCREEN_SIZE.x - cp.w)
            cp.y = clamp(y, 0, SCREEN_SIZE.y - cp.h)
            for k, v in pairs(cp.postable) do
                v[1].Position = Vector2.new(cp.x + v[2], cp.y + v[3])
            end

            local tempclr = RGB(color[1], color[2], color[3])
            local h, s, v = tempclr:ToHSV()
            cp.hsv.h = h
            cp.hsv.s = s
            cp.hsv.v = v

            menu:SetDragBarR(cp.x + 175, cp.y + 23 + math.floor((1 - h) * 156))
            menu:SetDragBarM(cp.x + 9 + math.floor(s * 156), cp.y + 23 + math.floor((1 - v) * 156))
            if not alpha then
                set_newcolor(color[1], color[2], color[3])
                set_oldcolor(color[1], color[2], color[3])
                cp.alpha = false
                for k, v in pairs(alphabar) do
                    v.Visible = false
                end
                cp.h = 191
                for i = 1, 2 do
                    cp.drawings[i].Size = Vector2.new(cp.w, cp.h)
                end
                cp.drawings[3].Size = Vector2.new(cp.w - 2, cp.h - 2)
            else
                cp.hsv.a = color[4]
                cp.alpha = true
                set_newcolor(color[1], color[2], color[3], color[4])
                set_oldcolor(color[1], color[2], color[3], color[4])
                cp.h = 211
                for i = 1, 2 do
                    cp.drawings[i].Size = Vector2.new(cp.w, cp.h)
                end
                cp.drawings[3].Size = Vector2.new(cp.w - 2, cp.h - 2)
                menu:SetDragBarB(cp.x + 12 + math.floor(156 * (color[4] / 255)), cp.y + 188)
            end

            applytext.Position = Vector2.new(235 + cp.x, cp.y + cp.h - 23)
            maincolor.Color = Color3.fromHSV(h, 1, 1)
            cp.drawings[7].Text = text
        end
    end

    menu:SetColorPicker(false, { 255, 0, 0 }, nil, false, "", 0, 0)

    --TOOL TIP
    local tooltip = {
        x = 0,
        y = 0,
        time = 0,
        active = false,
        text = "This does this and that i guess\npooping 24/7",
        drawings = {},
        postable = {},
    }

    local function ttOutline(visible, pos_x, pos_y, width, height, clr, tablename)
        Draw:OutlinedRect(visible, pos_x + tooltip.x, pos_y + tooltip.y, width, height, clr, tablename)
        table.insert(tooltip.postable, { tablename[#tablename], pos_x, pos_y })
    end

    local function ttRect(visible, pos_x, pos_y, width, height, clr, tablename)
        Draw:FilledRect(visible, pos_x + tooltip.x, pos_y + tooltip.y, width, height, clr, tablename)
        table.insert(tooltip.postable, { tablename[#tablename], pos_x, pos_y })
    end

    local function ttText(text, visible, centered, pos_x, pos_y, tablename)
        Draw:OutlinedText(
            text,
            2,
            visible,
            pos_x + tooltip.x,
            pos_y + tooltip.y,
            13,
            centered,
            { 255, 255, 255, 255 },
            { 0, 0, 0 },
            tablename
        )
        table.insert(tooltip.postable, { tablename[#tablename], pos_x, pos_y })
    end

    ttRect(
        false,
        tooltip.x + 1,
        tooltip.y + 1,
        1,
        28,
        { menu.mc[1], menu.mc[2], menu.mc[3], 255 },
        tooltip.drawings
    )
    ttRect(
        false,
        tooltip.x + 2,
        tooltip.y + 1,
        1,
        28,
        { menu.mc[1] - 40, menu.mc[2] - 40, menu.mc[3] - 40, 255 },
        tooltip.drawings
    )
    ttOutline(false, tooltip.x, tooltip.y, 4, 30, { 20, 20, 20, 255 }, tooltip.drawings)
    ttRect(false, tooltip.x + 4, tooltip.y, 100, 30, { 40, 40, 40, 255 }, tooltip.drawings)
    ttOutline(false, tooltip.x - 1, tooltip.y - 1, 102, 32, { 0, 0, 0, 255 }, tooltip.drawings)
    ttOutline(false, tooltip.x + 3, tooltip.y, 102, 30, { 20, 20, 20, 255 }, tooltip.drawings)
    ttText(tooltip.text, false, false, tooltip.x + 7, tooltip.y + 1, tooltip.drawings)

    local bbmouse = {}
    function menu:SetToolTip(x, y, text, visible, dt)
        dt = dt or 0
        x = x or tooltip.x
        y = y or tooltip.y
        tooltip.x = x
        tooltip.y = y
        if tooltip.time < 1 and visible then
            if tooltip.time < -1 then
                tooltip.time = -1
            end
            tooltip.time += dt
        else
            tooltip.time -= dt
            if tooltip.time < -1 then
                tooltip.time = -1
            end
        end
        if not visible and tooltip.time < 0 then
            tooltip.time = -1
        end
        if tooltip.time > 1 then
            tooltip.time = 1
        end
        for k, v in ipairs(tooltip.drawings) do
            v.Visible = tooltip.time > 0
        end

        tooltip.active = visible
        if text then
            tooltip.drawings[7].Text = text
        end
        for k, v in pairs(tooltip.postable) do
            v[1].Position = Vector2.new(x + v[2], y + v[3])
            v[1].Transparency = math.min((0.3 + tooltip.time) ^ 3 - 1, menu.fade_amount or 1)
        end
        tooltip.drawings[1].Color = RGB(menu.mc[1], menu.mc[2], menu.mc[3])
        tooltip.drawings[2].Color = RGB(menu.mc[1] - 40, menu.mc[2] - 40, menu.mc[3] - 40)

        local tb = tooltip.drawings[7].TextBounds

        tooltip.drawings[1].Size = Vector2.new(1, tb.Y + 3)
        tooltip.drawings[2].Size = Vector2.new(1, tb.Y + 3)
        tooltip.drawings[3].Size = Vector2.new(4, tb.Y + 5)
        tooltip.drawings[4].Size = Vector2.new(tb.X + 6, tb.Y + 5)
        tooltip.drawings[5].Size = Vector2.new(tb.X + 12, tb.Y + 7)
        tooltip.drawings[6].Size = Vector2.new(tb.X + 7, tb.Y + 5)
        if bbmouse[#bbmouse] then
            bbmouse[#bbmouse].Visible = visible
            bbmouse[#bbmouse].Transparency = 1 - tooltip.time
        end
    end

    menu:SetToolTip(500, 500, "", false)

    -- mouse shiz
    local mousie = {
        x = 100,
        y = 240,
    }
    Draw:Triangle(
        true,
        true,
        { mousie.x, mousie.y },
        { mousie.x, mousie.y + 15 },
        { mousie.x + 10, mousie.y + 10 },
        { 127, 72, 163, 255 },
        bbmouse
    )
    table.insert(menu.clrs.norm, bbmouse[#bbmouse])
    Draw:Triangle(
        true,
        false,
        { mousie.x, mousie.y },
        { mousie.x, mousie.y + 15 },
        { mousie.x + 10, mousie.y + 10 },
        { 0, 0, 0, 255 },
        bbmouse
    )
    Draw:OutlinedText("", 2, false, 0, 0, 13, false, { 255, 255, 255, 255 }, { 15, 15, 15 }, bbmouse)
    Draw:OutlinedText("?", 2, false, 0, 0, 13, false, { 255, 255, 255, 255 }, { 15, 15, 15 }, bbmouse)

    local lastMousePos = Vector2.new()
    function menu:SetMousePosition(x, y)
        FireEvent("bb_mousemoved", lastMousePos ~= Vector2.new(x, y))
        for k = 1, #bbmouse do
            local v = bbmouse[k]
            if k ~= #bbmouse and k ~= #bbmouse - 1 then
                v.PointA = Vector2.new(x, y + 36)
                v.PointB = Vector2.new(x, y + 36 + 15)
                v.PointC = Vector2.new(x + 10, y + 46)
            else
                v.Position = Vector2.new(x + 10, y + 46)
            end
        end
        lastMousePos = Vector2.new(x, y)
    end

    function menu:SetColor(r, g, b)
        menu.watermark.rect[1].Color = RGB(r - 40, g - 40, b - 40)
        menu.watermark.rect[2].Color = RGB(r, g, b)

        for k, v in pairs(menu.clrs.norm) do
            v.Color = RGB(r, g, b)
        end
        for k, v in pairs(menu.clrs.dark) do
            v.Color = RGB(r - 40, g - 40, b - 40)
        end
        local menucolor = { r, g, b }
        for k, v in pairs(menu.options) do
            for k1, v1 in pairs(v) do
                for k2, v2 in pairs(v1) do
                    if v2[2] == TOGGLE then
                        if not v2[1] then
                            for i = 0, 3 do
                                v2[4][i + 1].Color = ColorRange(i, {
                                    [1] = { start = 0, color = RGB(50, 50, 50) },
                                    [2] = { start = 3, color = RGB(30, 30, 30) },
                                })
                            end
                        else
                            for i = 0, 3 do
                                v2[4][i + 1].Color = ColorRange(i, {
                                    [1] = { start = 0, color = RGB(menucolor[1], menucolor[2], menucolor[3]) },
                                    [2] = {
                                        start = 3,
                                        color = RGB(menucolor[1] - 40, menucolor[2] - 40, menucolor[3] - 40),
                                    },
                                })
                            end
                        end
                    elseif v2[2] == SLIDER then
                        for i = 0, 3 do
                            v2[4][i + 1].Color = ColorRange(i, {
                                [1] = { start = 0, color = RGB(menucolor[1], menucolor[2], menucolor[3]) },
                                [2] = {
                                    start = 3,
                                    color = RGB(menucolor[1] - 40, menucolor[2] - 40, menucolor[3] - 40),
                                },
                            })
                        end
                    end
                end
            end
        end
    end

    local function UpdateConfigs()
        local configthing = menu.options["Settings"]["Configuration"]["Configs"]

        configthing[6] = GetConfigs()
        if configthing[1] > #configthing[6] then
            configthing[1] = #configthing[6]
        end
        configthing[4][1].Text = configthing[6][configthing[1]]
    end

    menu.keybind_open = nil

    menu.dropbox_open = nil

    menu.colorPickerOpen = false

    menu.textboxopen = nil

    local shooties = {}
    local isPlayerScoped = false

    function menu:InputBeganMenu(key) --ANCHOR menu input
        if key.KeyCode == Enum.KeyCode.Delete and not loadingthing.Visible then
            cp.dragging_m = false
            cp.dragging_r = false
            cp.dragging_b = false

            customChatSpam = {}
            customKillSay = {}
            local customtxt = readfile("bitchbot/chatspam.txt")
            for s in customtxt:gmatch("[^\n]+") do -- I'm Love String:Match
                table.insert(customChatSpam, s)
            end
            customtxt = readfile("bitchbot/killsay.txt")
            for s in customtxt:gmatch("[^\n]+") do -- I'm Love String:Match
                table.insert(customKillSay, s)
            end
            UpdateConfigs()
            if menu.open and not menu.fading then
                for k = 1, #menu.options do
                    local v = menu.options[k]
                    for k1, v1 in pairs(v) do
                        for k2, v2 in pairs(v1) do
                            if v2[2] == SLIDER and v2[5] then
                                v2[5] = false
                            elseif v2[2] == DROPBOX and v2[5] then
                                v2[5] = false
                            elseif v2[2] == COMBOBOX and v2[5] then
                                v2[5] = false
                            elseif v2[2] == TOGGLE then
                                if v2[5] ~= nil then
                                    if v2[5][2] == KEYBIND and v2[5][5] then
                                        v2[5][4][2].Color = RGB(30, 30, 30)
                                        v2[5][5] = false
                                    elseif v2[5][2] == COLORPICKER and v2[5][5] then
                                        v2[5][5] = false
                                    end
                                end
                            elseif v2[2] == BUTTON then
                                if v2[1] then
                                    for i = 0, 8 do
                                        v2[4][i + 1].Color = ColorRange(i, {
                                            [1] = { start = 0, color = RGB(50, 50, 50) },
                                            [2] = { start = 8, color = RGB(35, 35, 35) },
                                        })
                                    end
                                    v2[1] = false
                                end
                            end
                        end
                    end
                end
                menu.keybind_open = nil
                menu:SetKeybindSelect(false, 20, 20, 1)
                menu.dropbox_open = nil
                menu:SetDropBox(false, 400, 200, 160, 1, { "HI q", "HI q", "HI q" })
                menu.colorPickerOpen = nil
                menu:SetToolTip(nil, nil, nil, false)
                menu:SetColorPicker(false, { 255, 0, 0 }, nil, false, "hahaha", 400, 200)
            end
            if not menu.fading then
                menu.fading = true
                menu.fadestart = tick()
            end
        end

        if menu == nil then
            return
        end

        if menu.textboxopen then
            if key.KeyCode == Enum.KeyCode.Delete or key.KeyCode == Enum.KeyCode.Return then
                for k, v in pairs(menu.options) do
                    for k1, v1 in pairs(v) do
                        for k2, v2 in pairs(v1) do
                            if v2[2] == TEXTBOX then
                                if v2[5] then
                                    v2[5] = false
                                    v2[4].Color = RGB(255, 255, 255)
                                    menu.textboxopen = false
                                    v2[4].Text = v2[1]
                                end
                            end
                        end
                    end
                end
            end
        end

        if menu.open and not menu.fading then
            for k, v in pairs(menu.options) do
                for k1, v1 in pairs(v) do
                    for k2, v2 in pairs(v1) do
                        if v2[2] == TOGGLE then
                            if v2[5] ~= nil then
                                if v2[5][2] == KEYBIND and v2[5][5] and key.KeyCode.Value ~= 0 then
                                    v2[5][4][2].Color = RGB(30, 30, 30)
                                    v2[5][4][1].Text = KeyEnumToName(key.KeyCode)
                                    if KeyEnumToName(key.KeyCode) == "None" then
                                        v2[5][1] = nil
                                    else
                                        v2[5][1] = key.KeyCode
                                    end
                                    v2[5][5] = false
                                end
                            end
                        elseif v2[2] == TEXTBOX then --ANCHOR TEXTBOXES
                            if v2[5] then
                                if not INPUT_SERVICE:IsKeyDown(Enum.KeyCode.LeftControl) then
                                    if string.len(v2[1]) <= 28 then
                                        if table.find(textBoxLetters, KeyEnumToName(key.KeyCode)) then
                                            if INPUT_SERVICE:IsKeyDown(Enum.KeyCode.LeftShift) then
                                                v2[1] ..= string.upper(KeyEnumToName(key.KeyCode))
                                            else
                                                v2[1] ..= string.lower(KeyEnumToName(key.KeyCode))
                                            end
                                        elseif KeyEnumToName(key.KeyCode) == "Space" then
                                            v2[1] ..= " "
                                        elseif keymodifiernames[KeyEnumToName(key.KeyCode)] ~= nil then
                                            if INPUT_SERVICE:IsKeyDown(Enum.KeyCode.LeftShift) then
                                                v2[1] ..= KeyModifierToName(KeyEnumToName(key.KeyCode), v2[6])
                                            else
                                                v2[1] ..= KeyEnumToName(key.KeyCode)
                                            end
                                        elseif KeyEnumToName(key.KeyCode) == "Back" and v2[1] ~= "" then
                                            v2[1] = string.sub(v2[1], 0, #v2[1] - 1)
                                        end
                                    end
                                    v2[4].Text = v2[1] .. "|"
                                end
                            end
                        end
                    end
                end
            end
        end
    end

    function menu:InputBeganKeybinds(key) -- this is super shit because once we add mouse we need to change all this shit to be the contextaction stuff
        if INPUT_SERVICE:GetFocusedTextBox() or menu.textboxopen then
            return
        end
        for i = 1, #self.keybinds do
            local value = self.keybinds[i][1]
            if key.KeyCode == value[5][1] then
                value[5].lastvalue = value[5].relvalue
                if value[5].toggletype == 2 then
                    value[5].relvalue = not value[5].relvalue
                elseif value[5].toggletype == 1 then
                    value[5].relvalue = true
                elseif value[5].toggletype == 3 then
                    value[5].relvalue = false
                end
            elseif value[5].toggletype == 4 then
                value[5].relvalue = true
            end
            if value[5].lastvalue ~= value[5].relvalue then
                value[5].event:fire(value[5].relvalue)
            end
        end
    end

    function menu:InputEndedKeybinds(key)
        for i = 1, #self.keybinds do
            local value = self.keybinds[i][1]
            value[5].lastvalue = value[5].relvalue
            if key.KeyCode == value[5][1] then
                if value[5].toggletype == 1 then
                    value[5].relvalue = false
                elseif value[5].toggletype == 3 then
                    value[5].relvalue = true
                end
            end
            if value[5].lastvalue ~= value[5].relvalue then
                value[5].event:fire(value[5].relvalue)
            end
        end
    end

    function menu:SetMenuPos(x, y)
        for k, v in pairs(menu.postable) do
            if v[1].Visible then
                v[1].Position = Vector2.new(x + v[2], y + v[3])
            end
        end
    end

    function menu:MouseInArea(x, y, width, height)
        return LOCAL_MOUSE.x > x and LOCAL_MOUSE.x < x + width and LOCAL_MOUSE.y > 36 + y and LOCAL_MOUSE.y < 36 + y + height
    end

    function menu:MouseInMenu(x, y, width, height)
        return LOCAL_MOUSE.x > menu.x + x and LOCAL_MOUSE.x < menu.x + x + width and LOCAL_MOUSE.y > menu.y - 36 + y and LOCAL_MOUSE.y < menu.y - 36 + y + height
    end

    function menu:MouseInColorPicker(x, y, width, height)
        return LOCAL_MOUSE.x > cp.x + x and LOCAL_MOUSE.x < cp.x + x + width and LOCAL_MOUSE.y > cp.y - 36 + y and LOCAL_MOUSE.y < cp.y - 36 + y + height
    end

    local keyz = {}
    for k, v in pairs(Enum.KeyCode:GetEnumItems()) do
        keyz[v.Value] = v
    end


    function menu:GetVal(tab, groupbox, name, ...)
        local args = { ... }

        local option = menu.options[tab][groupbox][name]
        if not option then print(tab, groupbox, name) end
        if args[1] == nil then
            if option[2] == TOGGLE then
                local lastval = option[7]
                option[7] = option[1]
                return option[1], lastval
            elseif option[2] ~= COMBOBOX then
                return option[1]
            else
                local temptable = {}
                for k = 1, #option[1] do
                    local v = option[1][k]
                    table.insert(temptable, v[2])
                end
                return temptable
            end
        else
            if args[1] == KEYBIND or args[1] == COLOR then
                if args[2] then
                    return RGB(option[5][1][1], option[5][1][2], option[5][1][3])
                else
                    return option[5][1]
                end
            elseif args[1] == COLOR1 then
                if args[2] then
                    return RGB(option[5][1][1][1][1], option[5][1][1][1][2], option[5][1][1][1][3])
                else
                    return option[5][1][1][1]
                end
            elseif args[1] == COLOR2 then
                if args[2] then
                    return RGB(option[5][1][2][1][1], option[5][1][2][1][2], option[5][1][2][1][3])
                else
                    return option[5][1][2][1]
                end
            end
        end
    end

    function menu:GetKey(tab, groupbox, name)
        local option = self.options[tab][groupbox][name][5]
        local return1, return2, return3
        if self:GetVal(tab, groupbox, name) then
            if option.toggletype ~= 0 then
                if option.lastvalue == nil then
                    option.lastvalue = option.relvalue
                end
                return1, return2, return3 = option.relvalue, option.lastvalue, option.event
                option.lastvalue = option.relvalue
            end
        end
        return return1, return2, return3
    end

    function menu:SetKey(tab, groupbox, name, val)
        val = val or false
        local option = menu.options[tab][groupbox][name][5]
        if option.toggletype ~= 0 then
            option.lastvalue = option.relvalue
            option.relvalue = val
            if option.lastvalue ~= option.relvalue then
                option.event:fire(option.relvalue)
            end
        end
    end

    local menuElementTypes = { [TOGGLE] = "toggle", [SLIDER] = "slider", [DROPBOX] = "dropbox", [TEXTBOX] = "textbox" }
    local doubleclickDelay = 1
    local buttonsInQue = {}

    local function SaveCurSettings() --ANCHOR figgies
        local figgy = "BitchBot v2\nmade with <3 by nata and bitch\n\n" -- screw zarzel XD (and json and classy)

        for k, v in next, menuElementTypes do
            figgy ..= v .. "s {\n"
            for k1, v1 in pairs(menu.options) do
                for k2, v2 in pairs(v1) do
                    for k3, v3 in pairs(v2) do
                        if v3[2] == k and k3 ~= "Configs" and k3 ~= "Player Status" and k3 ~= "ConfigName"
                        then
                            figgy ..= k1 .. "|" .. k2 .. "|" .. k3 .. "|" .. tostring(v3[1]) .. "\n"
                        end
                    end
                end
            end
            figgy = figgy .. "}\n"
        end
        figgy = figgy .. "comboboxes {\n"
        for k, v in pairs(menu.options) do
            for k1, v1 in pairs(v) do
                for k2, v2 in pairs(v1) do
                    if v2[2] == COMBOBOX then
                        local boolz = ""
                        for k3, v3 in pairs(v2[1]) do
                            boolz = boolz .. tostring(v3[2]) .. ", "
                        end
                        figgy = figgy .. k .. "|" .. k1 .. "|" .. k2 .. "|" .. boolz .. "\n"
                    end
                end
            end
        end
        figgy = figgy .. "}\n"
        figgy = figgy .. "keybinds {\n"
        for k, v in pairs(menu.options) do
            for k1, v1 in pairs(v) do
                for k2, v2 in pairs(v1) do
                    if v2[2] == TOGGLE then
                        if v2[5] ~= nil then
                            if v2[5][2] == KEYBIND then
                                local toggletype = "|" .. tostring(v2[5].toggletype)

                                if v2[5][1] == nil then
                                    figgy = figgy
                                        .. k
                                        .. "|"
                                        .. k1
                                        .. "|"
                                        .. k2
                                        .. "|nil"
                                        .. "|"
                                        .. tostring(v2[5].toggletype)
                                        .. "\n"
                                else
                                    figgy = figgy
                                        .. k
                                        .. "|"
                                        .. k1
                                        .. "|"
                                        .. k2
                                        .. "|"
                                        .. tostring(v2[5][1].Value)
                                        .. "|"
                                        .. tostring(v2[5].toggletype)
                                        .. "\n"
                                end
                            end
                        end
                    end
                end
            end
        end
        figgy = figgy .. "}\n"
        figgy = figgy .. "colorpickers {\n"
        for k, v in pairs(menu.options) do
            for k1, v1 in pairs(v) do
                for k2, v2 in pairs(v1) do
                    if v2[2] == TOGGLE then
                        if v2[5] ~= nil then
                            if v2[5][2] == COLORPICKER then
                                local clrz = ""
                                for k3, v3 in pairs(v2[5][1]) do
                                    clrz = clrz .. tostring(v3) .. ", "
                                end
                                figgy = figgy .. k .. "|" .. k1 .. "|" .. k2 .. "|" .. clrz .. "\n"
                            end
                        end
                    end
                end
            end
        end
        figgy = figgy .. "}\n"
        figgy = figgy .. "double colorpickers {\n"
        for k, v in pairs(menu.options) do
            for k1, v1 in pairs(v) do
                for k2, v2 in pairs(v1) do
                    if v2[2] == TOGGLE then
                        if v2[5] ~= nil then
                            if v2[5][2] == DOUBLE_COLORPICKER then
                                local clrz1 = ""
                                for k3, v3 in pairs(v2[5][1][1][1]) do
                                    clrz1 = clrz1 .. tostring(v3) .. ", "
                                end
                                local clrz2 = ""
                                for k3, v3 in pairs(v2[5][1][2][1]) do
                                    clrz2 = clrz2 .. tostring(v3) .. ", "
                                end
                                figgy = figgy .. k .. "|" .. k1 .. "|" .. k2 .. "|" .. clrz1 .. "|" .. clrz2 .. "\n"
                            end
                        end
                    end
                end
            end
        end
        figgy = figgy .. "}\n"

        return figgy
    end

    local function LoadConfig(loadedcfg)
        local lines = {}

        for s in loadedcfg:gmatch("[^\r\n]+") do
            table.insert(lines, s)
        end

        if lines[1] == "BitchBot v2" then
            local start = nil
            for i, v in next, lines do
                if v == "toggles {" then
                    start = i
                    break
                end
            end
            local end_ = nil
            for i, v in next, lines do
                if i > start and v == "}" then
                    end_ = i
                    break
                end
            end
            for i = 1, end_ - start - 1 do
                local tt = string.split(lines[i + start], "|")

                if menu.options[tt[1]] ~= nil and menu.options[tt[1]][tt[2]] ~= nil and menu.options[tt[1]][tt[2]][tt[3]] ~= nil
                then
                    if tt[4] == "true" then
                        menu.options[tt[1]][tt[2]][tt[3]][1] = true
                    else
                        menu.options[tt[1]][tt[2]][tt[3]][1] = false
                    end
                end
            end

            local start = nil
            for i, v in next, lines do
                if v == "sliders {" then
                    start = i
                    break
                end
            end
            local end_ = nil
            for i, v in next, lines do
                if i > start and v == "}" then
                    end_ = i
                    break
                end
            end
            for i = 1, end_ - start - 1 do
                local tt = string.split(lines[i + start], "|")
                if menu.options[tt[1]] ~= nil and menu.options[tt[1]][tt[2]] ~= nil and menu.options[tt[1]][tt[2]][tt[3]] ~= nil
                then
                    menu.options[tt[1]][tt[2]][tt[3]][1] = tonumber(tt[4])
                end
            end

            local start = nil
            for i, v in next, lines do
                if v == "dropboxs {" then
                    start = i
                    break
                end
            end
            local end_ = nil
            for i, v in next, lines do
                if i > start and v == "}" then
                    end_ = i
                    break
                end
            end
            for i = 1, end_ - start - 1 do
                local tt = string.split(lines[i + start], "|")

                if menu.options[tt[1]] ~= nil and menu.options[tt[1]][tt[2]] ~= nil and menu.options[tt[1]][tt[2]][tt[3]] ~= nil
                then
                    local num = tonumber(tt[4])
                    if num > #menu.options[tt[1]][tt[2]][tt[3]][6] then
                        num = #menu.options[tt[1]][tt[2]][tt[3]][6]
                    elseif num < 0 then
                        num = 1
                    end
                    menu.options[tt[1]][tt[2]][tt[3]][1] = num
                end
            end

            local start = nil
            for i, v in next, lines do
                if v == "textboxs {" then
                    start = i
                    break
                end
            end
            if start ~= nil then
                local end_ = nil
                for i, v in next, lines do
                    if i > start and v == "}" then
                        end_ = i
                        break
                    end
                end
                for i = 1, end_ - start - 1 do
                    local tt = string.split(lines[i + start], "|")
                    if menu.options[tt[1]] ~= nil and menu.options[tt[1]][tt[2]] ~= nil and menu.options[tt[1]][tt[2]][tt[3]] ~= nil
                    then
                        menu.options[tt[1]][tt[2]][tt[3]][1] = tostring(tt[4])
                    end
                end
            end

            local start = nil
            for i, v in next, lines do
                if v == "comboboxes {" then
                    start = i
                    break
                end
            end
            local end_ = nil
            for i, v in next, lines do
                if i > start and v == "}" then
                    end_ = i
                    break
                end
            end
            for i = 1, end_ - start - 1 do
                local tt = string.split(lines[i + start], "|")
                if menu.options[tt[1]] ~= nil and menu.options[tt[1]][tt[2]] ~= nil and menu.options[tt[1]][tt[2]][tt[3]] ~= nil
                then
                    local subs = string.split(tt[4], ",")

                    for i, v in ipairs(subs) do
                        local opt = string.gsub(v, " ", "")
                        if opt == "true" then
                            menu.options[tt[1]][tt[2]][tt[3]][1][i][2] = true
                        else
                            menu.options[tt[1]][tt[2]][tt[3]][1][i][2] = false
                        end
                        if i == #subs - 1 then
                            break
                        end
                    end
                end
            end

            local start = nil
            for i, v in next, lines do
                if v == "keybinds {" then
                    start = i
                    break
                end
            end
            local end_ = nil
            for i, v in next, lines do
                if i > start and v == "}" then
                    end_ = i
                    break
                end
            end
            for i = 1, end_ - start - 1 do
                local tt = string.split(lines[i + start], "|")
                if menu.options[tt[1]] ~= nil and menu.options[tt[1]][tt[2]] ~= nil and menu.options[tt[1]][tt[2]][tt[3]] ~= nil and menu.options[tt[1]][tt[2]][tt[3]][5] ~= nil
                then
                    if tt[5] ~= nil then
                        local toggletype = clamp(tonumber(tt[5]), 1, 4)
                        if menu.options[tt[1]][tt[2]][tt[3]][5].toggletype ~= 0 then
                            menu.options[tt[1]][tt[2]][tt[3]][5].toggletype = toggletype
                        end
                    end

                    if tt[4] == "nil" then
                        menu.options[tt[1]][tt[2]][tt[3]][5][1] = nil
                    else
                        menu.options[tt[1]][tt[2]][tt[3]][5][1] = keyz[tonumber(tt[4])]
                    end
                end
            end

            local start = nil
            for i, v in next, lines do
                if v == "colorpickers {" then
                    start = i
                    break
                end
            end
            local end_ = nil
            for i, v in next, lines do
                if i > start and v == "}" then
                    end_ = i
                    break
                end
            end
            for i = 1, end_ - start - 1 do
                local tt = string.split(lines[i + start], "|")
                if menu.options[tt[1]] ~= nil and menu.options[tt[1]][tt[2]] ~= nil and menu.options[tt[1]][tt[2]][tt[3]] ~= nil
                then
                    local subs = string.split(tt[4], ",")

                    if type(menu.options[tt[1]][tt[2]][tt[3]][5][1][1]) == "table" then
                        continue
                    end
                    for i, v in ipairs(subs) do
                        if menu.options[tt[1]][tt[2]][tt[3]][5][1][i] == nil then
                            break
                        end
                        local opt = string.gsub(v, " ", "")
                        menu.options[tt[1]][tt[2]][tt[3]][5][1][i] = tonumber(opt)
                        if i == #subs - 1 then
                            break
                        end
                    end
               
                end
            end

            local start = nil
            for i, v in next, lines do
                if v == "double colorpickers {" then
                    start = i
                    break
                end
            end
            local end_ = nil
            for i, v in next, lines do
                if i > start and v == "}" then
                    end_ = i
                    break
                end
            end
            for i = 1, end_ - start - 1 do
                local tt = string.split(lines[i + start], "|")
                if menu.options[tt[1]] ~= nil and menu.options[tt[1]][tt[2]] ~= nil and menu.options[tt[1]][tt[2]][tt[3]] ~= nil
                then
                    local subs = { string.split(tt[4], ","), string.split(tt[5], ",") }

                    for i, v in ipairs(subs) do
                        if type(menu.options[tt[1]][tt[2]][tt[3]][5][1][i]) == "number" then
                            break
                        end
                        for i1, v1 in ipairs(v) do
                           
                               
                            if menu.options[tt[1]][tt[2]][tt[3]][5][1][i][1][i1] == nil then
                                break
                            end
                            local opt = string.gsub(v1, " ", "")
                            menu.options[tt[1]][tt[2]][tt[3]][5][1][i][1][i1] = tonumber(opt)
                            if i1 == #v - 1 then
                                break
                            end
                        end
                    end
                end
            end

            for k, v in pairs(menu.options) do
                for k1, v1 in pairs(v) do
                    for k2, v2 in pairs(v1) do
                        if v2[2] == TOGGLE then
                            if not v2[1] then
                                for i = 0, 3 do
                                    v2[4][i + 1].Color = ColorRange(i, {
                                        [1] = { start = 0, color = RGB(50, 50, 50) },
                                        [2] = { start = 3, color = RGB(30, 30, 30) },
                                    })
                                end
                            else
                                for i = 0, 3 do
                                    v2[4][i + 1].Color = ColorRange(i, {
                                        [1] = { start = 0, color = RGB(menu.mc[1], menu.mc[2], menu.mc[3]) },
                                        [2] = {
                                            start = 3,
                                            color = RGB(menu.mc[1] - 40, menu.mc[2] - 40, menu.mc[3] - 40),
                                        },
                                    })
                                end
                            end
                            if v2[5] ~= nil then
                                if v2[5][2] == KEYBIND then
                                    v2[5][4][2].Color = RGB(30, 30, 30)
                                    v2[5][4][1].Text = KeyEnumToName(v2[5][1])
                                elseif v2[5][2] == COLORPICKER then
                                    v2[5][4][1].Color = RGB(v2[5][1][1], v2[5][1][2], v2[5][1][3])
                                    for i = 2, 3 do
                                        v2[5][4][i].Color = RGB(v2[5][1][1] - 40, v2[5][1][2] - 40, v2[5][1][3] - 40)
                                    end
                                elseif v2[5][2] == DOUBLE_COLORPICKER then
                                    if type(v2[5][1][1]) == "table" then
                                        for i, v3 in ipairs(v2[5][1]) do
                                            v3[4][1].Color = RGB(v3[1][1], v3[1][2], v3[1][3])
                                            for i1 = 2, 3 do
                                                v3[4][i1].Color = RGB(v3[1][1] - 40, v3[1][2] - 40, v3[1][3] - 40)
                                            end
                                        end
                                    end
                                end
                            end
                        elseif v2[2] == SLIDER then
                            if v2[1] < v2[6][1] then
                                v2[1] = v2[6][1]
                            elseif v2[1] > v2[6][2] then
                                v2[1] = v2[6][2]
                            end

                            local decplaces = v2.decimal and string.rep("0", math.log(1 / v2.decimal) / math.log(10))
                            if decplaces and math.abs(v2[1]) < v2.decimal then
                                v2[1] = 0
                            end
                            v2[4][5].Text = v2.custom[v2[1]] or (v2[1] == math.floor(v2[1]) and v2.decimal) and tostring(v2[1]) .. "." .. decplaces .. v2[4][6] or tostring(v2[1]) .. v2[4][6]
                            -- v2[4][5].Text = tostring(v2[1]).. v2[4][6]

                            for i = 1, 4 do
                                v2[4][i].Size = Vector2.new((v2[3][3] - 4) * ((v2[1] - v2[6][1]) / (v2[6][2] - v2[6][1])), 2)
                            end
                        elseif v2[2] == DROPBOX then
                            if v2[6][v2[1]] == nil then
                                v2[1] = 1
                            end
                            v2[4][1].Text = v2[6][v2[1]]
                        elseif v2[2] == COMBOBOX then
                            local textthing = ""
                            for k3, v3 in pairs(v2[1]) do
                                if v3[2] then
                                    if textthing == "" then
                                        textthing = v3[1]
                                    else
                                        textthing = textthing .. ", " .. v3[1]
                                    end
                                end
                            end
                            textthing = textthing ~= "" and textthing or "None"
                            textthing = string_cut(textthing, 25)
                            v2[4][1].Text = textthing
                        elseif v2[2] == TEXTBOX then
                            v2[4].Text = v2[1]
                        end
                    end
                end
            end
        end
    end
    function menu.saveconfig()
        local figgy = SaveCurSettings()
        writefile(
            "bitchbot/"
                .. menu.game
                .. "/"
                .. menu.options["Settings"]["Configuration"]["ConfigName"][1]
                .. ".bb",
            figgy
        )
        CreateNotification('Saved "' .. menu.options["Settings"]["Configuration"]["ConfigName"][1] .. '.bb"!')
        UpdateConfigs()
    end
   
    function menu.loadconfig()
        local configname = "bitchbot/"
            .. menu.game
            .. "/"
            .. menu.options["Settings"]["Configuration"]["ConfigName"][1]
            .. ".bb"
        if not isfile(configname) then
            CreateNotification(
                '"'
                    .. menu.options["Settings"]["Configuration"]["ConfigName"][1]
                    .. '.bb" is not a valid config.'
            )
            return
        end
   
        local curcfg = SaveCurSettings()
        local loadedcfg = readfile(configname)
   
        if pcall(LoadConfig, loadedcfg) then
            CreateNotification('Loaded "' .. menu.options["Settings"]["Configuration"]["ConfigName"][1] .. '.bb"!')
        else
            LoadConfig(curcfg)
            CreateNotification(
                'There was an issue loading "'
                    .. menu.options["Settings"]["Configuration"]["ConfigName"][1]
                    .. '.bb"'
            )
        end
    end

    local function buttonpressed(bp)
        if bp.doubleclick then
            if buttonsInQue[bp] and tick() - buttonsInQue[bp] < doubleclickDelay then
                buttonsInQue[bp] = 0
            else
                for button, time in next, buttonsInQue do
                    buttonsInQue[button] = 0
                end
                buttonsInQue[bp] = tick()
                return
            end
        end
        FireEvent("bb_buttonpressed", bp.tab, bp.groupbox, bp.name)
        --ButtonPressed:Fire(bp.tab, bp.groupbox, bp.name)
        if bp == menu.options["Settings"]["Cheat Settings"]["Unload Cheat"] then
            menu.fading = true
            wait()
            menu:unload()
        elseif bp == menu.options["Settings"]["Cheat Settings"]["Set Clipboard Game ID"] then
            setclipboard(game.JobId)
            CreateNotification("Set Clipboard Game ID! (".. tostring(game.JobId)..")")
        elseif bp == menu.options["Settings"]["Configuration"]["Save Config"] then
            menu.saveconfig()
        elseif bp == menu.options["Settings"]["Configuration"]["Delete Config"] then
            delfile(
                "bitchbot/"
                    .. menu.game
                    .. "/"
                    .. menu.options["Settings"]["Configuration"]["ConfigName"][1]
                    .. ".bb"
            )
            CreateNotification('Deleted "' .. menu.options["Settings"]["Configuration"]["ConfigName"][1] .. '.bb"!')
            UpdateConfigs()
        elseif bp == menu.options["Settings"]["Configuration"]["Load Config"] then
            menu.loadconfig()
        end
    end

    local function MouseButton2Event()
        if menu.colorPickerOpen or menu.dropbox_open then
            return
        end

        for k, v in pairs(menu.options) do
            if menu.tabnames[menu.activetab] == k then
                for k1, v1 in pairs(v) do
                    local pass = true
                    for k3, v3 in pairs(menu.multigroups) do
                        if k == k3 then
                            for k4, v4 in pairs(v3) do
                                for k5, v5 in pairs(v4.vals) do
                                    if k1 == k5 then
                                        pass = v5
                                    end
                                end
                            end
                        end
                    end

                    if pass then
                        for k2, v2 in pairs(v1) do --ANCHOR more menu bs
                            if v2[2] == TOGGLE then
                                if v2[5] ~= nil then
                                    if v2[5][2] == KEYBIND then
                                        if menu:MouseInMenu(v2[5][3][1], v2[5][3][2], 44, 16) then
                                            if menu.keybind_open ~= v2 and v2[5].toggletype ~= 0 then
                                                menu.keybind_open = v2
                                                menu:SetKeybindSelect(
                                                    true,
                                                    v2[5][3][1] + menu.x,
                                                    v2[5][3][2] + 16 + menu.y,
                                                    v2[5].toggletype
                                                )
                                            else
                                                menu.keybind_open = nil
                                                menu:SetKeybindSelect(false, 20, 20, 1)
                                            end
                                        end
                                    end
                                end
                            end
                        end
                    end
                end
            end
        end
    end
    local function menucolor()
        if menu.open then
            if menu:GetVal("Settings", "Cheat Settings", "Menu Accent") then
                local clr = menu:GetVal("Settings", "Cheat Settings", "Menu Accent", COLOR, true)
                menu.mc = { clr.R * 255, clr.G * 255, clr.B * 255 }
            else
                menu.mc = { 127, 72, 163 }
            end
            menu:SetColor(menu.mc[1], menu.mc[2], menu.mc[3])

            local wme = menu:GetVal("Settings", "Cheat Settings", "Watermark")
            for k, v in pairs(menu.watermark.rect) do
                v.Visible = wme
            end
            menu.watermark.text[1].Visible = wme
        end
    end
    local function MouseButton1Event() --ANCHOR menu mouse down func
        menu.dropbox_open = nil
        menu.textboxopen = false

        menu:SetKeybindSelect(false, 20, 20, 1)
        if menu.keybind_open then
            local key = menu.keybind_open
            local foundkey = false
            for i = 1, 4 do
                if menu:MouseInMenu(key[5][3][1], key[5][3][2] + 16 + ((i - 1) * 21), 70, 21) then
                    foundkey = true
                    menu.keybind_open[5].toggletype = i
                    menu.keybind_open[5].relvalue = false
                end
            end
            menu.keybind_open = nil
            if foundkey then
                return
            end
        end

        for k, v in pairs(menu.options) do
            for k1, v1 in pairs(v) do
                for k2, v2 in pairs(v1) do
                    if v2[2] == DROPBOX and v2[5] then
                        if not menu:MouseInMenu(v2[3][1], v2[3][2], v2[3][3], 24 * (#v2[6] + 1) + 3) then
                            menu:SetDropBox(false, 400, 200, 160, 1, { "HI q", "HI q", "HI q" })
                            v2[5] = false
                        else
                            menu.dropbox_open = v2
                        end
                    end
                    if v2[2] == COMBOBOX and v2[5] then
                        if not menu:MouseInMenu(v2[3][1], v2[3][2], v2[3][3], 24 * (#v2[1] + 1) + 3) then
                            menu:SetDropBox(false, 400, 200, 160, 1, { "HI q", "HI q", "HI q" })
                            v2[5] = false
                        else
                            menu.dropbox_open = v2
                        end
                    end
                    if v2[2] == TOGGLE then
                        if v2[5] ~= nil then
                            if v2[5][2] == KEYBIND then
                                if v2[5][5] == true then
                                    v2[5][4][2].Color = RGB(30, 30, 30)
                                    v2[5][5] = false
                                end
                            elseif v2[5][2] == COLORPICKER then
                                if v2[5][5] == true then
                                    if not menu:MouseInColorPicker(0, 0, cp.w, cp.h) then
                                        if menu.colorPickerOpen then
                                           
                                            local tempclr = cp.oldcolor
                                            menu.colorPickerOpen[4][1].Color = tempclr
                                            for i = 2, 3 do
                                                menu.colorPickerOpen[4][i].Color = RGB(
                                                    math.floor(tempclr.R * 255) - 40,
                                                    math.floor(tempclr.G * 255) - 40,
                                                    math.floor(tempclr.B * 255) - 40
                                                )
                                            end
                                            if cp.alpha then
                                                menu.colorPickerOpen[1] = {
                                                    math.floor(tempclr.R * 255),
                                                    math.floor(tempclr.G * 255),
                                                    math.floor(tempclr.B * 255),
                                                    cp.oldcoloralpha,
                                                }
                                            else
                                                menu.colorPickerOpen[1] = {
                                                    math.floor(tempclr.R * 255),
                                                    math.floor(tempclr.G * 255),
                                                    math.floor(tempclr.B * 255),
                                                }
                                            end
                                        end
                                        menu:SetColorPicker(false, { 255, 0, 0 }, nil, false, "hahaha", 400, 200)
                                        v2[5][5] = false
                                        menu.colorPickerOpen = nil -- close colorpicker
                                    end
                                end
                            elseif v2[5][2] == DOUBLE_COLORPICKER then
                                for k3, v3 in pairs(v2[5][1]) do
                                    if v3[5] == true then
                                        if not menu:MouseInColorPicker(0, 0, cp.w, cp.h) then
                                            if menu.colorPickerOpen then
                                                local tempclr = cp.oldcolor
                                                menu.colorPickerOpen[4][1].Color = tempclr
                                                for i = 2, 3 do
                                                    menu.colorPickerOpen[4][i].Color = RGB(
                                                        math.floor(tempclr.R * 255) - 40,
                                                        math.floor(tempclr.G * 255) - 40,
                                                        math.floor(tempclr.B * 255) - 40
                                                    )
                                                end
                                                if cp.alpha then
                                                    menu.colorPickerOpen[1] = {
                                                        math.floor(tempclr.R * 255),
                                                        math.floor(tempclr.G * 255),
                                                        math.floor(tempclr.B * 255),
                                                        cp.oldcoloralpha,
                                                    }
                                                else
                                                    menu.colorPickerOpen[1] = {
                                                        math.floor(tempclr.R * 255),
                                                        math.floor(tempclr.G * 255),
                                                        math.floor(tempclr.B * 255),
                                                    }
                                                end
                                            end
                                            menu:SetColorPicker(false, { 255, 0, 0 }, nil, false, "hahaha", 400, 200)
                                            v3[5] = false
                                            menu.colorPickerOpen = nil -- close colorpicker
                                           
                                        end
                                    end
                                end
                            end
                        end
                    end
                    if v2[2] == TEXTBOX and v2[5] then
                        v2[4].Color = RGB(255, 255, 255)
                        v2[5] = false
                        v2[4].Text = v2[1]
                    end
                end
            end
        end
        for i = 1, #menutable do
            if menu:MouseInMenu(
                    10 + ((i - 1) * math.floor((menu.w - 20) / #menutable)),
                    27,
                    math.floor((menu.w - 20) / #menutable),
                    32
                )
            then
                menu.activetab = i
                setActiveTab(menu.activetab)
                menu:SetMenuPos(menu.x, menu.y)
                menu:SetToolTip(nil, nil, nil, false)
            end
        end
        if menu.colorPickerOpen then
            if menu:MouseInColorPicker(197, cp.h - 25, 75, 20) then
                --apply newcolor to oldcolor
                local tempclr = Color3.fromHSV(cp.hsv.h, cp.hsv.s, cp.hsv.v)
                menu.colorPickerOpen[4][1].Color = tempclr
                for i = 2, 3 do
                    menu.colorPickerOpen[4][i].Color = RGB(
                        math.floor(tempclr.R * 255) - 40,
                        math.floor(tempclr.G * 255) - 40,
                        math.floor(tempclr.B * 255) - 40
                    )
                end
                if cp.alpha then
                    menu.colorPickerOpen[1] = {
                        math.floor(tempclr.R * 255),
                        math.floor(tempclr.G * 255),
                        math.floor(tempclr.B * 255),
                        cp.hsv.a,
                    }
                else
                    menu.colorPickerOpen[1] = {
                        math.floor(tempclr.R * 255),
                        math.floor(tempclr.G * 255),
                        math.floor(tempclr.B * 255),
                    }
                end
                menu.colorPickerOpen = nil
                menu:SetColorPicker(false, { 255, 0, 0 }, nil, false, "hahaha", 400, 200)
            end
            if menu:MouseInColorPicker(264, 2, 14, 14) then
                -- x out
                local tempclr = cp.oldcolor
                menu.colorPickerOpen[4][1].Color = tempclr
                for i = 2, 3 do
                    menu.colorPickerOpen[4][i].Color = RGB(
                        math.floor(tempclr.R * 255) - 40,
                        math.floor(tempclr.G * 255) - 40,
                        math.floor(tempclr.B * 255) - 40
                    )
                end
                if cp.alpha then
                    menu.colorPickerOpen[1] = {
                        math.floor(tempclr.R * 255),
                        math.floor(tempclr.G * 255),
                        math.floor(tempclr.B * 255),
                        cp.oldcoloralpha,
                    }
                else
                    menu.colorPickerOpen[1] = {
                        math.floor(tempclr.R * 255),
                        math.floor(tempclr.G * 255),
                        math.floor(tempclr.B * 255),
                    }
                end
                menu.colorPickerOpen = nil
                menu:SetColorPicker(false, { 255, 0, 0 }, nil, false, "hahaha", 400, 200)
            end
            if menu:MouseInColorPicker(10, 23, 160, 160) then
                cp.dragging_m = true
                --set value and saturation
            elseif menu:MouseInColorPicker(176, 23, 14, 160) then
                cp.dragging_r = true
                --set hue
            elseif menu:MouseInColorPicker(10, 189, 160, 14) and cp.alpha then
                cp.dragging_b = true
                --set transparency
            end

            if menu:MouseInColorPicker(197, 37, 75, 20) then
                menu.copied_clr = newcolor.Color
                --copy newcolor
            elseif menu:MouseInColorPicker(197, 57, 75, 20) then
                --paste newcolor
                if menu.copied_clr ~= nil then
                    local cpa = false
                    local clrtable = { menu.copied_clr.R * 255, menu.copied_clr.G * 255, menu.copied_clr.B * 255 }
                    if menu.colorPickerOpen[1][4] ~= nil then
                        cpa = true
                        table.insert(clrtable, menu.colorPickerOpen[1][4])
                    end

                    menu:SetColorPicker(true, clrtable, menu.colorPickerOpen, cpa, menu.colorPickerOpen[6], cp.x, cp.y)
                    cp.oldclr = menu.colorPickerOpen[4][1].Color
                    local oldclr = cp.oldclr
                    if menu.colorPickerOpen[1][4] ~= nil then
                        set_oldcolor(oldclr.R * 255, oldclr.G * 255, oldclr.B * 255, menu.colorPickerOpen[1][4])
                    else
                        set_oldcolor(oldclr.R * 255, oldclr.G * 255, oldclr.B * 255)
                    end
                end
            end

            if menu:MouseInColorPicker(197, 91, 75, 40) then
                menu.copied_clr = oldcolor.Color --copy oldcolor
            end
        else
            for k, v in pairs(menu.multigroups) do
                if menu.tabnames[menu.activetab] == k then
                    for k1, v1 in pairs(v) do
                        local c_pos = v1.drawn.click_pos
                        --local selected = v1.drawn.bar
                        local selected_pos = v1.drawn.barpos

                        for k2, v2 in pairs(v1.drawn.click_pos) do
                            if menu:MouseInMenu(v2.x, v2.y, v2.width, v2.height) then
                                for _k, _v in pairs(v1.vals) do
                                    if _k == v2.name then
                                        v1.vals[_k] = true
                                    else
                                        v1.vals[_k] = false
                                    end
                                end

                                local settab = v2.num
                                for _k, _v in pairs(v1.drawn.bar) do
                                    menu.postable[_v.postable][2] = selected_pos[settab].pos
                                    _v.drawn.Size = Vector2.new(selected_pos[settab].length, 2)
                                end

                                for i, v in pairs(v1.drawn.nametext) do
                                    if i == v2.num then
                                        v.Color = RGB(255, 255, 255)
                                    else
                                        v.Color = RGB(170, 170, 170)
                                    end
                                end

                                menu:setMenuVisible(true)
                                setActiveTab(menu.activetab)
                                menu:SetMenuPos(menu.x, menu.y)
                            end
                        end
                    end
                end
            end
            local newdropbox_open
            for k, v in pairs(menu.options) do
                if menu.tabnames[menu.activetab] == k then
                    for k1, v1 in pairs(v) do
                        local pass = true
                        for k3, v3 in pairs(menu.multigroups) do
                            if k == k3 then
                                for k4, v4 in pairs(v3) do
                                    for k5, v5 in pairs(v4.vals) do
                                        if k1 == k5 then
                                            pass = v5
                                        end
                                    end
                                end
                            end
                        end

                        if pass then
                            for k2, v2 in pairs(v1) do
                                if v2[2] == TOGGLE and not menu.dropbox_open then
                                    if menu:MouseInMenu(v2[3][1], v2[3][2], 30 + v2[4][5].TextBounds.x, 16) then
                                        if v2[6] then
                                            if menu:GetVal(
                                                    "Settings",
                                                    "Cheat Settings",
                                                    "Allow Unsafe Features"
                                                ) and v2[1] == false
                                            then
                                                v2[1] = true
                                            else
                                                v2[1] = false
                                            end
                                        else
                                            v2[1] = not v2[1]
                                        end
                                        if not v2[1] then
                                            for i = 0, 3 do
                                                v2[4][i + 1].Color = ColorRange(i, {
                                                    [1] = { start = 0, color = RGB(50, 50, 50) },
                                                    [2] = { start = 3, color = RGB(30, 30, 30) },
                                                })
                                            end
                                        else
                                            for i = 0, 3 do
                                                v2[4][i + 1].Color = ColorRange(i, {
                                                    [1] = {
                                                        start = 0,
                                                        color = RGB(menu.mc[1], menu.mc[2], menu.mc[3]),
                                                    },
                                                    [2] = {
                                                        start = 3,
                                                        color = RGB(
                                                            menu.mc[1] - 40,
                                                            menu.mc[2] - 40,
                                                            menu.mc[3] - 40
                                                        ),
                                                    },
                                                })
                                            end
                                        end
                                        --TogglePressed:Fire(k1, k2, v2)
                                        FireEvent("bb_togglepressed", k1, k2, v2)
                                    end
                                    if v2[5] ~= nil then
                                        if v2[5][2] == KEYBIND then
                                            if menu:MouseInMenu(v2[5][3][1], v2[5][3][2], 44, 16) then
                                                v2[5][4][2].Color = RGB(menu.mc[1], menu.mc[2], menu.mc[3])
                                                v2[5][5] = true
                                            end
                                        elseif v2[5][2] == COLORPICKER then
                                            if menu:MouseInMenu(v2[5][3][1], v2[5][3][2], 28, 14) then
                                                v2[5][5] = true
                                                menu.colorPickerOpen = v2[5]
                                                menu.colorPickerOpen = v2[5]
                                                if v2[5][1][4] ~= nil then
                                                    menu:SetColorPicker(
                                                        true,
                                                        v2[5][1],
                                                        v2[5],
                                                        true,
                                                        v2[5][6],
                                                        LOCAL_MOUSE.x,
                                                        LOCAL_MOUSE.y + 36
                                                    )
                                                else
                                                    menu:SetColorPicker(
                                                        true,
                                                        v2[5][1],
                                                        v2[5],
                                                        false,
                                                        v2[5][6],
                                                        LOCAL_MOUSE.x,
                                                        LOCAL_MOUSE.y + 36
                                                    )
                                                end
                                            end
                                        elseif v2[5][2] == DOUBLE_COLORPICKER then
                                            for k3, v3 in pairs(v2[5][1]) do
                                                if menu:MouseInMenu(v3[3][1], v3[3][2], 28, 14) then
                                                    v3[5] = true
                                                    menu.colorPickerOpen = v3
                                                    menu.colorPickerOpen = v3
                                                    if v3[1][4] ~= nil then
                                                        menu:SetColorPicker(
                                                            true,
                                                            v3[1],
                                                            v3,
                                                            true,
                                                            v3[6],
                                                            LOCAL_MOUSE.x,
                                                            LOCAL_MOUSE.y + 36
                                                        )
                                                    else
                                                        menu:SetColorPicker(
                                                            true,
                                                            v3[1],
                                                            v3,
                                                            false,
                                                            v3[6],
                                                            LOCAL_MOUSE.x,
                                                            LOCAL_MOUSE.y + 36
                                                        )
                                                    end
                                                end
                                            end
                                        end
                                    end
                                elseif v2[2] == SLIDER and not menu.dropbox_open then
                                    if menu:MouseInMenu(v2[7][1], v2[7][2], 22, 13) then
                                        local stepval = 1
                                        if v2.stepsize then
                                            stepval = v2.stepsize
                                        end
                                        if menu:modkeydown("shift", "left") then
                                            stepval = v2.shift_stepsize or 0.1
                                        end
                                        if menu:MouseInMenu(v2[7][1], v2[7][2], 11, 13) then
                                            v2[1] -= stepval
                                        elseif menu:MouseInMenu(v2[7][1] + 11, v2[7][2], 11, 13) then
                                            v2[1] += stepval
                                        end

                                        if v2[1] < v2[6][1] then
                                            v2[1] = v2[6][1]
                                        elseif v2[1] > v2[6][2] then
                                            v2[1] = v2[6][2]
                                        end
                                        local decplaces = v2.decimal and string.rep("0", math.log(1 / v2.decimal) / math.log(10))
                                        if decplaces and math.abs(v2[1]) < v2.decimal then
                                            v2[1] = 0
                                        end
                                        v2[4][5].Text = v2.custom[v2[1]] or (v2[1] == math.floor(v2[1]) and v2.decimal) and tostring(v2[1]) .. "." .. decplaces .. v2[4][6] or tostring(v2[1]) .. v2[4][6]

                                        for i = 1, 4 do
                                            v2[4][i].Size = Vector2.new(
                                                (v2[3][3] - 4) * ((v2[1] - v2[6][1]) / (v2[6][2] - v2[6][1])),
                                                2
                                            )
                                        end
                                    elseif menu:MouseInMenu(v2[3][1], v2[3][2], v2[3][3], 28) then
                                        v2[5] = true
                                    end
                                elseif v2[2] == DROPBOX then
                                    if menu.dropbox_open then
                                        if v2 ~= menu.dropbox_open then
                                            continue
                                        end
                                    end
                                    if menu:MouseInMenu(v2[3][1], v2[3][2], v2[3][3], 36) then
                                        if not v2[5] then
                                            v2[5] = menu:SetDropBox(
                                                true,
                                                v2[3][1] + menu.x + 1,
                                                v2[3][2] + menu.y + 13,
                                                v2[3][3],
                                                v2[1],
                                                v2[6]
                                            )
                                            newdropbox_open = v2
                                        else
                                            menu:SetDropBox(false, 400, 200, 160, 1, { "HI q", "HI q", "HI q" })
                                            v2[5] = false
                                            newdropbox_open = nil
                                        end
                                    elseif menu:MouseInMenu(v2[3][1], v2[3][2], v2[3][3], 24 * (#v2[6] + 1) + 3) and v2[5]
                                    then
                                        for i = 1, #v2[6] do
                                            if menu:MouseInMenu(
                                                    v2[3][1],
                                                    v2[3][2] + 36 + ((i - 1) * 21),
                                                    v2[3][3],
                                                    21
                                                )
                                            then
                                                v2[4][1].Text = v2[6][i]
                                                v2[1] = i
                                                menu:SetDropBox(false, 400, 200, 160, 1, { "HI q", "HI q", "HI q" })
                                                v2[5] = false
                                                newdropbox_open = nil
                                            end
                                        end

                                        if v2 == menu.options["Settings"]["Configuration"]["Configs"] then
                                            local textbox = menu.options["Settings"]["Configuration"]["ConfigName"]
                                            local relconfigs = GetConfigs()
                                            textbox[1] = relconfigs[menu.options["Settings"]["Configuration"]["Configs"][1]]
                                            textbox[4].Text = textbox[1]
                                        end
                                    end
                                elseif v2[2] == COMBOBOX then
                                    if menu.dropbox_open then
                                        if v2 ~= menu.dropbox_open then
                                            continue
                                        end
                                    end
                                    if menu:MouseInMenu(v2[3][1], v2[3][2], v2[3][3], 36) then
                                        if not v2[5] then
                                           
                                            v2[5] = set_comboboxthingy(
                                                true,
                                                v2[3][1] + menu.x + 1,
                                                v2[3][2] + menu.y + 13,
                                                v2[3][3],
                                                v2[1],
                                                v2[6]
                                            )
                                            newdropbox_open = v2
                                        else
                                            menu:SetDropBox(false, 400, 200, 160, 1, { "HI q", "HI q", "HI q" })
                                            v2[5] = false
                                            newdropbox_open = nil
                                        end
                                    elseif menu:MouseInMenu(v2[3][1], v2[3][2], v2[3][3], 24 * (#v2[1] + 1) + 3) and v2[5]
                                    then
                                        for i = 1, #v2[1] do
                                            if menu:MouseInMenu(
                                                    v2[3][1],
                                                    v2[3][2] + 36 + ((i - 1) * 22),
                                                    v2[3][3],
                                                    23
                                                )
                                            then
                                                v2[1][i][2] = not v2[1][i][2]
                                                local textthing = ""
                                                for k, v in pairs(v2[1]) do
                                                    if v[2] then
                                                        if textthing == "" then
                                                            textthing = v[1]
                                                        else
                                                            textthing = textthing .. ", " .. v[1]
                                                        end
                                                    end
                                                end
                                                textthing = textthing ~= "" and textthing or "None"
                                                textthing = string_cut(textthing, 25)
                                                v2[4][1].Text = textthing
                                                set_comboboxthingy(
                                                    true,
                                                    v2[3][1] + menu.x + 1,
                                                    v2[3][2] + menu.y + 13,
                                                    v2[3][3],
                                                    v2[1],
                                                    v2[6]
                                                )
                                            end
                                        end
                                    end
                                elseif v2[2] == BUTTON and not menu.dropbox_open then
                                    if menu:MouseInMenu(v2[3][1], v2[3][2], v2[3][3], 22) then
                                        if not v2[1] then
                                            buttonpressed(v2)
                                            if k2 == "Unload Cheat" then
                                                return
                                            end
                                            for i = 0, 8 do
                                                v2[4][i + 1].Color = ColorRange(i, {
                                                    [1] = { start = 0, color = RGB(35, 35, 35) },
                                                    [2] = { start = 8, color = RGB(50, 50, 50) },
                                                })
                                            end
                                            v2[1] = true
                                        end
                                    end
                                elseif v2[2] == TEXTBOX and not menu.dropbox_open then
                                    if menu:MouseInMenu(v2[3][1], v2[3][2], v2[3][3], 22) then
                                        if not v2[5] then
                                            menu.textboxopen = v2

                                            v2[4].Color = RGB(menu.mc[1], menu.mc[2], menu.mc[3])
                                            v2[5] = true
                                        end
                                    end
                                elseif v2[2] == "list" then
                                    --[[
                                    menu.options[v.name][v1.name][v2.name] = {}
                                    menu.options[v.name][v1.name][v2.name][4] = Draw:List(v2.name, v1.x + 8, v1.y + y_pos, v1.width - 16, v2.size, v2.columns, tabz[k])
                                    menu.options[v.name][v1.name][v2.name][1] = nil
                                    menu.options[v.name][v1.name][v2.name][2] = v2.type
                                    menu.options[v.name][v1.name][v2.name][3] = 1
                                    menu.options[v.name][v1.name][v2.name][5] = {}
                                    menu.options[v.name][v1.name][v2.name][6] = v2.size
                                    menu.options[v.name][v1.name][v2.name][7] = v2.columns
                                    menu.options[v.name][v1.name][v2.name][8] = {v1.x + 8, v1.y + y_pos, v1.width - 16}
                                    ]]
                                    --
                                    if #v2[5] > v2[6] then
                                        for i = 1, v2[6] do
                                            if menu:MouseInMenu(v2[8][1], v2[8][2] + (i * 22) - 5, v2[8][3], 22)
                                            then
                                                if v2[1] == tostring(v2[5][i + v2[3] - 1][1][1]) then
                                                    v2[1] = nil
                                                else
                                                    v2[1] = tostring(v2[5][i + v2[3] - 1][1][1])
                                                end
                                            end
                                        end
                                    else
                                        for i = 1, #v2[5] do
                                            if menu:MouseInMenu(v2[8][1], v2[8][2] + (i * 22) - 5, v2[8][3], 22)
                                            then
                                                if v2[1] == tostring(v2[5][i + v2[3] - 1][1][1]) then
                                                    v2[1] = nil
                                                else
                                                    v2[1] = tostring(v2[5][i + v2[3] - 1][1][1])
                                                end
                                            end
                                        end
                                    end
                                end
                            end
                        end
                    end
                end
            end
            menu.dropbox_open = newdropbox_open
        end
        for k, v in pairs(menu.options) do
            for k1, v1 in pairs(v) do
                for k2, v2 in pairs(v1) do
                    if v2[2] == TOGGLE then
                        if v2[6] then
                            if not menu:GetVal("Settings", "Cheat Settings", "Allow Unsafe Features") then
                                v2[1] = false
                                for i = 0, 3 do
                                    v2[4][i + 1].Color = ColorRange(i, {
                                        [1] = { start = 0, color = RGB(50, 50, 50) },
                                        [2] = { start = 3, color = RGB(30, 30, 30) },
                                    })
                                end
                            end
                        end
                    end
                end
            end
        end
        menucolor()
    end

   

    local function mousebutton1upfunc()
        cp.dragging_m = false
        cp.dragging_r = false
        cp.dragging_b = false
        for k, v in pairs(menu.options) do
            if menu.tabnames[menu.activetab] == k then
                for k1, v1 in pairs(v) do
                    for k2, v2 in pairs(v1) do
                        if v2[2] == SLIDER and v2[5] then
                            v2[5] = false
                        end
                        if v2[2] == BUTTON and v2[1] then
                            for i = 0, 8 do
                                v2[4][i + 1].Color = ColorRange(i, {
                                    [1] = { start = 0, color = RGB(50, 50, 50) },
                                    [2] = { start = 8, color = RGB(35, 35, 35) },
                                })
                            end
                            v2[1] = false
                        end
                    end
                end
            end
        end
    end

    local clickspot_x, clickspot_y, original_menu_x, original_menu_y = 0, 0, 0, 0

    menu.connections.mwf = LOCAL_MOUSE.WheelForward:Connect(function()
        if menu.open then
            for k, v in pairs(menu.options) do
                if menu.tabnames[menu.activetab] == k then
                    for k1, v1 in pairs(v) do
                        for k2, v2 in pairs(v1) do
                            if v2[2] == "list" then
                                if v2[3] > 1 then
                                    v2[3] -= 1
                                end
                            end
                        end
                    end
                end
            end
        end
    end)

    menu.connections.mwb = LOCAL_MOUSE.WheelBackward:Connect(function()
        if menu.open then
            for k, v in pairs(menu.options) do
                if menu.tabnames[menu.activetab] == k then
                    for k1, v1 in pairs(v) do
                        for k2, v2 in pairs(v1) do
                            if v2[2] == "list" then
                                if v2[5][v2[3] + v2[6]] ~= nil then
                                    v2[3] += 1
                                end
                            end
                        end
                    end
                end
            end
        end
    end)

    function menu:setMenuAlpha(transparency)
        for k, v in pairs(bbmouse) do
            v.Transparency = transparency
        end
        for k, v in pairs(bbmenu) do
            v.Transparency = transparency
        end
        for k, v in pairs(tabz[menu.activetab]) do
            v.Transparency = transparency
        end
    end

    function menu:setMenuVisible(visible)
        for k, v in pairs(bbmouse) do
            v.Visible = visible
        end
        for k, v in pairs(bbmenu) do
            v.Visible = visible
        end
        for k, v in pairs(tabz[menu.activetab]) do
            v.Visible = visible
        end

        if visible then
            for k, v in pairs(menu.multigroups) do
                if menu.tabnames[menu.activetab] == k then
                    for k1, v1 in pairs(v) do
                        for k2, v2 in pairs(v1.vals) do
                            for k3, v3 in pairs(menu.mgrouptabz[k][k2]) do
                                v3.Visible = v2
                            end
                        end
                    end
                end
            end
        end
    end

    menu:setMenuAlpha(0)
    menu:setMenuVisible(false)
    menu.lastActive = true
    menu.open = false
    menu.windowactive = true
    menu.connections.mousemoved = MouseMoved:connect(function(b)
        menu.windowactive = iswindowactive() or b
    end)

    local function renderSteppedMenu(fdt)
        if cp.dragging_m or cp.dragging_r or cp.dragging_b then
            menucolor()
        end
        menu.dt = fdt
        if menu.unloaded then
            return
        end
        SCREEN_SIZE = Camera.ViewportSize
        if bbmouse[#bbmouse-1] then
            if menu.inmenu and not menu.inmiddlemenu and not menu.intabs then
                bbmouse[#bbmouse-1].Visible = true
                bbmouse[#bbmouse-1].Transparency = 1
            else
                bbmouse[#bbmouse-1].Visible = false
            end
        end
        -- i pasted the old menu working ingame shit from the old source nate pls fix ty
        -- this is the really shitty alive check that we've been using since day one
        -- removed it :DDD
        -- im keepin all of our comments they're fun to look at
        -- i wish it showed comment dates that would be cool
        -- nah that would suck fk u (comment made on 3/4/2021 3:35 pm est by bitch)

       
        menu.lastActive = menu.windowactive
        for button, time in next, buttonsInQue do
            if time and tick() - time < doubleclickDelay then
                button[4].text.Color = RGB(menu.mc[1], menu.mc[2], menu.mc[3])
                button[4].text.Text = "Confirm?"
            else
                button[4].text.Color = Color3.new(1, 1, 1)
                button[4].text.Text = button.name
            end
        end
        if menu.open then
            if menu.backspaceheld then
                local dt = tick() - menu.backspacetime
                if dt > 0.4 then
                    menu.backspaceflags += 1
                    if menu.backspaceflags % 5 == 0 then
                        local textbox = menu.textboxopen
                        textbox[1] = string.sub(textbox[1], 0, #textbox[1] - 1)
                        textbox[4].Text = textbox[1] .. "|"
                    end
                end
            end
        end
        if menu.fading then
            if menu.open then
                menu.timesincefade = tick() - menu.fadestart
                menu.fade_amount = 1 - (menu.timesincefade * 10)
                menu:SetPlusMinus(0, 20, 20)
                menu:setMenuAlpha(menu.fade_amount)
                if menu.fade_amount <= 0 then
                    menu.open = false
                    menu.fading = false
                    menu:setMenuAlpha(0)
                    menu:setMenuVisible(false)
                else
                    menu:setMenuAlpha(menu.fade_amount)
                end
            else
                menu:setMenuVisible(true)
                setActiveTab(menu.activetab)
                menu.timesincefade = tick() - menu.fadestart
                menu.fade_amount = (menu.timesincefade * 10)
                menu.fadeamount = menu.fade_amount
                menu:setMenuAlpha(menu.fade_amount)
                if menu.fade_amount >= 1 then
                    menu.open = true
                    menu.fading = false
                    menu:setMenuAlpha(1)
                else
                    menu:setMenuAlpha(menu.fade_amount)
                end
            end
        end
        if menu.game == "uni" then
            if menu.open then
                INPUT_SERVICE.MouseBehavior = Enum.MouseBehavior.Default
            else
                if INPUT_SERVICE.MouseBehavior ~= menu.mousebehavior then
                    INPUT_SERVICE.MouseBehavior = menu.mousebehavior
                end
            end
        end
        menu:SetMousePosition(LOCAL_MOUSE.x, LOCAL_MOUSE.y)
        local settooltip = true
        if menu.open or menu.fading then
            menu:SetPlusMinus(0, 20, 20)
            for k, v in pairs(menu.options) do
                if menu.tabnames[menu.activetab] == k then
                    for k1, v1 in pairs(v) do
                        local pass = true
                        for k3, v3 in pairs(menu.multigroups) do
                            if k == k3 then
                                for k4, v4 in pairs(v3) do
                                    for k5, v5 in pairs(v4.vals) do
                                        if k1 == k5 then
                                            pass = v5
                                        end
                                    end
                                end
                            end
                        end

                        if pass then
                            for k2, v2 in pairs(v1) do
                                if v2[2] == TOGGLE then
                                    if not menu.dropbox_open and not menu.colorPickerOpen then
                                        if menu.open and menu:MouseInMenu(v2[3][1], v2[3][2], 30 + v2[4][5].TextBounds.x, 16)
                                        then
                                            if v2.tooltip and settooltip then
                                                menu:SetToolTip(
                                                    menu.x + v2[3][1],
                                                    menu.y + v2[3][2] + 18,
                                                    v2.tooltip,
                                                    true,
                                                    fdt--[[this is really fucking stupid]] -- this is no longer really fucking stupid
                                                )
                                                settooltip = false
                                            end
                                        end
                                    end
                                elseif v2[2] == SLIDER then
                                    if v2[5] then
                                        local new_val = (v2[6][2] - v2[6][1])  * (
                                                (
                                                    LOCAL_MOUSE.x
                                                    - menu.x
                                                    - v2[3][1]
                                                ) / v2[3][3]
                                            )
                                        v2[1] = (
                                                not v2.decimal and math.floor(new_val) or math.floor(new_val / v2.decimal) * v2.decimal
                                            ) + v2[6][1]
                                        if v2[1] < v2[6][1] then
                                            v2[1] = v2[6][1]
                                        elseif v2[1] > v2[6][2] then
                                            v2[1] = v2[6][2]
                                        end
                                        local decplaces = v2.decimal and string.rep("0", math.log(1 / v2.decimal) / math.log(10))
                                        if decplaces and math.abs(v2[1]) < v2.decimal then
                                            v2[1] = 0
                                        end

                                        v2[4][5].Text = v2.custom[v2[1]] or (v2[1] == math.floor(v2[1]) and v2.decimal) and tostring(v2[1]) .. "." .. decplaces .. v2[4][6] or tostring(v2[1]) .. v2[4][6]
                                        for i = 1, 4 do
                                            v2[4][i].Size = Vector2.new(
                                                (v2[3][3] - 4) * ((v2[1] - v2[6][1]) / (v2[6][2] - v2[6][1])),
                                                2
                                            )
                                        end
                                        menu:SetPlusMinus(1, v2[7][1], v2[7][2])
                                    else
                                        if not menu.dropbox_open then
                                            if menu:MouseInMenu(v2[3][1], v2[3][2], v2[3][3], 28) then
                                                if menu:MouseInMenu(v2[7][1], v2[7][2], 22, 13) then
                                                    if menu:MouseInMenu(v2[7][1], v2[7][2], 11, 13) then
                                                        menu:SetPlusMinus(2, v2[7][1], v2[7][2])
                                                    elseif menu:MouseInMenu(v2[7][1] + 11, v2[7][2], 11, 13) then
                                                        menu:SetPlusMinus(3, v2[7][1], v2[7][2])
                                                    end
                                                else
                                                    menu:SetPlusMinus(1, v2[7][1], v2[7][2])
                                                end
                                            end
                                        end
                                    end
                                elseif v2[2] == "list" then
                                    for k3, v3 in pairs(v2[4].liststuff) do
                                        for i, v4 in ipairs(v3) do
                                            for i1, v5 in ipairs(v4) do
                                                v5.Visible = false
                                            end
                                        end
                                    end
                                    for i = 1, v2[6] do
                                        if v2[5][i + v2[3] - 1] ~= nil then
                                            for i1 = 1, v2[7] do
                                                v2[4].liststuff.words[i][i1].Text = v2[5][i + v2[3] - 1][i1][1]
                                                v2[4].liststuff.words[i][i1].Visible = true

                                                if v2[5][i + v2[3] - 1][i1][1] == v2[1] and i1 == 1 then
                                                    if menu.options["Settings"]["Cheat Settings"]["Menu Accent"][1]
                                                    then
                                                        local clr = menu.options["Settings"]["Cheat Settings"]["Menu Accent"][5][1]
                                                        v2[4].liststuff.words[i][i1].Color = RGB(clr[1], clr[2], clr[3])
                                                    else
                                                        v2[4].liststuff.words[i][i1].Color = RGB(menu.mc[1], menu.mc[2], menu.mc[3])
                                                    end
                                                else
                                                    v2[4].liststuff.words[i][i1].Color = v2[5][i + v2[3] - 1][i1][2]
                                                end
                                            end
                                            for k3, v3 in pairs(v2[4].liststuff.rows[i]) do
                                                v3.Visible = true
                                            end
                                        elseif v2[3] > 1 then
                                            v2[3] -= 1
                                        end
                                    end
                                    if v2[3] == 1 then
                                        for k3, v3 in pairs(v2[4].uparrow) do
                                            if v3.Visible then
                                                v3.Visible = false
                                            end
                                        end
                                    else
                                        for k3, v3 in pairs(v2[4].uparrow) do
                                            if not v3.Visible then
                                                v3.Visible = true
                                                menu:SetMenuPos(menu.x, menu.y)
                                            end
                                        end
                                    end
                                    if v2[5][v2[3] + v2[6]] == nil then
                                        for k3, v3 in pairs(v2[4].downarrow) do
                                            if v3.Visible then
                                                v3.Visible = false
                                            end
                                        end
                                    else
                                        for k3, v3 in pairs(v2[4].downarrow) do
                                            if not v3.Visible then
                                                v3.Visible = true
                                                menu:SetMenuPos(menu.x, menu.y)
                                            end
                                        end
                                    end
                                end
                            end
                        end
                    end
                end
            end
            menu.inmenu = LOCAL_MOUSE.x > menu.x and LOCAL_MOUSE.x < menu.x + menu.w and LOCAL_MOUSE.y > menu.y - 32 and LOCAL_MOUSE.y < menu.y + menu.h - 34
            menu.intabs = LOCAL_MOUSE.x > menu.x + 9 and LOCAL_MOUSE.x < menu.x + menu.w - 9 and LOCAL_MOUSE.y > menu.y - 9 and LOCAL_MOUSE.y < menu.y + 24
            menu.inmiddlemenu = LOCAL_MOUSE.x > menu.x + 18 and LOCAL_MOUSE.x < menu.x + menu.w - 18 and LOCAL_MOUSE.y > menu.y + 33 and LOCAL_MOUSE.y < menu.y + menu.h - 56
            if (
                    --[[(
                        LOCAL_MOUSE.x > menu.x and LOCAL_MOUSE.x < menu.x + menu.w and LOCAL_MOUSE.y > menu.y - 32 and LOCAL_MOUSE.y < menu.y - 11
                    )]]
                    (
                        menu.inmenu and
                        not menu.intabs and
                        not menu.inmiddlemenu
                    ) or menu.dragging
                ) and not menu.dontdrag
            then
                if menu.mousedown and not menu.colorPickerOpen and not dropbox_open then
                    if not menu.dragging then
                        clickspot_x = LOCAL_MOUSE.x
                        clickspot_y = LOCAL_MOUSE.y - 36 original_menu_X = menu.x original_menu_y = menu.y
                        menu.dragging = true
                    end
                    menu.x = (original_menu_X - clickspot_x) + LOCAL_MOUSE.x
                    menu.y = (original_menu_y - clickspot_y) + LOCAL_MOUSE.y - 36
                    if menu.y < 0 then
                        menu.y = 0
                    end
                    if menu.x < -menu.w / 4 * 3 then
                        menu.x = -menu.w / 4 * 3
                    end
                    if menu.x + menu.w / 4 > SCREEN_SIZE.x then
                        menu.x = SCREEN_SIZE.x - menu.w / 4
                    end
                    if menu.y > SCREEN_SIZE.y - 20 then
                        menu.y = SCREEN_SIZE.y - 20
                    end
                    menu:SetMenuPos(menu.x, menu.y)
                else
                    menu.dragging = false
                end
            elseif menu.mousedown then
                menu.dontdrag = true
            elseif not menu.mousedown then
                menu.dontdrag = false
            end
            if menu.colorPickerOpen then
                if cp.dragging_m then
                    menu:SetDragBarM(
                        clamp(LOCAL_MOUSE.x, cp.x + 12, cp.x + 167) - 2,
                        clamp(LOCAL_MOUSE.y + 36, cp.y + 25, cp.y + 180) - 2
                    )

                    cp.hsv.s = (clamp(LOCAL_MOUSE.x, cp.x + 12, cp.x + 167) - cp.x - 12) / 155
                    cp.hsv.v = 1 - ((clamp(LOCAL_MOUSE.y + 36, cp.y + 23, cp.y + 178) - cp.y - 23) / 155)
                    newcolor.Color = Color3.fromHSV(cp.hsv.h, cp.hsv.s, cp.hsv.v)
                    local tempclr = Color3.fromHSV(cp.hsv.h, cp.hsv.s, cp.hsv.v)
                    menu.colorPickerOpen[4][1].Color = tempclr
                    for i = 2, 3 do
                        menu.colorPickerOpen[4][i].Color = RGB(
                            math.floor(tempclr.R * 255) - 40,
                            math.floor(tempclr.G * 255) - 40,
                            math.floor(tempclr.B * 255) - 40
                        )
                    end
                    if cp.alpha then
                        menu.colorPickerOpen[1] = {
                            math.floor(tempclr.R * 255),
                            math.floor(tempclr.G * 255),
                            math.floor(tempclr.B * 255),
                            cp.hsv.a,
                        }
                    else
                        menu.colorPickerOpen[1] = {
                            math.floor(tempclr.R * 255),
                            math.floor(tempclr.G * 255),
                            math.floor(tempclr.B * 255),
                        }
                    end
                elseif cp.dragging_r then
                    menu:SetDragBarR(cp.x + 175, clamp(LOCAL_MOUSE.y + 36, cp.y + 23, cp.y + 178))

                    maincolor.Color = Color3.fromHSV(
                            1 - ((clamp(LOCAL_MOUSE.y + 36, cp.y + 23, cp.y + 178) - cp.y - 23) / 155),
                            1,
                            1
                        )

                    cp.hsv.h = 1 - ((clamp(LOCAL_MOUSE.y + 36, cp.y + 23, cp.y + 178) - cp.y - 23) / 155)
                    newcolor.Color = Color3.fromHSV(cp.hsv.h, cp.hsv.s, cp.hsv.v)
                    local tempclr = Color3.fromHSV(cp.hsv.h, cp.hsv.s, cp.hsv.v)
                    menu.colorPickerOpen[4][1].Color = tempclr
                    for i = 2, 3 do
                        menu.colorPickerOpen[4][i].Color = RGB(
                            math.floor(tempclr.R * 255) - 40,
                            math.floor(tempclr.G * 255) - 40,
                            math.floor(tempclr.B * 255) - 40
                        )
                    end
                    if cp.alpha then
                        menu.colorPickerOpen[1] = {
                            math.floor(tempclr.R * 255),
                            math.floor(tempclr.G * 255),
                            math.floor(tempclr.B * 255),
                            cp.hsv.a,
                        }
                    else
                        menu.colorPickerOpen[1] = {
                            math.floor(tempclr.R * 255),
                            math.floor(tempclr.G * 255),
                            math.floor(tempclr.B * 255),
                        }
                    end
                elseif cp.dragging_b then
                    local tempclr = Color3.fromHSV(cp.hsv.h, cp.hsv.s, cp.hsv.v)
                    menu.colorPickerOpen[4][1].Color = tempclr
                    for i = 2, 3 do
                        menu.colorPickerOpen[4][i].Color = RGB(
                            math.floor(tempclr.R * 255) - 40,
                            math.floor(tempclr.G * 255) - 40,
                            math.floor(tempclr.B * 255) - 40
                        )
                    end
                    if cp.alpha then
                        menu.colorPickerOpen[1] = {
                            math.floor(tempclr.R * 255),
                            math.floor(tempclr.G * 255),
                            math.floor(tempclr.B * 255),
                            cp.hsv.a,
                        }
                    else
                        menu.colorPickerOpen[1] = {
                            math.floor(tempclr.R * 255),
                            math.floor(tempclr.G * 255),
                            math.floor(tempclr.B * 255),
                        }
                    end
                    menu:SetDragBarB(clamp(LOCAL_MOUSE.x, cp.x + 10, cp.x + 168), cp.y + 188)
                    newcolor.Transparency = (clamp(LOCAL_MOUSE.x, cp.x + 10, cp.x + 168) - cp.x - 10) / 158
                    cp.hsv.a = math.floor(((clamp(LOCAL_MOUSE.x, cp.x + 10, cp.x + 168) - cp.x - 10) / 158) * 255)
                else
                    local setvisnew = menu:MouseInColorPicker(197, 37, 75, 40)
                    for i, v in ipairs(newcopy) do
                        v.Visible = setvisnew
                    end

                    local setvisold = menu:MouseInColorPicker(197, 91, 75, 40)
                    for i, v in ipairs(oldcopy) do
                        v.Visible = setvisold
                    end
                end
            end
        else
            menu.dragging = false
        end
        if settooltip then
            menu:SetToolTip(nil, nil, nil, false, fdt)
        end
    end

    menu.connections.inputstart = INPUT_SERVICE.InputBegan:Connect(function(input)
        if menu then
            if input.UserInputType == Enum.UserInputType.MouseButton1 then
                menu.mousedown = true
                if menu.open and not menu.fading then
                    MouseButton1Event()
                end
            elseif input.UserInputType == Enum.UserInputType.MouseButton2 then
                if menu.open and not menu.fading then
                    MouseButton2Event()
                end
            end

            if input.UserInputType == Enum.UserInputType.Keyboard then
                if input.KeyCode.Name:match("Shift") then
                    local kcn = input.KeyCode.Name
                    local direction = kcn:split("Shift")[1]
                    menu.modkeys.shift.direction = direction:lower()
                end
                if input.KeyCode.Name:match("Alt") then
                    local kcn = input.KeyCode.Name
                    local direction = kcn:split("Alt")[1]
                    menu.modkeys.alt.direction = direction:lower()
                end
            end
            if not menu then
                return
            end -- this fixed shit with unload
            menu:InputBeganMenu(input)
            menu:InputBeganKeybinds(input)
            if menu.open then
                if menu.tabnames[menu.activetab] == "Settings" then
                    local menutext = menu:GetVal("Settings", "Cheat Settings", "Custom Menu Name") and menu:GetVal("Settings", "Cheat Settings", "MenuName") or "Bitch Bot"

                    bbmenu[27].Text = menutext

                    menu.watermark.text[1].Text = menutext.. menu.watermark.textString

                    for i, v in ipairs(menu.watermark.rect) do
                        local len = #menu.watermark.text[1].Text * 7 + 10
                        if i == #menu.watermark.rect then
                            len += 2
                        end
                        v.Size = Vector2.new(len, v.Size.y)
                    end
                end
            end
            if input.KeyCode == Enum.KeyCode.F2 then
                menu.stat_menu = not menu.stat_menu

                for k, v in pairs(graphs) do
                    if k ~= "other" then
                        for k1, v1 in pairs(v) do
                            if k1 ~= "pos" then
                                for k2, v2 in pairs(v1) do
                                    v2.Visible = menu.stat_menu
                                end
                            end
                        end
                    end
                end

                for k, v in pairs(graphs.other) do
                    v.Visible = menu.stat_menu
                end
            end
        end
    end)

    menu.connections.inputended = INPUT_SERVICE.InputEnded:Connect(function(input)
        menu:InputEndedKeybinds(input)
        if input.UserInputType == Enum.UserInputType.MouseButton1 then
            menu.mousedown = false
            if menu.open and not menu.fading then
                mousebutton1upfunc()
            end
        end
        if input.UserInputType == Enum.UserInputType.Keyboard then
            if input.KeyCode.Name:match("Shift") then
                menu.modkeys.shift.direction = nil
            end
            if input.KeyCode.Name:match("Alt") then
                menu.modkeys.alt.direction = nil
            end
        end
    end)

    menu.connections.renderstepped = game.RunService.RenderStepped:Connect(renderSteppedMenu) -- fucking asshole 🖕🖕🖕

    function menu:unload()
        getgenv().v2 = nil
        self.unloaded = true

        for k, conn in next, self.connections do
            if not getrawmetatable(conn) then
                conn()
            else
                conn:Disconnect()
            end
            self.connections[k] = nil
        end

        game:service("ContextActionService"):UnbindAction("BB Keycheck")
        if self.game == "pf" then
            game:service("ContextActionService"):UnbindAction("BB PF check")
        elseif self.game == "uni" then
            game:service("ContextActionService"):UnbindAction("BB UNI check")
        end

        local mt = getrawmetatable(game)

        setreadonly(mt, false)

        local oldmt = menu.oldmt

        if oldmt then
            for k, v in next, mt do
                if oldmt[k] then
                    mt[k] = oldmt[k]
                end
            end
        else
            --TODO nate do this please
            -- remember to store any "game" metatable hooks PLEASE PLEASE because this will ensure it replaces the meta so that it UNLOADS properly
            -- rconsoleerr("fatal error: no old game meta found! (UNLOAD PROBABLY WON'T WORK AS EXPECTED)")
        end

        setreadonly(mt, true)

        if menu.game == "pf" or menu.pfunload then
            menu:pfunload()
        end

        Draw:UnRender()
        CreateNotification = nil
        allrender = nil
        menu = nil
        Draw = nil
        self.unloaded = true
    end
end

local avgfps = 100

-- I STOLE THE FPS COUNTER FROM https://devforum.roblox.com/t/get-client-fps-trough-a-script/282631/14 😿😿😿😢😭
-- fixed ur shitty fps counter
local StatMenuRendered = event.new("StatMenuRendered")
menu.connections.heartbeatmenu = game.RunService.Heartbeat:Connect(function() --ANCHOR MENU HEARTBEAT
    if menu.open then
        if menu.y < 0 then
            menu.y = 0
            menu:SetMenuPos(menu.x, 0)
        end
        if menu.x < -menu.w / 4 * 3 then
            menu.x = -menu.w / 4 * 3
            menu:SetMenuPos(-menu.w / 4 * 3, menu.y)
        end
        if menu.x + menu.w / 4 > SCREEN_SIZE.x then
            menu.x = SCREEN_SIZE.x - menu.w / 4
            menu:SetMenuPos(SCREEN_SIZE.x - menu.w / 4, menu.y)
        end
        if menu.y > SCREEN_SIZE.y - 20 then
            menu.y = SCREEN_SIZE.y - 20
            menu:SetMenuPos(menu.x, SCREEN_SIZE.y - 20)
        end
    end
    if menu.stat_menu == false then
        return
    end
    local fps = 1 / (menu.dt or 1)
    avgfps = (fps + avgfps * 49) / 50
    local CurrentFPS = math.floor(avgfps)

    if tick() > lasttick + 0.25 then
        table.remove(networkin.incoming, 1)
        table.insert(networkin.incoming, stats.DataReceiveKbps)

        table.remove(networkin.outgoing, 1)
        table.insert(networkin.outgoing, stats.DataSendKbps)

        --incoming
        local biggestnum = 80
        for i = 1, 21 do
            if math.ceil(networkin.incoming[i]) > biggestnum - 10 then
                biggestnum = (math.ceil(networkin.incoming[i] / 10) + 1) * 10
                --graphs.incoming.pos.x - 21, graphs.incoming.pos.y - 7,
            end
        end

        local numstr = tostring(biggestnum)
        graphs.incoming.sides[2].Text = numstr
        graphs.incoming.sides[2].Position = Vector2.new(graphs.incoming.pos.x - ((#numstr + 1) * 7), graphs.incoming.pos.y - 7)

        for i = 1, 20 do
            local line = graphs.incoming.graph[i]

            line.From = Vector2.new(
                ((i - 1) * 11) + graphs.incoming.pos.x,
                graphs.incoming.pos.y + 80 - math.floor(networkin.incoming[i] / biggestnum * 80)
            )

            line.To = Vector2.new(
                (i * 11) + graphs.incoming.pos.x,
                graphs.incoming.pos.y + 80 - math.floor(networkin.incoming[i + 1] / biggestnum * 80)
            )
        end

        local avgbar_h = average(networkin.incoming)

        local avg_color = menu:GetVal("Settings", "Cheat Settings", "Menu Accent") and RGB(unpack(menu.mc)) or RGB(59, 214, 28)

        graphs.incoming.graph[21].From = Vector2.new(
            graphs.incoming.pos.x + 1,
            graphs.incoming.pos.y + 80 - math.floor(avgbar_h / biggestnum * 80)
        )
        graphs.incoming.graph[21].To = Vector2.new(
            graphs.incoming.pos.x + 220,
            graphs.incoming.pos.y + 80 - math.floor(avgbar_h / biggestnum * 80)
        )
        graphs.incoming.graph[21].Color = avg_color
        graphs.incoming.graph[21].Thickness = 2

        graphs.incoming.graph[22].Position = Vector2.new(
            graphs.incoming.pos.x + 222,
            graphs.incoming.pos.y + 80 - math.floor(avgbar_h / biggestnum * 80) - 8
        )
        graphs.incoming.graph[22].Text = "avg: " .. tostring(round(avgbar_h, 2))
        graphs.incoming.graph[22].Color = avg_color

        graphs.incoming.sides[1].Text = "incoming kbps: " .. tostring(round(networkin.incoming[21], 2))

        -- outgoing
        local biggestnum = 10
        for i = 1, 21 do
            if math.ceil(networkin.outgoing[i]) > biggestnum - 5 then
                biggestnum = (math.ceil(networkin.outgoing[i] / 5) + 1) * 5
            end
        end

        local numstr = tostring(biggestnum)
        graphs.outgoing.sides[2].Text = numstr
        graphs.outgoing.sides[2].Position = Vector2.new(graphs.outgoing.pos.x - ((#numstr + 1) * 7), graphs.outgoing.pos.y - 7)

        for i = 1, 20 do
            local line = graphs.outgoing.graph[i]

            line.From = Vector2.new(
                ((i - 1) * 11) + graphs.outgoing.pos.x,
                graphs.outgoing.pos.y + 80 - math.floor(networkin.outgoing[i] / biggestnum * 80)
            )

            line.To = Vector2.new(
                (i * 11) + graphs.outgoing.pos.x,
                graphs.outgoing.pos.y + 80 - math.floor(networkin.outgoing[i + 1] / biggestnum * 80)
            )
        end

        local avgbar_h = average(networkin.outgoing)

        graphs.outgoing.graph[21].From = Vector2.new(
            graphs.outgoing.pos.x + 1,
            graphs.outgoing.pos.y + 80 - math.floor(avgbar_h / biggestnum * 80)
        )
        graphs.outgoing.graph[21].To = Vector2.new(
            graphs.outgoing.pos.x + 220,
            graphs.outgoing.pos.y + 80 - math.floor(avgbar_h / biggestnum * 80)
        )
        graphs.outgoing.graph[21].Color = avg_color
        graphs.outgoing.graph[21].Thickness = 2

        graphs.outgoing.graph[22].Position = Vector2.new(
            graphs.outgoing.pos.x + 222,
            graphs.outgoing.pos.y + 80 - math.floor(avgbar_h / biggestnum * 80) - 8
        )
        graphs.outgoing.graph[22].Text = "avg: " .. tostring(round(avgbar_h, 2))
        graphs.outgoing.graph[22].Color = avg_color

        graphs.outgoing.sides[1].Text = "outgoing kbps: " .. tostring(round(networkin.outgoing[21], 2))

        local drawnobjects = 0
        for k, v in pairs(allrender) do
            drawnobjects += #v
        end

        graphs.other[1].Text = string.format(
            "initiation time: %d ms\ndrawn objects: %d\ntick: %d\nfps: %d\nlatency: %d",
            menu.load_time,
            drawnobjects,
            tick(),
            CurrentFPS,
            math.ceil(GetLatency() * 1000)
        )
        lasttick = tick()
        StatMenuRendered:fire(graphs.other[1])

        local logsstr = "[DEBUG LOGS]\n"
        for i, v in ipairs(reverse_table(NotifLogs)) do
            logsstr = logsstr.. v.. "\n"
            if i >= 13 then break end
        end
        graphs.other[2].Text = logsstr
    end
end)

local function keycheck(actionName, inputState, inputObject)
    if actionName == "BB Keycheck" then
        if menu.open then
            if menu.textboxopen then
                if inputObject.KeyCode == Enum.KeyCode.Backspace then
                    if menu.selectall then
                        menu.textboxopen[1] = ""
                        menu.textboxopen[4].Text = "|"
                        menu.textboxopen[4].Color = RGB(unpack(menu.mc))
                        menu.selectall = false
                    end
                    local on = inputState == Enum.UserInputState.Begin
                    menu.backspaceheld = on
                    menu.backspacetime = on and tick() or -1
                    if not on then
                        menu.backspaceflags = 0
                    end
                end

                if inputObject.KeyCode ~= Enum.KeyCode.A and (not inputObject.KeyCode.Name:match("^Left") and not inputObject.KeyCode.Name:match("^Right")) and inputObject.KeyCode ~= Enum.KeyCode.Delete
                then
                    if menu.selectall then
                        menu.textboxopen[4].Color = RGB(unpack(menu.mc))
                        menu.selectall = false
                    end
                end

                if inputObject.KeyCode == Enum.KeyCode.A then
                    if inputState == Enum.UserInputState.Begin and INPUT_SERVICE:IsKeyDown(Enum.KeyCode.LeftControl)
                    then
                        menu.selectall = true
                        local textbox = menu.textboxopen
                        textbox[4].Color = RGB(menu.mc[3], menu.mc[2], menu.mc[1])
                    end
                end

                return Enum.ContextActionResult.Sink
            end
        end

        return Enum.ContextActionResult.Pass
    end
end
game:service("ContextActionService"):BindAction("BB Keycheck", keycheck, false, Enum.UserInputType.Keyboard)

if menu.game == "uni" then --SECTION UNIVERSAL
    menu.activetab = 4

    menu.mousebehavior = Enum.MouseBehavior.Default

    local mt = getrawmetatable(game)

    local newindex = mt.__newindex
    --[[local index = mt.__index
    local namecall = mt.__namecall]]

    setreadonly(mt, false)

    mt.__newindex = newcclosure(function(t, p, v)
        if not checkcaller() then
            if t == INPUT_SERVICE then
                if p == "MouseBehavior" then
                    menu.mousebehavior = v
                    if menu.open then
                        newindex(t, p, Enum.MouseBehavior.Default)
                        return
                    end
                end
            end
        end

        return newindex(t, p, v)
    end)

    menu.oldmt = {
        __newindex = newindex,
    }

    setreadonly(mt, true)

    local allesp = {
        headdotoutline = {},
        headdot = {},
        name = {},
        displayname = {},
        outerbox = {},
        box = {},
        filledbox = {},
        innerbox = {},
        healthouter = {},
        healthinner = {},
        hptext = {},
        distance = {},
        team = {},
    }

    for i = 1, Players.MaxPlayers do
        Draw:FilledRect(false, 20, 20, 20, 20, { 0, 0, 0, 220 }, allesp.filledbox)

        Draw:Circle(false, 20, 20, 10, 3, 10, { 10, 10, 10, 215 }, allesp.headdotoutline)
        Draw:Circle(false, 20, 20, 10, 1, 10, { 255, 255, 255, 255 }, allesp.headdot)

        Draw:OutlinedRect(false, 20, 20, 20, 20, { 0, 0, 0, 220 }, allesp.innerbox)
        Draw:OutlinedRect(false, 20, 20, 20, 20, { 0, 0, 0, 220 }, allesp.outerbox)
        Draw:OutlinedRect(false, 20, 20, 20, 20, { 255, 255, 255, 255 }, allesp.box)

        Draw:FilledRect(false, 20, 20, 4, 20, { 10, 10, 10, 215 }, allesp.healthouter)
        Draw:FilledRect(false, 20, 20, 20, 20, { 255, 255, 255, 255 }, allesp.healthinner)

        Draw:OutlinedText("", 1, false, 20, 20, 13, false, { 255, 255, 255, 255 }, { 0, 0, 0 }, allesp.hptext)
        Draw:OutlinedText("", 2, false, 20, 20, 13, true, { 255, 255, 255, 255 }, { 0, 0, 0 }, allesp.distance)
        Draw:OutlinedText("", 2, false, 20, 20, 13, true, { 255, 255, 255, 255 }, { 0, 0, 0 }, allesp.name)
        Draw:OutlinedText("", 2, false, 20, 20, 13, true, { 255, 255, 255, 255 }, { 0, 0, 0 }, allesp.displayname)
        Draw:OutlinedText("", 2, false, 20, 20, 13, true, { 255, 255, 255, 255 }, { 0, 0, 0 }, allesp.team)
    end

    menu.crosshair = { outline = {}, inner = {} }
    for i, v in pairs(menu.crosshair) do
        for i = 1, 2 do
            Draw:FilledRect(false, 20, 20, 20, 20, { 10, 10, 10, 215 }, v)
        end
    end

    menu.fovcircle = {}
    Draw:Circle(false, 20, 20, 10, 3, 20, { 10, 10, 10, 215 }, menu.fovcircle)
    Draw:Circle(false, 20, 20, 10, 1, 20, { 255, 255, 255, 255 }, menu.fovcircle)

    menu.Initialize({
        {
            name = "Combat",
            content = {
                {
                    name = "Aim Assist",
                    autopos = "left",
                    autofill = true,
                    content = {
                        {
                            type = TOGGLE,
                            name = "Enabled",
                            value = false,
                            extra = {
                                type = KEYBIND,
                                key = Enum.KeyCode.J,
                                toggletype = 1,
                            },
                        },
                        {
                            type = DROPBOX,
                            name = "Use Mouse Keys",
                            value = 1,
                            values = { "Off", "Mouse 1", "Mouse 2" },
                        },
                        {
                            type = TOGGLE,
                            name = "Target Priority Only",
                            value = false,
                        },
                        {
                            type = COMBOBOX,
                            name = "Checks",
                            values = { { "Alive", true }, { "Same Team", false }, { "Distance", false } },
                        },
                        {
                            type = SLIDER,
                            name = "Max Distance",
                            value = 100,
                            minvalue = 30,
                            maxvalue = 500,
                            stradd = "m",
                        },
                        {
                            type = DROPBOX,
                            name = "FOV Calculation",
                            value = 1,
                            values = { "Pixel", "Actual Fov", "Custom FOV" },
                        },
                        {
                            type = SLIDER,
                            name = "Custom FOV Value",
                            value = 60,
                            minvalue = 60,
                            maxvalue = 120,
                            stradd = "°",
                        },
                        {
                            type = SLIDER,
                            name = "Aimbot FOV",
                            value = 0,
                            minvalue = 0,
                            maxvalue = 360,
                            stradd = "°",
                            custom = {
                                [0] = "Unlimited"
                            }
                        },
                        {
                            type = DROPBOX,
                            name = "Hitbox",
                            value = 1,
                            values = { "Head", "Torso" },
                        },
                        {
                            type = TOGGLE,
                            name = "Force Angles In First Person",
                            unsafe = true,
                            value = false,
                        },
                        {
                            type = TOGGLE,
                            name = "Smoothing",
                            value = false,
                        },
                        {
                            type = SLIDER,
                            name = "Smoothing Ammount",
                            value = 0,
                            minvalue = 0,
                            maxvalue = 100,
                            stradd = "%",
                        },
                        -- {
                        --     type = TOGGLE,
                        --     name = "Visibility Check",
                        --     value = false,
                        -- },
                        -- {
                        --     type = COMBOBOX,
                        --     name = "Visibility Check Filters",
                        --     values = { { "Transparent", true }, { "Force Feild", false }, { "Collisionless", false }, { "Thickness", false } },
                        -- },
                        -- {
                        --     type = TOGGLE,
                        --     name = "Auto Shoot",
                        --     value = false,
                        -- },
                    },
                },
                {
                    name = "Trigger Bot",
                    autopos = "right",
                    autofill = true,
                    content = {
                        {
                            -- type = TOGGLE,
                            -- name = "Enabled",
                            -- value = false,
                            -- extra = {
                            --     type = KEYBIND,
                            --     key = Enum.KeyCode.J,
                            --     toggletype = 1,
                            -- },
                        },
                    },
                }
            },
        },
        {
            name = "Visuals",
            content = {
                {
                    name = "Player ESP",
                    autopos = "left",
                    content = {
                        {
                            type = TOGGLE,
                            name = "Name",
                            value = false,
                            extra = {
                                type = COLORPICKER,
                                name = "Name ESP",
                                color = { 255, 255, 255, 255 },
                            },
                        },
                        {
                            type = TOGGLE,
                            name = "Display Name",
                            value = false,
                            extra = {
                                type = COLORPICKER,
                                name = "Display Name ESP",
                                color = { 255, 255, 255, 255 },
                            },
                        },
                        {
                            type = TOGGLE,
                            name = "Head Dot",
                            value = false,
                            extra = {
                                type = COLORPICKER,
                                name = "Head Dot",
                                color = { 255, 255, 255, 255 },
                            },
                        },
                        {
                            type = TOGGLE,
                            name = "Box",
                            value = false,
                            extra = {
                                type = DOUBLE_COLORPICKER,
                                name = { "Box Fill", "Box ESP" },
                                color = { { 255, 0, 0, 0 }, { 255, 0, 0, 150 } },
                            },
                        },
                        {
                            type = TOGGLE,
                            name = "Health Bar",
                            value = false,
                            extra = {
                                type = DOUBLE_COLORPICKER,
                                name = { "Low Health", "Max Health" },
                                color = { { 255, 0, 0 }, { 0, 255, 0 } },
                            },
                        },
                        {
                            type = TOGGLE,
                            name = "Health Number",
                            value = false,
                            extra = {
                                type = COLORPICKER,
                                name = "Health Number ESP",
                                color = { 255, 255, 255, 255 },
                            },
                        },
                        {
                            type = TOGGLE,
                            name = "Team",
                            value = false,
                            extra = {
                                type = COLORPICKER,
                                name = "Team ESP",
                                color = { 255, 255, 255, 255 },
                            },
                        },
                        {
                            type = TOGGLE,
                            name = "Team Color Based",
                            value = false,
                        },
                        {
                            type = TOGGLE,
                            name = "Distance",
                            value = false,
                            extra = {
                                type = COLORPICKER,
                                name = "Distance ESP",
                                color = { 255, 255, 255, 255 },
                            },
                        },
                    },
                },
                {
                    name = "ESP Settings",
                    autopos = "left",
                    autofill = true,
                    content = {
                        -- {
                        --     type = DROPBOX,
                        --     name = "ESP Sorting",
                        --     value = 1,
                        --     values = { "None", "Distance" },
                        -- },
                        {
                            type = COMBOBOX,
                            name = "Checks",
                            values = { { "Alive", true }, { "Same Team", false }, { "Distance", false } },
                        },
                        {
                            type = SLIDER,
                            name = "Max Distance",
                            value = 100,
                            minvalue = 30,
                            maxvalue = 500,
                            stradd = "m",
                        },
                        {
                            type = SLIDER,
                            name = "Max HP Visibility Cap",
                            value = 90,
                            minvalue = 50,
                            maxvalue = 100,
                            stradd = "% hp",
                            custom = {
                                [100] = "Always"
                            }
                        },
                        {
                            type = DROPBOX,
                            name = "Text Case",
                            value = 2,
                            values = { "lowercase", "Normal", "UPPERCASE" },
                        },
                        {
                            type = SLIDER,
                            name = "Max Text Length",
                            value = 0,
                            minvalue = 0,
                            maxvalue = 32,
                            custom = { [0] = "Unlimited" },
                            stradd = " letters",
                        },
                        {
                            type = TOGGLE,
                            name = "Highlight Target",
                            value = false,
                            extra = {
                                type = COLORPICKER,
                                name = "Aimbot Target",
                                color = { 255, 0, 0, 255 },
                            },
                        },
                        {
                            type = TOGGLE,
                            name = "Highlight Friends",
                            value = true,
                            extra = {
                                type = COLORPICKER,
                                name = "Friended Players",
                                color = { 0, 255, 255, 255 },
                            },
                        },
                        {
                            type = TOGGLE,
                            name = "Highlight Priority",
                            value = true,
                            extra = {
                                type = COLORPICKER,
                                name = "Priority Players",
                                color = { 255, 210, 0, 255 },
                            },
                        },
                    },
                },
                {
                    name = "Local Visuals",
                    autopos = "right",
                    content = {
                        {
                            type = TOGGLE,
                            name = "Change FOV",
                            value = false,
                        },
                        {
                            type = SLIDER,
                            name = "Camera FOV",
                            value = 60,
                            minvalue = 60,
                            maxvalue = 120,
                            stradd = "°",
                        },
                    },
                },
                {
                    name = "World Visuals",
                    autopos = "right",
                    content = {
                        {
                            type = TOGGLE,
                            name = "Force Time",
                            value = false,
                            --tooltip = "Forces the time to the time set by your below.",
                        },
                        {
                            type = SLIDER,
                            name = "Custom Time",
                            value = 0,
                            minvalue = 0,
                            maxvalue = 24,
                            decimal = 0.1,
                            stradd = "hr",
                        },
                    }
                },
                {
                    name = "Misc",
                    autopos = "right",
                    autofill = true,
                    content = {
                        {
                            type = TOGGLE,
                            name = "Custom Crosshair",
                            value = false,
                            extra = {
                                type = COLORPICKER,
                                name = "Crosshair Color",
                                color = { 255, 255, 255, 255 },
                            },
                        },

                        {
                            type = DROPBOX,
                            name = "Crosshair Position",
                            value = 1,
                            values = { "Center Of Screen", "Mouse" },
                        },
                        {
                            type = SLIDER,
                            name = "Crosshair Size",
                            value = 10,
                            minvalue = 5,
                            maxvalue = 15,
                            stradd = "px",
                        },
                        {
                            type = TOGGLE,
                            name = "Draw Aimbot FOV",
                            value = false,
                            extra = {
                                type = COLORPICKER,
                                name = "Aimbot FOV Circle Color",
                                color = { 255, 255, 255, 255 },
                            },
                        },
                    },
                },
            },
        },
        {
            name = "Misc",
            content = {
                {
                    name = "Movement",
                    autopos = "left",
                    autofill = true,
                    content = {
                        {
                            type = TOGGLE,
                            name = "Speed",
                            value = false,
                            extra = {
                                type = KEYBIND,
                                key = Enum.KeyCode.LeftShift,
                                toggletype = 1,
                            },
                        },
                        {
                            type = SLIDER,
                            name = "Speed Factor",
                            value = 40,
                            minvalue = 1,
                            maxvalue = 200,
                            stradd = " stud/s",
                        },
                        {
                            type = DROPBOX,
                            name = "Speed Method",
                            value = 1,
                            values = { "Velocity", "Walk Speed" },
                        },
                        -- {
                        --     type = COMBOBOX,
                        --     name = COMBOBOX,
                        --     values = {{"Head", true}, {"Body", true}, {"Arms", false}, {"Legs", false}}
                        -- },
                        {
                            type = TOGGLE,
                            name = "Fly",
                            value = false,
                            extra = {
                                type = KEYBIND,
                                key = Enum.KeyCode.B,
                            },
                        },
                        {
                            type = DROPBOX,
                            name = "Fly Method",
                            value = 1,
                            values = { "Velocity", "Noclip" },
                        },
                        {
                            type = SLIDER,
                            name = "Fly Speed",
                            value = 40,
                            minvalue = 1,
                            maxvalue = 200,
                            stradd = " stud/s",
                        },
                        {
                            type = TOGGLE,
                            name = "Mouse Teleport",
                            value = false,
                            extra = {
                                type = KEYBIND,
                                key = Enum.KeyCode.Q,
                                toggletype = 0
                            },
                        },
                    },
                },
                {
                    name = "Exploits",
                    autopos = "right",
                    autofill = true,
                    content = {
                        {
                            type = TOGGLE,
                            name = "Enable Timer Exploits",
                            unsafe = true,
                            value = false,
                        },
                        {
                            type = TOGGLE,
                            name = "Timer",
                            value = false,
                            extra = {
                                type = KEYBIND,
                                key = Enum.KeyCode.E,
                            },
                        },
                        {
                            type = SLIDER,
                            name = "Timer Factor",
                            value = 20,
                            minvalue = 1,
                            maxvalue = 1000,
                            stradd = "ms",
                        },
                        {
                            type = TOGGLE,
                            name = "Instant Tick Shift",
                            value = false,
                            extra = {
                                type = KEYBIND,
                                key = Enum.KeyCode.R,
                                toggletype = 0,
                            },
                        },
                        {
                            type = SLIDER,
                            name = "Instant Tick Shift Delay",
                            value = 0,
                            minvalue = 0,
                            maxvalue = 30,
                            stradd = "s",
                            custom = {
                                [0] = "Off"
                            }
                        },
                        {
                            type = SLIDER,
                            name = "Instant Tick Shift Factor",
                            value = 5,
                            minvalue = 1,
                            maxvalue = 30,
                            stradd = "s",
                        },
                    },
                },
            },
        },
        {
            name = "Settings",
            content = {
                {
                    name = "Player List",
                    x = menu.columns.left,
                    y = 66,
                    width = menuWidth - 34, -- this does nothing?
                    height = 328,
                    content = {
                        {
                            type = "list",
                            name = "Players",
                            multiname = { "Name", "Team", "Status" },
                            size = 9,
                            columns = 3,
                        },
                        {
                            type = IMAGE,
                            name = "Player Info",
                            text = "No Player Selected",
                            size = 72,
                        },
                        {
                            type = DROPBOX,
                            name = "Player Status",
                            x = 307,
                            y = 314,
                            w = 160,
                            value = 1,
                            values = { "None", "Friend", "Priority" },
                        },
                        {
                            type = BUTTON,
                            name = "Teleport",
                            doubleclick = true,
                            x = 307,
                            y = 356,
                            w = 160
                        },
                    },
                },
                {
                    name = "Cheat Settings",
                    x = menu.columns.left,
                    y = 400,
                    width = menu.columns.width,
                    height = 182,
                    content = {
                        {
                            type = TOGGLE,
                            name = "Menu Accent",
                            value = false,
                            extra = {
                                type = COLORPICKER,
                                name = "Accent Color",
                                color = { 127, 72, 163 },
                            },
                        },
                        {
                            type = TOGGLE,
                            name = "Watermark",
                            value = true,
                        },
                        {
                            type = TOGGLE,
                            name = "Custom Menu Name",
                            value = MenuName and true or false,
                        },
                        {
                            type = TEXTBOX,
                            name = "MenuName",
                            text = MenuName or "Bitch Bot",
                        },
                        {
                            type = BUTTON,
                            name = "Set Clipboard Game ID",
                        },
                        {
                            type = BUTTON,
                            name = "Unload Cheat",
                            doubleclick = true,
                        },
                        {
                            type = TOGGLE,
                            name = "Allow Unsafe Features",
                            value = false,
                        },
                    },
                },
                {
                    name = "Configuration",
                    x = menu.columns.right,
                    y = 400,
                    width = menu.columns.width,
                    height = 182,
                    content = {
                        {
                            type = TEXTBOX,
                            name = "ConfigName",
                            file = true,
                            text = "",
                        },
                        {
                            type = DROPBOX,
                            name = "Configs",
                            value = 1,
                            values = GetConfigs(),
                        },
                        {
                            type = BUTTON,
                            name = "Load Config",
                            doubleclick = true,
                        },
                        {
                            type = BUTTON,
                            name = "Save Config",
                            doubleclick = true,
                        },
                        {
                            type = BUTTON,
                            name = "Delete Config",
                            doubleclick = true,
                        },
                    },
                },
            },
        },
    })

    local selectedPlayer = nil
    local plistinfo = menu.options["Settings"]["Player List"]["Player Info"][1]
    local plist = menu.options["Settings"]["Player List"]["Players"]
    local function updateplist()
        if menu == nil then
            return
        end
        local playerlistval = menu:GetVal("Settings", "Player List", "Players")
        local playerz = {}

        for i, team in pairs(TEAMS:GetTeams()) do
            local sorted_players = {}
            for i1, player in pairs(team:GetPlayers()) do
                table.insert(sorted_players, player.Name)
            end
            table.sort(sorted_players)
            for i1, player_name in pairs(sorted_players) do
                table.insert(playerz, Players:FindFirstChild(player_name))
            end
        end

        local sorted_players = {}
        for i, player in pairs(Players:GetPlayers()) do
            if player.Team == nil then
                table.insert(sorted_players, player.Name)
            end
        end
        table.sort(sorted_players)
        for i, player_name in pairs(sorted_players) do
            table.insert(playerz, Players:FindFirstChild(player_name))
        end
        sorted_players = nil

        local templist = {}
        for k, v in pairs(playerz) do
            local playername = { v.Name, RGB(255, 255, 255) }
            local teamtext = { "None", RGB(255, 255, 255) }
            local playerstatus = { "None", RGB(255, 255, 255) }
            if v.Team ~= nil then
                teamtext[1] = v.Team.Name
                teamtext[2] = v.TeamColor.Color
            end
            if v == LOCAL_PLAYER then
                playerstatus[1] = "Local Player"
                playerstatus[2] = RGB(66, 135, 245)
            elseif table.find(menu.friends, v.Name) then
                playerstatus[1] = "Friend"
                playerstatus[2] = RGB(0, 255, 0)
            elseif table.find(menu.priority, v.Name) then
                playerstatus[1] = "Priority"
                playerstatus[2] = RGB(255, 210, 0)
            end

            table.insert(templist, { playername, teamtext, playerstatus })
        end
        plist[5] = templist
        if playerlistval ~= nil then
            for i, v in ipairs(playerz) do
                if v.Name == playerlistval then
                    selectedPlayer = v
                    break
                end
                if i == #playerz then
                    selectedPlayer = nil
                    menu.list.setval(plist, nil)
                end
            end
        end
        menu:SetMenuPos(menu.x, menu.y)
    end

    local function setplistinfo(player, textonly)
        if not menu then
            return
        end
        if player ~= nil then
            local playerteam = "None"
            if player.Team ~= nil then
                playerteam = player.Team.Name
            end
            local playerhealth = "?"

            if player.Character ~= nil then
                local humanoid = player.Character:FindFirstChild("Humanoid")
                if humanoid ~= nil then
                    if humanoid.Health ~= nil then
                        playerhealth = tostring(humanoid.Health) .. "/" .. tostring(humanoid.MaxHealth)
                    else
                        playerhealth = "No health found"
                    end
                else
                    playerhealth = "Humanoid not found"
                end
            end

            plistinfo[1].Text = "Display Name: " .. player.DisplayName .. "\nName: ".. player.Name .. "\nTeam: " .. playerteam .. "\nHealth: " .. playerhealth

            if textonly == nil then
                plistinfo[2].Data = BBOT_IMAGES[5]
                plistinfo[2].Data = game:HttpGet(string.format(
                    "https://www.roblox.com/headshot-thumbnail/image?userId=%s&width=100&height=100&format=png",
                    player.UserId
                ))
            end
        else
            plistinfo[2].Data = BBOT_IMAGES[5]
            plistinfo[1].Text = "No Player Selected"
        end
    end

    menu.list.removeall(menu.options["Settings"]["Player List"]["Players"])
    updateplist()
    setplistinfo(nil)

    local cachedValues = {
        FieldOfView = Camera.FieldOfView,
        FlyToggle = false,
    }

    menu.tickbase_manip_added = false
    menu.tickbaseadd = 0

    local function SpeedHack()
        local speed = menu:GetVal("Misc", "Movement", "Speed Factor")

        if menu:GetKey("Misc", "Movement", "Speed") and LOCAL_PLAYER.Character and LOCAL_PLAYER.Character.Humanoid
        then
            if menu:GetVal("Misc", "Movement", "Speed Method") == 1 then
                local rootpart = LOCAL_PLAYER.Character:FindFirstChild("HumanoidRootPart")

                if rootpart ~= nil then
                    local travel = Vector3.new()
                    local looking = Workspace.CurrentCamera.CFrame.lookVector
                    if INPUT_SERVICE:IsKeyDown(Enum.KeyCode.W) then
                        travel += Vector3.new(looking.x, 0, looking.Z)
                    end
                    if INPUT_SERVICE:IsKeyDown(Enum.KeyCode.S) then
                        travel -= Vector3.new(looking.x, 0, looking.Z)
                    end
                    if INPUT_SERVICE:IsKeyDown(Enum.KeyCode.D) then
                        travel += Vector3.new(-looking.Z, 0, looking.x)
                    end
                    if INPUT_SERVICE:IsKeyDown(Enum.KeyCode.A) then
                        travel += Vector3.new(looking.Z, 0, -looking.x)
                    end

                    travel = travel.Unit

                    local newDir = Vector3.new(travel.x * speed, rootpart.Velocity.y, travel.Z * speed)

                    if travel.Unit.x == travel.Unit.x then
                        rootpart.Velocity = newDir
                    end
                end
            elseif LOCAL_PLAYER.Character.Humanoid then
                LOCAL_PLAYER.Character.Humanoid.WalkSpeed = speed
            end
        end
    end

    local function FlyHack()
        if menu:GetVal("Misc", "Movement", "Fly") then
            local rootpart = LOCAL_PLAYER.Character:FindFirstChild("HumanoidRootPart")

            if menu:GetVal("Misc", "Movement", "Fly Method") == 2 then
                for lI, lV in pairs(LOCAL_PLAYER.Character:GetDescendants()) do
                    if lV:IsA("BasePart") then
                        lV.CanCollide = false
                    end
                end
            end
            cachedValues.FlyToggle = menu:GetKey("Misc", "Movement", "Fly")
            if cachedValues.FlyToggle then
                local speed = menu:GetVal("Misc", "Movement", "Fly Speed")

                local travel = Vector3.new()
                local looking = workspace.CurrentCamera.CFrame.lookVector --getting camera looking vector

                do
                    if INPUT_SERVICE:IsKeyDown(Enum.KeyCode.W) then
                        travel += looking
                    end
                    if INPUT_SERVICE:IsKeyDown(Enum.KeyCode.S) then
                        travel -= looking
                    end
                    if INPUT_SERVICE:IsKeyDown(Enum.KeyCode.D) then
                        travel += Vector3.new(-looking.Z, 0, looking.x)
                    end
                    if INPUT_SERVICE:IsKeyDown(Enum.KeyCode.A) then
                        travel += Vector3.new(looking.Z, 0, -looking.x)
                    end

                    if INPUT_SERVICE:IsKeyDown(Enum.KeyCode.Space) then
                        travel += Vector3.new(0, 1, 0)
                    end
                    if INPUT_SERVICE:IsKeyDown(Enum.KeyCode.LeftShift) then
                        travel -= Vector3.new(0, 1, 0)
                    end
                end

                if travel.Unit.x == travel.Unit.x then
                    rootpart.Anchored = false
                    rootpart.Velocity = travel.Unit * speed --multiplaye the unit by the speed to make
                else
                    rootpart.Velocity = Vector3.new(0, 0, 0)
                    rootpart.Anchored = true
                end
            else
                rootpart.Anchored = false
                cachedValues.FlyToggle = false
            end
        end
    end

    local function find_2d_distance ( pos1, pos2 ) -- found this func here https://love2d.org/forums/viewtopic.php?t=1951 ty to whoever did this
        local dx = pos1.X - pos2.X
        local dy = pos1.Y - pos2.Y
        return math.sqrt ( dx * dx + dy * dy )
    end

    local function Aimbot()

        local enabled = false
        local aimkey = menu:GetVal("Combat", "Aim Assist", "Use Mouse Keys") - 2

        if aimkey == -1 then
            enabled = menu:GetKey("Combat", "Aim Assist", "Enabled")
        else
            enabled = INPUT_SERVICE:IsMouseButtonPressed(aimkey)
        end

        if enabled and not menu.open then
            local organizedPlayers = {}
            local fovType = menu:GetVal("Combat", "Aim Assist", "FOV Calculation")
            local fov = menu:GetVal("Combat", "Aim Assist", "Aimbot FOV")
            local mousePos = Vector3.new(LOCAL_MOUSE.x, LOCAL_MOUSE.y + 36, 0)

            local checks = menu:GetVal("Combat", "Aim Assist", "Checks")
            local priority_only = menu:GetVal("Combat", "Aim Assist", "Target Priority Only")

            for i, v in ipairs(Players:GetPlayers()) do
                if v == LOCAL_PLAYER then
                    continue
                end

                if v.Character ~= nil and v.Character:FindFirstChild("HumanoidRootPart") then
                    if table.find(menu.friends, v.Name) then
                        continue
                    end

                    if priority_only and not table.find(menu.priority, v.Name) then
                        continue
                    end
                    local humanoid = v.Character:FindFirstChild("Humanoid")
                    if humanoid then
                        if checks[1] and humanoid.Health <= 0 then
                            continue
                        end
                    end

                    local pos = Camera:WorldToViewportPoint(v.Character.Head.Position)
                    if fov ~= 0 then
                        if fovType == 1 and find_2d_distance(pos, mousePos) > fov then
                            continue
                        elseif fovType == 2 and find_2d_distance(pos, mousePos) > fov / Camera.FieldOfView * Camera.ViewportSize.y then
                            continue
                        elseif fovType == 3 and find_2d_distance(pos, mousePos) > fov / menu:GetVal("Combat", "Aim Assist", "Custom FOV Value") * Camera.ViewportSize.y then
                            continue
                        end
                    end

                    if checks[2] and v.Team and v.Team == LOCAL_PLAYER.Team then
                        continue
                    end
                    if checks[3] and LOCAL_PLAYER:DistanceFromCharacter(v.Character.HumanoidRootPart.Position) / 5 > menu:GetVal("Combat", "Aim Assist", "Max Distance")
                    then
                        continue
                    end

                    table.insert(organizedPlayers, v)
                end
            end

            table.sort(organizedPlayers, function(a, b)
                local aPos, aVis = workspace.CurrentCamera:WorldToViewportPoint(a.Character.Head.Position)
                local bPos, bVis = workspace.CurrentCamera:WorldToViewportPoint(b.Character.Head.Position)
                if aVis and not bVis then
                    return true
                end
                if bVis and not aVis then
                    return false
                end
                return (aPos - mousePos).Magnitude < (bPos - mousePos).Magnitude
            end)
           
            local smoothing = menu:GetVal("Combat", "Aim Assist", "Smoothing") and menu:GetVal("Combat", "Aim Assist", "Smoothing Ammount") * 0.3 + 2 or 1.7
            for i, v in ipairs(organizedPlayers) do
                local humanoid = v.Character:FindFirstChild("Humanoid")
                local rootpart = v.Character.HumanoidRootPart.Position
               
                local hitbox = nil
                if menu:GetVal("Combat", "Aim Assist", "Hitbox") == 1 then
                    hitbox = v.Character:FindFirstChild("Head")
                else
                    hitbox = v.Character:FindFirstChild("Torso")
                    if hitbox == nil then
                        hitbox = v.Character:FindFirstChild("UpperTorso")
                    end
                end

                if hitbox then
                    local pos, onscreen = workspace.CurrentCamera:WorldToViewportPoint(hitbox.Position)

                    if onscreen then
                        menu.aimbot_target = v
                        if INPUT_SERVICE.MouseBehavior ~= Enum.MouseBehavior.LockCenter then
                            mousemoveabs(pos.x, pos.y)
                        else
                            if menu:GetVal("Combat", "Aim Assist", "Force Angles In First Person") then
                                Camera.CFrame = CFrame.new(Camera.CFrame.Position, hitbox.Position)
                            else
                           
                                local inc = Vector2.new((pos.X - LOCAL_MOUSE.X) / smoothing, (pos.Y - LOCAL_MOUSE.Y - 36) / smoothing)
                                local sens = GAME_SETTINGS.MouseSensitivity
                                mousemoverel(inc.X / (sens * 5), inc.Y / (sens * 5))
                           
                            end
                        end
                        return
                    end
                end
            end
        end
    end

    menu.instant_shift = 0
    menu.tick_shift_que = nil
    local oldslectedplayer = nil
    menu.connections.inputstart2 = INPUT_SERVICE.InputBegan:Connect(function(input) --ANCHOR TICKBASE SHIT
        if input.UserInputType == Enum.UserInputType.MouseButton1 then
            if menu.open then
                if menu.tickbase_manip_added == false and menu:GetVal("Misc", "Exploits", "Enable Timer Exploits") then
                    shared.tick_ref = hookfunc(getrenv().tick, function()
                        if checkcaller() then
                            return shared.tick_ref()
                        end
                        if not menu then
                            return shared.tick_ref()
                        elseif menu.instant_shift ~= 0 then
                            local shiftamm = menu.instant_shift
                            menu.instant_shift = 0
                            CreateNotification("Shifted ".. tostring(shiftamm).. " Ticks")
                            return shared.tick_ref() + shiftamm

                        elseif menu:GetVal("Misc", "Exploits", "Enable Timer Exploits") and menu:GetKey("Misc", "Exploits", "Timer") then
                            menu.tickbaseadd += menu:GetVal("Misc", "Exploits", "Timer Factor") * 0.001
                            return shared.tick_ref() + menu.tickbaseadd
                        else
                            if menu then menu.tickbaseadd = 0 end
                            return shared.tick_ref()
                        end
                    end)
                    menu.tickbase_manip_added = true
                end

               

                if menu.tabnames[menu.activetab] == "Settings" and menu.open then
                    game.RunService.Stepped:wait()

                    updateplist()

                    if selectedPlayer ~= nil then
                        if menu:MouseInMenu(28, 68, 448, 238) then
                            if table.find(menu.friends, selectedPlayer.Name) then
                                menu.options["Settings"]["Player List"]["Player Status"][1] = 2
                                menu.options["Settings"]["Player List"]["Player Status"][4][1].Text = "Friend"
                            elseif table.find(menu.priority, selectedPlayer.Name) then
                                menu.options["Settings"]["Player List"]["Player Status"][1] = 3
                                menu.options["Settings"]["Player List"]["Player Status"][4][1].Text = "Priority"
                            else
                                menu.options["Settings"]["Player List"]["Player Status"][1] = 1
                                menu.options["Settings"]["Player List"]["Player Status"][4][1].Text = "None"
                            end
                        end

                        for k, table_ in pairs({ menu.friends, menu.priority }) do
                            for index, playername in pairs(table_) do
                                if selectedPlayer.Name == playername then
                                    table.remove(table_, index)
                                end
                            end
                        end
                        if menu:GetVal("Settings", "Player List", "Player Status") == 2 then
                            if not table.find(menu.friends, selectedPlayer.Name) then
                                table.insert(menu.friends, selectedPlayer.Name)
                               
                            end
                        elseif menu:GetVal("Settings", "Player List", "Player Status") == 3 then
                            if not table.find(menu.priority, selectedPlayer.Name) then
                                table.insert(menu.priority, selectedPlayer.Name)
                               
                            end
                        end
                        WriteRelations()
                    else
                        menu.options["Settings"]["Player List"]["Player Status"][1] = 1
                        menu.options["Settings"]["Player List"]["Player Status"][4][1].Text = "None"
                    end

                    updateplist()

                    if plist[1] ~= nil then
                        if oldslectedplayer ~= selectedPlayer then
                            setplistinfo(selectedPlayer)
                            oldslectedplayer = selectedPlayer
                        end
                    else
                        setplistinfo(nil)
                    end
                end

                game.RunService.Stepped:wait()
                if not menu then
                    return
                end
                local crosshairvis = menu:GetVal("Visuals", "Misc", "Custom Crosshair")
                for k, v in pairs(menu.crosshair) do
                    v[1].Visible = crosshairvis
                    v[2].Visible = crosshairvis
                end
                if menu:GetVal("Visuals", "Misc", "Draw Aimbot FOV") and menu:GetVal("Combat", "Aim Assist", "Enabled") and menu:GetVal("Combat", "Aim Assist", "Aimbot FOV") ~= 0 then
                    menu.fovcircle[1].Visible = true
                    menu.fovcircle[2].Visible = true

                    menu.fovcircle[2].Color = menu:GetVal("Visuals", "Misc", "Draw Aimbot FOV", COLOR, true)
                    local transparency = menu:GetVal("Visuals", "Misc", "Draw Aimbot FOV", COLOR)[4]/255
                    menu.fovcircle[1].Transparency = transparency * 0.8
                    menu.fovcircle[2].Transparency = transparency
                else
                    menu.fovcircle[1].Visible = false
                    menu.fovcircle[2].Visible = false
                end
            end
        end
    end)
   
    menu.connections.button_pressed_uni = ButtonPressed:connect(function(tab, gb, name)
        if name == "Teleport" then
            if selectedPlayer == nil then
                CreateNotification("No player selected")
            elseif selectedPlayer == LOCAL_PLAYER then
                CreateNotification("You can't teleport to yourself silly ")
            else
                local character = selectedPlayer.Character

                if character then
                    local targetPos = nil

                    local tpn = "none" -- this means teleported part name,,, for debug
                    for index, partname in ipairs({"Head", "Toros", "UpperTorso", "HumanoidRootPart", "RootPart"}) do
                        targetPos = character:FindFirstChild(partname)
                        if targetPos then
                            tpn = partname
                            break
                        end
                    end
       
                    if targetPos then
                        local targetRelPos = targetPos.Position
                        if targetRelPos then
                           
                            local RP = LOCAL_PLAYER.Character.HumanoidRootPart
                            RP.CFrame = CFrame.new(targetRelPos + Vector3.new(0, 7, 0))
                            CreateNotification("Teleported to \"".. selectedPlayer.Name.. "\" using part: ".. tpn )
                        else
                            CreateNotification("Failed teleport, couldnt't find position")
                        end
                    else
                        CreateNotification("Failed teleport, couldn't find a suitable part")
                    end
                else
                    CreateNotification("Failed teleport, couldn't find player character")
                end
            end
        end
    end)

    local function unikeycheck(actionName, inputState, inputObject)
        if actionName == "BB UNI check" then
            if inputState == Enum.UserInputState.Begin then
               
                if menu:GetVal("Misc", "Movement", "Mouse Teleport") and inputObject.KeyCode == menu:GetVal("Misc", "Movement", "Mouse Teleport", KEYBIND) then
                    local targetPos = LOCAL_MOUSE.Hit.p
                    local RP = LOCAL_PLAYER.Character.HumanoidRootPart
                    RP.CFrame = CFrame.new(targetPos + Vector3.new(0, 7, 0))
                    return Enum.ContextActionResult.Sink
                end

                if menu:GetVal("Misc", "Exploits", "Enable Timer Exploits") then
                   
                    if menu:GetVal("Misc", "Exploits", "Instant Tick Shift") and inputObject.KeyCode == menu:GetVal("Misc", "Exploits", "Instant Tick Shift", KEYBIND) then
                        if menu.tick_shift_que == nil then
                            menu.instant_shift = 0
                            menu.tick_shift_que = tick() + menu:GetVal("Misc", "Exploits", "Instant Tick Shift Delay")
                        end
                    end
                end
            end

            -----------------------------------------
            ------------"HELD KEY ACTION"------------
            -----------------------------------------
            local keyflag = inputState == Enum.UserInputState.Begin

            return Enum.ContextActionResult.Pass -- this will let any other keyboard action proceed
        end
    end
    game:service("ContextActionService"):BindAction("BB UNI check", unikeycheck, false, Enum.UserInputType.Keyboard)

    menu.connections.renderstepped2 = game.RunService.RenderStepped:Connect(function()
        menu.aimbot_target = nil
        pcall(SpeedHack) -- ????? im tired of errors
        pcall(FlyHack)
        pcall(Aimbot)

        if menu.tick_shift_que ~= nil then
            if menu:GetVal("Misc", "Exploits", "Instant Tick Shift") then
                if tick() >= menu.tick_shift_que and menu.instant_shift == 0 then
                    menu.instant_shift = menu:GetVal("Misc", "Exploits", "Instant Tick Shift Factor")
                    menu.tick_shift_que = nil
                end
            else
                menu.tick_shift_que = nil
                menu.instant_shift = 0
            end
        end

        if menu.open then
            if menu.tabnames[menu.activetab] == "Settings" then
                if plist[1] ~= nil then
                    setplistinfo(selectedPlayer, true)
                end
            end

            if menu:GetVal("Visuals", "Misc", "Custom Crosshair") then
                local size = menu:GetVal("Visuals", "Misc", "Crosshair Size")
                local color = menu:GetVal("Visuals", "Misc", "Custom Crosshair", COLOR, true)
                menu.crosshair.inner[1].Size = Vector2.new(size * 2 + 1, 1)
                menu.crosshair.inner[2].Size = Vector2.new(1, size * 2 + 1)

                menu.crosshair.inner[1].Color = color
                menu.crosshair.inner[2].Color = color

                menu.crosshair.outline[1].Size = Vector2.new(size * 2 + 3, 3)
                menu.crosshair.outline[2].Size = Vector2.new(3, size * 2 + 3)
            end
        end

        if menu:GetVal("Visuals", "Misc", "Custom Crosshair") then
            local size = menu:GetVal("Visuals", "Misc", "Crosshair Size")
            if menu:GetVal("Visuals", "Misc", "Crosshair Position") == 1 then
                menu.crosshair.inner[1].Position = Vector2.new(SCREEN_SIZE.x / 2 - size, SCREEN_SIZE.y / 2)
                menu.crosshair.inner[2].Position = Vector2.new(SCREEN_SIZE.x / 2, SCREEN_SIZE.y / 2 - size)

                menu.crosshair.outline[1].Position = Vector2.new(SCREEN_SIZE.x / 2 - size - 1, SCREEN_SIZE.y / 2 - 1)
                menu.crosshair.outline[2].Position = Vector2.new(SCREEN_SIZE.x / 2 - 1, SCREEN_SIZE.y / 2 - 1 - size)
            else
                -- INPUT_SERVICE.MouseIconEnabled = false
                menu.crosshair.inner[1].Position = Vector2.new(LOCAL_MOUSE.x - size, LOCAL_MOUSE.y + 36)
                menu.crosshair.inner[2].Position = Vector2.new(LOCAL_MOUSE.x, LOCAL_MOUSE.y + 36 - size)

                menu.crosshair.outline[1].Position = Vector2.new(LOCAL_MOUSE.x - size - 1, LOCAL_MOUSE.y + 35)
                menu.crosshair.outline[2].Position = Vector2.new(LOCAL_MOUSE.x - 1, LOCAL_MOUSE.y + 35 - size)
            end
        end

        if menu:GetVal("Visuals", "Local Visuals", "Change FOV") then
            Camera.FieldOfView = menu:GetVal("Visuals", "Local Visuals", "Camera FOV")
        end

        if game.Lighting ~= nil then
            if menu:GetVal("Visuals", "World Visuals", "Force Time") then
                game.Lighting.ClockTime =  menu:GetVal("Visuals", "World Visuals", "Custom Time")
            end
        end

        if menu:GetVal("Visuals", "Misc", "Draw Aimbot FOV") and menu:GetVal("Combat", "Aim Assist", "Enabled") then
            menu.fovcircle[1].Position = Vector2.new(LOCAL_MOUSE.x, LOCAL_MOUSE.y + 36)
            menu.fovcircle[2].Position = Vector2.new(LOCAL_MOUSE.x, LOCAL_MOUSE.y + 36)

            local aimfov = menu:GetVal("Combat", "Aim Assist", "Aimbot FOV")
            local fovtype = menu:GetVal("Combat", "Aim Assist", "FOV Calculation")
            if fovtype == 2 then --
                menu.fovcircle[1].Radius = aimfov / Camera.FieldOfView * Camera.ViewportSize.y
                menu.fovcircle[2].Radius = aimfov / Camera.FieldOfView * Camera.ViewportSize.y
            elseif menu.open then
                if fovtype == 3 then
                    menu.fovcircle[1].Radius = aimfov / menu:GetVal("Combat", "Aim Assist", "Custom FOV Value") * Camera.ViewportSize.y
                    menu.fovcircle[2].Radius = aimfov / menu:GetVal("Combat", "Aim Assist", "Custom FOV Value") * Camera.ViewportSize.y
                else
                    menu.fovcircle[1].Radius = aimfov
                    menu.fovcircle[2].Radius = aimfov
                end
            end
        end

       
        for k, v in pairs(allesp) do
            for k1, v1 in ipairs(v) do
                if v1.Visible then
                    v1.Visible = false
                end
            end
        end

        local organizedPlayers = {}
        for i, v in ipairs(Players:GetPlayers()) do
            if v == LOCAL_PLAYER then
                continue
            end

            if v.Character ~= nil and v.Character:FindFirstChild("HumanoidRootPart") then
                local checks = menu:GetVal("Visuals", "ESP Settings", "Checks")
                local humanoid = v.Character:FindFirstChild("Humanoid")
                if humanoid then
                    if checks[1] and humanoid.Health <= 0 then
                        continue
                    end
                end
                if v.Team ~= nil then
                    if checks[2] and v.Team == LOCAL_PLAYER.Team then
                        continue
                    end
                end
                if checks[3] and LOCAL_PLAYER:DistanceFromCharacter(v.Character.HumanoidRootPart.Position) / 5 > menu:GetVal("Visuals", "ESP Settings", "Max Distance")
                then
                    continue
                end

                table.insert(organizedPlayers, v)
            end
        end

        -- if menu:GetVal("Visuals", "ESP Settings", "ESP Sorting") == 2 then
        --     table.sort(organizedPlayers, function(a, b)
        --         return LOCAL_PLAYER:DistanceFromCharacter(a.Character.HumanoidRootPart.Position) > LOCAL_PLAYER:DistanceFromCharacter(b.Character.HumanoidRootPart.Position)
        --     end)
        -- end

        local priority_c = menu:GetVal("Visuals", "ESP Settings", "Highlight Priority", COLOR, true)
        local priority_t = menu:GetVal("Visuals", "ESP Settings", "Highlight Priority", COLOR)[4]/255

        local friend_c = menu:GetVal("Visuals", "ESP Settings", "Highlight Friends", COLOR, true)
        local friend_t = menu:GetVal("Visuals", "ESP Settings", "Highlight Friends", COLOR)[4]/255

        local target_c = menu:GetVal("Visuals", "ESP Settings", "Highlight Target", COLOR, true)
        local target_t = menu:GetVal("Visuals", "ESP Settings", "Highlight Target", COLOR)[4]/255

        local textcase = menu:GetVal("Visuals", "ESP Settings", "Text Case")
        local textlength = menu:GetVal("Visuals", "ESP Settings", "Max Text Length")
        local function formattext(text) -- this is so ass
            if textcase == 1 then
                return string_cut(string.lower(text), textlength)
            elseif textcase == 3 then
                return string_cut(string.upper(text), textlength)
            end
            return string_cut(text, textlength)
        end

        for i, v in ipairs(organizedPlayers) do
            pcall(function()
                local humanoid = v.Character:FindFirstChild("Humanoid")
                local rootpart = v.Character.HumanoidRootPart.Position

                local cam = Camera.CFrame
                local torso = v.Character.PrimaryPart.CFrame
                local head = v.Character.Head.CFrame
                -- local vTop = torso.Position + (torso.UpVector * 1.8) + cam.UpVector
                -- local vBottom = torso.Position - (torso.UpVector * 2.5) - cam.UpVector
                local top, top_isrendered = workspace.CurrentCamera:WorldToViewportPoint(head.Position + (torso.UpVector * 1) + cam.UpVector)
                local bottom, bottom_isrendered = workspace.CurrentCamera:WorldToViewportPoint(torso.Position - (torso.UpVector * 2.5) - cam.UpVector)

                local minY = math.abs(bottom.y - top.y)
                local sizeX = math.ceil(math.max(clamp(math.abs(bottom.x - top.x) * 2.5, 0, minY), minY / 2, 3))
                local sizeY = math.ceil(math.max(minY, sizeX * 0.5, 3))

                if top_isrendered or bottom_isrendered then
                    local boxtop = Vector2.new(
                        math.floor(top.x * 0.5 + bottom.x * 0.5 - sizeX * 0.5),
                        math.floor(math.min(top.y, bottom.y))
                    )
                    local boxsize = { w = sizeX, h = sizeY }

                    if menu:GetVal("Visuals", "Player ESP", "Head Dot") then
                        local head = v.Character:FindFirstChild("Head")
                        if head then
                            local headpos = head.Position
                            local headdotpos = workspace.CurrentCamera:WorldToViewportPoint(Vector3.new(headpos.x, headpos.y + 0.1, headpos.z))
                            local headdotpos_b = workspace.CurrentCamera:WorldToViewportPoint(Vector3.new(headpos.x, headpos.y - 0.2, headpos.z))
                            local difference = headdotpos_b.y - headdotpos.y
                            allesp.headdot[i].Visible = true
                            allesp.headdot[i].Position = Vector2.new(headdotpos.x, headdotpos_b.y - difference)
                            allesp.headdot[i].Radius = difference * 2

                            allesp.headdotoutline[i].Visible = true
                            allesp.headdotoutline[i].Position = Vector2.new(headdotpos.x, headdotpos_b.y - difference)
                            allesp.headdotoutline[i].Radius = difference * 2
                        end
                    end
                    if menu:GetVal("Visuals", "Player ESP", "Box") then
                        allesp.outerbox[i].Position = Vector2.new(boxtop.x - 1, boxtop.y - 1)
                        allesp.outerbox[i].Size = Vector2.new(boxsize.w + 2, boxsize.h + 2)
                        allesp.outerbox[i].Visible = true

                        allesp.innerbox[i].Position = Vector2.new(boxtop.x + 1, boxtop.y + 1)
                        allesp.innerbox[i].Size = Vector2.new(boxsize.w - 2, boxsize.h - 2)
                        allesp.innerbox[i].Visible = true

                        allesp.box[i].Position = Vector2.new(boxtop.x, boxtop.y)
                        allesp.box[i].Size = Vector2.new(boxsize.w, boxsize.h)
                        allesp.box[i].Visible = true

                        if menu:GetVal("Visuals", "Player ESP", "Box", COLOR1)[4]/255 > 0 then
                            allesp.filledbox[i].Position = Vector2.new(boxtop.x + 2, boxtop.y + 2)
                            allesp.filledbox[i].Size = Vector2.new(boxsize.w - 4, boxsize.h - 4)
                            allesp.filledbox[i].Visible = true
                        end
                    end
                    if humanoid then
                        local health = math.ceil(humanoid.Health)
                        local maxhealth = humanoid.MaxHealth
                        if menu:GetVal("Visuals", "Player ESP", "Health Bar") then
                            allesp.healthouter[i].Position = Vector2.new(boxtop.x - 6, boxtop.y - 1)
                            allesp.healthouter[i].Size = Vector2.new(4, boxsize.h + 2)
                            allesp.healthouter[i].Visible = true

                            local ySizeBar = -math.floor(boxsize.h * health / maxhealth)

                            allesp.healthinner[i].Position = Vector2.new(boxtop.x - 5, boxtop.y + boxsize.h)
                            allesp.healthinner[i].Size = Vector2.new(2, ySizeBar)
                            allesp.healthinner[i].Visible = true
                            allesp.healthinner[i].Color = ColorRange(health, {
                                [1] = {
                                    start = 0,
                                    color = menu:GetVal("Visuals", "Player ESP", "Health Bar", COLOR1, true),
                                },
                                [2] = {
                                    start = 100,
                                    color = menu:GetVal("Visuals", "Player ESP", "Health Bar", COLOR2, true),
                                },
                            })

                            if menu:GetVal("Visuals", "Player ESP", "Health Number") and menu:GetVal("Visuals", "ESP Settings", "Max HP Visibility Cap") >= math.ceil((health / maxhealth) * 100) then
                                allesp.hptext[i].Text = tostring(health)
                                local textsize = allesp.hptext[i].TextBounds
                                allesp.hptext[i].Position = Vector2.new(
                                    boxtop.x - 7 - textsize.x,
                                    boxtop.y + clamp(boxsize.h + ySizeBar - 8, -4, boxsize.h - 10)
                                )
                                allesp.hptext[i].Visible = true
                                allesp.hptext[i].Color = menu:GetVal("Visuals", "Player ESP", "Health Number", COLOR, true)
                                allesp.hptext[i].Transparency = menu:GetVal("Visuals", "Player ESP", "Health Number", COLOR)[4] / 255
                            end
                        elseif menu:GetVal("Visuals", "Player ESP", "Health Number") and menu:GetVal("Visuals", "ESP Settings", "Max HP Visibility Cap") >= math.ceil((health / maxhealth) * 100) then
                            allesp.hptext[i].Text = tostring(health)
                            local textsize = allesp.hptext[i].TextBounds
                            allesp.hptext[i].Position = Vector2.new(boxtop.x - 3 - textsize.x, boxtop.y - 4)
                            allesp.hptext[i].Visible = true
                            allesp.hptext[i].Color = menu:GetVal("Visuals", "Player ESP", "Health Number", COLOR, true)
                            allesp.hptext[i].Transparency = menu:GetVal("Visuals", "Player ESP", "Health Number", COLOR)[4] / 255
                        end
                    end
                    if menu:GetVal("Visuals", "Player ESP", "Name") then
                        allesp.name[i].Text = formattext(v.Name)
                        allesp.name[i].Position = (menu:GetVal("Visuals", "Player ESP", "Display Name") and v.Name ~= v.DisplayName) and Vector2.new(math.floor(boxtop.x + boxsize.w * 0.5), math.floor(boxtop.y - 27)) or Vector2.new(math.floor(boxtop.x + boxsize.w * 0.5), math.floor(boxtop.y - 15))
                        allesp.name[i].Visible = true
                    end
                    if menu:GetVal("Visuals", "Player ESP", "Display Name") then
                       
                        if menu:GetVal("Visuals", "Player ESP", "Name") and v.Name ~= v.DisplayName then
                            allesp.displayname[i].Text = formattext(v.DisplayName)
                            allesp.displayname[i].Position = Vector2.new(math.floor(boxtop.x + boxsize.w * 0.5), math.floor(boxtop.y - 15))
                            allesp.displayname[i].Visible = true
                        else
                            allesp.displayname[i].Text = formattext(v.DisplayName)
                            allesp.displayname[i].Position = Vector2.new(math.floor(boxtop.x + boxsize.w * 0.5), math.floor(boxtop.y - 15))
                            allesp.displayname[i].Visible = true
                        end
                    end
                    local y_spot = 0
                    if menu:GetVal("Visuals", "Player ESP", "Team") then
                        if v.Team == nil then
                            allesp.team[i].Text = "None"
                        else
                            allesp.team[i].Text = formattext(v.Team.Name)
                        end
                        if menu:GetVal("Visuals", "Player ESP", "Team Color Based") then
                            if v.Team == nil then
                                allesp.team[i].Color = RGB(255, 255, 255)
                            else
                                allesp.team[i].Color = v.TeamColor.Color
                            end
                        end
                        local team_pos = Vector2.new(math.floor(boxtop.x + boxsize.w * 0.5), boxtop.y + boxsize.h)
                        allesp.team[i].Position = team_pos
                        allesp.team[i].Visible = true
                        y_spot += 14
                    end
                    if menu:GetVal("Visuals", "Player ESP", "Distance") then
                        local dist_pos = Vector2.new(math.floor(boxtop.x + boxsize.w * 0.5), boxtop.y + boxsize.h + y_spot)
                        allesp.distance[i].Text = tostring(math.ceil(LOCAL_PLAYER:DistanceFromCharacter(rootpart) / 5)).. "m"
                        allesp.distance[i].Position = dist_pos
                        allesp.distance[i].Visible = true
                    end

                   
                    if menu:GetVal("Visuals", "ESP Settings", "Highlight Priority") and table.find(menu.priority, v.Name) then

                        allesp.headdot[i].Color = priority_c
                        allesp.headdot[i].Transparency = priority_t
                        allesp.headdotoutline[i].Transparency = priority_t * 0.8

                        allesp.box[i].Color = priority_c
                        allesp.box[i].Transparency = priority_t
                        allesp.outerbox[i].Transparency = priority_t * 0.8
                        allesp.innerbox[i].Transparency = target_t * 0.8
                       
                        allesp.filledbox[i].Transparency = menu:GetVal("Visuals", "Player ESP", "Box", COLOR1)[4]/255
                        allesp.filledbox[i].Color = target_c
                       

                        allesp.name[i].Color = priority_c
                        allesp.name[i].Transparency = priority_t

                        allesp.displayname[i].Color = priority_c
                        allesp.displayname[i].Transparency = priority_t
                       
                        if not menu:GetVal("Visuals", "Player ESP", "Team Color Based") then
                            allesp.team[i].Color = priority_c
                        end
                        allesp.team[i].Transparency = priority_t
           
                        allesp.distance[i].Color = priority_c
                        allesp.distance[i].Transparency = priority_t

                    elseif menu:GetVal("Visuals", "ESP Settings", "Highlight Friends") and table.find(menu.friends, v.Name) then

                        allesp.headdot[i].Color = friend_c
                        allesp.headdot[i].Transparency = friend_t
                        allesp.headdotoutline[i].Transparency = friend_t * 0.8

                        allesp.box[i].Color = friend_c
                        allesp.box[i].Transparency = friend_t
                        allesp.outerbox[i].Transparency = friend_t * 0.8
                        allesp.innerbox[i].Transparency = friend_t * 0.8

                        allesp.filledbox[i].Transparency = menu:GetVal("Visuals", "Player ESP", "Box", COLOR1)[4]/255
                        allesp.filledbox[i].Color = friend_c

                        allesp.name[i].Color = friend_c
                        allesp.name[i].Transparency = friend_t

                        allesp.displayname[i].Color = friend_c
                        allesp.displayname[i].Transparency = friend_t
                       
                        if not menu:GetVal("Visuals", "Player ESP", "Team Color Based") then
                            allesp.team[i].Color = friend_c
                        end
                        allesp.team[i].Transparency = friend_t
           
                        allesp.distance[i].Color = friend_c
                        allesp.distance[i].Transparency = friend_t
                   
                    elseif menu:GetVal("Visuals", "ESP Settings", "Highlight Target") and v == menu.aimbot_target then

                        allesp.headdot[i].Color = target_c
                        allesp.headdot[i].Transparency = target_t
                        allesp.headdotoutline[i].Transparency = target_t * 0.8

                        allesp.box[i].Color = target_c
                        allesp.box[i].Transparency = target_t
                        allesp.outerbox[i].Transparency = target_t * 0.8
                        allesp.innerbox[i].Transparency = target_t * 0.8

                        allesp.filledbox[i].Transparency = menu:GetVal("Visuals", "Player ESP", "Box", COLOR1)[4]/255
                        allesp.filledbox[i].Color = target_c

                        allesp.name[i].Color = target_c
                        allesp.name[i].Transparency = target_t

                        allesp.displayname[i].Color = target_c
                        allesp.displayname[i].Transparency = target_t
                       
                        if not menu:GetVal("Visuals", "Player ESP", "Team Color Based") then
                            allesp.team[i].Color = target_c
                        end
                        allesp.team[i].Transparency = target_t
           
                        allesp.distance[i].Color = target_c
                        allesp.distance[i].Transparency = target_t

                    else
                       
                        local hdt = menu:GetVal("Visuals", "Player ESP", "Head Dot", COLOR)[4]/255
                        allesp.headdot[i].Color = menu:GetVal("Visuals", "Player ESP", "Head Dot", COLOR, true)
                        allesp.headdot[i].Transparency = hdt
                        allesp.headdotoutline[i].Transparency = hdt * 0.8
           
                        local boxt = menu:GetVal("Visuals", "Player ESP", "Box", COLOR2)[4]/255
                        allesp.box[i].Color = menu:GetVal("Visuals", "Player ESP", "Box", COLOR2, true)
                        allesp.box[i].Transparency = boxt
                        allesp.outerbox[i].Transparency = boxt * 0.8
                        allesp.innerbox[i].Transparency = boxt * 0.8

                        allesp.filledbox[i].Transparency = menu:GetVal("Visuals", "Player ESP", "Box", COLOR1)[4]/255
                        allesp.filledbox[i].Color = menu:GetVal("Visuals", "Player ESP", "Box", COLOR1, true)
       
                        allesp.name[i].Color = menu:GetVal("Visuals", "Player ESP", "Name", COLOR, true)
                        allesp.name[i].Transparency = menu:GetVal("Visuals", "Player ESP", "Name", COLOR)[4] / 255

                        allesp.displayname[i].Color = menu:GetVal("Visuals", "Player ESP", "Display Name", COLOR, true)
                        allesp.displayname[i].Transparency = menu:GetVal("Visuals", "Player ESP", "Display Name", COLOR)[4] / 255
                       
                        if not menu:GetVal("Visuals", "Player ESP", "Team Color Based") then
                            allesp.team[i].Color = menu:GetVal("Visuals", "Player ESP", "Team", COLOR, true)
                        end
                        allesp.team[i].Transparency = menu:GetVal("Visuals", "Player ESP", "Team", COLOR)[4] / 255

                        allesp.distance[i].Color = menu:GetVal("Visuals", "Player ESP", "Distance", COLOR, true)
                        allesp.distance[i].Transparency = menu:GetVal("Visuals", "Player ESP", "Distance", COLOR)[4] / 255

                    end
                end
            end)
        end
    end)

    menu.connections.playerjoined = Players.PlayerAdded:Connect(function(player)
        updateplist()
        if plist[1] ~= nil then
            setplistinfo(selectedPlayer)
        else
            setplistinfo(nil)
        end
    end)

    menu.connections.playerleft = Players.PlayerRemoving:Connect(function(player)
        updateplist()
    end)
    --!SECTION
elseif menu.game == "pf" then --SECTION PF BEGIN
    local client = {}
    local legitbot = {}
    local misc = { adornments = {} }
    local ragebot = { flip = false }
    local camera = {}
    menu.crosshair = { outline = {}, inner = {} }
    for i, v in pairs(menu.crosshair) do
        for i = 1, 2 do
            Draw:FilledRect(false, 20, 20, 20, 20, { 10, 10, 10, 215 }, v)
        end
    end

    local gunicons = {
        ["1858 CARBINE"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAJCAYAAABwgn/fAAABHUlEQVR4nNXUTyuEURQG8N/LSEiSv7GzseMjkI/B3sqSvY/hYxBJsZCVwUIRamRnMyl/R2ia1+K+Y2YxmsHL5Knbvfd07j3Pec7pRHEcSwkjGMVSla0dByhW2frQg1sU8JZC7IkoxURacY1BRImtiEwN3wfcIMYmnn8avFaQr6IFk5jDkIrCbVjAPHI4w4lQiWPcpRD7A9UV6cAAhpO9v+pePndiJSE1jRlMoVdQN48dvGAVu3hKk/BniOI4XsQyur75Rw6H2BKUvhd6/9UfJUFIJMI5xht8k8cG9oRe30/2Arrx+As86yIjtEShjt8p1pOVRSmxtwvKl9GUJAgVGcOlyqQp4UIgnMU2rppDr3FkMIs1Yd5ncSS0yr/CO58sURmvjH21AAAAAElFTkSuQmCC", 50, 9},
        ["1858 NEW ARMY"] = {"iVBORw0KGgoAAAANSUhEUgAAACkAAAAPCAYAAAB5lebdAAABhUlEQVR4nM3VPWsVQRTG8d9efAVFBG0kpBIFtRRsAgpWphAsLIKVIH4E/Qo2phU7LawUG8HCSlEUJOlEsVKITUgUBV8iV3ksZoV1c+PdEO/FPwwMZ2bOPDzn7GyVxBCOYg7b8RST+Njasw378BDPEXxGf1jyIZzF7aqDyFM4j9NYwa4NXrxuuoiEuzgzYi2/+YL7zcCmDoe24sCQPfN18in0Oorp4yreDMg13wx0EXkDh+v5N6U329zBFSxhT2ttCU/wAm/xCR/wEosd7l+z3JO4hOM40ogHX+vkuxvxR1hWXF/GPcWp93jVRch6Rc7gmm4fyBwe1CIfK07/e5I0x4kkP7OafpLXSWaTTCU5mOR6kqp1fiSj2ZM7cdOfjb+CC3iGY1hQ+kvtXqenYaM0RV5UerHJLG7V85PYj73YoTT+eKgt3ZJkYUCZp1vWT9R7R17iQeU+h4m2fqXMTd6N3LUBVEkq5Q071Fr7gc3jl7SanvJPbgukPLr/BT1cXmPt+ziF/I1fmt1T3HjM+CIAAAAASUVORK5CYII=", 41, 15},
        ["AA-12"] = {"iVBORw0KGgoAAAANSUhEUgAAACcAAAAPCAYAAABnXNZuAAABdElEQVR4nM3Vv0odQRQG8J9iKgXjDQQ7DVgknU1ICKkkWFmk0MoulT5BCh8hL5A8gyDYpEkr5A9RbIKVhSIIFjfR/FFvNJNizoXNYszuXgl+MMyZmbNnvv327DlSSmqOuymlzQbPVRlLxXW/+niAhYq+Qxiv6HsHU8WNATxDH44qBBjBQxzjZwX/OXTwDoP/8H2Mm8WNvpRSqnDJ/8JnWcFDsnLXCaeY7i6um3In+NRdVFXuGz5iD0/lRL8M51iX87iD73HxcdgdfMWZ/AnP8SXiv+0GuUi5s2D/Hh9i3ooAMIvlsNewH/YUboX9CzdibowB7AaBLpmNeLu/ofhXz4jkxRs8Cbsfw3KC90RurIb/MF6F/RqjaOERyl+g1Su5uhX8Rco4TCndLp29TH/ifq8do26HmC+odlA6a5fWrUZqFVCX3Cp2sH3B2ZWTq1uEF2OexHO5na3IZaOMkea0Mpp2iM0YE7gnV/U1/JAVbMu1sSf8Bjx4QyzAKlIYAAAAAElFTkSuQmCC", 39, 15},
        ["AG-3"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAALCAYAAAA9St7UAAABjUlEQVR4nL3UPU8VURDG8d/CqqgJ+BJDwLcYOqJiiDbGQkyM34HCxljYWNlY+Q38CDZWVBAa6NTE2kKlI6iFmqDeoBEJKK7FmRvXl724dyP/ZLNzzj5zzszsnJMVRaEmp7Efj+o6NuAhLnYS5DUWu46zuIw+fEQ/spKmXZXy3DqmauxTZhOfMIbDeF0lzIqimMQ8Wh0WHMMchroMqAmfsQs3pC74Xvo2JBVvR1ak3prBcofFRnGhQTAF3kkVfo9hrOILDmEldPtCtwd78QZHY+5V6MpnYQAv0Z/jHq5tEchB3MH52GykRhLHpBY8gw2p1XZHUptStddDuzM0vVLbf42E7v+WwB/kfv1VVXzAzbAP4DZuxXgxNm5FgKs4V/L9hoV4/hu5dJjq0MKsn4lcwXE8wEmsScm1GcTbZmFuTQ/uduE3Ee92P2cYj/GS1B5tBpsE+K/kOlxpFWS4GvY8nv9Fs4wjYW9LIj1d+JzCibAfV2jKN+C2/ZG6PJVuokuYrtC8kG6ZZ3jSXWj1+AH54FX7iZqi9gAAAABJRU5ErkJggg==", 50, 11},
        ["AK103"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAANCAYAAADrEz3JAAAB0ElEQVR4nLXVPWuUQRAH8N+d52sQTUS4gGinZSpBBBsb0SLkQwg2gljoZ7ASsbCxEbGSCDYWWogWCr5Uoo0h0eRAFCHxDaMk3ljsJvfk4fBevPvDMjuzs7vPzPyf2UpE6AN7cQFbOvhVstyTRw1/8AKbS77zmCnZFvC2ZLuMO3iy4aKIuNThYz7iBr5kfRI3savDvn/hK5ol2yM0sJz13TiIKXwr+E1hVQp6Ze28SnRXkh9SFnfiUJaDxmNslyqzhglsxfOs78M46tiWbVew3G0g3WLFRsrM4o2UiFGclKj1EO9Ke1/jXpsz6xIrSJRexA6pIj/XvaIzmhHxISKeRcR0RJyJiPnC+t2IOB4RIuJaRKwW1s5lu4ioRsRoRIwUbAMbNfySytmQfq4FvM+ykcfvUpYmsT9n+zo+54zfwgGcyn7jhT1NLLXJ+EBQk8rUC7024UieT9tIh6d4qRXIxP9+YLeo6i0IOIyxPL/fZv1VYX5M4vXQUe1jz4ksl7S6SREPtCg0gvN93NEz+glkTmrFM1IHKuM7rhb0s1LLHioqg+2+6xiTGsbaezOHo/g0jMvoryLdYBGntV7vWa1XeCioDfHs21IrruOi9jQcGP4COQMMvMuv7DoAAAAASUVORK5CYII=", 50, 13},
        ["AK105"] = {"iVBORw0KGgoAAAANSUhEUgAAAC4AAAAPCAYAAACbSf2kAAABwElEQVR4nL3Wu2sUURTH8c9uooKFIOIjguCrEJQ0NjY2RtIoQQTBzjJ/gjbWgoKt/gPaidiImKiF2gVtxCeSqPho4iNGjWKyFmcGbsZxM86sfmHYc7nn3vubMz/O3Van01GT1TiOBbTQh3yzhSRuZ/NtrMNXbMA87mJ5yd5X8QUrsQKnMIrJPKEfRyqIvI13yXgE57CxwtpuHBIvXGREvCCswit8TxNanWoln8NFPBBij2FtTbEpM6LyKX2isvfxIzvnAL6JLzmDW1WF/29O4AlmhVX2ZDF8wmRd4dNYk4zf4CkeYT0OF/IPCqvNYhC7hRWu4GUhd15UtSvdhM/hBaaS57X4jBOZ0E1Z7gVcxiXsF7ZKrbQdz5cS8zf0YywTM1V43i6xNvfmTZzEMmzFM5zGmSR3l38gfLjGui3YnMXjkjaVcacw3its0TPaNdcNJfF4yfyExT4dKslpRF3h+7Lfj7hXMv9T9P6cQc17/iLqCm8Jjz/0ex/OuV4452jNs8oFNLzytwlblDEgbrz8ZnyMneISaUzdisMHfxZNdKWxZLxD9POe0ER4Fc4m8XvxJ6snNLFKVa7hBs7jc682/QW/sHjrCuQ/hgAAAABJRU5ErkJggg==", 46, 15},
        ["AK12"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAANCAYAAADrEz3JAAABtUlEQVR4nL3Vz4tOURzH8dczHiNqhAgbaWpsxXL+ASmSlWyYrZ34I5Riwx/AwkZJSZSm2MgkC81GslGkZkZjZsiP0eNrcc7tua7b47mTO+/6ds+93/Pj+z3fzzm3ExEaMIbrWMYrfPlH/07lfQ/mULfovdz/54B5H+AqpquOLg7nCfZic8U/X5l0EmcGx75mlvQT/IavmKj0eYZe3eBORCxie0vBNeGaFHzBFO7jkxT8KE7hjbTBBS/xriuVukjkFxawG++zzWZfYD+O5PceXmfr4jh+YFP2z2JGqvYw+n0oyapgGgdy0EvYKFXqMxZL/VawLCKeROJxRFyMiJ0RMR4RYxGhYhPR53tEHI2IbRGxIX97WvLfqRnfmhUVgUfSYfqYrY6yBG/jBbbk3ZrKFZvM/oNDVOG/MYK3kg53STfRIE6W2jckGX7Iz5tSYgXj0gWyPjQs4UyWTS8idtT4t0bEakleZ9dLWiMN8z6Hy7jrzwNXsCJdkQUn1ri/jelEsx/iMFzAldxexT79c9gaTSsyDLf0r9FRnG9hjb9oI5E5KZmCY1JCrdJGInAJz3EahySJtcpvOtqVG6/0I4sAAAAASUVORK5CYII=", 50, 13},
        ["AK12BR"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAKCAYAAAD2Fg1xAAABoElEQVR4nL3VO2tVQRTF8d+N9xLwGXyAIrEI2AhWwc4PIXZ+AEH8BlaaJpZWWtha2ViJoIKvSkNIq/gqjPiKmqeFSLIszhw8Xm/IjYn+YThzZs8e1qy9OaeVxDrYhktYxCSW0H1Aqzx7rR/EByz3OLuFlVXOqjmHMdzuTm5jtMz3Y2tXfKaIrjmO0z1EbAbxp/BuruNHr0AryRx2bbKomn7E1VwsOs7gvMrUASyoKtjBWTzHp0beU7xv46PfL7KIHZgt8yeN2AFVVWo+4y224Ci+Y7DEFvAY34qItZgsOfcxj504jOmisY1rKmO+NPJmMCvJo1RMJRlPMpxkNMm+JLrGkSQrZf9yklNJOklaZW0iv3jWI/+fjXajTDdwtzgwvYprzVa5h4cYLk6OYQ+OlfhIcXWhj2psmAFV2RRBE2vsP9GYX8Y7vFa12AXV5Wo6OLkZIvsiye4kI0mG+ijhg0brHOoR355kvrHnZZLB/9FaA/haXJ3r495XcAcv8KZHfAlXG++vsHdjVvdHK+v7IdZ0rPI9xxBuYhy3/k7W+vkJAjiOxDLReeUAAAAASUVORK5CYII=", 50, 10},
        ["AK12C"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAOCAYAAABth09nAAAB2ElEQVR4nM3Wv2tUQRDA8c/lzh9JwB8giIWFooKVINiLhZUI6l8g2NgIYm8rForaCDYi2FpIChUhplAwQkQDghaKP/BHjBBOg54kYSx2jzwvOfLu4YFfWNiZN7Mzsztv36tFhApcwU+0MJF1xYVqhfly+hp24iPms65esH2JyY6Yx3EYR5ZLqIHteb4xj07eYaEgr8PJ7Nsv5gvrz6KJOdzr5lCLiGZO7n9iHDekDQwM4SheSBtb5BN+NPBF90Ja0k5MF3Q1bOshqZBaaA5rrNx2MCB1SrsTBjGFQ3jVsf5DzDTwFbvyouM4i73ZaATvpeNtsznrVmf5Al7javabwCgO5Oe/sXXleksxJL2bS2ifCIzhGu7n0Y0pqZAdWf6OJ3newlN8KNivxRZ87j3vJSxbBOkIp/L8kb9bqBu7LRYxiXN4I10U09iHxx0+e3pIthIN6SZYJbXKWAmf4vX3TOr9mQ6b5x3yQdytlGFZIqLXcT0WOd3FZjAivhXsZiNiU4VYpcdAhdpPYD8u4k4Xm1+4XJCHcaZCrNLUKn7Zy7Aeb7Ehyws4htv9CFblRMrSxKWCXMdNi38S/5Z+9m1E1CNiJL8ncxFxql+x+tlabYZxC+fxoF9B/gAcy5p3z7j4hwAAAABJRU5ErkJggg==", 50, 14},
        ["AK47"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAOCAYAAABth09nAAAB4klEQVR4nLXWzYvNURzH8dcdkyyIwZSVEE1CWUnyUGZjYaE8LVAaf4O1v0GZYmWhPGwkDytFVsxGDTbKU0kieahhPN6Pxe9MruvOg3vvvOt0Tud8v+d8P+f77fc7tSTaZBm2ojZD+35sLOMVeIFFLex+4iJeNcx9xNMWtoM4iiO9Mwyimc04h9Vt+kNdFexbDJT+AzZgG76X1ot52I7nTXssxA2oJTkzzYHvcRdfsBjrsB9rOxAxwTi+YgG+lcAX4h3uNNitVIm9Unwm2FX6kVo6qK0uUscnRFVGwxhrWO/FfHxWZW6C5arSvt1Oab3GiOo25pW56yWA+ziAPtUNTnAZx1VZ3YmluIWXRUDHTCekjicYxT3cxMOydg27y/gCHuEB1qvSvwY9ZX0VnpXx+W4E/g/5m3qSB0lOJtmTpC+JSdrp4nMjyeJi25dkSZI5Sc427T0wxV4dN0lGkwwn2Zekf4aOPUlelQB3TWIz2CTk6mwLaadtKcF9SDJ3CrGjTWKGZktIz/TF15JNpX+k+mS2oo4h/GiYO4UdbZ45NR3cwrIka2Zgd6IpK+NJDnY7I7Vk1n8jc3AJexvm3qheBWMtPdqg3dL6H37hkD+f3eCYLopg+v9It/iGw3is4X3UTX4DquzM63GDCPgAAAAASUVORK5CYII=", 50, 14},
        ["AK74"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAOCAYAAABth09nAAAB6ElEQVR4nL3VO2tUQRTA8d+G+CZiwGJFfKGRFIJgI0QFG7USQQQVIb2fwMavIIidhZ1WKmIrGjExvg1YKBqSRgxEUBIf+CDosZhZdt24N8lu1j8Md+bMmTmvuTOliNAES3ASy+epX85tDdZhDJv/oXcPj+pkbzFaJzuK3ThTEZSaCGQVruPQQhfWMYRl2IEH2IQNUpA/a2w9RX/d2mOYwc2KoBQRF9FdYHAML9CB7ejDwRaDKGJINZAuqXJP8CPLVmCPlISp7NtAKSJG0dNGxyr8lpIBgeks+4Rf+IxnuJvlsrPl/K0cr30YRwkf8AWTCw1kCgPYgl1ZNozn0tk+jiN1a/pxA99xAu9xXzXDi0LnHPPvpCyN4A4eS9k7gFtZ5yXOSz/lRnzLDpfy/FZ8zf0ri+T3bCJiNKp8jIhrEXE6InoiQoPWl/UnImJtRHTntjoilkbEcM2egwX7LFrrlG6MSznjI6rns4jD+XtVOqf1DEqXAuyVqjLeUsbnoskMvMrZ3t9gvjf+5nK7K9Ixd6iz6FJ9CN800HmN2zXjU6pVbAvNPIgVypgsmN8m3fEr83hCevymmzVYRDMVqVAUBOkhPVszXo9zLdgrpJVA5sMFPMz9GSn4UmP1FvgPV2NvRAxFxM522vkDiYU2tM7CwnkAAAAASUVORK5CYII=", 50, 14},
        ["AKM"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAOCAYAAABth09nAAAByklEQVR4nL3VzYuNYRgG8N9hRPIxvhL5iBkLSoxiNdmyUKLE0s6S8gfM/yDZoFmwkIkpJVmPBcIkUcwsqJlYTONjfEeXxXnV22nmOM6cM1fdvb33fT3PdV/389RTSaJJdGMX5jXI78IGdGIdXmHVNLz3GKjJPcfbabgXcRN3OhpsohYHcAVrmlwPvapmfmArXmO+6oAO4XvB+6xq4nDBLeMJvkAlySX8riP4EQ/wVXWSO3BcdbqzxVSh3VnoVLAMT1VN/sX+ouHHpVwHjmAY5yqZxd1qIabwS/UURnG1pr4QSzFSylXQg/sYa8bICJ7haCk3gHd4ibNFU9tK9b6iuU+qpzmBexj/T+2ZkX9jPMm1JKeSbEkiSSXJoxKnN0lXURtKcr5mj8tFrW0xnZHRJP1JTibprrP4dsG/kKQzyYoiVhdGH5b2nEiyqN1GhosJnkiyvsGFS5J8K5rcPgPnTM2A+tptpJk4VjT3og5nZZLJkpGfSfa0y0ijj1kt9hbf4TqcSZwu/S/AIDY1qVkfs5jCxiSbG+AN1lyxsSQ9rT6RStL2Z2Q5hrCzlLuLg60UmQsjsBa3sA8fsBtvWikwV0ZgMfpxA9dbvfkfBORvDGB21QAAAAAASUVORK5CYII=", 50, 14},
        ["AKU12"] = {"iVBORw0KGgoAAAANSUhEUgAAAC0AAAAPCAYAAABwfkanAAAB6UlEQVR4nLXWz4uNURgH8M+duSYjl+GGMikWUpIkCwtloUw2FjYWs7CzsPc/2FhZUFYskDJFyUKmLJUoGwkzSiPSNIQZLuaxOOc2r7d7x7g/vnV6z3nO8zzn+XnOW4kIHeA8fuIXHqGopJK/rWhF+g7MZD1l/nlMYg4H8Lp4eLUDg9fjDFZ3ILtSfMcURlptViUPZ/Emzz9hQ4FnEZ/zvJYV9dNg2Z4n2I2zeIcGFjBdiYgGxqVULGd0HZektPYb3/AcG7ENqzJ9DrOViFjAcBvhYRyXnNqHu1Kt3Szw3MErXMMm3MPbfFgTu/BRcnwxDxi0VO+/paA119P5uyfvNTL/lIhYiAiFMRgRRyPiSkTMRMTViBjL9CbP41jCxYg4FhFDETGSaRPxNw6WzuhqVCLiR/amjpM4gWc5crelTi5iXY7akFRKh/E17w1gLXaWsnEal9tk879RzYdP5nTcwH6pEdphLMvAC8nBMsqOHtJjo0fx3lKd/QtHCvOnbXheSh2/tYVM1xjIyldqMEzgvvSwPGzDE3hQWI9ibycGttbeeUPUI6K2zP54qRnP9bIRexaAEmpS2a3J6w/YLr12XWGgWwXL4AtuFdZbcKoXivtpNOnHqpnKeWzuhdJ+lkcT16Xb5IJ0v3eNPxBaj7M/EmAxAAAAAElFTkSuQmCC", 45, 15},
        ["AN-94"] = {"iVBORw0KGgoAAAANSUhEUgAAADEAAAAPCAYAAABN7CfBAAAB00lEQVR4nMXWv2sUQRTA8c/FOz2jIIrBgNgKIqiIoILYWdj5q7NRRERs0/gf2NiksbCyTyOCheRiYaeCgoLgryKiiPE3Mf4ieRY7kmPdu9tL9vALw86bN+/Ne7tvZ6YWEUrSwD7sxhN8KGtYwBr8TP0aIj0X8BwfO9idxdX8YL2Pha/gTB/zl8op3CkYX4uT2IMd+IYNGKtFxDWs7uG4gSOVhdmdB/79ygfQxCP8wjDeYhPe1CJiTu8kBslvzFksq9f43qbfKgt6AufwJe+gnpx0S+IpLmMXzreNT+AWPuM0DufsxjEq+4+GMYOXspp/gWepPy17u53YidlkU0xEzEYx9yPiREQMRYSIGEvjXyPiQkRsi4i9STceEfM5++NJN/AmIuZyi7ci4lDB5JtJfyPJIxGxPrUtEXHxfyXxt5xW4Tou4W7BB1uJg6nfSs+ZNv0n/MjZrOtSIpVSx1G8ktVoJ/bL9nYWk8jzLiePLC+08tQxVWJeA/ewGY87zMknMbqMuPqi7GE3mVpTtg0WMZ2Tty81qH6pRflrRy9WyLbCZpLfyw6jhaoW6MRQhb7m8bBN3ijb4wdOlUmQlVw7xyr2X0g/F8AyTMnuWK3Ublfsv5A/SBySI+YtT1UAAAAASUVORK5CYII=", 49, 15},
        ["ARM PISTOL-ALT"] = {"iVBORw0KGgoAAAANSUhEUgAAAC4AAAAPCAYAAACbSf2kAAABtklEQVR4nNXWPWgUQRjG8d9eLgYRFawEFSUoNjZ+FCksFKy0UXvRxt5GQVMKQoqUgq2lhTa2WtgkNrGxMKJEERsJSoKcBj94LWZP7ta53O3lRPzDsLvvvDPvs8/ODFtExH280p8Wbg6QV+U8HmAf3g4xHiZwHI/bgSIiVrFtyAlzPMeH8n4vDmAFr/Gm5lyBAg3cwaN2x98QXpeQXqx6D2vYhP24gLl2RxERa9Kn+B9oYRGbm/jm3woPLOl2+qvkNhzEHmmZLOMzxoqImMfUCAQ8LIs9wyfJjGvY3WfcF2xZp/8uDpVz/d6cImIqIlZjY8xExHhEqLTZTO6liLgdEUfLdiYzrm9r4ikO47p0ZPWigZPSLu/kI27gZx9n2yziBRbK58kBx3XRLK9LuDxA/gq2Z2I50RM4W4ktY4d0nk+W9ccHEVql2T+li7FMrJfTV3S72cIxvKtZM0ujZn5O+I9MbCemK7EZIxJNfeG5L5QTfgtbO57fY7ZmrXXZqOPfpXXbyRFcrMSuSsfeyKi7xuelH7IF6WR44k/Hp3Ub8hL3hhXYiyIiRj3nLpzDaZyQ/i9OjbrIL+XD/twN05nXAAAAAElFTkSuQmCC", 46, 15},
        ["ARM PISTOL"] = {"iVBORw0KGgoAAAANSUhEUgAAACsAAAAPCAYAAAB9YDbgAAABmklEQVR4nL3Vv2sUURAH8M95hyIo0UKDwVIQLCQBC8HKv8BCYmVh6R8REAVtLCwtFETQ1l7FX6hFtBAiClrZaIJVTM7EcNw9i7eLy97e5d5u8AsDM/PmzXxneDvbCiHMmwyPsTZhLNzAQxzEV/QS7ub4g83caIUQ1rC/RiJYxo8RZ8cwVTNvjmu4khudhsmOZFIHP3FPnHi34F/HFu7iEGbRJk52C7trFvwfCFhFuyN20YTsLwwy/QBaE95bxdNM7/r3pgfiRM/jGZ7kOTt4jnMNyH7CmUxfwD5M49I2977hwoizU3iPN3ibO1shhBNYzIqkoouj4nSLmMWHku+quE1eYY/Y4M2UYh18xlncwsyY2MOGG/pYQXQv7pd865jDCo6jL661NIQQJpUHYRivK+Jul2K+hxBOJtQZKbsS+mpX+AYlex6XC3YfF7GUOMNKNCXbL+hTuFM6v44XqaRGIYVsVWyRbE/ciUU8SmY0Bil/sO2ewYb4Ec7htLgrv9SnNoymZJdLdg/vMtlxpJD9LU7qZUFWdpzRGPwFoGrg1hC6LbEAAAAASUVORK5CYII=", 43, 15},
        ["AS VAL"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAANCAYAAADrEz3JAAAB/klEQVR4nLXWzYvNURgH8M9ljPFOyk7IAiVNFmpQNBYWykZZWFlY2vMH2LCgrGZDyD9gIUpWRhQ1SixFSCJvM8Zr92txfpo7v5lp7tyZ+dbp/s5zznOe1+85t5HELLAZ+/EbS6pfWIRRLKtkP7BxEv0tWI5VGMLpDnw4hv7GLALZhzuK09PhuxJUHU0sqMmG8XcGfnRjWRc24YuSwV/VwRvwBn+q+Rqsxlpsw8FKr50goGsKeT0IWNHmmRMMPMB7xWloYAfe4hMW4nM1RpVSwsPaWSMtZ6ww3vnFLd+/8BSP8dHEZHRUEUleJGkkUY31Sd4lOVnN1yU5k+RJkqEk95PcSHI5STMFf5OcT9Jb6QxkPJpJTlTri1pszdnownO0EuU1XmI7LqAfF9GnkLY1E0eV3h/BT6VFu5XK/URPtbeBm3g3g0zPCAuwsibbpNwkB/AIO3HJ+CBgjzECX8cAvlayqzhb279xrpyeFEk+J9ma5FCSa0keJjmepGeacp5taZ3dtbXFlawVx+ajpf6PRpJBpeSvcAt328zBoFKVpvIOjNTWe/DNGJnP4dRsEz8VurC3Q93/Dr40MQgKR56ht5r3dWinLUx1v7eDKwqJPyhca06y556xQHYp1/LwLGxOjfns2ySHazw5Mp8cmZcEVViqPH6Dyt+Z28ojOOf4ByC7Nc+GCt/WAAAAAElFTkSuQmCC", 50, 13},
        ["ASP BATON"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAACCAYAAAAaRY8cAAAAMklEQVR4nGP8////WwYGBhYGBgY+BvLBZwYGhpMU6L/NwMDwiUy93xgYGH4zUWD5oAIA3Q0Jetjcu8gAAAAASUVORK5CYII=", 50, 2},
        ["AUG A1"] = {"iVBORw0KGgoAAAANSUhEUgAAACsAAAAPCAYAAAB9YDbgAAAB4UlEQVR4nK3WO2gVQRQG4O/Gi0bEB0lhESvFJkpKG8EmpSCIYDqbNBaK1oKFdsFCESsbIWDhA0QIIiLa2FpoiKYwEoIQUBM1ilHzOBY7S5Zlb7ivH4bZ/c+Zc3b+OTOztYjQJkZxqcR9wr8K3yWcajdRjnoHYxfxscQNoIbJAteDgziEqQ7yqXWgbBW24CbOoRh4F85iP+7hZTvB6+jFGM7LVOkGlvGlgt+HF3iEp4lbxc8GcVawjt+o1yJiCoNd+sh2MIsPDWz5x87iTy26XAdNYk22ikdkdf+tmUF12e7d2kbCv3iCedmSX8Tugn0Uv3Adz/EK35PtKI7hdUsZI2Iu2sO1iJDatohYSPxSRNyPiJ2JHy/45e1B8t1RYWvYejaZx1fMYRxDSaWysjmuok+2vIM4Lds0xzFREbs39f2dKrseEbcioi8pk89spuR3O/EDEbGauGclNe5ExPYKlaaTf3+nyl6RnZOLJfXmS34HUj8iO1/hbsG+J41frsiRK7vWgq6VN1ij0+G9bGPkOJz6oQI3U3gewcMGscZkF0XVRBqiFhFnbMw08BifK3wv4EaJ24uTGE7vKzZqewGXtajepmihZobLx0FEnGil5jptrfzITOIHpvEGb/Gua6o1gf/niwh4NmNiowAAAABJRU5ErkJggg==", 43, 15},
        ["AUG A2"] = {"iVBORw0KGgoAAAANSUhEUgAAAC4AAAAPCAYAAACbSf2kAAAB8klEQVR4nL3WT4hNYRgG8N89M7gsZiFpNJli1KXZiY2GBWVxi1KUouwkZWNjQWhiYTULsmDLQpMUZSeWCqWU/6WYhoxkxr+LOBbfuebMde695869PPX1nvN+73nf5zzn/b7vFOI41iZ2oII7eNMk9jD6sL/dot3tJsBDLMMQFmIP1uEH5mTYd3iMa3gx26KFRPHVOI75s02UQiQQXI8y3qbmluIVDmArdgsvUcUHZLVAAUV8w2SV+DAOYW4HSP8PjKNSiDvQ5G3gl/CFzgtr5LJsxWP8xHdB9e5/TfwjJrAAvQmBMXxN5sawApsFJXMjwus2iD3CWqF3izhXMz+KAWzADSxCP0pYgykMoqfVwpEgfzNM4laG/wLuCspF2JT4n2InhpP7Mk7hfZ38i/PRnUaj7fAlTgs7xFmsxO0GBU8K6sIJXErNbcSZjBpLElvMyfcP6hEfwRF8SfkmMuJ6E9uDfcn1Z1xJxZTwTFhctehP7FQesmlkEb+Ogxn+8aR4V8q3KrFbTJ8BV/EpFbMLF+vUj3IzrUEW8b46sRU8FxSsoiS00kDKF2F5ct0lHG5H6+TchnlmHkK5UIjjeMjMHnsinG5ZGMX2Gt+gsFuUGzxzr1ViTRHHcSvjWPw39raYoyOj1Z+s+8JP0oPUuNlhLXPhN0TD/Cfdw9YjAAAAAElFTkSuQmCC", 46, 15},
        ["AUG A3 PARA"] = {"iVBORw0KGgoAAAANSUhEUgAAACUAAAAPCAYAAABjqQZTAAABuUlEQVR4nM3Vz4tOURzH8dcd48fjRxNqkNnIQspCVmJtY2NhY2EjG/kDsEH8D5YaZSGKSJSyI03ZkC2P1BBGTDLGr3ws7p1xezzPzJ2nWXjX6Xw73++953O+55zvKZJYJJbhKF7gGT7VfEXNrk94ButxEpOzwZWoAnuxok9BW3AOmzomL7qH/8PHStysqI24iP19CurFLwzOE/MV3/ED19DGSJFkEkOLLKgffuIsNgz6PwTBAzzH0yLJtP7PEtzCK0xgGw7XfA+VZ63AKO7hPnZjH75gRy2+wFtJXqZ/7iZpJVG1EzVfO8nparyV5Hotbs4230Ecx1rlFR/C9g7/O0xX9ghOVfYY9vh7/Q9UGW1Gj0x9SHI8ydIk5+fI1J3aCi/Xxo91rP5qktVNM9VN1HiSrR2BR5J87iLqceVfk2SqGvuWZF3t2+Ekl5oKSmKgS/ImlVW5zih24gZu18aXVP0urKzsJ8piOMMhXGm8dcriNqa8ijM86hHbxsHKnqqJgOX4jYFK4E1lQYQWLixE1Mwzs1DayqflDTb384O56LZ9TXhf9cOav2+Nma8k9OK1MksTWKUsgovGH0jxzXyX+j5jAAAAAElFTkSuQmCC", 37, 15},
        ["AUG A3"] = {"iVBORw0KGgoAAAANSUhEUgAAACsAAAAPCAYAAAB9YDbgAAAB40lEQVR4nMXWz4tOURgH8M8dP0JMo4QmWWEos5HEQmgUUiglsmL+BmtLK5YWxMpikjSWdrJgZWb8KDbMLCyIoYxpGPJYnDN13e47c98x8a2n55zveZ5zv+9zn3PuW0SEBcQ9dOJAw/hBnGi6+eL29bTcpw8H8Sb7chWKbDOIbNtwBPfxa66HFLmyXTiPJfMUexa9FTFFi9g6PME+TM4WVETEIVzDxnYV/iV+YqI0H8YX/Mjzbql47/AMm4tY4KZtAzPVH5eEPsT70voqqb0mpMr3/k+xH/Eat3GlSUKH9Mvmi2GpX/uknh2trB+XqncRV7EFizK3QTpgexs/LSLGYm5MR8RoDX8sImTrjoipzI9ExLnMiYiBiFheihURS3PsUIVvabNdXeO4i2+4jJ24U4lZWxrfwDKpF09KrxjWSQdnqpLblX1n08K2EnsTF/CpxNXdFuuz34XDefyoJBTOYKAmd1P2EzVrteio4QbRXxEKb2tie7I/XeJuVWL240FN7kyh5vwYVBPKWNMidgxfsbLEbc++p8RNY3Ueb8WrFoJe4hQ+N9SqiIijWFHihvz5Gst4jN2l+XdJfD921MRP4hI+NBU0K5qexGzXa26EPW3uMW9r94/MiPT5e46neCG1xz/Bb86uexoVUGNgAAAAAElFTkSuQmCC", 43, 15},
        ["AUG HBAR"] = {"iVBORw0KGgoAAAANSUhEUgAAADEAAAAPCAYAAABN7CfBAAACDUlEQVR4nLXWO2uUQRQG4Gc1qy6KEu8oCGqTgPYWNqKFgrWXH+AFhCjWotgoiJhK8AekNIWVgiKxULERNAZsVLzgLfFCNDGSsGMxs2bYfCab3fWFYWbeOWe+c+Y758yUQghawCm8w4M0X4IJLMR3dGAKF/Aal1v52L/Q0aL+HSxGFzbhIioYw4dMbgMeo4p+0aG2oRRCKOM8jrdpz6W4jqcZV8EvHMEKnEAtBMbxO5MtY7JgXMOyxP3VKYUQBrGtPfY3hIBSNn+EbixvQHcUi/AcI/iE4VJoMSmawISYO6dxA2+TYWMN6q8X822iRnTgvRiz88UX3MIwfuJMtvYQvejEJVzFkBgGozgrht3LJF8fMrPh4wwmhPAmzI1qAbc/hCC17owfCiGcTPyOEEJPJldrUyGEmwV8U2226vRC/MX9GMC9uvXx1C9IJ13T2S5WITgkltcclaSzsrGDnxtFTkziHK6YrgCrCuTWpX4fdqVxn2kHymI4fa7T2yom9o/mTJ6JIid6cK2O+yZeWrn82tQfzri+bLxXzJl6lFNfLVhrCkVOVAq4qljONmbc5tR31RnVKZ70QRwt2OsVDqT92oJSCGGnWPKINfy+rHxluI092fwuduOYaYdyDCj+E21HaR7XRK/4VqphBGvabVAzWDAP2cG6+WpsaaMtTWM+D8BBfBUvrWd4ovFb9r/iD1BPGUL5VqhSAAAAAElFTkSuQmCC", 49, 15},
        ["AUTO 9"] = {"iVBORw0KGgoAAAANSUhEUgAAAB0AAAAPCAYAAAAYjcSfAAABPklEQVR4nL3UPUtcQRjF8d8uuwYiKVTWQlzBRkk6Y5UUAVPapQvJJ7HTzsoqYG3hV4gG89JKlmAZEQKGVCoqmBgtlMdids1wUUHXm383Z+6dM8+cZ6YSETI+YAR72MEPzOHE9YxhGNuZ1ovjbDyKASxiqpKZNvEFgzjLfviKoxtMX6CBjUzrw2E2/o0ePMFaJSKamMVjPLth8W74iSrqWBIRgxHxPv4PrYhQwwP8ko60VtjhjpTNHym3/vsoO890GW+yuQW8wzhW25trSU0yIzXZbfmL73llE4UPGlIWQ1IW51J3z2P/DoaXdCp9im+FuWns+nfsPVhH6JJOpW8L+hZWul38Oqp4iNcF/VNZhh3TV1JuOQdlm768Qt8t23RSauUOp/hYpmklIh5JV6De1jalJ7E0qnieGcLnMg3hAkvWtlcmHbfCAAAAAElFTkSuQmCC", 29, 15},
        ["AWS"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAICAYAAAC73qx6AAABHElEQVR4nMXTsUpcYRDF8d/qEhWxEkQWQTAGMUKKVKnS2MXSR7Cy9SGshDxBLKxMo5YWQlJoUgVCithskY2VlUVEFHFPinurZdds9or+YaqZM9+Z4ZtaEhVYw4ceuQbmcFzlgX6pDTjIO7zFK/zoUdNAHX8Gs/ZfpJZkBTNY7kie430X0Tg+YvEBjVzhSwV9aklamFQYfCqaeFGlQf0f+TY2cITn2McQ1hVfagHbHZpr7OFEcR+Xffi47d9yD5K0klylO+0k40kkGUlyk+RbkpdJ5pO8SXLQoflV1j9q1DGKsXKuTWxhFrvlxr/iFEt4hkP8LOub2MFnnOE3WpW3OwB1hfFPGMYdLsp4jVVMYRoTijv63tFj75G83stfjl3YXlWyhK8AAAAASUVORK5CYII=", 50, 8},
        ["BANJO"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAOCAYAAABth09nAAABIUlEQVR4nN3WMUujQRDG8d8boqAochaCYGljfWghiCBoc1hfc2IvXH2NVqeFWFlY+TkEv4BgYWdznYVg4IiF3R2oj0UQXoKGJKJJ/MPAPgwzu8sOM1skUWIcW1jDHEbwB2c4xLV+JcmzfUtSz+v8T/IrSVGK6Rt7XqwnuW9xiTK/e33ol6xIMoErfGn3EbGI83crky6o4Kf2LwEFdt647xI2uow9btK7GK1itYtkq7ho4R/DUAt/Ffv42uG+sxjGd5xiHjP4USS5xWSHCfuBaFQHGqU1qBRlUcUlljtM8k9jrnw0sxrz7RInWMAKbiTZbrPtljnpYas9atIHSUYHsf1Oo1bSU6hXcIdNPLSZaE9vZ0itSf/F46f5ohTJ5/g0PgGQZbQmy/b+pgAAAABJRU5ErkJggg==", 50, 14},
        ["BASEBALL BAT"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAACCAYAAAAaRY8cAAAAS0lEQVR4nM3OOwqAMABEwUlQUVTi/Stv5FmsLGMTQYJNOl+17Ac25Jx3HLi00WEtekPAjAE9lqr/ZG9GTJX3tY1IHx9Syc7YcPzX3MgVBvHSNhaEAAAAAElFTkSuQmCC", 50, 2},
        ["BEOWULF ECR"] = {"iVBORw0KGgoAAAANSUhEUgAAACwAAAAPCAYAAACfvC2ZAAABv0lEQVR4nLXWv48NURQH8M/w/MrGJmQLkfiVrGYL0YiGhEIl4Q/gf1BJFBLR6VWUQii3ZiOiUCCEKERkC4pHgbWxll3vHcW97Ji3nnlvnm9ykjv3/JhzvnPuPVNEhAbYj2942STIKpjEKVysKloNAy9hAicwjusN443hMNbh+WoGRQOGL2FKSnQn9uA2nmEZa7MsYDbbLmMRnbz+gi4+Yz7H3Iw7OCMR0pPwxyGSDWytadvFmgHiFniNu1LCC2WDFrbUDFYNXBfFALZvJPbnpLyWsL5s0LSH6+ApbuFATiTwHV9zcvN5r40b0hf5K4oYrInf4onUp21ctlL0jywbKz4H8XCAd/RH/BtzEXE1Ig5FRBERSvIu2zyKiNMRMR4R7yv++yo+jaRlpdHL6Egn9RqmpZNdxV5/HrxZbNPb351REPsbEdEtsfEiIs5GxPYa1U5nn25ETJX2L1QYnhw1wx9wM7P5uGadR3Eyr6/gVUnXrtjukq6p0SAixoao9EFmbzEiJiq6IxWGz4+S4WEn3Q4cx26cq+g24RM25OcZHBuSzx40Gc39cF/6JyDdt7+GQGP8r8Exk2Pfy9J3GAyCn1DyDO+30BjQAAAAAElFTkSuQmCC", 44, 15},
        ["BEOWULF TCR"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAOCAYAAABth09nAAABx0lEQVR4nL3Wv29OURjA8c/bvrQEibQhIhITkf4Bfqw2f4FIJEQwWInJYDAYTRYWk4VFTLRDYxCLRCTUUJJSIaJSSVstHsO5jdPbt+99e/u23+Qk9zznnOfnee69jYiwRq7gEd6uVVELTuIlxqo29nTBWG8XdKzEbmztZGOzpoGDOIu/OIe9+CYlJgp5j/+J+lPIn2MCjQr9RzGI8xiXqtKWRkRMor/Nnnf4mc03YwgDVcpb8GLRbiaLYh6WB9iPSUxjBr+ytQFcwAHMNbGnwvjhwsgIvkuBzK/C+WmpIvAD27GpmJedK7MFn/Glhb7Zwq85zIvEWEQ8iYjfsZTXEbEjIpTG9eiMiYjYVzq7PyIORcRQROxsobvWaOIr+nBcukJ3sFBEer/IQJmbRSZvZJl9jGNSvyzyQOqJnA9tKlCbpnQvhzGFu3jTwbkZvM/mV3EPp3A7k/d1x81qmrgoBdIq8yvRi8vF8ycp+EEpGTnlaqwfNe/kpawPzmTyZkQsZGu3utUDVaPOoV0RMVU4OtxifTwLZHSjAqnzZZ/FNTyUXgxlRrPnI9hWw8bqWYfsnI6lnNiIitT9RWnHU3zEs2K8Wgcby/gH8jbLOOESHgwAAAAASUVORK5CYII=", 50, 14},
        ["BFG 50"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAKCAYAAAD2Fg1xAAABWElEQVR4nMXUv0vVYRTH8dc3b5ZpZC3lUIKLINHi6N/R4B+QTu7N4daug3+C0tTQGIgKDkFTQRimqEMgopbJtU7D+V66onjzfq37hsP3+cJ5nud8zo+niAht0oVHOMEeDjCKVxgsfa5jCH0IvGv3slYUFYQM42O5/oY6DnEfW7iDXnSXPvWm9ZVTq7B3GxOyIoFJzMvgr2EEc1JwH35WirQFRUSsYQNvKpzzBI/xyx9hdSzKanXjSArax218xw0psAefS/sbvuJH0//dIir0Vgd5iSUUMmnPGkI+SYU1OcC7eIh1zMh22ZetNHzOwe/xXFajXS5TkTM0ZuRAlr4ft7CCKbyWpR/AMRbwATexis1y/4R8uTpGQ8gDGchbPJXBNrNTfsdkP69iGsu4p8MiQCSzETEaES6woYjYjYiNiBhs4fvfrSYzeuT0K3Ae43JOXuDLP87vpfkNyofv/8tF7+MAAAAASUVORK5CYII=", 50, 10},
        ["BOTTLE"] = {"iVBORw0KGgoAAAANSUhEUgAAADEAAAAPCAYAAABN7CfBAAAA5ElEQVR4nO3WP05CQRDH8c9TYqFnEDR2XkIOQu1ZvAGU3kCNFMYzSEJiaMTKBG0ogEJNXsha7COBgiBQuI/47TaZmd1fZudPFkKAMzRQRxVj9PGAewwtcoAaTnFS+NRwXpy/cDhnP8I7BujhqYjZwdSWZCGEJi6xt8Rmime84UgUfIz9bS8XhbRxg0d8bxIkC0UqEmCCa1zhYx3HlETM+MQt7sTvPFnlkKKIeXK84kWs0VltXqAr1t0gdRG/Id8FEUs7Uqn4F5EIeeWvX7CC0nantedESpnYeGJX0LIDuxMl32J/AFNeaeJY2r1GAAAAAElFTkSuQmCC", 49, 15},
        ["BRASS KNUCKLE"] = {"iVBORw0KGgoAAAANSUhEUgAAABIAAAAPCAYAAADphp8SAAABc0lEQVR4nI3TsWoVYRAF4O8uIngJomJjMCRlGjEqBBRBURB8AAkEVJJCVCzSWZjGF9BCIZLSzlcQTOUDiCIpbFUUCzUQCEI4FndW1usGHBiWOefMP/Pv2ZVET57bA5fkbB/e6I+bONqDH8GNvoYGMz34JK714As43oPPNLiNiR7y5H9iE7jTYIiVMXITFzDdwaYL2xzTruBAgy0sd4gz2MFVo6s8qFwobAenO/plbEkym+RnkqVy5FGSQceRjcq2HiR5Utql6p1tsIj7+ITHOIZ0Jn6obCNGjq7jc/Uu7iviWYne49XYOxj4N07hcg2Hh+1BbXzDFF5gA3O4VNwa3lQ9Vdo/W7autVPnq96thi+4aOTW18J2SzPf2Xg4SDKHW0buHTL6cq/gdc+V4Dxe4jl+4CDWB0nGhWs19d4eBz01+iPu/oV2bB0mWU3yPcl2kutJmg7fFLZdmtXqkcT4RvtxopOH8bE2mKyrvMPbev5qG38DD4zt9GPY6RcAAAAASUVORK5CYII=", 18, 15},
        ["C7A2"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAANCAYAAADrEz3JAAABtklEQVR4nMXWO2sVQRTA8d/1LqiND9B0ESPYRAsjchsbBfEj2NrZKH4GUwjiB9DCxlYEay0EQfFJLkgI+IwSIUFFFCXRxOSOxYy43Ozl7kPxD4ednTl7zsw5Z2a2FULQgC/4igl8amJoAHtxBUeGKW5o4OQstmIUIw3sDGIEO/C+jHKG85hFwNMCnQXM9/UdxikxI9twBy/TWD7FGaawD6tYEzMY8CPJTyyn5woWU7uDccyVWUgrhDCLsTLK/4ke3hb0r4hB2YL5DN/xBm3s6lN+hxkxKp9xW4zmBC6WnEgXBytM/Bs+JJ/78QCX8ahgIYvYiV4mpruLjQULOYYXBc4e4xBODJnUVZzBgSRtcV+u4SFei4FZxtIQW4P4SCyt59iNa9gjRmBazMSMWMeDWMJm3MB1bMel3PgkztWcYCUy3MQFcVOPiWVWhg42pfar9N1qkiz1NzrbKxFCqCPtEMJUiDwLIWS5sbnwh8ma9itL3XvktLiBezgpZuE3+eNyvKb9ytRdSFu8H+5Zf5rcz7WPNvBRiVbDX5QijuNW7r2DJ3/bST/ZcJXK3BXLq5vaC//Axzp+Ac7nBz2s99AmAAAAAElFTkSuQmCC", 50, 13},
        ["CANDY CANE"] = {"iVBORw0KGgoAAAANSUhEUgAAAC0AAAAPCAYAAABwfkanAAABZ0lEQVR4nNXWsWoUURQG4G/CFmo2G0VIF1KFQAQLg2IhpPMRArGySJPGPqmTPIKFaO0DCJpXEFGxEURimhBI5cZs2AjBY7Fn4Sak2IVdhvxwmHP/e878/wxz594qIowYk2hhKuP2FXkL02gm18q+Ozl/Cw3s4z1eYq8vUBWmp/JGlwUnky8FWy6aaBaCjVE9fYG/eIFXfdM/MI9qDGKjxhreVBHRxY0aDPxGGycZHfzJaGMCT/Cw6OlisZENg5o+z/pSsJPX4+TayZ0m3y6MlPWDYhPbmd/E8yoi1jGboseFWCfN9fkTnA0hNkp8xKPMP1Vj+HuMA9t6bxw6E3U6GQJHRd68LqbvFvnpdTBd4Wkx/jmOjWAYLGAF3/AFB1fUbOFxMX5X90LcwUYxPsRnfNXbYZdxv5jv4p6IqDM+xOD4FxGrEaHub/p8wLozPMNbLh6Y6sIMlvAgYwlzeoek79jFa/zqN/wHqCb0Y2EfwxkAAAAASUVORK5CYII=", 45, 15},
        ["CHOSEN ONE"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAACCAYAAAAaRY8cAAAAT0lEQVR4nM3PoQ2AQBREwTkBVSBwVEAfVEEtCDqkARzJGTDkY0iOUMGNfFmzKSJmLIpAwonrbR02ZLTqs6eIGDB9Ysb9GzboMWJVDtbieADxkRHkoyqOkQAAAABJRU5ErkJggg==", 50, 2},
        ["CLEAVER"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAANCAYAAADrEz3JAAAAuUlEQVR4nO3UMWpCURBG4e8+mxSCjc+AILYGJCSlYIyLcDtp0giWrijYmCatO0iTRWQsfI1FQIxXn+CBgSmGmfM3kyLCldHAM6Z4xQTrVMMgd2hXdY+y6ks84gUt/GCGJyxTRAyxRP/8znsUdsLNA+c/MUIX3ykiNnjIJJebL3TQSxHxi3RhoX9TYHVpiVOQIqLEAj18VLXBMV+ggTHmGJxG8TByfa03vOdY/BfFOY/l5BakbtyC1I0tOzomc2n0nSwAAAAASUVORK5CYII=", 50, 13},
        ["CLEMENTINE"] = {"iVBORw0KGgoAAAANSUhEUgAAACsAAAAPCAYAAAB9YDbgAAABc0lEQVR4nM2WPUscURSGn41iNiL+AkkQUfyoLQULbWLA2i6VXdr8AgshioWl2mhjqRa2NhaCQbS021WEwAomu1q4qz4Ws+JlnMUJuM6+cOCeO4c7z7ycMzM5dRA4BPaBVWAHqNGKUvPqkc/6o86r/SqtFE+LL2rJl/qtzqqdWYOGsKiT6l0CsOqluqQOtwos6s8GsKH21e9m4HZODVt4CFgAvqZo93/AXL3+LdUG/ADOgDKQBwaAlTgsQBdwDPSlPPwQKAAPRA8Q6gaoBvkdUInVlIH7IB8HZhLus9aesHkNHPwH7Gg9mqEqcEpkQnsS7AjwLeVhFWAZKAICf2PX465VidwOdRXLx4FfwEUdtABsA8V4E/eoZymG7F7dVceaNEwD6rT6KdwPC7rV41cgL4w+GL3NnPpG8bT4qO41AKypW+qU2pYFZAibUzcSIM/rLn7OEjAOuxgA3qqb6oT6IWu4eOTUE6CD6I9rHSilfBO8ux4BVoQAWAGhrhYAAAAASUVORK5CYII=", 43, 15},
        ["CLONKER"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAMCAYAAAAgT+5sAAABYklEQVR4nNXVzUocQRQF4K8lYMa/MTAKBgIhuxAC7gQfQH0JwScR3KkLX0DiLnGbLJNNXBohCK7MJu78N+AiIkmwXFTJtMMMjNUDkgMNfW/Rt8+pOvdWEUKQiQEsYQoTaOBZbrGqeJL53SQ+4HVLvoHzKoRykSOkjm30p/gPjvCrlOuEwfQMYbQUD6e6d/FIyt3FozjAGvbbFS6StZ6L9vjehZAGztJ7wPskpN7m50OluBe2u8EnrOBbeaEIISxgHRfYEHf1NwqxD67xF7VEbA6vekCqKrawjM9EIScYf0xGFbGL1T7xuP53hCKEMI93uNTZWv/wVLTWLF4+BtsWfBWt9YVms09gDHtdFGjX7IfuT6FOU6mvIvkbfBSbfae8UGRciHUciydEHASn4v0xk947oaY5Xkc0hXYz8X6K4/dHu8I5QuAtNvGmJT+Iq5yCVZErhLi7i5gWrVnDix7xejBuASoAVAF0wMlOAAAAAElFTkSuQmCC", 50, 12},
        ["COLT LMG"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAOCAYAAABth09nAAAB30lEQVR4nL3Vz4uNYRTA8c+drgVj5NdGfmRlI9SwUiQiaZStbCVlI/8AZWNnZy2F1GzZaMZmhCFZiUKUhZlGzKCLmTvH4n0077z3uve+d8Z869R53vec857znPM+TyUilKSCZ9iMV3iLz/iEiaSP40nZwAWO4gTOdmJc7eID+9Gf9GOyoopclRX5Gj/Ss15cx7uc3Xc8Lvj+wkq8xECnSVUi4kqnxokBbE/6eEpmXswk37CjZGyYxQO8kRV/sYlNHT1Jr6JeiS5mawmYxDRW4VHS89RxSLZhwxjrZrQ64a5sNE6ndRV9LexnZB2En7iAUZzDEFZgNdZgebLbiQ84QjZa7ToynYINp+QmcAPbUEtJ78HWnM9uPM+tq1jW4huXMZVbf0nytYleaxohmjMTEUMRcSYi1kWEgrxIdjcjohoRpwr+/U18WsmmkvYNkh+tWTzEHQxi7B+7dxy7ZONwC1tkR3CeqaJTGz6WtG8kIp5GxPmI2NhB5b0R8T7t+rXCu8lcRw4udIfLSlmHkxHxOyJqEdFXeDeSK+TSUhfS075n87iNtdhn7pT5y/2cfnghU9INlVi8a2Sv7B8j+3/Wy+6DJaFsR1oxai7xKg4sYuy2LOaFOIN72IARjSfZf+UPY2o8Vu7ICHMAAAAASUVORK5CYII=", 50, 14},
        ["COLT SMG 635"] = {"iVBORw0KGgoAAAANSUhEUgAAAB8AAAAPCAYAAAAceBSiAAABaUlEQVR4nMXTz4uNURgH8M+9vQxNTE0WbGyU2YiNBaUUNf+AsrO0UBbKyk62JHt/BMqOsiILG5QyKQtDhpoppMFcX4tzyjXN3HfeO2q+dTrPeX6e5znf00tiDDzBLizgIz7VfQGf8RSLI+LPYFGSrut0kkEK9q9h35vkSkuO40lmG5zFT7xYdbse3uL3kG4a59Gv5xtYWhU3Vf1mcAjf8aPavqHBJK710n3uczjYMWYtfGjwFcHuIcMAX/Coyg+VDqdxqSVp8B47sGeE3/UG97GCc0OGVzi8TtBRZaS9dewrOKE85aQy9gEmFDL2sRPLKnEeJ3mZ5GaSy0mOtRBmrsbdTTKT5E7+Ymmj5G0wiwc4guctI6WMfl+VX+MX3iikmsBVbKv60Rjjq92qHb5Lsn1I/6zqpzaaq996u39xABeqfFF517HRdPQ/hWXM495mCqNz57eV73Nys4XHKU4h0vxWFf9v2NLifwBur2bP2wW9HAAAAABJRU5ErkJggg==", 31, 15},
        ["CRANE"] = {"iVBORw0KGgoAAAANSUhEUgAAABMAAAAPCAYAAAAGRPQsAAAAsklEQVR4nO3TPUoDURTF8d+EMWgjWrmEELBwA+7Byj24DfcgLsBFuJDUIWnSWKtoVI6FVwzDBDJgJf7h8L7uO+++4jRJdDjCGRZ4whvWGOEV790L37Q1NjgoPdZ6gjn2qq4ps318lLmav+C5xQNucFqHd7gos9W2LnpYSXKVZJREaZzkPsnlxt5OanHbeWGNJaYDumLj333MftNsMP9mf93sGIc48ZXD3emJxXV+OB8Sp09OyY4hBg1cSAAAAABJRU5ErkJggg==", 19, 15},
        ["CRICKET BAT"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAGCAYAAACB1M0KAAAAgElEQVR4nM3TvQkCURRE4e/Jooj4B1uA+RZiGTYi2IP12IlgBQbqgphdE42MdC/qiYdhBmZKREig4IBFhtmbHLGsEowqrP2mBNRYlYjYocENY1wwxQkznDFBixGuGD70A/Qx/272F/a9BJOUbXaklISPPKe16Z7nY7YZRfiDs98By3wc4fma3AQAAAAASUVORK5CYII=", 50, 6},
        ["CROWBAR"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAJCAYAAABwgn/fAAAAk0lEQVR4nNXSPwrBYRzH8dfPIjeQYuEORmUwkrJZbG5iMrqIAygZrMriAAwkkwM8Bj2Lkj+Dn+d1gs/72zcLIfTQwRYr7CQoCyFAGVMMccQcG4T8pr3l7H78SwyJ2pigmceqL13RfwyJamig8NNJn6tghsOzkJQs0Eo9pIg9Tv/+Oq8MUMI49ZARulin/Fp1VLGEGyOxKRfVq1bPAAAAAElFTkSuQmCC", 50, 9},
        ["CUTTER"] = {"iVBORw0KGgoAAAANSUhEUgAAACIAAAAPCAYAAACBdR0qAAABPUlEQVR4nLXUsUscQRQG8N9GLwQRiQmx8T8ICEkhhAMbm1gk/4C9ECNYirWdjb2kshUEQyBgmcY6ELFTgk0KhUMxR8ixvhQ3F84jbvZk94PHvjf73sw337yZLCLUgEV8xM+yBQ/qYIEMQ+2wLiKP0R6mYLQGEs9w/Y/xabzCE5zhC379/RsRVdtSRDT64omI2ImITtzGeUQs9/KyiPiMqZK77SQbK8i5wELyx3GImYL8Taxn0b02eRocKUmoCDmukt9IZIoQmO8R2cAjrFVA5D7Yr1ORMmr08KO/R26whVndc32JVrImXqRFcjwsmLTXI2/wqSSRdh235n36Po/y+Fb1g9bE1+Qf46hk3W7VaqwMxK8jIv+PGqcRMVm1Ip2B+ADv8PuO/BO8RauOJ34QH3SbfxVzeIrv2MM2LuEPYkKR10ZxY1YAAAAASUVORK5CYII=", 34, 15},
        ["DARKHEART"] = {"iVBORw0KGgoAAAANSUhEUgAAACkAAAAPCAYAAAB5lebdAAABjUlEQVR4nNXWT0uVQRQG8N9rN0ipILsLWykItjUoWxnUoo2r1rWoXR/BbW1dmKs+RDsXBdpCCkEIAi2EFoqJYGnRxj+V2nHxTt3b9b1q6Av2wGEOc+bMPHPmnJnJIkLJyHAD9zGAaYwlmcGBBLKSSZ5LRLqa2D/jpRrpT0WDyiZZxeohxwbeycmO4nXNElGmVONvPIiIpxExFwdjNCK6I+JPJFtxDUuYLzGSVXxNejduJ7mF8wX+3zFUwRU8R4c85E/wCBfxBadS/ybakvMazhbo67iMdvnR3W1YtF+ehzexk/qmMIGPiUsfvqXNrWI+i4gpXG+YbBmXsIXT/0iyFS2YRQ8qdfOuYBFX7cVk8vmAV3jz25BFxCbOFDiVhR356eyHn/JK70K0yO+tRiyndiu1gY06+1oTfR2/kj6L7YZ5V/C2CbFnGMRD9KIzrSuLiF68UMvJYTx2tJy8gPe4h5E6InfszUnyAtk3Jznh1f1f3ZNl4VhenEozj2PCDyw44W83xb+g8URq2iF+Qbv3DaP4pXIShgAAAABJRU5ErkJggg==", 41, 15},
        ["DBV12"] = {"iVBORw0KGgoAAAANSUhEUgAAAC0AAAAPCAYAAABwfkanAAAByUlEQVR4nLXWvWsUQRzG8c+dSXxBJCCKhYVGkCCmE0FsE5CUlv4dNtbWYiE2VmJnrWITsFGigoj4gpjCRoIagyQaA3l7LHaPbI7L5XK5+8LAb/aZ+e0zMz9mt5bELqjhPubxET+aNGhOWH1+spy73KTBS8yVcR1/cLhFPrUkI2V8Aoea9LlycoNzeLTNgvbKKgaxgUUMK8y3NL2AI30yshseY7aMx3AJ93BacUJreIKzA/hpq+kVDClWu4q3FW0YFyr9f/hVJhzBOvaV2ipe40CHppcr8Rd8K+Ml/FacwF8sSvI8BZ+S3EkymmQ8yZkkQ0lU2miStXL8WpJrSY6V2vckr7LJSpL9TfN70ho7DQ/xDJ/L1oo5mzU2g2kcL3fhARZwsdQHMYp3He50x9Qrpo/ixQ7jJzFQxrfxVXGLzOMGpprGj/XG5lbquIUJ3FXUZDsmK/GbJm1dsYBqjst7NdiSXdbT9SSzSZaSHNxmzHSlrmf6UdPdTKonOd9Gv5mtnOq16XoXh7OBD2305roe7+IdbenG9E5MK+7TBld7/YJ+mF7B00p/QvGL0DP6YZrizm4wgCu9TF7L7v7yOmVQ8QmfUizgfS+T/wfEDAK1oC5O4QAAAABJRU5ErkJggg==", 45, 15},
        ["DEAGLE 44"] = {"iVBORw0KGgoAAAANSUhEUgAAABoAAAAPCAYAAAD6Ud/mAAABKklEQVR4nK3TQSuEURTG8d+MkSk2FnbCwkY2FjbKZsoH8AVk5wso38BGslQie3vZscXSAslCE2KkFJMyg2sxr0zvzGuGeZ+6dTr3Of3vufeeTAhBTBs4xSX6cRHlJ1CM4lccoqG4icaxmoslV7DQRjHco4oPvKMniqvI4xMllNGTiToaQA63yLQJakc3uEY+q9ZBEespQ2AQU+jK4gz7mE0ZUq/tHApqj/+AOXQnmHexh3lMYhE7eGsBKaMqhFC/lkNzHYcQpiPPUAhhM1bXcmVj9KuEU91hOIpLOG/RRYPi37uQ4KvgBTNqs3X0V9D394YxnGj+RiN+hvVfqr+6pQTIA546gcRBMwmeAzynBRpVG65m6usUUg/K/+LZShN0jjU8xvYr6E0D9AXA3pDZrXRslAAAAABJRU5ErkJggg==", 26, 15},
        ["DEAGLE 50"] = {"iVBORw0KGgoAAAANSUhEUgAAABoAAAAPCAYAAAD6Ud/mAAABF0lEQVR4nL2UoUsEQRSHvz0viVkspgP/hQsiYrtoMdusYhU0CVaD/ZJgt5oEg0EwKKKCQcQoiJ7owvoZbg6W4eZ0dfUHj9mZeew37zePyVRKyoAucAHcAfPAWNgrgLPwnQPHwBMwwXAVIa8NbKGWY9dqeh+x96Hmg0kWKmoBb8B94nS/VgNYA66B/b+CALdN4Ia+33M/+EGP/j2M0guwjbqsrqgb6nPC70LdUzvqgfqqLqqN6I6TES+sJ0BH6mzImVR3vgsYRCMq8zFRfg5Ml6yo3DTNaN5J5F2GcQkYBw6rgsrltUPvxzqpatNX1q3SfxlinVY+/RANQBmwkMg5rxM0A0z9ByjuvrJ6dYKugE3gYQikVQfoE6lqjTYJGXlDAAAAAElFTkSuQmCC", 26, 15},
        ["DRAGUNOV SVDS"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAHCAYAAABKiB6vAAABW0lEQVR4nK3SvWqUQRjF8V/CKjFaRAW1iKIIqdNob6HgZ2kRAqkFL8BOvIRgo5BLSBkheAFG0CKQJgixUlyE+LVZEjVwLOYtJsuuG3T/MLzvA+eZOc/MGUuih0mcq+rP2KnqG7jY23QIzuMIdrE3RNvBu6ruYq2P7joWMN/Cc3zBN/zGJTysxEt4gwllyMfN/yjYw3dM4StOYRunsdn4gTNYxVZP/3Szx82xJDt40mxIubUTlbiLfdzHtX80vIo2xhuD20P0H/DWwUEo6aiZwDH8kKSdRJ81meRekqUka0kWk9xO8iyF/SRPk1xt9BeSHE0ym2QrB5kfcMbIVqtnwrO4izvKc7/EIjYqzZXqlh/huBKJNn5hHXN4XfXMDHmB/6aFk1hWctnBCh7g04CeW813RYldt49mHe+VTG/i1cgcD6Cl3N4GPg4wVTOu5LuDF3/R/cTlURg8LH8A7IDlsCBMiSEAAAAASUVORK5CYII=", 50, 7},
        ["DRAGUNOV SVU"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAMCAYAAAAgT+5sAAABs0lEQVR4nL3Uv2tUQRAH8M8zx/kjxpAiKIqIFmKhWKiFBsTGRrAQW0GwFKwUsRZtbAX/Au0kRpuAIFHQLoU/wVYiIkbRBA1yp67FTvC4vNzhyyNfGHZ35s3M+87ObJFSUhG7cB6/4vwYs9iJgyFb8QAv8QlDaCDhbtXEZShWQGQvXlX0/YOBqonL0FiB7xyuxL6FKYzgMg7jXuiP4xKeyze0Tr6RWlGklEZxA4M1xNuCMXzGU/zGEbzGfB/fAczIBVqPZ7gftqM4IRd+CBfxPWxNtIuU0jhO1UCC3DJretjmMIw2fsZ+Qb6hQXnOvsT32+Q5msFJnOmINS8XaZHIzQYO1USC5Uks2kZivzYENsTawke8i/N77A5ZkAltD9umrtgbi1Rt2n9Y2ornMCG31yR24BuuyRW/hdH4oSrYr3ymm5guM0zK/bgczuICDnTpG/ga8kEmAo8i2Wa5pariRU9rWoqxlJIe0kwp7Snxuxr24ZRSO3R3+sSqTbp7+on8WvRCC2/lyndiX6zH/GuBh33rXBO6W+v6f/hOya/Om5Dp0M/itjwPq0akc9jHcXq1EteNv5A2BF7pvrjaAAAAAElFTkSuQmCC", 50, 12},
        ["EXECUTIONER"] = {"iVBORw0KGgoAAAANSUhEUgAAAB4AAAAPCAYAAADzun+cAAABbElEQVR4nLXVsWsUURDH8c+eB4KI4RQEEbEIAUkXK/8BsQj2CqnS2VgIVoH06ZLKImkCgRDExk4Qwb9AYqWRkCIQhBg0UULQSybFe8J67C6Xu/iDZXnzhvm+eTszW0SEBt3DW6xht8Gvg23sYB13sZntBfYwhtt4jPdFDfghRvAMEzjAlaYTnlE/WjUbH/AoQ+FiQ5BfA4C/9YLHsYyPmCzZLzQE+T4AeKVdWkxhHtcqHI9wuSbIHm5hBm/6BG+UwfdroPBbKp4qeCe/X+JLn2B/r/oSHjT4Xc3Q1zjMsK50zcdSBe/3CwURISJmo15bEfEiItay7/WIWIyIVl4P9LRxA88rzrQu9eVXPMFstnfxDidnyrBHRUQs4GnF3qRULNPSt+tIQ+AnlvBnWPBGDljWLm6Wgt+RWuqzlPHQaldASRVazujTecDKqptcq+cN6lUREV3/TqYtjKLx7zGsWngl9eKJNCTm/jcUTgGHOrFGuXB0YgAAAABJRU5ErkJggg==", 30, 15},
        ["FAL 50.00"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAKCAYAAAD2Fg1xAAABl0lEQVR4nLXVzYtIYRQG8N8do0byMT4WigUyk7/AnsiCsrBjJx8liQX5IxRNs7BhZzPK0grJxlIaJJJIZkFjmsTMMI/Ffadu0wx3bjNPnc499z3Pueec933PrZLogI04i2M4jJ6WvC2YwDb0tuTM4Afu4yReLOiVZCmyJkl/kpdJZtMNi/FmktxL8jHJSJJPxZ5u+NxdLLcqyXH8REqnNxQ9J/2NdzuxtWUnu2Ac6zDZ0P2N9XeYxeYiMIXpKsloITxWb/s4vhe5iiG8L6QzOI83GOyQ6Dn0qY/WYvilbuwcpvC5PI8UvQrrGz6pkgwV40JjYRA3sV19PifUha3GDgzjNz7gCo4U3hhG8RWHsKkRc3yevazoVXf7YLH7cA1HcRFPW8Q4UfQkTuGhOuE9eNLw6zRV2qIHX7AbB/BMvZX7/L+ICtfV0wtOF/5a9e6NLX+6/0CS/WWSPEiyq+X0qpLcbkyT4QV8BuZNpW8tY3eSXrzFLVxSX7RW9eMG/mAvLq9Ek5eCKt1+iG0wgEd4hdd4jjsr9bG/36imFGTzFhEAAAAASUVORK5CYII=", 50, 10},
        ["FAL 50.63 PARA"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAKCAYAAAD2Fg1xAAABl0lEQVR4nLXVzYtIYRQG8N8do0byMT4WigUyk7/AnsiCsrBjJx8liQX5IxRNs7BhZzPK0grJxlIaJJJIZkFjmsTMMI/Ffadu0wx3bjNPnc499z3Pueec933PrZLogI04i2M4jJ6WvC2YwDb0tuTM4Afu4yReLOiVZCmyJkl/kpdJZtMNi/FmktxL8jHJSJJPxZ5u+NxdLLcqyXH8REqnNxQ9J/2NdzuxtWUnu2Ac6zDZ0P2N9XeYxeYiMIXpKsloITxWb/s4vhe5iiG8L6QzOI83GOyQ6Dn0qY/WYvilbuwcpvC5PI8UvQrrGz6pkgwV40JjYRA3sV19PifUha3GDgzjNz7gCo4U3hhG8RWHsKkRc3yevazoVXf7YLH7cA1HcRFPW8Q4UfQkTuGhOuE9eNLw6zRV2qIHX7AbB/BMvZX7/L+ICtfV0wtOF/5a9e6NLX+6/0CS/WWSPEiyq+X0qpLcbkyT4QV8BuZNpW8tY3eSXrzFLVxSX7RW9eMG/mAvLq9Ek5eCKt1+iG0wgEd4hdd4jjsr9bG/36imFGTzFhEAAAAASUVORK5CYII=", 50, 10},
        ["FAL PARA SHORTY"] = {"iVBORw0KGgoAAAANSUhEUgAAAB8AAAAPCAYAAAAceBSiAAABlUlEQVR4nL2Uv0tcURCFv923CYiIBgyIGgVNlUZsRAL+gIBlwCak0t6/ICmFFBYpRAKKjXUgdjZpAiGghZUiSURS6CI2QQQVNRK/FO8K6+Pu010wBy7cO/PmnJn7Zi4qaqNaVt+F832sJ+qh2nttKwHvgX6gE3gFtAIF6sNT4BL4DZxW2LuBNuARMA+MA6cF1TqF8nBEWkBzxLcGjAEn9yWeB4ELICmRZtnyH8UXgTMgQZ2zNvzNsbepTepztUNdV7fUHnVUfV3ZhEXgHNjPyfSyYn8A7Fb5rggsAMfAauB8QNpsZeA7sHcjImTxWJ1Sp6vcxB/1Y6hoJoxMDG+9OV47wf7MyPhlDYm6XEG2pw6pb9QNdVPtVr9EhK/U9gzf1+AbvE28qC5lyF6oXab/rE9dUQ/UXxHxckRgSd1Xh/PEC+p8hmw2EpCYXnsMP2MCeet68yFD9ENtyAn8FhHfrlW8FPpuFngITAAJMBlmsRpivtqf5Ew27erLO2T9OVL5Tq2VF6zvdf0EdAAb4TwAjJDO+J3xD3mTbSbom+uYAAAAAElFTkSuQmCC", 31, 15},
        ["FAMAS"] = {"iVBORw0KGgoAAAANSUhEUgAAACgAAAAPCAYAAACWV43jAAAB0klEQVR4nMXUz4tOYRQH8M878zavQmnKgkxkIaWXYmtBkYj/wg41ZWXFamLF3p6lhcKGWCgbk/ErFppGTWj8GF6GGWOOxfOMruuaH/ctvnW7557vc89znnO+52lEhJo4jgvoxXd8xjSm8A1fsz2NL5jBJ/zAR8yhg0ncwIuqTRpdJHgLezGBlzVjNNCWklyP2T9WRETd524kbO8ihogYynEGqvgmLuNAIecrGEJgJfoqTj6FFdneILV3IQyihbc4hAd4I8mgldf0VJY4Ip5jyyIb/AscxnVJmz0YQG8jImYlof9PRH7uSd1Zi80Yb6qf3AQu4iHW4BQ21ozVwSZ8KBPNmgEfYz9eF3zrcDrb5/Aee3BfqsoxnJRaWMZYVXIgqjEaEYMRsS8iLpW4TkS0S9PWHxHvMj8XETvyv/N8T0QcrDPlxQqO46l0N53FzezfXTrTMB6VfEfRn+1rGPH79O8sxFsWmlLpn+GOJNSqFszjiXRBl3EkvwPnsz1T4PtK30vHEsp8ptDekQq+ERGTmR+r4NsRsbpOeyOi+nIsn2ERfpUkDzhR4rZKkukss26/UHeKi+hgm6SzFnZlfwujeNVN8KUmOIbbuLrAmuFuEvkbfgLCvN9GPBQiawAAAABJRU5ErkJggg==", 40, 15},
        ["FIRE AXE"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAOCAYAAABth09nAAABPklEQVR4nNXVSyuEYRQH8N+45NoIUS4LKcpWSlZKlJ2SknwSGx/AF7BgY6t8CiWKlS8gC0Wm3GbcjcX7TPOaZmpcwvuv03nP/32e0/k/t5PK5/MSiB6sYxGPUPOn5XwPc1grBEkWAktIkXwhXeiEuj8u5LMYxDTGY9wIdv+7kDTmsYxJPKGlZMysIGQLbzgPP7owhL4QZ0MCyCGDS1wEnwn8VfA53OAOz2FutoqiG9AfbAxTwRpjY+rLzOslOlozoufst3CD1zJ8+xfz3REJWcVGIM+xgyOc4hbNqEWr6GJ1BB//TqMtWKtodSsh/cWCK+GKSMhmKPQW23j5geT1IkGFVW7y8YhUiwfcx+JHHCgee7iGVMI6+wT2SrgTDCetj6yU4QawnKQdGcWh0MlLsJ+kHVnAMc4U2wHRne5+BzbzQJPooZf9AAAAAElFTkSuQmCC", 50, 14},
        ["FIVE SEVEN"] = {"iVBORw0KGgoAAAANSUhEUgAAABYAAAAPCAYAAADgbT9oAAABD0lEQVR4nLXSTytEYRTH8c+9Rv6WkIUs2WrKfmoWysY7sPEilC07O2t/XoKNNZI3ICk7sbJSSgYzqGMxd2oa18hcfnU6T52n73PO7zlJRMAepnGIc8W0g/UkIqo4LQjrVCPF0h9Doe+/wHeppre96ANPeMV7lmvYwnwSEWWsYBVTOYBjzGEbdYxjDRXcYggDeMsiQU1EtGI3vqoREaMRsRkRadvdjbZzbiTZus3gGoMd3dZRRT/GcI9ZjGC/m0+lLC/nQOEiA7/gIfP1ElfdoNBq/SDHhoiIyk8jd7MizUac6HizhknND/m1UizkQOGsV2gLvPhN7aRXaAtc/qZ2VARcwo2mn89ZPGpuwXAR8Cccv8rWqd2QmgAAAABJRU5ErkJggg==", 22, 15},
        ["FRAG"] = {"iVBORw0KGgoAAAANSUhEUgAAAAsAAAAPCAYAAAAyPTUwAAAA0klEQVR4nI2SMWoCURRFz4zaSSC9lRY2NlaKRfrgErIBi4CltQtwF1Y2gtO4AAMpsgaFWAhCmlRhCJ4UmcGvqOOBV93z+ZfHQyWYZ//5VdfqOMxDsaS+eco8lGOOvAB1bpDLVaALLIAkyPcndvbFUH1Um+okqJGoPTXKO9cyeaYevMyHWo/UEVADXm/1Bd5j4AdoF4gAnRiIsikiyuX0DjmNgQqwuUNel4Fd9qCIFeqD2le3V9ammqqt8DZ66vcF8aAOzg8JtaFO1U/1S12qT3n+BxKfG6GUHtoVAAAAAElFTkSuQmCC", 11, 15},
        ["FRYING PAN"] = {"iVBORw0KGgoAAAANSUhEUgAAAB8AAAAPCAYAAAAceBSiAAAA7UlEQVR4nNWVPUpDQRRGD75BELFRxMLC0kpIoWtQxM4NBJIqNmndQMgObIONuAGxcgPWNoLiT8wSYqHx2OSBBJQ38yaFH9xmmMNpLt9FJePsqGfqnfqujtQbtaUuzf7PJS3Uvvrl73lR9+Yhv/xD+jNjdTenvFNRXOZBXckhD+owUq56orJAvRwAmwlcEyAAG8ByBFgAW8Ai0EoQAzSA4wCcAlfABbBaAXwC9oF7oJ0oD8B6ALrTh7UIcBs4BCaJ8g/gte7CHSUsm+ptjoW7Bt4SuAFQW/4J9CKZR+Ac+P8NV7Xbn51Tt5cTddW+AYZBqQeVEH41AAAAAElFTkSuQmCC", 31, 15},
        ["G11K2"] = {"iVBORw0KGgoAAAANSUhEUgAAACgAAAAPCAYAAACWV43jAAABKElEQVR4nM3Vuy5FQRTG8d85FCQuiUKiJrQSiYhGQsEDUCupFN5BR6NU8BAKHVGIJ0CiIEFQ6cgRYin2JI77YY7LP5nM3mvN+vY3O3MREerQJiJi6IN8OSKWvqNdVh86MMq7ei0YSOO+RCkiRtBZw9j+9KHzqlg3JtGEZpziPuWaUtvAMdpwiS3sfsXgDoZrLfgGy55P6jPWcZGeb37DYA4L9VqDP8XUfzfYW0bDX7v4gNtGxU78KU5wmFF/VoqIdk/nVzPmEFjEQ4p3oTXF26oErjGNmfS+jTvsoYIjrGQYVI9bZDyeGI+IwapcT65+Y9bsCmZTX8GV4g8Opv7ivaJaKUVETn0f9hVLZBNjuYZeknvMzFdpbGdqvUmuwTWsKjbPQb6d1zwC+CMsNCrWQC8AAAAASUVORK5CYII=", 40, 15},
        ["G3"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAALCAYAAAA9St7UAAABaUlEQVR4nL3UPUscURTG8d/qiAoLmyZaWKRSG0FIkSIhiGiTQpJPkG9h48ewFyVNCosUgVRJkxQJqURLsRDFqEV8Ib5tomNx74CZ3ZWZEf3DcJkz55z7PJx7p5amqZI8wnP8wO+yxRX5hDdodkpICjYawSwaqOMVPuLX3fS1cInjXOwfhjEtGGpLgg9RXCcaeIruXHympMgUtZI1GReYxF4uXkcP1NI0XcH4PQuBK3RVrF3FEXZz8QY2UU+0umzHMdZvvI+ht6CIWSygD+cFazL6Y90W/t6WmGC/TbwpXObP+IKfwlnNeIn3GBJM7uOPMOYzPMHjmFvDQUkDGYXrEuH8pcL4MuFfcXJL3be4yRAWsSyYHcU2lvA65g6Ukl6RBPOY034ynRiLD+wI03gRexzmeg3eWWUBEmESZXkb1ybeab2EN+/dgxip+heZiuuGVhP8b+TBjlYVnmECpx2+7wom1/C94h6luAbtLU9JNGp1kwAAAABJRU5ErkJggg==", 50, 11},
        ["G36"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAOCAYAAABth09nAAAB6ElEQVR4nL3VO2hUQRTG8d+uMQkYNIgKxvgqFCwEEQJqaxobLS0UBAsbG4tYCVqqtZ1YJIgsItgKMa1E8FWpKX2DEVFDXE18HIuZ6HVd4+bG5A/DzO7MmTnnO2fmViJCSbbhcUnbXbhd9uBmtJW024caJlHP+1Ql565hKb7jKzpyX0Ul2x/FFQyVdbyRuQbSg8M4jhW5FXmHviZ2n/Epj2t4gDHsx0t0Flod45IQy/AC9zAym2OViLguKfYs95P4gqm8aR/WYTO2YElLIc+PD5IoXVIgb3BBymg9r1mJ7jz+1oadWCuVQDOWY1BS9Rz6/7/ff1DM9qrcv5WErhfWdOMjptvwSlK8GT3YLmWhA70lHbsv3Z2Zl6UT7ZjIvzfgtVQFf+OSFExTKhExgr0YwFNJgbpUo8/xSFKikdM4IZXhmFTHW7GnYd1ZnCoEsTBExM1ITETEwYioRIQW2uVsNxgR/fm/MxExFb/T1eJ+82pV6amEI7jaonK7cSiPh/Ae6zEqvURFVs9b7VaIiNGIeDiH6KsRcSerPdxkfk1DRg4sVkZu4OQcYu/160U532R+XLpbMzTemYWhpALtEXFslvlaISN3FysjZZjGxVnmhwvjHdhU8pyWKRvIv7glfTsGsBFPFuicn/wATdwxlPjWUp4AAAAASUVORK5CYII=", 50, 14},
        ["G36C"] = {"iVBORw0KGgoAAAANSUhEUgAAACYAAAAPCAYAAACInr1QAAAB8ElEQVR4nLXVzauNURQG8N/hupebMEAikVs+y2c3mUiEMrxlJB8TGUkmpvwFBqaUkoGJUiZXKUoZSEImlIHkI5Krq3ze+xi8+/DinJxzylOrd++91l57rWetvd9GEj1iO5bjLCa62DcDz7AJz9sZ9fUY1C6MIliFj5hS/N3FN/SrAp7EdHzCIObhMw7jVNH/hUYPjA3iJE600H3Dlj/WxtAo40l8wRtcwTjO1WwfFp1Gkh1lczv0YxaWYBh7MbvTLAq+4xVm4j2uYzPWlUAHit0tbG0GNlYOOqCieExVovHi8AiWFYdrVKX7n3iMeZLcT4W+JFrIodr4aP4/didZ30hyA9uwAk9K1ItUt2YOhlTNG1UpphVZrSpHJ7isavQXtbX5eFv8DmChqndHMCHJaIn0RpILSY4n2ZNkbhsGmzJUy/J8yXRnCwau/sNPUxpJ1jbnfZhay2AfXnbIwrHyfYhLuIOluI2NheWmvhPkN9skN5NMJtnQYWaSrEzytTCyP8nsJIuS9CdZnORujbGLXfj9KZLcKY662Xi1HPo8ybQW+gu1wB71EtgUnMbBDummeuEfqJ6WM6pH9U/cq41XqS5Rd+glm/xq/gVtdMP5HSO9MNYrnuJ1G909vKvNd3XrvNef+L8wgWv4gIuqm9oVfgDr8cpHGQRouwAAAABJRU5ErkJggg==", 38, 15},
        ["G36K"] = {"iVBORw0KGgoAAAANSUhEUgAAAC0AAAAPCAYAAABwfkanAAACKklEQVR4nK3Wz4vVVRgG8M91ZmzMNH9gmrkJEV0EKigIigi1qV1Qbt1IMCBZC9Gl4EZo179Q6dIIcSGKmxJhNlYui8ZEaPzBoNaUU93HxTnXuc6MM3Pvdx544Xzf8z7nvOc57znn20qiAd7BrT65+/FDP8RWg6RP4xOM4/9qr+AnfIchPMVAtTZalRscxDA+x5NeJh7sI9lNOIITeBVvzuifwLraXtXlDyaxEr/hGL7FdXz9krna+FJZ/HO0kpycJ8F2JazGZuxQFBqYh/MyPK1Jw5+4h7eVBU7UMf/BGzVmCr/iM2WRqzs5tZKM18B9uF0Hn8JfNehdfIQxrMGpPhJuggksV0rvLqZaSUaxBxvwYA7SoUr6pcbcaJDAPUXlDjbhj9peruzmWFf/EH7Hge5BBvGotnfiKl7HbmxVDtdwl49ppYdxHGsXkexjZZu/wn+LiO9gKz6d5U1yKQV3klxJMpJke5JWEgvYxcq9lOR4ko1JzmQ2ji5irLlsKMn6mf5B0zfIfXys1NBisAfv1/Y5/I0VVckL+LAr9nYP6nbjXzyc5U1yraqxqwcFWkm+r7wf6/eq2rcxybYZSo/0qfScNqjcmz/jZg8KHFZeNPhCuYM7D8S4cqAnlXuc6fOwNEjyQZItPa52b5LRJGO17uaK6exEktxaSqWbkJctUFJnu5JuJ3lrqZJe1mCT2uYvqcszvt9rMNcLaPLDtBBeUx6i8/jGi49GIzwDdb6ek0arAxsAAAAASUVORK5CYII=", 45, 15},
        ["GB-22"] = {"iVBORw0KGgoAAAANSUhEUgAAABwAAAAPCAYAAAD3T6+hAAABUUlEQVR4nK3UPUtcQRQG4GeXBSVIAgYLSZUmBCRFCoOCrV0Ka+3FIhD8ESlEEJI0FnaGKFgEf4DZwmBno5WEVGoRIaRLFNSTYmfx5jp3ZeW+cOB8zbxnzpmZRkQs46EOGniNUb1xhOOkP8J4IfYXWzhP9jq+dYONiIg7Ns/hLT4kfRJ7PXJP8LNrtO5B1i/+4HeRcAVDyR7GTPK38b20uIU5TGMq+R5nSHbwI+mfsNsNNDIdfY6v8nNcwBu8T0SDWExFX6ScY2wgP6qIyMlG5PExIpZKuZsVe2Slma2CsQr/FQ5KvgcVuVnkLs0EXmT8v3CGEcwn3xM802nteWbNbWSO/aWine/6aV2VlC/NS+zrfABFXOGpm8d+bxRn2MJqhgy26yArE87iVUXeWh1k+G+G7YrZnUZEs475lZ/FSEVNh7iu64BFws+4zOQM1EUG/wAKREZ/zXo9+wAAAABJRU5ErkJggg==", 28, 15},
        ["GLOCK 17"] = {"iVBORw0KGgoAAAANSUhEUgAAABQAAAAPCAYAAADkmO9VAAAA7UlEQVR4nK3Tr0pEQRgF8N9eZQ2aFN/AYLBYrYLNpPgCFl9Bk48gYtksgj6ACGajIAgWETGLLAYNpmPZCxedvbB/DnwwzDdzvnMOM50kGzjDlcmwg3NJTjJFVOhMqKyJfoVL3E2JcKaTBLp4wsqQg0d4wTK2cK3srC9JXReFSD6TnCZZa5w7aKz/VdVgXy1MfMAhtlENFHbbPNeWl/A+uNTEMb4w29h7xM1QxoHU3SGvYK7NXpvlzcKsN/y02SuhwgL2Cr3eqGQ14T4WC73XcQgluS9k95FkftT86gzXC3Oe8T2OwPrr/cXtOGTwC3lWNDiscuQ8AAAAAElFTkSuQmCC", 20, 15},
        ["GLOCK 18"] = {"iVBORw0KGgoAAAANSUhEUgAAABQAAAAPCAYAAADkmO9VAAAA6UlEQVR4nK3RPUpDURQE4C/P30orEawtbMwCLMXWVreQFdiJra2QKr2CnV1wAS5AEURsrEQEXYCIY6EPQrx5kJ+BA5d7DjNn5rSS7KCLS9OhjWtJupkhqim3GsZHhXPczIiwaiWBJdxjc8TgCR6wjl300SrMvUlS10UhkvckZ0naA3Odgfe/Gsxwq6B4h2PsYw4bWGjyXFtewyuGj3SETywPifRHMv6teliw+51kvslek+W9gtYjvprslVBhFQeFXm9cspqwg5VC73kSQkluC/m9JFkcN786w+2CzpPf646NCqeF/6tJyOAHPB00BQ9CloEAAAAASUVORK5CYII=", 20, 15},
        ["GROZA-1"] = {"iVBORw0KGgoAAAANSUhEUgAAAB8AAAAPCAYAAAAceBSiAAABv0lEQVR4nJ2UvWsVQRTFf6tPIipRMCGIiChBUDD4AbGxMURJJ9iJoIUfhZUK/gk2NiIoltomhRBsA9ZWIfiwsFAUSWHziIkGYl5+FnvXjI/dl3UvXGbm3LPnMDt3JlNpGFPAI2ABWASWgaUYl4EVYAIYAB6WCbSaOofhSWAc6FZwMmCwSqAFzADfgH3AnprGg8ApYDvwChgt4awCG8C5Et02cLkFXAR+A8M1jXvjILCjorYXWAM+AG8CGyPf9IlM7ZDvuklsANu24KySn3svz1YIVEXRjVmCvQO+kjfVGvALeJDU2+Q7/QzsJ2/IZ8Au4DtwHXgNvERdV3+qU+pZdVQdUXerqCv+G1cCT7Od1J+ok4GfVs/HfGfUr8X6AOqceqtEsMgz6vtE/EUJZz5qs+oR9Wjk4YRzKDj3CqzKsDfvJ+YddTipDandqN3tozEUnDsFtlWzFDEd5wt5cz5NahNsNtNcH41O9FCnAOqaLwKPk/VV4EbMJ2P8Anzso9Elv26fCiCz/vM6AMwDx2O9Dtwm/yM3Q/xSXTGg9pkXOab+SM6/qx77T42/2eSjC+pSmD9vatzUvLi/b918CxrlHxyykmaYSfikAAAAAElFTkSuQmCC", 31, 15},
        ["GROZA-4"] = {"iVBORw0KGgoAAAANSUhEUgAAACkAAAAPCAYAAAB5lebdAAAByElEQVR4nL3WPWtUQRQG4GfjwqoorhIIGkgIqKVVQNBGwcLKStDGSvwJorWdjT8gNhb+ArEQ3E78KCWgERvFgEGLxM2uRqNyLGaWjZf98u7iC8Odlzkz8875mDuViDAGjuMemniHTXxBG638beJi5tfLbFIdR2EWdgKX8XCA3W78KrtJFTek00P9H+YewUl8x3mc62PXxFGs41EZkZWIaGMVx7CrzCJ4itN9xlYkL77K/VnslxzUlsQv4zC+YgvT+IFv2K5ExEfMYKqkwMgLbw+wqWFPyfVVpXwpK5Akcm9ug/AA85jLtjXdQnuDs/iQ+zXJ+y3Zk53yfok1KQQbutW5gEt5YgdLuC3l25YUliVc22FzBzfxU8rZadzPY/NS/r/N8wcjItYjYjUi6hGhRzsVEc/jb9zqYXdlx/iLiFiMiLk8thAR+/qsP7RNZY9c0K3wIp7h7tDTpjuzg6tS6Fo4qHt3lkI1ixyGzQLvdQt0rqA1vJZydSIYtWA2CvxQgdexmPsNExTI6CI/F/hMgZ/R/Xs1xhHUC6OK/FTgswW+IuXteyncE0VlxAdGRQr5gczbUoh/T1pQL4z6wAg8kaq1gcf+k0D4A0358UBFsaTkAAAAAElFTkSuQmCC", 41, 15},
        ["HATTORI"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAECAYAAADMHGwBAAAAnUlEQVR4nLXOS2pCURAE0HMlfmIUNCCuKzvI0py5hywkOHYBOvEXBdtJDx5BHhfFgqYKquiqEhEq0cG1NvwgCj4xTW7qNv4pEfGNeUVJD6sW/w1jdDHK/Af6GOIdg9T99HqZ7eaoScWOCzbYYo0FliUijlnwapxwzDvhgL8Gb/M2d7ipd/eel4j4wqxiyAC/Lf4lS87Y/xt5qPj/FG6GtjGY12SQPQAAAABJRU5ErkJggg==", 50, 4},
        ["HAVOC BLADE"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAKCAYAAAD2Fg1xAAABpElEQVR4nLXVu2tVQRDH8c/1QRQNKFgZRLGwVhHSCtZqZWejpYWNNqKi/gMWAQsF0UJtg4gSotiLL0QjCIJEBAmRGImPGEJ+FmcvHJJcb3Jz84Xl7JwzO7OzZ2a2kcQqsBGDeIBr2INZ/MZfTOPPf9ZvRh/24zG+tXPYKIGsxSHs6mDTn/AEzRPZh6s4WOQf6MWaRdbO4JcqyKliYxK7sRVzZTzCdQwVeSFJ+pOMZGWMJrmf5FWSuRXaavI+yUCx17Q5muRikr4k6kOSmSRDXXLeTZ4mOdni22ySh0mOJelJopEkOI47HaRVO8ZxoSafxzCeF3kvjuJKTecStrewVy/oRnlO4EwzkAGcXtmeW/K9Nt+iKvTpIveoGsPkPJ2GhWTe+zHcxS28k+RUkp9dSIWxVGm6FKaSTJQUWQ4zSQaTHEmyPrUaaXatHTihannt6MW6mjyCm/iCTbiMs0uwsxze4LbqD4wvptAMpJtsK85e4BwOqO6Pj2X+ARtUh/dMVSdzeIt+fMYNVTu+p0qd1+2crkYgvWWzh/GyQxs78VV1zyyJfxkRnYFvaWCLAAAAAElFTkSuQmCC", 50, 10},
        ["HECATE II"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAANCAYAAADrEz3JAAABu0lEQVR4nL3VT4jNURQH8M+b+cmfMv6FopAFGlHDStnJRoqNxE4WktlY21gpG0UWw1JNWSglFNlaqikUg1HqUSQxkaF5x+L+1OvH75n7Zp5v3X731z3nfs+953vObUSEHmIHxtDqJQn0deGzNMP2I5Z3wZGNItO+gdX4ip9YjPU4jFt4hAEMYis24R4ezFG89YFlSmsDXmdynMRIpk82cjPyRpJKYAorcAH3cRyHpIwNYg3WYQLLSv/dpX0fTktZnA36JQVoRMR57JS0P4X5kmz6S+NpzMMlXGvb5CYOdiBpYm2H9XFMlpzNzAOQLuo9LuJIgSHsmYHjASxo+x/6h33dIUKqtXG8lS7qywz4q/iOH1KdNnKktRLD2JZJ2JJa8CS24BzeSQ3gU+ZedbhdYGEHg5cYLccL7MOdcm1U6khnsbHG/xXOYAm+YRGu6y4DnRERz+NPXI2IXRGhMjaX69MRMRwR2yPiSkS0Kv6tiJiIiGN/2aMno8CqtnM1cQp3pYKv4nct3cDlcn5C0ukHPMFjPJWk9N9QYL9UfAN4JrXLOuwtv9UH7ujch5aHAg8z7Mekt+BzT6KZBX4BjRT2nNo+BfYAAAAASUVORK5CYII=", 50, 13},
        ["HENRY 45-70"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAICAYAAAC73qx6AAABIklEQVR4nMXUu0qdURQE4O83okjUQkGxsRESxCBa+AaCRRB7S0GLFD5GUlsKtj6CD6GgiOaiiUWEBEmiEgSNeMlY/Kew8ZzjhePALtZe+zIze9hFEo/ENNrv6J3jEv34jmM8+kJ0YR7vcQHFA4W0oA8TWHwCYsHfe+55iVO8wF6RpBqREyzgB5owinG8U7r8VKgl5Ha/A81ow68Kj9YiyRrGqhxyhlUMo/vW/Dmu8AFHeItJ/McUDuog/weH+FdjbW0kWcr9sJFkNslQkrkkr5NIMpBkN8lypW7oaMZWnZp/YwYrylwO4CdG0IleDCpfpOGoJuQa+8oMHipjs443yp/oG742gGNdKJJ04yM2sY1PlfqzMrs9eIUvStd3PJPr1XADdZTrpjR8aVoAAAAASUVORK5CYII=", 50, 8},
        ["HK21"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAALCAYAAAA9St7UAAABhElEQVR4nLXUPWsVQRTG8d/K6uVKhFwriyRoLGxUBCt7sZKAoDYW+j1srMTORhubfAkLUUidBAWJEhGMovhSeDV4IyYQcsdiprhZdpPJav4wzO4+z5xzZs8wRQhBC05hDC+x1SbAHrmOcTxqMhR72Mgl3EAXPVzEM3zDRsU7joBfNXF6uQlHmMQXXG0yFCGEWZzZJdBRnMAnTLUoJJff6OBgjbaMO5VvQ/xBWeIxbmUmGmT63qOPY5jAgcx1Y2leQzHyviF2/lrFP8RPHCqxkJlkDd+xmgKvY7rB20vaZiroLmbxDveStoQHSR9l3fajejx5PuxUXBFCmMZKg76C+5jDmxp9gCNJ7+ArXmMG50d8h1OB+0Yptr6JF3jYoF0QN7GJKzid/JO4XPEO/63M3SnFv/UEP8Sj0xfPY19sfxM307wktn8LZ/F8n2rdmRBCm9ENIayGyO0afTFsp9MyT/bIvU2qTOFjen6a4e+2zJNN2XLdW5zDSXyu0QeYxyv1l8R/5y914O4uU5hBIgAAAABJRU5ErkJggg==", 50, 11},
        ["HK416"] = {"iVBORw0KGgoAAAANSUhEUgAAACwAAAAPCAYAAACfvC2ZAAABx0lEQVR4nLXWu2sUURQG8N+uGw0qIS4+EBXBxkp8BLGzNo2FWNhaW4i21nYBwU78C6wkgq9yk0pRAipBBUXEBxKIhCwY0eyxuFeZDOs+spsPLnPnnjvf/c453zBTiQgD4DDeDELQBufwGU/aBasDEI/jKHZg8wA8ZezuFKz1SXYElySBFwvr9/EOLakIFWzFKFbzniqitGc1a/iFu2hgL17+T0AlIhrY30HkJ3zDGCaws48E4SeWsQnfsQdLWMHBLLyaxU9hEi8wm58fzYmOoFWTWnuow4HjOaGxdYiVD1vBtjaxZha7iK/YhVdZ/ERB8I/Ms1CJiPlMtiBlX6z2e1zBPWyR2jbZg8jfmJes080SXzCHGTzoyhwRz2MtmhGxmMfxiFAYZyLiWXTHndJzQxtVyRt/8RT7UM9jrpTfI0wX7k/mSl0r7VvuWql1opZFvZb8dFV6ITrhWL62pGTrUquLGLFR6LMlpwttv11Y316yxK2NtESvqOJGni/heiHWtNYGBwasY0cRveICTuT5FD6U4m8L81N9cveMfkincR438bBNvFGY16Wv4vAxRH+dLfn48kZ4uN9/iU6YxUfpA9DA4yFy/8MfO2b75SIbwhAAAAAASUVORK5CYII=", 44, 15},
        ["HK417"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAOCAYAAABth09nAAAB7ElEQVR4nLXVv2+OURQH8M/zpqWt3yJBWEwSIWFAYhIqxCgxsUknEavJajXaicHgH5AIkSqCSJpIKh0YiK20Wu1b7THcK63H03rex+ubnDzPPffcc77n3nPuLSJCF7APb7vhqALXcBsfVzNqdSHQZhzEFvR3wV8Z2+sY9TR0fhrnMICLy/RP8FTaoLaU2GyO05917TxeWMZhDn15rpWlByPYU4dQERH3snGxit2bHHgNDmFnJrahTpCMWBZjNpOdz+TXZ92P7LOFr9iU/y/jecnfujw3g4UiIl7g8F9IfMtBW9n5v2ICvZjOsiMT/45t0mmszePPmex8RSJ9+IK5IiJGpR0Zx0YcKS0YkUppKicyhFsNyE9LJzqZiS5Kp1RVWm3ckU7+Qh3nRUQM49gK8w9xsqQ7gLM5yNUOEtmFTx3Yd4aIGI0lTEbE8YhQQwYiYjGvG4+ImxExGBF3oxp9Nf02kh6MSXUYuI5nNfdgv6XmncMjqaYnKmynpD5433zLV0fR8EFsSdfsUWkDTkiJ/MKk32+0eakP241Y1iTUBJekJOA+hkvzY6Vxr5X7sCtokshW3Mj/M7jiz6vxccW6Mw1i1UaT0urFeZySHrChCptBPCjp3mFvp8HqommP/A278TrLq/x9iQ//Ixj8BCDzFJ97l5j+AAAAAElFTkSuQmCC", 50, 14},
        ["HK51B"] = {"iVBORw0KGgoAAAANSUhEUgAAACUAAAAPCAYAAABjqQZTAAABnklEQVR4nLXVPWtVQRAG4CeXo6iJiaQRG21E/MCPmDIiIlb+AVFSCv4Af4adnZ2doIW1IkJEuxQmETQEbMQvojeKN6JG77GYBQ+ba/TknvvCsrM7Ozsv887ZM1SWpQyj2IF3uWMAeIWDWK1uFmnejj0ocQ+7MYmPfSTsYO0fZ1o4hNlepC7jehaw1AehOhjJNwrcxPkBJXyDYSHPML6K1hgTKowKRUaEWisYGyrLcganGyDwA9+x8z/Pd9P8XrRNC89woEAbTzBVk8RzPMUvHMVxUZF5HEtn2inpsvhwqvYsXqaYn9WLC3zGtD8SjuMkTuHwXwh9wVZczPbf4kLyL4vq1UYhyriKO5nvWoXUfSHLQlp3RMmvZjG38GIzRHJSbdFoncx3rmJfwQTuppgJUZEc6x69zaCFG6JBqziCE8n+hH34IGQ9KyrWtR6NkCr0fo+mK/ZtPMKutF7EtyaSb0QqRwuXKusHogIrgySSE8gxhb3J7uJhjfu29c1I70o9xhkh4X71/n9bGuDUk1SJmTQ2wpp4PBfSmMPrJkj9Bv08X2HuQWD8AAAAAElFTkSuQmCC", 37, 15},
        ["HOCKEY STICK"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAJCAYAAABwgn/fAAAApElEQVR4nNXSsQ1BURyF8R9RaRQSE2gsIDYwhcIMZrCCSggljS0sINEpqREJCa7iPaFARCIv96tO7m2+k//JhRAOOGGLq9fscX7zlwUXjNC7PxSwkhT5xBrH/3l9TRFNiXdd4jSAXAghQ6+faEvlJSuqYZPPzudnhlimuYQuxFgE+k+5hWqM04IKNh6HGMdaBOZopHkX67Rg+pRnMV+kjAUm6NwAvEgp7xTIxOwAAAAASUVORK5CYII=", 50, 9},
        ["HONEY BADGER"] = {"iVBORw0KGgoAAAANSUhEUgAAACcAAAAPCAYAAABnXNZuAAABeElEQVR4nK3Vv0tVYRgH8M89qJQOQi0tIQ4JbWKDgmEudwxxksaWwv+gIXJxCPoDdKi5KajdQacC3QKHgkCJphpEMPOCj8N5hcvpXm/nPX3h5f3xfZ7vec7zvD9EhAZtJiIeZ/q+H2RTaIYCNzJ9xwcZDGUKz+EB5tHGLXzBedIs0ME1tHCC4eTbSfw8PuI13vT6SCsi9vAIXytcGy9wvYffpH/LWKTgstCKiMA7/KpwU1jMFU74L8G18a0HP46baTyBVdyroX+MjRRkP/zGfo/1cxFxFhEjNU7ZXEQ8i4iDGIynTW6DQrnXzmpk4xNe4kOad/AQY9iq2B7V0P0LBT5n+k6nPvBHeWJPKzbDmiAiRjNSvtRVuudd64uVsq40LetJzf8Zwas0PsRmF/ejYns7M2eQ9UI8wZ00XsPPLu5QWeJLzGbGhbwX4q0y2wvYqXCn2MX9NF9Q3nNXXSX90WRP9GnrlX13N1cr9229CttYTv02vucKXQAZXiZ33EcJAwAAAABJRU5ErkJggg==", 39, 15},
        ["HUNTING KNIFE"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAICAYAAAC73qx6AAAA60lEQVR4nNXTvUpDQRDF8d/FWEVEMKQRtBPRFzAggpWFj+PrpBJsfQMbsdLCRgRBrAIqRK0s4tex2GuhhR94FfzDMDAsZ2dnz1RJNEgfW9hrUvQrtOpcYRZddDBd505dm/pEZwILmMMjeg30NsIBDvHwwbkuZqokPWWSiw1c/hvcY4Dbd/W2MrhLrFdJTjH/x801xRE2cFEleVas9V+4wT52sK1YWQvPGMNQWdIrXGNc8X1b8egZTnBX1zt4wjmCFaxhs9ZZwnKDDxjUusd1z29JMkyym2QyiR9GP8lqAzrfjpayMKPXL/qvvAC4rMwnD9xXDwAAAABJRU5ErkJggg==", 50, 8},
        ["ICE PICK"] = {"iVBORw0KGgoAAAANSUhEUgAAAB0AAAAPCAYAAAAYjcSfAAABcUlEQVR4nL3UMUjVURQG8N/TCkIhHBIiCXESMhqipoKmEEKHxkApp6aQdnc3hyDaoiEa2iKoJYQ2EYoIWmyMWpIHQlCafg3v/unPH8t6vvzgg3PPvfd899x7z2klcUAYwiU87TsoRbQxg9ahHgQ7gjPF3sYXfC52ExdwtlvRc7iGqziNZpxNfMAqlvEMOxjGdOsf3nQINzCHiZo/+KST4Y+ybkTnBipsYQ1v0L9Xpn2YxCymcbSceAUv8LJk862x7zDGcR4XcbnEeoJ5SXbjsSTzSdbyC6+T3E4y/Js9f2IryVyJ87E5OZrkbpKNsmAnyfMk75Pc7EKszsEkX5O0646lJJtFbCvJwyQTZX6gZnfLhSTbSaYkOZnkcS2zR0nG9inQ5PEk6+XJSHIryZ0iOtljsYpLSR5U46pkxnAf7/Cq/Mzve9XQX2IAb8tPbkOzTvvt3kn2g+s4hcXK0ey9vRaEK7hXd/zvhn9Cpwtt1J0/AQI+AwH0NOaQAAAAAElFTkSuQmCC", 29, 15},
        ["ICEMOURNE"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAALCAYAAAA9St7UAAABPElEQVR4nM3Vyy5lURAG4O8chwShW4h4AiHmPegJiRfoMPIAhDD2Et7CxIgXMDBmYqSZGUnc4hrE7ZTBWh0n4tK2kzh/UlkrWVX/rqp/1V4iwietEhGzEXGUbbIAR92t7POoYhk7WEEZPQV46opKgZgqJtCFQUwj6plUEZQiCuXQigWcoF9S6C8OcIOreiX4v6igDb+xh2Opu224zz7NuM7rKH5iDGfYwh+MoEW6Zj/wgLvMdY6mvD9Eu6TqRU0eZ55VvcqxcJu/DY+vxBxiDbuliFjHrxrnpg+Kr2IOGznxQSy+8GnGJobe4dlHX+Y7Rbek5r9GnqMTJVyio6bQ9ry/z+fzpYj4iiKrmEGvBlDknaa9iYackSKYlubiBMMa4K9V5B0pY0m619uY0gDvSNFCxjEgzUpVmq1vxRNXRwR/GJ3ktgAAAABJRU5ErkJggg==", 50, 11},
        ["INTERVENTION"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAMCAYAAAAgT+5sAAABxUlEQVR4nL3VO2hUURDG8V/iGhUUiRiFFAqJYKMBA2qjIoKQxk7BLoWNjaCVpaVt+oCQWnsrK0ERGy1EUogYENRExCcmxnwW92yyLrvZzUP/MNzzmHvPfDNnuD1JrJMd+IyruLPej2wWtS589uE+lrCIl2U8h18Yw7HiO4AjGCzztzi6ifG2pRshWzHaMD+IbXiNeYxge/HbU8Z1vm1OmJ2pYahhvoiZJp/3OIQeXFdV4SzuNvicKO8+V4l5iF7MNpyzC7/xZRPjX6YnfzfJjCrjzUzgCnZ28c1F1dXrxdey1klIMNldyMv8xH5M4003VwtO6k4EVeX6yri/aW9LizUqIUMt1lejLuQ75qViJslwkt1JNNlIkqV0z6skh5NMJekvdr7sTTesNVvzuWuyekUWcLGN8gMly52YwDuMq8o93rC3gGGcwqc1Zr47SqYerKL2dPF5nGQwyZk2lbicpC/JbJLRJHuLDSS5kWQsyfGNZr5TRVbjWnlOqvpkDve0rmBN1cy3VY3da6XxH+HpBvPelrqQZ232z+GS6s89VYKDJ1oL+aG6Qv+dWjl4rs3+BXzETSsiqDJ7Cx9U/5lZvPh3YXbmD1gslWkEpeM2AAAAAElFTkSuQmCC", 50, 12},
        ["JASON"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAECAYAAADMHGwBAAAAkElEQVR4nM3QuwkCURCF4W9hYX3LJnZgA1ZgAyaWYCBWZmYiNiGCmYGpqZmCaCDXYK/huqCI/nCYYTgMcyYJIcAKQzS95oxjhecXHFIk6OGkOkg76p+4YppiiT4mio+XMcAIKTJ00Yh9/tVTy9lihk0SQhhjj92HSzNFsA5qaEU9Q9fjPH/Te8Ml1jXmWOAOD3rDGjgve6YhAAAAAElFTkSuQmCC", 50, 4},
        ["JKEY"] = {"iVBORw0KGgoAAAANSUhEUgAAACsAAAAPCAYAAAB9YDbgAAABjklEQVR4nM3WPWtUURAG4GfDTREUBMVCm0DAH6CFhfgTtIuNnYiWWlgKolhYaiWCoDZiIRaWfiHBwsJCUAvxo1BQQVTWgOJHzGtx7uJ1NzFuvLh5YWDO3HuGmTnvmTOSWEJO5nd8TDL+F/tal8riOIO1mOyzf8PFWj+B+3/w0So6SZrrddhc68ewbYn9u9DFWzxoO7gB9JV6Q5L5DI8j/4MGnSTbsaMR/wFMDJnzJ4Ue53GopToOoJNklcK7TS34u4Gzi3ybUeiybHSSTOEwnmCvdoJeCMELzDdsE/iACuO1bRarlZMaw1ec7gU7g0t4plRmxaLCHqWya/DUaCo7ZeF78kap9D3cWSmcfYX1eK309S7mcBBXlQuswhbcwnX8wD7L7wYPcXnIvT28xDkcVRKbVR6faVzBQJ/dOKI+ezzJqdrX/iR3kzxOsjvJzmafbWY3iheswjXlNOcUbvcQXKhlYDZ4j5u1Pq1waRJbG/+8w+1af+7fZ4MxPFJa1xd87wv286/V8FNXNyOaun4C7uyPkfZxtm4AAAAASUVORK5CYII=", 43, 15},
        ["JUDGE"] = {"iVBORw0KGgoAAAANSUhEUgAAABkAAAAPCAYAAAARZmTlAAABX0lEQVR4nK3Tv49NQRjG8c+5Nn4kiO00K0Ej0fgLRCUSShW9RDSiVMvWColKJxKJUGjo0GokCg13E2ILimWDyHLvozhzk7M3Z04s+ySTOXnf8873nXlmmiQGdAp3sI6v2Fvi3/CrfE/wEe/xs1N7CBfwqqlAzuIoLuNYgewf6mZIo0r8JU4XAOwaWOPHQO43nknSHSeSPEqyns3aSF0rA7nzSSx0qJdwE3t6OvqOA5Vuv5T5Kh534sEKNkFOVgCzgjVsFGBXu8v8FOO+4pkn+3CmAoBFTHG/AI90GtqJt6WJSoutFzcGznWcZDnJvfLvYpLbSZo5P6tjhCVc6+G/xhO8wHW8QYMdeF529FdqktzClZ7cuQK5iM/asz+OT9oHOtkK5J32jLtaw0Gt0XBY6994KzuYaaEHAA86AMpV/FfVXvzd/1l0Xk2SyRxsVXsZptsFGeGh1sQpPmB5OwHwBwIu/VPhwT22AAAAAElFTkSuQmCC", 25, 15},
        ["JURY"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAJCAYAAABwgn/fAAABVklEQVR4nMXUPUtcQRQG4OeuSwJrUmxIE+wEMfgBQQiRNPkPYi2CIFiIBBKwshT8BenszE8IJF2KYCUmaVJoYWGi+I2aQlkZixnxclHiXZfNC4cZzrzn4505TBZC0AJkmMAxAo7S2pF8y4lXRz/GsYC1Juu9wjvsYhbHWQuE9GAKb/ELD3NnD/BMFCOd1dL+Iucvi8eopv0pzm8TUsPTZE+wgfUC5xGmMYIhVNDIFYCDFF8Wo1gtE1DFe3QmG05N1Qq8c7zGSs43hvkCr3grFfxGV4mevuILTkrEyEII29hH3z+43/FSvPUMPzGQO9/AJuYwg8/i+PzFYCFXSDX3cuueOPNHZQRcoYotnN2B+wKLWMLzgohJ8RUPU845UWjbkIUQPqUm3jSZ44co8r+iIr5I4x45PrSol3vharTq+OZ6XneT5Wd4HzvoFv/wXvzBx7Z3fQMuAd7aWIxR7/0uAAAAAElFTkSuQmCC", 50, 9},
        ["K14"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAICAYAAAC73qx6AAABRklEQVR4nL3Tv0vVYRQG8M8VLUshaBFxkEahXPwDmtqipaYaQl2E9hZxbO0/aGkIAkehrUH6ExqCaLApAuVqSWje+zTcU30NhfujeuDA+T7f933Pc877vJIYMR4kuTLiGXdG1TFuOMxhAfPYwBq26t91LGEcHbTRwldcQhcnmMRhcdfwDRlQx8Wqc9hKsoJ3+ISbuN9Y+LmEqiItXMZtPMFYH8UO8L2aaooPjuo8eDlkI21stZL0s7lbgqb5dYvtyoMpp5vq1PoPWC4uFWPnfL8dsInTSH+4W1681+BuJJlK8jDJ8wa/n+TqX3h7A8VZ1tjFceVvGtO64LfNHtckZ7GNL439R9gbabpD4M/H/gzviz/BCz1rbGIHi3iNp3r2+YlX+Fh5R6/J7j9TfRaSrCa5lWQmycQ5VzeTZD3JTpJH/9s2/cQPqeoUgESrhlcAAAAASUVORK5CYII=", 50, 8},
        ["K1A"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAANCAYAAADrEz3JAAABsklEQVR4nLXWPWsUURTG8d+sk8T4BoqFYqcRRBAsFFELGxsb+1TGT2EnCFb5DvoBRKyCEWyCooLgCyioUVFIYVgFIwaCxngs7kgmk92NM7v+4TIzd849z7kz58wZEaHPcS4iHkbE/AB8dRoXImJ6I7tcczK8xOHSXNRY/w2bsFz4WsAQfmAEt/ERx7Fjw2Ai4gQe1wwCzmCm5pqmvMZlbMWh0vwyFjGSRcQ8HqGN7/jcw+EithXnOa4OOuIOvMcezEmx7SvdeyVlxakcz3ANUw1ExjBRw34SN7Db2nTZIqVTmVv4gmG0pBR+2s1xjreFUZONXMQHXCnN3S/Ef+Nkxf4OntTU+FkcZ3sZZRExKdXHpZoCZd7hQOFnM47hBZ5jf8lup1TUA6eFXVLRNGXcarDnpbR5g+24W7HN+tDpSY4lzZ/SaVyXApyyPj3bleu9+NpQqzcRkUfEcINGNRYR7UisRMSRLs2szMR/appa+GW1oOowhJvS27wn1USVmcr12QY6/0QWUbcPrmMUR6Ve1IlZHCzOP0l9oG/RKv38ovxlSfdNwLTUDx5In+YWVgagu4Y/cguKMaEeSIYAAAAASUVORK5CYII=", 50, 13},
        ["K2"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAMCAYAAAAgT+5sAAABu0lEQVR4nLXVu2vTURTA8U80IUUsig9oFVQUBEHi4CLo0j9AEdwcnFx0dXGwk7OLxUHd3QQVpCI4SNXBCoqVDp20U0F8YDDgi+Nwb+DXmKTJL/YLFw73PH73vPiJCCXP1oh4GxFLEXFyhDhrnbmI2LuWXdXwjGMGR3E4393CVXzssG3gJ36hluUqfqOZ7ypoYbmL/27swx586PeoKq5jI57iEb71sB3DEVzG6Q7dBG70+9AAPMZr1DGJFezEDqkg7zrsN+CgVBSViFjEoREfMQot/JC60ZQS2Y/3+b6BRambRdqJLGCsihd6J/LH6g5tyQEG5S5mpY4XqWFzlufyG4ocx/MsH8MrufI9iYjpWM33iJiJiBMRUeuyWJsi4kxEvCn4PIyIexEx3xHrfMkFHx/Wp4qvhbzu4JI0n71o5UofkHbmMy7kqm/Llaxn26W+VexNc1iHKl7ipjQC9wf0a+BKlk/hS461IiXaTqT+r+s6UaLtkxGxnEfnQRf9QmG0LpYcraHPMIvb5iy2Z3m6i36+IE+ViF+KMolcwy6cw6cu+icFearkN4amEhH/O+aE1JVn0uLflv4H68pfhbQeLlaOUcIAAAAASUVORK5CYII=", 50, 12},
        ["K7"] = {"iVBORw0KGgoAAAANSUhEUgAAACcAAAAPCAYAAABnXNZuAAABZElEQVR4nOXVPWsUURTG8d+uGxuDkHyHWASxUhBTLQiCvaCFhWJnl9ZWexsrUZJmGyvBT5BGQSs3GjsxIBaiSHyJEfWxmFmyC8nszrja5A8Dd87bPHPm3DuSaHjNJekn2UhypkH+g3ExHfU5jNs4ieOl7R5uYGsoro1F9PENX0v7DOZxbNyDWknqiruEXt2kfXiHt3i9h2+nleQJ1vAbb/Brj8Afio5BFxenJK6SVpKnOIePE+Ys4BmOThD7COcVL7dT2jo4Uq638cI+nZOkl2Sp5jCfSPIhu2wmWU/yOaMsjqlzqsrfVgzq/IRdG/Act4buuziL63hV2q7h5Zg6G1XONubws6a4WVwp11cVn20WD7FS2j9NUOdLlbODTbyvIayF+4pjZB2ris00YLtGrUo6WK6Zs4wL5fqmUWFTpckhfBffcRmPpytnlHaDnC3cwWnFSPwzmoj7bxw4cYOf9aG/LfQH6uc0rKhFHCkAAAAASUVORK5CYII=", 39, 15},
        ["KAC SSR"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAJCAYAAABwgn/fAAABX0lEQVR4nMXVP68NURQF8N9lcl1XFCSeAkGiUJFbCInyVUQl0WgUGpWI6DSiUCpE4QuoJBo+ASJPpRCUHiHxUEiukFctxZyXN5m4cifjz0p2Vs6eM/usteecOYMkemAjhriJw3iNVQywXOaMcBLv0GuxGRhiMuhpZAOu4jqm2IrvGPeW1xFV4RE2lxg1eIxNLb6vFl3hNhZLjUHhz9jbQ9MTXOowf4iRJB+S3EnyJvNhWxJJTrfyq4Wnc9aZha9JqrLG3FHhFS5gu3qv7y5d/YIjOIDnjQ7cwgImjdwL3MUDnMJOHFN/xa5YLlo+dXorydMkR3/hcpjk5YxnFxsdnCY5k2SS5FCSLV27+SeiwgrO41nL42U8bOXH2I/jjdxj3OvUvb+ANSNn8Uh9cHZhD87hrVr4vhI78KNVY+nfSP09KrxX/4Wu4KP183FNbXJtvKLet99wAjdw0Pp98V/xE8OTiZ82/I/mAAAAAElFTkSuQmCC", 50, 9},
        ["KARAMBIT R"] = {"iVBORw0KGgoAAAANSUhEUgAAACUAAAAPCAYAAABjqQZTAAABm0lEQVR4nMWVP0hVYRiHn3sUlKAWwcElKajNP6uDoA5hEJGDoEtDTjWH4JIGiiDo4lLSbhQUrhEo6hIIuhQiDhVFg5qCXBRvPg73XDx86L3nojd/8HI43/vy/Z73nO89J6NyQVUDc8BbYAvYBfbi6y6wX/aOatqoU7vV2sRagzpnca2qw2pLWq80RY3qe/VfbLKtflKX1MMSQKG+qg8vAnVNfalmyzROo89qc7lQveqPCsAklTPfdEmoJnW+wjChRkOo6sSZfwK8AqpKzMYRMAjMAvXAFNAR1GSB5Xj6CsoATcCdoHYIyAEvwul77OlBPk+b6gf1WdDZDXVH/auOq51qTdh9Im6qA+aHJ5fY/7mJ1/coSJ6l12pVEaM+9XaR/HnRqi7GHgfqrQLURLz4RX2jfo/vc+pHdSp+GuUapo2M2q/+Ud8loSbjZOFTsKD2VBDkrLir/lbbIiACRoDC/yYLjAE/Sxz4y9Y60AU8iIBm4DAoOCYP+7/1DZiOgDXgaSIRAfeBlSuAAviVUQHuAe3AAXAdmAE2rgiKE+MJmz/k8x3oAAAAAElFTkSuQmCC", 37, 15},
        ["KEY"] = {"iVBORw0KGgoAAAANSUhEUgAAACMAAAAPCAYAAABut3YUAAABOklEQVR4nLXVsUscQRTH8c+dSSHYWIjE2KQT0loJgjZaSgqbWFvapoh1ipSmVStRxDZdCnN/gI2IFukSSJkmREUl/CzuJJvF25DT+cJj2beP4bsz82YkUYnxJO+TfElyk+RnksMkr2t1RaKeeJf+PC8t0/Y38/oz1/DtUajKjGC6oXaurMofmUls4GlD7QKWsYShEjKtJLP4iHOMYnjAsa5w8QCXsVaSk57MW0zgCM8eMOigLEryO8nLyq7ebeiokly0cYaVnt2E5o5qIuj0nnV+4Pie3B03WHmsPXOFVezo/tg0FrGHFvbxDes4xQzeYA1TOMCnu6WZTLL9j2n8mmQ5yVKSdgqfwCNJrhtkNksIVKN66P3S7aR+dAZYvv+ifh18bqjtFPQAT2rvH3q5V3iBS93Z2sL30jK3a+J1LqWZOigAAAAASUVORK5CYII=", 35, 15},
        ["KEYBOARD"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAACCAYAAAAaRY8cAAAAc0lEQVR4nNXNvQkCURBF4e/5u6CY2YGBgYmVCNudbdiAmVYgKFiBoZGw8sZkxG3Bmxxmzgy3RMQeLV6Y4YkFOjS44YId7ljhijXOmGPjlwEqIlkxSfdGyd04O6fJUd58/bA3d+lrjwds8/9YIuKBpf/O6QOxmx5W4Igb8QAAAABJRU5ErkJggg==", 50, 2},
        ["KNIFE"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAMCAYAAAAgT+5sAAABJ0lEQVR4nO3VzysEcRjH8ddolxQ5UyhnNzcnB+XgwMnRH+Dg4O6fkFKbk1KOclG4uSnFwYk9+JmIUNTu2sZhvrStlW0b+ZH35fuZ+X6fzzPP88w0URzHUmAV42kYNUrTdyZPk/9CfhoZDFdcnyKP5zpiW9EZdBs2q/ZLmMYM5jGFHCaxggmsYxA7GMAB+nCCrvBspeD3iGLQTygE/YCLKH7/tR+jF7fIoj0Y9+AsJCjiGt2fFFtASzjfHNaspFEZlBEhDqsKHYczi9gI93LoqMpxj6Fahfw09nAY9JikIa+cYxT7v6GQWpSxgFnckYxut2Izj231vVo36A+xIyHmKyngCMtYkkzjjSilgaxhLg2jKsq4wqWkcR+SSSlhjK2UvBriz/xHXgBHZVKFWT6XkAAAAABJRU5ErkJggg==", 50, 12},
        ["KOMMANDO"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAGCAYAAACB1M0KAAAAyElEQVR4nM3SoUrDcRTF8c8fQYfBooIWo8knEIt7BDGKD+Ab2IxiExb2DJZteUkMJtNwTKNJ1GKVzWOYYQxRwR/ML9x07j2cC6dKMo8T7GADq1g0W55wgSZusYV9vOFlYu7xCJIc539zmeQwydUXWj9JLQlJBhNCI8nwG9PzYvHKcZpEleQVS3+owRAPWDObSo6wXSUJ3tFGB3d4/uF4wbizuzjCwPiRHlY+d25QRxdzhcNP06+StHCG6wKGm1jGOg6wV8DzV3wAbRawFwKF/QUAAAAASUVORK5CYII=", 50, 6},
        ["KRAMPUS KUKRI"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAJCAYAAABwgn/fAAABPElEQVR4nM3VP0vWURjG8c8vREltEBUdc+gPSrs0t9jeuxCcdQ4C6QU0BEWja6EujkLQoi0NgjjolJhZYEV6OZwf+iQq+vgkzxcOnPvc933g4pzrnCrJLDpxW+EvBuv5Twwh+FPn9tCN/TqGH3iKbXzD77ruAN9xWO/V61+60VXXrWEVK9hxRaokuWrTDfAZ8/iAj4rQC2lXIY1s4h3eKqd2Jv9TyBfcQ0cL91zEcyyfTlRJXuJOw9oh+hviPif+6MSWcrc7sKv4B8bxos5T7vuoIuYrHuAJxlDh7jUELWEan45XkrRqzCYZvmTtQJKpJAtJfqU5DpK8TtKfpKVCJpL0NtHXk2QmyXqTgtaTPKrSPl6/hceYxLM63nfyLZzHBt60k5BGhvBQ8d8r5V8aUbw1h/vKa/ZeeQB2jwCwkpt9G7GegwAAAABJRU5ErkJggg==", 50, 9},
        ["KRINKOV"] = {"iVBORw0KGgoAAAANSUhEUgAAACkAAAAPCAYAAAB5lebdAAAByklEQVR4nLWWPWtUQRSGn2v8CEhABCPZQIzgB1go2ESQmH9gQBTESlIKlrHQVjvFSm0EFYSQJqRJoSiW2RSColHwq4im2WAkMeCCmMfijngdrsnubPaFF2Y4c85558xhZjKVNqACTAPDwDKwBRgCvgE1oLvE5xdwCrgJPP/HoqZwUF12Y7EaYp6I82XqALDQYIUyoB94BHQ0Xd+/+BR4CHgD7AH2AlNAF/A5VHYO+Jmpc+RHsB66gH3AphbESb7RMqwCD4HjQE8QWQMWNwNPgJF1gleA88AosKPE/gP4HkTsjmwvgCqwRN6XfcBj4D1QB1YC68BE+dZ0Ru2M+mC/OqLeVz+oH8P4knpMvVDopWl1SM3U02o96rWxuMeaJeo99bB6UR1X59VX6i31rFopcdwaGl31rtqt9qoDwWemIPLtRohcUqvqdfWkurMBxyNBwIK6LbJ1qJejah5sVeSuBMcrIfmD/9iPRiKvtSoyhdWQ/Mwaa14XRK6o/akiU6+TWeALML/GmhuF8XbgTmKu5Eo2wkx9Fh37uZRYmbbl7f6DA8BLoDPMa+SvzNdmgrTyejSCd8DVwvwp+YXfFNpdSch/QFPAbWAyJcBvZZriwvQUZB0AAAAASUVORK5CYII=", 41, 15},
        ["KRISS VECTOR"] = {"iVBORw0KGgoAAAANSUhEUgAAAB0AAAAPCAYAAAAYjcSfAAABjElEQVR4nLXUPWvUQRAG8N8lRxA0iJ3GwhQWihZKECzEIo1gZ2NAAsbC0tLCxtIv4AcwYGWtohZisJDYWHgIEcQqimAgiETFt8cicxCP+1/iER9YdnZ23p7ZYSUxxNqb5OI/+sx15bbhcAi7MYEWftU+gt8lt0pW+pOYh1aSfkHnKnAvTpR+Yshid2GtlWQK3/CqLk7hKdbwo8fpIxZwupKv4BGWMV1FqXhfsRNjG/z34YMky0ne5W+sJNkz4H0uld1CkpnSXc3muJ/kXhuv8RO3MYNJXMfqgDZ1Gb2pDk0V0168xCK+YBQ3ukwfJJmvam8l6SQZ3WQSl6ry2Q26F32Y9e1Wd3rHcRmzOGt9GpswhoMld2o/h2M9dsuN3UrypN4wSe5uwlCSsSQ3y286yfkkn/uwfNgUo43D9S6PcWcAwy6+48qG8wQuYEedr+E4njVGSHIgyeQWGG51vS2mZ5psmj6HYTGOT9Z/o/14389oZDsz4kglXG1K+D+SHq29M8hou5OuYQnPBxn9AaaqFSn0yNjQAAAAAElFTkSuQmCC", 29, 15},
        ["KS-23M"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAKCAYAAAD2Fg1xAAABQ0lEQVR4nMXUv0pcURAG8J/Loqws6gbEBLvF2FhYausjxMLSN7CR+AopFHyE9CmChW2alBbWgq2IWURFWFf8A5PinCWrqNG7F/eD4c4M937nm5kzdygilIgxLOEjmpjI+UY2GMYVjnLcwR9cvOGcCsbxAVOYrfaj+hGWsSUV8O6olMSziZ9SEbclcb6ENk7xS5pKs4p1bPdBuoqN7N9krgbm8RvnWMPX7I/kw2ewiDlMP8N9hLsn8oF71KQreSEidiOiHhEKWD0iDuMfvuX8UEQsRESzx57jGM1WK6hBRKjiUlqctnTVJrNNSUvbjT/l5ziquSvwuadTP3o6tve/UWZ0Xvnei+gu+w6us3+GE+kOnkrj3c9+y8O/Sx0rmM3xQRmiiqBbyBccF/i+je/lySmOilTM/aCF9IuKtAutQQvpF38BaOXOEPWpp44AAAAASUVORK5CYII=", 50, 10},
        ["KSG 12"] = {"iVBORw0KGgoAAAANSUhEUgAAAC0AAAAPCAYAAABwfkanAAABoUlEQVR4nNXVPWsVQRTG8d/q9SViIJGYVKKFWkXRJliphSCkMSD4AUxl4wdI5WdIF8HaFH6AVEFQFKKgTbAQVEQMGhsTjYjJPSlmr2xWs/e6iwb/MOyeeXl4mDlzRkT4R206IrKGGjMRoeXvk+EwTuIq5rGO/fiGvWhjI+9by7/r+fo9+bw+XMBYFhEzWEV/DUMbWOnB9HU8xlLFvCMY7qJ1CNNZRARe4kSPRnecXTttoAZL/6PpZ1lEtPECiziOU2jhB55gGR9wBmMlgc/SJaoiw4CU+58q5hzV/eQnsdBC4Auu4QpuSBdnNW9F7mAIj0r94zhf6ruHp/n/MWkTblYYuihVik5lWcM+aVPaUpWZw5aSN4CDeIj32whPbtO/XDL9Fbek05OPvakwDPe7jP+keBzncBq3e11c4FIpfi2l2aB0Mrvxtobub+mkRx8mpLz7+Ica/VJadXhXiAfz74P6Fn+lhSl8l/JotobGBA4U4rt41dhZBVl6Wxoxh8uF+CyeNxWtoqnpIelp7lzoRYw2NdWNpo/LiK0VaL6hXk9sAkCW3l2tgZsfAAAAAElFTkSuQmCC", 45, 15},
        ["L115A3"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAICAYAAAC73qx6AAABLUlEQVR4nL3UMUvVYRQG8J95wRTvoLg0ag7aEikEgSCBQ4ObENEH8RM4ioOtTS41NYhbhBAhiIMShOB2E1xdjBrMx+G+w58/lvd6Lz5wOIfDeQ7PezjnlcQdrZnkdQ/8qvXcp+FueIlXmMSTSj7FD5f4BBc17gweYKCSe17hdorBouMQPxpYwBSWa4Vn2LyhQRPvC6df+In5LjmDeKM9lMmBJC2MY7SPwrrFVyz20uC21brCKj7jKbZK/q322rzAuxrnAp/wDXv43YGOPx3q/TeStJL8ys34m+RhOaixJFdJ9pLMJplLspRku8Y56tMH0PWxD2GkvGsNG5jGBzzGfpn+M+0D3cFxZRYT+IIWTou/dzSwjt0SX+IcB9qrtIJHRWyz1Hyv9fh4X2L/h2vr/2Uq5peL5QAAAABJRU5ErkJggg==", 50, 8},
        ["L22"] = {"iVBORw0KGgoAAAANSUhEUgAAABoAAAAPCAYAAAD6Ud/mAAABoklEQVR4nK3UPWsVURAG4OeaFeKNIlgkIiqiIIJio4IEUws2/oNU1nbW2oqtjZb6Byy1ECxUUGPAkAQbDaKEqIUYQgzmmrE458bjsne9hS8sOztf75nZmdOJCEPgFr5jER8K/eua30+cw5t6gmoYFhzBTcxiK+smG/zeY2dTgmGJ1rGEvRjDJvbXfMZwDKODiF5gFYcaTrOJjziP6UL/A1Ho9uVDVLiIp3WiTkSsYGKoutqxji7m8CXrdqOH1Urq6/8g6ub3Z6nNfVzHSoUDDUE9jKCTv7/iPpazPIUrhf9bPMRdHMaNnPda9icitiJiNiIuR8TJiBiPCBGxFn/wMuv6z0hEvCvsjyJiOtsORsTViHhQxlTYMaAVSziV5fpe/MrVHcUMLuGENFDfMJ6fbQwigeeFvFyzdXE2y/OZeEGa0DVpxP8a8zaijULeU7NNFonmG2J7mXwbbQv7qZCP12ynC3mhIfY27pWKtopeFfIFaQr7eIY70mpMDTjkYqnotFyqo9KP7bfojHTX1bFLuila0da6DTyWKnkiLWIT/kkCvwE+t6q0jK8+kgAAAABJRU5ErkJggg==", 26, 15},
        ["L2A3"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAANCAYAAADrEz3JAAACEUlEQVR4nL3Vy4uOYRgG8N8wExrGoWbMQs7KYUSysFI2dooFyh9hhSwtUchKlsp/oCSHkrKgEEkhp0+Z5DDjOA7DZfE+X76mj8Z8M666e59T131d73M/zyOJFqMtydUkp0eMz01yahz4/xYzk6xJoi2JFnASm7AMX3CmYa4H83BzlFxDeIr3mIR+TC48w3iB2ejCOwxgK5ZibytGZuBeETteCL6qDHwtY1PxHT/QVvpf8LNogKH2FpJ+LAlbwbsiqBMduFa+HXhY+JeVXE+wE29wA29LfxKej2ZHpmEh5pdYUL5dWI1FJdFrPMe30v+OT9hehDbDC/SV9pDqjw+rdqajjH8rhiajt6wbLHM/MB2D7ejGHKwsAuui64K78QE1VQ3X8Aob8RK7ca6QNkMf1jf0a6qzdBePVLXeDMMN7Tr3kybrBqAtyXVMKU5rDfEUz0q7nqwHe7AOR3H2DyLqWI47qr/7CpdwHcfK/JJipmW0Y1YhPvGXdXOxF2twBPtGyX9cZWIY+/FZVTbdqtJ8ORbRTZGkP8n0P9zTvUmOJjmfZPM/3vHb8huHy1hXksVJliTpHM83RZJakhkjJnqSHExyIcmWMRBPS/K4mOgvBibyYSTJgyR9IwycH6OBehxo2I1dE20i5WW/rTofq1Sv5CFcbrFib2Et7mOF6lxMKNpxETtwAFfGiXeD6lqe6T+YgF+o8Nsuh04prAAAAABJRU5ErkJggg==", 50, 13},
        ["L85A2"] = {"iVBORw0KGgoAAAANSUhEUgAAACMAAAAPCAYAAABut3YUAAABsUlEQVR4nLXVz2oUQRAG8N/GFcSs/xAkKgqC8RLIUVDQgyA+gB715oP4AD6AePAkePDgyYMXQVEUxESQqDlIFGIEY6KgISom5aFbth1md8e4ftBQU/XVzFc13dWtiNAAl7GEWbzNvsBUk2Tcx3Vc7UdqN3zZIdzANNaz73jDXPiA1iBSUzEreIMd2IZVjPXgjmFrxXcAm5uIeSKp7tQk/MA8juFC4V/CGs7m5z3YiUmpc58L7jr2YVPhn83f/QOtiHivd5UbwU98x6i0r75ge4Uzh9fZ7uScZRHxMIaDhYiYioj1BtxLEaG62thbU90qtuhuuo+4gsW8TuFiwZ/BTVzDURwe0L07td6IWIuIxxFxJiKOREQnK10uKnlaqaIdEfNF/FZEnM+xg3VVN1ltaWPVYQ67sv2oEkv/mP24i3MYl0bA4oCu9MRIn9izwl6oxHZjItvPpZP1Sirg6/8Q862wO5XYiSJ3ZqMf/xsx7wp7vBKbLOyXwxLTbwKXQ+mkdLJ+X2S3pdlxOsceDENMK3pflKP4pDuVJ/Cihjeie1/9E/p1ZkU6KWu4l4XVYShC4BfK10i/1Nww+gAAAABJRU5ErkJggg==", 35, 15},
        ["L86 LSW"] = {"iVBORw0KGgoAAAANSUhEUgAAACkAAAAPCAYAAAB5lebdAAAB4ElEQVR4nLWWT0uUURTGf+84SeEfJLCVjeRCxKhFkZE710IfJPoWbdvoRltFLgShj9CiCKJFCYPJIBEOJTSDpDGjoCbzuDjnpet1ZnqdZh64vOee89x7n/vnvPcmksiABaAClIAf7hOwnqUx8BooAs8y8s8hn5FXAF76QOmsZi8xThU4uQT/HLKKrAM14BZw1QcsAB8iXgKMNGk/BvzqTCIkkj5hqzMI9EfxP9j2PgIGAv8e0ADeeNtR9z8EhlqM9dH76UhkFbjRSeMIv/070iJeB3Yz9nUKXMfy4Gse+EZ3RB4Dh8AwkGsRf+W2nBue035sN1M89u+TRFIZGI86PMC2N/F6FVjGVuInMAc8DfiHWOauYAn1oInIbeBFs9n9E5IaktYlrUk6lrQkCUk1/cVn96UlJ2kriBclzXtsLOL+d8kDE0DZNX8HVt0uA3fcfh/NreErOglsAPeBKSzj9ztarTbIBQJTpMKKga8Sca5hmQwm8hT4gk2y3l2JFw/4AXDT7aPAPxjxZrD/JS6up4hF7mCpn9opJiPe3cDe7LaoC4gO6W1JBbfng8SoSEoC3j1Ji5JKkp53O1HikrR5YAxjN0uf16exB0aMK9jN1DO0u7trwFvsbL6jddb2VCDAGb65Zt3fD7LLAAAAAElFTkSuQmCC", 41, 15},
        ["LINKED SWORD"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAANCAYAAADrEz3JAAABBUlEQVR4nM3WsS4EURTG8d+wsaJQiWJblcILKPQKUYhOxAso1N5DqdyICm+gJpFtFDo0WgpkE65iZ+IKiXHvyM4/mcw9mZzJd843594pQggyWcI+dvCa+7JUOpn5qzjAijEWQV4hyzjBLu4bUZNBkfhpTeEaPczhuUlRKVSO9Mr1Xc28dSzgFot4wxPe8Rjdf2MWk1HcxUwUV+uqUS94wLfuFyGEU6yVD/u4KoVAUV5x3MUe5msI/Q+GuMEAlzjHoAgNbFst4LCDM5+OHOHCz05U8bSWOsLfZ2QTx0YzsqElM1JT+xdat2tNJOYNsW3Uza3m5KST6khFfLKP9VDMLYSW/Gt9AABUWPTDV0pUAAAAAElFTkSuQmCC", 50, 13},
        ["LONGSWORD"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAKCAYAAAD2Fg1xAAAArUlEQVR4nM3TvQlCMRhG4UfxfwUbC7G0EZzAUmysHMMR3MBZxEpcQERwAAuHEMFCYuFtLXJjxFMlgRfOy5evEkIQyQALrGKDOamWyCyx/bZIKrFFOhjjlMElidgifVwzeCRTCSFs0MC5eGujVZxvqKNZ3LuY4P5Dx088ccQeuzI78i9Uvb96G50aZhHhIR6YZxBLInYiF/QyeCQTW+SOA0YZXJIosyNrTL/skcwL7OoXItfN2nkAAAAASUVORK5CYII=", 50, 10},
        ["M107"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAKCAYAAAD2Fg1xAAABgklEQVR4nM3VvWpWQRDG8d+Jx6BvjFgEBBWEgKA2WgSEaJXCQiwEvQHb9OI9eA+KaCuIWCmCH42kSplglcKPYCUIxmiSSTGrvp4Ino0R8sBwdjmzs/vfmd1tIkKF9uIAvmMF67iOq7hcfEYwiYP4gsWaCbarphLkCh6W9nsJ0+AQPmAURzBWfF5jegfW+Ve1lf4fcV9m5BNO4LHM1CTG8RWnsQ9vcBRRjAQ31F8vcf9JTUTcwLUywYY/w63K3Z/G/or4UcaRgO/8DgWn1GdtgHNYkGseNBGxhOOVgfpqwy+QFVmOXZCzeIVvFXEncBg3ZeZPtniOS3gpa5wkftAZPIszPSaZwx1cwBLeDv2bkuUYeIHl0r4toftqgD34XPqtiLgbEXMRMRIRis0MtX/YsUg9i4hbEbEYW/U0IiaKfxsRTSdGt79j1sq6ncL5n3RJ29VM+T7CE3nYL2J+yBawVvzWbFXVFVmjvtfvuHwPluXBXP1fC9qu+l6/Y7gn34VdBwGbHFf3mJfeNPwAAAAASUVORK5CYII=", 50, 10},
        ["M16A3"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAANCAYAAADrEz3JAAABuUlEQVR4nL3VPWvUQRDH8c8lp8aIIj5gYRuM2KQWCx+IL0GwshYrC9+CvVikESwtFOxiQBDURgsLC/EhwcaARgwY0JBo9H4W/w35cyZ3l+PIFwaW3ZnZ2ZnZ3UYSfXAe0/iGWXwt40Us4Dve4n0/ztu4ijHc6KiVpB+ZTsW7LdabSab69F2XiSQnktzuptvE5DYzdLxkaBEnVdlvL+swPuMFjqCBUbSKrJS5EQwVWS62Q9iNV5jHS6x2C6qRPntrh/iBJRxUte5mjGKh2YfzqLLZjS/4aaMiu1TZ/q2qChvZb2Gt5nsXXuMWHuIBLheddvZiZTsVWcIbfMApnO6iP4E5HC4BDuMPmvhbAm6U8frcULFtlf2W9Uo6s5TkbpKLSYZrl2uypnM9ybEkT9ps9w/gsvcsTf+3yorqab2HGZtftLM13XnsUz3BdXppv8GRpJVkLclMkitJDnQ5/ViS1ZL1m1tUKUkO7WRFJLmW5Og2jB6VQGeT7KnNj7cd5MxOHmQIU7Z+2toZwSd8xB38qq3Nqf6WdS4MomN6pZHBfiP3camMn+HcIJ13op9/pBOPMY7neDpg3x35B+Ddzaaa0l23AAAAAElFTkSuQmCC", 50, 13},
        ["M16A4"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAANCAYAAADrEz3JAAABuUlEQVR4nL3VPWvUQRDH8c8lp8aIIj5gYRuM2KQWCx+IL0GwshYrC9+CvVikESwtFOxiQBDURgsLC/EhwcaARgwY0JBo9H4W/w35cyZ3l+PIFwaW3ZnZ2ZnZ3UYSfXAe0/iGWXwt40Us4Dve4n0/ztu4ijHc6KiVpB+ZTsW7LdabSab69F2XiSQnktzuptvE5DYzdLxkaBEnVdlvL+swPuMFjqCBUbSKrJS5EQwVWS62Q9iNV5jHS6x2C6qRPntrh/iBJRxUte5mjGKh2YfzqLLZjS/4aaMiu1TZ/q2qChvZb2Gt5nsXXuMWHuIBLheddvZiZTsVWcIbfMApnO6iP4E5HC4BDuMPmvhbAm6U8frcULFtlf2W9Uo6s5TkbpKLSYZrl2uypnM9ybEkT9ps9w/gsvcsTf+3yorqab2HGZtftLM13XnsUz3BdXppv8GRpJVkLclMkitJDnQ5/ViS1ZL1m1tUKUkO7WRFJLmW5Og2jB6VQGeT7KnNj7cd5MxOHmQIU7Z+2toZwSd8xB38qq3Nqf6WdS4MomN6pZHBfiP3camMn+HcIJ13op9/pBOPMY7neDpg3x35B+Ddzaaa0l23AAAAAElFTkSuQmCC", 50, 13},
        ["M1911"] = {"iVBORw0KGgoAAAANSUhEUgAAABgAAAAPCAYAAAD+pA/bAAABFUlEQVR4nK3STytFURQF8N/1XkLGDEgMmCgTKUbmRkoGJvIVDOSTeRmJkVK+gCgihREG8u9tA/fqeO7znq5Vu3M6+5y19t5nZREhwRZW8Og73lrO+tDvd4zhOmsRuMRoh4d/QhYRM7jBE+7/kxwndWxiBM//TA4vdZxjCEsdLu/hDAtoYht3Sb7p5wSeREQRixHxGuW4i4je/N5ARKwl736NnkTtACdtqu9BLdlfdOj2C6mLJnCaE6S4QgNHOXH4HFfoAvVkv15C/oBZ3HZbcSsKwho2SvK7VchTgWWMl+R3qpBD8dv7Jc55j4jhbt3SLkTEdEQ0SwQOq5IXNl1FVtJco/J4fNp0EPOYwySm8nUJx1UFPgAHuCAfqpubJQAAAABJRU5ErkJggg==", 24, 15},
        ["M231"] = {"iVBORw0KGgoAAAANSUhEUgAAACoAAAAPCAYAAACSol3eAAABjUlEQVR4nLXVv2pUQRTH8c8mKyYiSazSKWKvdRoFS58hhY8gVjbaqZXgAwgWNtaCCIKinZ2ondhEEP+hMcSYGJMci5nFm+GyO272fmG458w9M3Pu+c3c6UWECk7hNb7hCz7ha35+btgv8b1mwv+lXxl3EUdyW8ablphFXMOlSSRW0ouIRWwPiVnAE5zM/i2pgiUzOIOnONvoX23YO1jHHkJSaAa38WtUolXaV7KJ2THG3cRaS/825rBVK30t02OOm8dUS/8WjmK3j8OGS7+Me5UL3sc7+6XfzAsOWJe2wJ5UxcB1/Bw6c0SMaici4kbs531EbBR9GxExVTHfWK2t3CUruIM/2X+I4zhdxO3k6nRC7R5dwqFsr2b/GH5LW4eUaN+/D5osFWWfjYiVLO+H7A/ePWhIv9aV7LXSX5akhqvS4RjwsWHPSf/cThiV6AKuZPsV7hbv3xb+0gRyamXUHv2B87ggVa88LM8L/xweTSSzgt4BL6Zp6Rqcz/4LHVX1oDfTLh5LiT6T7vlO+AvryV2hWKLF3QAAAABJRU5ErkJggg==", 42, 15},
        ["M3A1"] = {"iVBORw0KGgoAAAANSUhEUgAAAB4AAAAPCAYAAADzun+cAAAA6UlEQVR4nO3TPUpDQRSG4SfhWlhFdAduwdYd2Cu4Dgs3ki2YDfgHinZpBQshpdgEIWAM/iHeazERNcydO4p2eathzuF7mTkzraqqZNDGNgYoI/UOtvCIBTzjCvu4jQW2MsXLGOU0znCJo1ihwPp0/ZQI6PxCWqGP0zrxGk6wmAgZ4wAbmdJSuKVxXUOBB2EeTQy+iHu4wabPmV+gizO84j4VVog/lhgfIxniEOfYFa50lrJm/5s4hyVhJLCDvUTwHSZNgQWuM8QrwglfcJyQmva8NQXmfqefMBT+82qqqf3X1lzm4rn433gHBZ040gudpfUAAAAASUVORK5CYII=", 30, 15},
        ["M4"] = {"iVBORw0KGgoAAAANSUhEUgAAADAAAAAPCAYAAACiLkz/AAACCklEQVR4nLXWS0vUURgG8J8XwiyLgkJbBEUEUYsoaFO71mVkmwpsF/QB+gbRjWgZRLXpA3RZ1MIwEoqgVhFZEAoRxVRmYhdHcHxbnCOMgzp/HeaBw7m9572c9zmXlojQAK7iLEr4kUsJ33P7Wy4vMbMMvb3oR189wfbl+TsPnTiN9RjFMcwuINePLjwuqHcnxrCxiHA7tuf2V5QLGoGjWI1pbMPFReR24xGOYEcdnXcxhUG8LuJES0SM4Rcq+LOAzBgma8Z6sBdrixiR6FPGJ3RgHf5le51Shn6jO9sqYQNu5HYrNmddZSnTXai0RPFDEHgjBdqDLQXXza0tS7vbmp0u58DapExO5foV3uOUlImPec2amgACP9txC+M4ia1VRidwEy8kek1gpGr+OQ4WcL6CKziEXbk/jpbs2IyUjTZcwz0MSxS6LzFgcUTEZESMR8RMzMdIRFii9EbE26iPB3X0NFRaJS4N5+g/YA+OY1+dnX2IJ1X9M3lXL9XI/a2jpyG04zCeSvS5LFHlXcH1+3Ndwarc76iRaeihqYsG0tdXRZPrVeObaih0u5kUWunCjogYzQ6WIqK7aq41IqarAhho9hlYCc5JjxdckO7qOcxKV98cDkg3TFOw0q/EHXyRrsbBBeafSS8w6auxT8GXddloUmpP1JyD882iUCOfuaUwhM+5HsJAk+z4D05vz1lTmv18AAAAAElFTkSuQmCC", 48, 15},
        ["M41A"] = {"iVBORw0KGgoAAAANSUhEUgAAACUAAAAPCAYAAABjqQZTAAAB70lEQVR4nKXVTYuOYRQH8N8zHmbGWzMpk91ERnnZUErS2CArxUpSfAAfQPEFJFnYSElqrFirKUpYKFGzoIyMt0zyksjMYPS3eO5pbk8zj/sx/zp13edc53/Ofa5znauWREUsxi3sKunu4kKx7pnHbwpXqwaBeht7TxQJXcSXkn5rC58OHMN33KgcKUkVWZfkS5K7FffPSC3JzSRjSbqq+knSO48MJfmU5F2S6TSwO8m+JH3/IN6Q5GeSb5nFqapJ1ZKM4F5xlCvxGTUcwJpyUTGGFZjEdIsD6G7yVRzhUAufTnThbB1XMDLHpk1NxDWsbUHajGm8xCq8wmocLtaLMYp+vC14r2Mp3tSSDOLOHKR92IY92I9zhb4Hp7G8jQRnMIEf89g+YhyvJRn8xxl3Jxlo0j0u+uRnkvNJtiR5noXjc5LRKiNhEs9K3xuxuVi/xzV80Cj9QtGLo3WtG3YunNW4FF+xXaPk8NRsD04U9vcF/wuzPboEy+bg/Y0zeFDH/TYSWq/RXzSm9HjJViutT+AyTmIAx0u2HUWCM9VfVCQ0gYeoPDxnpDPJoyRTacyysu12qTe6kvQnmUyyt80YbT0zNG7OThzy91PTjIM4gtsYbjNG25VqJcNNN+lXko3/w9XR9l/Mj+b5cwlP/ofoD7wmpH/PtLzMAAAAAElFTkSuQmCC", 37, 15},
        ["M45A1"] = {"iVBORw0KGgoAAAANSUhEUgAAABMAAAAPCAYAAAAGRPQsAAABAklEQVR4nKXTvUpDQRCG4Sfx+APaWQg2opJGsBOxslWwsBPsvAQrL8EL8CZsBUkpFhZWNilEEQQLwR8QRDBKwLFIAsf1hJjjB1Ps7My73wxsJSJ0tI9tXOIcLXzivXM/gnHFWsBUJQdrYLFH8Z+UYQ0vqP0HhOcME9jF2IDNLRzlzo8ZTrCM9R5Nq3jAFg61d9jEKJ5+VEZEN67it74iYjIiKhGxkqstjKzDnMZc4ugMdSzhFRf95u7CdjCcyzexgbd+gHTMoYi4TcY77jdSUVSxidnkjfpAjnLOTgsWP1PWWTXhN3BXxlgVe0nuowyoC5tPcvdlYRlucKD9N2u4Lgv7Bshx4GsGwxQKAAAAAElFTkSuQmCC", 19, 15},
        ["M4A1"] = {"iVBORw0KGgoAAAANSUhEUgAAADAAAAAPCAYAAACiLkz/AAACCklEQVR4nLXWS0vUURgG8J8XwiyLgkJbBEUEUYsoaFO71mVkmwpsF/QB+gbRjWgZRLXpA3RZ1MIwEoqgVhFZEAoRxVRmYhdHcHxbnCOMgzp/HeaBw7m9572c9zmXlojQAK7iLEr4kUsJ33P7Wy4vMbMMvb3oR189wfbl+TsPnTiN9RjFMcwuINePLjwuqHcnxrCxiHA7tuf2V5QLGoGjWI1pbMPFReR24xGOYEcdnXcxhUG8LuJES0SM4Rcq+LOAzBgma8Z6sBdrixiR6FPGJ3RgHf5le51Shn6jO9sqYQNu5HYrNmddZSnTXai0RPFDEHgjBdqDLQXXza0tS7vbmp0u58DapExO5foV3uOUlImPec2amgACP9txC+M4ia1VRidwEy8kek1gpGr+OQ4WcL6CKziEXbk/jpbs2IyUjTZcwz0MSxS6LzFgcUTEZESMR8RMzMdIRFii9EbE26iPB3X0NFRaJS4N5+g/YA+OY1+dnX2IJ1X9M3lXL9XI/a2jpyG04zCeSvS5LFHlXcH1+3Ndwarc76iRaeihqYsG0tdXRZPrVeObaih0u5kUWunCjogYzQ6WIqK7aq41IqarAhho9hlYCc5JjxdckO7qOcxKV98cDkg3TFOw0q/EHXyRrsbBBeafSS8w6auxT8GXddloUmpP1JyD882iUCOfuaUwhM+5HsJAk+z4D05vz1lTmv18AAAAAElFTkSuQmCC", 48, 15},
        ["M60"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAMCAYAAAAgT+5sAAAByklEQVR4nMXWTYhOURgH8N8118fwlo8lJRIyNshOsRY2SFaUrZWSpWJhoazs5WNhIWJKYmFhZWMkinxMKWOGLGimGDOvY3HOW9f13jvvvOPNv07d5znn/M/zP8/znG4WQtADHMDNXhBjATbiedE5r0eHTfWIF3bhbNmZd7h5OU5gK7YhiJeQ4VfBnsIQnuAx7mASo7iPy3MQ0MIWPCg7sxDCBywu+eejMYfD3mNYFLoeq0SRE23WXsDrCp5G2pOnsQw7xIu7hWaKtS8LIQxjbU1QE6pLpZGIukHAD0ynUcVfFNJMvmmMJ3sMC3N8Vi+km8y8xScMYInYoGVk6Pd3RvqxKH0fw6UU3xq8FLM7iVNiyUayEMIg9lUE9EJUXMamRPg/cRRXW0Yu3lwRH3Ed1/CsguQKjojZfIjDhbkhnBHreQB7sTnNfRVLql2WxrEfK9LedmhgA37ibnGiLOQcTou1V4XVOJi+H+F2ScgoBgv2RaxMAp4m7nVYir7kb+I7XtWcW4tWj7RwT70IOC++cm9wEttnWD+SRhHvZhFjR8jFW7oh9sKXGdbvxCGx2XaLz+yIP8V8+9dBdoJslr8ox8WXZAx7ehJRl/gNvhRxDqBRSKMAAAAASUVORK5CYII=", 50, 12},
        ["M79 THUMPER"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAKCAYAAAD2Fg1xAAABcUlEQVR4nM3VO2sVURTF8d+Ya5r4AEFNsBKttBHRTsVCSBEs8gEEGwv9AlZaCoIWgp2VjZ2NgvgoDIqgqKTwhY2CiqA2JsQHid5lcQYyDEFuEm7IvznMXofF7D3nrKmSTGInfuIJzuOR1cEadHvZWCV5in2N2l+cxsU+vNhiGMFDnMVhvMXnWutiBnN4g3MdzLYMBnABJ/EcL/CyXt/rbULHMIgxbFMmWzX0O7iKP//x2FGvj/Ea0y19vdLsXhypktxXOu6FH3iFSVxWGmxzHOPYpRzZlSHJ7SyN30nOJNmcZDDJaJIHS/RaNlWSGzi6YpPrEwvdkdXMdZxo1TpY18H2RZp1MYXv2ISNDW0OE8rdGcZW3MUefDWfOm0GsKHxPFvXDuGaEhSfcMvCAfGtoyTIM+U/Mo0PSuIM1yapTadqfaZhsBY3MVr7nMI7HMR+XFLi/Ao+KmnYF6oky/UYwgHcMx/NW7AbX5Sv9EuZaN/4Bx/WHO3vIhLtAAAAAElFTkSuQmCC", 50, 10},
        ["M9"] = {"iVBORw0KGgoAAAANSUhEUgAAABcAAAAPCAYAAAAPr1RWAAABHUlEQVR4nK3SsSuFYRTH8c+9bopiQIqUMlAWZTAQZTGwMfgXJKt/wW4yGAzKn2DBpkhKzKJIKcUiETqG+17drvflzb2/OvV0fs/zPc9zzlOICFVaxDKO/NQt3lPytWrFCjYLEdGDZ8xiB8UcgFwqYQ2j6GokGKtFbCDQ20AwXJcwgc5/HL7DLh5r8pc4w1UhGWgz9jFZs/FTecADuMAxZrCEcbz8Wj4iKrEeP3WeeEMRsVC1d7FqnRmlpEYR8ym1BzGGE+WBdyu38e2vnuEbPo2+FH8bH4nfhGEc4iEPvPKErZSWREQM5nl+VhQiogX3aK+pe4P+XDfMUBFzKWA4qAdcgU9leKeNgL9meJ/1wkvYU/5aI+hIog1P9cK/AGgLxyuYNzzEAAAAAElFTkSuQmCC", 23, 15},
        ["M93R"] = {"iVBORw0KGgoAAAANSUhEUgAAABQAAAAPCAYAAADkmO9VAAABKklEQVR4nKWUu0pDQRRF171GIYL4iFhYpJOIlY0ECztBxMJS/8DaTjvBUuwEK8HeH/AbgmhlL4IYCwUfKIbgsshE481NiLkbppkzs84+Zx6RStAGsA3c8qsP4J7OGgLWgFPgCZiM1C2gCpwBg102d9M58AbkUXfVT7NpVEUlF8i1YL9XXQCXwCNwBbz/RAJ5KZHxS11XD9Rxtajuh1il6SZtdALW1GF1Xi2FNSX1Qa2rh+pAGjAORjcTJVWBVSAGxoAFoAAUgTIwBRwBUVsz1FzI3KqdbmWFsRxa0lbySsqplXsAoi6qs0ngcQL2Elz3AkztYSHRhWeg/o8r9EcxcALctMzt9QsDiGy85TtgmoazCeC1X2AMzAUYQCULrAmcAa5p/Cp5YCQL8Bvg6bq9FCiAqQAAAABJRU5ErkJggg==", 20, 15},
        ["MAC10"] = {"iVBORw0KGgoAAAANSUhEUgAAAA4AAAAPCAYAAADUFP50AAAAxUlEQVR4nOXQzyqEARQF8N+MqcmGKAtbJAsZr2Cn7OQZPIEXsbL0CtZewl6xQf4MhYUUOTY3ps/m+9ZOnbp17/nT7SXZxQhTeMU9HrCJU7+YwzYOQJKtJCdph5sk60mWBrphEft46yU5wgyWMY2NOvqo2s+1P8cXdvApyTjJShJJZpM8Va1xkr0k/SRrtf/hAAsTVV5wgfl61DVWcfendMNpmOS9Es+aKZPsN3xGGLb5UlP4iOOab7sIL3FY81UXYWv8B+E3bBmtOuCg9UQAAAAASUVORK5CYII=", 14, 15},
        ["MACHETE"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAANCAYAAADrEz3JAAABaklEQVR4nM3WvWpVQRTF8d+9udFYiB9ISOMTCFaKVVCEoJVYSBBLW0srwUdI5TtYxBewEGLjBwYRohK7kEbEGBHBD2JyWRZnRBHheu4Zon8YBjazFjOzz559eklUYh53apm1pV/J5xxeVPIaiwGO4koHj73Yg1dYxAEEW9iHIbYxVeZhiW/9ov+KieLzpcwTJT71m98OFvAAs1jF816SBVzvcJCPZfO7zY4mEfCsl4pF8g/5NBi9Zld5hJc4jEstdOuSXE7yJOOzkWQpyXIHjx/MJpGkn+Rbid1IcnWE7vYAj3ETa5rieoj7mmL6/Be3cbqsvYCTLW7xT1zDG1zEZIm9x+sRupVeupfIHJ7iIE600E3jTBlHOu7hvJLKLmMuyaEO+n6SU0nuJhmO+UnO1MjIpOYprPH6ncUtHGuheYuZGp19W51DwJKmyS230Kzws6H8T3zQ/PIs4rim8+/XZH0TG5osbOId7sF3oU6xy/7UmiwAAAAASUVORK5CYII=", 50, 13},
        ["MAGLITE CLUB"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAICAYAAAC73qx6AAAAdUlEQVR4nO3UMQ6CQBCF4W8NpR0mgrUeQ3vCtTwD8XK21JZ2ayF0qzQG3IS/nb94L5OZEGOUATWuaLFPCQU67GYMlaLHAyc8cccR22F+8aHASIiZrGSKzdIBfsVa5N8ocEO5dJAJzqi+CSGTW6+832+DQ0p4ARGeEgUAyWGcAAAAAElFTkSuQmCC", 50, 8},
        ["MATEBA 6"] = {"iVBORw0KGgoAAAANSUhEUgAAABoAAAAPCAYAAAD6Ud/mAAABO0lEQVR4nLXUMWtUQRiF4Wd1A4kWFhLFQAq1sLUMJFbptJOgEEhIZWXrD0lhLaSw0jJtinRWQZAUKQKiEAsLQY2CMSfFzsJlvDery3rgMsz5hu89c5mZXhKV1rBUm0Vb2O+o1bqDh3iGhV4L6AU2RjR5g7eN+SPs4lOZT2O9UX9Sg+ZwgMstzT9gHkf4Ubyp4o3SZh99XMMlvOqAwPcy3viLxrXuSbKR5GuSn/mPGv66+9geI+lQ3/DrnPpHSSSZ6QhynOQwyWqSx0n2W9a8TjJf+nR+/UJcbEkR3MRTvCze+5bkezgdteUhaLWltoOrBkd5uUCOyvjP6iWZNjj/Vxr+O9zF7ZL2M76MAxiqjwcVBJ7jt8GdmoguYKXF35kUoAm6VXknJriTJuh65f3x+E0KNFt5F3U/Q2PrDBP/+u9+r6RCAAAAAElFTkSuQmCC", 26, 15},
        ["MC51SD"] = {"iVBORw0KGgoAAAANSUhEUgAAACwAAAAPCAYAAACfvC2ZAAABiUlEQVR4nM3VP2sVQRQF8N9uFtQuCgkRG0FB/AMBSzuLpLGwMYWF30Bs7C20ljTxC1gpQiAgCCJYpAoShWARiGAEwWdERFGCmpexmAlM1rc8eL59eGCZe++ZuXv27p2ZIoSghgM4ik/4USdHhFsIuFMnqsw+jhJXcRtLeI5VdBoSnxU/7tmQhG7jQ7LP9ZpQpAofw/shvfRf0cWOWLxTeJuTFZ7iyOh1NWIsPfAEkxnXLUIIuyhGLmtAVNjEG8wMKecjse8v4GIWL7Gb+XtFCrXYnv8bL2u5uxW+YxY3MZGIGzg0oOAHWBxwbV9UYpMXuJvF57GAK8kPYvMfxpcUO4jPOG3/adPqfiixgfFa/COWM/8VTuB6Gs/gMi75+8ib1CJK3G/gTmb2Sho74t+Yxpp4Zm7V1rUquMLjhvhc5m+Jm+grzuMnfmVcjtYF98IMppK9jXviVd0LdcETPWcNCWVD/Fpmv9MslhFXuEnwC6wn+2GfHP9FS8ynZwrf+uToiBfPGl6nsTX8AR7pUnTliEKNAAAAAElFTkSuQmCC", 44, 15},
        ["MEKLETH"] = {"iVBORw0KGgoAAAANSUhEUgAAACMAAAAPCAYAAABut3YUAAABxklEQVR4nL2UP0hWURiHn2uiWVFWFhE1aEm05dQqEm4hTQnRkkThIk0tjVGLNNRQQUt/aGsSoyFoKoUPGgJDCqF0MCiiGlLLvqfhOx8ervdePy58/uAH93Le877PeXnPSVQydBA4CRwDOoHdQALcAmajuAToBvqBAaAH2AccAFqBr8AiMAe8DJ7PKgiAWnevelddsFjv1Al1Rl3aIDZLr9UzaktUG5VEHQSuhtO15FLn6x8wA3wEtgFdwNHQzSK9B84Db+POPMmgX1XfqOPqPfWBWlGXU3HP1O70CYMPq+fUp+qvnC4tq1fURAX1c7S4oF5Q9+QUOKT+CLFz6tacuLR3qmPqhxyo5+p+1LPqF/Wmun2DpG3q95Cg0iBI7C3qZfVbBtB8PaijgUSt6uNo888G92W5S51MwSw1urlXnc44zcPQrTJAifooyvW7NjjFukjtfdkBVIFXQAX4BLQDU+G/jNrCrToC/CkiP66+CNSr6h21p2QXijymrqjDWYt71dvq3wAyrfY1AaLuIfW6SnphxLWrW1VvWBvcZoHUZ6czDXN6bZasqpeaDLHO8fN/IvoeBe6XHMrSim/TLuAU0Adc22wQgP8p+KVO5YBdrAAAAABJRU5ErkJggg==", 35, 15},
        ["MG36"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAALCAYAAAA9St7UAAABvElEQVR4nMXUv2/NURjH8dfVplqlpCREVCJ+RcSfYDKIFKPNZOjAYmDpPyAd7CY6iY3E77EJAyFiEZF0EA2DoH5cpE0/hnOa3EjruqW8k5PvOec5zznP5znP+TaSWAL9GMEkrnboO1a/Z5dy8GJ0L9HvHE5hGk+xAo3av44uBHMtfXXNVxzA4br2r9CpkK04huE6Xov9LfY+Rdw839HEN0VsD67gFu7jIqbQW317MIu3iuB+vMIzTPwqsEaS2/iIJ/XQZrVNKxk9hO3Yhi1KVpebaXxQhEzhPcaVm52PbxDrauwzjSQvMKRkZSFOKhls4gKOLk/sbRlTbnZeyCqsVITMduONku2BOkmp653Yjb1YXR178Kiu2VfH7ZhRsnkXG7G+ntnuLzOAHUoF7MJlpWoWpLuq7FLqdVKpx894jpu4tojvaZzHa9yogR7B8ZY1c3XuTpug/5hu5RFSsjWiPLR29OBE7V/CQzzAHnzCmmpLy/7LS5KJJM0km5P4zTaawrska5P01fnBJPeq7UuSl0nOdLDvkpskj5OMd+A0VIWnCvrZvinJhn8RfGtrJOlV3kknDGMUB5VS+u/8ANPhlY/CBHGDAAAAAElFTkSuQmCC", 50, 11},
        ["MG3KWS"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAJCAYAAABwgn/fAAABnUlEQVR4nLXUu2pVURAG4O+cHI05Bg1iEAneUvgAgo3BR7BSsBAEtbDRzlvlA9j6BoKIaGMVJKiFhYqFgqA2WlioEUlMvCZexmJNcGeDes7x+MOw1541M2v++dfejYiQGMB3/cUY3mKhD7UO4sLvNlu4gW14iFncwxPcRlsh2Eo7iyN4hlVYjyH8UIbwOHM+4SQ24ShmMJiEzmMFPlTqfsHqzGtgTfbXxH28Sv/ejHmJ6VzPQyMirmZAFfNZZLiTUeFzHjbeYXy3+KgQHsz311irDGQKoy1FiTqRy1jEHr8mtz33FioFlzBkOYlZRZ2JWtw0ruX+oqL2gDLZNr4p6q6s+AJbsRNfcRcPsFFRcXKJSBVzOJFE3uNY+sdwPNcvcBqbcVORfjd2VepM4jCuY102NIoN2dgZ/UZEHIiIWxFxJSK2RIS/WDMinkfB/ogYj4gdsRwXK7HNSm47IhodnNG19ZK0L5t9VGlquEbk0v9o9k/W7EHEQ/k8p1wTGKnFvOvxgvSM+jfSCWYUAncqvjc4pfy55vD031vrDj8BuOiKGiBTnAEAAAAASUVORK5CYII=", 50, 9},
        ["MG42"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAICAYAAAC73qx6AAABU0lEQVR4nLXUT4uOURzG8c/d3CMmMU2YbCQLeQNegCI7S9PsrKwtZusNsDR5C9hSLOyU1CSFEpPMSjQaZphJw4zL4pxy9yiexz2+9ev+c851ndN1Or8myVWFW3js/3AMy1jv6TOj7PM32rrAFczhBRawiCV8wjZWMI1d2I+PmMJBHKp1uPqtYw/G8B0P8QYX6/yv1X8e49ionp+xGz+q7kD1Xa7rNziDo3iHD9jCIzRNktO43yOlQVYxuYN+f2IF3zDVKkkMsonzeFu/t3FSORG4piT0EicGtJOd93u4oZxKl7HqOQqnqu4L7ta9HMFTbElyIb/YSPI8yYMkE0n8pZoka0k2k8wk2ZvkVcfv+hAeO1ItzuIm7uC20S7kOeyrCS0o9+Y1jtfx8RFT/2dazPbQX6rPy0pzgInOeN8uNTRtT32UrvKk829eaZHv8ayn/9D8BNb65Uw6yMdEAAAAAElFTkSuQmCC", 50, 8},
        ["MICRO UZI"] = {"iVBORw0KGgoAAAANSUhEUgAAABQAAAAPCAYAAADkmO9VAAABBklEQVR4nKXTvy6EQRQF8N+ysd1qiRAV0SglVB5AoqVXeglPoPMMNLK1klLlT6IjUZIgdIKj+L7Nbta3+xEnuZnJvXPO3DkzI4kyxpLsJzlJ0urLV8VOOU4n6SRpd2uNJErM466cn+ILc6oxgwtMYhErOIdGklUcYXYI+Te4xR7Gm7jBxz/EYAob3Q63EHziBevYVRxnFJ6xXfIecNkVrFrcxho6aPXlN7GMKzzhbJDYHLL7q8Lk1kD+tKy9oVFFHCZIYUM/PrCkuP1H3FezRr+34/TwXrNWEmMjOoSFmvoP1AnW1f9MONTzsoGJWsVf+HJQenidpPlfDyluleIB1/6oP3tUh2/zbeu7PlyXMQAAAABJRU5ErkJggg==", 20, 15},
        ["MJOLNIR"] = {"iVBORw0KGgoAAAANSUhEUgAAAB4AAAAPCAYAAADzun+cAAAAoElEQVR4nMWUPQrCQBBG3w4rglfQ1sIjWNt7EO+Y2iNY2Cp4AiH481kkRZpkmnz4wbLDPtg3W8wWSZhyA9Yj7Bgm6W5CCnBwifcZd4mXGXeJ3wlfBeCQLxK+rcAd+AAtUPs6gELXeZ3Yv/1FMTgLYJN1VmScp6lU4MEfXoykkMTM66QkMeh6zrwSfnWNU0340yVuM+4SnzPuEl/o/oexND/i84psRuKqjAAAAABJRU5ErkJggg==", 30, 15},
        ["MK11"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAMCAYAAAAgT+5sAAABkElEQVR4nL3VO2uUURAG4Cd7ySpeIAREUbC2EGz8ERZBKy3SWomFjYU/QLSztLXVQtA/kYiCYuEFYyGKhaKRhYR42W8s5ixslmzcb7PuC8M3MPOe751z5swRESa0axHR3gO/rt3YLd4wOU7i8h74U0ULCzU5l3Adi9iHK2hgDj00EajQxhr240iJ9Upuo/j9zaxKvCr85sB6K/iym6i5iIiahfwvBLaKNWWBv3EA83iLl0OcbziE7iwK+VFEHd4htomfxW9iXZ5CDx38kkU8wy18H+L31223agjq4ik2sCTb41+4i6s4Ktv4T/lGscH2CnyqoWcbRhUS8ihXZX+u4FX5KdzHxeK/xmOcwPLQOu9lz3+eVOC46BfSxRMpeLXY+gjOPE4VP3BHFraF8zg4kNuZst6RaOG03O1qTM7twoGb+CpbpyMn1JmB3HdTUTkOaj5K5yKiisTziFgYij+I7Via1YNZ50E8hnvykm/igtHtR06jjUk3uC7qTK3jeISz+IgPO+Q8lBf/Bd7IKTUT/AXKuom/Yr6sdwAAAABJRU5ErkJggg==", 50, 12},
        ["MORNING STAR"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAJCAYAAABwgn/fAAAA0UlEQVR4nNXVoUqEQRQF4G90gyDYNv2CweITCIsYzQaLUew+iC/hoxhkMfsARoNBw7KCsIjHMuLwWzQtc+DCPfcMhzMMlylJdIhL3LSDjTUF+S8KhtrPcIFp5QP9XCS4whz3OMZj5QNMcI4ltrFV+wk+qskmPquZkTY+d4KXOn/FO94afdGEW+FpFHjZ+H1jD7s4wFEz38E+HqCk0yVpcIubkqSXFznD6Uh7rvpKkl7qOsk8P1hUfpjEusP9tUqSofazJHdJppUPSZROV+TXP/IFsqFsUJMYmAoAAAAASUVORK5CYII=", 50, 9},
        ["MOSIN NAGANT"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAHCAYAAABKiB6vAAAA/0lEQVR4nNXSTSuEYRTG8d+TYVZsSYqlwdJiyoLvIB/IR1B2ylpJWVCWFkrJTjKL2XgLeRdCdCyeezGMxcyzEP86m+t0zt117iuLCAUoYxyjOMdpQ28MfXjCW9L6MYAeHOESD/ho890S3vH67c1qVsBIBbOYaXewIJuY+kE/w5zcWL2EXoxgOFUFQ+jAFWqooxMTmEy9Voi04xqHOEj7athX/EcayXCTRcQDultc9IwlnMiNLWJVHrEn7GALC7hNWqHstksWEduoftMv5BkexAvWsIINuZmuNPMoz/4x9jRf6/eIiPlo5i4iliNiOiLKEeGvVwm7ydM91n29/L/hE8EM4YhbYPVlAAAAAElFTkSuQmCC", 50, 7},
        ["MP10"] = {"iVBORw0KGgoAAAANSUhEUgAAACEAAAAPCAYAAABqQqYpAAABkElEQVR4nLXUz4vNURgG8M8d94pIkZqdzZRSFrJQfm9MVv4ByUJhISuhSLKwsLCymVKSf2BqNiILI4vZWbixG42NhSipIYzX4ryX63bvnXtuPPV2vue8z3nf9zzf9xwRodImI+JIRLTG2NuxOxGxoTNvqsM2nMcFXMUWNLr8gQk8x9sBMdZiBw7hITQi4vIIyTflpv09SWvwGp+75g+wgMVGRPzAFD7iKfbiWxd5HR7j4JjJB+EDPlGk+46lrHIG53rIXzvkCtzFNM4O4VxSDj/VzEJaWcx9vMA7RYGfivz3cFFR6AZOrFLEKzzJ2DexdRi5iXlcwyJWcBptf/+/biznOIs5PMN25Z9fwZlck4c4gI194iz9/qq8Wq2IeB8FtyLicERsjojd6T+VvpM1cWuv6FF/pJ1RmmsNXuZaO8edNUFrizie45u0XrSVvtlXE3SisoiFTDQ/wL+cnD3690F/jPnsrh/iu559cWzUeLVKdPBliG9Web5735t/rsRq9ijV2PU/bseouK3028oo5F9aKtp9IuT0cQAAAABJRU5ErkJggg==", 33, 15},
        ["MP1911"] = {"iVBORw0KGgoAAAANSUhEUgAAAA0AAAAPCAYAAAA/I0V3AAAA9klEQVR4nI2RPUpDQRRGT54xYGknRCwtkhAsxE4sLCVY6wbcgavIDrKFVCmsFLEQSy3cgIUipjGVEH+OzR2dvLzifXCZmW/mcL+ZaagATaAN3AOPwCvL2gKmwLQZRg84BdaB/QpgQQlaA45Ke0OgA2zGegTcAaCmOvFfM/VAPVYn4Q3S2RwaZ1A/87fDOy9DbXUem29qkUEt9Uu9Tl4Rec+A1ZhfAD/Z3ebAE/D55wS9G10+1J2sS6oNtZHW6fX6Md4CDxWvvPBvKd5hjFeVH1NWtH2JeHsV0ZYKtRvAu7pSByqyaDfAd510OXRZ6z4BCTxHp1r6BZSjGC4UypD2AAAAAElFTkSuQmCC", 13, 15},
        ["MP40"] = {"iVBORw0KGgoAAAANSUhEUgAAACQAAAAPCAYAAACMa21tAAABWUlEQVR4nO3TPWtUURDG8d+udxVjAgFRREEsrCy0CUJSaSHYJq0Qa7+BX8BKSGdtYWGlNhYiFlkwXyDVClokIIJCwCKurzwW9wiLYO6JsmLhH4Yz5zAz95m55/SSHMdb3ZzEObzGp4nzBWzi88TZAF8m9gcxjzfY+kX9ZZxucB23O8ScwjrOVgjfi294gTE+aBvbxYy22a8NznQUmcO1fYoZ4/DE/j7e4yVG6JeYMT6W+jew20vyFEM02rEfKoEzpQsl6SZOVAq6i1lcwjFc0P7WbpLcSaLCHqVlJ8likotJVpMMkqwkuZVkI8koyVLJWSs55yu/ocF2he5ZXCn+UPsIeniivbwPi/3MgbI2VdMpgQ8q4pZxpPhreFVZ/8frfVcrqK+9aF2slnULz2uL/w79ipijuFz8x8j05NQJ2sFV3FM3zT+i5rIFz4pNnZoJ/VX+C+rinxP0HXZCsUHF4lUZAAAAAElFTkSuQmCC", 36, 15},
        ["MP412 REX"] = {"iVBORw0KGgoAAAANSUhEUgAAABwAAAAPCAYAAAD3T6+hAAABJklEQVR4nLWUoU4DQRRFzzataSAYBLJBIEDiqgGFAcEf8AEEAwnB8BVgSfAoBH9AEKiGYBpMHSEIaEJJDmJ3YTtst+xme5IR+2Y2d+59MxOp5NAAOsA2sAYIRJn58Hsac8AGcIM6aRypH8Z8Os6rFWnm7OYY6CbuUlol3BSSJ7gUiE3iHXgsqTfKE+z/48cWcAiclxQk7FtTvctEPlTv1YG6oy4n46Cg94UjLJwGPb5M6mfBus2qgo2M2RXgJAigQ3z8n+Fn7QLwVTrKhMjfe3gB7Afze8AQGAHzwFtSv60qmFrtJn3K0lejqtFNi3QdxuIFuCJ+UepFbau9v2+Cq3W7Sx1uAYvBPh6AXu3uiGPcBdpB/XoWYqngC/AEDIhPI8QncyZ8A6Aa7h5KlouLAAAAAElFTkSuQmCC", 28, 15},
        ["MP5-10"] = {"iVBORw0KGgoAAAANSUhEUgAAAB4AAAAPCAYAAADzun+cAAABXElEQVR4nK3Uu0odURQG4O/oYMSIhYogwdhFooKNTSpJ6wNYWvkAnvo0FiGkT5VnSBmJjdqInZWK2EkM4iUqFl5CRLfF3sIpjmf2QH74WcOstf912bNGCEEFTocQZiqeaeby83MhD7OoYxw92ErvB3Gb2IFXuMM17pvOPyT7Ab24roUQvuAbrl5I2o0VTGUW2Q7/0MCvAvP4mypthS68yxS+wes2/p94i8EC37FUIriOBXHkQ23ifuBP4jHOEk9wqqm5Ao8lSWEzsYFPOMI+LtEnTuVjEl/M0FPgd05gwkyyX8V738Z7sZMDjOUK1UIIubHDYpGdmEuJHnGIc3Gk93iTpVZhB+sh4iSEUGvhX03+/hy9jtx2MSru4xpajWk32YkcsSqJFzGCzy/495KdzBHL/XM94zixFXaS/e8dl2FXvIKsjqt81Tk4EPd6oCyw6qjLsCGu0wAu2gU+Ae6NAO3PKv5YAAAAAElFTkSuQmCC", 30, 15},
        ["MP5"] = {"iVBORw0KGgoAAAANSUhEUgAAACMAAAAPCAYAAABut3YUAAABk0lEQVR4nLXVvWtUQRQF8N/KovELK4X4UViISNSoCIKFihY2WqTxfwhWFmJhZf4ES1v7lKKoEMRGEAxLKhXBQolZwUKj+IHH4s2GRdbd9xZz4PLu3Llz5sy7l5lWEmNgBw6jg8/jEBRcxBnchHaDhSdxofj7MIs7eFFik/jSJ25bGcOnAXw/cQzTvUAryXVsGCKiVYTMjMgbB7/xHJfQbSVZwc7/vEldBN/wCx/bWC8xK/iBvWX8FR+wjG7xO3iilLMnZmoIabCI132xCVweIWY7Tqt6aBmro9T3xPyNd3hY7NGAnIN9YhZwv/iTqlPPYk/h6Y4SsYYkt5OsJrmX5FqSqSRG2I1U+J7kXJLNJT6dZGuS+TJ/tgbXmkmyO8mmJouSdMpmi0lOFTuRZFeZv1XmrzbhbeN97d9Y4SiOFH8ezwbkLJXv8SbE49wbV/r8x//Ieapq/PONmBuWR5KNSWaS3E0yMSRvqZTqUJOeWS+bK2Lm6q5pZbyHsg4O4CXeYr+qbEPR5KFsild4gDfYosal9wdOMvzoLZjPiQAAAABJRU5ErkJggg==", 35, 15},
        ["MP5K"] = {"iVBORw0KGgoAAAANSUhEUgAAABEAAAAPCAYAAAACsSQRAAABTUlEQVR4nI3TsWoVYRAF4O9eV0ijBuIFwUrRIigWKlgYJMTKJvgc1mLpG/gAikUE8waCCCoIFoKogRRBEBFJYadRlCSQHIudq5fFmD2w7M6ZYf5zZvYfJFE4hcN4qz+m8KSpYA53MYPbxR3EcXyquCnuJzYQ/MIZSS4nuZdkN/2wM1G7mWS7wQhXMehpYTjx3WDQYAsvcKJHo2Ws4iIWsYSRJJJcSPKqh5VbVT9XlkZJFsaDfYMVXMIHPMU7HNBubQo3cHTSBmbxfKxkmGS9TruT5Erxs0mmk5yv3KPiT1e8mMRYybx2nfAZX3FSu8ZvWMMOzlbNx8qvw1jJ/eq8neRQcd3nfc1hppsblu/rdcJr/NhjMy9rDvPdxLBknsNNPNijATyr97VuYpC/d2c/HMEXbOKY9v/6o6QvNvAY0101zb+q/4OH2kv6fZL8DULeHvZfhuAuAAAAAElFTkSuQmCC", 17, 15},
        ["MP5SD"] = {"iVBORw0KGgoAAAANSUhEUgAAACkAAAAPCAYAAAB5lebdAAABlElEQVR4nLXWPWsUURTG8d/EBCQaBDVELIKkDCkExVIUA4pfwE6wsPQTWFj5EawsRLC2UgxuFFEbbW0SLISoGNOIL+RFF4/FvcJs2Mnu3k3+cJm5c84855mZew9TRYQC9uEMPuFjiUCNBVzFWlPC6ABiJ3EFFdq4idd4lOMTOIDVPB/DCLawgc1tem3pYY/hFJ40Fa4i4nZO3ok5XOojr5QHeNUQiyoiVjG1R8V3hVF8tXcmH0qf/D9/G+YbWKld38J63WTjgs208SaPPzXxGzjY494F3O2R05Mmk0tYRAsv8GNbfATXJZMtvMQyjksPchrXMDmswbrJNTzLBRf1bivncDSf38EXvJU6wHt8zibndsOkiDgUEVVEGGDci8RmRMxHxGxEzETEiRyfyfF3A+p2HVVBMx+XeuEEnuNCl5wK37Efh/FriPfYsdP65bxkkLQ0uhFS3xvD2YIaHZSYfIxZ3MLTHfJa+Xi5oEYHJZ+7X6bxAd+kXf+7VKjkTfbLitSajuDiMEKD/GCUcF9anz+HEfkHQgfUlgZnscIAAAAASUVORK5CYII=", 41, 15},
        ["MP7"] = {"iVBORw0KGgoAAAANSUhEUgAAABwAAAAPCAYAAAD3T6+hAAABNElEQVR4nL3UT0uUURgF8J/jtAoiFKx14sJFgrgewm8QuIr2QR9AoX1LdwotRfDrOAtRDCpoEyiCRJRQM3pavHdkGKZ3/gRz4OFw33Of53DPe7lzSYyBh3iBBezgHTq4RQN3Q7iFU5zj7H5SkmdJ5pOoqVf5P2z2ZjXxBfv4VXPClXFiqEEL12jOpcr0KS5rGl7jaMj3LoKfeKCKGebxCL9xgzb20FWOvDgi0qUkb0q9T3LXF9dh2bPWt3+laFtl3WOSdJI0RhgOVrsM/J7kbZKNJMt9+vOivxzsbeJKdasmwUesq27gh0kaG7iY0Izqv9Xhqs5wbwrDUbjGLr4NCk0cTDHwc+GTf+h/sD1MaExhBl8LH0/aOK3hj8KPZ2XYeySezMrwU+HVWRleFtMb1ZM2Nv4CumVMM5mtS2kAAAAASUVORK5CYII=", 28, 15},
        ["MSG90"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAJCAYAAABwgn/fAAABNElEQVR4nL3UzSpFURQH8N/RIeVSRDEzMFEGxooHYGbmBUw9gJkpA0/gNXwUSgzExMxEknwNhOujENtgb8WV2z23y79W+5y11n/1X2vtdhZCUADtGMcyykWIBTGESczVSshqaKQN8xhDEwZxjXO8fMlrRheuatcLAm4rfCUMYBSHtRTJQgiLiTTxS04ZHQXFNQqrOKnwtYgD7Ejf1wi5OMGZKsXqaeIm2See8YR3casveEyxd7ym+Nf8B6zh4JdG2tP/PeS4qyJoHbM4wlvyNWEf/ThDlmLP4maJ12GkSt2GI0cfLtIpCdrFBpZwWsHpRK84gGF0i1O9xAqOsf3Hun8gF9e0gB5R/I7va67EFFqxJTaVpfyyf97CN4QQitpeiJiug/tnlhfsOxdfkhI2Gz/W+vEBSIjfes9qxc0AAAAASUVORK5CYII=", 50, 9},
        ["NIGHTSTICK"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAMCAYAAAAgT+5sAAAAxUlEQVR4nM2WMQoCMRBFX9a1Uqy00gt4EhuvaW+hF7GwtBREm0UUkbhjkYBBWHQnu8YHgT8hE/6HhMSICDWZAwvgCsyATd0N2iBX9ByAgR+7Zu3oyRQ9w0CPmjISiybIuEInRROkH+heU0Zi0QQxkf2toDFyqdBJ0QTZV+ik5MAEKHwtQOnnLe4YZcDD13fgFPQff+b0A0ZEtsD0i7UWOANdXhe+wAVPzcqIiAU6qZ1EcsuBJe6VFj/AHal3bXHfkn+jBNZPkrIq9nsKo+oAAAAASUVORK5CYII=", 50, 12},
        ["NOOBSLAYER"] = {"iVBORw0KGgoAAAANSUhEUgAAACoAAAAPCAYAAACSol3eAAABwUlEQVR4nM3VTYiOYRQG4OvDYDZCjNIwM0nK/2YWtiNZSTaUtVgo2bCgJAtbViwRs0HZizJslJ9SjI3IX/ktKYqY2+J5/STfV+/rS+469XQ65zx393vu520l8R+jH8O4MKlB8wLM6C6fttiM9dCE6A68xknM7x6nP2IrRmBKg+ZxBLvxvsrNrM4Tf8/tB5ZitSLmQF1FV+MBpuFAdb6FmziFtZiL7VXNd8yqeU8/RjEZLYy0aprpOK5iHz5iHgba1N7GJTzFIRzG4za1LQxhZRVL0KMIMR1jrSS7sA578aIDyVU4XxF8h2X4hF580WyN2uGV4oEj1ewFrXTnfdqCt5jdhVnjuKeofE0RaGcryQnlCdiDlx0GrFQ+3yR8UAz0HZ8xtQskKUZ9rih6TDHo3Lo7ehpXsEnZoykYbFN7F2PKju7HUTzrMLsfKxRBhhRF7ys7el2SOrE2yXAKziR5luR+kidJzibZkGQwye4kvb/09dW8Z1GS8fzEtrpEJdmYZCLJwiQ9VW5OkskNZnWK5b8QHWryZ1quOPEg+qrcG3xtMKsT7uIOHuJRkyflIi7jhu6T+x2jWAx1zfSv0Y81OPcNyo9lXlsJCwsAAAAASUVORK5CYII=", 42, 15},
        ["NORDIC WAR AXE"] = {"iVBORw0KGgoAAAANSUhEUgAAACcAAAAPCAYAAABnXNZuAAABDUlEQVR4nMXUvUoDURCG4ScSQcWfKoK1io0WImgpeBEWegneg4XXYSVaehGCYGdhWhFBbEQNRkULYSw2IUuiuxjMycDCsPN9h3fP7EwlIiSOE9xjH59FwsoQ4GAT29grEo2kYemJM4xiskg0LDhoYLpIMKy2TqGOBXz9Jqomw8mAahjHAT4UgJHB1XHTymv+v9WzrXPHut6/lRmrOMQ1JjAn+7KfotEHWDUHN4dFLLdqd6XuiEj5bEUndsr0qad1LZfPl6oT3tp6RDznbu4xIpaKPClWyZFsZWzoHbZ3nOJCNph1NNvFQcOt4vKPnlsZ5PGg/7ndPn1PeBj0En7FOVYw01Vr6rTyKpe/tAXfHswkRn5JJ08AAAAASUVORK5CYII=", 39, 15},
        ["OBREZ"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAKCAYAAAD2Fg1xAAABd0lEQVR4nLXVz0tUURQH8M+LoR8LS/FHRW3btzQEcScIupPaFq2ittEf0Lply1qq5NJFbRRBq4WKhWa2iqYQbAqSSErzurh3aJKZ3mhvvnDg3XfOvd/v97zLeVkIwRHQj7M169dYz9kzhIs169/YqlO3m3J3sY0zuIT2lF/HA3SkeIdH2SGN3EEfrh54v4W9RLzdYO8FnDgMWQ4CMuxgo1kj53EbN3CuQDFFYBX3SzlFXbiHWzhVIPkejhV0Vhnj9YycxjBGMYiTBRHW4n9MlPEWaykWoGqkDSNaK75Z/EIlxXt/BK+JBuoNCCVxmjxGTw5B9Tp8xTcsid0ZwOUmRQaMYSIJbhOHQ1X4ZiOhechCCBV0NshXEumT9DyLa2IDnqaaAcz8g+M7XmIOU1g8itA8lPDB30Z2MC2KnxS7X8VDvMJNUfxP/DhwZhnP8QLzWBb/DS1FFkLowXXxs3/EM3xpUN+LK/gsXrVddOM43mAFn1qsuS72AT7eZ3QJztt/AAAAAElFTkSuQmCC", 50, 10},
        ["P90"] = {"iVBORw0KGgoAAAANSUhEUgAAACYAAAAPCAYAAACInr1QAAABvElEQVR4nM3WTUtXURAG8N/fBGlRWZC9kiG9Y4sWQUH7Fq0K2kYEEbVtWW0k/AJFH6CgTUS0DKJtUIEISWBGGpHYohKyTejT4h7rclHRzGpgOOfMPDPzcO7cuVcSK6CdSY4vAT+YZG3d1m5l5BTOoQutmj1lbdo2YB+ezRpXitg33MZV7FlkzEl/gdgV9OIahrGr6O6im+aI6a0f2tHzh0mtwt6yH8QQXjQwa1RE9+MyOnGgDmgliX8rY+jGOLbOGn+H2AwmF/C3YV3Zf15Evln8Z1VfTmPof7ixpkxh5E80/3c8wgdVnxybA/MEo6o3b/08eZ6jD6sxI8uT+0m6GsPyegPzJUlH8Z1OMl3zfUoykGQmyWg9T9syb+sWPjZsY43zDLaX/T1cqPn6cQgDfg1fVI03hcdFF9OsdTmrGg/Keh43a/7hUnAEO4vtVc3/tqzTzcStJH14X85bVM+4KW/wDpdwokYGPpUC27C5Zp/AUdzFETzFHVzEQdVNbizx+1Qz9eXP6CV8aGe1O0l/kokFeu9rksNJWkkm58E8XKjOcv4gOpI8aBR7neRGkp6C2TEHofEkZwrpefP/AOBlSTxrU6/FAAAAAElFTkSuQmCC", 38, 15},
        ["PP-19 BIZON"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAANCAYAAADrEz3JAAAB7klEQVR4nL3VvWuUQRAG8N9dLipR9DQWgjGSWkUkECWIIGiRRktBxNJWsfYPsPJPsAj2BkSxUAs/UdFEECMookGFiBiMwc/kxmL3zCV4l+Ry+sCw+87uzszzzsxuISK0CGvxHe2YRhsqea2YddW1IgIl9OAQXmIfTuPHAr62YBgbq4pSCwgUcA4n83y5GJBIzkcHypjEBK7ULhZb4PgqTmkNCVKGOnENL/Auz39iEG+xwVyy5UJEDGG8CYclKcUHm4+5LioYkUqnHe+xHaNZ14UZPMEKRCEinmNoCU7K2Ik9LQq6iik8wq8Gey5hBz7hjdRvHVhXiIhbUpMtpus34wh6cbTOnml8kUphHN3SRfBZ+tOddc6N5bMLoTPb65UaHqk8VmE/bsw70IZt2Iv+PHbhKe7jDC5jDW6a7ZG7OC7V8TAuZvsT2NogwO5FkKhFaf7Ht0xiNfpqAu/PZB7gNi7kICf/YvQ6DuT5lJT2aoafZTKDeIxdSwy4HuZcLoWIeIWP2cEH3KmREYtL9z2pZ8akLK40+4ZU8FWq/WGNs7KY4Mt53oeHf1Yi4nxEHIuInojQhGyKiJlIOLvA3oEmfdRKOSLWR0SxVr9coyLiRMxidwvsNSWteBAP53F8Tqr/M1pBZBSvpT6oNN767/AbCJKhK/ppxRkAAAAASUVORK5CYII=", 50, 13},
        ["PPK12"] = {"iVBORw0KGgoAAAANSUhEUgAAACkAAAAPCAYAAAB5lebdAAAB6UlEQVR4nL3WTYhOURgH8N87mBkkyqTUmKKUyMeeElmxwUaxUBZkpWZnoVgoH2VlyYYoGytZisWsLEQ+8lVSzKRZIFNGM/O3uGeaG6+Zeedt/Ot0zzn3ec75n//znOfeRhItohsX8AOf8A4NBBM1u47ybJT5idJvYAl68B5jxe4JXmMfntU3XNiExCJcrY0/4nxtvBmnWjrW7PAWvc1eLFSd5ptKkQmM4FjNZhh9pb8cG+aBIHzAepxRRWgUP/GykWQM1/C1kPyOtTXn0eIE/Vg1TyQHVKm0EYvL3DCGGklGsHQa5y4cxAlsw2Psqb2/hE7cVSlxvckaz3C5EAkWmMrjyfZZJUgvxku/G4OSjCTRpK1PcjnJlyQPkhxK0plkUZKfmcLRJPuKz8ok4/kbp/+xx6zanxenE/txHFtwAzvwpmazvag7GaKHRZl1WFH8J8N2VlUFbk4TqZmR5FeSk0kuJhlK8ijJkSRd/zjZxZpCV6ZRYHXNrqcdJTtK7Peqbvpu7MStMt8Mu2r9p9Ocf1CV+LC1XSVbbQeS3Ct5uWYG2/tFyXPtKDlnxyTLZmHTX0gOtEOykdY/i61gE56r6m+fqXrbEjpmNmkLL1Q1sgOH57rIfJNkqvwcnesC/4PkbbzCHc1/aGbEbzIYXZKpnhe5AAAAAElFTkSuQmCC", 41, 15},
        ["PPSH-41"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAOCAYAAABth09nAAAB5ElEQVR4nL3WO2sUYRQG4GfiGoxGo0JQhAhKCoVsRETBRlQQLATBxkos7K0sLP0PIv4BRSyEgIhWYqWNl2BAUmgUQSGSRI3XmGzG4nxhQ9xdNpOJLwwDc+a833nPbSbL89wqYAdqGF8NcpzHBZzET6isgOwALoqg4TmeYgCnhZAhjLbg2IAM35d59jF0CkETmM8KViTDLZwt4twA8+jAJF5gLQ7iSbIfFkn6g314j8/oxyUcb1WRzSK7XzGy6PlOXMOpkkQQIog2GcMafErBwhSmRZUn8FuIGscgRitYh70p6AFU070vkeRJyBtsw350FQj2JfaIloBhnMGXRe/MJDHLRgU/1DPSCJlQPdjA9k4I3IRuzGEjPibOTpGIbmwXLdGffO/gbZGgG6GitYhmuIErQgQcQi/uiar1JFst2bdiFy6rCxkrFHETLBUxL/pvroXPVZxTFwHrxSztFpuoS10E0ePP0rWAo4UiboKlw14TM7OASdzGQ9EyvbjegOdRm+ctXhon2vRpC1n+7/79hbu4iQdiO5SFPjEnMCtmpxT+LM/zWbwW2bovhnC6DPImmMIWsQR68K0M0orIykwZZG1iBEfENqzicRmkHf6vCOJ7soBqWaQr+dcqimHx//UKH8oi/Qu3jXF9n30YrwAAAABJRU5ErkJggg==", 50, 14},
        ["RAILGUN"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAOCAYAAABth09nAAABuklEQVR4nM3Wv49MURQH8M+bnRlCiMJS+5EoRYhCQ2IVJCgkCqWOQiT+Aoot+A/0Go1OFAphFWQ3oRCFEIUoJDIbsmTMmqN4d7IvmzdvJm9ms77JyTv33Pu959x7T855IsIU5faU9xsl1wZ603DsxfaKefiVpI0+ZnEOr9FLa1r4m6SVbD000MRq4rYRaW4mSZGX4U+B18dpfMJSFhGPCw7KDtJOAW4ZcpifeJX0rSmAlREXAPtwoDBeQqdi/QlsS3oXL5KvU7ibRcQznBzD8f+MSw283+wopoEGvm92ENNAE4dqcpexqya3j881uWVYaeJYTfI7fF1na+GstcLQlVc1eIK3Sf+CBzX9liMiLkfEjYiYi4jlyHEzIq5ENc4Pqe3XC2uuFuxnNrKnNPBQXsaKWMRCzbspltCDOJqkqmdNjMHmvXX23fLU6RreP47jd4n9Vvrex72k7zS6uU6G9DQXI+JjRKymlHgTETMRMV+RWv0kZehExJ7C01+IiGyjUwue4w5+pPFhvJR3zWHIKubm8S3p++W/EVH7tsfAILU68nT6YO0wAzyt4Gc4ovxQc+m7A48miHEs/AM96SZT05tTrgAAAABJRU5ErkJggg==", 50, 14},
        ["REAPER"] = {"iVBORw0KGgoAAAANSUhEUgAAACAAAAAPCAYAAACFgM0XAAABFElEQVR4nMXVwSpEURzH8c+dJhFZKJ5ArJCFQrZ4CVkoD+Il7Cw8gb0FO1mwUUQNJWWaMSGhJMZiztGkE1cy91f/zu3+zv9/vud/b+dkzWbTH7WMK+zmnD+IcXSjVMYMen9IauAI7wmvgqlvALowiwXM4QH7KGGyHIyeMDnDNC5RRWzPAMZwge0Q1eAdY+XLoiOh7nzI3Qs5a3jBIpZwnSU+wSrOsZPYzXBb4SE8ox+jOMET+kJXImgtUWcjQG+WE2Y9FE+pEmK97V2m1ak45tEnVClhnuEuZyFti/7mb76JD6kOnIb4T9XD+JrqQCcUARpFATxGkKIAogoHqBUJ8IaDIgEOcV8kwBakjuJOaELrBr39ADheRQQ3V2w2AAAAAElFTkSuQmCC", 32, 15},
        ["REDHAWK 44"] = {"iVBORw0KGgoAAAANSUhEUgAAAB0AAAAPCAYAAAAYjcSfAAABSUlEQVR4nLWTu0pDQRCGvxyDN7QIeEE7BcFCCWplpeALWKnPYGFjIYLv4ANYio1a2Vn7CCraiCBEgoUekBgv0d/i7JF1sxtMzPlh2LMzc+bbnWFzkghoCxg33+fAuxWLgZvQjwEVgR3gIOeBrgFVYBfoBHqtmIA+429ZPmgXcAWMAffAqBX7JLlxT4OasTlcWJJcK0p6VqI3/daLpJLqVZG0J2nGU6/O7M26pEdJNavYnVM8lnQh6VhSwbLuv8BSy1uXXgEKnlY/WftXk1Ny/E0pMuscsOCJDwH9QNnABkjmWW0VCPy099Azp5qkVUmbJmdD0kQzbWw00xFnjqlOTNK8pEFJS+0ASiICZoEOpwFnwDawCHwBk8D1v1pqKQ9Me/ynwGW7IK6iAPQoK2AKnXJ8HyRPIlPosON7ACpZQ5eBfQMDuM0SCPANMWCr7GWj+gYAAAAASUVORK5CYII=", 29, 15},
        ["REMINGTON 700"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAALCAYAAAA9St7UAAABaElEQVR4nMXVO0sdYRDG8d/RLYQUIl4SG8EgCGr8BFokpAgWImIhBO3UKpBvIWJpk5DeQgSLJARioQQLSxuxEAtFQVEUjleI8Vi8Kyzrfc8x/mGKYWbefWZn3t1coVBQQlqwjC78KuXB9xFlrPuEzzjFEebxD3/j+Ad0oAz1aEVj7MMbbGV89o1kbaQOrxN+s9DIIQ7QgxfIoRLlqfoyJSaXcbVq0YBz9KFGmMYUCoLQEaGxH8LkGuPaPH7ipBjhabI2Uocv6Hb9bT8LydWqEna7JrZazGA2kdOLMTT9L4EJhvHttmCEr8K+X1mSTrSjGhPofxqND+LO+xzhJd7fEm/DJN4J6wRLGMJHTOMM43ibqh3ABjYziE5zgfW7EiKs3nNIcgqLwj/iABVCE3lhBdONlOPPI8QWRYTjB+bOCZf7KPYXErFDrKTy14qT9jgi4dOYxz5+4zv2sINdvMIgRuPcm9iO7dm4BPG6ST7TpSsKAAAAAElFTkSuQmCC", 50, 11},
        ["REMINGTON 870"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAICAYAAAC73qx6AAABNklEQVR4nM3SPUucURAF4GfZVzDIIolbqY2JlZYhhYVELaxsAulCynT5CalDGmv/ioWVSBoRC7Gw0JCQRfwKIQSyosmkeEdYYVk3umoODPfcmbncMx+ViHADVDGD99jDGproy/gZPmesV3iACRSo4Q3eVq5RSIE5vMQL1Hso8tooOsQGMJT8S57zWMLj2xTVBgf4mvxiIpv4k76PBZ7jYYqcUoqv5wPYwTQW8Tp951jFM2zjJyZxivUWATX8wlEbcQsY/odCNpJX88/vuFinXRFxEhFb0Rk/WngjIqYjQkTMRsTT5PMRMZa8GxvvMq8/IkavyqtExDYGMdJFZ1bwCod5f6Sc4LlyKu06fycosI8nyjFVOuR+wDv8bvF9S7t3FGgo9+0TlvM8wbGyw0eZ13S5iP8KfwHBduFeUw7c1QAAAABJRU5ErkJggg==", 50, 8},
        ["RITUAL SICKLE"] = {"iVBORw0KGgoAAAANSUhEUgAAABsAAAAPCAYAAAAVk7TYAAABT0lEQVR4nJ2UsStFYRiHn8tJhDAgg2xSShbJYpTJf2FhQcokm7/AJovZIGVCGe7AplgYDIrFVZe6pHQfw3lvJHG/+9bX13f6Pf3e7/eec1BpcBXUOXVPvTevd/VC3VQHfzKNGg2pRb+qqn7EXqs3dS2aQqWgklgjwCnQD7wAd0ARuAVagUlgDBgM/Q4wDyTfqF29/hbZgtr3i25KPVIroV1pJMaNgEvq0j/abvU0oq2o/SlGmfoYZrtqUx3MpPoUzHqK2XRAz+pMAncY3FkGTAPDQAEw9lq1AO/AJbAcz8rAVcILdQLMAqMZsA/0JMBV4DlB/xRMRwZMAEP8fbMbYDs6bAM6gUqdZr1AE1BOmdlUZP+qdiVwB8EVs4Q4zoEH8pnVG+M4+UcOcJxiViWf734CMwD0kTe3lWIGsAq8JeibY18ESo3+iOtdHep27fwJbGPXE3snskwAAAAASUVORK5CYII=", 27, 15},
        ["RPK"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAANCAYAAADrEz3JAAABz0lEQVR4nM2Vv2sUURSFv010N4tBjFFYVDbRIiKmF7QyCiaCf4ONoNhYWgVFsNLCQjSFNtYiiHYGIiEmjYiFqSKYQrGwUFl/JGb1s5gnPofZzaxm1AOXB/fc++49c2BeSaUD1IHRnHV1oAYsAZ+ArohfBiZDHuAF8LiTRQK2AM+A2roOmurALLD9NwbOAx+BXcBTYD+wDXge+CFgHJjJ6O0GqsCHVH4jcAS4DvSVUo7UgAF+ftEBYBDYGYaVO1j+G7+6EGMJeBBOwr1VYDGjtgz0A69T+T3ACrAXmC6pt4HhsHRPm8WWw1kBJLH0FbCbROgP3AcehpqjJC4uAg2gCWwF3gOngS9t5q2GMnALuAmAOmc2Guoj9bJ6WK2o5wL3VR1Su9QJdT7qu6GySnSrG3LU5Q7UaxkiLoYl0w0nA39W7QuxWd0RxKm+UatruWReIadSIl6qvS0a7qlNtT+Dm4ruuPQvhOxT76pn1GG11KK4V/2sTrfgD0SuNNVDf1tI3qiox9UTbWquRK401NH/UUie6FFnIjEr6nl1fdFC0u/IWmATcAc4GOWeACMkv91C0OrB+hO8A8aAqyRvCcACBYoACnEkxghwATgGvC1y0Hf7SvNx2X9kUQAAAABJRU5ErkJggg==", 50, 13},
        ["RPK12"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAMCAYAAAAgT+5sAAABxUlEQVR4nMXVsW/NURQH8M+vXpValKRSiVQM5E2NxWQTmyYSiVFMBoO/AoM/wCxMJGxiYCCihKliEINIeASJIvqq0vYY7q3ePO3r7yVPfZOT37nn3HvuOfd77u9WEaEGKtzCIh5iCZvyd9lf2qqs78KHvG4Age94l/WPaON1nSQKXMID3F42NHABmzHeMbmF+ayP4HjWT/S4aSc+5STgB/biqFRsiQpbMFfYhjGEmSIvWKgi4j3GOoIsZpktgm6vkeQvqfhB6cRJTJSMtDGdYw5hKz7j2yqFHMDLwtbM3x25wK94i+cNid4xPMZF7M6LX+BLXjiKN3nTm7iBu5jKm1USg3uKAtZDE/ukVlzyNyMkRn4W4/3YicvZPvvHExF3ImImIo5FhDVkJCLmI+FMRIxn2+mIuBcrmOgSo1OqLHXnd5UG7meaWl1Ob1K6R21cs9K3V6S+PZLHJ6W2qYO6zNWMVq/isxExFxFPV/GNFmy1ImKwX6fci/QyeVtENNfwXS/a69z/KKSKeu/IepjAM+lv1cZBvOpH4LoY6FOcaZzP+jCuSm/UhqFfjJASf4RD0kWeVLy8/xr9YgQWcApPcNgGFgG/Acl2LyU01kx/AAAAAElFTkSuQmCC", 50, 12},
        ["RPK74"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAOCAYAAABth09nAAAB3ElEQVR4nL3WzYvNYRQH8M+dYbwNGSHvbwuyYJSNxFqKlSwtFGvZSbb+ALKRjWRnhSkWMmSEpCQvCxuTJQsamSYvX4vfs/g17nXv5ZpvnZ7Tc87395zzO+d5aSTRBTbgMPra+K3AUqzCJwxO40zgOr7W5kbxsZtgsBJPsWZWF6TNuFfI3eKVKuj1eIH9WIy3xT5cxmtNuP2Yhy/T5tfgIK5iqFGryADWYl2RDTV9Y5F2lagjaLSwfcObMsJszMe7Jr4DWOT3aq0o8SzHaCPJbWxT/elWC8MkfmIBfuAZxrEdW2p+NzFS9H14VPwm8B3L8BmnMPWH9dphCJdwESR5mOYYT3IjyekkO5P0JzlTbFNJNiVpJDmf5GmNdyWJNtKXZLADv45FkgtNkjjZgnCi2I8lGShzg0lW17jvS4I9C7LTRI7XgviR5HGSOS0Id5NMJlnYxPay9p3hmU6kD09wAYdK/+5q0btLsBdjpd+nY6SmH/mH3v8r1E+tduhXJTIPt5rYt+J10T+ojtrJfw2wY/S4xA9q7XV2Jlurm4p0gj24rzrfv2O36ub97+jmgusEYzhX9Fm4jLk9XqMpel0Rqj30XPWkmcIB3On1ItPR64pQbfCjqkfgDjOQBPwCKfbHJlUgKu0AAAAASUVORK5CYII=", 50, 14},
        ["SA58 SPR"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAJCAYAAABwgn/fAAABcElEQVR4nM3UsUtWYRQG8N+nF00RBYMiEqQlGhyanBqE/oKgIRpbm42GxmhxaW10yHBz6y8ImqNSQSlycBBKw9AvsePwvh9e3i/8vJLSAy/33HvPed7zPOe+txURGmASD/ALP2vPOySt2n0LK9jBwSn5R/AYb7HUpLGqFk9hsHi/ju28wRTmcKfJBjXs4AeGJKG/MSwZMpqvNyQDJvChB98QLuU4KixkwhmMFclfcsFVx26fFX159eNPjjtGVgX/OF714OsIaWO/yk22dYsgOQSHWMVe3nASl4vctu6J3sI13OzRVMmzJE3w9IiIlxGxEX/HWkQ8iYgrEaG2rtdy5iPibkTci4jlon60qDu3VWFDOgsTWdv3mjO3sVto78fzHL/Di1yzj2k8beTkP0KFTWn029Ih3JNEvNctYgCvcV9q/iG+XVCvJ6LCIt44/oWehDF8lUQ/8p+IIAk5bJC/hVk8k6ZW4gAf8RmfpM/tQnAEhj3qWWVxduQAAAAASUVORK5CYII=", 50, 9},
        ["SAIGA-12"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAMCAYAAAAgT+5sAAABfElEQVR4nMXUv2oUURTH8c+EYOJKrGysUuUFLBMtLERFrLS19gESS3uFPIJgqQ8QCEnURrBQQRD/gBBJNhERhYiiJgZyLO4I4+7szmRnwC9c7rl3fnfOOTP3nCwiNOAo5g55ZgrzeIPn2MbvIe+/gO/YxD18LRNmEXEJexXO9/Ekn/8yh7uYqRV+O5zCi7IHWdT/JV3cwXucxE0cbyW8agKvlX/wCXQOk8j/5hkelexPoDPesrNveIVMut/ruNKj2cU17Bhw3wfwSaqnUuokEvgoFVu3MK/gAaYL2jVcze3p3PECbhU0k3iHl7XCr0kWEXvYKgRZHN382aBm8Binc/u2lNwX/MABNnAEH3CicO4GFlvMg4iYiggjjGMRsRuJXxHRGaK9H/+yOqLPgWNM6tGjcE4qNFIR/hyiXetZn5FqqDXGGpy9WLCXK7SrPetJnG3gu48miZwv2CsV2i287dm73sB3H03a72UpmVmp7VaxhM94KHW7pw189/EHRhD21effCJUAAAAASUVORK5CYII=", 50, 12},
        ["SAIGA-12U"] = {"iVBORw0KGgoAAAANSUhEUgAAACUAAAAPCAYAAABjqQZTAAABX0lEQVR4nMXSu2tUURTF4e9egpo0ioiCqQwWlhYWtr5AqzSpBRvLFCnzN6RLZyeIYmOlkjQ2NgEVsdFYSEBiIahE8gB1cFl4xOt4YcaZkVmwOa+9Ob+9zqmSKNqPKYPrBjbxEht4g60eNccxiw/YwxO8lqRKcjXJZsavx0nUWMRNTA/h0ij0zE+HL1ZJ3uPomIH+UJX8/lRjVgd3cGDiH4q+YBuH0Fa3hpWSszMA1C7uoiPJfJKnLZ+uk+RsksNJTiS5kkSSW0m+tuSvlvOh49fkWssl95PMNpJnyjid5GFL/l6SyVFA1cW6usvK61jAK8yUqMrZO6y22D+J8wM8298qdLcbHX9LcrBHN6danEpxcCRO1bjU4FzD5x69rONtY/0R9/CgODaUJnAGRxp7K33WLmEfHuEFvg8L04S63LXXL9TyqCC6VeNCY/0Jz//XZf2qSnIacziHkzg2ViL8ABDnNNdpL/l3AAAAAElFTkSuQmCC", 37, 15},
        ["SAWED OFF"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAMCAYAAAAgT+5sAAABUElEQVR4nMXUsUocURTG8d/sJmgSCdjYqNgFwS5WEdKIYCGSerGxFfIOlnmAhLRrZSBYiKUPIEJCsBdhwWZ3s8JqCNkIyaS4MzBZTYaddZ0/XIY5994z3zf33BPFcawA01jGKtbwFJUiie6KBwOs3RbET2F+NHKKk2dkDhvCn1/Ek5ErGowz7PFvI4/xBq8NVzIxoiH2p3xDC18zo4l9fOZ2I0uo41lO8iZOko9kucRvdAUj6XPxP7m+o52I7SRCW0msg16OlhtGtvAW1b54D5/wKBnv8REP8SMRWypRpms9xxHGMvM/cYh3aOCXUGqnmTWzOB+10DzSE5nAB3+b6GAdX3AtlFwDF0LnamMymSud9ETq2Oybe4WDzPs4ZoTLWxHq/kq4K6UTxXFcw25f/BgvStBTmAoWhA6RZef+pQxHWlpVrKCGl0Kr7JYna3D+AF43ThjDJPReAAAAAElFTkSuQmCC", 50, 12},
        ["SCAR HAMR"] = {"iVBORw0KGgoAAAANSUhEUgAAADAAAAAPCAYAAACiLkz/AAABwUlEQVR4nLXWu2tUQRTH8U/i3WwiRMEougrWYiHYSFCxUCsrCyEW+hdY+ehFwUoUtLGzUiGIYKMQ0qS3igYUtQyCSrYJPsDIsZir3r3srvfuul8YmJkz58xv3iMiDJjORkRzCP9e6Xmd9uMG5xh2DuHfi591Gmc1g2/FKezFUbzANWzUjNONKSxgtY7TWETM5k5fCvVbcByHsQs70JJmvPkfxPbiEc7gBq5XcchwCZvwDuewZ1TqKjCDCZzH6y72fXiT579jMsMnXBixsDa2VWjXwGPpHJzsYj+Np3n+Gz7/HsAo+YhbGM877UUDz/yd4W5cwXqxItO59+EiVjCJ3X2CNaW9Op2XA1+lw1i83e7gZp84dVgvV2TYXCgv5R1GxYBzOIJXuIsH0i31pNBmagChlRnH/jy/gcuqiz+IQ3n+PV5KK1beJstDauxPRKxE4l6NF3AiIpZzv3ZENAq2VnSyMILX+k/KcF+6kh7WGPdVHJBWaw4/CrbyuZmVbqD24NPcmwy3a/o0JZGreIvFkv1EqTwtDXZpAH3/ZCyi6pbvygzWSnUtfCiU17B9mE76UfcvVKYsns7P2CLmh+yjL78Afadxcy8/WcUAAAAASUVORK5CYII=", 48, 15},
        ["SCAR PDW"] = {"iVBORw0KGgoAAAANSUhEUgAAACEAAAAPCAYAAABqQqYpAAABlklEQVR4nLXVu2tVQRAG8N+VaLgIEREVCx8xiq0g9ilSWYqWYiUINpJK8F8QxFYE0VYsBbUJEhQLwVgJAb2FYBExRMVXfHwW95xkvSbk3AN+MOzuzM63c2Z29kiihZxp6VfLxSRT9XqTdjjd0q/Ez3oy0tBhD6ZwCF9wAg9wt8XhixhFb0WTPr4lWazkUpWmg/k/eJtkNslMkgNJVjIxWgmcwjg6eFaNNXZiX4uvL9HFbhzGWbxYqxxdbK/mvUI/hmMtDn2DvcX6Nx5hDltxvJMkxYavOI/ba5BtxvKQATzGFeyvuOsgbpSbyiC+4ykm1yEcwU3M4gimC9IOPulna9Dn14ahVpdlIcnEEH2+q7hol5Ocq/T3Cv2PJNua8NXvxB282jDiVVyoxs9YwnP9y7xU7OnhQyO2KuprQ2ThaJLlyu/6gG26yMRSU876PdjR0GFLkrnqkPkkYwP2k/kb403L8RrvG5ZhAvNYwFV8HLA/Qdltk03L0UY6Sbrr2F4WmbjVhK/pv+Of2K32/SAe4h1mcL8J2R+bdL9CKghLtgAAAABJRU5ErkJggg==", 33, 15},
        ["SCAR SSR"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAKCAYAAAD2Fg1xAAABYUlEQVR4nMXUPWhVQRAF4O89ryIEg+KDCApiY6eNYmNhChtTiGIhCKK1tZ2lpEgXxELETmwtxcJSsLEMgvaCPwHjT0TQ5FjcDVzk5b57JdEDwy675+zs7MyOJHra9b/Q9LH5JKO+ukp37MIULmMJr7Be9oZbOD+EQY97gUGSo/iBWy28YA+u9HXQgk94joeNtRuYxSU87nNYhUWca+G8xwXc7nNwB+zDafUjbuBIGa/i1Ca6dXzGbhzAClYqvGtx9g3X8KGIumINT7Df5HI6WPgDvC32FC8n+Kiwt2hVWG4hf8VxHMYq7qtreK7BWVX/nSZm1WXz75DkTsbjUZJqTIc4U/a/JDmfZEeSBw3dWpKT29zZxnatY3iDiyW2oTpdH/Hrj7h3YqHM76rTP43vDc5Pk8ti65HkWZJ7HSNfKK/+IslMY32U5ETDhv8jI2c7xjyFEV7jprqbbWBZ+1/bdvwGWBAPCE3D7DEAAAAASUVORK5CYII=", 50, 10},
        ["SCAR-H"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAANCAYAAADrEz3JAAABn0lEQVR4nLXWy6uNURgG8J/dcok4TlFy6nAyEAMyMZBLRjIgAwORDOQfMDFSyh9AiZm5YkqSsZJ/QGfiILl0ctsR59hnGayl9t59e5/v5qm33rXW+6yeZ31va31ijGrGZIzxVAP+qNgZY7xVlddRHzM40IA/DotVCaFC7XpM4wT2YRMOYz9eYkWOUVgas/aPuxL38K6CLiQj5/AT3b75dTiEg5jKoteM2ONIjrawBzvQw82ypIDj2Iw5HMO2FkXVQcQELmBLwfqMZLIr6f+GhYAP0lf533iEo/hlsAUX8SfnAQ9wH/N4XbDPbqzC91wf0Qv4NFT4W2q1jnQyRejhLbaXNPEEF6VDa4qnRZMBC33jJanfnxtvJOIr7uAMNuAxZvP8NYOn/lk7JkYiGOzDu5IJkqkvy/CnMJnz63iB1biCtX11s42VLoMO9uZ8HlcrcM/iZM4vSf08IV3Tb4Zq5+pLLIcgGeniMj6W5E3jds6f4aHB1um1JbAsArbW4N3ARukGOo/3LWqqhSovez9OY5f0qr8qWP8xNG7yK1QKfwGUvd7WolZqhgAAAABJRU5ErkJggg==", 50, 13},
        ["SCAR-L"] = {"iVBORw0KGgoAAAANSUhEUgAAAC4AAAAPCAYAAACbSf2kAAABqklEQVR4nMXUz4uNYRQH8M+9c2nUqAmNKUwoC2LNcoosbaSkLFDKTrIVZSt7Cysb6f4DGhvJgpqyUCSKhs0ls/FjTDOOxfvI4/KO973v3HzrWbznfL9P33Oe8x4RYcBzsoG27FyPiF1VuG2D41gD7UpYqkLq1Lx0Cw5hEgfxAN2ad5Shh7V4XYXciogDmMOXLL4xGduPzdmZVL/YqniOz5jH6eSpFK2I6GId3uJoMv0/MIdlbMeF5CfHuKJ5b7DQUTzRuSGbeojWPzif8EIxLuuxsy8/jglso3j23qpa/BP3cA27sbgC7yNuV720o5irn/iOE3iJDdhRovuKKVxOZkbxLuWm+rhHEv9uVVOVEBFX4he6NXbuWKa7FBGnUvxOFl+KiE1D2Pfa2JN18WKNms9nuvd4opjL+YzTw4dGnS1DRDxL3blao+J9EfEt6W715c5mHV+MiPYwOi4izkTE8YgYrShaExGzydirv+gOx+/YOwzjHdys+UhbMYsx3MBCX/6RYh+PpO9pPB18JkrQsPKRkvjjrON1fvhaHW+C5ZL4jGJN3rfaazDhB3/ZCvQhZGtMAAAAAElFTkSuQmCC", 46, 15},
        ["SERBU SHOTGUN"] = {"iVBORw0KGgoAAAANSUhEUgAAACUAAAAPCAYAAABjqQZTAAABa0lEQVR4nMXVsUpcQRTG8d/qriIhIb6AiFpIXiBFqqQ0YOFaBLSIrV1IEyzS2Nulj2lShVQKWogvIFgoKlFIwIAIKYIgJGomxZ2L191xV1x294NTzJk5M/975py5pRCCJirhGaZQxSAuo1XQi7/4h/5C3CccN9s8eWACqoQneICXmMXIfTa/r8o14xFMYAZPI2A79QuH8awz7GFbCCG3UgjhQwjhKnRP+yGEG9dXwZ8OZKeRDjBevL4LLON1YvEmPuJnHFcxJyv+/Zq1g9F+4FsDgFf4jAWsy5rknJs1NYAXieDfeCvrsJ3o28ERVhsc2kzf45672CpOFKHeYygRvILHGHPd8o+w1AIQDKMPo7UTOdQbvEsErmFelq2NFiHurDKmpb96FZO46hRMrh5Z0aa0rAtAZFDPE/6v0dqp/C2qe4J6cFLjO5W1+0WboXKYuv9cGV/wsOBblBV2u3VrpsoRYrEDELepLlP/AXEf0pvsdGTCAAAAAElFTkSuQmCC", 37, 15},
        ["SFG 50"] = {"iVBORw0KGgoAAAANSUhEUgAAACUAAAAPCAYAAABjqQZTAAABpklEQVR4nMXUO2tVQRwE8N+9RCW+go0EG42IoJggCGJlo42lKIJgZRG/g7WFrU2QdBYKCvkKolWKIPgmiiCIgsYHJhqieTgWeySHkMTc61UH/rB79szu7OzuSOIf1ekUHP7dv106jxvowiw+YBxT2FWNH0Q/FrAdB7C34sClRpJOi/qGDX/AH/wbTl1FN77gLY5iBM+wWXHtHD7jOQawH+vRwJtGkuPVZKOY7rDAflypRDbxSXFyKyZwdjlSI4vn9xRPOiyqR7kzG6v+NKI40o2XuI0XeIBNmK2L+t84hm1I/U79qLWbVb+5hBg8Ul7NDPrWsNgEvq4yPorXinsL+C6LGKlVktxN8r5qzyW5nmQgyY4k40l6ktzP6hhLsqfVTKuLulWrX5hJMpRkd420LsnJqr0zybsVBL1K0tuqoKWiblaVJJNJLq9x0tGK8zDJYO37vnYEZUmin1Gy4yKGMLmG+3IeRzCvvKJ5HMKckkftoXZMg0lOtLCjviRTFf9Ou66s5NSwEmjDLeyliWvYogTiqbZdWQZduNAGrxePlWS+h4+dFPUTOhukC3UWCCwAAAAASUVORK5CYII=", 37, 15},
        ["SKORPION"] = {"iVBORw0KGgoAAAANSUhEUgAAABgAAAAPCAYAAAD+pA/bAAABlklEQVR4nK3T32vOURwH8Nfz9PjVYhsz2YW4kJpyQ24oRSm5IJJ7Lmn8BWp/AuVGspuVWlzwD7g1saQIe8wdhYsRGxveLr7f6buHPdvkXafOOe/P+bzP5/05p5bkME6jH1OYRTceYxpf0Yk6Pld4+IQVOIoxNHEDr0peAycwjuOYxFbUsNfy8BSvcRVHsBP9tSTj5Y02LDPhQpjGfaxGVx2X8Og/JYe3GMYQxuq4idF/SDSFAfRiPToU1g7jFkbQbKAHp1oOf1c0cw2+KHo1g7Ulfx7X8W0B4W6FVSQ5mT9xL8lAkt4kfUm2JRms8GeTWGBsTHI5yZUkmxu4g4fYU7nFT7zAu3Ldh+cVflcb697jwtyiXtrR/ItFz0qLehA8qPAH2gjMR5KVSSYr5Y8m6UjSWdqzqlL+RCVuRxubfo869it+6hyGFI39iDfmN3KkMj+3lALqONiyN9Mm/hp+lPMz2LQUgd0te11t4idwu5x3YHApAtuXIUDx82fxAXcXE6glOYYtOIR1uIgni5zbh5eKJ9kWvwDzG+/7GHEBdAAAAABJRU5ErkJggg==", 24, 15},
        ["SKS"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAKCAYAAAD2Fg1xAAABgklEQVR4nL3UOWtUURgG4GeSIRFX0ESIEYKgIAjaxs4irQiKtYWW9v4GO/+AiJ2FIKQLWhg7BSEIiqQQmyioEEHRmMXX4h7JNcxM7iAzL3yc5duXc1pJ9IE9ONNQ9gDWcB6jOIzpGr+Fb1jGhy42XuLdLn7u41q7YVBj2IezeNpQB9YRjOMtNnFIFfhJvMINPOugO44V3N0lrhnMtZK8x1YXwdWynsLBPhLoB79wp8P9SPH5tYfuDE5joY0j2FCNwt8ObRUDT8q5jaOYKufv+Kkajf2F96XwJmqOPquqv9whiDW8KTTfI9hmSLKU5HGS1WzjdRI7aCzJo8KfT3Kl3B8v694kE0k2anZud7AzEBrBOcyp2vgQN3G9Q87rWCz7T1jCpKoz8EPVlRc1nUv/XemmSPI7yYMkJxpkvlgqfbmHzK38i9lhdESSYw2Fp7I9fpM95KaTbNYSuTes0er2h+/ER9Vjv6h6xN2wgoXaeVb1TQ4WA6rQhSTPk1xNMjqMjvwBBYyqLfSB7OsAAAAASUVORK5CYII=", 50, 10},
        ["SL-8"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAOCAYAAABth09nAAAB3ElEQVR4nMXWy4uPYRQH8M9vZhiNS64xIbGQrYWdlQWbsWQlGitlx5pi5w9gJVtSJHJdKUlsKLeiiKQRi5lcG8bX4n0nPz/v7zc/84Zvnd73ec45z/c5zznPpZHENDEXO/AY16c7yBRYh1tYiI4T7atBcqckeoMb6ME4FjfZfGr6LkKjqT3QBccKzMcQLnQybJQZmYUvTf3zm0hb8QHbcQIzK/SP8Ln8n8BJzMBSfCv7j2IDzuAl3uI9PpYyWvJMtuE+LnUK5DA2+7U89pXkVbiL9e0G7IBRP8tjDP0Y/AP/F9jUTtlI8grLpzGx/4F7eFel6FOk9l8E8hgPurQdUJRnFHtvHtbgCE5VeiS5lu6xM8mCUrYk+Vr2jyV5mORcks8tPhNJdiXpSaKGrErS204vyZUug5hIMqfJuTfJ6yTfkwwlWVn2j7T4na8ZQFfSp/2mhrOKk2UmhhU1+rzUDZZyHA+xTHHS7cF+bCzt+rssp3pIcrNNBg5URL41RQlNYjzJ6gq7Y002I/8iI40kB/2+2W8r7okq9CqycwhXsbvCZrjFfy2e1lvyKVBjFWYnWdJGt6Ylu3v/dkZ6aqzBR8WNXIVneNLU3laDpyvUeWtNhYuKV8BpXP6LPOAHvHrfSg5u5VkAAAAASUVORK5CYII=", 50, 14},
        ["SLEDGE HAMMER"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAKCAYAAAD2Fg1xAAAAg0lEQVR4nN3UMQrCUBCE4S8xRQQbG88gBIxXzpE8h2KVIij40qRInoiFSnz5u2GWZRdmNwshSJADTiN9zeea5EPKWKe6yBMFapxxwW3ecV6ywQ7bQe8jP8/C747kjvYLfUqs3xUtKlpH6UWrQjPyu8L0jf0rrWlMV5H/WEy0Ul2ki3UPNEUZDinIJnkAAAAASUVORK5CYII=", 50, 10},
        ["SPAS-12"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAANCAYAAADrEz3JAAABsElEQVR4nM3Wv29OURjA8c+9bkUUlTZq0DYsGEQkYmPBQBphE6PB4A8wicFgEpEY+AcMto4kGKwGiRgIEVRCIhHeolI/cg3PaXLcVnvf0ni/yc055znnPuf5cc5zb1HXtRYMYzw9w3iMGjsxkeRvcCKt/4JvDR23cbzNZkuhWmBulzDwCPagTPKX+CQc2YCtqV2BH3iI3ehv6Fvzj2xeiTO4kAuLlJF+DGFHMnwco/MomcKzhmwQW/6waY2n+IzvqW3DvbS+SYmNOI2LskQUdV2P4YqI4kjLjZabacwssmatzJEKB3F0GY1aCh/QQR/eWziTE7ha4WsXG7xrKB3E+tSfSfN9WIfVXehtsgmTomB8NLdw5EwTR2sI13Eom3yOS7iR2pMiSiOzLyYqURQOiPswlRw5jP14gSI9P0VBIC7saDYmCsVk6tfYh7eL+xwUWfl9hbHUv4nzuI+zGMAt3G2pdxte+93pJgPYKy5wBw+0LwZzmHXkmDhrRFS3i6OxCk9ENHuaShh8OZOd00VKe4VSGL45jTu49t+s+QtKnMrGd8z/Iep5SjzKxq1+vHqRXyITY0mbtafdAAAAAElFTkSuQmCC", 50, 13},
        ["SR-3M"] = {"iVBORw0KGgoAAAANSUhEUgAAACgAAAAPCAYAAACWV43jAAACMElEQVR4nL3WwYtVVRwH8M+b3pRlMhJikSJOk9BGCyqqjTBh5DJctAna9gfkMgKxNpIrdy4EoSBa5SYrFKrFqKCCpjAUgSSCzgxB4TTjgPNtcc+budx5781zHvSFy/2d3/mec7/nnN/vd64k/qfn4yTfJpkYgPt9x24bDk/hEP7GdizgIcbwFzZhFLN4B+/iDZzuM+f9Mg60kmxU3Gb8gWcH5C/gyQG5c/gUv21E4DhexXHsetTBA2IZl/GwleQSHisdS5gvIuYwgy14pjzwHBsKjWWM1NpLqhOYw108wAdoFf9bmG1jB14rIp8og7/BFZzCP6rjPIh9eK+HwBs4iWnsxyeN/nnVYi/gS3ytitM6XlbF7EequCXJz40M2p5kOsmxJM8nOVHah5PsT7IvybYku5OczSrOJXkpydNJ3s5aHClz98vehcId7fhGVpSuYgYX8T5+ws2yc1/gF1wvx3ILL5Yxi2Xn7mEr/rU2U3eUuXthp9UTnFjxJrleW8HWJEeT3Csr3tRntbtru/NVo+/xJHuSLNY4P66ze+M17t56HdyDz8r7dVUcTajqUT8cqNk3Gn1L+B1TmCy+F9aZryvaRdwdnMeHqmwaBBM1+9cenJsNgWOqot4NrW52G58PKKiJ5Zp9uwfnauOjb+KHHtx0s4e56k6pysYWVQnphqlGe1JvgQ+s1srFjnOYq25Q3FZlKFzDK324u1QCb3Ucw/4sDIIzqgQ8i+/W4f7ZdPwH4dnnxjgQtLwAAAAASUVORK5CYII=", 40, 15},
        ["STEVENS DB"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAJCAYAAABwgn/fAAABAElEQVR4nNXUuUpFMRDG8d/hxqUSQQSxtFK0sBDfQCx8CQsLn8DeJ/CCjY2dtWBhY2+njyCC4L4X1xWNxYlwcUHPuYv4h5DJZGbyDQnJYoxKMolhTCU7lC3UBEKZw6cxjxl0NCjgEuvYabCO7Isb6UN/3RhADzawgNkU94yzJOQw+Wp4QiXlvPOI8xR/muyLVKMpZDHGOUxgFGPo/SFnD4vYTcJu0Zma+DOyGOMDun4Zf4cRHMgbruAV1y1RV4Agf6eD3+y/YDPN49iWNwE3LdZWiIAjnxupYRVV7Cdfhu62KStIwHHd+gTLWMHVh9iI+zbpKkzAFoawhDX5D/PveAOhkDzBunVvSAAAAABJRU5ErkJggg==", 50, 9},
        ["STEYR SCOUT"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAICAYAAAC73qx6AAABPklEQVR4nL3UTUtXQRTH8c/FW6grlQSNwP+mjdTCTYsWvQBB8E0IrnwvbVu1THAZBb4DF7WqFtEmKhLEh/AhSuvXYiYwyf7Xh/zCcC8zc875nTNzpkniggzgNm7iFl7iU11rcB9D+Invdf5atTvCYZ0bqt8ZvMBrvKt7+tKihxvYqcFOcogPp9hfx1tMdQl2DnaxeoquP0nyJP35nGQpyUASSXpJVpK872B7UdaTDNe4fxtNktEWYx0qM4GHWMArzGOwrh1hCz8w2a9uysnDl1rp3epjTzn9A3xTruF+9d308bndYqRDIr+5U0fwGNtKYsvKHb+HrzWp/Sp685j4/0aL0XPYLeJR/e9hWqnss8uRdXaaJBtKs8Nz5cU53lx7SjM/wDieYu4qRXahxRvcxRpm/7G3UZ7Zj1eg68z8AnHM/AdN6FVoAAAAAElFTkSuQmCC", 50, 8},
        ["STICK GRENADE"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAJCAYAAABwgn/fAAAAlUlEQVR4nN3VTQ5BMRSG4edKzcTE1MwQWxFbuCuUWAGbEBOxDULUoBWGJW403kl/0q85X9tz2sQYVcoSLc4Fa/chd/q4ohZXk9wuSgUBG8wk5yfccMQuj7tgjCmGL3MNRtKhBmU38RTHit/WO/R+HcC3+BsjAVv15sigdMMmp0iNVWuOVangUX4vnYTzOQfJyFrhP3IH6RImezn8IfwAAAAASUVORK5CYII=", 50, 9},
        ["STREITER"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAADCAYAAADRGVy5AAAAf0lEQVR4nM3QMQ5BYRSE0XMlGlahVIhGp7AMicJ2rEGlsQeNNdgHUT1eCImr+AsUEtWLr5tkMpmZyMwV5l4k4k0HDqh9csMWPezRwQNXjNHWDBUWkZkDTHD+YmzhiClmWGKEIU4NFIWLctBd6VkrAzZYo4rM/DWsix36yvN/xRNzkSJRssjMKwAAAABJRU5ErkJggg==", 50, 3},
        ["STYLIS BRUSH"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAADCAYAAADRGVy5AAAAlUlEQVR4nKXSTQrCMBCG4adaf0AQqUtv4MITufQuXsiDeABXLgXrpohgS1w0BYUW1L4wTCYZMt9MkoQQRCbIsIx+7H8CjrhihDUWyONejscP9+2wxyXGczxRRT9IcY7CZz2Ed1FgirTl7O6zsWZ9a8ndqIdTIlE30MQlVkkIYevzJRprK96H6k1wgWFH3Uz9O77lhMMLwL0nKYwtr4kAAAAASUVORK5CYII=", 50, 3},
        ["SVK12E"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAMCAYAAAAgT+5sAAAB2ElEQVR4nLXUz4tNYRgH8M8dd0T5kR9l0k2xsUFpLNiRKcVGahb+grG0uwv/gS1LCzZENuxETSxGIhkWbDBK8mP8aOZeEuOxeM/pHsfBvebeb729532e57zv831+1SJCH7AT97EXN/txYa+o92g/jia+4hum8AN5NA7hAL6jge3YjBra2LR4l6vRK5EGRgvn3ViQHIdjGMaSbC+ifO4reiXyGZfxBk+wKlvns30OE5jGSykjWyViG7FDh3SONl50+f44VuNMWVHHmuy7gaUl/YxUOrJ9HPsrHmh26ch0hewT3ma+tDCPizhVYbsBX6ourkvRWNmlI3P4+AfdCv9XPrM4qxOwtTgqZWq+ZLtPIrK+IHuF2boUjZxISI28LLvkeaYn9cIenQzm8paUzSKJBUxmsmL5Vo3IdwUS8AFXcBB3S7ZtjGBLQVbDsIiYioTJiGhGxK6IGIuIdRGhtC5EBxMRcTiTX49f0ar4d6ArzwjcwDm8rohaMdKk8prB+yw6VzFWsFueZaLc2APDkDSBcvyNRF1KN9zGNdzDM5yWmrZ470jfvOwCQzguNdjJf9iO6vTHg5Iu8LQk27ZI33pCXZoClSOthMc4gSO4VaG/hDt4iEd+JztQ/AR21QEhh3ph1gAAAABJRU5ErkJggg==", 50, 12},
        ["TACTICAL SPATULA"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAALCAYAAAA9St7UAAABEklEQVR4nM2UIUtDURiGn3tdmwpb9F+MBcFgENP8B6bJgliMVsEg2FwXxGAUNgWzCGsyi8F1xeDAPEGfhSsynWI491x84JTvHN6P93znPahEWhtqorbVirqt1tVltaVW1UN1Rh0YxkksE5sfDc7VJ7Wn3qn36pX6rJ6pr+qpOgowMVBnE5WcWQM6QClv4R8YAUtAvwQsAgvABbAKzAUIzwNtijEBsAP0AVAP1Jp6rL4HjLhoumYZRCUFXoBb4AZICrrJUB6AFvCZixSoADWgPrnxj3kD1oHhZDFRY2SkHKDxF7vA3vdijF+rAXSJE/hrYIVsKl9IIzS7BLYi6A7JntSUCYhjBOAI2M9RT6AJPP52YAxkSz5bbrNGwQAAAABJRU5ErkJggg==", 50, 11},
        ["TANZANITE BLADE-ALT"] = {"iVBORw0KGgoAAAANSUhEUgAAAA4AAAAPCAYAAADUFP50AAAA3ElEQVR4nI3Pr0pEQRTH8YNJQYNYLItpg6CIPoBgEowW9xXsvoDdps0XEJNi9CX8gwhbZDEYbxJsH8u5ODvuZe8XDsww5zvn/ALRsxZxK+krLeNSQR9pBeemGc+TlnBWSa9YnyeeVtITthFl0xB7xX1USS/Yb9/bpgFu8IgtnKAppHccldu0h4Oi6QGT4j7BcR2jnljT5PR/+euM95U4miUhFuKPjYjYjGkOo4v8YRfjnHKB5zz/4Kpr1Td8ZOM11nLtr6xhl9hyh9XicZDVmXEnt/6OiKZI8Zk1k18tZmJJn30IFwAAAABJRU5ErkJggg==", 14, 15},
        ["TANZANITE BLADE"] = {"iVBORw0KGgoAAAANSUhEUgAAACEAAAAPCAYAAABqQqYpAAABRElEQVR4nM2UTSvEURTGfzNMmoVmYWWHFbJQklJeNpKVjbIijRIbKwv5DMrnICu7YYG1svK6kZHERkmZovGzmP80L6W5i5nhqdM5t845Pfee5x5UAiylZtQxdU+dDawLslZqIwVkgBFgCogBZwF1wYgH5PQAvVEcA3LASbNJXFB58yQwX08Sxbn0qwu/zGxU/bSED7VHnVOH1HF1Ru1TF9VOdV1tVzfVNnVLTaobaoe6EvVApUjgWc2r6ag4rSbUVbVFPbAST+qX+qq+qzn1JerxGOU81PBZtbtI4riseV69juLLKt8I3KtdMXUQOKcgur/AaRzYKSPwDdxE8VWVbwSywBIWBFWtiWULmlizSZr4F7+jliXUo6qX2A6oC7aQZTUADJedc8BuPYURQuKOklilsDEnm03iDZgGDoEJYB+4rSeJH3i4Mu/3nJ3cAAAAAElFTkSuQmCC", 33, 15},
        ["TANZANITE PICK-ALT"] = {"iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAA5klEQVR4nJWRMUpDQRCGv1zCE1ilSSOYPq0oCM8DeA8rz5BKvEkuIA/SpIwWQhqbR0Ah6T6beTiu+546MDDD7Lf/vzsTlYFYAh1wN3QANedK7SKP6iHqh+IcKpNCuQXOKhofwFvUr8CipjxTnxyP5yFlgDlwkvor4Db1L8BpTbnMRl0Xyu/9H4yBN2obwFp9TBd0Y3CTwDb6ywQf1PsaeJ2stuGAAj6qyxK8UDfJapNmGf5he6FuY7gJB3k+92uN3+BzdReDbTioPWkWT1n18FTdB7gLB7+tkB7uYx8O/gSW8PQ/oMonaJhuTL57J60AAAAASUVORK5CYII=", 15, 15},
        ["TANZANITE PICK"] = {"iVBORw0KGgoAAAANSUhEUgAAABEAAAAPCAYAAAACsSQRAAAA40lEQVR4nK3TMUpDYRAE4O/FB4EgFuIJBEVBUEirlnoGT+CVtBObdDZaxFpvoJ1oJWJlIWIjOBZ5D2JI8T/IwMI//8CyO8NKorCGSa6TDGa10gZLSZ4ywTjJWpLdVu8pwy8emvcxnnHaiqVNKnxN8RUMmv/idSSpk1zlP066eNJWP8lt0+AnyV4SNTZwjje8Ygt9PGIV63jBB3aQZqUaYxxUSe6wX+jNPNxXSTZx1mGSyiQheMfhQjwpjbj1YISjKb6N4nR6SS5n4r1IUnWZJFie4p/41ia1iNvpYuowyU3mXPEftSjMQJ/z9ZcAAAAASUVORK5CYII=", 17, 15},
        ["TAR-21"] = {"iVBORw0KGgoAAAANSUhEUgAAACcAAAAPCAYAAABnXNZuAAAB9ElEQVR4nK2WTWsUQRCGn9kPhCgRTNQoiAgGzGEPBhERPAfEH6DgzT/hRW+C/oTgSRBFkOBB0IOBHAUVA3tYBDUHUWNEWTWGDSZ5PEwFx2V2Zz/yQlPdVdVdL2/1NJOo9IkaUO93Uw5OAq+7JVT6PHAE2B92HagCAglQipzNsKXwt6+3Yk8NWIx5LhJ1EpgH9hQQ2wTGogCk6p0IgnnYAr4Cv3Nio8A4MAm87VSwAtwBjhQQy0Mt7BdgCWiRqgkwQ6rUQaAZBH8BH0mVOgrsA451I5eoLWDXAOS28Qf4AWzwr8UTPe5dBtbaOZESJ1GbwN4hyA2DU8D7HH8J0ra26J/cQ2A2s54GbsW8TtrqaUKBDvgAvOpWZJtcP1gF7gHPMr7dYdeC1AZwGnhOqsxLYAVoAN+BMnC8sJLa8H+8U5sx/6SuZ2J19Zw6pRKjor6J+BU1Cf+U+kgtZ3L7GqiLmeINdUI9oN5Ux9S5TPxFziHnI7YcRFGr6pM4ayBiKhXSuzIO/AQeA99C1KthVzJCH84R/3LYB9FOgOvAbdKvcWBUgPsFOUtt5A4BnzO+EdIH926sz0TOtWGIAfQi79m2O3mpLV5WL6o31Bl1Xh0dpp3ZO1c0qupqhtxsh7wk7t+FnSCmktjbX8kc6XOxADyl4G9ip/AXghhMT6fnhg4AAAAASUVORK5CYII=", 39, 15},
        ["TEC-9"] = {"iVBORw0KGgoAAAANSUhEUgAAABsAAAAPCAYAAAAVk7TYAAABLElEQVR4nLXUvy5EURAG8N+yJIhGgo7YSkOCR1BIFGg0Qq33AuIF1AqtSiFR2HcgKiQKjYRi240/iZUdzb3J3Ws37rK+ZJKZc7453zkzk1OKCJjCAUa0xweeMvE4ZnCJITTw2Savgn7s47aUiO3iqINQL/CCal8SrP2jEAygUk6Cxh8Pe8VF4g9qbUcdx6imYpdY/6XQAzZw9yMzIlI7jVbUI2I4s59aM8fbacNpa30Z3dHcPc7wVuBlzaIlSMUmsJzbOyl6SFGkPdvK+FDDGDZ7qpbU8yrXh8MOdR+KiL2IqGW4K0V7JiJm4zuWOiSUEsHHDHehmwHZzj32HtedCoF3WgarqwFZza31fDBSlLGIacxjDucF8koZP4qKpR9xN+jHMyaTeB43RRK/AHQWNXJ8THmUAAAAAElFTkSuQmCC", 27, 15},
        ["TOMAHAWK"] = {"iVBORw0KGgoAAAANSUhEUgAAAB4AAAAPCAYAAADzun+cAAABBUlEQVR4nL3VTyuEURTH8c+MZ6LGiMlKkmIhmXdgKbGQBcnCSnk1rL0FC3kTY6GsLa2lNJspGgzH4t5iMTWJeX51O+d26nzvuef+qUSEErWHK6iUDL7HOh6rJUKbWMIRlAluZbtVNriZ7Srl9ngWT9mvFxjDGZZRQYEPvKOW42/ZyvF2TtLAGm6GQMdx/GPeqETEJfb/WM1vtVhIq21hTqq4ik/0sz+BF6niAoFrdDEp9ex2CKiGTXRyvtcCPaz8az2DtY0TzOC5wHkJUJjHg7STvbKu0w5OMS0dyL6IGNWoR8RBRLTjW52I6EbE1CjBGxFxF4O1O+oHpCqd5kPpc1iQenzxBbos7//aspntAAAAAElFTkSuQmCC", 30, 15},
        ["TOMMY GUN"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAANCAYAAADrEz3JAAACJUlEQVR4nMXVO2iUQRAH8F9CIDFGjBEVbMTCF4gWPgorDUIQGysRtLGRFDYKEhAEK1EQIoKCiNgIIgoWioXRWFlE0NiIT3yALyQEY2KMmjgW3164HF8ud2fhHwZmd3Zm57WzdRGhRvRhY+IDK/ASHWjFlVoN14DDdTUGchRHUF+09wUjaE77I1XafIAx/Ek0kYgsURMYx+8c3c6GKi8roM3UIGBhouJ1HkaKnGlGY+JvYFQWxHjam4V5+CwLckI+LlUSSBs2YzVuYS2W55wbw0fMxqIy9prQkvhuPEv8CVlLDuAmdqR1AaNYV3R+KiKilOZExPaIOBkRjyJiIirDxaRfFxEXcuSfIuJpyV5H0b19EXE8Iuam9cGSs505vk5Sg6x8m9COLdiAalruA3rQVcgNfpac2Sar1gDeTWN/K4YT34bdJfK75ZxowBMsrdRrfMVt3EMvXpTIF2NP0foVfmEIq/AGy3LsFoJoTbbXpPV77JIlbHpExPMKW6c/InZGRGO5EkfE5SKd1xHRUiLvnqa1CnSqSD4aEQdmuG+ytX7MUIFhHMJ52UQph/UpewV0qX4MLynkWPYXdVeiVC97I9OhV1bic2YOgmw8Fj6mh7hfiRMlOCObgI+xt1KleszP2R/CftkDfFuFE/3Yh2+4Lnvg1eIOVuKsaoZOTB2v3yPidEQsqKQvy1BTojzZsYgYTNT+j/dMUl1E9KSYruEqBmvI4n/HXywSWo5LRNnyAAAAAElFTkSuQmCC", 50, 13},
        ["TOY GUN"] = {"iVBORw0KGgoAAAANSUhEUgAAACAAAAAPCAYAAACFgM0XAAABpklEQVR4nL2VvUpcURSFv3EUB3SCNmqllTYW5g1CClstYhNEBoKFVtpEA5oHkITkKawstEmXwgSClURFAwmMQgIWEiJG0IyKn8U9g3fM9Tri6IIDh3X32T/r7H0uKjVYPepU2OfVZ9WevWvgZnVe/aOeqDvqZ7XzvhPIqWPqhnqg7qo/vURBzaqP1ZlaJpBXX6o/QuDTWNDvVuKfeh72k7VIIBMLsuz/OFV/J/BlvA+qVPit42bUA8PAOtATuCxwlmD3K8XPJLAINFewKRXn1HF1+5pqd65wJ+pmigJlLMeVyKgAXUB3yKkb6AMGgY6ESgQywCfgCVAC/gYFWm/UM8IrYC6uwEIVme8azXqXuqUeqmtGzWjYf1Rn1dEYn4SS2mdowg51NcW4aDRyOS+vZ+SKzZ7aojaog8GmYPRGlK7xu642on5NMXhuQueGQB/UYbXJqGLUdrVXbVP7AzedUtxcRn0BDAHvgG/AMbBf5V2WkQeehn4QOARWwre64Hsi4dxRuQnvG1mgSNTscby967/gNmsgJv25+sbYGD4UloBHwGvgC8AFDJdenNPvBQ8AAAAASUVORK5CYII=", 32, 15},
        ["TRENCH KNIFE"] = {"iVBORw0KGgoAAAANSUhEUgAAACwAAAAPCAYAAACfvC2ZAAABoUlEQVR4nMXVvWtUQRTG4WcXDUSM6dQQKxEFK9FC0ogGRawtLARB0CJgs0Uq/wFBsLHQzo8igoWFpaKFjVVSiChaxELED9AgSr5QX4u7C7MGdtXd1R8M3JeZOfe9Z86cW0uiA1OYwBCu4gXOYwMe4XqnzYNg3S96L85iBTPYjlOo4xaCBt5iGkfxGLvwpLlvsCRpja1JbiYZTjKe5HWSk8X8TJKLhd6SZC7JjSRTSW4n2VnMD2TUC++HcA1LeIO7WC3mv2G20BuxgNO4ojqZc4NMLu0lMYpaoZ9rN/wdc4Xeg0v40dSfMdx/i+2UGR7F/kK/0/4Bm/Gl0AfxrNDrsanP/tZQZngS+zCvymYDixjDbhzDHVzGDpzBuOpyruDEvzBca7a1STzoQ7yXqm5ywN+bX8Jy8/kjnqpK8SGWa0kuNF8w0ZvXgfMejbqqNkf+s5nfYQRjrZI4jPt9CPoK93BEdWE7/ka7sICvqm41q2qzH1qGh7CtJ6vVSU3jeI9xOtLqEquq7tAL8/jUY4yu1Lsv+SNq3Zf0Rr8NL/Y53hp+AosL2uQMlUOhAAAAAElFTkSuQmCC", 44, 15},
        ["TRENCH MACE"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAOCAYAAABth09nAAABZ0lEQVR4nN2WMUvEQBCFv7sEDhuxtRHBzsI7uEpIp4WlgnZ2ooWFxWHvPxDxF4idCoI/wsZCgyDnoaWlYKGggnfPYvdgEzYa8DaFD5bkvZ3ZmWFnN0ESFYwFSc2c1snxuqSdnLYiabpMjDrVYA5o5bQ1YMzhM0BSws+Lqgpp2jFEZPnsDzZFmhfxX7L7BVPAkn1vAW/AluUNzG6sA22rJcCkYwOm0HFHOwNefMFqkkaUd3Zd4AHTLqPEBbDsm4iBTWAeGJDdob59Ro72hWnHYUvK2kWY5LHrDBh9EQATRRM1BdqSQHgFroB7TKt+Aj2gW9VhD44Yc5BCtNZGgHyvgUXfxL857KEKgez1u43p6WPLG8AhcAB0rZbYJHedNTrAE3BqeeH1W8XvCZKOJO07PJL0LqntaKuSejm/c0l7ZWKE/CC6uAWeHd4HUuAuZ3Pj8UvLBKiqkJRsIQAnwIfDH4FLj19aJsA3/5h5NAUQJ9wAAAAASUVORK5CYII=", 50, 14},
        ["TRG-42"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAICAYAAAC73qx6AAABGElEQVR4nM3TvS5EURDA8d9lKSQSlY6EkkbpBbQiEQWJmkajIVFphCfQSLyGTqIRhcRHoyQKIhIJ62sTRnFPsVjZ3btb+CeTe87MnDkzc+eICC1IKSLmfuimWoxZSLKIUJAhLGAROygjMIlLbCe/F7xjGKPJJ0vfc5wUTaCaLCKWUUrBB9CPCp5xgQMcV50ZxCw223D/G17bEIeoz2dEjKVfuNKAfzNsFBmjWlJqoNayfFQmsJ50V9jHNaYxUuNcBTf4wEPSPaZ9GT04Ldj/XzRSSG9KqBsd8lHbTcmcJdsabtP6LtkPU9J/0VnH3hRZxLfXvoentO7DuLyQalax1a4E2kUJR/LuZJjHfZW9CzNYkhdF3vV/xxeS+4V6sDXUbAAAAABJRU5ErkJggg==", 50, 8},
        ["TYPE 88"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAJCAYAAABwgn/fAAABUklEQVR4nK3TsWtUQRDH8c9dDi+agCKS4sQINnZWYm8n2pgyTQJ2afKnBNJaKf4HSgpJI2KpcqggmoBFOC+EVL4mMTFjsXv4PI0ne/eFZWfn7fx25g3TiAhjcCuvGVSYRQPHOMLZfO8QF3ADbbTwGlNDej3sZruNc3ic4wfcxzWs1QMbYxSyjtXSYOz7s5BtvMBJPs9jBw8xSPQmrmAPB1mn3ypI4C42CuKGufQXXwcX8SOfD7Eidf2z1KF5qdBKKuQV5hoR8civdv4Pt3E92+dr/i/oZnuh5j/Oj37L56t57+PrkPYnqQN1WriMxX9mFRFLEaFgnYmIKhK9iHiQfZ2I+BCT5emofJrScJYwi+lsL+OZNPRHeFKoeRrdURdKZmTAnRxf4SW+1769xZsxtId5PupCC+8Lxe/lfdPvRQx8m4W6RTSlv1fCFj7i3eTSKecnEwDv8Lz2H3MAAAAASUVORK5CYII=", 50, 9},
        ["UKULELE"] = {"iVBORw0KGgoAAAANSUhEUgAAACsAAAAPCAYAAAB9YDbgAAABO0lEQVR4nNWWvUqDMRiFn2or/lGLmy7iLtLN0QsQr8DZW3Cou5MK3oGboqvFC1AER0FadHHoIKKIVUv9KT4OXwpdLBYjbQ8EzpuEcHJySIJKaHn1UH0xwYN6oC62zOlqa5Ilte7P2FMnuy02pU4BZWCC9rgHdoBrYBZYBhaAV2AfWAv8/6ButHG0E5yomQgODqoFdb2Fb6rDqBeRxKquRhCbVcvqlZoLJtyqMyn1HRiKdFBnwDZQDXUN+AAEnkLfG1APvAp8BT4ArAAFYBzIAhlgJIwXU6qRhP4FnySbGmsz56ZXxP4GjYFuKwhokESmHSppEvtjZnYLeA51M7OQZFY6y2waGA3jpV68DXLqpVpSp9Vz9U6dSwNFYD6Cq6fAboR1asARidOPwDGJy5W+e8H65m/QWuTt8V/XN9cZJHogLHAJAAAAAElFTkSuQmCC", 43, 15},
        ["UMP45"] = {"iVBORw0KGgoAAAANSUhEUgAAAB0AAAAPCAYAAAAYjcSfAAABbUlEQVR4nL2UO0tdURCFvytXBUUTIihWvhDEWKRJYyVYBC2stBEhnXaChVj5D2wsLK3Fylb7QIpYqohCksJCQS8+UCQ+Pos7moOo51y5umCYzbBn1pq9Z29USrBGdURtLTEPdUmdUsmTDQ3ABDANfAR+An+AC+AKqADywDVwC1QCy4n8ZmAI2AVIU9ekTqqHlgdzKjn1FFgFaoCvwG+gG6jPeAql4ATYQd1OdLYWfly9SSg8U9fD9jN0dK7uqZexvlD/qfNqVZK0Vj1Qe9WFIP0VAuoSwqpDhFGsoF4lCPvUKp++ri4V1CN1IIhUj2P95ZnEDvU2CAcjtuD/e//2TN6DEUoL6g/1u1qTkjQbxVfUdrVT/aDORHwsjTQPfCpxGIbDL1Icuntshu9JK5D1nSbRD4wC64/iG+E/pxXIqa/gfboWcAwUgLaXNlaUixEQ2AJaSHnj5SSF4hHnKH4u70aaaZjeotO/QONLm+4AiM1w4f2iFXkAAAAASUVORK5CYII=", 29, 15},
        ["UTILITY KNIFE"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAICAYAAAC73qx6AAAA9UlEQVR4nL3UPUqDQRDG8V9C8CMaglhYBNTaUkxnYWflDbyHtY0nEFurXEALBcUTCPZiaSMaFTGSiGEs3hWCRUDerH8Yltkdnmd2GbYSES08YBVbWFQwixlMo44pzKGGBqpoptqFtDbTfiPVdXGFU5zjUS4ioh0RJxExjLz0ImI3IuSIKtrYSS+ZkzqOsZZDvIbtHMJj/M6UG7E+nnCLa1ziuYav0u39jeUUk6KPgyo6ExT9b14U/XcqEQF72Ff8ULno4kYxAYcYlNAK3OMOQ/i5CCxhEyuYRwsbWE/nPXyOiA3wMZIP8fbL8DWZXuAI7yWaH8s324HgmwHy84AAAAAASUVORK5CYII=", 50, 8},
        ["UZI"] = {"iVBORw0KGgoAAAANSUhEUgAAAB8AAAAPCAYAAAAceBSiAAABbUlEQVR4nLXTPWuUURAF4GfX9aPwI35hYZNCsE4nWKTxDySIlcRfYZVeEH+Bnb2oCCIBK7XQRrSyEpIiImgiq0bJBuOx2Bu5rG42+5ocGO68885wZu6cK4lid5N8TnKhiu3UDia5neRkFZtIcj/JpWF1HX2cwuXiX8ctTOAIjuMw9huOn5jDO7zEOi5iBt/wAt//qkrSTjKfvUM3yc0kc4OTt5JMYnGbqXYLPbyvAx3M7jHpFzzBEm7UP1pJPuI01rCJY6XLHziKp5gq/r5S9wFfS82JUtNCBs7HeIB7/2wrSa/s5kqSO0lminolmSqq7VY77CU5l2Sy5DR5HX/Uvo4DmMc0ulVvr8v5q4qt4my5zkOlthHahXwT1waIayxX/ic8wwbO43lT8q3Jr+LNNnlnBr6Dt01Jt9DWF9erEXmNr3YU+QJWRuQ9rPzO0KxxMYY6F4raHyVpNVV4be0x+two55r+zv8b45DvOn4D3E7UPCcemn4AAAAASUVORK5CYII=", 31, 15},
        ["VOID STAFF"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAJCAYAAABwgn/fAAABIklEQVR4nNXVv0qcQRQF8N+nrmgMcaNg0qSxSiQEQh5DUgTyGkKKbCvYRPBRbNIFOyshATsLm/wjErTdIlsoy0kx88GH1Wqje2C4M3fuzD1zZoYriSlrL5N8STJM8jPJxyS9JokpwgfsYQaf8RV/cDV3h6QmxQJe4x0GuMBbHHeD5rCOFfSr7/E120dT+7MY4W8d/8PlDQhtYIg1LNX8a3XONR4wj+fodXw7+FG5jFtnk+QcTyckc98QHGG3SbKoKNLah4oCy4piy52FPUWF7xMkafdrsYAXyo30FfUbPMGDGrPayfeo5numqN9iG4fKSxjjFKNp+OxLeIP32MIZNnHSDZqGg3QxwCflSe3jG35jfNc14TbtVZKDWkd+JRkkmf8PguhkfiyUgawAAAAASUVORK5CYII=", 50, 9},
        ["VSS VINTOREZ"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAKCAYAAAD2Fg1xAAABi0lEQVR4nLXVv2sVQRDA8c97XCBiLIyghSiJoOIPRFFJq4ilRcAihYj+E5a28sBWCwsL/wOxFkQbCxFFQhARsXiCIBhDjEQhY3H7yL7z1He+8wvLzTAzuzO7s7ediDAmW3AVO5I+ieWkr6KLCXzC4UpsB9PYwCxu4RG+NFj/PC52xizkAG7iwjiTtEGB7VjD+ogx05jHOezF6f+TWjM6EfEW+1qabxWPlcXuwe4anz6eZ+OrssUGbGjWWhOYKvDSZiHruI2PmeNxLCT5He5g0I9HcSnJkRK6nuIn8aay6Am8aJDk6ERELzbpRYTKKCLie7JfqbE/zOL7ETEbEUci4lBEvI5h5mriWxldfMjq2lpT607l8cGzGvsgJnBGeWqLWMK1iu/MP+73X+kavh+nanxOZnK/YpvCsSS/92sr3Tfc7zPNUxyNAgczfQ73lDs64HIm38XTTD+rfEf4fe/fwA/lJtSdaCsU2IZX+IYV7FJe1FA+bE/wIPl/Tt/l9N2fzZX/IHJ6rWX7B34CvKzpPjgLsUwAAAAASUVORK5CYII=", 50, 10},
        ["WA2000"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAOCAYAAABth09nAAAB8klEQVR4nMXWT4hOURgG8N838zWN5G/5hvwpyWiYWCoLsrGylVhIrOxmI3sLpVlIItbWJCtJGtlIqSHF1JSMmUgifTFjZnzX4j3T3JlmuN/9ME+d7u2c+5z7Pud9z3NOJcsyJfEaNXzHAJ5jM16iG6dwAyPowSh6U+tBJ/pwuWwAeVRaEPIe61v8f5+/JKTaAvcFxjCBxxhCP46hA8vxLT2viKB3Yxd2iEXYiiNN/PMgVuP4/IF8Rg5jlSiZP2EE21KAVfxMwXfjFRqopG/bsBOXcBGfU38/zjYhYoazH3sXEvIQ0ziQgimC8cRZ0WQgP8SeeoqpNE8z2IcufMKG/EAly7IptItVbC84YUOsdFncwccSvI1CyB7UzWa9URXqukR5FBXSKuoleWO4L5zvgVkhWSXLsiFsF6kuWlqtYhzLSnJv4RBW5jvbUMZ/3+JNjjud2m08KcAvK4KomvPzO6vCqVi85jOzKYSbOJHer+GMsOC7OJm+vYrhFoL9He6Jw3cO8pv9KM4JYR1iQ1/HaVF6MxgV7tHAI2HDveJcqAufH8DkP5GxCCpZll3AV+Hxm0T91kWGJoUZrMlxBrFFlFIt9a3Fl/8T8sIockXpxDrhbDV8wLPc+LC5GVsSFLmiTOBdajMYFNeNNnHItQv7XjL8AtVxf+1zfjOnAAAAAElFTkSuQmCC", 50, 14},
        ["WAR FAN"] = {"iVBORw0KGgoAAAANSUhEUgAAABgAAAAPCAYAAAD+pA/bAAABKElEQVR4nLWUvy4EURhHz9hFPIBGI5uoFEQkEgodWglPsK+g1ngHBQrRaCQ0JFiJ2JAgNP48gETjFWx2j2L3ymQys2Y34yRfcyff+d07882NVLowD6wCi8A00AQawBBwB1wAN8BzpkFNq1n12vzcqgtpruRCWd1Rmz3IAy11Wx3MChhWj/sQJzmKh8TlVwXIA6chJARsFigPbKlEagV4B0a6jVMffANTkXoJLBUsD5wNAAfAyz/Iv4D78A0idUWtFfDuX9Wq7cFJ/dFm1EO1EWtqqY/qrrqnPnXW4s/P1eXOZn99kdlXRQXYAKpArXPkOSACHoAxYBI4AfaBt1RLygmSNaquq/XYjuvqmlr6qz9PQKgJ9VP9UMfz9pV7mIoS7dlu0r5Nc/EDbRMgY2WoQNkAAAAASUVORK5CYII=", 24, 15},
        ["WARHAMMER"] = {"iVBORw0KGgoAAAANSUhEUgAAACsAAAAPCAYAAAB9YDbgAAAA9UlEQVR4nM3WsS5EQRTG8d9em3gAzSYKoVRpdRq1B/AEaLyAV0A8gMYL6LYguzReYAvR0GqUorGO4t6bMGY3iNj5kslk/jkz+c7JmcmICIWN+Yg4jM8aRcRqJyIUpi2cZ3i/+mcj39HyBL5SotkznCbsFjslmn3CRcIecV1iz8IN1hO21sUB9vCMS1zhFWPMfZhl2F/HVFhCL5PARicixk1Q6Rp0cYxdvKgrO1RnmqvImzqx31St3TstpsIitn19FQZtz1bNYaUo27NtpiUZhZNkPcSoxF5dwGbCepoLNgM/U7WPowy/K7GyDxP4/ax/WD/6db0DbndSEZVbeYYAAAAASUVORK5CYII=", 43, 15},
        ["WORLD BUSTER"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAICAYAAAC73qx6AAAAqElEQVR4nNXUvwpBARTH8c/VtckjGOzyCCYymKweyaPYjLKalSwGsUixKFmkruGmpFvuJRff8fyp3+l3zgmiKJKSAUroY522KScuQYZBZqh9UMyrnNELMzQUPqXkDU7oYhRiiAbGSLInQB3V3OSl44AOJhCKV6aMRUJxJHaigAqKuUh8zg5tTG+Bf7yRLVqY3wez3MgvsEITy8dElkEW2Pju+93jmJS4AjlvJGu/bS3RAAAAAElFTkSuQmCC", 50, 8},
        ["X95 SMG"] = {"iVBORw0KGgoAAAANSUhEUgAAAB0AAAAPCAYAAAAYjcSfAAABVUlEQVR4nMXUu2oVURQG4O/oCAFvICohnRfirbCwsg3a5xW09hFsFPRN7H0AY2MsBLVQEQQl6ZSDoIQDHhXPb3H2hEEmw2QS8IfFXmvNuu89a5TEQFzG+562pzDCGA4MzYiju7D9iYu1UOFTD6cZTjTkKT7jTIvtCCnnqOiCp1jHrMLZXVTcxFLHtzGe4bR5h3/wY7uqJLNGRfuJutsa37CBVNjUPqY2jDEp/BIWOmz/beQ57tVJ35Wkr3CtI8gWbuBtkVewZn63j3ABV3AXL1r8L+ElSPIgO+N7g99IcjKJQreL/nWSY0lullh2oIWar/AYBxsVTXCkjOdcGeN1rOJrw+5WOZ/gN95o/BYtmG5zHZXV9LB0dLWhO5zkV5JpkvNFdyfJYo94g5fDcRwyfw8fi24RX/o4VwOTbuEDlnHffHms93UemnSi+/46sZfdOxj/Jelfh0r3n91oDZEAAAAASUVORK5CYII=", 29, 15},
        ["X95R"] = {"iVBORw0KGgoAAAANSUhEUgAAAB8AAAAPCAYAAAAceBSiAAABkElEQVR4nLXUz4uNURwG8M+duTEUmSzIkpSVxGiUGptJWfBfSNbKH2ApO1s2tiwkKSxM2AqTX1nYaZQYGcVM7jwW77l13DT3vaN56vT98Z7zPuc55/s9nSTWiX34iF8jrDmEF/1gbL3M2IodmEC32AlsKeNf2F8HXTxsSTaPKdzDB8zgLIKXOFjmdYqdxacS98q8AxrBq9DJf5z7ECxjBd8xXsh/YxoLG02uEHaqeAnX8BW9MXzZQPLOQNyvse2YlGQuDd5kOOaTnEwym+RUkuclv5LkZ5LlIetfJdEfXbzGCexuoeQtHlTxtKZ9ruAWduIcrmrud1D9xF9/S3K+heI+zlQ7H0+yUPJ3kmxOsjfJpVrdWqOL67hf7WcJ24p/HDeqb73KP1yd1kVNdR/B3RYniKbPVzR9W+NzsYsD+T2Vf6zY23hX/KO42ZZ82Au3OLCBqcrv31+feBLf2hLTKB+Gpzhd/Jkq/wTPNC/ZODbh8ijkbQrjQlVwq0l2tS2oNgU3DI/xHo8whx8jqVsDfwBaPIPgIwLktwAAAABJRU5ErkJggg==", 31, 15},
        ["ZERO CUTTER"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAADCAYAAADRGVy5AAAAq0lEQVR4nL3RzUqCURDG8d+rgQmZWu1btAuCbq1lN9SmW3AheAvpqoWbhBRTgoqCmBbviC78CAQfGP5nzmEOD88UEXGBe7xjYLN+UcU3PvPuBx9bZnYpMF/pj9DIcwMnyVO00EQbZzjP9y4eiojo43oPM4fWGD108IgpFBFxhTs8Y6RMqYZbXGKo3MZN8s0ypSYqypSsEI5R/6e5WXKxoS9M8Jp8wVPWcN0Hf3zHKylcKx3UAAAAAElFTkSuQmCC", 50, 3},
        ["ZIP 22"] = {"iVBORw0KGgoAAAANSUhEUgAAABsAAAAPCAYAAAAVk7TYAAABF0lEQVR4nL3TsStFYRzG8c897mRUdoO6WbEoMZspsZBJBovR5E9QRExS/gQpFjvFoKQYDFwZ7qAk5DXcc/N26DoH11NPvef9Pb/3e97T75RCCBWcYwQXfq5RDGIe1wifEiGElfD3mgkhyLr8i5s00xAeMnv7rYJNpY7Vm6CvRcCsthN0/hOsJ8FegYbnKH+Kg8i1KLeIjtSl1G3l9IC8OsIuhtGP16g2h9V0Xc3AQYLHArDGv/OWAfHx0rfY+ao5KQDKqzs8fVUoOvoVdKMdy7iJamPfNReF1XCG2WivhPU8zUVhVWxEzwmmcY9J9anMDbvEeJP8UrQewAIO0SXHoJXVP80VTrCJ4yb5Layp3/AKE3j5DtLQOxU/nR3e/F9+AAAAAElFTkSuQmCC", 27, 15},
        ["ZIRCON SLAMSICKLE"] = {"iVBORw0KGgoAAAANSUhEUgAAABAAAAAPCAYAAADtc08vAAABGElEQVR4nJWRu0pDQRRFFxIDISrRQvADJKJgYxcsTKWFfyD5hVj6E1Y+PsHKKiIodil8gCja2knA0gcKFyWyLDKRy3VuMBs2zJyZvZhzBpXgqrql7thTEvYrqTt/3F/sqx/Glagn6kQeYFf9Vp/UltrOAR2rlRjAAKmGYlmtqdtqJwNpqZNZwLpazOlxPvKSa/VAXUjPYJAPc1r6UhuDghV1T71UP3Mg3bzwlHobLl2oJfUxE07U5Vh4Wr1RT+0NdDTUG6nwm1qPzWBGvbL3ZeXMWSkM71ld7dez4XP1yMh/B4+rs+laAdgAloA7oAasAa/E9R78qwIwBmwCD0A7gP6tEaADdIE54B54GRawCBSBM6AJ1IcB/ADDcl/CIOsnNwAAAABJRU5ErkJggg==", 16, 15},
        ["ZIRCON TRIDENT"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAICAYAAAC73qx6AAABG0lEQVR4nM2UsS5FQRCGvz3u2StUwhuISqH0BgrxAirvQELFO5B4A4ncXiWhVBGFUqsVHXEc51ecf282N/eIgjiTTHZ3/szszsz+EyTRI1kCRsA+cGfbBrAHDAEB79Yr4GTsKakvWkq6VysvkpYlbUp6U7fsJP+B84nAFrAIPAMXwKexmSmVa6yDKZiAGig7qv5hvzBhz23R+yNg1vFOgQKYM14Cl95XQdIhsA2sOFgNPHpNiURrDVR+DA4cadve0La8MhYyjAxrJrAiw1azxJ6AeWDB54cs4ZRIbd/zoqNqP5HvyPXXxAvW8T3BZO/L17oB1oBXr2fAOt1fa9fvrf6b4L9G9tSRvkgavwfArW1p/Eaf0/i9Bo6T4xdM44pWBHcfuQAAAABJRU5ErkJggg==", 50, 8},
        ["ZWEIHANDER"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAOCAYAAABth09nAAAA7ElEQVR4nM3UPUpDQRTF8Z8mRBQUrBKwiJDWHdi4DXtrV+HCbFxBasFSLRIRMX4gz+I9IYYRfXcmPP8wMHOGC+cwc+9GVVVaMsIZLtoWrpPNQM0YR6WN5BIJcofb0kZyiQa5L20kl0iQBa5LG8klEmSA44Q+yfSSRR8n2G/2sIUd7KHXrI/mbhcznKqn1xcHzXm+pD0u1f1EhYeE/ornhP6OJ7yof8Zc/c2nqRf5yyutzuzfDK+dPi5b1gxwiPMVfaLD3on0yBuuEnqnAyASZFvHjZ0iEmSEYWkjuUSCDH2fWP+CSJAbTAv7yOYTCAcjy7oQ9i0AAAAASUVORK5CYII=", 50, 14},
    }

    for k, v in pairs(gunicons) do --TODO FIX THIS SHIT ALAN - from alan
        gunicons[k][1] = syn.crypt.base64.decode(v[1])
    end

    local function NameToIcon(name)

        local tempimage = gunicons[name]

        if tempimage ~= nil then
            local new_w = tempimage[2]
            local new_h = tempimage[3]

            return {data = tempimage[1], w = new_w, h = new_h}
        end
        return nil
    end

    menu.activetab = 5
    menu.annoylist = table.create(game.Players.MaxPlayers - 1)
    menu.parts = {}
    menu.parts.indicator = Instance.new("Part", workspace)
    menu.parts.sphereHitbox = Instance.new("Part", workspace)
    menu.parts.resolverHitbox = Instance.new("Part", workspace)
    menu.parts.backtrackHitbox = Instance.new("Part", workspace)
    menu.parts.sphereHitbox.Name = "abcdefg"
    local diameter
    do
        menu.parts.sphereHitbox.Size = Vector3.new(1, 1, 1)
        menu.parts.sphereHitbox.Position = Vector3.new()
        menu.parts.sphereHitbox.Shape = Enum.PartType.Ball
        menu.parts.sphereHitbox.Transparency = 1
        -- local box = Instance.new("BoxHandleAdornment", menu.parts.sphereHitbox)
        -- box.AlwaysOnTop = true
        -- box.Adornee = box.Parent
        -- box.ZIndex = 5
        -- box.Color3 = Color3.new(1,0,0)
        -- box.Size = menu.parts.sphereHitbox.Size
        -- box.Transparency = 0
        -- table.insert(misc.adornments, box)
        menu.parts.sphereHitbox.Anchored = true
        menu.parts.sphereHitbox.CanCollide = false
        menu.parts.resolverHitbox.Size = Vector3.new(1, 1, 1)
        menu.parts.resolverHitbox.Position = Vector3.new()
        menu.parts.resolverHitbox.Shape = Enum.PartType.Ball
        menu.parts.resolverHitbox.Transparency = 1
        menu.parts.resolverHitbox.Anchored = true
        menu.parts.resolverHitbox.CanCollide = false
        menu.parts.indicator.Size = Vector3.new(1, 1, 1)
        menu.parts.indicator.Position = Vector3.new()
        menu.parts.indicator.Shape = Enum.PartType.Ball
        menu.parts.indicator.Transparency = 1
        menu.parts.indicator.Anchored = true
        menu.parts.indicator.CanCollide = false
        menu.parts.backtrackHitbox.Size = Vector3.new(1, 1, 1)
        menu.parts.backtrackHitbox.Position = Vector3.new()
        menu.parts.backtrackHitbox.Shape = Enum.PartType.Ball
        menu.parts.backtrackHitbox.Transparency = 1
        menu.parts.backtrackHitbox.Anchored = true
        menu.parts.backtrackHitbox.CanCollide = false
    end


    menu.activenades = {}

    local shitting_my_pants = false
    local stylis = {
        [525919] = true,
        [1667819] = true,
        [195329] = true,
        [5725475] = true,
        [52250025] = true,
        [18659509] = true,
        [31137804] = true,
        [484782977] = true, -- superusers end here, anything else following is just people i know that could probably have direct access to a developer console or data store or anything to catch us in the act of creating and abusing and exploiting their game
        [750972253] = true,
        [169798359] = true, -- not confirmed but this dude has a tag with no equal signs so kinda sus and he respond to ltierally no fucking body
        [94375158] = true,
        [53275569] = true, -- banlands advocate
        [2346908601] = true, -- sus
        [192018294] = true,
        [73654327] = true,
        [1509251] = true,
        [151207617] = true,
        [334009865] = true,
    }

    CreateThread(function()
        while wait(2) do -- fuck off
            local count = 0
            for _, player in next, Players:GetPlayers() do
                local d = stylis[player.UserId]
                if d then
                    count += 1
                end
            end
            shitting_my_pants = count > 0
        end
    end)

    local allesp = {
        [1] = { -- skel
            [1] = {},
            [2] = {},
            [3] = {},
            [4] = {},
            [5] = {},
        },
        [2] = { [1] = {}, [2] = {}, [3] = {}, [4] = {}}, -- box
        [3] = { -- hp
            [1] = {},
            [2] = {},
            [3] = {},
            [4] = {}, -- resolver flag
            [5] = {}, -- dist
            [6] = {}, -- lvl
            [7] = {} --weapon icons
        },
        [4] = { -- text
            [1] = {},
            [2] = {},
        },
        [5] = { -- arrows
            [1] = {},
            [2] = {},
        },
        [6] = {}, -- watermark
        [7] = { -- wepesp
            [1] = {}, -- name
            [2] = {}, -- ammo
            [3] = {}, -- icon
        },
        [8] = { -- nade esp
            [1] = {}, --outer_c
            [2] = {}, --inner_c
            [3] = {}, --distance
            [4] = {}, --text
            [5] = {}, -- bar_outer
            [6] = {}, -- bar_inner
            [7] = {}, -- bar_moving_1
            [8] = {}, -- bar_moving_2
        },
        [9] = {}, -- fov circles
        [10] = {
            [1] = {}, --boxes
            [2] = {}, --gradient
            [3] = {}, --outlines
            [4] = {}, --text
            [5] = {}, --shaded outlines
        }, -- shitty keybinds --keybinds -- keybinds
        [11] = {
            {}, -- backtrack lines
            {}, -- spawn locations
        },
    }


    local wepesp = allesp[7]

    local wepespnum = #wepesp

    local nade_esp = allesp[8]

    local nade_espnum = #nade_esp
    for i = 1, Players.MaxPlayers do
        Draw:Circle(false, 0, 0, 0, 1, 32, { 0, 0, 0, 0 }, allesp[11][1])
        Draw:OutlinedText("", 2, false, 20, 20, 13, true, { 255, 255, 255, 255 }, { 0, 0, 0 }, allesp[11][2])
    end
    for i = 1, 50 do
        Draw:FilledRect(false, 20, 20, 2, 20, { 30, 30, 30, 255 }, allesp[10][5])
    end
    for i = 1, 50 do
        Draw:FilledRect(false, 20, 20, 2, 20, { 30, 30, 30, 255 }, allesp[10][1])
    end

    local this_is_really_ugly = 50 - 15 * 1.7
    for i = 1, 50 do
        Draw:FilledRect(false, 20, 20, 2, 20, {this_is_really_ugly, this_is_really_ugly, this_is_really_ugly, 255}, allesp[10][3])
    end
    for i = 1, 19 do
        Draw:FilledRect(false, 0, 0, 10, 1, { 50 - i * 1.7, 50 - i * 1.7, 50 - i * 1.7, 255 }, allesp[10][2])
    end
    for i = 1, 50 do
        Draw:OutlinedText("", 2, false, 20, 20, 13, true, { 255, 255, 255, 255 }, { 0, 0, 0 }, wepesp[1])
        Draw:OutlinedText("", 2, false, 20, 20, 13, true, { 255, 255, 255, 255 }, { 0, 0, 0 }, wepesp[2])
        Draw:Image(false, placeholderImage, 20, 20, 150, 45, 1, wepesp[3])
        Draw:OutlinedText("", 2, false, 20, 20, 13, true, { 255, 255, 255, 255 }, { 0, 0, 0 }, allesp[10][4])
    end
    for i = 1, 4 do
        allesp[9][i] = {}
        for k = 1, 2 do
            Draw:Circle(false, 0, 0, 0, 1, 32, { 0, 0, 0, 0 }, allesp[9][i])
        end
    end
    for i = 1, 20 do
        Draw:FilledCircle(false, 60, 60, 32, 1, 20, { 20, 20, 20, 215 }, nade_esp[1])
        Draw:Circle(false, 60, 60, 30, 1, 20, { 50, 50, 50, 255 }, nade_esp[2])
        Draw:OutlinedText("", 2, false, 20, 20, 13, true, { 255, 255, 255, 255 }, { 0, 0, 0 }, nade_esp[3])
        Draw:Image(false, BBOT_IMAGES[6], 20, 20, 23, 30, 1, nade_esp[4])
        --Draw:OutlinedText("NADE", 2, false, 20, 20, 13, true, {255, 255, 255, 255}, {0, 0, 0}, nade_esp[4])

        Draw:OutlinedRect(false, 20, 20, 32, 6, { 50, 50, 50, 255 }, nade_esp[5])
        Draw:FilledRect(false, 20, 20, 30, 4, { 30, 30, 30, 255 }, nade_esp[6])

        Draw:FilledRect(false, 20, 20, 2, 20, { 30, 30, 30, 255 }, nade_esp[7])
        Draw:FilledRect(false, 20, 20, 2, 20, { 30, 30, 30, 255 }, nade_esp[8])
    end

    local setwepicons = {}
    for i = 1, 35 do
        for i_ = 1, 2 do
            Draw:Triangle(false, i_ == 1, nil, nil, nil, { 255 }, allesp[5][i_])
        end

        local skel = allesp[1]
        local box = allesp[2]
        local hp = allesp[3]
        local text = allesp[4]
        local icons = allesp[3][7]
        local arrows = allesp[5]

        for i = 1, #skel do
            local drawobj = skel[i]
            Draw:Line(false, 1, 30, 30, 50, 50, { 255, 255, 255, 255 }, drawobj)
        end

        for i = 1, #box do
            local drawobj = box[i]
            Draw:OutlinedRect(false, 20, 20, 20, 20, { 0, 0, 0, 220 }, drawobj)
        end

        Draw:FilledRect(false, 20, 20, 20, 20, { 10, 10, 10, 210 }, hp[1])
        Draw:FilledRect(false, 20, 20, 20, 20, { 10, 10, 10, 255 }, hp[2])
        Draw:OutlinedText("", 1, false, 20, 20, 13, false, { 255, 255, 255, 255 }, { 0, 0, 0 }, hp[3])
        Draw:OutlinedText("R", 1, false, 20, 20, 13, false, { 255, 255, 0, 255 }, { 0, 0, 0 }, hp[4])
        Draw:OutlinedText("", 1, false, 20, 20, 13, false, { 255, 255, 255, 255 }, { 0, 0, 0 }, hp[5])
        Draw:OutlinedText("", 1, false, 20, 20, 13, false, { 255, 255, 255, 255 }, { 0, 0, 0 }, hp[6])

        for i = 1, #text do
            local drawobj = text[i]
            Draw:OutlinedText("", 2, false, 20, 20, 13, true, { 255, 255, 255, 255 }, { 0, 0, 0 }, drawobj)
        end
        --(200, 67), (150, 45), (100, 33)
        Draw:Image(false, placeholderImage, 20, 20, 150, 45, 1, icons)
        setwepicons[i] = nil
    end

    local bodysize = {
        ["Head"] = Vector3.new(2, 1, 1),
        ["Torso"] = Vector3.new(2, 2, 1),
        ["HumanoidRootPart"] = Vector3.new(0.2, 0.2, 0.2),
        ["Left Arm"] = Vector3.new(1, 2, 1),
        ["Right Arm"] = Vector3.new(1, 2, 1),
        ["Left Leg"] = Vector3.new(1, 2, 1),
        ["Right Leg"] = Vector3.new(1, 2, 1),
    }


    ragebot.nextRagebotShot = -1

    client.loadedguns = {}

    local raycastutil

    local gc = getgc(true)

    for i = 1, #gc do
        local garbage = gc[i]

        local garbagetype = type(garbage)

        if garbagetype == "function" then
            local name = getinfo(garbage).name
            if name == "bulletcheck" then
                client.bulletcheck = garbage
            elseif name == "trajectory" then
                client.trajectory = garbage
            elseif name == "addplayer" then
                client.addplayer = garbage
            elseif name == "removeplayer" then
                client.removeplayer = garbage
            elseif name == "call" then
                client.call = garbage
            elseif name == "loadplayer" then
                client.loadplayer = garbage
            elseif name == "rankcalculator" then
                client.rankcalculator = garbage
            elseif name == "gunbob" then
                client.gunbob = garbage
            elseif name == "gunsway" then
                client.gunsway = garbage
            elseif name == "getupdater" then
                client.getupdater = garbage
            elseif name == "updateplayernames" then
                client.updateplayernames = garbage
            end
        elseif garbagetype == "table" then
            if rawget(garbage, "deploy") then
                client.menu = garbage
            elseif rawget(garbage, "breakwindow") then
                client.effects = garbage
            elseif rawget(garbage, "aimsen") then
                client.settings = garbage
            elseif rawget(garbage, "send") then
                client.net = garbage
            elseif rawget(garbage, "gammo") then
                client.logic = garbage
            elseif rawget(garbage, "setbasewalkspeed") then
                client.char = garbage
            elseif rawget(garbage, "basecframe") then
                client.cam = garbage
            elseif rawget(garbage, "votestep") then
                client.hud = garbage
            elseif rawget(garbage, "getbodyparts") then
                client.replication = garbage
            elseif rawget(garbage, "play") then
                client.sound = garbage
            elseif rawget(garbage, "controller") then
                client.input = garbage
            elseif rawget(garbage, "raycastwhitelist") then
                client.roundsystem = garbage
            elseif rawget(garbage, "new") and rawget(garbage, "step") and rawget(garbage, "reset") then
                client.particle = garbage
            elseif rawget(garbage, "unlocks") then
                client.dirtyplayerdata = garbage
            elseif rawget(garbage, "toanglesyx") then
                client.vectorutil = garbage
            elseif rawget(garbage, "IsVIP") then
                client.instancetype = garbage
            elseif rawget(garbage, "timehit") then
                client.physics = garbage
            elseif rawget(garbage, "raycastSingleExit") then
                raycastutil = garbage
            elseif rawget(garbage, "bulletLifeTime") then
                client.publicsettings = garbage
            elseif rawget(garbage, "player") and rawget(garbage, "reset") then
                client.animation = garbage
                client.animation.oldplayer = client.animation.player
                client.animation.oldreset = client.animation.reset
            elseif rawget(garbage, "task") and rawget(garbage, "dependencies") and rawget(garbage, "name") == "camera"
            then
                local oldtask = rawget(garbage, "task")
                rawset(garbage, "task", function(...)
                    oldtask(...)
                    if not client then return end
                    if not client.superaastart then
                        if ragebot.target and menu:GetVal("Rage", "Aimbot", "Rotate Viewmodel") and client.logic.currentgun and client.logic.currentgun.type ~= "KNIFE"
                        then
                            local oldpos = client.cam.shakecframe
                            client.cam.shakecframe = CFrame.lookAt(oldpos.Position, ragebot.targetpart.Position)
                        end
                    else
                        client.cam.shakecframe = client.superaastart
                    end

                    if client.logic.currentgun and menu:GetVal("Visuals", "Viewmodel", "Enabled") and client.logic.currentgun.type ~= "KNIFE" then
                        local a = -1 * client:GetToggledSight(client.logic.currentgun).sightspring.p + 1
                        local offset = CFrame.Angles(
                            math.rad(menu:GetVal("Visuals", "Viewmodel", "Pitch")) * a,
                            math.rad(menu:GetVal("Visuals", "Viewmodel", "Yaw")) * a,
                            math.rad(menu:GetVal("Visuals", "Viewmodel", "Roll")) * a
                        )
                        offset *= CFrame.new(
                            menu:GetVal("Visuals", "Viewmodel", "Offset X") * a,
                            menu:GetVal("Visuals", "Viewmodel", "Offset Y") * a,
                            menu:GetVal("Visuals", "Viewmodel", "Offset Z") * a
                        )
                        client.cam.shakecframe *= offset
                    end
                    return
                end)
            end
        end
    end
    gc = nil

    local function animhook(...)
        return function(...)
        end
    end

    function client:GetToggledSight(weapon)
        local updateaimstatus = getupvalue(weapon.toggleattachment, 3)
        return getupvalue(updateaimstatus, 1)
    end

    local mousestuff = rawget(client.input, "mouse")
    if mousestuff then
        for eventname, event in next, mousestuff do
            if eventname:match("^onbutton") then
                for func in next, mousestuff[eventname]._funcs do
                    local thefunction = func
                    mousestuff[eventname]._funcs[func] = nil
                    local function detoured(...)
                        if menu and menu.open then
                            return
                        end
                        thefunction(...)
                    end
                    mousestuff[eventname]._funcs[detoured] = true
                    break
                end
            end
        end
    end

    client.loadedguns = getupvalue(client.char.unloadguns, 2) -- i hope this works
    client.lastrepupdate = Vector3.new(-10000, -10000, -1000) --- this is super shit
    client.roundsystem.lock = nil -- we do a little trolling
    client.updatersteps = {}
    client.lastlock = false -- fucking dumb

    client.fakelagpos = Vector3.new()
    client.fakelagtime = 0

    for _, player in next, Players:GetPlayers() do
        if player == LOCAL_PLAYER then continue end
        local updater = client.getupdater(player)
        if updater then
            local step = updater.step
            updater.step = function(what, what1)
                if not menu then
                    return step(what, what1)
                else
                    if menu:GetVal("Rage", "Aimbot", "Enabled")
                        or menu:GetKey("Visuals", "Local", "Third Person")
                    then
                        return step(3, true)
                    else
                        return step(what, what1)
                    end
                end
            end
            if not client.updatersteps[player] then client.updatersteps[player] = step end
        end
    end

    client.nametagupdaters_cache = {}
    client.nametagupdaters = getupvalue(client.updateplayernames, 1)
    client.playernametags = getupvalue(client.updateplayernames, 2)

    setrawmetatable(client.roundsystem, {
        __index = function(self, val)
            if not menu or not client then
                setrawmetatable(self, nil)
                return false
            end

            if val == "lock" then
                if menu.textboxopen then
                    return true
                end

                return client.lastlock
            end
        end,
        __newindex = function(self, key, value)
            if not menu then
                setrawmetatable(self, nil)
                pcall(rawset, self, key, value)
                return
            end

            if key == "lock" then
                client.lastlock = value
                return
            end
        end,
    })

    function ragebot:shoot(rageFirerate, target, damage)
        local firerate = rageFirerate or client.logic.currentgun.data.firerate
        local mag = getupvalue(client.logic.currentgun.shoot, 2)
        local chambered = getupvalue(client.logic.currentgun.shoot, 3)
        if not chambered then
            setupvalue(client.logic.currentgun.shoot, 3, true)
        end
        local chamber = client.logic.currentgun.data.chamber
        local reloading = getupvalue(client.logic.currentgun.shoot, 4)
        local spare = getupvalue(client.logic.currentgun.dropguninfo, 2)
        local magsize = client.logic.currentgun.data.magsize
        --[[local yieldtoanimation = getupvalue(client.logic.currentgun.playanimation, 3)
        local animating = getupvalue(client.logic.currentgun.playanimation, 5)
        if yieldtoanimation then
            setupvalue(client.logic.currentgun.playanimation, 3, false)
        end

        if animating then
            setupvalue(client.logic.currentgun.playanimation, 5, false)
        end]]

        if mag == 0 and not reloading then
            spare += mag
            local wants = (mag == 0 or not chamber) and magsize or magsize + 1
            mag = wants > spare and spare or wants
            spare -= mag
            -- setupvalue(client.logic.currentgun.shoot, 2, mag)
            -- setupvalue(client.logic.currentgun.dropguninfo, 2, spare)
            -- client.hud:updateammo(mag, spare)
            client.logic.currentgun:reload()
            return
        end

        if reloading and mag > 0 then
            client.logic.currentgun:reloadcancel()
        end

        local curTick = tick()
        local future = curTick + (60 / firerate)

        local shoot = curTick > ragebot.nextRagebotShot
        ragebot.nextRagebotShot = shoot and future or ragebot.nextRagebotShot

        if shoot and client.logic.currentgun.burst == 0 then
            local dt = menu:GetVal("Rage", "Aimbot", "Double Tap") and menu:GetKey("Rage", "Aimbot", "Double Tap")
            client.logic.currentgun.burst = dt and 2 or 1
            local damageDealt = damage * (dt and 2 or 1)
            if not self.predictedDamageDealt[target] then
                self.predictedDamageDealt[target] = 0
            end
            self.predictedDamageDealt[target] += damageDealt
            self.predictedShotAt[target] = 1
            self.predictedDamageDealtRemovals[target] = tick() + GetLatency() * menu:GetVal("Rage", "Settings", "Damage Prediction Time") / 100
        end
    end

    function ragebot:LogicAllowed()
        return tick() > ragebot.nextRagebotShot
    end

    local debris = game:service("Debris")
    local teamdata = {}
    do
        local pgui = game.Players.LocalPlayer.PlayerGui
        local board = pgui:WaitForChild("Leaderboard")
        local main = board:WaitForChild("Main")
        local global = board:WaitForChild("Global")
        local ghost = main:WaitForChild("Ghosts")
        local phantom = main:WaitForChild("Phantoms")
        local gdataframe = ghost:WaitForChild("DataFrame")
        local pdataframe = phantom:WaitForChild("DataFrame")
        local ghostdata = gdataframe:WaitForChild("Data")
        local phantomdata = pdataframe:WaitForChild("Data")
        teamdata[1] = phantomdata
        teamdata[2] = ghostdata
    end

    local GetPlayerData = function(player_name)
        return teamdata[1]:FindFirstChild(player_name) or teamdata[2]:FindFirstChild(player_name)
    end

    local CommandInfo = {
        targetbelowrank = "<number> rank",
        friendaboverank = "<number> rank",
        say = "says message in chat",
        annoy = "player name",
        mute = "player name",
        clearannoylist = "clear the annoy list, if anyone exists in it",
        clearmutedlist = "clear the muted list, if anyone exists in it",
        friend = "player name",
        target = "player name",
        cmdlist = "list commands, idk how you're even seeing this right now you're not supposed to see this bimbo",
    }

    local CommandFunctions = {
        say = function(...)
            local message = { ... }
            local newmes = ""
            for k, v in next, message do
                newmes ..= " " .. v
            end
            client.net:send("say", newmes)
        end,
        targetbelowrank = function(min)
            local targetted = 0
            for k, player in pairs(Players:GetPlayers()) do
                local data = GetPlayerData(player.Name)
                if data.Rank.Text < min then
                    table.insert(menu.priority, player.Name)
                    targetted += 1
                end
            end
            CreateNotification(("Targetted %d players below rank %d"):format(targetted, min))
        end,
        friendaboverank = function(max)
            local targetted = 0
            for k, player in pairs(Players:GetPlayers()) do
                local data = GetPlayerData(player.Name)
                if data.Rank.Text > max then
                    table.insert(menu.friends, player.Name)
                    targetted += 1
                end
            end
            WriteRelations()
            CreateNotification(("Friended %d players below rank %d"):format(targetted, max))
        end,
        mute = function(name)
            CreateNotification("Muted " .. name .. ".")
            menu.muted[name] = true
        end,
        annoy = function(name)
            if name:lower():match(LOCAL_PLAYER.Name:lower()) then
                return CreateNotification("You cannot annoy yourself!")
            end
            for _, player in next, Players:GetPlayers() do
                if player.Name:lower():match(name:lower()) then
                    local exists = table.find(menu.annoylist, player.Name)
                    if not exists then
                        table.insert(menu.annoylist, player.Name)
                    else
                        table.remove(menu.annoylist, exists)
                        return CreateNotification("No longer repeating everything " .. player.Name .. " says in chat.")
                    end
                    return CreateNotification("Now repeating everything " .. player.Name .. " says in chat.")
                end
            end
            CreateNotification("No such player by the name '" .. name .. "' was found in the game.")
        end,
        clearannoylist = function()
            CreateNotification("Cleared annoy players list.")
            table.clear(menu.annoylist)
        end,
        clearmutedlist = function()
            CreateNotification("Cleared muted players list.")
            table.clear(menu.muted)
        end,
        friend = function(name)
            for _, player in next, Players:GetPlayers() do
                if player.Name:lower():match(name:lower()) then
                    table.insert(menu.friends, name)
                    return CreateNotification("Friended " .. name)
                end
            end
            WriteRelations()
            CreateNotification("No such player by the name '" .. name .. "' was found in the game.")
        end,
        target = function(name)
            for _, player in next, Players:GetPlayers() do
                if player.Name:lower():match(name:lower()) then
                    table.insert(menu.priority, name)
                    return CreateNotification("Prioritized " .. name)
                end
            end
            CreateNotification("No such player by the name '" .. name .. "' was found in the game.")
        end,
        setfpscap = function(num)
            if not num then
                return CreateNotification("Please provide a number.")
            end
            if num < 10 then
                CreateNotification("Can't set max FPS below 10, setting to 10.")
                getgenv().maxfps = 10
            else
                getgenv().maxfps = num
            end
        end,
        cmdlist = function(self, type)
            for cmdname, _ in next, self do
                if cmdname ~= "cmdlist" then
                    local cmdinfo = CommandInfo[cmdname] or ""
                    if not type then
                        client.bbconsole(("\\%s: %s"):format(cmdname, cmdinfo))
                    else
                        CreateNotification(("%s: %s"):format(cmdname, cmdinfo))
                    end
                end
            end
        end,
    }

    local crosshairColors
    local PLAYER_GUI = LOCAL_PLAYER.PlayerGui
    local old_c_eventfuncs
    local clienteventfuncs = getupvalue(client.call, 1)

    menu.pfunload = function(self)
        local crosshud = PLAYER_GUI.MainGui.GameGui.CrossHud:GetChildren()
        for i = 1, #crosshud do
            local frame = crosshud[i]
           
            frame.BackgroundColor3 = crosshairColors.inline
            frame.BorderColor3 = crosshairColors.outline
            frame.Shot.BackgroundColor3 = crosshairColors.inline
            frame.Shot.BorderColor3 = crosshairColors.outline
        end

        for k, v in next, Players:GetPlayers() do
            local bodyparts = client.replication.getbodyparts(v)
            if bodyparts and bodyparts.head and bodyparts.head:FindFirstChild("HELMET") then -- idk just keep this here until the april fools shit goes away? -nata april1,21
                bodyparts.head.HELMET.Slot1.Transparency = 0
                bodyparts.head.HELMET.Slot2.Transparency = 0
            end
        end

        local funcs = getupvalue(client.call, 1)

        for hash, func in next, funcs do
            if is_synapse_function(func) then
                for k, v in next, getupvalues(func) do
                    if type(v) == "function" and islclosure(v) and not is_synapse_function(v) then
                        if getinfo(v).name ~= "send" then
                            funcs[hash] = v
                        end
                    end
                end
            end
        end

        setupvalue(client.call, 1, funcs)

        for k, v in next, getinstances() do -- hacky way of getting rid of bbot adornments and such, but oh well lol it works
            if v.ClassName:match("Adornment") then
                v.Visible = false
                v:Destroy()
            end
        end

        for k, v in next, getgc(true) do
            if type(v) == "table" then
                if rawget(v, "task") and rawget(v, "dependencies") and rawget(v, "name") == "camera" then
                    for k1, v1 in next, getupvalues(rawget(v, "task")) do
                        if type(v1) == "function" and islclosure(v1) and not is_synapse_function(v1) then
                            v.task = v1
                        end
                    end
                    break
                end
            end
        end

        if client.char.alive then
            for id, gun in next, client.loadedguns do
                for k, v in next, gun do
                    if type(v) == "function" then
                        local upvs = getupvalues(v)

                        for k1, v1 in next, upvs do
                            if type(v1) == "function" and is_synapse_function(v1) then
                                for k2, v2 in next, getupvalues(v1) do
                                    if type(v2) == "function" and islclosure(v2) and not is_synapse_function(v2)
                                    then
                                        setupvalue(v, k1, v2)
                                    end
                                end
                            end
                        end
                    end
                end
            end
        end

        -- NOTE unhook springs here
        client:UnhookSprings()

        client.fake_upvs = nil
        DeepRestoreTableFunctions(client)

        local gunstore = game.ReplicatedStorage.GunModules
        gunstore:Destroy()
        game.ReplicatedStorage:FindFirstChild(client.acchash).Name = "GunModules" -- HACK DETECTED.

        local lighting = game.Lighting
        local defaults = lighting.MapLighting

        lighting.Ambient = defaults.Ambient.Value
        lighting.OutdoorAmbient = defaults.OutdoorAmbient.Value
        lighting.Brightness = defaults.Brightness.Value

        workspace.Ignore.DeadBody:ClearAllChildren()

        clienteventfuncs = old_c_eventfuncs
        client = nil
        ragebot = nil
        legitbot = nil
        misc = nil
        camera = nil
        DeepRestoreTableFunctions = nil
    end


    ragebot.repupdates = {}

    for _, player in next, Players:GetPlayers() do
        if player == LOCAL_PLAYER then
            continue
        end
        ragebot.repupdates[player] = {}
    end

    local ncf = CFrame.new()
    local vtos = ncf.VectorToObjectSpace

    local left = Vector3.new(1, 0, 0)
    local right = Vector3.new(-1, 0, 0)
    local forward = Vector3.new(0, 0, 1)
    local backward = Vector3.new(0, 0, -1)
    local up = Vector3.new(0, 1, 0)
    local down = Vector3.new(0, -1, 0)

    local directiontable = {
        left,
        right,
        forward,
        backward,
        up,
        down,
    }

    local mapRaycast = RaycastParams.new()
    mapRaycast.FilterType = Enum.RaycastFilterType.Whitelist
    mapRaycast.FilterDescendantsInstances = client.roundsystem.raycastwhitelist
    mapRaycast.IgnoreWater = true

    local uberpart = workspace:FindFirstChild("uber")

    if not uberpart then
        uberpart = Instance.new("Part", workspace)
        uberpart.Name = "uber"
        uberpart.Material = Enum.Material.Neon
        uberpart.Anchored = true
        uberpart.CanCollide = false
        uberpart.Size = Vector3.new(1, 1, 1)
    end

    client.localrank = client.rankcalculator(client.dirtyplayerdata.stats.experience)

    client.fakeplayer = Instance.new("Player", Players) -- thank A_003 for this (third person body)🔥
    client.fakeplayer.Team = LOCAL_PLAYER.Team
    client.removeplayer(client.fakeplayer) -- remove this moron from the leaderboard ez win
    debug.setupvalue(client.loadplayer, 1, client.fakeplayer)
    client.fake3pcharloaded = false
    client.loadplayer(LOCAL_PLAYER)
    client.fakeupdater = client.getupdater(LOCAL_PLAYER)
    if client.char.rootpart then
        -- client.fakerootpart.CFrame = client.char.rootpart.CFrame
        -- local rootpartpos = client.char.rootpart.Position

        local fakeupdaterupvals = debug.getupvalues(client.fakeupdater.step)
        fakeupdaterupvals[4].p = Vector3.new()
        fakeupdaterupvals[4].t = Vector3.new()
        fakeupdaterupvals[4].v = Vector3.new()
    end
    debug.setupvalue(client.loadplayer, 1, LOCAL_PLAYER)

    client.fakeplayer.Parent = nil
    -- do
    --     local updatervalues = getupvalues(client.fakeupdater.step)

    --     --[[updatervalues[11].s = 7
    --     updatervalues[15].s = 100]]
    --     client.fake_upvs = updatervalues
    --     table.foreach(client.fake_upvs, print)
    -- end

   
    local CHAT_GAME = LOCAL_PLAYER.PlayerGui.ChatGame
    local CHAT_BOX = CHAT_GAME:FindFirstChild("TextBox")

    local OLD_GUNS = game:GetService("ReplicatedStorage").GunModules:Clone()
    OLD_GUNS.Name = tostring(math.random(1e5, 9e5))
    client.acchash = OLD_GUNS.Name
    OLD_GUNS.Parent = game:GetService("ReplicatedStorage")

    local CUR_GUNS = game:GetService("ReplicatedStorage").GunModules

    local loadplayer = client.loadplayer

    local function loadplayerhook(player)
        local newupdater = loadplayer(player)
        if newupdater then -- lazy fix...................
            local step = newupdater.step
            newupdater.step = function(what, what1)
                if not menu then
                    return step(what, what1)
                else
                    if menu:GetVal("Rage", "Aimbot", "Enabled") or menu:GetKey("Visuals", "Local", "Third Person")
                    then
                        return step(3, true)
                    else
                        return step(what, what1)
                    end
                end
            end
        end
        return newupdater
    end

    CreateThread(function()
        local loadplayeridx = table.find(getupvalues(client.getupdater), loadplayer)

        if not loadplayeridx then
            for k, v in next, getupvalues(client.getupdater) do
                if type(v) == "function" then
                    if v == loadplayer or getinfo(v).name == "loadplayer" then
                        loadplayeridx = k
                        break
                    end
                end
            end

            if loadplayeridx then
                setupvalue(client.getupdater, loadplayeridx, loadplayerhook)
            else
                --warn("Unable to find loadplayer in getupdater")
            end
        end
    end)

    local selectedPlayer = nil

    local players = {
        Enemy = {},
        Team = {},
    }

    local mats = { "SmoothPlastic", "ForceField", "Neon", "Foil", "Glass" }
    local chatspams = {
        ["lastchoice"] = 0,
        [1] = nil,
        [2] = {
            "BBOT ON TOP ",
            "BBOT ON TOP 🔥🔥🔥🔥",
            "BBot top i think ",
            "bbot > all ",
            "BBOT > ALL🧠 ",
            "WHAT SCRIPT IS THAT???? BBOT! ",
            "日工tch ",
            ".gg/bbot",
        },
        [3] = {
            "but doctor prognosis: OWNED ",
            "but doctor results: 🔥",
            "looks like you need to talk to your doctor ",
            "speak to your doctor about this one ",
            "but analysis: PWNED ",
            "but diagnosis: OWND ",
        },
        [4] = {
            "音频少年公民记忆欲求无尽 heywe 僵尸强迫身体哑集中排水",
            "持有毁灭性的神经重景气游行脸红青铜色类别创意案",
            "诶比西迪伊艾弗吉艾尺艾杰开艾勒艾马艾娜哦屁吉吾",
            "完成与草屋两个苏巴完成与草屋两个苏巴完成与草屋",
            "庆崇你好我讨厌你愚蠢的母愚蠢的母庆崇",
            "坐下,一直保持着安静的状态。 谁把他拥有的东西给了他,所以他不那么爱欠债务,却拒  参加锻炼,这让他爱得更少了",
            ", yīzhí bǎochízhe ānjìng de zhuàngtài. Shéi bǎ tā yǒngyǒu de dōngxī gěile tā, suǒyǐ tā bù nàme ài qiàn zhàiwù, què jùjué cānjiā duànliàn, z",
            "他,所以他不那r给了他东西给了他爱欠s,却拒绝参加锻炼,这让他爱得更UGT少了",
            "bbot 有的东西给了他,所以他不那rblx trader captain么有的东西给了他爱欠绝参加锻squidward炼,务,却拒绝参加锻炼,这让他爱得更UGT少了",
            "wocky slush他爱欠债了他他squilliam拥有的东西给爱欠绝参加锻squidward炼",
            "坐下,一直保持着安静的状态bbot 谁把他拥有的东西给了他,所以他不那rblx trader captain么有的东西给了他爱欠债了他他squilliam拥有的东西给爱欠绝参加锻squidward炼,务,却拒绝参加锻炼,这让他爱得更UGT少了",
            "免费手榴弹bbot hack绕过作弊工作Phantom Force roblox aimbot瞄准无声目标绕过2020工作真正免费下载和使用",
            "zal發明了roblox汽車貿易商的船長ro blocks,並將其洩漏到整個宇宙,還修補了虛假的角神模式和虛假的身體,還發明了基於速度的AUTOWALL和無限制的自動壁紙遊戲 ",
            "彼が誤って禁止されたためにファントムからautowallgamingを禁止解除する請願とそれはでたらめですそれはまったく意味がありませんなぜあなたは合法的なプレーヤーを禁止するのですか ",
            "ジェイソンは私が神に誓う女性的な男の子ではありません ",
            "傑森不是我向上帝發誓女性男孩 ",
        },
        [5] = {
            "🔥🔥🔥🔥🔥🔥🔥🔥",
            "😅😅😅😅😅😅😅😅",
            "😂😂😂😂😂😂😂😂",
            "😹😹😹😹😹😹😹😹",
            "😛😛😛😛😛😛😛😛",
            "🤩🤩🤩🤩🤩🤩🤩🤩",
            "🌈🌈🌈🌈🌈🌈🌈🌈",
            "😎😎😎😎😎😎😎😎",
            "🤠🤠🤠🤠🤠🤠🤠🤠",
            "😔😔😔😔😔😔😔😔",
        },
        [6] = {
            "gEt OuT oF tHe GrOuNd 🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡 ",
            "brb taking a nap 💤💤💤 ",
            "gonna go take a walk 🚶‍♂️🚶‍♀️🚶‍♂️🚶‍♀️ ",
            "low orbit ion cannon booting up ",
            "how does it feel to not have bbot 🤣🤣🤣😂😂😹😹😹 ",
            "im a firing my laza! 🙀🙀🙀 ",
            "😂😂😂😂😂GAMING CHAIR😂😂😂😂😂",
            "retardheadass",
            "can't hear you over these kill sounds ",
            "i'm just built different yo 🧱🧱🧱 ",
            "📈📈📈📈📈📈📈📈📈📈📈📈📈📈📈📈📈📈📈📈📈📈",
            "OFF📈THE📈CHART📈",
            "KICK HIM 🦵🦵🦵",
            "THE AMOUNT THAT I CARE --> 🤏 ",
            "🤏🤏🤏🤏🤏🤏🤏🤏🤏🤏🤏🤏🤏🤏🤏🤏🤏🤏🤏🤏🤏🤏🤏🤏🤏🤏🤏",
            "SORRY I HURT YOUR ROBLOX EGO BUT LOOK -> 🤏 I DON'T CARE ",
            'table.find(charts, "any other script other than bbot") -> nil 💵💵💵',
            "LOL WHAT ARE YOU SHOOTING AT BRO ",
            "🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥",
            "BRO UR SHOOTING AT LIKE NOTHING LOL UR A CLOWN",
            "🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡",
            "ARE U USING EHUB? 🤡🤡🤡🤡🤡",
            "'EHUB IS THE BEST' 🤡 PASTED LINES OF CODE WITH UNREFERENCED AND UNINITIALIZED VARIABLES AND PEOPLE HAVE NO IDEA WHY IT'S NOT WORKING ",
            "LOL",
            "GIVE UP ",
            "GIVE UP BECAUSE YOU'RE NOT GOING TO BE ABLE TO KILL ME OR WIN LOL",
            "Can't hear you over these bands ",
            "I’m better than you in every way 🏆",
            "I’m smarter than you (I can verify this because I took an online IQ test and got 150) 🧠",
            "my personality shines and it’s generally better than your personality. Yours has flaws",
            "I’m more ambitious than you 🏆💰📣",
            "I’m more funny than you (long shot) ",
            "I’m less turbulent and more assertive and calm than you (proof) 🎰",
            "I’m stronger than you 💪 🦵 ",
            "my attention span is greater and better than yours (proven from you not reading entire list) ",
            "I am more creative and expressive than you will ever be 🎨 🖌",
            "I’m a faster at typing than you 💬 ",
            "In 30 minutes, I will have lifted more weights than you can solve algebraic equations 📓 ",
            "By the time you have completed reading this very factual and groundbreaking evidence that I am truly more superior, thoughtful, and presentable than you are, I will have prospered (that means make negotiable currency or the American Dollar) more than your entire family hierarchy will have ever made in its time span 💰",
            "I am more seggsually stable and better looking than you are 👨",
            "I get along with women easier than you do 👩‍🚀", -- end
            "I am very good at debating 🗣🧑‍⚖️ ",
            "I hit more head than you do 🏆", -- end
            "I win more hvh than you do 🏆", -- end yes this is actually how im going to fix this stupid shit
            "I am more victorious than you are 🏆",
            "Due to my agility, I am better than you at basketball, and all of your favorite sports or any sport for that matter (I will probably break your ankles in basketball by pure accident) ",
            "WE THE BEST CHEATS 🔥🔥🔥🔥 ",
            "Phantom Force Hack Unlook Gun And Aimbot ",
            "banlands 🔨 🗻 down 🏚  ⏬ STOP CRASHING BANLANDS!! 🤣",
            "antares hack client isn't real ",
            "squidhook.xyz 🦑 ",
            "squidhook > all ",
            "spongehook 🤣🤣🤣💕",
            "retardheadass ",
            "interpolation DWORD* C++ int 32 bit programming F# c# coding",
            "Mad?",
            "are we in a library? 🤔 📚 cause you're 👉 in hush 🤫 mode 🤣 😂",
            "please help, my name is john escopetta, normally I would not do this, but under the circumstances I must ask for assistance, please send 500 United States dollars to my paypal, please",
            "🏀🏀 did i break your ankles brother ",
            "he has access to HACK SERVER AND CHANGE WEIGHTS!!!!! STOOOOOOP 😡😒😒😡😡😡😡😡",
            '"cmon dude don\'t use that" you asked for it LOL ',
            "ima just quit mid hvh 🚶‍♀️ ",
            "BABY 😭",
            "BOO HOO 😢😢😭😭😭 STOP CRYING D∪MBASS",
            "BOO HOO 😢😢😭😭😭 STOP CRYING ",
            "🤏",
            "🤏 <-- just to elaborate that i have no care for this situation or you at all, kid (not that you would understand anyways, you're too stupid to understand what i'm saying to begin with)",
            "y",
            "b",
            "before bbot 😭 📢                after bbot 😁😁😜                    don't be like the person who doesn't have bbot",
            "                            MADE YOU LOOK ",
            "                            LOOK BRO LOOK LOOK AT ME ",
            "    A    ",
            "            B        B        O        T    ",
            "                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                I HAVE AJAX YALL BETTER WATCH OUT OR YOU'LL DIE, WATCH WHO YOU'RE SHOOTING",
            "                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                WATCH YOUR STEP KID",
            "BROOOO HE HAS                                                                                                        GOD MODE BRO HE HAS GOD MODE 🚶‍♀️🚶‍♀️🚶‍♀️😜😂😂🤦‍♂️🤦‍♂️😭😭😭👶",
            '"guys what hub has auto shooting"                                                                                                         ',
            "god i wish i had bbot..... 🙏🙏🥺🥺🥺                                                    plzzzzz brooooo 🛐 GIVE IT🛐🛐",
            "buh bot                                                 ",
            "votekick him!!!!!!! 😠 vk VK VK VK VOTEKICK HIM!!!!!!!!! 😠 😢 VOTE KICK !!!!! PRESS Y WHY DIDNT U PRESS Y LOL!!!!!! 😭 ", -- shufy made this
            "Bbot omg omggg omggg its BBot its BBOt OMGGG!!!  🙏🙏🥺🥺😌😒😡",
            "HOw do you get ACCESS to this BBOT ", -- end
            "I NEED ACCESS 🔑🔓 TO BBOT 🤖📃📃📃 👈 THIS THING CALLED BBOT SCRIPT, I NEED IT ",
            '"this god mode guy is annoying", Pr0blematicc says as he loses roblox hvh ',
            "you can call me crimson chin 🦹‍♂️🦹‍♂️ cause i turned your screen red 🟥🟥🟥🟥                                     ",
            "clipped that 🤡 ",
            "Clipped and Uploaded. 🤡",
            "nodus client slime castle crashers minecraft dupeing hack wizardhax xronize grief ... Tlcharger minecraft crack Oggi spiegheremo come creare un ip grabber!",
            "Off synonyme syls midge, smiled at mashup 2 mixed in key free download procom, ... Okay, love order and chaos online gameplayer hack amber forcen ahdistus",
            "ˢᵗᵃʸ ᵐᵃᵈ ˢᵗᵃʸ ᵇᵇᵒᵗˡᵉˢˢ $ ",
            "bbot does not relent ",
        },
    }
    --local
    -- "音频少年公民记忆欲求无尽 heywe 僵尸强迫身体哑集中排水",
    -- "持有毁灭性的神经重景气游行脸红青铜色类别创意案",
    -- "诶比西迪伊艾弗吉艾尺艾杰开艾勒艾马艾娜哦屁吉吾",
    -- "完成与草屋两个苏巴完成与草屋两个苏巴完成与草屋",
    -- "庆崇你好我讨厌你愚蠢的母愚蠢的母庆崇",
    local spam_words = {
        "Hack", "Unlock", "Cheat", "Roblox", "Mod Menu", "Mod", "Menu", "God Mode", "Kill All", "Silent", "Silent Aim", "X Ray", "Aim", "Bypass", "Glitch", "Wallhack", "ESP", "Infinite", "Infinite Credits",
        "XP", "XP Hack", "Infinite Credits", "Unlook All", "Server Backdoor", "Serverside", "2021", "Working", "(WORKING)", "瞄准无声目标绕过", "Gamesense", "Onetap", "PF Exploit", "Phantom Force",
        "Cracked", "TP Hack", "PF MOD MENU", "DOWNLOAD", "Paste Bin", "download", "Download", "Teleport", "100% legit", "100%", "pro", "Professional", "灭性的神经",
        "No Virus All Clean", "No Survey", "No Ads", "Free", "Not Paid", "Real", "REAL 2020", "2020", "Real 2017", "BBot", "Cracked", "BBOT CRACKED by vw", "2014", "desuhook crack",
        "Aimware", "Hacks", "Cheats", "Exploits", "(FREE)", "🕶😎", "😎", "😂", "😛", "paste bin", "bbot script", "hard code", "正免费下载和使", "SERVER BACKDOOR",
        "Secret", "SECRET", "Unleaked", "Not Leaked", "Method", "Minecraft Steve", "Steve", "Minecraft", "Sponge Hook", "Squid Hook", "Script", "Squid Hack",
        "Sponge Hack", "(OP)", "Verified", "All Clean", "Program", "Hook", "有毁灭", "desu", "hook", "Gato Hack", "Blaze Hack", "Fuego Hack", "Nat Hook",
        "vw HACK", "Anti Votekick", "Speed", "Fly", "Big Head", "Knife Hack", "No Clip", "Auto", "Rapid Fire",
        "Fire Rate Hack", "Fire Rate", "God Mode", "God", "Speed Fly", "Cuteware", "Knife Range", "Infinite XRay", "Kill All", "Sigma", "And", "LEAKED",
        "🥳🥳🥳", "RELEASE", "IP RESOLVER", "Infinite Wall Bang", "Wall Bang", "Trickshot", "Sniper", "Wall Hack", "😍😍", "🤩", "🤑", "😱😱", "Free Download EHUB", "Taps", "Owns",
        "Owns All", "Trolling", "Troll", "Grief", "Kill", "弗吉艾尺艾杰开", "Nata", "Alan", "JSON", "BBOT Developers", "Logic", "And", "and", "Glitch",
        "Server Hack", "Babies", "Children", "TAP", "Meme", "MEME", "Laugh", "LOL!", "Lol!", "ROFLSAUCE", "Rofl", ";p", ":D", "=D", "xD", "XD", "=>", "₽", "$", "8=>", "😹😹😹", "🎮🎮🎮", "🎱", "⭐", "✝",
        "Ransomware", "Malware", "SKID", "Pasted vw", "Encrypted", "Brute Force", "Cheat Code", "Hack Code", ";v", "No Ban", "Bot", "Editing", "Modification", "injection", "Bypass Anti Cheat",
        "铜色类别创意", "Cheat Exploit", "Hitbox Expansion", "Cheating AI", "Auto Wall Shoot", "Konami Code", "Debug", "Debug Menu", "🗿", "£", "¥", "₽", "₭", "€", "₿", "Meow", "MEOW", "meow",
        "Under Age", "underage", "UNDER AGE", "18-", "not finite", "Left", "Right", "Up", "Down", "Left Right Up Down A B Start", "Noclip Cheat", "Bullet Check Bypass",
        "client.char:setbasewalkspeed(999) SPEED CHEAT.", "diff = dot(bulletpos, intersection - step_pos) / dot(bulletpos, bulletpos) * dt", "E = MC^2", "Beyond superstring theory",
        "It is conceivable that the five superstring theories are approximated to a theory in higher dimensions possibly involving membranes.",
    }

    setrawmetatable(chatspams, { -- this is the dumbest shit i've ever fucking done
        __call = function(self, type, debounce, time)
            if type ~= 1 then
                if type == 7 or type == 9 then
                    local words = type == 7 and spam_words or customChatSpam
                    if #words == 0 then
                        return nil
                    end
                    local message = ""
                    for i = 1, math.random(25) do
                        message = message .. " " .. words[math.random(#words)]
                    end
                    return message
                end
                local chatspamtype = type == 8 and customChatSpam or self[type]

                local rand = time and 1 + time % #chatspamtype or math.random(1, #chatspamtype)
                if not time and debounce then
                    if self.lastchoice == rand then
                        repeat
                            rand = math.random(1, #chatspamtype)
                        until rand ~= self.lastchoice
                    end
                    self.lastchoice = rand
                end
                local curchoice = chatspamtype[rand]
                return curchoice
            end
        end,
        __metatable = "neck yourself weird kid the fuck you trying to do",
    })

    local skelparts = { "Head", "Right Arm", "Right Leg", "Left Leg", "Left Arm" }

    local function MouseUnlockHook()
        if menu.open then
            if client.char.alive then
                INPUT_SERVICE.MouseBehavior = Enum.MouseBehavior.Default
            else
                INPUT_SERVICE.MouseIconEnabled = false
            end
        else
            if client.char.alive then
                INPUT_SERVICE.MouseBehavior = Enum.MouseBehavior.LockCenter
                INPUT_SERVICE.MouseIconEnabled = false
            else
                INPUT_SERVICE.MouseBehavior = Enum.MouseBehavior.Default
                INPUT_SERVICE.MouseIconEnabled = true
            end
        end
    end
    local function renderChamsOnPlayer(player, parts, show_target)
        if show_target == nil then show_target = true end
        local Body = parts or client.replication.getbodyparts(player)
        if Body then
            local enabled
            local col
            local vTransparency

            local xqz
            local ivTransparency

            if player.Team ~= Players.LocalPlayer.Team then
                enabled = menu:GetVal("Visuals", "Enemy ESP", "Chams")
                col = menu:GetVal("Visuals", "Enemy ESP", "Chams", COLOR2, true)
                vTransparency = 1 - menu:GetVal("Visuals", "Enemy ESP", "Chams", COLOR2)[4] / 255
                xqz = menu:GetVal("Visuals", "Enemy ESP", "Chams", COLOR1, true)
                ivTransparency = 1 - menu:GetVal("Visuals", "Enemy ESP", "Chams", COLOR1)[4] / 255
            else
                enabled = menu:GetVal("Visuals", "Team ESP", "Chams")
                col = menu:GetVal("Visuals", "Team ESP", "Chams", COLOR2, true)
                vTransparency = 1 - menu:GetVal("Visuals", "Team ESP", "Chams", COLOR2)[4] / 255
                xqz = menu:GetVal("Visuals", "Team ESP", "Chams", COLOR1, true)
                ivTransparency = 1 - menu:GetVal("Visuals", "Team ESP", "Chams", COLOR1)[4] / 255
            end

            player.Character = Body.rootpart.Parent
            local Parts = player.Character:GetChildren()
            for k1 = 1, #Parts do
                Part = Parts[k1]
                --debug.profilebegin("renderChams " .. player.Name)
                if Part.ClassName ~= "Model" and Part.Name ~= "HumanoidRootPart" then
                    local helmet = Part:FindFirstChild("HELMET")
                    if helmet then
                        helmet.Slot1.Transparency = enabled and 1 or 0
                        helmet.Slot2.Transparency = enabled and 1 or 0
                    end

                    if not Part:FindFirstChild("c88") then
                        for i = 0, 1 do
                            local box

                            if Part.Name ~= "Head" then
                                box = Instance.new("BoxHandleAdornment", Part)
                                box.Size = Part.Size + Vector3.new(0.1, 0.1, 0.1)
                                if i == 0 then
                                    box.Size -= Vector3.new(0.25, 0.25, 0.25)
                                end
                                table.insert(misc.adornments, box)
                            else
                                box = Instance.new("CylinderHandleAdornment", Part)
                                box.Height = Part.Size.y + 0.3
                                box.Radius = Part.Size.x * 0.5 + 0.2
                                if i == 0 then
                                    box.Height -= 0.2
                                    box.Radius -= 0.2
                                end
                                box.CFrame = CFrame.new(CACHED_VEC3, Vector3.new(0, 1, 0))
                                table.insert(misc.adornments, box)
                            end

                            box.Name = i == 0 and "c88" or "c99"
                            box.Adornee = Part
                            box.ZIndex = 1

                            box.AlwaysOnTop = i == 0 -- ternary sex
                            box.Color3 = i == 0 and col or xqz
                            box.Transparency = i == 0 and vTransparency or ivTransparency

                            box.Visible = enabled
                        end
                    end
                    for i = 0, 1 do
                        local adorn = i == 0 and Part.c88 or Part.c99
                        if menu:GetVal("Visuals", "ESP Settings", "Highlight Priority") and table.find(menu.priority, player.Name)
                        then
                            xqz = menu:GetVal(
                                    "Visuals",
                                    "ESP Settings",
                                    "Highlight Priority",
                                    COLOR,
                                    true
                                )
                            col = bColor:Mult(xqz, 0.6)
                        elseif menu:GetVal("Visuals", "ESP Settings", "Highlight Friends", COLOR) and table.find(menu.friends, player.Name)
                        then
                            xqz = menu:GetVal("Visuals", "ESP Settings", "Highlight Friends", COLOR, true)
                            col = bColor:Mult(xqz, 0.6)
                        elseif show_target and menu:GetVal("Visuals", "ESP Settings", "Highlight Target") and (
                                player == legitbot.target or player == ragebot.target
                            )
                        then
                            xqz = menu:GetVal(
                                "Visuals",
                                "ESP Settings",
                                "Highlight Target",
                                COLOR,
                                true
                            )
                            col = bColor:Mult(xqz, 0.6)
                        end
                        adorn.Color3 = i == 0 and col or xqz
                        adorn.Visible = enabled
                        adorn.Transparency = i == 0 and vTransparency or ivTransparency
                    end
                end
                --debug.profileend("renderChams " .. player.Name)
            end
        end
    end

    local function renderChams() -- this needs to be optimized a fucking lot i legit took this out and got 100 fps -- FUCK YOU JSON FROM MONTHS AGO YOU UDCK -- fuk json
        --debug.profilebegin("render chams")

        local PlayerList = Players:GetPlayers()
        for k = 1, #PlayerList do
            local player = PlayerList[k]
            if player == LOCAL_PLAYER then
                continue
            end -- doing this for now, i'll have to change the way the third person model will end up working
            renderChamsOnPlayer(player)
        end
        --debug.profileend("render chams")
    end

    local send = client.net.send
    local last_chat = os.time()

    CreateThread(function()
        repeat
            wait()
        until menu and menu.fading -- this is fucking bad
        while true do
            local current_time = os.time()
            if not menu then
                return
            end
            local speed = menu:GetVal("Misc", "Extra", "Chat Spam Delay")
            if current_time % speed == 0 and current_time ~= last_chat then
                local cs = menu:GetVal("Misc", "Extra", "Chat Spam")
                if cs ~= 1 then
                    local curchoice = chatspams(cs, false, current_time)
                    if curchoice ~= nil then
                        curchoice = menu:GetVal("Misc", "Extra", "Chat Spam Repeat") and string.rep(curchoice, 100) or curchoice
                        send(nil, "chatted", curchoice)
                    end
                end
                last_chat = current_time
            end
            game.RunService.RenderStepped:Wait()
        end

        return
    end)

    do --ANCHOR metatable hookz
        local mt = getrawmetatable(game)

        local oldNewIndex = mt.__newindex
        local oldIndex = mt.__index
        local oldNamecall = mt.__namecall

        setreadonly(mt, false)

        mt.__newindex = newcclosure(function(self, id, val)
            if checkcaller() or not menu then
                return oldNewIndex(self, id, val)
            end
            if client.char.alive then
                if self == workspace.Camera then
                    if id == "CFrame" then
                        if menu:GetVal("Visuals", "Local", "Third Person") and menu:GetKey("Visuals", "Local", "Third Person") and client.char.alive
                        then
                            local dist = menu:GetVal("Visuals", "Local", "Third Person Distance") / 10
                            local params = RaycastParams.new()
                            params.FilterType = Enum.RaycastFilterType.Blacklist
                            params.FilterDescendantsInstances = { Camera, workspace.Ignore, workspace.Players }

                            local hit = workspace:Raycast(val.p, -val.LookVector * dist, params)
                            if hit and not hit.Instance.CanCollide then
                                return oldNewIndex(self, id, val * CFrame.new(0, 0, dist))
                            end
                            local mag = hit and (hit.Position - val.p).Magnitude or nil

                            val *= CFrame.new(0, 0, mag or dist)
                        end

                        -- if keybindtoggles.superaa then
                        --     local angles = val - val.p
                        --     local newcf = client.superaastart * angles
                        --     client.superaastart = newcf
                        --     return oldNewIndex(self, id, newcf)
                        -- end
                    end
                elseif self == client.char.rootpart then
                    if id == "CFrame" then
                        -- if menu:GetVal("Misc", "Exploits", "Bypass Speed Checks") then
                        --     oldNewIndex(self, id, LOCAL_MOUSE.Hit)
                        --     oldNewIndex(self, "Position", LOCAL_MOUSE.Hit.p)
                        --     oldNewIndex(self, "Velocity", Vector3.new(0, 0, 0))
                        --     return
                        -- end
                        -- if not keybindtoggles.superaa and menu:GetVal("Misc", "Exploits", "Noclip") and keybindtoggles.fakebody then -- yes this works i dont know why and im not assed to do this a different way but this is retarrded enough
                        --     local offset = Vector3.new(0, client.fakeoffset, 0)
                        --     self.Position = val.p - offset
                        --     self.Position = val.p + offset
                        -- end

                        -- if keybindtoggles.superaa then
                        --     -- Vector3.new(math.sin(tick() * 7) * 200, 50, math.cos(tick() * 7) * 100)
                        --     client.superaastart = CFrame.new(client.superaastart.p)

                        --     local tv = Vector3.new()
                        --     local cf = client.cam.basecframe
                        --     local rightVector = cf.RightVector
                        --     local lv = cf.lookVector
                        --     if INPUT_SERVICE:IsKeyDown(Enum.KeyCode.W) then
                        --         tv += lv
                        --     end
                        --     if INPUT_SERVICE:IsKeyDown(Enum.KeyCode.S) then
                        --         tv -= lv
                        --     end
                        --     if INPUT_SERVICE:IsKeyDown(Enum.KeyCode.A) then
                        --         tv -= rightVector
                        --     end
                        --     if INPUT_SERVICE:IsKeyDown(Enum.KeyCode.D) then
                        --         tv += rightVector
                        --     end
                        --     if INPUT_SERVICE:IsKeyDown(Enum.KeyCode.Space) then
                        --         tv += Vector3.new(0, 1, 0)
                        --     end
                        --     if INPUT_SERVICE:IsKeyDown(Enum.KeyCode.LeftShift) then
                        --         tv -= Vector3.new(0, 1, 0)
                        --     end

                        --     local shouldAdd = tv.Unit.x == tv.Unit.x
                        --     local hitwall = false
                        --     if shouldAdd then
                        --         local unit = tv.Unit
                        --         unit *= 0.01
                        --         local nextpos = client.superaastart + unit * menu:GetVal("Misc", "Movement", "Fly Speed")
                        --         local delta = nextpos.p - client.superaastart.p
                        --         local raycastResult = workspace:Raycast(client.superaastart.p, delta, mapRaycast)
                        --         if raycastResult then
                        --             --warn("HITTING A WALL")
                        --             hitwall = true
                        --             local hitpos = raycastResult.Position
                        --             local normal = raycastResult.Normal
                        --             local newpos = hitpos + 0.1 * normal
                        --             client.superaastart = CFrame.new(newpos)
                        --         end
                        --         if not hitwall then
                        --             client.superaastart += unit * menu:GetVal("Misc", "Movement", "Fly Speed")
                        --         end
                        --     end

                        --     local supervector = Vector3.new((os.time() * 850) % 6000, 50, math.cos(os.time() * 5) * 6900)
                        --     local uber = client.superaastart.p + supervector
                        --     oldNewIndex(self, id, client.superaastart)
                        --     oldNewIndex(self, "Position", uber)
                        --     oldNewIndex(self, "Velocity", Vector3.new(0, 0, 0))
                        --     return
                        -- end
                    end
                end
            end
            return oldNewIndex(self, id, val)
        end)

        mt.__namecall = newcclosure(function(self, ...)
            if not checkcaller() then
                local namecallmethod = getnamecallmethod()
                local fkunate = { ... }
                if self == workspace and namecallmethod == "FindPartsInRegion3" then
                    if menu.spectating then
                        -- sphereraycast cheat 2021
                        fkunate[2] = workspace.CurrentCamera
                    end
                    return oldNamecall(self, unpack(fkunate))
                end
            end

            return oldNamecall(self, ...)
        end)

        menu.oldmt = {
            __newindex = oldNewIndex,
            __index = oldIndex,
            __namecall = oldNamecall,
        }

        setreadonly(mt, true)
    end

    do --ANCHOR camera function definitions.
        function camera:AngleToEdge(angle, inset) -- pasted from the grenade indicators lmao
            local pos
            local ox = math.cos(angle)
            local oy = math.sin(angle)
            local slope = oy / ox
           
            local h_edge = SCREEN_SIZE.x - inset
            local v_edge = SCREEN_SIZE.y - inset
            if oy < 0 then
                v_edge = inset
            end
            if ox < 0 then
                h_edge = inset
            end
            local y = (slope * h_edge) + (SCREEN_SIZE.y / 2) - slope * (SCREEN_SIZE.x / 2)
            if y > 0 and y < SCREEN_SIZE.y - inset then
                pos = Vector2.new(h_edge, y)
            else
                pos = Vector2.new(
                    (v_edge - SCREEN_SIZE.y / 2 + slope * (SCREEN_SIZE.x / 2)) / slope,
                    v_edge
                )
            end
            return pos
        end
        function camera:SetArmsVisible(flag)
            local larm, rarm = Camera:FindFirstChild("Left Arm"), Camera:FindFirstChild("Right Arm")
            assert(larm, "arms are missing")
            for k, v in next, larm:GetChildren() do
                if v:IsA("Part") then
                    v.Transparency = flag and 0 or 1
                end
            end
            for k, v in next, rarm:GetChildren() do
                if v:IsA("Part") then
                    v.Transparency = flag and 0 or 1
                end
            end
        end

        function camera:GetFOV(Part, originPart) originPart = originPart or workspace.Camera
            local directional = CFrame.new(originPart.CFrame.Position, Part.Position)
            local ang = Vector3.new(directional:ToOrientation()) - Vector3.new(originPart.CFrame:ToOrientation())
            return math.deg(ang.Magnitude)
        end

        function camera:GetPlayersOrganizedByFov(players)
            local result = {}
            local playerobjects = {}
            players = players or Players:GetPlayers()
            for i, player in next, players do
                local curbodyparts = client.replication.getbodyparts(player)
                if curbodyparts and client.hud:isplayeralive(player) then
                    local fov = camera:GetFOV(curbodyparts.rootpart)
                    result[i] = fov
                else
                    result[i] = 999
                end
            end
            table.sort(result)
            for i, fov in next, result do
                playerobjects[fov] = players[i]
            end
            return playerobjects
        end

        function camera:IsVisible(Part, origin) origin = origin or Camera.CFrame.Position

            local hit, position = workspace:FindPartOnRayWithWhitelist(Ray.new(origin, Part.Position - origin), client.roundsystem.raycastwhitelist)

            if hit then
                if hit.CanCollide and hit.Transparency == 0 then
                    return false
                else
                    return self:IsVisible(Part, position + (Part.Position - origin).Unit * 0.01)
                end
            else
                return true
            end

            -- return (position == Part.Position or (Parent and hit and Parent:IsAncestorOf(hit)))
        end

        function camera:LookAt(pos)
            local angles = camera:GetAnglesTo(pos, true)
            local delta = client.cam.angles - angles
            client.cam.angles = angles
            client.cam.delta = delta
        end

        function camera:GetAngles()
            local pitch, yaw = Camera.CFrame:ToOrientation()
            return { ["pitch"] = pitch, ["yaw"] = yaw, ["x"] = pitch, ["y"] = yaw }
        end

        function camera:GetAnglesTo(Pos, useVector)
            local pitch, yaw = CFrame.new(Camera.CFrame.Position, Pos):ToOrientation()
            if useVector then
                return Vector3.new(pitch, yaw, 0)
            else
                return { ["pitch"] = pitch, ["yaw"] = yaw }
            end
        end

        function camera:GetTrajectory(pos, origin)
            if client.logic.currentgun and client.logic.currentgun.data then origin = origin or Camera.CFrame.Position
                local traj = client.trajectory(origin, GRAVITY, pos, client.logic.currentgun.data.bulletspeed)
                return traj and origin + traj or false
            end
        end
    end

    do --ANCHOR ragebot definitions
        ragebot.sprint = true
        ragebot.shooting = false
        ragebot.predictedDamageDealt = {}
        ragebot.predictedDamageDealtRemovals = {}
        ragebot.predictedMisses = {}
        ragebot.predictedShotAt = {}
        ragebot.fakePositionsResolved = {}
        ragebot.firsttarget = nil
        ragebot.spin = 0
        ragebot.angles = Vector2.new(0, 0)
        do
            local function GetPartTable(player)
                local tbl = {}
                for k, v in pairs(player) do
                    tbl[v] = true
                end
                return tbl
            end
        end

        local timehit = client.physics.timehit

        local function isdirtyfloat(f) -- if we dont use this theres a large chance the autowall will break
            local dirtyflag = true -- that being said this function is actually useful, pretty much a QNAN check or whatever
            if f == f then
                dirtyflag = true
                if f ~= (1 / 0) then
                    dirtyflag = f == (-1 / 0)
                end
            end
            return dirtyflag
        end

        local bulletLifeTime = client.publicsettings.bulletLifeTime

        local function ignorecheck(p)
            if p.Name == "abcdefg" then
                return false
            end
            if not p.CanCollide then
                return true
            end
            if p.Transparency == 1 then
                return true
            end
            if p.Name ~= "Window" then
                return
            end
            return true
        end

        local dot = Vector3.new().Dot

        local bulletcheckresolution = 0.03333333333333333

        function ragebot.bulletcheck(origin, dest, velocity, acceleration, penetration, whitelist) -- reversed
            local ignorelist = { workspace.Terrain, workspace.Players, workspace.Ignore, workspace.CurrentCamera }
            local bullettime = 0
            local exited = false
            local penetrated = true
            local step_pos = origin
            local penetration = penetration
            local intersection
            local maxtime = timehit(step_pos, velocity, acceleration, dest)
            if not (not isdirtyfloat(maxtime)) or bulletLifeTime < maxtime or maxtime == 0 then
                return false
            end
            while bullettime < maxtime do
                local dt = maxtime - bullettime
                if dt > bulletcheckresolution then
                    dt = bulletcheckresolution
                end
                local bulletvelocity = dt * velocity + dt * dt / 2 * acceleration
                local enter = raycastutil.raycast(step_pos, bulletvelocity, ignorelist, ignorecheck, true)
                if enter then
                    local hit = enter.Instance
                    if enter.Position then
                        intersection = enter.Position
                    end
                    local normalized = bulletvelocity.unit
                    if whitelist and whitelist[hit] then
                        penetrated = true
                        step_pos = intersection
                        break
                    end
                    local exit = raycastutil.raycastSingleExit(intersection, hit.Size.magnitude * normalized, hit)
                    if exit then
                        local norm = exit.Normal
                        local dist = dot(normalized, exit.Position - intersection)
                        local diff = dot(bulletvelocity, intersection - step_pos) / dot(bulletvelocity, bulletvelocity)  * dt
                        step_pos = intersection + 0.01 * normalized
                        velocity = velocity + diff * acceleration
                        bullettime = bullettime + diff
                        if not (dist < penetration) then
                            penetrated = false
                            break
                        end
                        penetration = penetration - dist
                        table.insert(ignorelist, hit)
                        exited = true
                    else
                        step_pos = step_pos + bulletvelocity
                        velocity = velocity + dt * acceleration
                        bullettime = bullettime + dt
                    end
                else
                    step_pos = step_pos + bulletvelocity
                    velocity = velocity + dt * acceleration
                    bullettime = bullettime + dt
                end
            end

            return penetrated, exited, step_pos
        end

        function ragebot:GetResolvedPosition(player, torso_cframe, root_cframe)
            if not menu:GetVal("Rage", "Settings", "Resolve Fake Positions") then return end
            local resolvedPosition
            local misses = self.predictedMisses[player]
            local modmisses = misses and misses % 5

            curbodyparts = curbodyparts or client.replication.getbodyparts(player)
            if not torso_cframe or not client.hud:isplayeralive(player) or not torso_cframe then
                return
            end
            local rep = ragebot.repupdates[player]
            if rep and rep.position and rep.position and (rep.position - torso_cframe.Position).Magnitude > 18  then
                resolvedPosition = rep.position
            end
            if (root_cframe.Position - torso_cframe.Position).Magnitude > 18 then
                resolvedPosition = root_cframe.Position
            end
            if modmisses and modmisses > 3 then
                local rep = self.fakePositionsResolved[player]
               
                if rep and (rep - torso_cframe.Position).Magnitude > 18 then
                    resolvedPosition = rep
                end
            end
           
            return resolvedPosition
        end

        function ragebot:GetDamage(distance, headshot)
            local data = client.logic.currentgun.data
            local r0, r1, d0, d1 = data.range0, data.range1, data.damage0, data.damage1
            return (
                    distance < r0 and d0 or distance < r1 and (d1 - d0) / (r1 - r0) * (distance - r0) + d0 or d1
                )  * (headshot and data.multhead or 1)
        end

        function ragebot:bulletcheck_legacy(origin, destination, penetration, whitelist)
            local dir = (destination - origin)
            if dot(dir, dir) < 0 then
                return true
            end

            local hit, enter = workspace:FindPartOnRayWithWhitelist(Ray.new(origin, dir), client.roundsystem.raycastwhitelist)

            if hit then
                local unit = dir.Unit
                local maxextent = hit.Size.Magnitude * unit
                local _, exit = workspace:FindPartOnRayWithWhitelist(Ray.new(enter + maxextent, -maxextent), { hit })
                local diff = exit - enter
                local dist = dot(unit, diff)
                if dist < 0 then
                    return true
                end
                local pass = not hit.CanCollide or hit.Name == "Window" or hit.Transparency == 1
                local exited = false

                local newpos = enter + 0.01 * unit

                if not pass then
                    if dist < penetration then
                        penetration = penetration - dist
                    else
                        return false
                    end
                end

                return ragebot:bulletcheck_legacy(newpos, destination, penetration, whitelist)
            else
                return true
            end
        end

        function ragebot:CanPenetrate(origin, target, penetration, whitelist)
            if not whitelist then
                whitelist = { [target] = true }
            end

            local d, t = client.trajectory(origin, GRAVITY, target.Position, client.logic.currentgun.data.bulletspeed)
            if not t then
                return
            end
            if not d then
                return ragebot:bulletcheck_legacy(origin, target.Position, penetration, whitelist)
            end
            local z = d.Unit * client.logic.currentgun.data.bulletspeed -- bullet speed cheat --PATCHED. :(
            -- bulletcheck dumps if you fucking do origin + traj idk why you do it but i didnt do it and it fixed the dumping
            return ragebot.bulletcheck(origin, target.Position, z, GRAVITY, penetration, whitelist)
        end

        function ragebot:AimAtTarget(part, target, head, origin, resolved, backtrack_frame)
            local origin = origin or client.cam.cframe.p
            if not part then
                ragebot.silentVector = nil
                ragebot.firepos = nil
                --[[ if ragebot.shooting and menu:GetVal("Rage", "Aimbot", "Auto Shoot") then
                    client.logic.currentgun:shoot(false)
                end ]]
                if ragebot.target then
                    renderChamsOnPlayer(ragebot.target)
                end
                ragebot.target = nil
                ragebot.shooting = false
                return
            end

            local position = (backtrack_frame and backtrack_frame.pos) or (part and part.Position)
            local target_pos = position
            local dist = (position - origin).Magnitude
            local dir = camera:GetTrajectory(position, origin) - origin
            if not menu:GetVal("Rage", "Aimbot", "Silent Aim") then
                camera:LookAt(dir + origin)
            end
            ragebot.silentVector = dir.unit
            ragebot.target = target
            if ragebot.target then
                renderChamsOnPlayer(ragebot.target)
            end
            ragebot.targetpart = part
            ragebot.firepos = origin
            ragebot.shooting = true
            ragebot.time = (backtrack_frame and backtrack_frame.time) or tick()
            if menu:GetVal("Rage", "Aimbot", "Auto Shoot") then
                local firerate = type(client.logic.currentgun.data.firerate) == "table" and client.logic.currentgun.data.firerate[1] or client.logic.currentgun.data.firerate
                local scaledFirerate = firerate  * menu:GetVal("Misc", "Weapon Modifications", "Fire Rate Scale") / 100
                local damage = self:GetDamage(dist, head)
                damage *= client.logic.currentgun.data.pelletcount or 1 -- super shotgun cheat
                ragebot:shoot(scaledFirerate, target, damage)
                misc.autopeekposition = nil
            end
        end

        local HITBOX_SHIFT_SIZE = Vector3.new(3, 3, 3)
        local HITBOX_SHIFT_AMOUNT = 12.5833333333333
        local lastHitboxPriority
        ragebot.backtrackframes = {}

        function ragebot:GetBacktrackedPosition(player, curbodyparts, time)
            if not self.backtrackframes[player] then
                self.backtrackframes[player] = {}
            end
            local newframe = {pos = curbodyparts.rootpart.Position, time = tick()}
            if not self.backtrackframes[player][1] or (newframe.pos - self.backtrackframes[player][#self.backtrackframes[player]].pos).Magnitude > 1 then
                table.insert(self.backtrackframes[player], newframe)
            end

            for i = #self.backtrackframes[player], 1, -1  do
                if not self.backtrackframes[player][i] then continue end
                if tick() - self.backtrackframes[player][i].time > time - GetLatency() * 2 then
                    table.remove(self.backtrackframes[player], i)
                end
            end
            return self.backtrackframes[player][1]
        end
        function ragebot:GetTarget(hitboxPriority, players, origin)
            hitboxPriority = hitboxPriority == 1 and "head" or "torso"
            hitboxPriority = hitboxPriority or lastHitboxPriority
            lastHitboxPriority = hitboxPriority or lastHitboxPriority
            self.intersection = nil

            --debug.profilebegin("BB self GetTarget")
            --local hitscan = hitscan or {}
            local partPreference = hitboxPriority
                or "you know who i am? well you about to find out, your barbecue boy"
            local closest, cpart, theplayer = math.huge, nil, nil
            if not players then
                players = { self.firsttarget, table.unpack(Players:GetPlayers()) } --= this is so much fucking ebtter but it's still ultra shit
            end

            local autowall = menu:GetVal("Rage", "Aimbot", "Auto Wallbang")
            local aw_resolve = menu:GetVal("Rage", "Hack vs. Hack", "Autowall Hitscan")
            local hitboxshift = menu:GetVal("Rage", "Hack vs. Hack", "Hitbox Shifting")
            --local campos = client.cam.basecframe
            local zerocf = client.cam.basecframe - client.cam.basecframe.p
            local campos = origin or zerocf + client.lastrepupdate
            local camposreal = campos
            local camposv3 = camposreal.p
            local firepos
            local head
            local resolvedPosition
            local newbone
            local realbone
            local backtrackFrame

            local aimbotFov = menu:GetVal("Rage", "Aimbot", "Aimbot FOV")
            for usingbacktrack = 0, 1 do
                if cpart and usingbacktrack == 1 then break end
                for i, player in next, players do
                    if player.Team ~= LOCAL_PLAYER.Team and player ~= LOCAL_PLAYER then
                        if table.find(menu.friends, player.Name) and menu:GetVal("Misc", "Extra", "Ignore Friends") then
                            continue
                        end
                        if
                            not table.find(menu.priority, player.Name)
                            and menu:GetVal("Misc", "Extra", "Target Only Priority Players")
                        then
                            continue
                        end
                        if
                            menu:GetVal("Rage", "Settings", "Aimbot Damage Prediction")
                            and self.predictedDamageDealt[player]
                            and self.predictedDamageDealt[player] > menu:GetVal("Rage", "Settings", "Damage Prediction Limit")
                        then
                            continue
                        end
                        local misses = self.predictedMisses[player] or 1
                        local curbodyparts = client.replication.getbodyparts(player)
                        if curbodyparts and client.hud:isplayeralive(player) then
                            local newhitboxshift = hitboxshift
                            resolvedPosition = self:GetResolvedPosition(player, curbodyparts.torso.CFrame, curbodyparts.rootpart.CFrame)
                            local resolved = false

                            if resolvedPosition then
                                menu.parts.resolverHitbox.Position = resolvedPosition
                                resolved = true
                                newhitboxshift = false
                            end
                            local backtracked, backtrackpart
                            if not resolved then
                                if menu:GetVal("Rage", "Hack vs. Hack", "Backtracking") and usingbacktrack == 1 then
                                    backtrackFrame = self:GetBacktrackedPosition(player, curbodyparts, menu:GetVal("Rage", "Hack vs. Hack", "Backtracking Time")/1000 / (client.stutterFrames % 2 == 1 and 2 or 1))
                                   
                                    if backtrackFrame and backtrackFrame.pos then
                                        newhitboxshift = false
                                        backtracked = true
                                        time = backtrackFrame.time
                                        backtrackpart = menu.parts.backtrackHitbox
                                        backtrackpart.Position = backtrackFrame.pos
                                    end
                                end
                            end
                            local bone = curbodyparts.rootpart
                            realbone = curbodyparts[hitboxPriority]
                            if bone.ClassName == "Part" then
                                local newbone = realbone
                                if resolved then
                                    newbone = menu.parts.resolverHitbox
                                    self.intersection = menu.parts.resolverHitbox.Position
                                elseif backtracked then
                                    newbone = backtrackpart
                                    self.intersection = backtrackpart.Position
                                end
                                local fovToBone = camera:GetFOV(newbone)
                                if fovToBone < aimbotFov or aimbotFov > 180 then -- Awesome
                                    if camera:IsVisible(newbone, camposv3) then
                                        if fovToBone < closest then
                                            closest = fovToBone
                                            cpart = bone
                                            theplayer = player
                                            firepos = camposv3
                                            head = hitboxPriority == "head"
                                            if menu.priority[player.Name] then
                                                break
                                            end
                                        else
                                            continue
                                        end
                                    elseif autowall then
                                        --debug.profilebegin("BB self Penetration Check " .. player.Name)
                                        local directionVector = camera:GetTrajectory(newbone.Position, camposv3)
                                        -- self:CanPenetrate(LOCAL_PLAYER, player, directionVector, newbone.Position, barrel, menu:GetVal("Rage", "Hack vs. Hack", "Extend Penetration"))
                                        -- self:CanPenetrate(origin, target, velocity, penetration)
                                        if not directionVector then
                                            continue
                                        end
                                        if
                                        self:CanPenetrate(
                                                camposv3,
                                                newbone,
                                                client.logic.currentgun.data.penetrationdepth
                                            )
                                        then
                                            cpart = realbone
                                            theplayer = player
                                            firepos = camposv3
                                            head = hitboxPriority == "head"
                                            if menu.priority[player.Name] then
                                                break
                                            end
                                        elseif aw_resolve then
                                            local axisPosition, bulletintersection =
                                                self:HitscanOnAxes(camposreal, player, newbone, newhitboxshift)
                                            if axisPosition then
                                                self.firepos = axisPosition
                                                cpart = realbone
                                                theplayer = player
                                                firepos = axisPosition
                                                head = hitboxPriority == "head"
                                                if menu.priority[player.Name] then
                                                    break
                                                end
                                            end
                                        end
                                        --debug.profileend("BB self Penetration Check " .. player.Name)
                                    end
                                end
                            end
                        end
                    end
                end
            end
            if
                (cpart and theplayer and closest and firepos)
                and menu:GetKey("Misc", "Exploits", "Crimwalk")
                and menu:GetVal("Misc", "Exploits", "Disable Crimwalk on Shot")
            then
                menu:SetKey("Misc", "Exploits", "Crimwalk")
                CreateNotification("Crimwalk disabled due to ragebot")
                LOCAL_PLAYER.Character.HumanoidRootPart.Position = client.lastrepupdate
            end
            --debug.profileend("BB self GetTarget")
           
            return cpart, theplayer, closest, firepos, head, backtrackFrame
        end

        function ragebot:GetKnifeTargets()
            local hitscan = menu:GetVal("Rage", "Extra", "Knife Hitscan")
            hitscan = hitscan == 1 and "head" or hitscan == 2 and "torso" or "rleg"
            local sightlines = menu:GetVal("Rage", "Extra", "Knife Visible Only")
            local range = menu:GetVal("Rage", "Extra", "Knife Range")
            local results = {}

            for i, player in ipairs(Players:GetPlayers()) do
                if table.find(menu.friends, player.Name) and menu:GetVal("Misc", "Extra", "Ignore Friends") then
                    continue
                end
                if not table.find(menu.priority, player.Name) and menu:GetVal("Misc", "Extra", "Target Only Priority Players")
                then
                    continue
                end

                if player.Team ~= LOCAL_PLAYER.Team and client.hud:isplayeralive(player) then
                    local parts = client.replication.getbodyparts(player)
                    if not parts then
                        continue
                    end


                   
                    local target_pos = parts.rootpart.Position
                    local target_direction = target_pos - client.cam.cframe.p
                    local target_dist = (target_pos - client.cam.cframe.p).Magnitude

                    if range ~= 26 and target_dist > range then
                        continue
                    end
                   
                    local ignore = { LOCAL_PLAYER, Camera, workspace.Ignore, workspace.Players }

                    local part1, ray_pos = workspace:FindPartOnRayWithIgnoreList(Ray.new(client.cam.cframe.p, target_direction), ignore)

                    if part and sightlines then
                        continue -- if this ignores workspace.Players actually then this should work
                        -- voila it wrks
                    end

                    local part2, ray_pos = workspace:FindPartOnRayWithIgnoreList(
                            Ray.new(client.cam.cframe.p - Vector3.new(0, 2, 0), target_direction),
                            ignore
                        )

                    local ray_distance = (target_pos - ray_pos).Magnitude
                    table.insert(results, {
                        player = player,
                        part = parts[hitscan],
                        tppos = ray_pos,
                        direction = target_direction,
                        dist = target_dist,
                        insight = ray_distance < 15 and part1 == part2,
                    })
                end
            end

            return results
        end

        function ragebot:KnifeBotMain()
            if not client.char.alive then
                return
            end
            if not LOCAL_PLAYER.Character or not LOCAL_PLAYER.Character:FindFirstChild("HumanoidRootPart") then
                return
            end

            if menu:GetVal("Rage", "Extra", "Knife Bot") and menu:GetKey("Rage", "Extra", "Knife Bot", true) then
                local knifetype = menu:GetVal("Rage", "Extra", "Knife Bot Type")
                if knifetype == 2 then
                    ragebot:KnifeAura()
                elseif knifetype == 3 then
                    ragebot:FlightAura()
                end
            end
        end

        function ragebot:FlightAura()
            local targets = ragebot:GetKnifeTargets()

            for i, target in pairs(targets) do
                if not target.insight then
                    continue
                end
                LOCAL_PLAYER.Character.HumanoidRootPart.Anchored = false
                LOCAL_PLAYER.Character.HumanoidRootPart.Velocity = target.direction.Unit * 130

                return ragebot:KnifeAura(targets)
            end
        end

        function ragebot:KnifeAura(t)
            local targets = t or ragebot:GetKnifeTargets()
            for i, target in ipairs(targets) do
                if target.player then
                    ragebot:KnifeTarget(target)
                end
            end
        end

        function ragebot:KnifeTarget(target, stab)
            if target and target.part then
                local cfc = client.cam.cframe
                --send(client.net, "repupdate", cfc.p, client.cam.angles) -- Makes knife aura work with anti nade tp
                if stab then
                    send(client.net, "stab")
                end
                local newhit = nil
                newhit = { Name = target.part.Name, Position = client.cam.cframe.p } -- fuckin hack
                send(client.net, "knifehit", target.player, tick(), newhit or target.part)
            end
        end

        function ragebot:GetCubicMultipoints(origin, extent)
            assert(extent % 2 == 0, "extent value must be even")
            local start = origin or client.cam.basecframe.p
            local max_step = extent or 8

            start -= Vector3.new(max_step, -max_step, max_step) / 2

            local pos = start
            local half = max_step / 2

            local points = { corner = table.create(8), inside = table.create(19) }

            for x = 0, max_step do
                for y = 0, -max_step, -1 do
                    for z = 0, max_step do
                        local isPositionCorner = x % max_step == 0 and y % max_step == 0 and z % max_step == 0
                        local isPositionInside = x % half == 0 and y % half == 0 and z % half == 0
                        if isPositionCorner then
                            pos = start + Vector3.new(x, y, z)

                            table.insert(points.corner, 1, pos)
                        elseif isPositionInside then
                            pos = start + Vector3.new(x, y, z)

                            table.insert(points.inside, 1, pos)
                        end
                    end
                end
            end

            return points
        end

        function ragebot:CubicHitscan(studs, origin, selectedpart) -- Scans in a cubic square area of size (studs) and resolves a position to hit target at
            assert(
                studs,
                "what are you trying to do young man, this is illegal.  you do know that you have to provide us with shit to use to calculate this, you do realize this right?"
            ) -- end
            assert( origin,
                "just like before, we need information to even apply this to our things we made to provide you with ease of p100 hits 🤡"
            )
            assert(
                selectedpart,
                "what are you attempting to do what the fuck are you dumb?? you are just testing my patience"
            ) -- end

            local dapointz = ragebot:GetCubicMultipoints(origin, studs or 18 * 2)

            local pos
            -- ragebot:CanPenetrate(origin, target, velocity, penetration)
            for i, point in pairs(dapointz.corner) do
                local penetrated = ragebot:CanPenetrate(point, selectedpart, client.logic.currentgun.data.penetrationdepth)

                if penetrated then
                    pos = point
                    return
                end
            end

            if pos then
                return pos
            end

            for i, point in pairs(dapointz.inside) do
                local penetrated = ragebot:CanPenetrate(point, selectedpart, client.logic.currentgun.data.penetrationdepth)

                if penetrated then
                    pos = point
                    return
                end
            end

            if pos then
                return pos
            end

            return nil
        end

        local hitscanPoints = { 0, 0, 0, 0, 0, 0, 0, 0 }
        local hitboxShiftPoints = { 0, 0, 0, 0, 0 }
        local hitboxShiftAmount = { 0, 0 }
        if BBOT.username == "dev" then
            StatMenuRendered:connect(function(text)
                text.Text ..= string.format("\n--menu-- %d %d %d", menu.inmenu and 1 or 0, menu.inmiddlemenu and 1 or 0, menu.intabs and 1 or 0)
                text.Text ..= string.format("\n--hitscan-- %d %d %d %d %d %d %d %d", unpack(hitscanPoints))
                text.Text ..= string.format("\n--hitbox shift method-- %d %d %d %d %d", unpack(hitboxShiftPoints))
                text.Text ..= string.format("\n--hitbox-- %d %d", unpack(hitboxShiftAmount))
                text.Text ..= string.format("\n--smart legitbot-- %0.1f", legitbot.smart)
                if ragebot.lasthittick and ragebot.lasthittime then
                    text.Text ..= string.format("\n--backtracking-- %dms", (ragebot.lasthittick - ragebot.lasthittime) * 1000)
                end
                if misc.normalPositive and misc.speedDirection then
                    text.Text ..= string.format("\n--avoid collisions-- %0.2f %0.2f %0.2f %0.2f", misc.normalPositive, misc.normal.x, misc.normal.y, misc.normal.z)
                    text.Text ..= string.format("\n--circle strafe-- %0.2f %0.2f", misc.speedDirection.x, misc.speedDirection.z)
                end
            end)
        end
        local shiftmode = 1
        local shiftmodes = {
            function(part, position)
                return (part.Position - position).Unit
            end,
            function(part, position)
                return part.Velocity.Unit
            end,
            function(part, position)
                return -part.Velocity.Unit
            end,
            function(part, position, localpart)
                return localpart.Velocity.Unit
            end,
            function(part, position, localpart)
                return -localpart.Velocity.Unit
            end
        }
        -- local function GetHitBoxShift(person, bodypart, position)
        --     local misses = ragebot.predictedMisses[person] or 0
        --     local HITBOX_SHIFT_TOTAL = menu:GetVal("Rage", "Hack vs. Hack", "Hitbox Shift Distance")
        --     local HITBOX_SHIFT_AMOUNT = HITBOX_SHIFT_TOTAL / 2
        --     local pullAmount =
        --         clamp((HITBOX_SHIFT_AMOUNT - HITBOX_SHIFT_AMOUNT * misses / 10), 2, HITBOX_SHIFT_AMOUNT)
        --     local shiftSize = clamp(HITBOX_SHIFT_AMOUNT - misses, 1, HITBOX_SHIFT_AMOUNT)
        --     local pullVector = (bodypart.Position - position).Unit * pullAmount
        --     local newTargetPosition = bodypart.Position - pullVector
        --     menu.parts.sphereHitbox.Size = Vector3.new(shiftSize, shiftSize, shiftSize)
        --     menu.parts.sphereHitbox.Position = newTargetPosition -- ho. ly. fu. cking. shit,.,m
        --     hitboxShiftAmount[1] = shiftSize
        --     hitboxShiftAmount[2] = pullAmount
        --     return menu.parts.sphereHitbox, { [menu.parts.sphereHitbox] = true }, pullAmount, shiftSize
        -- end

       
        local function GetHitBoxShift(person, bodypart, position)
            shiftmode += 1
            shiftmode %= #shiftmodes
            shiftmode += 1
            local misses = ragebot.predictedMisses[person] or 0
            local HITBOX_SHIFT_TOTAL = menu:GetVal("Rage", "Hack vs. Hack", "Hitbox Shift Distance")
            local HITBOX_SHIFT_AMOUNT = HITBOX_SHIFT_TOTAL / 2
            local HITBOX_SHIFT_SIZE = HITBOX_SHIFT_AMOUNT
            local pullAmount = clamp((HITBOX_SHIFT_AMOUNT - HITBOX_SHIFT_AMOUNT * misses / 10), 1, HITBOX_SHIFT_AMOUNT)
            local shiftSize = clamp(HITBOX_SHIFT_AMOUNT - misses, 1, HITBOX_SHIFT_AMOUNT)
            local pullVector = shiftmodes[shiftmode](bodypart, position, LOCAL_PLAYER.Character.HumanoidRootPart) * pullAmount
            local newTargetPosition = bodypart.Position - pullVector
           
            menu.parts.sphereHitbox.Size = Vector3.new(shiftSize, shiftSize, shiftSize)
            menu.parts.sphereHitbox.Position = newTargetPosition -- ho. ly. fu. cking. shit,.,m
            hitboxShiftAmount[1] = shiftSize
            hitboxShiftAmount[2] = pullAmount
            return menu.parts.sphereHitbox, { [menu.parts.sphereHitbox] = true }, shiftmode
        end
       
        function ragebot:HitscanOnAxes(origin, person, bodypart, hitboxshift)
            local step = 9.5
            local hitscanOffsets = {
                CFrame.new(0, step, 0),
                CFrame.new(0, -step, 0),
                CFrame.new(-step, 0, 0),
                CFrame.new(step, 0, 0),
                CFrame.new(0, 0, -step),
                CFrame.new(0, 0, step),
                CFrame.new(),
            }
            local whitelist = { [bodypart] = true }
            assert(bodypart, "hello")

            local dest = typeof(bodypart) ~= "Vector3" and bodypart.Position or bodypart -- fuck

            assert(person, "something went wrong in your nasa rocket launch")
            assert(typeof(origin) == "CFrame", "what are you trying to do young man") -- end

            local maxPoints = client.aliveplayers
                    and math.ceil(menu:GetVal("Rage", "Settings", "Max Hitscan Points") / client.aliveplayers)
                or #hitscanOffsets
            -- ragebot:CanPenetrateRaycast(barrel, bone.Position, client.logic.currentgun.data.penetrationdepth, true, menu.parts.sphereHitbox)
            -- for k, v in next, hitscanPoints do
            --     print(k, v)
            -- end
            local resolverPoints = menu:GetVal("Rage", "Hack vs. Hack", "Hitscan Points")
            if resolverPoints[8] then
                local position = origin
                local pull = (bodypart.Position - position.p).Unit * step
                position = position.p + pull
                local hitbox = bodypart
                local shifttype
                if hitboxshift then
                    hitbox, whitelist, shifttype = GetHitBoxShift(person, bodypart, position)
                end
                local pen, exited, bulletintersection =
                    ragebot:CanPenetrate(position, hitbox, client.logic.currentgun.data.penetrationdepth, whitelist)

                if pen then
                    hitscanPoints[8] += 1
                    if shifttype then
                        hitboxShiftPoints[shifttype] += 1
                    end
                    return position, bulletintersection
                end
            end
            for i = 1, math.min(#hitscanOffsets, maxPoints) do -- this makes it skip if ur using low max Hitscan Points rofl suace super fast speed cheat :)
                if resolverPoints[i] == true then -- this is so that it doesn't skip for the origin point
                    local position = origin * hitscanOffsets[i]
                    local hitbox = bodypart
                    local shifttype
                    if hitboxshift then
                        hitbox, whitelist, shifttype = GetHitBoxShift(person, bodypart, position.p)
                    end
                    local pen, exited, bulletintersection =
                        ragebot:CanPenetrate(position.p, hitbox, client.logic.currentgun.data.penetrationdepth, whitelist)
                    if pen then
                        hitscanPoints[i] += 1
                        if shifttype then
                            hitboxShiftPoints[shifttype] += 1
                        end
                        return position.p, bulletintersection
                    else
                        position = origin
                    end
                end
            end

            return nil
        end

        function ragebot:MainLoop() -- lfg
            ragebot.silentVector = nil
            local prioritizedpart = menu:GetVal("Rage", "Aimbot", "Hitscan Priority")

            ragebot:Stance()
            if menu:GetVal("Rage", "Fake Lag", "Enabled") and not menu:GetVal("Rage", "Fake Lag", "Manual Choke")
            then
                if (not client.fakelagpos or not client.fakelagtime) or ((client.cam.cframe.p - client.fakelagpos).Magnitude > menu:GetVal("Rage", "Fake Lag", "Fake Lag Distance") or tick() - client.fakelagtime > 1) or not client.char.alive
                then
                    if client.char.alive then
                        client.fakelagtime = tick()
                        client.fakelagpos = client.cam.cframe.p
                    end
                    NETWORK:SetOutgoingKBPSLimit(0)
                    ragebot.choking = false
                else
                    ragebot.choking = true
                    NETWORK:SetOutgoingKBPSLimit(menu:GetVal("Rage", "Fake Lag", "Fake Lag Amount"))
                end
            else
            end

           

            if client.char.alive and menu:GetVal("Rage", "Aimbot", "Enabled") and menu:GetKey("Rage", "Aimbot", "Enabled", true)
            then
                if client.logic.currentgun and client.logic.currentgun.type ~= "KNIFE" then -- client.loogic.poop.falsified_directional_componenet = Vector8.new(math.huge) [don't fuck with us]
                    if ragebot:LogicAllowed() then
                        local playerlist = Players:GetPlayers()

                        if not client then
                            return
                        end
                        local priority_list = {}
                        for k, PlayerName in pairs(menu.priority) do
                            if Players:FindFirstChild(PlayerName) then
                                table.insert(priority_list, game.Players[PlayerName])
                            end
                        end
                        local targetPart, targetPlayer, fov, firepos, head, backtrackFrame = ragebot:GetTarget(prioritizedpart, priority_list)
                        if not targetPart and not menu:GetVal("Misc", "Extra", "Target Only Priority Players") then
                            targetPart, targetPlayer, fov, firepos, head, backtrackFrame = ragebot:GetTarget(prioritizedpart, playerlist)
                        end
                        ragebot:AimAtTarget(targetPart, targetPlayer, head, firepos, resolved, backtrackFrame)
                    end
                else
                    self.target = nil
                end
            end
        end

        ragebot.stance = "prone"
        ragebot.sprint = false
        ragebot.stancetick = tick()
        function ragebot:Stance()
            if LOCAL_PLAYER.Character and LOCAL_PLAYER.Character:FindFirstChild("Humanoid") then
                if menu:GetVal("Rage", "Anti Aim", "Hide in Floor") and menu:GetVal("Rage", "Anti Aim", "Enabled") and not LOCAL_PLAYER.Character.Humanoid.Jump
                then
                    LOCAL_PLAYER.Character.Humanoid.HipHeight = -1.9
                else
                    LOCAL_PLAYER.Character.Humanoid.HipHeight = 0
                end
            end
            if menu:GetVal("Rage", "Anti Aim", "Enabled") then
                if (tick() - ragebot.stancetick) >= 0.5 then
                    ragebot.stancetick = tick()
                    local stanceId = menu:GetVal("Rage", "Anti Aim", "Force Stance")
                    if stanceId ~= 1 then
                        newStance =  --ternary sex/
                            stanceId == 2 and "stand" or stanceId == 3 and "crouch" or stanceId == 4 and "prone"
                        ragebot.stance = newStance
                        send(client.net, "stance", newStance)
                    end
                    if menu:GetVal("Rage", "Anti Aim", "Lower Arms") then
                        ragebot.sprint = true
                        send(nil, "sprint", true)
                    end
                    if menu:GetVal("Rage", "Anti Aim", "Tilt Neck") then
                        ragebot.tilt = true
                        send(nil, "aim", true)
                    end
                end
            end
        end
    end

    local _3pweps = {}

    -- Framework errors here
    --[[do
        local VirtualUser = game:GetService("VirtualUser")
        menu.connections.local_player_id_connect = LOCAL_PLAYER.Idled:Connect(function()
            VirtualUser:CaptureController()
            VirtualUser:ClickButton2(Vector2.new())
        end)

        local oldmag = client.cam.setmagnification
        local oldmenufov = client.cam.changemenufov
        client.cam.changemenufov = function(...)
            if menu and menu.open then
                return
            end
            oldmenufov(...)
        end
        local magspeed = 1
        client.cam.magspring.s = 1
        -- local mt = {__index = function(self, i) if i == "s" then return magspeed or 1 end end, __newindex = function(self, i, v) if i == "s" then magspeed = v end end}
        -- setrawmetatable(client.cam.magspring, mt)
        client.cam.setmagnification = function(self, m)
            local lnm = math.log(m)
            if menu and menu:GetVal("Visuals", "Camera Visuals", "Disable ADS FOV") then
                if lnm > self.magspring.p then
                    return
                end -- THIS IS SOFUCKING DUMB LOL
            end
            self.magspring.p = lnm
            self.magspring.t = lnm
            self.magspring.v = 0
        end
        client.cam.setmagnificationspeed = function(self, s)
            self.magspring.s = s
        end

        local shake = client.cam.shake
        client.cam.shake = function(self, magnitude)
            if menu and menu:GetVal("Visuals", "Camera Visuals", "Reduce Camera Recoil") then
                local scale = 1 - menu:GetVal("Visuals", "Camera Visuals", "Camera Recoil Reduction") * 0.01
                magnitude *= scale
            end
            return shake(client.cam, magnitude)
        end

        local suppress = client.cam.suppress
        client.cam.suppress = function(...)
            if menu and menu:GetVal("Visuals", "Camera Visuals", "No Visual Suppression") then
                return
            end
            return suppress(...)
        end

        local setscope = client.hud.setscope

        function client.hud:setscope(vis, nosway)
            isPlayerScoped = vis
            setscope(self, vis, nosway)
        end

        -- client event hooks! for grenade paths... and other shit (idk where to put this)/
        local function create_outlined_square(pos, destroydelay, colordata)
            local newpart = Instance.new("Part", workspace)
            newpart.CanCollide = false
            newpart.Anchored = true
            newpart.Size = Vector3.new(0.35, 0.35, 0.35)
            newpart.Position = pos
            newpart.Material = Enum.Material.Neon
            newpart.Transparency = 0.85

            local colors = colordata or { Color3.fromRGB(255, 255, 255), Color3.fromRGB(239, 62, 62) }

            for i = 1, 2 do
                local box = Instance.new("BoxHandleAdornment", newpart)
                box.AlwaysOnTop = true
                box.Adornee = box.Parent
                box.ZIndex = i == 1 and 5 or 1
                box.Color3 = i == 1 and colors[1] or colors[2]
                box.Size = i == 1 and newpart.Size / 1.3 or newpart.Size * 1.3
                box.Transparency = i == 1 and 0 or 0.3
                table.insert(misc.adornments, box)
            end

            debris:AddItem(newpart, destroydelay)
        end

        local function create_line(origin_att, ending_att, destroydelay) -- pasting this from the misc create beam but oh well im a faggot so yeah :troll:
            local beam = Instance.new("Beam")
            beam.LightEmission = 1
            beam.LightInfluence = 1
            beam.Enabled = true
            beam.Color = ColorSequence.new(menu:GetVal("Visuals", "Dropped ESP", "Grenade ESP", COLOR2, true))
            beam.Attachment0 = origin_att
            beam.Attachment1 = ending_att
            beam.Width0 = 0.5
            beam.Width1 = 0.5
            beam.FaceCamera = true

            beam.Parent = workspace

            debris:AddItem(beam, destroydelay)
            debris:AddItem(origin_att, destroydelay)
            debris:AddItem(ending_att, destroydelay)
        end
        if client.sound then
            -- local playsound = client.sound.PlaySound
            -- client.sound.PlaySound = function(...)
            --     local args = { ... }
            --     if menu and menu:GetVal("Misc", "Extra", "Disable Team Sounds") then
            --         if args[1]:match("friendly") then
            --             return
            --         end
            --         if args[1]:match("equip[A-Z]") then
            --             return
            --         end
            --     end
            --     -- if menu and menu:GetVal("Misc", "Extra", "Disable Team Sounds") then
            --     -- else
            --     return playsound(unpack(args))
            --     -- end
            -- end
        end
       
        for hash, func in next, clienteventfuncs do
            local curconstants = getconstants(func)
            local found = table.find(curconstants, "Trigger")
            local found1 = table.find(curconstants, "removecharacterhash")
            local found2 = getinfo(func).name == "swapgun"
            local found3 = table.find(curconstants, "updatecharacter")
            local found4 = getinfo(func).name == "swapknife"
            local found5 = table.find(curconstants, "Votekick ")
            local found6 = table.find(curconstants, " studs")
            local found7 = table.find(curconstants, "setstance")
            local found8 = table.find(curconstants, "setfixedcam")
            local found9 = table.find(curconstants, "kickweapon")
            local found10 = table.find(curconstants, "equip")
            local found11 = table.find(curconstants, "equipknife")
            local found12 = table.find(curconstants, "setlookangles")
            local found13 = table.find(curconstants, "Msg")
            local found14 = table.find(curconstants, "[Console]: ")

            if found then
                clienteventfuncs[hash] = function(thrower, gtype, gdata, displaytrail)
                    if gdata.blowuptime > 0 and thrower.team ~= LOCAL_PLAYER.Team or thrower == LOCAL_PLAYER then
                        local lastrealpos
                       
                        local frames = gdata.frames
                        local blowup, st = gdata.blowuptime, gdata.time
                        local inc = 0.016666666666666666
                       
                        local curtick = tick()
                        local dst = st - curtick
                        local realtime = curtick + dst * (st + blowup - curtick) / (blowup + dst)
                        local err = realtime - curtick
                       
                        local j = 1
                        for dt = 0, blowup / inc do
                            local t = inc * dt
                           
                            local total_time = t
                            do
                                local realtime = tick() + t
                                local time = realtime + dst * (st + blowup - realtime) / (blowup + dst)
                               
                                local rtnext = tick() + (inc * (dt + 1))
                                local next_time = rtnext + dst * (st + blowup - rtnext) / (blowup + dst)
                               
                                local frame = frames[j]
                                local nextframe = j + 1 <= #frames and frames[j + 1] or nil
                               
                                if nextframe and time > st + nextframe.t0 then
                                    j += 1
                                    frame = nextframe
                                end
                               
                                local t = time - (st + frame.t0)
                                local next_t = next_time - (st + frame.t0)
                               
                                local pos = frame.p0 + t * frame.v0 + t * t / 2 * frame.a + frame.offset
                                local nextpos = frame.p0 + next_t * frame.v0 + next_t * next_t / 2 * frame.a + frame.offset
                                --local rot = client.cframe.fromaxisangle(t * frame.rotv) * frame.rot0
                                lastrealpos = pos
                               
                                if menu:GetVal("Visuals", "Dropped ESP", "Grenade ESP") then
                                    local c1 = menu:GetVal("Visuals", "Dropped ESP", "Grenade ESP", COLOR1, true)
                                    local c2 = menu:GetVal("Visuals", "Dropped ESP", "Grenade ESP", COLOR2, true)
                                    local colorz = {c1, c2}
                                    if nextpos then
                                        --local mag = (nextpos - pos).magnitude
                                        -- magnitude stuff wont work because the line will just end for no reason
                                        create_outlined_square(pos, total_time, colorz)
                                        local a1 = Instance.new("Attachment", workspace.Terrain)
                                        a1.Position = pos
                                        local a2 = Instance.new("Attachment", workspace.Terrain)
                                        a2.Position = nextpos
                                       
                                        create_line(a1, a2, t, colorz)
                                    else
                                        create_outlined_square(pos, blowup, colorz)
                                    end
                                end
                            end
                        end
                       
                        if menu:GetVal("Visuals", "Dropped ESP", "Grenade Warning") then
                            local btick = curtick + (math.abs((curtick + gdata.blowuptime) - curtick) - math.abs(err))
                            if curtick < btick then
                                table.insert(menu.activenades, {
                                    thrower = thrower.Name,
                                    blowupat = lastrealpos,
                                    blowuptick = btick, -- might need to be tested more
                                    start = curtick
                                })
                            end
                        end
                    end
                    return func(thrower, gtype, gdata, displaytrail)
                end
            end
            -- if found1 then
            --     clienteventfuncs[hash] = function(charhash, bodyparts)
            --         -- local modparts = bodyparts
            --         -- for k, v in next, modparts:GetChildren() do
            --         --     if not v:IsA("Model") and not v:IsA("Humanoid") then
            --         --         v.Size = bodysize[v.Name] -- reset the ragdolls to their defaulted size defined at bodysize, in case of hitbox expansion
            --         --     end
            --         -- end
            --         return func(charhash, modparts)
            --     end
            -- end
            if found3 then
                clienteventfuncs[hash] = function(player, parts)
                    local new_parts = {head = parts["Head"], torso = parts["Torso"], larm = parts["Left Arm"], rarm = parts["Right Arm"], lleg = parts["Left Leg"], rleg = parts["Right Leg"], rootpart = parts["HumanoidRootPart"]}
                    renderChamsOnPlayer(player, new_parts)
                    return func(player, parts)
                end
            end
            if found5 then
                clienteventfuncs[hash] = function(name, countdown, endtick, reqs)
                    func(name, countdown, endtick, reqs)
                    local friends = menu:GetVal("Misc", "Extra", "Vote Friends")
                    local priority = menu:GetVal("Misc", "Extra", "Vote Priority")
                    local default = menu:GetVal("Misc", "Extra", "Default Vote")
                   
                    if name == LOCAL_PLAYER.Name then
                        client.hud:vote("no")
                    else
                        if table.find(menu.friends, name) and friends ~= 1 then
                            local choice = friends == 2 and "yes" or "no"
                            client.hud:vote(choice)
                        end
                        if table.find(menu.priority, name) and priority ~= 1 then
                            local choice = priority == 2 and "yes" or "no"
                            client.hud:vote(choice)
                        end
                        if default ~= 1 then
                            local choice = default == 2 and "yes" or "no"
                            client.hud:vote(choice)
                        end
                    end
                end
            end

            if found6 then
                clienteventfuncs[hash] = function(killer, victim, dist, weapon, head)
                    if killer == LOCAL_PLAYER and victim ~= LOCAL_PLAYER then
                        if menu:GetVal("Misc", "Extra", "Kill Sound") then
                            local soundid = menu:GetVal("Misc", "Extra", "killsoundid")
                            local soundEmpty = soundid == ""
                            soundid = soundEmpty and "rbxassetid://6229978482" or soundid

                            if not soundEmpty then
                                local isSoundPath = soundid:match("%D+") or false
                                if isSoundPath then
                                    if not soundid:match("^rbxassetid://") then
                                        local validPath = isfile(soundid)
                                        if validPath then
                                            soundid = getsynasset(soundid)
                                        end
                                    end
                                else
                                    local shit = soundid:match("%d+")
                                    soundid = string.format("rbxassetid://%d", shit)
                                end
                            end

                            client.sound.PlaySoundId(
                                soundid,
                                menu:GetVal("Misc", "Extra", "Kill Sound Volume") / 10,
                                1.0,
                                workspace,
                                nil,
                                0,
                                0.03
                            )
                        end
                        if menu:GetVal("Misc", "Extra", "Kill Say") then
                            local killsay = menu.lastkillsay
                            while killsay == menu.lastkillsay do
                                killsay = math.random(#customKillSay)
                            end
                            menu.lastkillsay = killsay
                            local message = customKillSay[killsay]
                            message = message:gsub("%[hitbox%]", head and "head" or "body")
                            message = message:gsub("%[name%]", victim.Name)
                            message = message:gsub("%[weapon%]", weapon)
                            client.net:send("chatted", message)
                        end
                    end

                    if victim ~= LOCAL_PLAYER then
                        if victim == ragebot.firsttarget then
                            ragebot.firsttarget = nil
                        end
                        -- if not ragebot.repupdates[victim] then
                        --     printconsole("Unable to find position data for " .. victim.Name)
                        -- end
                        ragebot.backtrackframes[victim] = {}
                        ragebot.repupdates[victim] = {}
                        ragebot.fakePositionsResolved[victim] = nil
                    else
                        if ragebot then
                            ragebot.predictedDamageDealt = table.create(Players.MaxPlayers)
                            ragebot.predictedDamageDealtRemovals = table.create(Players.MaxPlayers)
                            ragebot.firsttarget = killer
                        end
                    end
                    ragebot.predictedDamageDealt[victim] = 0
                    ragebot.predictedMisses[victim] = 0
                    ragebot.predictedDamageDealtRemovals[victim] = nil
                    return func(killer, victim, dist, weapon, head)
                end
            end
            if found7 then
                clienteventfuncs[hash] = function(player, newstance)
                    local chosenstance = newstance
                    if menu and menu.GetVal then
                        local ting = menu:GetVal("Rage", "Hack vs. Hack", "Force Player Stances")
                        local choice = menu:GetVal("Rage", "Hack vs. Hack", "Stance Choice")
                        choice = choice == 1 and "stand" or choice == 2 and "crouch" or "prone"
                        chosenstance = ting and choice or newstance
                    end
                    return func(player, chosenstance)
                end
            end
            if found8 then
                clienteventfuncs[hash] = function(...)
                    local args = { ... }

                    if menu:GetVal("Misc", "Exploits", "Grenade Changes")[1] then
                        local fragargs = {
                            "FRAG",
                            {
                                frames = {
                                    {
                                        v0 = Vector3.new(),
                                        glassbreaks = {},
                                        t0 = 0,
                                        offset = Vector3.new(0 / 0, 0 / 0, 0 / 0),
                                        rot0 = CFrame.new(),
                                        a = Vector3.new(0, -80, 0),
                                        p0 = client.lastrepupdate or client.char.head.Position,
                                        rotv = Vector3.new(),
                                    },
                                },
                                time = tick(),
                                curi = 1,
                                blowuptime = 0.2,
                            },
                        }
                        for i = 1, 3 do
                            send(nil, "newgrenade", unpack(fragargs))
                        end
                    end

                    return func(...)
                end
            end
            if found9 then
                clienteventfuncs[hash] = function(bulletdata)
                    ragebot.fakePositionsResolved[bulletdata.player] = bulletdata.firepos
                    local misses = ragebot.predictedMisses[bulletdata.player]
                    -- if misses and misses > 16 then
                    --     ragebot.predictedMisses[bulletdata.player] = 5
                    -- end
                    local vec = Vector3.new()
                    for k, bullet in next, bulletdata.bullets do
                        if typeof(bullet) ~= "Vector3" then
                            bulletdata.bullets[k][1] = vec
                        end
                    end

                    if typeof(bulletdata.firepos) ~= "Vector3" then
                        bulletdata.firepos = vec
                    end

                    return func(bulletdata)
                end
            end
            if found10 then
                clienteventfuncs[hash] = function(player, weapon, camodata, attachments)
                    _3pweps[player] = weapon
                    return func(player, weapon, camodata, attachments)
                end
            end
            if found11 then
                clienteventfuncs[hash] = function(player, weapon, camodata)
                    _3pweps[player] = weapon
                    return func(player, weapon, camodata)
                end
            end
            if found12 then
                clienteventfuncs[hash] = function(player, newangles)
                    if client == nil then return end
                    local bodyparts = client.replication.getbodyparts(player)
                    if bodyparts and type(bodyparts) == "table" then
                        local pos = bodyparts.rootpart.Position
                        ragebot.repupdates[player] = {
                            ["position"] = pos,
                            ["tick"] = tick(),
                        }
                    end

                    if newangles.Magnitude >= 2 ^ 10 then
                        return
                    end
                    return func(player, newangles)
                end
            end
            if found13 then
                clienteventfuncs[hash] = function(chatter, text, tag, tagcolor, teamchat, chattername)
                    if menu.muted[chatter.Name] then
                        return
                    end
                    if table.find(menu.annoylist, chatter.Name) and not text:find("gay") then -- lel
                        send(nil, "chatted", text)
                    end
                    return func(chatter, text, tag, tagcolor, teamchat, chattername)
                end
                if found2 then
                    clienteventfuncs[hash] = function(gun, mag, spare, attachdata, camodata, gunn, ggequip)
                        func(gun, mag, spare, attachdata, camodata, gunn, ggequip)
                        if client.fakecharacter then
                            client.fakeupdater.equip(
                                require(game:service("ReplicatedStorage").GunModules[gun]),
                                game:service("ReplicatedStorage").ExternalModels[gun]:Clone()
                            )
                        end
                    end
                end
            end
            if found14 then
                client.console = func
                local console_upvs = getupvalues(func)
                client.bbconsole = function(txt, name)
                    name = name or "bitchbot"
                    local misc = game.ReplicatedStorage.Misc
                    local chatgui = console_upvs[4].Parent

                    local msg = console_upvs[2]
                    local message = msg:Clone()
                    local tag = message.Tag
                    local offset = 5

                    message.Parent = chatgui.GlobalChat
                    message.Text = "[" .. name .. "]: "
                    message.Msg.Text = txt
                    message.Msg.Position = UDim2.new(0, message.TextBounds.x, 0, 0)
                    message.Visible = true
                    message.Msg.Visible = true

                    CreateThread(function()
                        while message.Parent == chatgui.GlobalChat do
                            message.TextColor3 = RGB(unpack(menu.mc))
                            game.RunService.RenderStepped:Wait()
                        end
                    end)
                end
            end
        end
    end]]

    do
        local tween = game:service("TweenService")

        -- client.closecast = require(game.ReplicatedFirst.SharedModules.Utilities.Geometry.CloseCast)
        local partnames = { "head", "torso", "lleg", "rleg", "larm", "rarm" }
        local partexpansionarray = { 0.75, 1.5, 1.5, 1.5, 1.5, 1.5 }

        local nv = Vector3.new()
        local dot = nv.Dot

        -- local bodyarrayinfo = getupvalue(client.replication.thickcastplayers, 7)
        -- local chartable = getupvalue(client.replication.getallparts, 1)
        -- client.chartable = chartable

        -- function client.thickcastplayers(origin, direction) -- i might attempt to use this on bulletcheck later
        --     local castresults = nil
        --     for player, bodyparts in next, chartable do
        --         local delta = bodyparts.torso.Position - origin
        --         local directiondot = dot(direction, direction)
        --         local diff = dot(direction, delta)
        --         if diff > 0 and diff < directiondot and directiondot * dot(delta, delta) - diff * diff < directiondot * 6 * 6
        --         then
        --             for i = 1, #partnames do
        --                 local maxdist = 0.0425 -- regular on pc with controller is just this
        --                 --[[if lol then
        --                     if i == 1 then
        --                         maxexpansion = lol / 2
        --                     else
        --                         maxexpansion = lol
        --                     end
        --                 elseif partexpansionarray then
        --                     maxexpansion = partexpansionarray[i]
        --                 end]]
        --                 maxdist = partexpansionarray[i]
        --                 local curbodypart = bodyparts[partnames[i]]
        --                 local pos, what, hitpos, dist = closecast.closeCastPart(curbodypart, origin, direction)
        --                 if pos and dist < maxdist then
        --                     if not castresults then
        --                         castresults = {}
        --                     end
        --                     castresults[#castresults + 1] = {
        --                         bodyarrayinfo[curbodypart],
        --                         curbodypart,
        --                         hitpos,
        --                         (what - hitpos).unit,
        --                         what,
        --                         dist,
        --                     }
        --                     break
        --                 end
        --             end
        --         end
        --     end
        --     return castresults
        -- end
        --keybind connection shit
        client.char.ondied:connect(function()
            if misc then
                misc:BypassSpeedCheck(false)
                -- misc:Invisibility(true)
            end
        end)
        misc.beams = {}
        function misc:CreateBeam(origin_att, ending_att, texture)
            local beam = Instance.new("Beam")
            beam.Texture = texture or "http://www.roblox.com/asset/?id=446111271"
            beam.TextureMode = Enum.TextureMode.Wrap
            beam.TextureSpeed = 8
            beam.LightEmission = 1
            beam.LightInfluence = 1
            beam.TextureLength = 12
            beam.FaceCamera = true
            beam.Enabled = true
            beam.ZOffset = -1
            beam.Transparency = NumberSequence.new(0,0)
            beam.Color = ColorSequence.new(menu:GetVal("Visuals", "Misc", "Bullet Tracers", COLOR, true), Color3.new(0, 0, 0))
            beam.Attachment0 = origin_att
            beam.Attachment1 = ending_att
            debris:AddItem(beam, 3)
            debris:AddItem(origin_att, 3)
            debris:AddItem(ending_att, 3)

            local speedtween = TweenInfo.new(5, Enum.EasingStyle.Exponential, Enum.EasingDirection.Out, 0, false, 0)
            tween:Create(beam, speedtween, { TextureSpeed = 2 }):Play()
            beam.Parent = workspace
            table.insert(misc.beams, { beam = beam, time = tick() })
            return beam
        end

        function misc:UpdateBeams()
            local time = tick()
            for i = #self.beams, 1, -1 do
                if self.beams[i].beam  then
                    local transparency = (time - self.beams[i].time) - 2
                    self.beams[i].beam.Transparency = NumberSequence.new(transparency, transparency)
                else
                    table.remove(self.beams, i)
                end
            end
        end
       
        function misc:BypassSpeedCheck(val)
            local char = LOCAL_PLAYER.Character
            if not char then return end
            local rootpart = char:FindFirstChild("HumanoidRootPart")
            if not rootpart then
                return
            end
            rootpart.Anchored = false
            self.oldroot = rootpart

            if val and client.char.alive and not self.newroot then
                copy = rootpart:Clone()
                copy.Parent = char
                self.newroot = copy
            elseif self.newroot then
                if ((not val) or (not client.logic.currentgun) or (not client.char.alive) or (not client.menu.isdeployed())) then
                    self.newroot:Destroy()
                    self.newroot = nil
                else
                    -- client.char.rootpart.CFrame = self.newroot.CFrame
                    --idk if i can manipulate this at all
                end
            end
        end


        function misc:Invisibility(val)
            local char = LOCAL_PLAYER.Character
            local rootpart = char:FindFirstChild("HumanoidRootPart")
            if not rootpart then
                return
            end
            if self.invisroot then
                self.invisroot:Destroy()
                self.invisroot = nil
                for k, v in next, self.invisparts do
                    v:Destroy()
                end
                for k, v in next, self.invismodel:children() do
                    v.Parent = char
                end
                self.invisparts = nil
                return CreateNotification("Disabled Invisibility")
            end

            if val then
                return
            end
            if not self.invismodel then self.invismodel = Instance.new("Model", workspace) end
            if not self.invisparts then self.invisparts = {} end
            self.teleporting = false

            local cf = rootpart.CFrame
            local hv = rootpart.Velocity
            rootpart.Anchored = false
            rootpart.Velocity = Vector3.new(0, 9e2, 0)
            rootpart.CFrame = cf + Vector3.new(0, 9e2, 0)

            self.teleporting = true

            wait(0.2)
            for k, v in next, char:GetChildren() do
                if v ~= rootpart and v:IsA("BasePart") then
                    local copy = v:Clone()
                    self.invisparts[k] = copy
                    v.Parent = self.invismodel
                    copy.Parent = char
                end
            end
            for k, v in next, self.invismodel:children() do
                v.CFrame += Vector3.new(-math.huge, -math.huge, -math.huge)
                v.Velocity = Vector3.new(-math.huge, -math.huge, -math.huge)
            end
            copy = rootpart:Clone()
            rootpart.CFrame += Vector3.new(9e9, 9e9, 9e9)
            rootpart.Velocity = Vector3.new(9e9, 9e9, 9e9)
            copy.Parent = char

            wait(0.2)

            self.teleporting = false

            copy.Velocity = Vector3.new()
            copy.CFrame = cf
            self.invisroot = copy
            self.oldroot = rootpart
            client.cam.shakecframe = CFrame.new()
            return CreateNotification("Enabled Invisibility")
        end


        function misc:RapidKill()
            local team = LOCAL_PLAYER.Team.Name == "Phantoms" and game.Teams.Ghosts or game.Teams.Phantoms
            local i = 1
            local nadesent = false
            for k, v in next, team:GetPlayers() do
                if client.logic.gammo <= 0 then
                    break
                end
                if table.find(menu.priority, v.Name) and client.hud:isplayeralive(v) then
                    local curbodyparts = client.replication.getbodyparts(v)
                    if not curbodyparts then
                        return
                    end
                    local chosenpos = math.abs((curbodyparts.rootpart.Position - curbodyparts.torso.Position).Magnitude) > 10 and curbodyparts.rootpart.Position or curbodyparts.head.Position
                    local args = {
                        "FRAG",
                        {
                            frames = {
                                {
                                    v0 = Vector3.new(),
                                    glassbreaks = {},
                                    t0 = 0,
                                    offset = Vector3.new(),
                                    rot0 = CFrame.new(),
                                    a = Vector3.new(0 / 0),
                                    p0 = client.lastrepupdate or client.char.head.Position,
                                    rotv = Vector3.new(),
                                },
                                {
                                    v0 = Vector3.new(),
                                    glassbreaks = {},
                                    t0 = 0.002,
                                    offset = Vector3.new(),
                                    rot0 = CFrame.new(),
                                    a = Vector3.new(0 / 0),
                                    p0 = Vector3.new(0 / 0),
                                    rotv = Vector3.new(),
                                },
                                {
                                    v0 = Vector3.new(),
                                    glassbreaks = {},
                                    t0 = 0.003,
                                    offset = Vector3.new(),
                                    rot0 = CFrame.new(),
                                    a = Vector3.new(),
                                    p0 = chosenpos + Vector3.new(0, 3, 0),
                                    rotv = Vector3.new(),
                                },
                            },
                            time = tick(),
                            blowuptime = 0.003,
                        },
                    }

                    send(client.net, "newgrenade", unpack(args))
                    nadesent = true
                    client.logic.gammo -= 1
                    client.hud:updateammo("GRENADE")
                end
            end
            for k, v in next, team:GetPlayers() do
                if client.logic.gammo <= 0 then
                    break
                end
                if not (table.find(menu.friends, v.Name) and menu:GetVal("Misc", "Extra", "Ignore Friends")) and client.hud:isplayeralive(v) then
                    if not table.find(menu.friends, v.Name) and menu:GetVal("Misc", "Extra", "Target Only Priority Players") then
                        continue
                    end
                    local curbodyparts = client.replication.getbodyparts(v)
                    if not curbodyparts then
                        return
                    end
                    local chosenpos = math.abs((curbodyparts.rootpart.Position - curbodyparts.torso.Position).Magnitude) > 10 and curbodyparts.rootpart.Position or curbodyparts.head.Position
                    local args = {
                        "FRAG",
                        {
                            frames = {
                                {
                                    v0 = Vector3.new(),
                                    glassbreaks = {},
                                    t0 = 0,
                                    offset = Vector3.new(),
                                    rot0 = CFrame.new(),
                                    a = Vector3.new(0 / 0),
                                    p0 = client.lastrepupdate or client.char.head.Position,
                                    rotv = Vector3.new(),
                                },
                                {
                                    v0 = Vector3.new(),
                                    glassbreaks = {},
                                    t0 = 0.002,
                                    offset = Vector3.new(),
                                    rot0 = CFrame.new(),
                                    a = Vector3.new(0 / 0),
                                    p0 = Vector3.new(0 / 0),
                                    rotv = Vector3.new(),
                                },
                                {
                                    v0 = Vector3.new(),
                                    glassbreaks = {},
                                    t0 = 0.003,
                                    offset = Vector3.new(),
                                    rot0 = CFrame.new(),
                                    a = Vector3.new(),
                                    p0 = chosenpos + Vector3.new(0, 3, 0),
                                    rotv = Vector3.new(),
                                },
                            },
                            time = tick(),
                            blowuptime = 0.003,
                        },
                    }

                    send(client.net, "newgrenade", unpack(args))
                    client.logic.gammo -= 1
                    nadesent = true
                    client.hud:updateammo("GRENADE")
                end
            end

            return client.logic.gammo <= 0
        end

        function misc:Teleport(newpos)
            if not client.char.alive then return end
            local rootparts = { LOCAL_PLAYER.Character and client.char.rootpart, self.invisroot, self.newroot }
            local start = Camera.CFrame.p
            if not newpos then
                local part, newpos_ = workspace:FindPartOnRayWithWhitelist(
                    Ray.new(Camera.CFrame.p, Camera.CFrame.LookVector * 1000),
                    client.roundsystem.raycastwhitelist
                )
                newpos = newpos_
            end
            local unit = (newpos - start).Unit
            local dist = (newpos - start).Magnitude
            for i = 1, dist, 2 do
                for j = 1, #rootparts do
                    local rootpart = rootparts[j]
                    if not rootpart then continue end
                    rootpart.Position += unit
                end
                if not menu:GetKey("Misc", "Exploits", "Crimwalk") then
                    client.net:send("repupdate", rootpart.Position + Vector3.new(0, client.char.headheight, 0), ragebot.angles)
                end
            end
           
        end
        local setsway = client.cam.setswayspeed
        client.cam.setswayspeed = function(self, v)
            if menu then
                setsway(self, menu:GetVal("Visuals", "Camera Visuals", "No Scope Sway") and 0 or v)
            else
                setsway(self, v)
            end
        end

        function misc:GetParts(parts)
            parts["Head"] = parts[1]
            parts["Torso"] = parts[2]
            parts["Right Arm"] = parts[3]
            parts["Left Arm"] = parts[3]
            parts["Right Leg"] = parts[4]
            parts["Left Leg"] = parts[4]
            parts["rleg"] = parts[4]
            parts["lleg"] = parts[4]
            parts["rarm"] = parts[3]
            parts["larm"] = parts[3]
            parts["head"] = parts[1]
            parts["torso"] = parts[2]
            return parts
        end
        local rootpart1
        local humanoid

        function misc:SpotPlayers()
            if not menu:GetVal("Misc", "Extra", "Auto Spot") then
                return
            end
            local players = {}
            for k, player in pairs(game.Players:GetPlayers()) do
                if player == game.Players.LocalPlayer then
                    continue
                end
                table.insert(players, player)
            end
            return send("spotplayers", players)
        end

        function misc:ApplyGunMods()
            local mods_enabled = menu:GetVal("Misc", "Weapon Modifications", "Enabled")
            local firerate_scale = menu:GetVal("Misc", "Weapon Modifications", "Fire Rate Scale") / 100
            --local recoil_scale = menu:GetVal("Misc", "Weapon Modifications", "Recoil Scale") / 100
            local empty_animations = menu:GetVal("Misc", "Weapon Modifications", "Remove Animations")
            local instant_equip = menu:GetVal("Misc", "Weapon Modifications", "Instant Equip")
            local fully_auto = menu:GetVal("Misc", "Weapon Modifications", "Fully Automatic")

            for i, gun_module in pairs(CUR_GUNS:GetChildren()) do
                local gun = require(gun_module)
                local old_gun = require(OLD_GUNS[gun_module.Name])
                for k, v in pairs(old_gun) do
                    gun[k] = v
                end

                if mods_enabled then
                    do --firerate
                        if gun.variablefirerate then
                            for k, v in pairs(gun.firerate) do
                                v *= firerate_scale
                            end
                        elseif gun.firerate then
                            gun.firerate *= firerate_scale
                        end
                    end
                    if fully_auto and gun.firemodes then
                        gun.firemodes = { true, 3, 1 }
                    end
                    --[[if gun.camkickmin then    --recoil fuk dis
                        gun.camkickmin *= recoil_scale
                        gun.camkickmax *= recoil_scale
                        gun.aimcamkickmin *= recoil_scale
                        gun.aimcamkickmax *= recoil_scale
                        gun.aimtranskickmin *= recoil_scale
                        gun.aimtranskickmax *= recoil_scale
                        gun.transkickmin *= recoil_scale
                        gun.transkickmax *= recoil_scale
                        gun.rotkickmin *= recoil_scale
                        gun.rotkickmax *= recoil_scale
                        gun.aimrotkickmin *= recoil_scale
                        gun.aimrotkickmax *= recoil_scale
                        gun.hipfirespreadrecover *= recoil_scale
                        gun.hipfirespread *= recoil_scale
                        gun.hipfirestability *= recoil_scale
                    end]]
                    if instant_equip then
                        gun.equipspeed = 99999
                    end
                    if empty_animations then
                        client.animation.player = animhook
                        client.animation.reset = animhook
                    else
                        client.animation.player = client.animation.oldplayer
                        client.animation.reset = client.animation.oldreset
                    end
                end
            end
        end
        do
            client.springhooks = {}
            function client:UnhookSprings()
                for i = 1, #client.springhooks do
                    local hook = client.springhooks[i]
                    setrawmetatable(hook.spring, hook.meta)
                end
                table.clear(client.springhooks)
            end
            function client:HookSpring(spring, newMetatable)
                if #client.springhooks > 0 then
                    for i = 1, #client.springhooks do
                        local hook = client.springhooks[i]
                        if hook.spring == spring then
                            --warn("Error, tried to hook spring twice")
                            return
                        end
                    end
                end
                local originalMetatable = getrawmetatable(spring)
                assert(originalMetatable, "Invalid argument given for 'spring'")
                client.springhooks[#client.springhooks + 1] = {
                    spring = spring,
                    meta = originalMetatable,
                }
                for metafunc, func in next, originalMetatable do
                    if not newMetatable[metafunc] then
                        newMetatable[metafunc] = originalMetatable[metafunc]
                    else
                        local userFunc = newMetatable[metafunc]
                        newMetatable[metafunc] = function(t, p)
                            return userFunc(t, p, originalMetatable)
                        end
                    end
                end
                setrawmetatable(spring, newMetatable)
            end
            local swingspring = debug.getupvalue(client.char.step, 14)
            local sprintspring = debug.getupvalue(client.char.setsprint, 10)
            local zoommodspring = debug.getupvalue(client.char.step, 1) -- sex.

            client.zoommodspring = zoommodspring -- fuck

            local oldjump = client.char.jump
            function client.char:jump(height)
                height = (menu and menu:GetVal("Misc", "Tweaks", "Jump Power")) and (height * menu:GetVal("Misc", "Tweaks", "Jump Power Percentage") / 100) or height
                return oldjump(self, height)
            end

            client:HookSpring(swingspring, {
                __index = function(t, p, oldSpring)
                    if p == "v" and menu:GetVal("Misc", "Weapon Modifications", "Run and Gun") then
                        return Vector3.new()
                    end
                    return oldSpring.__index(t, p)
                end,
            })

            client:HookSpring(sprintspring, {
                __index = function(t, p, oldSpring)
                    if p == "p" and menu:GetVal("Misc", "Weapon Modifications", "Run and Gun") then
                        return 0
                    end
                    return oldSpring.__index(t, p)
                end,
            })

            --[[ client.springindex = old_index
           
            spring.__index = newcclosure(function(t, k)
                local result = old_index(t, k)
                if t == swingspring then
                    if k == "v" and menu:GetVal("Misc", "Weapon Modifications", "Run and Gun") then
                        return Vector3.new()
                    end
                end
                if t == sprintspring then
                    if k == "p" and menu:GetVal("Misc", "Weapon Modifications", "Run and Gun") then
                        return 0
                    end
                end
               
                if t == zoommodspring then
                    if k == "p" and menu:GetVal("Visuals", "Camera Visuals", "Disable ADS FOV") then
                        return 0
                    end
                end
                return result
            end) ]]
        end
        menu.connections.button_pressed_pf = ButtonPressed:connect(function(tab, gb, name)
           

            if name == "Join New Game" then
                TELEPORT_SERVICE:Teleport(game.PlaceId, game.Players.LocalPlayer)
            end

            if name == "Votekick" then
                local rank = client.rankcalculator(client.dirtyplayerdata.stats.experience)
                if not selectedPlayer then
                    return
                end

                if rank >= 25 then
                    client.net:send("modcmd", string.format("/votekick:%s:cheating", selectedPlayer.Name))
                    CreateNotification(string.format("Started a votekick on %s", selectedPlayer.Name))
                else
                    CreateNotification(string.format("Your account must be rank 25 or above to votekick! (Rank %d)", rank))
                end
            elseif name == "Spectate" then
                if menu.spectating ~= selectedPlayer and client.hud:isplayeralive(selectedPlayer) then
                    client.cam:setspectate(selectedPlayer)
                    menu.spectating = selectedPlayer
                    CreateNotification(string.format("Started spectating %s", selectedPlayer.Name))
                else
                    if client.char.alive then
                        client.cam:setfirstpersoncam()
                    else
                        local lobby = workspace:FindFirstChild("MenuLobby")
                        if lobby then
                            client.cam:setmenucam(lobby)
                        else
                            client.menu:loadmenu()
                        end
                    end
                    menu.spectating = false
                    if not client.hud:isplayeralive(selectedPlayer) then
                        CreateNotification("Can't soectate player because player isnt alive")
                    else
                        CreateNotification("Stopped spectating")
                    end
                end
            end
        end)

        menu.connections.toggle_pressed_pf = TogglePressed:connect(function(tab, name, class)
            if name == "Enabled" and tab == "Weapon Modifications" then
                client.animation.player = (class[1] and menu:GetVal("Misc", "Weapon Modifications", "Remove Animations")) and animhook or client.animation.oldplayer
                client.animation.reset = (class[1] and menu:GetVal("Misc", "Weapon Modifications", "Remove Animations")) and animhook or client.animation.oldreset
            end
            if name == "Remove Animations" then
                client.animation.player = (class[1] and menu:GetVal("Misc", "Weapon Modifications", "Enabled")) and animhook or client.animation.oldplayer
                client.animation.reset = (class[1] and menu:GetVal("Misc", "Weapon Modifications", "Remove Animations")) and animhook or client.animation.oldreset
            end
            if name == "Arm Chams" then -- TODO try to return the arms and weapon back to their original  colors and everything and shit
                if not class[1] then
                    local vm = workspace.CurrentCamera:GetChildren()
                    for i = 1, #vm do
                        local model = vm[i]
                        if model.Name:match(".*Arm$") then
                            local children = model:GetChildren()
                            for j = 1, #children do
                                local part = children[j]
                                --part.Color = originalArmColor
                                if part.Transparency ~= 1 then
                                    part.Transparency = 0
                                end
                                --part.Material = mats[armmaterial]
                                if part.ClassName == "MeshPart" or part.Name == "Sleeve" then
                                    --part.Color = menu:GetVal("Visuals", "Local", "Arm Chams", COLOR1, true)
                                    if part.Transparency ~= 1 then
                                        part.Transparency = 0
                                    end
                                end
                            end
                        end
                    end
                end
            elseif name == "Weapon Chams" then
                if not class[1] then
                    local vm = workspace.CurrentCamera:GetChildren()
                    for i = 1, #vm do
                        local model = vm[i]
                        if not model.Name:match(".*Arm$") and not model.Name:match(".*FRAG$") then
                            local children = model:GetChildren()
                            for j = 1, #children do
                                local part = children[j]
                                --part.Color = originalWeaponColor
                                if part.Transparency ~= 1 then
                                    part.Transparency = 0
                                end
                                --part.Material = mats[Weaponmaterial]
                                if part.ClassName == "MeshPart" or part.Name == "Sleeve" then
                                    --part.Color = menu:GetVal("Visuals", "Local", "Weapon Chams", COLOR1, true)
                                    if part.Transparency ~= 1 then
                                        part.Transparency = 0
                                    end
                                end
                            end
                        end
                    end
                end
            end
        end)

        --[[function misc:RoundFreeze()
            if textboxopen then
                client.roundsystem.lock = true
                return
            end
            if menu:GetVal("Misc", "Movement", "Ignore Round Freeze") then
                client.roundsystem.lock = false
            end
        end]]

        function misc:FlyHack()
            if menu:GetVal("Misc", "Movement", "Fly") and menu:GetKey("Misc", "Movement", "Fly") then
                local speed = menu:GetVal("Misc", "Movement", "Fly Speed")

                local travel = CACHED_VEC3
                local looking = Camera.CFrame.lookVector --getting camera looking vector
                local rightVector = Camera.CFrame.RightVector
                if INPUT_SERVICE:IsKeyDown(Enum.KeyCode.W) then
                    travel += looking
                end
                if INPUT_SERVICE:IsKeyDown(Enum.KeyCode.S) then
                    travel -= looking
                end
                if INPUT_SERVICE:IsKeyDown(Enum.KeyCode.D) then
                    travel += rightVector
                end
                if INPUT_SERVICE:IsKeyDown(Enum.KeyCode.A) then
                    travel -= rightVector
                end
                if INPUT_SERVICE:IsKeyDown(Enum.KeyCode.Space) then
                    travel += Vector3.new(0, 1, 0)
                end
                if INPUT_SERVICE:IsKeyDown(Enum.KeyCode.LeftShift) then
                    travel -= Vector3.new(0, 1, 0)
                end
                if travel.Unit.x == travel.Unit.x then
                    rootpart.Anchored = false
                    rootpart.Velocity = travel.Unit * speed --multiplaye the unit by the speed to make
                else
                    rootpart.Velocity = Vector3.new(0, 0, 0)
                    rootpart.Anchored = true
                end
            end
            if not menu:GetKey("Misc", "Movement", "Fly") then
                rootpart.Anchored = false
            end
        end
        misc.speedDirection = Vector3.new(1,0,0)
        function misc:SpeedHack()
            if menu:GetKey("Misc", "Movement", "Fly") then
                return
            end
            local speedtype = menu:GetVal("Misc", "Movement", "Speed Type")
            if menu:GetVal("Misc", "Movement", "Speed") then
                local speed = menu:GetVal("Misc", "Movement", "Speed Factor")

                local travel = CACHED_VEC3
                local looking = Camera.CFrame.LookVector
                local rightVector = Camera.CFrame.RightVector
                local moving = false
                if not menu:GetKey("Misc", "Movement", "Circle Strafe") then
                    if INPUT_SERVICE:IsKeyDown(Enum.KeyCode.W) then
                        travel += looking
                    end
                    if INPUT_SERVICE:IsKeyDown(Enum.KeyCode.S) then
                        travel -= looking
                    end
                    if INPUT_SERVICE:IsKeyDown(Enum.KeyCode.D) then
                        travel += rightVector
                    end
                    if INPUT_SERVICE:IsKeyDown(Enum.KeyCode.A) then
                        travel -= rightVector
                    end
                    misc.speedDirection = Vector3.new(travel.x, 0, travel.z).Unit
                    -- if misc.speedDirection.x ~= misc.speedDirection.x then
                    --     misc.speedDirection = Vector3.new(looking.x, 0, looking.y)
                    -- end
                    misc.circleStrafeAngle = -0.1
                else
                    if misc.speedDirection.x ~= misc.speedDirection.x then
                        misc.speedDirection = Vector3.new(looking.x, 0, looking.y)
                    end
                    travel = misc.speedDirection
                    misc.circleStrafeAngle = -0.1
                   
                    if INPUT_SERVICE:IsKeyDown(Enum.KeyCode.D) then
                        misc.circleStrafeAngle = 0.1
                    end
                    if INPUT_SERVICE:IsKeyDown(Enum.KeyCode.A) then
                        misc.circleStrafeAngle = -0.1
                    end
                    local cd = Vector2.new(misc.speedDirection.x, misc.speedDirection.z)
                    cd = bVector2:getRotate(cd, misc.circleStrafeAngle)
                    misc.speedDirection = Vector3.new(cd.x, 0, cd.y)
                end

                travel = misc.speedDirection
                if menu:GetKey("Misc", "Movement", "Avoid Collisions") then
                    if menu:GetKey("Misc", "Movement", "Circle Strafe") then
                        local scale = menu:GetVal("Misc", "Movement", "Avoid Collisions Scale") / 1000
                        local position = client.char.rootpart.CFrame.p
                        local part, position, normal = workspace:FindPartOnRayWithWhitelist(
                            Ray.new(position, (travel * speed * scale)),
                            client.roundsystem.raycastwhitelist
                        )
                        if part then
                            for i = -10, 10 do
                                local cd = Vector2.new(travel.x, travel.z)
                                cd = bVector2:getRotate(cd, misc.circleStrafeAngle * i * -1)
                                cd = Vector3.new(cd.x, 0, cd.y)
                                local part, position, normal = workspace:FindPartOnRayWithWhitelist(
                                    Ray.new(position, (cd * speed * scale)),
                                    client.roundsystem.raycastwhitelist
                                )
                                misc.normal = normal
                                if not part then
                                    travel = cd
                                end
                            end
                        end
                    else
                        local position = client.char.rootpart.CFrame.p
                        for i = 1, 10 do
                            local part, position, normal = workspace:FindPartOnRayWithWhitelist(
                                Ray.new(position, (travel * speed / 10) + Vector3.new(0,rootpart.Velocity.y/10,0)),
                                client.roundsystem.raycastwhitelist
                            )
                            misc.normal = normal
                            if part then
                                local dot = normal.Unit:Dot((client.char.rootpart.CFrame.p - position).Unit)
                                misc.normalPositive = dot
                                if dot > 0 then
                                    travel += normal.Unit * dot
                                    travel = travel.Unit
                                    if travel.x == travel.x then
                                        misc.circleStrafeDirection = travel
                                    end
                                end
                            end
                        end
                    end
                end
                if travel.x == travel.x and humanoid:GetState() ~= Enum.HumanoidStateType.Climbing then
                    if speedtype == 2 and (humanoid:GetState() ~= Enum.HumanoidStateType.Freefall or not humanoid.Jump)
                    then
                        return
                    elseif speedtype == 3 and not INPUT_SERVICE:IsKeyDown(Enum.KeyCode.Space) then
                        return
                    end
               
                    if menu:GetKey("Misc", "Movement", "Speed", true) then
                        rootpart.Velocity = Vector3.new(travel.x * speed, rootpart.Velocity.y, travel.z * speed)
                    end
                end
            end
        end

        local autopeekiterator = 5
        function misc:AutoPeek()
            if self.autopeektimeout and self.autopeektimeout > 0 then
                self.autopeektimeout -= 1
                return
            end

            if not client.char.alive then
                return
            end
            if menu:GetKey("Rage", "Extra", "Auto Peek") and menu:GetVal("Rage", "Aimbot", "Enabled") then
                local hitscanpreference = misc:GetParts({ [menu:GetVal("Rage", "Aimbot", "Hitscan Priority")] = true })
                local prioritizedpart = menu:GetVal("Rage", "Aimbot", "Hitscan Priority")

                autopeekiterator += 10
                local dist = (autopeekiterator % 20) + 10
                local origin = client.lastrepupdate + Camera.CFrame.LookVector * dist
                if not self.autopeekposition then
                    local targetPart, targetPlayer, fov, firepos, head, newbone, hitbox = ragebot:GetTarget(prioritizedpart, nil, CFrame.new(origin))
                   

                    self.autopeekposition = firepos
                    if self.autopeekposition and workspace:Raycast(
                            client.lastrepupdate,
                            self.autopeekposition - client.lastrepupdate,
                            mapRaycast
                        )
                    then
                        self.autopeekposition = nil
                    end
                end
                if self.autopeekposition and not workspace:Raycast(client.lastrepupdate, self.autopeekposition - client.lastrepupdate, mapRaycast)
                then
                    misc:Teleport(self.autopeekposition)
                    self.autopeekposition = nil
                    self.autopeektimeout = 100
                end
            else
                self.autopeekposition = nil
            end
        end

        function misc:AutoJump()
            if menu:GetVal("Misc", "Movement", "Auto Jump") and INPUT_SERVICE:IsKeyDown(Enum.KeyCode.Space) then
                humanoid.Jump = true
            end
        end

        function misc:GravityShift()
            if menu:GetVal("Misc", "Tweaks", "Gravity Shift") then
                local scaling = menu:GetVal("Misc", "Tweaks", "Gravity Shift Percentage")
                local mappedGrav = map(scaling, -100, 100, -196.2, 196.2)
                workspace.Gravity = 196.2 + mappedGrav
            else
                workspace.Gravity = 196.2
            end
        end

        function misc:MainLoop()

            if menu:GetKey("Misc", "Exploits", "Lock Player Positions") then
                NETWORK_SETTINGS.IncomingReplicationLag = 9e9
            else
                NETWORK_SETTINGS.IncomingReplicationLag = 0
            end
           
           
            rootpart = LOCAL_PLAYER.Character and client.char.rootpart
            rootpart = self.invisroot or self.newroot or rootpart
            humanoid = LOCAL_PLAYER.Character and LOCAL_PLAYER.Character:FindFirstChild("Humanoid")
            misc:BypassSpeedCheck(menu:GetVal("Misc", "Exploits", "Bypass Speed Checks") and not tpval and not lastval)
            if rootpart and humanoid then
                if not CHAT_BOX.Active then
                    misc:SpeedHack()
                    misc:FlyHack()
                    misc:AutoJump()
                    misc:GravityShift()
                    misc:AutoPeek()
                    --misc:RoundFreeze()
                elseif menu:GetKey("Misc", "Movement", "Fly") then
                    rootpart.Anchored = true
                end
            end
            local newval, lastval = menu:GetVal("Misc", "Extra", "Break Windows")
            if newval ~= lastval and newval then
                CreateThread(function()
                    local parts = workspace.Map:GetDescendants()
                    for i = 1, #parts do
                        local part = parts[i]
                        if part.Name == "Window" then
                            client.effects.breakwindow(part, part, nil, true, true, nil, nil, nil)
                        end
                    end
                end)
            end
        end
        client.stutterFrames = 0

        do --ANCHOR send hook
            client.net.send = function(self, ...)

                if menu == nil then return end

                local args = { ... }
                -- if menu and menu:GetVal("Misc", "Exploits", "Skin Changer") and args[1] == "changecamo" then
                --     local tid = menu:GetVal("Misc", "Exploits", "skinchangerTexture")
                --     args[6].TextureProperties.TextureId = tid == "" and nil or tid
                --     args[6].TextureProperties.Transparency = 1 - menu:GetVal("Misc", "Exploits", "Skin Changer", COLOR)[4] / 255
                --     args[6].TextureProperties.StudsPerTileU = menu:GetVal("Misc", "Exploits", "Scale X") / 100
                --     args[6].TextureProperties.StudsPerTileV = menu:GetVal("Misc", "Exploits", "Scale Y") / 100
                --     args[6].BrickProperties.BrickColor = menu:GetVal("Misc", "Exploits", "Skin Changer", COLOR, true)
                --     args[6].BrickProperties.Material = mats[menu:GetVal("Misc", "Exploits", "Skin Material")]
                -- end
                if args[1] == "spawn" then
                    UnpackRelations()
                    client.spawns = { }
                    CreateThread(function()
                        local parts = workspace.Map:GetDescendants()
                        for i = 1, #parts do
                            local part = parts[i]
                           
                            if menu:GetVal("Misc", "Extra", "Break Windows") then
                                if part.Name == "Window" then
                                    client.effects.breakwindow(part, part, nil, true, true, nil, nil, nil)
                                end
                            end
                            if part.Name == "Spawn" then
                                table.insert(client.spawns, part)
                            end
                        end
                    end)
                    misc.model = nil
                    misc:ApplyGunMods()
                    misc.autopeektimeout = 100
                end
                if args[1] == "logmessage" or args[1] == "debug" then
                    CreateThread(function()
                        wait(1)
                        menu.debugged = true
                    end)
                    local message = ""
                    for i = 1, #args - 1 do
                        message ..= tostring(args[i]) .. ", "
                    end
                    message ..= tostring(args[#args])
                    if message:find("Kick") then
                        if menu:GetVal("Misc", "Extra", "Join New Game On Kick") then
                            TELEPORT_SERVICE:Teleport(game.PlaceId)
                        end
                        return
                    end
                    if not menu.debugged then
                        CreateNotification(message)
                    end
                    return
                end
                if args[1] == "repupdate" then
                    if misc ~= nil and misc.teleporting then
                        return
                    elseif args[2] ~= args[2] or args[2].Unit.X ~= args[2].Unit.X then
                        return
                    end
                end
                if args[1] == "chatted" then
                    local message = args[2]
                    local commandLocation = #message > 1 and string.find(message, "\\")
                    if commandLocation == 1 then
                        local i = 1
                        local args = {}
                        local func
                        local name
                        for f in message:gmatch("%w+") do
                            if i == 1 then
                                name = f:lower()
                                func = CommandFunctions[f:lower()]
                            else
                                table.insert(args, f)
                            end
                            i += 1
                        end
                        if name == "cmdlist" or name == "help" then
                            return CommandFunctions.cmdlist(CommandFunctions, unpack(args))
                        end
                        if func then
                            return func(unpack(args))
                        else
                            return CreateNotification("Not a command, try \"\\help\" to see available commands.")
                        end
                    end
                end
                if args[1] == "bullethit" and menu:GetVal("Misc", "Extra", "Suppress Only") then
                    return
                end
                if args[1] == "bullethit" or args[1] == "knifehit" then
                    if menu:GetVal("Misc", "Exploits", "Crimwalk") and menu:GetKey("Misc", "Exploits", "Crimwalk") then return end
                    if table.find(menu.friends, args[2].Name) and menu:GetVal("Misc", "Extra", "Ignore Friends")
                    then
                        return
                    end
                end
                if args[1] == "stance" and menu:GetVal("Rage", "Anti Aim", "Enabled") and menu:GetVal("Rage", "Anti Aim", "Force Stance") ~= 1
                then
                    return
                end
                if args[1] == "sprint" and menu:GetVal("Rage", "Anti Aim", "Enabled") and menu:GetVal("Rage", "Anti Aim", "Lower Arms")
                then
                    return
                end
                if args[1] == "falldamage" then
                    if menu:GetVal("Misc", "Tweaks", "Prevent Fall Damage") or misc.teleporting then
                        return
                    end
                end
                if args[1] == "newgrenade" then
                    local grenade_exploit = menu:GetVal("Misc", "Exploits", "Grenade Changes")
                    if grenade_exploit[2] then
                        local data = args[3]
                        local frames = data.frames
                        data.blowuptime = frames[2].t0 + 0.1
                        frames = {
                            frames[1],
                            frames[2]
                        }
                    end
                    if menu:GetVal("Misc", "Exploits", "Grenade Teleport") then
                        local closest = math.huge
                        local part
                        for i, player in pairs(Players:GetPlayers()) do
                            if table.find(menu.friends, player.Name) and menu:GetVal("Misc", "Extra", "Ignore Friends")
                            then
                                continue
                            end
                            if not table.find(menu.priority, player.Name) and menu:GetVal("Misc", "Extra", "Target Only Priority Players")
                            then
                                continue
                            end
                            if player.Team ~= LOCAL_PLAYER.Team and player ~= LOCAL_PLAYER then
                                local bodyparts = client.replication.getbodyparts(player)
                                if bodyparts then
                                    local fovToBone = camera:GetFOV(bodyparts.head)
                                    if fovToBone < closest then
                                        closest = fovToBone
                                        part = bodyparts.head
                                    end
                                end
                            end
                        end

                        if (closest and part) then
                            local args = {
                                "FRAG",
                                {
                                    frames = {
                                        {
                                            v0 = Vector3.new(),
                                            glassbreaks = {},
                                            t0 = 0,
                                            offset = Vector3.new(),
                                            rot0 = CFrame.new(),
                                            a = Vector3.new(0 / 0),
                                            p0 = client.lastrepupdate or client.char.head.Position,
                                            rotv = Vector3.new(),
                                        },
                                        {
                                            v0 = Vector3.new(),
                                            glassbreaks = {},
                                            t0 = 0.002,
                                            offset = Vector3.new(),
                                            rot0 = CFrame.new(),
                                            a = Vector3.new(0 / 0),
                                            p0 = Vector3.new(0 / 0),
                                            rotv = Vector3.new(),
                                        },
                                        {
                                            v0 = Vector3.new(),
                                            glassbreaks = {},
                                            t0 = 0.003,
                                            offset = Vector3.new(),
                                            rot0 = CFrame.new(),
                                            a = Vector3.new(),
                                            p0 = part.Position + Vector3.new(0, 3, 0),
                                            rotv = Vector3.new(),
                                        },
                                    },
                                    time = tick(),
                                    blowuptime = 0.003,
                                },
                            }

                            send(client.net, "newgrenade", unpack(args))
                            client.hud:updateammo("GRENADE")
                            return
                        end
                    end
                elseif args[1] == "newbullets" then
                    if menu:GetKey("Misc", "Exploits", "Crimwalk") then return end
                    if menu:GetVal("Misc", "Exploits", "Fake Equip") then
                        send(self, "equip", client.logic.currentgun.id)
                    end

                    if legitbot.silentVector then
                        for k = 1, #args[2].bullets do
                            local bullet = args[2].bullets[k]
                            bullet[1] = legitbot.silentVector
                        end
                    end

                    if ragebot.silentVector then
                        -- duct tape fix or whatever the fuck its called for this its stupid
                        args[2].camerapos = client.lastrepupdate -- attempt to make dumping happen less
                        args[2].firepos = ragebot.firepos
                        -- if shitting_my_pants == false and menu:GetVal("Misc", "Exploits", "Noclip") and keybindtoggles.fakebody then
                        --     args[2].camerapos = client.cam.cframe.p - Vector3.new(0, client.fakeoffset, 0)
                        -- end
                        local cachedtimedata = {}
                       
                        local hitpoint = ragebot.intersection or ragebot.targetpart.Position
                        -- i need to improve this intersection system a lot, because this can cause problems and nil out and not register the hit
                        -- properly when you're using Aimbot Performance Mode... fuggjegrnjeiar ngreoi greion agreino agrenoigenroino

                        local angle, bullettime = client.trajectory(
                                ragebot.firepos,
                                GRAVITY,
                                hitpoint,
                                client.logic.currentgun.data.bulletspeed
                            )
                        if not angle or not bullettime then
                            return
                        end
                        for k = 1, #args[2].bullets do
                            local bullet = args[2].bullets[k]
                            bullet[1] = angle
                        end

                        if menu:GetVal("Rage", "Fake Lag", "Release Packets on Shoot") then
                            menu:SetKey("Rage", "Fake Lag", "Manual Choke")
                            ragebot.choking = false
                            client.fakelagpos = nil
                            syn.set_thread_identity(1) -- might lag...... idk probably not
                            NETWORK:SetOutgoingKBPSLimit(0)
                        end
                        ragebot.lasthittime = ragebot.time
                        ragebot.lasthittick = tick()
                        args[3] = ragebot.time - bullettime
                        send(self, unpack(args))

                        for k = 1, #args[2].bullets do
                            local bullet = args[2].bullets[k]
                            if menu:GetVal("Visuals", "Misc", "Bullet Tracers") then
                                local origin = args[2].firepos
                                local attach_origin = Instance.new("Attachment", workspace.Terrain)
                                attach_origin.Position = origin
                                local ending = origin + bullet[1].unit.Unit * 300
                                local attach_ending = Instance.new("Attachment", workspace.Terrain)
                                attach_ending.Position = ending
                                local beam = misc:CreateBeam(attach_origin, attach_ending)
                                beam.Parent = workspace
                            end
                            local hitinfo = {
                                ragebot.target,
                                hitpoint,
                                ragebot.targetpart,
                                bullet[2],
                            }
                            client.hud:firehitmarker(ragebot.targetpart.Name == "Head")
                            client.sound.PlaySound("hitmarker", nil, 1, 1.5)
                            send(self, "bullethit", unpack(hitinfo))
                        end
                        if menu:GetVal("Misc", "Exploits", "Fake Equip") then
                            local slot = menu:GetVal("Misc", "Exploits", "Fake Slot")
                            send(self, "equip", slot)
                        end
                        return
                    else
                        if menu:GetVal("Visuals", "Misc", "Bullet Tracers") then
                            for k = 1, #args[2].bullets do
                                local bullet = args[2].bullets[k]
                                local origin = args[2].firepos
                                local attach_origin = Instance.new("Attachment", workspace.Terrain)
                                attach_origin.Position = origin
                                local ending = origin + (type(bullet[1]) == "table" and bullet[1].unit.Unit or bullet[1].Unit) * 300
                                local attach_ending = Instance.new("Attachment", workspace.Terrain)
                                attach_ending.Position = ending
                                local beam = misc:CreateBeam(attach_origin, attach_ending)
                                beam.Parent = workspace
                            end
                        end
                    end

                    if menu:GetVal("Misc", "Exploits", "Fake Equip") then
                        local slot = menu:GetVal("Misc", "Exploits", "Fake Slot")
                        send(self, "equip", slot)
                    end
                elseif args[1] == "stab" then
                    syn.set_thread_identity(1)
                    NETWORK:SetOutgoingKBPSLimit(0)
                    client.fakelagpos = nil
                    ragebot.choking = false
                    menu:SetKey("Rage", "Fake Lag", "Manual Choke")
                    if menu:GetVal("Rage", "Extra", "Knife Bot") and menu:GetKey("Rage", "Extra", "Knife Bot", true)
                    then
                        if menu:GetVal("Rage", "Extra", "Knife Bot Type") == 1 then
                            ragebot:KnifeTarget(ragebot:GetKnifeTargets()[1])
                        end
                        if menu:GetVal("Rage", "Extra", "Knife Bot Type") == 4 then
                            local target = ragebot:GetKnifeTargets()[1]
                            ragebot:KnifeTarget(target)
                            ragebot:KnifeTarget(target)
                        end
                    end
                elseif args[1] == "equip" then
                    if client.fakecharacter then -- finally added knife showing on 3p shit after like month
                        if args[2] ~= 3 then
                            local gun = client.loadedguns[args[2]].name
                            client.fakeupdater.equip(
                                require(game:service("ReplicatedStorage").GunModules[gun]),
                                game:service("ReplicatedStorage").ExternalModels[gun]:Clone()
                            )
                        else
                            local gun = client.logic.currentgun.name
                            client.fakeupdater.equipknife(
                                require(game:service("ReplicatedStorage").GunModules[gun]),
                                game:service("ReplicatedStorage").ExternalModels[gun]:Clone()
                            )
                        end
                    end

                    if menu:GetVal("Misc", "Exploits", "Fake Equip") then
                        local slot = menu:GetVal("Misc", "Exploits", "Fake Slot")
                        args[2] = slot
                    end
                elseif args[1] == "repupdate" then
                    local crimwalk, lastcrimwalk = menu:GetKey("Misc", "Exploits", "Crimwalk")
                    if crimwalk and client.lastrepupdate then
                        if menu:GetVal("Misc", "Exploits", "Disable Crimwalk on Shot") and ragebot.target then
                            client.lastcrimwalkpos = args[2]
                            args[2] = client.lastrepupdate
                            LOCAL_PLAYER.Character.HumanoidRootPart.Position = client.lastrepupdate
                        else
                            return
                        end
                    end
                    if lastcrimwalk and not crimwalk then
                        LOCAL_PLAYER.Character.HumanoidRootPart.Position = client.lastrepupdate
                        args[2] = client.lastrepupdate
                    end
                    uberpart.Transparency = menu:GetKey("Rage", "Hack vs. Hack", "Freestanding") and 0 or 1
                    if menu:GetKey("Rage", "Hack vs. Hack", "Freestanding") then
                        for i = 1, #directiontable do
                            --local direction = directiontable[i].Unit * 19
                            local cf = client.cam.basecframe
                            cf -= cf.UpVector
                            local translated = vtos(cf, directiontable[i])
                            local direction = translated.Unit * 19
                            --local direction = directiontable[i].Unit *

                            local raycastResult = workspace:Raycast(args[2], direction, mapRaycast)

                            if raycastResult then
                                --args[1] = raycastResult.Position
                                local normal = raycastResult.Normal
                                local hitpos = raycastResult.Position
                                local newpos = hitpos + normal
                                --local newpos = ptos(raycast)
                                uberpart.Position = newpos
                                args[2] = newpos
                                break
                            end
                        end
                    end
                    client.lastrepupdate = args[2]
                    -- if shitting_my_pants == false and menu:GetVal("Misc", "Exploits", "Noclip") and keybindtoggles.fakebody then
                    --     if not client.fakeoffset then client.fakeoffset = 18 end

                    --     local nextinc = client.fakeoffset + 9
                    --     client.fakeoffset = nextinc <= 48 and nextinc or client.fakeoffset
                    -- end
                    if menu:GetVal("Rage", "Anti Aim", "Enabled") then
                        --args[2] = ragebot:AntiNade(args[2])
                        client.stutterFrames += 1
                        local pitch = args[3].x
                        local yaw = args[3].y
                        local pitchChoice = menu:GetVal("Rage", "Anti Aim", "Pitch")
                        local yawChoice = menu:GetVal("Rage", "Anti Aim", "Yaw")
                        local spinRate = menu:GetVal("Rage", "Anti Aim", "Spin Rate")
                        ---"off,down,up,roll,upside down,random"
                        --{"Off", "Up", "Zero", "Down", "Upside Down", "Roll Forward", "Roll Backward", "Random"} pitch
                        local new_angles
                        if pitchChoice == 2 then
                            pitch = -4
                        elseif pitchChoice == 3 then
                            pitch = 0
                        elseif pitchChoice == 4 then
                            pitch = 4.7
                        elseif pitchChoice == 5 then
                            pitch = -math.pi
                        elseif pitchChoice == 6 then
                            pitch = (tick() * spinRate) % 6.28
                        elseif pitchChoice == 7 then
                            pitch = (-tick() * spinRate) % 6.28
                        elseif pitchChoice == 8 then
                            pitch = math.random(99999)
                        elseif pitchChoice == 9 then
                            pitch = math.sin((tick() % 6.28) * spinRate)
                        elseif pitchChoice == 10 then
                            pitch = 2 ^ 127 + 1
                        end

                        --{"Off", "Backward", "Spin", "Random"} yaw
                        if yawChoice == 2 then
                            yaw += math.pi
                        elseif yawChoice == 3 then
                            yaw = (tick() * spinRate) % 12
                        elseif yawChoice == 4 then
                            yaw = math.random(99999)
                        elseif yawChoice == 5 then
                            yaw = 16478887
                        elseif yawChoice == 6 then
                            yaw = client.stutterFrames % (6 * (spinRate / 4)) >= ((6 * (spinRate / 4)) / 2) and 2 or -2
                        elseif yawChoice == 7 then
                            new_angles = Vector2.new()
                        end

                        -- yaw += jitter

                        new_angles = new_angles or Vector2.new(clamp(pitch, 1.47262156, -1.47262156), yaw)
                        -- args[3] = new_angles
                        ragebot.angles = new_angles
                    else
                        ragebot.angles = args[3]
                    end
                end
                return send(self, unpack(args))
            end
            -- Legitbot definition defines legit functions
            -- Legitbot definition defines legit functions
            -- Legitbot definition defines legit functions
            -- Legitbot definition defines legit functions
            -- Legitbot definition defines legit functions
            -- Legitbot definition defines legit functions
            -- Not Rage Functons Dumbass

            do -- ANCHOR Legitbot definition defines legit functions
                legitbot.triggerbotShooting = false
                legitbot.silentAiming = false
                legitbot.silentVector = nil

                local function Move_Mouse(delta)
                    local coef = client.cam.sensitivitymult * math.atan(
                        math.tan(client.cam.basefov * (math.pi / 180) / 2) / 2.72 ^ client.cam.magspring.p
                    ) / (32 * math.pi)
                    local x = client.cam.angles.x - coef * delta.y
                    x = x > client.cam.maxangle and client.cam.maxangle or x < client.cam.minangle and client.cam.minangle or x
                    local y = client.cam.angles.y - coef * delta.x
                    local newangles = Vector3.new(x, y, 0)
                    client.cam.delta = (newangles - client.cam.angles) / 0.016666666666666666
                    client.cam.angles = newangles
                end

                function legitbot:MainLoop()
                    if legitbot.target then
                        renderChamsOnPlayer(legitbot.target, nil, false)
                    end
                    legitbot.target = nil

                    if not menu.open and INPUT_SERVICE.MouseBehavior ~= Enum.MouseBehavior.Default and client.logic.currentgun
                    then
                        --debug.profilebegin("Legitbot Main")
                        if menu:GetVal("Legit", "Aim Assist", "Enabled") then
                            local keybind = menu:GetVal("Legit", "Aim Assist", "Aimbot Key") - 1
                            local fov = menu:GetVal("Legit", "Aim Assist", "Aimbot FOV")
                            local sFov = menu:GetVal("Legit", "Bullet Redirection", "Silent Aim FOV")
                            local dzFov = menu:GetVal("Legit", "Aim Assist", "Deadzone FOV")
                            if menu:GetVal("Legit", "Aim Assist", "Dynamic FOV") then
                                fov = Camera.FieldOfView / client.char.unaimedfov * fov
                                dzFov = Camera.FieldOfView / client.char.unaimedfov * dzFov
                                sFov = Camera.FieldOfView / client.char.unaimedfov * sFov
                            end

                            local hitboxPriority = menu:GetVal("Legit", "Aim Assist", "Hitscan Priority") == 1 and "head" or menu:GetVal("Legit", "Aim Assist", "Hitscan Priority") == 2 and "torso" or "closey :)"
                            local hitscan = misc:GetParts(menu:GetVal("Legit", "Aim Assist", "Hitscan Points"))

                            if client.logic.currentgun.type ~= "KNIFE" and (keybind >= 2 or INPUT_SERVICE:IsMouseButtonPressed(keybind))
                            then
                                local speed = 1
                                if keybind == 3 then
                                    speed = 0.2
                                    for i = 0, 1 do
                                        if INPUT_SERVICE:IsMouseButtonPressed(i) then
                                            speed += 0.4
                                        end
                                    end
                                end
                                legitbot.smart = speed
                                local priority_list = {}
                                for k, PlayerName in pairs(menu.priority) do
                                    if Players:FindFirstChild(PlayerName) then
                                        table.insert(priority_list, game.Players[PlayerName])
                                    end
                                end
                                local targetPart, closest, player = legitbot:GetTargetLegit(hitboxPriority, hitscan, priority_list, fov, dzFov)
                                if not targetPart then
                                    targetPart, closest, player = legitbot:GetTargetLegit(hitboxPriority, hitscan, nil, fov, dzFov)
                                end
                                legitbot.target = player
                                renderChamsOnPlayer(legitbot.target)
                                if closest > dzFov then
                                    local smoothing = menu:GetVal("Legit", "Aim Assist", "Smoothing") * 5 + 10
                                    if targetPart then
                                        legitbot:AimAtTarget(
                                            targetPart,
                                            smoothing,
                                            menu:GetVal("Legit", "Aim Assist", "Smoothing Type"),
                                            speed
                                        )
                                    end
                                end
                            end
                        end
                        if menu:GetVal("Legit", "Bullet Redirection", "Silent Aim") then
                            local fov = menu:GetVal("Legit", "Bullet Redirection", "Silent Aim FOV")
                            local hnum = menu:GetVal("Legit", "Bullet Redirection", "Hitscan Priority")
                            local hitboxPriority = hnum == 1 and "head" or hnum == 2 and "torso" or hnum == 3 and false
                            local hitscan = misc:GetParts(menu:GetVal("Legit", "Bullet Redirection", "Hitscan Points"))
                            local priority_list = {}
                            for k, PlayerName in pairs(menu.priority) do
                                if Players:FindFirstChild(PlayerName) then
                                    table.insert(priority_list, game.Players[PlayerName])
                                end
                            end
                            local targetPart, closest, player = legitbot:GetTargetLegit(hitboxPriority, hitscan, priority_list, fov)
                            if not targetPart then
                                targetPart, closest, player = legitbot:GetTargetLegit(hitboxPriority, hitscan, nil, fov)
                            end
                            if targetPart then
                                legitbot.silentVector = legitbot:SilentAimAtTarget(targetPart)
                            elseif client.logic.currentgun and client.logic.currentgun.barrel then
                                legitbot.silentVector = nil
                                local barrel = client.logic.currentgun.barrel
                                if client.logic.currentgun.type == "SHOTGUN" and barrel and barrel.Parent then
                                    local trigger = barrel.Parent.Trigger
                                    if trigger then
                                        barrel.Orientation = trigger.Orientation
                                        client:GetToggledSight(client.logic.currentgun).sightpart.Orientation = trigger.Orientation
                                    end
                                end
                            end
                        end
                        --debug.profileend("Legitbot Main")
                    end
                end

                function legitbot:AimAtTarget(targetPart, smoothing, smoothtype, speed)
                    --debug.profilebegin("Legitbot AimAtTarget")
                    if not targetPart then
                        return
                    end

                    local Pos, visCheck

                    if menu:GetVal("Legit", "Aim Assist", "Adjust for Bullet Drop") then
                        if not client.logic.currentgun or not client.logic.currentgun.data or not client.logic.currentgun.data.bulletspeed
                        then
                            return
                        end
                        local bulletVelocity, bulletTravelTime = client.trajectory(
                            client.cam.cframe.p,
                            GRAVITY,
                            targetPart.Position,
                            client.logic.currentgun.data.bulletspeed
                        )
                        local finalPosition
                        if menu:GetVal("Legit", "Aim Assist", "Target Prediction") then
                            local playerHit = client.replication.getplayerhit(targetPart)
                            local rootpart = client.replication.getbodyparts(playerHit).rootpart
                            local velocity = rootpart.Velocity
                            local finalVelocity = velocity * bulletTravelTime
                            finalPosition = targetPart.Position + finalVelocity
                            bulletVelocity, bulletTravelTime = client.trajectory(
                                client.cam.cframe.p,
                                GRAVITY,
                                finalPosition,
                                client.logic.currentgun.data.bulletspeed
                            )
                        else
                            finalPosition = targetPart.Position
                        end
                        Pos, visCheck = Camera:WorldToScreenPoint(targetPart.Position + bulletVelocity)
                        --Pos, visCheck = Camera:WorldToScreenPoint(camera:GetTrajectory(targetPart.Position, Camera.CFrame.Position))
                    else
                        Pos, visCheck = Camera:WorldToScreenPoint(targetPart.Position)
                    end
                    local randMag = menu:GetVal("Legit", "Aim Assist", "Randomization") * 5
                    Pos += Vector3.new(
                        math.noise(time() * 0.1, 0.1) * randMag,
                        math.noise(time() * 0.1, 200) * randMag,
                        0
                    )

                   
                    if client.logic.currentgun and client.logic.currentgun.type ~= "KNIFE" and client.logic.currentgun:isaiming() and menu:GetVal("Legit", "Recoil Control", "Weapon RCS")
                    then
                        local sniping = (menu:GetVal("Legit", "Recoil Control", "Disable RCS While")[1] and client.logic.currentgun.type ~= "SNIPER") or (menu:GetVal("Legit", "Recoil Control", "Disable RCS While")[1] == false)
                        local scoping = (menu:GetVal("Legit", "Recoil Control", "Disable RCS While")[2] and client:GetToggledSight(client.logic.currentgun).sightspring.p > 0.5) or (menu:GetVal("Legit", "Recoil Control", "Disable RCS While")[2] == false)
                        local shooting = (menu:GetVal("Legit", "Recoil Control", "Disable RCS While")[3] and INPUT_SERVICE:IsMouseButtonPressed(0)) or (menu:GetVal("Legit", "Recoil Control", "Disable RCS While")[3] == false)
                        if sniping and scoping and shooting then
                            local sight = client:GetToggledSight(client.logic.currentgun).sightpart
                            local gunpos2d = Camera:WorldToScreenPoint(sight.Position)

                            local rcs = Vector2.new(LOCAL_MOUSE.x - gunpos2d.x, LOCAL_MOUSE.y - gunpos2d.y)

                            local xo = menu:GetVal("Legit", "Recoil Control", "Recoil Control X") / 2
                            local yo = menu:GetVal("Legit", "Recoil Control", "Recoil Control Y")
                            local rcsdelta = Vector3.new(rcs.x * xo / 100, rcs.y * yo / 100, 0)  --* client:GetToggledSight(client.logic.currentgun).sightspring.p
                            Pos += rcsdelta
                        end
                    end
                    local aimbotMovement = Vector2.new(Pos.x - LOCAL_MOUSE.x, Pos.y - LOCAL_MOUSE.y)
                    if smoothtype == 1 then
                        Move_Mouse(aimbotMovement * speed / smoothing)
                    else
                        local unitMovement = aimbotMovement.Unit
                        local newMovement = aimbotMovement.Magnitude > unitMovement.Magnitude and unitMovement or aimbotMovement / 50

                        Move_Mouse(newMovement * speed / smoothing * 100)
                    end
                    --debug.profileend("Legitbot AimAtTarget")
                end

                function legitbot:SilentAimAtTarget(targetPart)
                    --debug.profilebegin("Legitbot SilentAimAtTarget")

                    if not targetPart or not targetPart.Position or not client.logic.currentgun then
                        return
                    end
                    if not client.logic.currentgun or not client.logic.currentgun.barrel then
                        return
                    end

                    if client.logic.currentgun.type == "KNIFE" then
                        return
                    end

                    if math.random(0, 100) > menu:GetVal("Legit", "Bullet Redirection", "Hit Chance") then
                        return
                    end

                    if not client.logic.currentgun.barrel then
                        return
                    end
                    local origin = client.logic.currentgun.isaiming() and client:GetToggledSight(client.logic.currentgun) or client.logic.currentgun.barrel.Position

                    local target = targetPart.Position
                    local dir, bulletTravelTime = client.trajectory(
                            client.cam.cframe.p,
                            GRAVITY,
                            target,
                            client.logic.currentgun.data.bulletspeed
                        )
                    if menu:GetVal("Legit", "Aim Assist", "Target Prediction") then
                        local playerHit = client.replication.getplayerhit(targetPart)
                        local rootpart = client.replication.getbodyparts(playerHit).rootpart
                        local velocity = rootpart.Velocity
                        local finalVelocity = velocity * bulletTravelTime
                        target += finalVelocity
                        dir = client.trajectory(
                            client.cam.cframe.p,
                            GRAVITY,
                            target,
                            client.logic.currentgun.data.bulletspeed
                        )
                    end
                    dir = dir.Unit

                    local offsetMult = map(
                        (menu:GetVal("Legit", "Bullet Redirection", "Accuracy") / 100 * -1 + 1),
                        0,
                        1,
                        0,
                        0.3
                    )
                    local offset = Vector3.new(math.random() - 0.5, math.random() - 0.5, math.random() - 0.5)
                    dir += offset * offsetMult

                    --debug.profileend("Legitbot SilentAimAtTarget")
                    if client.logic.currentgun.type == "SHOTGUN" then
                        local x, y, z = CFrame.lookAt(Vector3.new(), dir.Unit):ToOrientation()
                        client.logic.currentgun.barrel.Orientation = Vector3.new(math.deg(x), math.deg(y), math.deg(z))
                        client:GetToggledSight(client.logic.currentgun).sightpart.Orientation = Vector3.new(math.deg(x), math.deg(y), math.deg(z))
                        return
                    end
                    return dir.Unit
                end

                local function isValidTarget(Bone, Player)
                    if camera:IsVisible(Bone) then
                        return Bone
                    end
                end
                --[[
                if menu:GetVal("Legit", "Aim Assist", "Auto Wallbang") then
                    local dir = camera:GetTrajectory(Bone.Position, client.cam.cframe.p) - client.cam.cframe.p
                    if ragebot:CanPenetrate(LOCAL_PLAYER, Player, dir, Bone.Position)  then
                        closest
                    end
                elseif camera:IsVisible(Bone) then
                    closest = camera:GetFOV(Bone)
                    closestPart = Bone
                    player = Player
                end
                ]]
                function legitbot:GetTargetLegit(partPreference, hitscan, players, maxfov, minfov)
                    minfov = minfov or 0
                   
                    --debug.profilebegin("Legitbot GetTargetLegit")
                    local closest, closestPart, player = math.huge
                    partPreference = partPreference or "what"
                    hitscan = hitscan or {}
                    players = players or game.Players:GetPlayers()

                    if legitbot.target and client.hud:isplayeralive(legitbot.target) then
                        local Parts = client.replication.getbodyparts(legitbot.target)
                        if Parts then
                            new_closest = closest
                            for k, Bone in pairs(Parts) do
                                if Bone.ClassName == "Part" and hitscan[k] then
                                    local fovToBone = camera:GetFOV(Bone)
                                    if fovToBone < maxfov and fovToBone < closest then
                                        local validPart = isValidTarget(Bone, Player)
                                        if validPart then
                                            closest = fovToBone
                                            closestPart = Bone
                                            player = legitbot.target
                                            return closestPart, closest, player
                                        end
                                    end
                                end
                            end
                        end
                    end

                    for i, Player in pairs(players) do
                        if table.find(menu.friends, Player.Name) and menu:GetVal("Misc", "Extra", "Ignore Friends")
                        then
                            continue
                        end

                        if client.hud:isplayeralive(Player) and Player.Team ~= LOCAL_PLAYER.Team and Player ~= LOCAL_PLAYER then
                            local Parts = client.replication.getbodyparts(Player)
                            if Parts then
                                new_closest = closest
                                for k, Bone in pairs(Parts) do
                                    if Bone.ClassName == "Part" and hitscan[k] then
                                        local fovToBone = camera:GetFOV(Bone)
                                        if fovToBone < maxfov and fovToBone < closest then
                                            local validPart = isValidTarget(Bone, Player)
                                            if validPart then
                                                closest = fovToBone
                                                closestPart = Bone
                                                player = Player
                                            end
                                        end
                                    end
                                end
                            end
                        end
                    end

                    if player and closestPart then
                        local Parts = client.replication.getbodyparts(player)
                        if partPreference then
                            local PriorityBone = Parts[partPreference]
                            if PriorityBone then
                                local fov_to_bone = camera:GetFOV(PriorityBone)
                                if fov_to_bone and fov_to_bone < closest and camera:IsVisible(PriorityBone) then
                                    closest = camera:GetFOV(PriorityBone)
                                    closestPart = PriorityBone
                                end
                            end
                        end
                    end
                    --debug.profileend("Legitbot GetTargetLegit")
                    return closestPart, closest, player
                end

                function legitbot:TriggerBot()
                    -- i swear to god the capital GetVal makes me do Menu:GetVal
                    if menu:GetVal("Legit", "Trigger Bot", "Enabled") and menu:GetKey("Legit", "Trigger Bot", "Enabled", true)
                    then
                        local parts = misc:GetParts(menu:GetVal("Legit", "Trigger Bot", "Trigger Bot Hitboxes"))

                        local gun = client.logic.currentgun
                        if not gun then
                            return
                        end
                        local dsrgposrdjiogjaiogjaoeihjoaiest = "data" -- it loves it
                        if not gun.data then
                            return
                        end

                        local thebarrel = gun.barrel
                        --debug.profilebegin("Legitbot Triggerbot")
                        local bulletspeed = gun.data.bulletspeed
                        local isaiming = gun:isaiming()
                        local zoomval = menu:GetVal("Legit", "Trigger Bot", "Aim Percentage") / 100
                        --local shootallowed = menu:GetVal("Legit", "Trigger Bot", "Trigger When Aiming") and (isaiming and (client.zoommodspring.p > zoomval) or false) or true -- isaiming and (zoommodspring.p > zoomval) or false is somewhat redundant but oh well lmao
                        local shootallowed

                        if menu:GetVal("Legit", "Trigger Bot", "Trigger When Aiming") then
                            shootallowed = isaiming and (client.zoommodspring.p >= zoomval) or false
                        else
                            shootallowed = true
                        end

                        if shootallowed then
                            for player, bodyparts in next, getupvalue(client.replication.getallparts, 1) do
                                if player.Team ~= LOCAL_PLAYER.Team then
                                    for bpartname, bodypart in next, bodyparts do
                                        if bodypart:IsA("Part") and bodypart.Transparency == 0 and parts[bpartname]
                                        then
                                            if camera:IsVisible(bodypart) then
                                                local barrel = isaiming and gun.aimsightdata[1].sightpart or thebarrel
                                                local delta = (bodypart.Position - barrel.Position)
                                                local direction = client.trajectory(
                                                    barrel.Position,
                                                    GRAVITY,
                                                    bodypart.Position,
                                                    bulletspeed
                                                ).Unit
                                                local barrelLV = barrel.CFrame.LookVector
                                                local normalized = barrelLV.unit

                                                local dot = normalized:Dot(direction)

                                                if delta.magnitude > 2050 then
                                                    if barrelLV.Y >= direction.Y then
                                                        local dist = delta.magnitude ^ -2.3

                                                        local dotthreshold = 1 - dist

                                                        if dot >= dotthreshold then
                                                            gun:shoot(true)
                                                            legitbot.triggerbotShooting = true
                                                            return
                                                        end
                                                    end
                                                else
                                                    local whitelist = { bodypart }

                                                    if gun.type == "SHOTGUN" or gun.data.pelletcount then
                                                        table.insert(whitelist, menu.parts.sphereHitbox)
                                                        menu.parts.sphereHitbox.Position = bodypart.Position
                                                    end

                                                    local hit, hitpos = workspace:FindPartOnRayWithWhitelist(
                                                        Ray.new(barrel.Position, normalized * 4000),
                                                        whitelist
                                                    )
                                                    if hit and hit:IsDescendantOf(bodypart.Parent.Parent) or hit == menu.parts.sphereHitbox
                                                    then
                                                        local hitdir = (hitpos - barrel.Position).unit
                                                        if hitdir:Dot(direction) > 0.9993 then
                                                            gun:shoot(true)
                                                            legitbot.triggerbotShooting = true
                                                            return
                                                        end
                                                    end
                                                end
                                            end
                                        elseif legitbot.triggerbotShooting then
                                            gun:shoot(false)
                                            legitbot.triggerbotShooting = false
                                        end
                                    end
                                end
                            end
                        end
                        --[[local hit = workspace:FindPartOnRayWithIgnoreList(Ray.new(barrel.CFrame.Position, barrel.CFrame.LookVector*5000), {Camera, workspace.Players[LOCAL_PLAYER.Team.Name], workspace.Ignore})
                       
                        if hit and parts[hit.Name] then
                            if not camera:IsVisible(hit) then return end
                            client.logic.currentgun:shoot(true)
                            legitbot.triggerbotShooting = true
                        elseif legitbot.triggerbotShooting then
                            client.logic.currentgun:shoot(false)
                            legitbot.triggerbotShooting = false
                        end]]
                        --debug.profileend("Legitbot Triggerbot")
                    end
                end
            end

            local newpart = client.particle.new
            client.particle.new = function(P)
                local new_speed
                -- if menu:GetVal("Misc", "Weapon Modifications", "Edit Bullet Speed") then
                --     new_speed = menu:GetVal("Misc", "Weapon Modifications", "Bullet Speed")
                -- end

                local mag = new_speed or P.velocity.Magnitude

                if not P.thirdperson then
                    if menu:GetVal("Legit", "Bullet Redirection", "Silent Aim") and legitbot.silentVector then
                        P.velocity = legitbot.silentVector.Unit * mag
                    elseif menu:GetVal("Rage", "Aimbot", "Enabled") and menu:GetKey("Rage", "Aimbot", "Enabled", true) and ragebot.silentVector
                    then
                        local oldpos = P.position
                        P.position = ragebot.firepos
                        P.velocity = ragebot.silentVector.Unit * mag
                        P.visualorigin = ragebot.firepos
                        P.ontouch = nil -- paster gave me this idea it will probably help the ragebot not be detected and other shit
                    else
                        if new_speed then
                            P.velocity = P.velocity.Unit * new_speed
                        end
                    end
                end

                return newpart(P)
            end

            --ADS Fov hook
            local lastsaturtation = game.Lighting.MapSaturation.TintColor
            client.lastPlayerPositions = {}
            local function renderVisuals(dt)
                local _new, _last = menu:GetVal("Misc", "Extra", "Disable 3D Rendering")
                if _new ~= _last then
                    game:GetService("RunService"):Set3dRenderingEnabled(not _new)
                end
                misc:UpdateBeams()
                client.char.unaimedfov = menu.options["Visuals"]["Camera Visuals"]["Camera FOV"][1]
                if menu.open then
                    --debug.profilebegin("renderVisuals Char")
                    local crosshud = PLAYER_GUI.MainGui.GameGui.CrossHud:GetChildren()
                    for i = 1, #crosshud do
                        local frame = crosshud[i]
                        if not crosshairColors then
                            crosshairColors = {
                                inline = frame.BackgroundColor3,
                                outline = frame.BorderColor3,
                            }
                        end -- MEOW -core 2021
                        local inline = menu:GetVal("Visuals", "Misc", "Crosshair Color", COLOR1, true)
                        local outline = menu:GetVal("Visuals", "Misc", "Crosshair Color", COLOR2, true)
                        local enabled = menu:GetVal("Visuals", "Misc", "Crosshair Color")
                        frame.BackgroundColor3 = enabled and inline or crosshairColors.inline
                        frame.BorderColor3 = enabled and outline or crosshairColors.outline
                        frame.Shot.BackgroundColor3 = enabled and inline or crosshairColors.inline
                        frame.Shot.BorderColor3 = enabled and outline or crosshairColors.outline
                    end
                    --debug.profileend("renderVisuals Char")
                end -- fun end!
                --------------------------------------world funnies
                --debug.profilebegin("renderVisuals World")
                if menu.options["Visuals"]["World"]["Force Time"][1] then
                    game.Lighting.ClockTime = menu.options["Visuals"]["World"]["Custom Time"][1]
                end
                if menu.options["Visuals"]["World"]["Ambience"][1] then
                    game.Lighting.Ambient = RGB(
                        menu.options["Visuals"]["World"]["Ambience"][5][1][1][1][1],
                        menu.options["Visuals"]["World"]["Ambience"][5][1][1][1][2],
                        menu.options["Visuals"]["World"]["Ambience"][5][1][1][1][3]
                    )
                    game.Lighting.OutdoorAmbient = RGB(
                        menu.options["Visuals"]["World"]["Ambience"][5][1][2][1][1],
                        menu.options["Visuals"]["World"]["Ambience"][5][1][2][1][2],
                        menu.options["Visuals"]["World"]["Ambience"][5][1][2][1][3]
                    )
                else
                    game.Lighting.Ambient = game.Lighting.MapLighting.Ambient.Value
                    game.Lighting.OutdoorAmbient = game.Lighting.MapLighting.OutdoorAmbient.Value
                end

                --
                if menu.options["Visuals"]["World"]["Custom Saturation"][1] then
                    game.Lighting.MapSaturation.TintColor = RGB(
                        menu.options["Visuals"]["World"]["Custom Saturation"][5][1][1],
                        menu.options["Visuals"]["World"]["Custom Saturation"][5][1][2],
                        menu.options["Visuals"]["World"]["Custom Saturation"][5][1][3]
                    )
                    game.Lighting.MapSaturation.Saturation = menu.options["Visuals"]["World"]["Saturation Density"][1] / 50
                else
                    game.Lighting.MapSaturation.TintColor = lastsaturtation
                    game.Lighting.MapSaturation.Saturation = -0.25
                end--]]
                --debug.profileend("renderVisuals World")

                --debug.profilebegin("renderVisuals Player ESP Reset")
                -- TODO this reset may need to be improved to a large extent, it's taking up some time but idk if the frame times are becoming worse because of this
                for i = 1, #allesp do
                    local drawclass = allesp[i]
                    for j = 1, #drawclass do
                        local drawdata = drawclass[j]
                        for k = 1, #drawdata do
                            drawdata[k].Visible = false
                        end
                    end
                end

                --debug.profileend("renderVisuals Player ESP Reset")

                ----------
                --debug.profilebegin("renderVisuals Main")
                if client.logic.currentgun and client.logic.currentgun.barrel and client.char.alive and menu:GetVal("Visuals", "Misc", "Laser Pointer")
                then
                    menu.crosshair.outline[1].Visible = true
                    menu.crosshair.outline[2].Visible = true
                    menu.crosshair.inner[1].Visible = true
                    menu.crosshair.inner[2].Visible = true
                    local ignore = { workspace.Ignore, Camera }
                    local barrel = client.logic.currentgun:isaiming() and client:GetToggledSight(client.logic.currentgun).sightpart or client.logic.currentgun.barrel
                    if barrel.Parent then
                        local trigger = barrel.Parent.Trigger
                        local hit, hitpos = workspace:FindPartOnRayWithIgnoreList(Ray.new(barrel.Position, trigger.CFrame.LookVector * 100), ignore)
                        local size = 6
                        local color = menu:GetVal("Visuals", "Misc", "Laser Pointer", COLOR, true)
                        menu.crosshair.inner[1].Size = Vector2.new(size * 2 + 1, 1)
                        menu.crosshair.inner[2].Size = Vector2.new(1, size * 2 + 1)

                        menu.crosshair.inner[1].Color = color
                        menu.crosshair.inner[2].Color = color

                        menu.crosshair.outline[1].Size = Vector2.new(size * 2 + 3, 3)
                        menu.crosshair.outline[2].Size = Vector2.new(3, size * 2 + 3)
                        local hit2d = Camera:WorldToViewportPoint(hitpos)

                        menu.crosshair.inner[1].Position = Vector2.new(hit2d.x - size, hit2d.y)
                        menu.crosshair.inner[2].Position = Vector2.new(hit2d.x, hit2d.y - size)
                        menu.crosshair.outline[1].Position = Vector2.new(hit2d.x - size - 1, hit2d.y - 1)
                        menu.crosshair.outline[2].Position = Vector2.new(hit2d.x - 1, hit2d.y - 1 - size)
                    end
                else
                    menu.crosshair.outline[1].Visible = false
                    menu.crosshair.outline[2].Visible = false
                    menu.crosshair.inner[1].Visible = false
                    menu.crosshair.inner[2].Visible = false
                end

                if client.cam.type ~= "menu" then
                    local players = Players:GetPlayers()
                    -- table.sort(players, function(p1, p2)
                    --     return table.find(menu.priority, p2.Name) ~= table.find(menu.priority, p1.Name) and table.find(menu.priority, p2.Name) == true and table.find(menu.priority, p1.Name) == false
                    -- end)
                    local cam = client.cam.cframe
                    local current_time = tick()
                    local priority_color = menu:GetVal("Visuals", "ESP Settings", "Highlight Priority", COLOR, true)
                    local priority_alpha = menu:GetVal("Visuals", "ESP Settings", "Highlight Priority", COLOR)[4] / 255

                    local friend_color = menu:GetVal("Visuals", "ESP Settings", "Highlight Friends", COLOR, true)
                    local friend_alpha = menu:GetVal("Visuals", "ESP Settings", "Highlight Friends", COLOR)[4] / 255

                    local target_color = menu:GetVal("Visuals", "ESP Settings", "Highlight Target", COLOR, true)
                    local target_alpha = menu:GetVal("Visuals", "ESP Settings", "Highlight Target", COLOR)[4] / 255
                    client.aliveplayers = 0
                    local size = math.floor(SCREEN_SIZE.x * 0.0078125)
                    local big_size = math.floor(SCREEN_SIZE.x * 0.0260416666667)
                    for curplayer = 1, #players do
                       
                        local player = players[curplayer]
                        local playername = player.Name

                        local enemy = false

                        local GroupBox = "Team ESP"

                        if player.Team ~= LOCAL_PLAYER.Team then
                            GroupBox = "Enemy ESP"
                            enemy = true
                            client.aliveplayers += 1
                        end
                       
                        do
                            if not menu:GetVal("Visuals", GroupBox, "Enabled") then
                                continue
                            end

                            local parts = client.replication.getbodyparts(player)

                            local torso, rootpart, position, resolved
                            local opacity_mult = 1
                            local skel_parts = {}
                            if not parts then
                                local fade_time = menu:GetVal("Visuals", "ESP Settings", "ESP Fade Time")
                                if fade_time ~= 0 then
                                    local log_position = client.lastPlayerPositions[player]
                                    if log_position then
                                        torso = log_position.cframe
                                        opacity_mult = clamp((log_position.time - current_time + fade_time) * 1/fade_time, 0, 1)
                                        skel_parts = client.lastPlayerPositions[player].parts
                                        rootpart = torso
                                    end
                                end
                            elseif client.hud:isplayeralive(player) then
                                if parts.head.Transparency > 0 then continue end -- idk this should work against like floating dead peopluee
                                player.Character = parts.rootpart.Parent

                                torso = parts.torso.CFrame
                                rootpart = parts.rootpart.CFrame
                                client.lastPlayerPositions[player] = {cframe = torso, time = current_time}
                                for i = 1, #skelparts do
                                    local part = player.Character:FindFirstChild(skelparts[i])
                                    client.lastPlayerPositions[player].parts = {} -- this is fucking dumb but it works whatever
                                    client.lastPlayerPositions[player].parts[skelparts[i]] = {Position = part.Position}
                                    skel_parts[skelparts[i]] = part
                                end
                            end
                            if opacity_mult == 0 then continue end
                            if not torso then continue end
                            position = torso.Position
                            resolved = false
                            if menu:GetVal("Visuals", "Enemy ESP", "Flags")[4] and parts then
                                local newpos = ragebot:GetResolvedPosition(player, parts.torso.CFrame, parts.rootpart.CFrame)
                                if newpos then
                                    resolved = true
                                end
                                position = newpos or position
                            end
                            --debug.profilebegin("renderVisuals Player ESP Box Calculation " .. playername)

                            local vTop = position + (torso.UpVector * 1.8) + cam.UpVector
                            local vBottom = position - (torso.UpVector * 2.5) - cam.UpVector

                            local top, topIsRendered = Camera:WorldToViewportPoint(vTop)
                            local bottom, bottomIsRendered = Camera:WorldToViewportPoint(vBottom)
                           

                            -- local minY = math.abs(bottom.y - top.y)
                            -- local sizeX = math.ceil(math.max(clamp(math.abs(bottom.x - top.x) * 2, 0, minY), minY / 2))
                            -- local sizeY = math.ceil(math.max(minY, sizeX * 0.5))

                            -- local boxSize = Vector2.new(sizeX, sizeY)
                            local _width = math.max(math.floor(math.abs(top.x - bottom.x)), 3)
                            local _height = math.max(math.floor(math.max(math.abs(bottom.y - top.y), _width / 2)), 3)
                            local boxSize = Vector2.new(math.floor(math.max(_height / 1.5, _width)), _height)
                            local boxPosition = Vector2.new(
                                math.floor(top.x * 0.5 + bottom.x * 0.5 - boxSize.x * 0.5),
                                math.floor(math.min(top.y, bottom.y))
                            )

                            --debug.profileend("renderVisuals Player ESP Box Calculation " .. playername)

                            local GroupBox = player.Team == LOCAL_PLAYER.Team and "Team ESP" or "Enemy ESP"
                            local health = math.ceil(client.hud:getplayerhealth(player))
                            local spoty = 0
                            local boxtransparency = menu:GetVal("Visuals", GroupBox, "Box", COLOR2)[4] / 255 * opacity_mult
                            local boxtransparencyfilled = menu:GetVal("Visuals", GroupBox, "Box", COLOR1)[4] / 255 * opacity_mult
                            local health_number_transparency = menu.options["Visuals"][GroupBox]["Health Number"][5][1][4] / 255 * opacity_mult
                            local name_transparency = menu:GetVal("Visuals", GroupBox, "Name", COLOR)[4] / 255 * opacity_mult
                            local espflags = menu:GetVal("Visuals", GroupBox, "Flags")
                            local distance = math.floor((rootpart.Position - Camera.CFrame.Position).Magnitude / 5)
                            local arrow_dist = menu:GetVal("Visuals", "Enemy ESP", "Arrow Distance")
                            local flag_text_size = espflags[1]

                            if (topIsRendered or bottomIsRendered) then
                                if espflags[2] then
                                    local playerdata = teamdata[1]:FindFirstChild(playername) or teamdata[2]:FindFirstChild(playername)
                                    allesp[3][5][curplayer].Visible = true
                                    allesp[3][5][curplayer].Text = "lv" .. playerdata.Rank.Text
                                    allesp[3][5][curplayer].Transparency = health_number_transparency
                                    allesp[3][5][curplayer].Position = Vector2.new(
                                        math.floor(boxPosition.x) + boxSize.x + 2,
                                        math.floor(boxPosition.y) - 4 + spoty
                                    )
                                    if flag_text_size then
                                        allesp[3][5][curplayer].Font = 2
                                        allesp[3][5][curplayer].Size = 13
                                        spoty += 13
                                    else
                                        allesp[3][5][curplayer].Font = 1
                                        spoty += 10
                                    end
                                end


                                if espflags[3] then
                                   
                                    allesp[3][6][curplayer].Visible = true
                                    allesp[3][6][curplayer].Text = tostring(distance).. "m"
                                    allesp[3][6][curplayer].Transparency = health_number_transparency
                                    allesp[3][6][curplayer].Position = Vector2.new(
                                        math.floor(boxPosition.x) + boxSize.x + 2,
                                        math.floor(boxPosition.y) - 4 + spoty
                                    )
                                    if flag_text_size then
                                        allesp[3][6][curplayer].Font = 2
                                        allesp[3][6][curplayer].Size = 13
                                        spoty += 13
                                    else
                                        allesp[3][6][curplayer].Font = 1
                                        spoty += 10
                                    end

                                end

                                if enemy then
                                    if espflags[4] then
                                        allesp[3][4][curplayer].Visible = resolved
                                        allesp[3][4][curplayer].Transparency = health_number_transparency
                                        allesp[3][4][curplayer].Position = Vector2.new(
                                            math.floor(boxPosition.x) + boxSize.x + 2,
                                            math.floor(boxPosition.y) - 4 + spoty
                                        )
                                        if flag_text_size then
                                            allesp[3][4][curplayer].Font = 2
                                            allesp[3][4][curplayer].Size = 13
                                            spoty += 13
                                        else
                                            allesp[3][4][curplayer].Font = 1
                                            spoty += 10
                                        end
                                    end
                                    if espflags[5] and parts then
                                        local backtrackedPosition = ragebot:GetBacktrackedPosition(player, parts, menu:GetVal("Rage", "Hack vs. Hack", "Backtracking Time")/1000)
                                        if backtrackedPosition then
                                            backtrackedPosition, btRendered = Camera:WorldToViewportPoint(backtrackedPosition.pos)
                                            if btRendered then
                                                allesp[11][1][curplayer].Position = Vector2.new(backtrackedPosition.x, backtrackedPosition.y)
                                                allesp[11][1][curplayer].NumSides = 12
                                                allesp[11][1][curplayer].Radius = 1 / backtrackedPosition.z * 100 + 3
                                                allesp[11][1][curplayer].Thickness = 1
                                                allesp[11][1][curplayer].Visible = true
                                                allesp[11][1][curplayer].Transparency = 1
                                                allesp[11][1][curplayer].Color = Color3.new(1,1,1)
                                            end
                                        end
                                    end
                                end
                               
                                if menu.options["Visuals"][GroupBox]["Name"][1] then
                                    --debug.profilebegin("renderVisuals Player ESP Render Name " .. playername)
                                    local name = tostring(playername)
                                    if menu.options["Visuals"]["ESP Settings"]["Text Case"][1] == 1 then
                                        name = string.lower(name)
                                    elseif menu.options["Visuals"]["ESP Settings"]["Text Case"][1] == 3 then
                                        name = string.upper(name)
                                    end

                                    allesp[4][1][curplayer].Text = string_cut(name, menu:GetVal("Visuals", "ESP Settings", "Max Text Length"))
                                    allesp[4][1][curplayer].Visible = true
                                    allesp[4][1][curplayer].Transparency = 1

                                    allesp[4][1][curplayer].Position = Vector2.new(boxPosition.x + boxSize.x * 0.5, boxPosition.y - 15)
                                end

                                if menu.options["Visuals"][GroupBox]["Box"][1] then
                                    --debug.profilebegin("renderVisuals Player ESP Render Box " .. playername)
                                    for i = -1, 1 do
                                        local box = allesp[2][i + 3][curplayer]
                                        box.Visible = true
                                        box.Position = boxPosition + Vector2.new(i, i)
                                        box.Size = boxSize - Vector2.new(i * 2, i * 2)
                                        box.Transparency = boxtransparency

                                        if i ~= 0 then
                                            box.Color = RGB(20, 20, 20)
                                        end
                                        --box.Color = i == 0 and color or bColor:Add(bColor:Mult(color, 0.2), 0.1)
                                    end

                                    if boxtransparencyfilled ~= 0 then
                                        local box = allesp[2][1][curplayer]
                                        box.Visible = true
                                        box.Position = boxPosition
                                        box.Size = boxSize
                                       
                                        box.Transparency = boxtransparencyfilled
                                        box.Filled = true
                                    end
                                    --debug.profileend("renderVisuals Player ESP Render Box " .. playername)
                                end


                                if menu.options["Visuals"][GroupBox]["Health Bar"][1] then
                                    --debug.profilebegin("renderVisuals Player ESP Render Health Bar " .. playername)

                                    local ySizeBar = -math.floor(boxSize.y * health / 100)
                                    if menu.options["Visuals"][GroupBox]["Health Number"][1]
                                        and health <= menu.options["Visuals"]["ESP Settings"]["Max HP Visibility Cap"][1]
                                        and health > 0
                                    then
                                        local hptext = allesp[3][3][curplayer]
                                        hptext.Visible = true
                                        hptext.Text = tostring(health)
                                        if flag_text_size then
                                            hptext.Font = 2
                                        else
                                            hptext.Font = 1
                                        end

                                        local tb = hptext.TextBounds

                                        -- clamp(ySizeBar + boxSize.y - tb.y * 0.5, -tb.y, boxSize.y - tb.y )
                                        hptext.Position = boxPosition + Vector2.new(
                                            -tb.x - 7,
                                            clamp(ySizeBar + boxSize.y - tb.y * 0.5, -4, boxSize.y - 10)
                                        )
                                       
                                        --hptext.Position = Vector2.new(boxPosition.x - 7 - tb.x, boxPosition.y + clamp(boxSize.y + ySizeBar - 8, -4, boxSize.y - 10))
                                        hptext.Color = menu:GetVal("Visuals", GroupBox, "Health Number", COLOR, true)
                                        hptext.Transparency = health_number_transparency


                                        --[[
                                if menu:GetVal("Visuals", "Player ESP", "Health Number") then
                                    allesp.hptext[i].Text = tostring(health)
                                    local textsize = allesp.hptext[i].TextBounds
                                    allesp.hptext[i].Position = Vector2.new(boxtop.x - 7 - textsize.x, boxtop.y + clamp(boxsize.h + ySizeBar - 8, -4, boxsize.h - 10))
                                    allesp.hptext[i].Visible = true
                                end
                                ]]
                                    end

                                    allesp[3][1][curplayer].Visible = true
                                    allesp[3][1][curplayer].Position = Vector2.new(math.floor(boxPosition.x) - 6, math.floor(boxPosition.y) - 1)
                                    allesp[3][1][curplayer].Size = Vector2.new(4, boxSize.y + 2)
                                    allesp[3][1][curplayer].Transparency = opacity_mult

                                    allesp[3][2][curplayer].Visible = true
                                    allesp[3][2][curplayer].Position = Vector2.new(
                                        math.floor(boxPosition.x) - 5,
                                        math.floor(boxPosition.y + boxSize.y)
                                    )

                                    allesp[3][2][curplayer].Size = Vector2.new(2, ySizeBar)

                                    allesp[3][2][curplayer].Color = ColorRange(health, {
                                        [1] = {
                                            start = 0,
                                            color = menu:GetVal("Visuals", GroupBox, "Health Bar", COLOR1, true),
                                        },
                                        [2] = {
                                            start = 100,
                                            color = menu:GetVal("Visuals", GroupBox, "Health Bar", COLOR2, true),
                                        },
                                    })
                                    allesp[3][2][curplayer].Transparency = opacity_mult

                                    --debug.profileend("renderVisuals Player ESP Render Health Bar " .. playername)
                                elseif menu.options["Visuals"][GroupBox]["Health Number"][1] and health <= menu.options["Visuals"]["ESP Settings"]["Max HP Visibility Cap"][1]
                                then
                                    --debug.profilebegin("renderVisuals Player ESP Render Health Number " .. playername)

                                    local hptext = allesp[3][3][curplayer]

                                    hptext.Visible = true
                                    hptext.Text = tostring(health)

                                    local tb = hptext.TextBounds

                                    hptext.Position = boxPosition + Vector2.new(-tb.x - 2, -4)
                                    hptext.Color = menu:GetVal("Visuals", GroupBox, "Health Number", COLOR, true)
                                    hptext.Transparency = health_number_transparency

                                    --debug.profileend("renderVisuals Player ESP Render Health Number " .. playername)
                                end

                                local yaddpos = 0
                                if menu.options["Visuals"][GroupBox]["Held Weapon"][1] then
                                    --debug.profilebegin("renderVisuals Player ESP Render Held Weapon " .. playername)

                                    local charWeapon = _3pweps[player]
                                    local wepname = charWeapon and charWeapon or "???"

                                    if menu.options["Visuals"]["ESP Settings"]["Text Case"][1] == 1 then
                                        wepname = string.lower(wepname)
                                    elseif menu.options["Visuals"]["ESP Settings"]["Text Case"][1] == 3 then
                                        wepname = string.upper(wepname)
                                    end

                                    local weptext = allesp[4][2][curplayer]
                                   
                                    weptext.Text = string_cut(
                                        wepname,
                                        menu:GetVal("Visuals", "ESP Settings", "Max Text Length")
                                    )
                                    weptext.Visible = true
                                    weptext.Position = Vector2.new(boxPosition.x + boxSize.x * 0.5, boxPosition.y + boxSize.y)

                                    yaddpos += 12
                                    --debug.profileend("renderVisuals Player ESP Render Held Weapon " .. playername)
                                end

                                if menu:GetVal("Visuals", GroupBox, "Held Weapon Icon") then
                                    local charWeapon = _3pweps[player]
                                    local wepname = charWeapon and charWeapon or "???"

                                    local tempicon = allesp[3][7][curplayer]

                                   
                                    local tempimage = NameToIcon(wepname)

                                    if (setwepicons[curplayer] ~= nil or wepname ~= "???") and tempimage ~= nil then
   
                                        tempicon.Visible = true
                                        tempicon.Position = Vector2.new(math.floor(boxPosition.x + boxSize.x * 0.5 - (tempimage.w/2)), math.floor(boxPosition.y + boxSize.y + yaddpos + 2))
                                        tempicon.Transparency = menu:GetVal("Visuals", GroupBox, "Held Weapon", COLOR)[4]/255 * opacity_mult
                                   
                                    elseif not menu:GetVal("Visuals", GroupBox, "Held Weapon") then

                                        if menu.options["Visuals"]["ESP Settings"]["Text Case"][1] == 1 then
                                            wepname = string.lower(wepname)
                                        elseif menu.options["Visuals"]["ESP Settings"]["Text Case"][1] == 3 then
                                            wepname = string.upper(wepname)
                                        end
   
                                        local weptext = allesp[4][2][curplayer]
                                       
                                        weptext.Text = string_cut(
                                            wepname,
                                            menu:GetVal("Visuals", "ESP Settings", "Max Text Length")
                                        )
                                        weptext.Visible = true
                                        weptext.Position = Vector2.new(boxPosition.x + boxSize.x * 0.5, boxPosition.y + boxSize.y)
   
                                    end
                                   
                                   

                                    if setwepicons[curplayer] ~= wepname then
                                        if tempimage ~= nil then
                                           

                                            tempicon.Data = tempimage.data
                                            tempicon.Size = Vector2.new(tempimage.w, tempimage.h)
                                        end
                                        setwepicons[curplayer] = wepname
                                    end
                                   
                                end

                                -- if menu.options["Visuals"][GroupBox]["Distance"][1] then
                                --     --debug.profilebegin("renderVisuals Player ESP Render Distance " .. playername)

                                --     local disttext = allesp[4][3][curplayer]

                                --     disttext.Text = tostring(distance) .. "m"
                                --     disttext.Visible = true
                                --     disttext.Position = Vector2.new(
                                --         boxPosition.x + boxSize.x * 0.5,
                                --         boxPosition.y + boxSize.y + spoty
                                --     )

                                --     --debug.profileend("renderVisuals Player ESP Render Distance " .. playername)
                                -- end

                                if menu.options["Visuals"][GroupBox]["Skeleton"][1] then
                                    --debug.profilebegin("renderVisuals Player ESP Render Skeleton" .. playername)

                                    local torso = Camera:WorldToViewportPoint(player.Character.Torso.Position)
                                    for i = 1, #skelparts do
                                        local line = allesp[1][i][curplayer]

                                        local posie = Camera:WorldToViewportPoint(player.Character:FindFirstChild(skelparts[i]).Position)
                                        line.From = Vector2.new(posie.x, posie.y)
                                        line.To = Vector2.new(torso.x, torso.y)
                                        line.Visible = true
                                    end
                                    --debug.profileend("renderVisuals Player ESP Render Skeleton" .. playername)
                                end
                                --da colourz !!! :D 🔥🔥🔥🔥

                                if menu:GetVal("Visuals", "ESP Settings", "Highlight Priority") and table.find(menu.priority, playername) then
                                    allesp[4][1][curplayer].Color = priority_color
                                    allesp[4][1][curplayer].Transparency = priority_alpha * opacity_mult

                                    allesp[2][3][curplayer].Color = priority_color
                                    allesp[2][1][curplayer].Color = priority_color

                                    allesp[4][2][curplayer].Color = priority_color
                                    allesp[4][2][curplayer].Transparency = priority_alpha * opacity_mult

                                    for i = 1, #skelparts do
                                        local line = allesp[1][i][curplayer]
                                        line.Color = priority_color
                                        line.Transparency = priority_alpha * opacity_mult
                                    end
                                elseif menu:GetVal("Visuals", "ESP Settings", "Highlight Friends") and table.find(menu.friends, playername)
                                then
                                    allesp[4][1][curplayer].Color = friend_color
                                    allesp[4][1][curplayer].Transparency = friend_alpha * opacity_mult

                                    allesp[2][1][curplayer].Color = friend_color
                                    allesp[2][3][curplayer].Color = friend_color

                                    allesp[4][2][curplayer].Color = friend_color
                                    allesp[4][2][curplayer].Transparency = friend_alpha * opacity_mult

                                    for i = 1, #skelparts do
                                        local line = allesp[1][i][curplayer]
                                        line.Color = friend_color
                                        line.Transparency = friend_alpha * opacity_mult
                                    end
                                elseif menu:GetVal("Visuals", "ESP Settings", "Highlight Target") and (
                                        player == legitbot.target or player == ragebot.target
                                    )
                                then
                                    allesp[4][1][curplayer].Color = target_color
                                    allesp[4][1][curplayer].Transparency = target_alpha * opacity_mult

                                    allesp[2][3][curplayer].Color = target_color
                                    allesp[2][1][curplayer].Color = target_color

                                    allesp[4][2][curplayer].Color = target_color
                                    allesp[4][2][curplayer].Transparency = target_alpha * opacity_mult

                                    for i = 1, #skelparts do
                                        local line = allesp[1][i][curplayer]
                                        line.Color = target_color
                                        line.Transparency = target_alpha * opacity_mult
                                    end
                                else
                                    allesp[4][1][curplayer].Color = menu:GetVal("Visuals", GroupBox, "Name", COLOR, true) -- RGB(menu.options["Visuals"][GroupBox]["Name"][5][1][1], menu.options["Visuals"][GroupBox]["Name"][5][1][2], menu.options["Visuals"][GroupBox]["Name"][5][1][3])
                                    allesp[4][1][curplayer].Transparency = name_transparency

                                    allesp[2][3][curplayer].Color = menu:GetVal("Visuals", GroupBox, "Box", COLOR2, true)
                                    allesp[2][1][curplayer].Color = menu:GetVal("Visuals", GroupBox, "Box", COLOR1, true)

                                    allesp[4][2][curplayer].Color = menu:GetVal("Visuals", GroupBox, "Held Weapon", COLOR, true)
                                    allesp[4][2][curplayer].Transparency = menu:GetVal("Visuals", GroupBox, "Held Weapon", COLOR)[4] / 255 * opacity_mult

                                    for i = 1, #skelparts do
                                        local line = allesp[1][i][curplayer]
                                        line.Color = menu:GetVal("Visuals", GroupBox, "Skeleton", COLOR, true)
                                        line.Transparency = menu:GetVal("Visuals", GroupBox, "Skeleton", COLOR)[4] / 255 * opacity_mult
                                    end
                                end
                            elseif enemy and menu:GetVal("Visuals", "Enemy ESP", "Out of View")
                            then
                                local size = size
                                local big_size = big_size
                                --debug.profilebegin("renderVisuals Player ESP Render Out of View " .. playername)
                                local color = menu:GetVal("Visuals", "Enemy ESP", "Out of View", COLOR, true)
                                local color2 = bColor:Add(bColor:Mult(color, 0.2), 0.1)
                                if menu:GetVal("Visuals", "ESP Settings", "Highlight Priority") and table.find(menu.priority, playername)
                                then
                                    size *= 1.5
                                    big_size *= 1.5
                                    color = menu:GetVal(
                                            "Visuals",
                                            "ESP Settings",
                                            "Highlight Priority",
                                            COLOR,
                                            true
                                        )
                                    color2 = bColor:Mult(color, 0.6)
                                elseif menu:GetVal("Visuals", "ESP Settings", "Highlight Friends", COLOR) and table.find(menu.friends, playername)
                                then
                                    color = menu:GetVal(
                                            "Visuals",
                                            "ESP Settings",
                                            "Highlight Friends",
                                            COLOR,
                                            true
                                        )
                                    color2 = bColor:Mult(color, 0.6)
                                elseif menu:GetVal("Visuals", "ESP Settings", "Highlight Target") and (
                                        player == legitbot.target or player == ragebot.target
                                    )
                                then
                                    color = menu:GetVal(
                                        "Visuals",
                                        "ESP Settings",
                                        "Highlight Target",
                                        COLOR,
                                        true
                                    )
                                    color2 = bColor:Mult(color, 0.6)
                                end
                                for i = 1, 2 do
                                    local Tri = allesp[5][i][curplayer]

                                    local rootpartpos = player.Character.HumanoidRootPart.Position -- these HAVE to move now theres no way

                                    Tri.Visible = true

                                    local relativePos = Camera.CFrame:PointToObjectSpace(rootpartpos)
                                    local angle = math.atan2(-relativePos.y, relativePos.x)

                                    local distance = dot(relativePos.Unit, relativePos)
                                    local arrow_size = menu:GetVal("Visuals", "Enemy ESP", "Dynamic Arrow Size") and map(distance, 1, 100, big_size, size) or size
                                    arrow_size = arrow_size > big_size and big_size or arrow_size < size and size or arrow_size

                                    direction = Vector2.new(math.cos(angle), math.sin(angle))
                                    local pos
                                    if arrow_dist ~= 101 then
                                        pos = (
                                                direction * SCREEN_SIZE.x * arrow_dist / 200
                                            ) + (SCREEN_SIZE * 0.5)
                                    end
                                    if not pos or pos.y > SCREEN_SIZE.y - 5 or pos.y < 5 then
                                        pos = camera:AngleToEdge(angle, 5)
                                    end
                                    Tri.PointA = pos
                                    Tri.PointB = pos - bVector2:getRotate(direction, 0.5) * arrow_size
                                    Tri.PointC = pos - bVector2:getRotate(direction, -0.5) * arrow_size

                                    Tri.Color = i == 1 and color or color2
                                    Tri.Transparency = menu:GetVal("Visuals", "Enemy ESP", "Out of View", COLOR)[4] / 255 * opacity_mult
                                end
                                --debug.profileend("renderVisuals Player ESP Render Out of View " .. playername)
                            end
                        end
                    end
                    if menu:GetVal("Visuals", "Spawn", "Enemy Spawns") then
                        if client.spawns then
                            local spawns = client.spawns
                            for i = 1, #spawns do
                                local position, vis = Camera:WorldToViewportPoint(spawns[i].Position)
                                allesp[11][2][i].Position = Vector2.new(position.x, position.y)
                                allesp[11][2][i].Text = "spawn"
                                allesp[11][2][i].Center = true
                                allesp[11][2][i].Visible = vis
                                allesp[11][2][i].Transparency = menu:GetVal("Visuals", "Spawn", "Enemy Spawns", COLOR)[4]/255
                                allesp[11][2][i].Color = menu:GetVal("Visuals", "Spawn", "Enemy Spawns", COLOR, true)
                            end
                        end
                    end
                    --ANCHOR weapon esp
                    if menu:GetVal("Visuals", "Dropped ESP", "Weapon Names") or menu:GetVal("Visuals", "Dropped ESP", "Weapon Ammo") or menu:GetVal("Visuals", "Dropped ESP", "Weapon Icons") then
                        --debug.profilebegin("renderVisuals Dropped 1ESP")
                        local gunnum = 0
                        local dropped = workspace.Ignore.GunDrop:GetChildren()
                        local wepadd = menu:GetVal("Visuals", "Dropped ESP", "Weapon Names")
                        for k = 1, #dropped do
                            local v = dropped[k]
                            if not client then
                                return
                            end
                            if v.Name == "Dropped" then
                                local slot = v:FindFirstChild("Slot1")
                                if not slot then
                                    continue
                                end
                                local gunpos = slot.Position
                                local gun_dist = (gunpos - client.cam.cframe.p).Magnitude
                                if gun_dist < 80 then
                                    local hasgun = false
                                    local gunpos2d, gun_on_screen = workspace.CurrentCamera:WorldToScreenPoint(gunpos)
                                    local children = v:GetChildren()
                                    for k1 = 1, #children do
                                        local v1 = children[k1]
                                        if tostring(v1) == "Gun" then
                                            hasgun = true
                                            break
                                        end
                                    end

                                    if gun_on_screen and gunnum <= 50 and hasgun then
                                        gunnum = gunnum + 1
                                        local gunclearness = 1
                                        if gun_dist >= 50 then
                                            local closedist = gun_dist - 50
                                            gunclearness = 1 - (1 * closedist / 30)
                                        end

                                        if menu:GetVal("Visuals", "Dropped ESP", "Weapon Icons") then
                                           
                                            local tempimage = NameToIcon(v.Gun.Value)

                                            if tempimage ~= nil then

                                                wepesp[3][gunnum].Data = tempimage.data
                                                wepesp[3][gunnum].Size = Vector2.new(tempimage.w, tempimage.h)
                                                wepesp[3][gunnum].Visible = true

                                                wepesp[3][gunnum].Position = wepadd and Vector2.new(math.floor(gunpos2d.x - tempimage.w/2), math.ceil(gunpos2d.y + (tempimage.h - 10))) or Vector2.new(math.floor(gunpos2d.x - tempimage.w/2), math.ceil(gunpos2d.y + (tempimage.h)))
                                                wepesp[3][gunnum].Transparency = menu:GetVal("Visuals", "Dropped ESP", "Weapon Names", COLOR2)[4] * gunclearness / 255
                                            elseif not menu:GetVal("Visuals", "Dropped ESP", "Weapon Names") then
                                                if client.logic.currentgun and client.logic.currentgun and client.logic.currentgun.data and v.Gun.Value == client.logic.currentgun.data.name
                                                then
                                                    wepesp[1][gunnum].Color = menu:GetVal(
                                                        "Visuals",
                                                        "Dropped ESP",
                                                        "Weapon Names",
                                                        COLOR1,
                                                        true
                                                    )
                                                    wepesp[1][gunnum].Transparency = menu:GetVal(
                                                            "Visuals",
                                                            "Dropped ESP",
                                                            "Weapon Names",
                                                            COLOR1
                                                        )[4]  * gunclearness / 255
                                                else
                                                    wepesp[1][gunnum].Color = menu:GetVal(
                                                        "Visuals",
                                                        "Dropped ESP",
                                                        "Weapon Names",
                                                        COLOR2,
                                                        true
                                                    )
                                                    wepesp[1][gunnum].Transparency = menu:GetVal(
                                                            "Visuals",
                                                            "Dropped ESP",
                                                            "Weapon Names",
                                                            COLOR2
                                                        )[4]  * gunclearness / 255
                                                end
                                                wepesp[1][gunnum].Text = v.Gun.Value
                                                wepesp[1][gunnum].Visible = true
                                                wepesp[1][gunnum].Position = Vector2.new(math.floor(gunpos2d.x), math.floor(gunpos2d.y + 25))
                                            end
                                            --menu:GetVal("Visuals", "Dropped ESP", "Weapon Names", COLOR1)[4]  * gunclearness / 255
                                        end

                                        if menu:GetVal("Visuals", "Dropped ESP", "Weapon Names") then
                                            if client.logic.currentgun and client.logic.currentgun and client.logic.currentgun.data and v.Gun.Value == client.logic.currentgun.data.name
                                            then
                                                wepesp[1][gunnum].Color = menu:GetVal(
                                                    "Visuals",
                                                    "Dropped ESP",
                                                    "Weapon Names",
                                                    COLOR1,
                                                    true
                                                )
                                                wepesp[1][gunnum].Transparency = menu:GetVal(
                                                        "Visuals",
                                                        "Dropped ESP",
                                                        "Weapon Names",
                                                        COLOR1
                                                    )[4]  * gunclearness / 255
                                            else
                                                wepesp[1][gunnum].Color = menu:GetVal(
                                                    "Visuals",
                                                    "Dropped ESP",
                                                    "Weapon Names",
                                                    COLOR2,
                                                    true
                                                )
                                                wepesp[1][gunnum].Transparency = menu:GetVal(
                                                        "Visuals",
                                                        "Dropped ESP",
                                                        "Weapon Names",
                                                        COLOR2
                                                    )[4]  * gunclearness / 255
                                            end
                                            wepesp[1][gunnum].Text = v.Gun.Value
                                            wepesp[1][gunnum].Visible = true
                                            wepesp[1][gunnum].Position = Vector2.new(math.floor(gunpos2d.x), math.floor(gunpos2d.y + 25))
                                        end
                                        if menu:GetVal("Visuals", "Dropped ESP", "Weapon Ammo") then
                                            if v:FindFirstChild("Spare") then
                                                wepesp[2][gunnum].Text = "[ " .. tostring(v.Spare.Value) .. " ]"
                                            end
                                            wepesp[2][gunnum].Color = menu:GetVal(
                                                    "Visuals",
                                                    "Dropped ESP",
                                                    "Weapon Ammo",
                                                    COLOR,
                                                    true
                                                )
                                            wepesp[2][gunnum].Transparency = menu:GetVal("Visuals", "Dropped ESP", "Weapon Ammo", COLOR)[4]  * gunclearness / 255
                                            wepesp[2][gunnum].Visible = true
                                            wepesp[2][gunnum].Position = Vector2.new(math.floor(gunpos2d.x), math.floor(gunpos2d.y + 36))
                                        end
                                    end
                                end
                            end
                        end
                        --debug.profileend("renderVisuals Dropped ESP")
                    end
                    if menu:GetVal("Visuals", "FOV", "Enabled") then -- fov circles
                        local fovcircles = allesp[9]
                        if menu:GetVal("Visuals", "FOV", "Aim Assist") then
                            local col = menu:GetVal("Visuals", "FOV", "Aim Assist", COLOR, true)
                            local transparency = menu:GetVal("Visuals", "FOV", "Aim Assist", COLOR)[4] / 255
                            for i = 1, 2 do
                                local circle = fovcircles[1][i]
                                circle.Color = i == 2 and col or Color3.new(0, 0, 0)
                                circle.Transparency = transparency / (i == 1 and 2 or 1)
                                circle.Thickness = i == 2 and 1 or 3
                                local fov = menu:GetVal("Legit", "Aim Assist", "Aimbot FOV")
                                if menu:GetVal("Legit", "Aim Assist", "Dynamic FOV") then
                                    fov = Camera.FieldOfView / client.char.unaimedfov * fov
                                end
                                circle.Radius = fov / workspace.CurrentCamera.FieldOfView * SCREEN_SIZE.y
                                circle.Visible = true
                                circle.Position = SCREEN_SIZE / 2
                            end
                        else
                            for i = 1, 2 do
                                local circle = fovcircles[1][i]
                                circle.Visible = false
                            end
                        end
                        if menu:GetVal("Visuals", "FOV", "Aim Assist Deadzone") then
                            local col = menu:GetVal("Visuals", "FOV", "Aim Assist Deadzone", COLOR, true)
                            local transparency = menu:GetVal("Visuals", "FOV", "Aim Assist Deadzone", COLOR)[4] / 255
                            for i = 1, 2 do
                                local circle = fovcircles[2][i]
                                circle.Color = i == 2 and col or Color3.new(0, 0, 0)
                                circle.Transparency = transparency / (i == 1 and 2 or 1)
                                circle.Thickness = i == 2 and 1 or 3
                                local fov = menu:GetVal("Legit", "Aim Assist", "Deadzone FOV")
                                if menu:GetVal("Legit", "Aim Assist", "Dynamic FOV") then
                                    fov = Camera.FieldOfView / client.char.unaimedfov * fov
                                end
                                circle.Radius = fov / workspace.CurrentCamera.FieldOfView  * SCREEN_SIZE.y
                                circle.Position = SCREEN_SIZE / 2
                                circle.Visible = true
                            end
                        else
                            for i = 1, 2 do
                                local circle = fovcircles[2][i]
                                circle.Visible = false
                            end
                        end
                        if menu:GetVal("Visuals", "FOV", "Bullet Redirection") then
                            local col = menu:GetVal("Visuals", "FOV", "Bullet Redirection", COLOR, true)
                            local transparency = menu:GetVal("Visuals", "FOV", "Bullet Redirection", COLOR)[4] / 255
                            for i = 1, 2 do
                                local circle = fovcircles[3][i]
                                circle.Color = i == 2 and col or Color3.new(0, 0, 0)
                                circle.Transparency = transparency / (i == 1 and 2 or 1)
                                circle.Thickness = i == 2 and 1 or 3
                                local fov = menu:GetVal("Legit", "Bullet Redirection", "Silent Aim FOV")
                                if menu:GetVal("Legit", "Aim Assist", "Dynamic FOV") then
                                    fov = Camera.FieldOfView / client.char.unaimedfov * fov
                                end
                                circle.Radius = fov / workspace.CurrentCamera.FieldOfView  * SCREEN_SIZE.y
                                circle.Position = SCREEN_SIZE / 2
                                circle.Visible = true
                            end
                        else
                            for i = 1, 2 do
                                local circle = fovcircles[3][i]
                                circle.Visible = false
                            end
                        end
                        local circle = fovcircles[4]
                        if menu:GetVal("Visuals", "FOV", "Ragebot") then
                            local col = menu:GetVal("Visuals", "FOV", "Ragebot", COLOR, true)
                            local transparency = menu:GetVal("Visuals", "FOV", "Ragebot", COLOR)[4] / 255
                            for i = 1, 2 do
                                local circle = fovcircles[4][i]
                                circle.Color = i == 2 and col or Color3.new(0, 0, 0)
                                circle.Transparency = transparency / (i == 1 and 2 or 1)
                                circle.Thickness = i == 2 and 1 or 3
                                circle.Position = SCREEN_SIZE / 2
                                circle.Radius = menu:GetVal("Rage", "Aimbot", "Aimbot FOV") / workspace.CurrentCamera.FieldOfView  * SCREEN_SIZE.y
                                circle.Visible = true
                            end
                        else
                            for i = 1, 2 do
                                local circle = fovcircles[4][i]
                                circle.Visible = false
                            end
                        end
                    end

                    --debug.profilebegin("renderVisuals Dropped ESP Grenade Warning")
                    if menu:GetVal("Visuals", "Dropped ESP", "Grenade Warning") then
                        local health = client.char:gethealth()
                        local color1 = menu:GetVal("Visuals", "Dropped ESP", "Grenade Warning", COLOR, true)
                        local color2 = RGB(
                            menu:GetVal("Visuals", "Dropped ESP", "Grenade Warning", COLOR)[1] - 20,
                            menu:GetVal("Visuals", "Dropped ESP", "Grenade Warning", COLOR)[2] - 20,
                            menu:GetVal("Visuals", "Dropped ESP", "Grenade Warning", COLOR)[3] - 20
                        )
                        for i = 1, #menu.activenades do
                            local nade = menu.activenades[i]
                            local headpos = client.char.alive and client.cam.cframe.p or Vector3.new()
                            local delta = (nade.blowupat - headpos)
                            local nade_dist = dot(delta.Unit, delta)
                            local nade_percent = (tick() - nade.start) / (nade.blowuptick - nade.start)

                            if nade_dist <= 80 then
                                local nadepos, nade_on_screen = workspace.CurrentCamera:WorldToScreenPoint(Vector3.new(nade.blowupat.x, nade.blowupat.y, nade.blowupat.z))

                                if not nade_on_screen or nadepos.x > SCREEN_SIZE.x - 36 or nadepos.y > SCREEN_SIZE.y - 72 then
                                    local relativePos = Camera.CFrame:PointToObjectSpace(nade.blowupat)
                                    local angle = math.atan2(-relativePos.y, relativePos.x)
                                    local ox = math.cos(angle)
                                    local oy = math.sin(angle)
                                    local slope = oy / ox

                                    local h_edge = SCREEN_SIZE.x - 36
                                    local v_edge = SCREEN_SIZE.y - 72
                                    if oy < 0 then
                                        v_edge = 0
                                    end
                                    if ox < 0 then
                                        h_edge = 36
                                    end
                                    local y = (slope * h_edge) + (SCREEN_SIZE.y / 2) - slope * (SCREEN_SIZE.x / 2)
                                    if y > 0 and y < SCREEN_SIZE.y - 72 then
                                        nadepos = Vector2.new(h_edge, y)
                                    else
                                        nadepos = Vector2.new(
                                            (v_edge - SCREEN_SIZE.y / 2 + slope * (SCREEN_SIZE.x / 2)) / slope,
                                            v_edge
                                        )
                                    end
                                end
                                --
                                nade_esp[1][i].Visible = true
                                nade_esp[1][i].Position = Vector2.new(math.floor(nadepos.x), math.floor(nadepos.y + 36))

                                nade_esp[2][i].Visible = true
                                nade_esp[2][i].Position = Vector2.new(math.floor(nadepos.x), math.floor(nadepos.y + 36))

                                nade_esp[4][i].Visible = true
                                nade_esp[4][i].Position = Vector2.new(math.floor(nadepos.x) - 10, math.floor(nadepos.y + 10))

                                nade_esp[3][i].Visible = true
                                nade_esp[3][i].Position = Vector2.new(math.floor(nadepos.x), math.floor(nadepos.y + 36))

                                local d0 = 250 -- max damage
                                local d1 = 15 -- min damage
                                local r0 = 8 -- maximum range before the damage starts dropping off due to distance
                                local r1 = 30 -- minimum range i think idk

                                local damage = nade_dist < r0 and d0 or nade_dist < r1 and (d1 - d0) / (r1 - r0) * (nade_dist - r0) + d0 or 0

                                local wall
                                if damage > 0 then
                                    wall = workspace:FindPartOnRayWithWhitelist(
                                        Ray.new(headpos, (nade.blowupat - headpos)),
                                        client.roundsystem.raycastwhitelist
                                    )
                                    if wall then
                                        damage = 0
                                    end
                                end

                                local str = damage == 0 and "Safe" or damage >= health and "LETHAL" or string.format("-%d hp", damage)
                                nade_esp[3][i].Text = str

                                nade_esp[1][i].Color = ColorRange(damage, {
                                    [1] = { start = 15, color = RGB(20, 20, 20) },
                                    [2] = { start = health, color = RGB(150, 20, 20) },
                                })

                                nade_esp[2][i].Color = ColorRange(damage, {
                                    [1] = { start = 15, color = RGB(50, 50, 50) },
                                    [2] = { start = health, color = RGB(220, 20, 20) },
                                })

                                nade_esp[5][i].Visible = true
                                nade_esp[5][i].Position = Vector2.new(math.floor(nadepos.x) - 16, math.floor(nadepos.y + 50))

                                nade_esp[6][i].Visible = true
                                nade_esp[6][i].Position = Vector2.new(math.floor(nadepos.x) - 15, math.floor(nadepos.y + 51))

                                nade_esp[7][i].Visible = true
                                nade_esp[7][i].Size = Vector2.new(30 * (1 - nade_percent), 2)
                                nade_esp[7][i].Position = Vector2.new(math.floor(nadepos.x) - 15, math.floor(nadepos.y + 51))
                                nade_esp[7][i].Color = color1

                                nade_esp[8][i].Visible = true
                                nade_esp[8][i].Size = Vector2.new(30 * (1 - nade_percent), 2)
                                nade_esp[8][i].Position = Vector2.new(math.floor(nadepos.x) - 15, math.floor(nadepos.y + 53))
                                nade_esp[8][i].Color = color2

                                local tranz = 1
                                if nade_dist >= 50 then
                                    local closedist = nade_dist - 50
                                    tranz = 1 - (1 * closedist / 30)
                                end

                                for j = 1, #nade_esp do
                                    nade_esp[j][i].Transparency = tranz
                                end
                            end
                        end
                    end

                    --debug.profileend("renderVisuals Dropped ESP Grenade Warning")

                    --debug.profilebegin("renderVisuals Local Visuals")
                    misc.setvis = misc.setvis or {} -- this is for caching the weapons and shit so that when you switche weapons it will execute this code :3
                    -- hand chams and such
                    if not client then
                        return
                    end
                    local vm = workspace.Camera:GetChildren()
                    local armcham = menu:GetVal("Visuals", "Local", "Arm Chams")
                    local armmaterial = menu:GetVal("Visuals", "Local", "Arm Material")

                    for k, v in pairs(vm) do
                        if v.Name == "Left Arm" or v.Name == "Right Arm" then
                            for k1, v1 in pairs(v:GetChildren()) do
                                if armcham then
                                    v1.Color = menu:GetVal("Visuals", "Local", "Arm Chams", COLOR2, true)
                                    v1.Material = mats[armmaterial]
                                end
                                if v1.Transparency ~= 1 then
                                    if armcham then
                                        if not client.fakecharacter then
                                           
                                            v1.Transparency = 0.999999 + (
                                                    menu:GetVal("Visuals", "Local", "Arm Chams", COLOR2)[4] / -255
                                                )
                                        else
                                            v1.Transparency = 0.999999
                                        end
                                    else
                                        if not client.fakecharacter then
                                            v1.Transparency = 0
                                        else
                                            v1.Transparency = 0.999999
                                        end
                                    end
                                end
                                if v1.ClassName == "MeshPart" or v1.Name == "Sleeve" then
                                    if armcham then
                                        v1.Color = menu:GetVal("Visuals", "Local", "Arm Chams", COLOR1, true)
                                    end
                                    if v1.Transparency ~= 1 then
                                        if armcham then
                                            if not client.fakecharacter then
                                                v1.Transparency = 0.999999 + (
                                                        menu:GetVal("Visuals", "Local", "Arm Chams", COLOR1)[4] / -255
                                                    )
                                            else
                                                v1.Transparency = 0.999999
                                            end
                                        else
                                            if not client.fakecharacter then
                                                v1.Transparency = 0
                                            else
                                                v1.Transparency = 0.999999
                                            end
                                        end
                                    end
                                    if armcham then
                                        if v1.TextureID and tostring(material) ~= "ForceField" then
                                            v1.TextureID = ""
                                        else
                                            v1.TextureID = "rbxassetid://2163189692"
                                        end
                                        v1:ClearAllChildren()
                                    end
                                end
                            end
                        end
                    end
                    local wepcham = menu:GetVal("Visuals", "Local", "Weapon Chams")

                    for k, v in pairs(vm) do
                        if v.Name ~= "Left Arm" and v.Name ~= "Right Arm" and v.Name ~= "FRAG" then
                            for k1, v1 in pairs(v:GetChildren()) do
                                if wepcham then
                                    v1.Color = menu:GetVal("Visuals", "Local", "Weapon Chams", COLOR1, true)
                                end
                                if v1.Transparency ~= 1 then
                                    if wepcham then
                                        if not client.fakecharacter then
                                            v1.Transparency = 0.999999 + (
                                                    menu:GetVal("Visuals", "Local", "Weapon Chams", COLOR1)[4] / -255
                                                )
                                        else
                                            v1.Transparency = 0.999999
                                        end
                                    else
                                        if not client.fakecharacter then
                                            v1.Transparency = client.logic.currentgun.transparencydata and client.logic.currentgun.transparencydata[v1] or 0
                                        else
                                            v1.Transparency = 0.999999
                                        end
                                    end
                                end
                                -- if v1.Transparency ~= 1 then
                                --     v1.Transparency = 0.99999 + (menu:GetVal("Visuals", "Local", "Weapon Chams", COLOR1)[4]/-255) --- it works shut up + i don't wanna make a fucking table for this shit
                                -- end
                                if menu:GetVal("Visuals", "Local", "Remove Weapon Skin") and wepcham then
                                    for i2, v2 in pairs(v1:GetChildren()) do
                                        if v2.ClassName == "Texture" or v2.ClassName == "Decal" then
                                            v2:Destroy()
                                        end
                                    end
                                end

                                local mat = mats[menu:GetVal("Visuals", "Local", "Weapon Material")]
                                if wepcham then
                                    v1.Material = mat
                                end

                                if v1:IsA("UnionOperation") and wepcham then
                                    v1.UsePartColor = true
                                end

                                if v1.ClassName == "MeshPart" and wepcham then
                                    v1.TextureID = mat == "ForceField" and "rbxassetid://5843010904" or ""
                                end

                                if v1.Name == "LaserLight" and wepcham then
                                    local transparency = 1 + (
                                            menu:GetVal("Visuals", "Local", "Weapon Chams", COLOR2)[4] / -255
                                        )
                                    v1.Color = menu:GetVal("Visuals", "Local", "Weapon Chams", COLOR2, true)
                                    v1.Transparency = (transparency / 2) + 0.5
                                    v1.Material = "ForceField"
                                elseif v1.Name == "SightMark" and wepcham then
                                    if v1:FindFirstChild("SurfaceGui") then
                                        local color = menu:GetVal("Visuals", "Local", "Weapon Chams", COLOR2, true)
                                        local transparency = 1 + (
                                                menu:GetVal("Visuals", "Local", "Weapon Chams", COLOR2)[4] / -255
                                            )
                                        v1.SurfaceGui.Border.Scope.ImageColor3 = color
                                        v1.SurfaceGui.Border.Scope.ImageTransparency = transparency
                                        if v1.SurfaceGui:FindFirstChild("Margins") then
                                            v1.SurfaceGui.Margins.BackgroundColor3 = color
                                            v1.SurfaceGui.Margins.ImageColor3 = color
                                            v1.SurfaceGui.Margins.ImageTransparency = (transparency / 5) + 0.7
                                        elseif v1.SurfaceGui:FindFirstChild("Border") then
                                            v1.SurfaceGui.Border.BackgroundColor3 = color
                                            v1.SurfaceGui.Border.ImageColor3 = color
                                            v1.SurfaceGui.Border.ImageTransparency = 1
                                        end
                                    end
                                end
                            end
                        end
                    end
                    --debug.profileend("renderVisuals Local Visuals")
                end
                if menu:GetVal("Visuals", "Keybinds", "Enabled") then-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                    local texts = allesp[10]-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                    local listsizes = menu:GetVal("Visuals", "Keybinds", "Use List Sizes")-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                    local posy = math.ceil(SCREEN_SIZE.y * menu:GetVal("Visuals", "Keybinds", "Keybinds List Y") / 100)-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                    local margin = posy-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                    local posx = math.ceil(math.max(menu.stat_menu and 330 or 10, SCREEN_SIZE.x * menu:GetVal("Visuals", "Keybinds", "Keybinds List X") / 100))-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                    local col = menu:GetVal("Visuals", "Keybinds", "Enabled", COLOR, true)-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                    local transparency = menu:GetVal("Visuals", "Keybinds", "Enabled", COLOR)[4] / 255-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                    local newtexts = {}-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                    for i = 1, #menu.keybinds do-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        local keybind = menu.keybinds[i]-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        local box1 = texts[1][i]-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        local box = texts[2][i]-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        local box2 = texts[3][i]-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        local box3 = texts[5][i]-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        local text = texts[4][i]-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        if keybind and keybind[1] and menu:GetVal(keybind[4], keybind[3], keybind[2]) and menu:GetKey(keybind[4], keybind[3], keybind[2])-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        then-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                            table.insert(newtexts, keybind[3] .. ": " .. keybind[2])-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        end-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        text.Visible = false-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        if box then-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                            box.Visible = false-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        end-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        box1.Visible = false-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        box2.Visible = false-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        box3.Visible = false-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                    end-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                    table.sort(newtexts, function(s, s1)-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        return #s > #s1-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                    end) -- i hate this shit-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                    table.insert(newtexts, 1, "Keybinds")-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                    local maxwidth = Vector2.new(0, 0)-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                    local maxwidth2 = Vector2.new(0, 0)-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                    for i = 1, #newtexts do-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        local text = texts[4][i]-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        text.Center = false-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        text.Text = newtexts[i]-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        if i <= 1 then-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                            local newthing = Vector2.new(text.TextBounds.x + 4, text.TextBounds.y)-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                            if newthing.x > maxwidth.x then-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                                maxwidth = newthing-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                            end-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        end-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        if i <= 2 then-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                            local newthing = Vector2.new(text.TextBounds.x + 4, text.TextBounds.y)-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                            if newthing.x > maxwidth2.x then-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                                maxwidth2 = newthing - maxwidth-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                            end-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        end-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                    end-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                    for i = 1, #newtexts do-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        local box1 = texts[1][i]-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        local box3 = texts[5][i]-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        local box = texts[3][i]-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        local text = texts[4][i]-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        text.Position = Vector2.new(posx + 2, margin)-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        text.Color = i ~= 1 and col or Color3.new(1, 1, 1)-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        text.Transparency = transparency-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        text.Visible = true-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        box.Position = Vector2.new(posx, margin)-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        box.Visible = true-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        box1.Position = Vector2.new(posx - 1, margin - 3)-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        box1.Visible = true-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        box1.Color = Color3.new(0, 0, 0)-- THIS IS FUCKING STUPID
                        box3.Visible = true-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        box3.Color = Color3.new(0, 0, 0)-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        box3.Transparency = 0.4-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        if listsizes then-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                            local w = 8
                            local h = 15
                            if i == 1 then
                                h = 9 * #newtexts
                                w = 8
                            end
                            if i == #newtexts then
                                h += 7
                            end
                            local x = posx - 2
                            local y = margin - 4
                            -- if i == 2 then
                            --     x += 4
                            --     w -= 4
                            -- end
                            box.Size = text.TextBounds + Vector2.new(4, 3)-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                            box1.Size = text.TextBounds + Vector2.new(6, 7)-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                            box3.Size = Vector2.new(text.TextBounds.x + w, h) -- this is fucking stupid i hate this. why did i do this-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                            box3.Position = Vector2.new(x, y) -- this is fucking stupid i hate this. why did i do this-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        else-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                            box.Size = maxwidth + maxwidth2 + Vector2.new(0, 3)-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                            box1.Size = maxwidth + maxwidth2 + Vector2.new(2, 7)-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                            box3.Size = maxwidth + maxwidth2 + Vector2.new(4, (i == #newtexts and i == 1) and 9 or i == #newtexts and 4 or i == 1 and 6 or 3) -- this is fucking stupid i hate this. why did i do this-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                            box3.Position = Vector2.new(posx - 2, (i == 1) and margin - 4 or i == #newtexts and margin + 1 or margin) -- this is fucking stupid i hate this. why did i do this-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        end-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        margin += 15-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                    end-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                    for i = 1, 15 do-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        local box = texts[2][i] -- this is fucking stupid i hate this. why did i do this-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        box.Position = Vector2.new(posx, posy + i - 1) -- this is fucking stupid i hate this. why did i do this-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        box.Size = Vector2.new(maxwidth.x + ((not listsizes) and maxwidth2.x or 0), 1) -- this is fucking stupid i hate this. why did i do this-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        box.Visible = true -- this is fucking stupid i hate this. why did i do this-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                    end-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                    for i = 1, 2 do-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        local k = i + 15 -- this is fucking stupid i hate this. why did i do this-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        local box = texts[2][k] -- this is fucking stupid i hate this. why did i do this-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        local color = (menu:GetVal("Settings", "Cheat Settings", "Menu Accent") and menu:GetVal("Settings", "Cheat Settings", "Menu Accent", COLOR, true) or Color3.fromRGB(127, 72, 163))-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        color = i == 1 and color or Color3.fromRGB(color.R * 255 - 40, color.G * 255 - 40, color.B * 255 - 40) -- super shit-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        box.Color = color -- this is fucking stupid i hate this. why did i do this-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        box.Position = Vector2.new(posx, posy + i - 3) -- this is fucking stupid i hate this. why did i do this-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        box.Size = Vector2.new(maxwidth.x+((not listsizes) and maxwidth2.x or 0), 1) -- this is fucking stupid i hate this. why did i do this-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        box.Visible = true -- this is fucking stupid i hate this. why did i do this-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                    end-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                    if listsizes then-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        for i = 1, 2 do -- this is fucking stupid i hate this. why did i do this-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                            local k = i + 17 -- this is fucking stupid i hate this. why did i do this-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                            local box = texts[2][k] -- this is fucking stupid i hate this. why did i do this-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                            local color = (menu:GetVal("Settings", "Cheat Settings", "Menu Accent") and menu:GetVal("Settings", "Cheat Settings", "Menu Accent", COLOR, true) or Color3.fromRGB(127, 72, 163))-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                            color = i == 1 and color or Color3.fromRGB(color.R * 255 - 40, color.G * 255 - 40, color.B * 255 - 40) -- super shit-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                            box.Color = color -- this is fucking stupid i hate this. why did i do this-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                            box.Position = Vector2.new(posx+maxwidth.x + 1, posy + i + 12) -- this is fucking stupid i hate this. why did i do this-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                            box.Size = Vector2.new(maxwidth2.x - 1, 1) -- this is fucking stupid i hate this. why did i do this-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                            box.Visible = maxwidth2.x ~= 0 -- this is fucking stupid i hate this. why did i do this-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                        end-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                    end-- THIS IS FUCKING STUPID I HATE THIS. WHY DID I DO THIS
                end
                --debug.profileend("renderVisuals Main")
                --debug.profilebegin("renderVisuals No Scope")
                do -- no scope pasted from v1 lol
                    local gui = LOCAL_PLAYER.PlayerGui
                    local frame = gui.MainGui.ScopeFrame
                    if menu:GetVal("Visuals", "Camera Visuals", "No Scope Border") and frame then
                        local sightRear = frame:FindFirstChild("SightRear")
                        if sightRear then
                            local children = sightRear:GetChildren()
                            for i = 1, #children do
                                local thing = children[i]
                                if thing.ClassName == "Frame" then
                                    thing.Visible = false
                                end
                            end
                            frame.SightFront.Visible = false
                            sightRear.ImageTransparency = 1
                        end
                    elseif frame then
                        if sightRear then
                            local children = sightRear:GetChildren()
                            for i = 1, #children do
                                local thing = children[i]
                                if thing.ClassName == "Frame" then
                                    thing.Visible = true
                                end
                            end
                            frame.SightFront.Visible = true
                            sightRear.ImageTransparency = 0
                        end
                    end
                end
                --debug.profileend("renderVisuals No Scope")
            end

            menu.connections.deadbodychildadded = workspace.Ignore.DeadBody.ChildAdded:Connect(function(newchild)
                if menu:GetVal("Visuals", "Misc", "Ragdoll Chams") then
                    local children = newchild:GetChildren()
                    for i = 1, #children do
                        local curvalue = children[i]

                        if not curvalue:IsA("Model") and curvalue.Name ~= "Humanoid" then
                            matname = mats[menu:GetVal("Visuals", "Misc", "Ragdoll Material")]

                            curvalue.Material = Enum.Material[matname]

                            curvalue.Color = menu:GetVal("Visuals", "Misc", "Ragdoll Chams", COLOR, true)
                            local vertexcolor = Vector3.new(curvalue.Color.R, curvalue.Color.G, curvalue.Color.B)
                            local mesh = curvalue:FindFirstChild("Mesh")
                            if mesh then
                                mesh.VertexColor = vertexcolor -- color da texture baby  ! ! ! ! ! 👶👶
                                -- DA BABY????? WTF
                            end

                            if curvalue:IsA("Pants") then
                                curvalue:Destroy()
                            end

                            local pant = curvalue:FindFirstChild("Pant")
                            if pant then
                                pant:Destroy()
                            end
                            if mesh then
                                mesh:Destroy()
                            end
                        end
                    end
                end
            end)

            menu.connections.dropweaponadded = workspace.Ignore.GunDrop.ChildAdded:Connect(function(newchild)
                if menu:GetVal("Visuals", "Dropped ESP", "Dropped Weapon Chams") then
                    newchild:WaitForChild("Slot1", 1)
                    local children = newchild:GetChildren()

                    for i = 1, #children do
                        local curvalue = children[i]

                        if not curvalue:IsA("Model") and curvalue.Name ~= "Humanoid" and curvalue.ClassName == "Part"
                        then
                            curvalue.Color = menu:GetVal("Visuals", "Dropped ESP", "Dropped Weapon Chams", COLOR, true)
                            local vertexcolor = Vector3.new(curvalue.Color.R, curvalue.Color.G, curvalue.Color.B)
                            local mesh = curvalue:FindFirstChild("Mesh")

                            if mesh then
                                mesh.VertexColor = vertexcolor
                            end
                            local texture = curvalue:FindFirstChild("Texture")
                            if texture then
                                texture:Destroy()
                            end
                        end
                    end
                end
            end)

            local chat_game = LOCAL_PLAYER.PlayerGui.ChatGame
            local chat_box = chat_game:FindFirstChild(TEXTBOX)
            local oldpos = nil

            local function pfkeycheck(actionName, inputState, inputObject)
                if INPUT_SERVICE:GetFocusedTextBox() then
                    return Enum.ContextActionResult.Sink
                end
                if INPUT_SERVICE:GetFocusedTextBox() or menu.textboxopen then
                    return Enum.ContextActionResult.Sink
                end
                if actionName == "BB PF check" then
                    if inputState == Enum.UserInputState.Begin then
                       
                        ------------------------------------------
                        ------------"TOGGLES AND SHIT"------------
                        ------------------------------------------

                        -- if menu:GetVal("Misc", "Exploits", "Fake Position") and client.char.alive and inputObject.KeyCode == menu:GetVal("Misc", "Exploits", "Fake Position", KEYBIND) then
                        --     keybindtoggles.superaa = not keybindtoggles.superaa
                        --     if keybindtoggles.superaa then
                        --         client.char.rootpart.CustomPhysicalProperties = PhysicalProperties.new(1000, 1000, 0, 1000, 1000)
                        --         CreateNotification("Fake Position has been enabled!")
                        --         client.superaastart = client.char.head.CFrame
                        --     else
                        --         client.char.rootpart.CustomPhysicalProperties = nil
                        --         client.char.rootpart.CFrame = client.superaastart
                        --         client.superaastart = nil
                        --     end
                        --     return Enum.ContextActionResult.Sink
                        -- end
                        -- if menu:GetVal("Rage", "Extra", "Teleport Up") and inputObject.KeyCode == menu:GetVal("Rage", "Extra", "Teleport Up", KEYBIND) and client.char.alive then
                        --     setfpscap(8)
                        --     wait()
                        --     client.char.rootpart.Position += Vector3.new(0, 38, 0) -- frame tp cheat tp up 38 studs wtf'
                        --     setfpscap(maxfps or 144)
                        --     wait()
                        --     return Enum.ContextActionResult.Sink
                        -- end
                        -- if menu:GetVal("Misc", "Exploits", "Noclip") and inputObject.KeyCode == menu:GetVal("Misc", "Exploits", "Noclip", KEYBIND) and client.char.alive then
                        --     local ray = Ray.new(client.char.head.Position, Vector3.new(0, -90, 0) * 20)

                        --     local hit, hitpos = workspace:FindPartOnRayWithWhitelist(ray, {workspace.Map})

                        --     if hit ~= nil and (not hit.CanCollide) or hit.Name == "Window" then
                        --         CreateNotification("Attempting to enable noclip... (you may die)")
                        --         keybindtoggles.fakebody = not keybindtoggles.fakebody
                        --         client.fakeoffset = 18
                        --     else
                        --         CreateNotification("Unable to noclip. Do this as soon as you spawn or over glass. (be as close to ground as possible for best results)")
                        --     end
                        --     return Enum.ContextActionResult.Sink
                        -- end
                        if shitting_my_pants == false then
                            if menu:GetVal("Misc", "Exploits", "Vertical Floor Clip") and inputObject.KeyCode == menu:GetVal("Misc", "Exploits", "Vertical Floor Clip", KEYBIND) and client.char.alive
                            then
                                local sign = not menu:modkeydown("alt", "left")
                                local forward = menu:modkeydown("shift", "left")
                                local ray = Ray.new(
                                    client.cam.cframe.Position,
                                    forward and Camera.CFrame.LookVector * 20 or Vector3.new(0, sign and -90 or 90, 0) * 20
                                )

                                local hit, hitpos = workspace:FindPartOnRayWithWhitelist(ray, { workspace.Map })

                                if hit ~= nil and (hit.CanCollide == false or hit.Name == "Window") then
                                    if forward then
                                        client.char.rootpart.Position += Camera.CFrame.LookVector * 18
                                        CreateNotification("Clipped forward!")
                                    else
                                        client.char.rootpart.Position += Vector3.new(0, sign and -18 or 18, 0)
                                        CreateNotification("Clipped " .. (sign and "down" or "up") .. "!")
                                    end
                                else
                                    CreateNotification(
                                        "Hit " .. (hit and (hit.Name .. tostring(hit.Material)) or "nothing") .. "."
                                    )
                                    CreateNotification("Unable to " .. (forward and "forward" or "floor") .. " clip!")
                                end
                                return Enum.ContextActionResult.Sink
                            end
                            local key = menu:GetVal("Misc", "Exploits", "Teleport", KEYBIND)
                            if key == inputObject.KeyCode then
                                if not menu:GetVal("Misc", "Exploits", "Bypass Speed Checks") then
                                    misc:Teleport()
                                    return Enum.ContextActionResult.Sink
                                end
                            end
                        end

                        if menu:GetVal("Misc", "Exploits", "Rapid Kill") and inputObject.KeyCode == menu:GetVal("Misc", "Exploits", "Rapid Kill", KEYBIND)
                        then
                            misc:RapidKill()
                            return Enum.ContextActionResult.Sink
                        end
                       
                        -- if menu:GetVal("Misc", "Exploits", "Invisibility") and inputObject.KeyCode == menu:GetVal("Misc", "Exploits", "Invisibility", KEYBIND)
                        -- then
                        --     local thing1, thing2 = misc:Invisibility()
                        --     return Enum.ContextActionResult.Sink
                        -- end
                    end
                    -----------------------------------------
                    ------------"HELD KEY ACTION"------------
                    -----------------------------------------
                    local keyflag = inputState == Enum.UserInputState.Begin
                   
                    if shitting_my_pants == false then

                        --[[ if menu:GetVal("Misc", "Exploits", "Super Invisibility") and inputObject.KeyCode == menu:GetVal("Misc", "Exploits", "Super Invisibility", KEYBIND) then
                    CreateNotification("Attempting to make you invisible, may need multiple attempts to fully work.")
                    for i = 1, 50 do
                        local num = i % 2 == 0 and 2 ^ 127 + 1 or -(2 ^ 127 + 1)
                        send(nil, "repupdate", client.cam.cframe.p, Vector3.new(num, num, num))
                    end
                    return Enum.ContextActionResult.Sink
                end]]
                        -- idk if this will even work anymore after the replication fixes
                    end

                    return Enum.ContextActionResult.Pass -- this will let any other keyboard action proceed
                end
            end

            game:service("ContextActionService"):BindAction("BB PF check", pfkeycheck, false, Enum.UserInputType.Keyboard)

            --[[ menu.connections.keycheck = INPUT_SERVICE.InputBegan:Connect(function(key)
                if chat_box.Active then return end
            end) ]]
            menu.connections.renderstepped_pf = game.RunService.RenderStepped:Connect(function(dt)
                if menu.lastActive ~= menu.windowactive then
                    setfpscap((menu.windowactive or menu:GetVal("Misc", "Exploits", "Crash Server")) and (getgenv().maxfps or 144) or 15)
                end
                if menu:GetVal("Misc", "Exploits", "Crash Server") then
                    for i = 1, menu:GetVal("Misc", "Exploits", "Crash Intensity") ^ 2 do
                        -- client.net:send("getrounddata")
                        -- client.net:send("changeclass", "Assault")
                        -- client.net:send("changeclass", "Support")
                        -- client.net:send("changeclass", "Recon")
                        -- local other = i % 2 == 0 and "FLASHLIGHT" or ""
                        -- local under = math.random() > 0.5 and "FLASHLIGHT" or ""
                        -- client.net:send("changeclass", "Scout")
                        -- client.net:send("changewep", "Primary", "COLT LMG")
                        -- client.net:send("changecamo","Primary","COLT LMG","Slot2","",{ TextureId = "", StudsPerTileU = 1, StudsPerTileV=1, OffsetStudsV=0, Transparency=0, OffsetStudsU=0 },{ DefaultColor=true, Material="SmoothPlastic", BrickColor="Black", Reflectance=0 })
                        -- client.net:send("changewep", "Primary", "MP5K")
                        client.net:send("changeatt", "Primary", "MP5K", { Underbarrel = nil, Other = nil, Ammo = nil, Barrel = nil, Optics = nil })
                        client.net:send("changeatt", "Primary", "MP5K", { Underbarrel = "",  Other = "",  Ammo = "",  Barrel = "",  Optics = ""  })
                    end
                    -- client.net:send("getunlockstats")
                end
                for index, time in next, ragebot.predictedDamageDealtRemovals do
                    if time and (tick() > time) then
                        ragebot.predictedDamageDealt[index] = 0
                        if not ragebot.predictedMisses[index] then
                            ragebot.predictedMisses[index] = 0
                        end
                        if not ragebot.predictedShotAt[index] then
                            ragebot.predictedShotAt[index] = 0
                        end
                        ragebot.predictedMisses[index] += ragebot.predictedShotAt[index]
                        ragebot.predictedShotAt[index] = 0
                        time = nil
                    end
                end

                MouseUnlockHook()
                -- debug.profilebegin("Main BB Loop")
                -- debug.profilebegin("Noclip Cheat check")
                if client.char.alive and menu:GetVal("Misc", "Exploits", "Rapid Kill") and menu:GetVal("Misc", "Exploits", "Auto Rapid Kill")

                then
                    if misc:RapidKill() then
                        client.net:send("forcereset")
                    end
                else
                    if menu:GetVal("Misc", "Extra", "Auto Respawn") then
                        client.menu:deploy() -- this is uber ass
                    end
                end
                if menu:GetVal("Rage", "Fake Lag", "Enabled") and menu:GetVal("Rage", "Fake Lag", "Manual Choke") then
                    if menu:GetKey("Rage", "Fake Lag", "Manual Choke") then
                        NETWORK:SetOutgoingKBPSLimit(menu:GetVal("Rage", "Fake Lag", "Fake Lag Amount"))
                        ragebot.choking = true
                    else
                        ragebot.choking = false
                        NETWORK:SetOutgoingKBPSLimit(0)
                    end
                end
                --debug.profileend("Noclip Cheat check")

                --debug.profilebegin("BB Rendering")
                do --rendering
                    renderVisuals(dt)
                    if menu.open then
                        setconstant(
                            client.cam.step,
                            11,
                            menu:GetVal("Visuals", "Camera Visuals", "No Camera Bob") and 0 or 0.5
                        )
                    end
                end
                --debug.profileend("BB Rendering")
                --debug.profilebegin("BB Legitbot")
                do --legitbot
                    legitbot:TriggerBot()
                    legitbot:MainLoop()
                end
                --debug.profileend("BB Legitbot")
                --debug.profilebegin("BB Misc.")
                do --misc
                    misc:MainLoop()
                    --debug.profilebegin("BB Ragebot KnifeBot")
                    ragebot:KnifeBotMain()
                    --debug.profileend("BB Ragebot KnifeBot")
                end
                --debug.profileend("BB Misc.")
                if not menu:GetVal("Rage", "Settings", "Aimbot Performance Mode") then
                    --debug.profilebegin("BB Ragebot (Non Performance)")
                    do --ragebot
                        ragebot:MainLoop()
                    end
                    --debug.profileend("BB Ragebot (Non Performance)")
                else
                    ragebot.flip = not ragebot.flip
                    if ragebot.flip then
                        ragebot:MainLoop()
                    end
                end

                if menu.spectating and not client.cam:isspectating() then
                    if client.menu.isdeployed() then
                        client.cam:setfirstpersoncam()
                    elseif client.cam.type ~= "menu" then
                        local lobby = workspace:FindFirstChild("MenuLobby")
                        if lobby then
                            client.cam:setmenucam(lobby)
                        else
                            --client.menu:loadmenu()
                        end
                    end
                    menu.spectating = false
                end

                --debug.profileend("Main BB Loop")
            end)

            client.nextchamsupdate = tick()

            menu.connections.heartbeat_pf = game.RunService.Heartbeat:Connect(function()
                local curTick = tick()
                for index, nade in pairs(menu.activenades) do
                    local nade_percent = (curTick - nade.start) / (nade.blowuptick - nade.start)
                    if nade_percent >= 1 then
                        if menu.activenades[index] == nade then
                            table.remove(menu.activenades, index)
                        end
                    end
                end

                if client.nextchamsupdate and curTick > client.nextchamsupdate or menu.open then
                    client.nextchamsupdate = curTick + 2
                    CreateThread(renderChams)
                    local enemyesp = menu.options["Visuals"]["Enemy ESP"]["Enabled"][1]

                    for player, nametagupdater in pairs(client.nametagupdaters) do
                        if not client.nametagupdaters_cache[player] then
                            client.nametagupdaters_cache[player] = nametagupdater
                        else
                            if enemyesp then
                                if client.nametagupdaters[player] == client.nametagupdaters_cache[player] then
                                    client.nametagupdaters[player] = function(...)
                                    end
                                    client.playernametags[player].Visible = false
                                end
                            else
                                if client.nametagupdaters[player] ~= client.nametagupdaters_cache[player] then
                                    client.nametagupdaters[player] = client.nametagupdaters_cache[player]
                                    client.playernametags[player].Visible = true
                                end
                            end
                        end
                    end
                end

                --debug.profilebegin("BB No Gun Bob or Sway")

                if client.char.alive then
                    for id, gun in next, client.loadedguns do
                        if not gun.fucku then
                            local upvs = getupvalues(gun.step)
                            local hopefullyfireroundupvs = getupvalues(upvs[#upvs])
                            for i = 1, #upvs do
                                local curv = upvs[i]
                                if type(curv) == "function" and getinfo(curv).name:match("bob") then
                                    --gun.fucku = true TODO ALAN FIX THIS IT FUCKING SUCKS - from alan
                                    setupvalue(client.loadedguns[id].step, i, function(...)
                                        return (menu and menu:GetVal("Visuals", "Camera Visuals", "No Gun Bob or Sway")) and CFrame.new() or curv(...) --TODO FIX THIS
                                    end)
                                end
                            end

                            for j = 1, #hopefullyfireroundupvs do
                                local curupvalue = hopefullyfireroundupvs[j]
                                if type(curupvalue) == "table" and rawget(curupvalue, "setpv") then
                                    local lol = {}
                                    local mt = getrawmetatable(curupvalue)
                                    local newindex = mt.__newindex
                                    local stuff = getupvalues(newindex)
                                    if type(stuff[6]) == "userdata" then
                                        setrawmetatable(lol, {
                                            __newindex = function(t, p, v)
                                                if menu then
                                                    if p == "a" and menu:GetVal("Misc", "Weapon Modifications", "Enabled")
                                                    then -- this might also break the recoil since idk if they might change this back to like p or v or whatever the fuck idk dick sukkin god
                                                        local recoil_scale = menu:GetVal(
                                                            "Misc",
                                                            "Weapon Modifications",
                                                            "Recoil Scale"
                                                        ) / 100
                                                        return newindex(t, p, v * recoil_scale)
                                                    else
                                                        return newindex(t, p, v)
                                                    end
                                                else
                                                    setrawmetatable(lol, mt)
                                                    return newindex(t, p, v)
                                                end
                                            end,
                                        })
                                        setupvalue(upvs[#upvs], j, lol)
                                    end
                                end
                            end
                        end
                    end

                    if client.logic.currentgun.knife and not client.logic.currentgun.fucku then
                        local upvs = getupvalues(client.logic.currentgun.step)
                        for i = 1, #upvs do
                            local curv = upvs[i]
                            if type(curv) == "function" and getinfo(curv).name:match("bob") then
                                client.logic.currentgun.fucku = true
                                setupvalue(client.logic.currentgun.step, i, function(...)
                                    return (menu and menu:GetVal("Visuals", "Camera Visuals", "No Gun Bob or Sway")) and CFrame.new() or curv(...)
                                end)
                            end
                        end
                    end
                end

                --debug.profileend()

                if menu:GetVal("Visuals", "Local", "Third Person") and menu:GetKey("Visuals", "Local", "Third Person") and client.char.alive
                then -- do third person model
                    if client.char.alive then
                        --debug.profilebegin("Third Person")
                        if not client.fakecharacter then
                            client.fakecharacter = true
                            local localchar = LOCAL_PLAYER.Character:Clone()

                            for k, v in next, localchar:GetChildren() do
                                if v:IsA("BasePart") and v.Name ~= "HumanoidRootPart" then
                                    v.Transparency = 0
                                end
                            end

                            localchar.Humanoid.DisplayDistanceType = Enum.HumanoidDisplayDistanceType.None

                            localchar.Parent = workspace["Ignore"]

                            client.fakerootpart = localchar.HumanoidRootPart
                            localchar.HumanoidRootPart.Anchored = true

                            local torso = localchar.Torso
                            client.fakeupdater.updatecharacter(localchar)

                            client.fakeupdater.setstance(client.char.movementmode)

                            local guntoequip = client.logic.currentgun.type == "KNIFE" and client.loadedguns[1].name or client.logic.currentgun.name -- POOP
                            client.fakeupdater.equip(
                                require(game:service("ReplicatedStorage").GunModules[guntoequip]),
                                game:service("ReplicatedStorage").ExternalModels[guntoequip]:Clone()
                            )
                            client.fake3pchar = localchar
                            if LOCAL_PLAYER.Character and LOCAL_PLAYER.Character.Torso and LOCAL_PLAYER.Character.Torso:FindFirstChild("Pant")
                            then
                                LOCAL_PLAYER.Character.Torso.Pant:Destroy()
                            end
                        else
                            if LOCAL_PLAYER.Character and LOCAL_PLAYER.Character.Torso and LOCAL_PLAYER.Character.Torso:FindFirstChild("Pant") then
                                LOCAL_PLAYER.Character.Torso.Pant:Destroy()
                            end
                            if not menu:GetVal("Rage", "Fake Lag", "Manual Choke") and not menu:GetKey("Rage", "Fake Lag", "Manual Choke") and not ragebot.choking then
                                local fakeupdater = client.fakeupdater
                                fakeupdater.step(3, false)

                                local lchams = menu:GetVal("Visuals", "Local", "Local Player Chams")
                                if lchams then
                                    local lchamscolor = menu:GetVal("Visuals", "Local", "Local Player Chams", COLOR, true)
                                    local lchamstransparency = menu:GetVal("Visuals", "Local", "Local Player Chams", COLOR)[4] / 255

                                    local lchamsmat = mats[menu:GetVal("Visuals", "Local", "Local Player Material")]

                                    local curchildren = client.fake3pchar:GetChildren()

                                    for i = 1, #curchildren do
                                        local curvalue = curchildren[i]
                                        if curvalue:IsA("BasePart") and curvalue.Name ~= "HumanoidRootPart" then
                                            curvalue.Material = Enum.Material[lchamsmat]
                                            curvalue.Color = lchamscolor
                                        end
                                    end
                                end

                                if menu:GetVal("Rage", "Anti Aim", "Enabled") then
                                    -- IM STUIPD........
                                    fakeupdater.setlookangles(ragebot.angles or Vector3.new())
                                    fakeupdater.setstance(ragebot.stance)
                                    fakeupdater.setsprint(ragebot.sprint)
                                else
                                    local silentangles = ragebot.silentVector and Vector3.new(CFrame.new(Vector3.new(), ragebot.silentVector):ToOrientation()) or nil
                                    fakeupdater.setlookangles(silentangles or client.cam.angles) -- TODO make this face silent aim vector at some point lol
                                    fakeupdater.setstance(client.char.movementmode)
                                    fakeupdater.setsprint(client.char:sprinting())
                                end
                                if client.logic.currentgun then
                                    if client.logic.currentgun.type ~= "KNIFE" then
                                        local bool = client.logic.currentgun:isaiming()
                                        local transparency = 1 + menu:GetVal("Visuals", "Local", "Local Player Chams", COLOR)[4] / -255
                                        fakeupdater.setaim(bool)
                                        for k, v in next, client.fake3pchar:GetChildren() do -- this is probably going to cause a 1 fps drop or some shit lmao
                                            if v:IsA("BasePart") and v.Name ~= "HumanoidRootPart" then
                                                v.Transparency = bool and map(transparency, 0, 1, 0.5, 1) or transparency
                                            end
                                            if v:IsA("Model") then
                                                for k, v in next, v:GetChildren() do
                                                    v.Transparency = bool and map(transparency, 0, 1, 0.5, 1) or transparency
                                                end
                                            end
                                        end
                                    end
                                end

                                -- 3 am already wtf 🌃

                                if client.char.rootpart then
                                    client.fakerootpart.CFrame = client.char.rootpart.CFrame
                                    local rootpartpos = client.char.rootpart.Position
                                    local fakeupdaterupvals = debug.getupvalues(client.fakeupdater.step)
                                    fakeupdaterupvals[4].p = rootpartpos
                                    fakeupdaterupvals[4].t = rootpartpos
                                    fakeupdaterupvals[4].v = Vector3.new()
                                end
                            end
                        end
                        --debug.profileend("Third Person")
                    end
                else
                    if client.fakecharacter then
                        local hiddenpos = Vector3.new(-1000,-1000,-1000)
                        local fakeupdaterupvals = debug.getupvalues(client.fakeupdater.step)
                        fakeupdaterupvals[4].p = hiddenpos
                        fakeupdaterupvals[4].t = hiddenpos
                        fakeupdaterupvals[4].v = Vector3.new()
                    end
                    if client.fakecharacter then
                        client.fakecharacter = false
                       
                        --client.replication.removecharacterhash(client.fakeplayer)
                        for k, v in next, client.fake3pchar:GetChildren() do
                            if v:IsA("BasePart") and v.Name ~= "HumanoidRootPart" then
                                v.Transparency = 1
                            end
                            if v:IsA("Model") then
                                for k, v in next, v:GetChildren() do
                                    v.Transparency = 1
                                end
                            end
                            if v:FindFirstChild("Face") then
                                v.Face:Destroy()
                            end
                            if v:FindFirstChild("Mesh") then
                                v.Mesh:Destroy()
                            end
                        end
                    end
                end
            end)

            menu.Initialize({
                { --ANCHOR stuffs
                    name = "Legit",
                    content = {
                        {
                            name = "Aim Assist",
                            autopos = "left",
                            autofill = true,
                            content = {
                                {
                                    type = TOGGLE,
                                    name = "Enabled",
                                    value = true,
                                },
                                {
                                    type = SLIDER,
                                    name = "Aimbot FOV",
                                    value = 10,
                                    minvalue = 0,
                                    maxvalue = 180,
                                    stradd = "°",
                                },
                                {
                                    type = TOGGLE,
                                    name = "Dynamic FOV",
                                    value = false,
                                    tooltip = "Changes all FOV settings in the Legit tab\nto change depending on the magnification.",
                                },
                                {
                                    type = SLIDER,
                                    name = "Smoothing",
                                    value = 20,
                                    minvalue = 0,
                                    maxvalue = 100,
                                    stradd = "%",
                                },
                                {
                                    type = DROPBOX,
                                    name = "Smoothing Type",
                                    value = 2,
                                    values = { "Exponential", "Linear" },
                                },
                                {
                                    type = SLIDER,
                                    name = "Randomization",
                                    value = 5,
                                    minvalue = 0,
                                    maxvalue = 20,
                                    custom = { [0] = "Off" },
                                },
                                {
                                    type = SLIDER,
                                    name = "Deadzone FOV",
                                    value = 1,
                                    minvalue = 0,
                                    maxvalue = 50,
                                    stradd = "°",
                                    decimal = 0.1,
                                    custom = { [0] = "Off" },
                                },
                                {
                                    type = DROPBOX,
                                    name = "Aimbot Key",
                                    value = 1,
                                    values = { "Mouse 1", "Mouse 2", "Always", "Dynamic Always" },
                                },
                                {
                                    type = DROPBOX,
                                    name = "Hitscan Priority",
                                    value = 1,
                                    values = { "Head", "Body", "Closest" },
                                },
                                {
                                    type = COMBOBOX,
                                    name = "Hitscan Points",
                                    values = { { "Head", true }, { "Body", true }, { "Arms", false }, { "Legs", false } },
                                },
                                {
                                    type = TOGGLE,
                                    name = "Adjust for Bullet Drop",
                                    value = true,
                                },
                                {
                                    type = TOGGLE,
                                    name = "Target Prediction",
                                    value = true,
                                },
                            },
                        },
                        {
                            name = "Trigger Bot",
                            autopos = "right",
                            content = {
                                {
                                    type = TOGGLE,
                                    name = "Enabled",
                                    value = false,
                                    extra = {
                                        type = KEYBIND,
                                        key = Enum.KeyCode.M,
                                    },
                                },
                                {
                                    type = COMBOBOX,
                                    name = "Trigger Bot Hitboxes",
                                    values = { { "Head", true }, { "Body", true }, { "Arms", false }, { "Legs", false } },
                                },
                                {
                                    type = TOGGLE,
                                    name = "Trigger When Aiming",
                                    value = false,
                                },
                                {
                                    type = SLIDER,
                                    name = "Aim Percentage",
                                    minvalue = 0,
                                    maxvalue = 100,
                                    value = 90,
                                    stradd = "%",
                                },
                                --[[
                        {
                            type = TOGGLE,
                            name = "Magnet Triggerbot",
                            value = false
                        },
                        {
                            type = SLIDER,
                            name = "Magnet FOV",
                            value = 80,
                            minvalue = 0,
                            maxvalue = 180,
                            stradd = "°"
                        },
                        {
                            type = SLIDER,
                            name = "Magnet Smoothing Factor",
                            value = 20,
                            minvalue = 0,
                            maxvalue = 50,
                            stradd = "%"
                        },
                        {
                            type = DROPBOX,
                            name = "Magnet Priority",
                            value = 1,
                            values = {"Head", "Body"}
                        },]]
                            },
                        },
                        {
                            name = "Bullet Redirection",
                            autopos = "right",
                            content = {
                                {
                                    type = TOGGLE,
                                    name = "Silent Aim",
                                    value = false,
                                },
                                {
                                    type = SLIDER,
                                    name = "Silent Aim FOV",
                                    value = 5,
                                    minvalue = 0,
                                    maxvalue = 180,
                                    stradd = "°",
                                },
                                {
                                    type = SLIDER,
                                    name = "Hit Chance",
                                    value = 30,
                                    minvalue = 0,
                                    maxvalue = 100,
                                    stradd = "%",
                                },
                                {
                                    type = SLIDER,
                                    name = "Accuracy",
                                    value = 90,
                                    minvalue = 0,
                                    maxvalue = 100,
                                    stradd = "%",
                                },
                                {
                                    type = DROPBOX,
                                    name = "Hitscan Priority",
                                    value = 1,
                                    values = { "Head", "Body", "Closest" },
                                },
                                {
                                    type = COMBOBOX,
                                    name = "Hitscan Points",
                                    values = { { "Head", true }, { "Body", true }, { "Arms", false }, { "Legs", false } },
                                },
                            },
                        },
                        {
                            name = "Recoil Control",
                            autopos = "right",
                            autofill = true,
                            content = {
                                {
                                    type = TOGGLE,
                                    name = "Weapon RCS",
                                    value = true,
                                },
                                {
                                    type = COMBOBOX,
                                    name = "Disable RCS While",
                                    values = { { "Holding Sniper", false }, { "Scoping In", false }, { "Not Shooting", true } }
                                },
                                {
                                    type = SLIDER,
                                    name = "Recoil Control X",
                                    value = 45,
                                    minvalue = 0,
                                    maxvalue = 100,
                                    stradd = "%",
                                },
                                {
                                    type = SLIDER,
                                    name = "Recoil Control Y",
                                    value = 80,
                                    minvalue = 0,
                                    maxvalue = 150,
                                    stradd = "%",
                                },
                            },
                        },
                    },
                },
                {
                    name = "Rage",
                    content = {
                        {
                            name = "Aimbot",
                            autopos = "left",
                            content = {
                                {
                                    type = TOGGLE,
                                    name = "Enabled",
                                    value = false,
                                    extra = {
                                        type = KEYBIND,
                                        toggletype = 4,
                                    },
                                    unsafe = true,
                                },
                                {
                                    type = TOGGLE,
                                    name = "Silent Aim",
                                    value = false,
                                    tooltip = "Stops the camera from rotating toward targetted players.",
                                },
                                {
                                    type = TOGGLE,
                                    name = "Rotate Viewmodel",
                                    value = false,
                                    tooltip = "Rotates weapon viewmodel toward the targetted player."
                                },
                                {
                                    type = SLIDER,
                                    name = "Aimbot FOV",
                                    value = 180,
                                    minvalue = 0,
                                    maxvalue = 181,
                                    stradd = "°",
                                    custom = { [181] = "Ignored" },
                                },
                                {
                                    type = TOGGLE,
                                    name = "Auto Wallbang",
                                    value = false
                                },
                                {
                                    type = TOGGLE,
                                    name = "Auto Shoot",
                                    value = false,
                                    tooltip = "Automatically shoots players when a target is found."
                                },
                                {
                                    type = TOGGLE,
                                    name = "Double Tap",
                                    value = false,
                                    tooltip = "Shoots twice when target is found when Auto Shoot is enabled.",
                                    extra = {
                                        type = KEYBIND,
                                        toggletype = 4,
                                    },
                                },
                                {
                                    type = DROPBOX,
                                    name = "Hitscan Priority",
                                    value = 1,
                                    values = { "Head", "Body" },
                                },
                            },
                        },
                        {
                            name = "Hack vs. Hack",
                            autopos = "left",
                            autofill = true,
                            content = {
                                --[[{
                                    type = TOGGLE,
                                    name = "Extend Penetration",
                                    value = false
                                },]]
                                -- {
                                --     type = SLIDER,
                                --     name = "Extra Penetration",
                                --     value = 11,
                                --     minvalue = 1,
                                --     maxvalue = 20,
                                --     stradd = " studs",
                                --     tooltip = "does nothing",
                                -- }, -- fuck u json
                                {
                                    type = TOGGLE,
                                    name = "Autowall Hitscan",
                                    value = false,
                                    unsafe = true,
                                    tooltip = "While using Auto Wallbang, this will hitscan multiple points\nto increase penetration and help for peeking.",
                                },
                                {
                                    type = COMBOBOX,
                                    name = "Hitscan Points",
                                    values = {
                                        { "Up", true },
                                        { "Down", true },
                                        { "Left", false },
                                        { "Right", false },
                                        { "Forward", true },
                                        { "Backward", true },
                                        { "Origin", true },
                                        { "Towards", true },
                                    },
                                },
                                {
                                    type = TOGGLE,
                                    name = "Hitbox Shifting",
                                    value = false,
                                    tooltip = "Increases possible penetration with Autowall. The higher\nthe Hitbox Shift Distance the more likely it is to miss shots.\nWhen it misses it will try disable this.",
                                },
                                {
                                    type = SLIDER,
                                    name = "Hitbox Shift Distance",
                                    value = 4,
                                    minvalue = 1,
                                    maxvalue = 12,
                                    stradd = " studs",
                                },
                                {
                                    type = TOGGLE,
                                    name = "Force Player Stances",
                                    value = false,
                                    tooltip = "Changes the stance of other players to the selected Stance Choice.",
                                },
                                {
                                    type = DROPBOX,
                                    name = "Stance Choice",
                                    value = 1,
                                    values = { "Stand", "Crouch", "Prone" },
                                },
                                {
                                    type = TOGGLE,
                                    name = "Backtracking",
                                    value = false,
                                    tooltip = "Attempts to abuse lag compensation and shoot players where they were in the past.\nUsing Visuals->Enemy ESP->Flags->Backtrack will help illustrate this."
                                },
                                {
                                    type = SLIDER,
                                    name = "Backtracking Time",
                                    value = 4000,
                                    minvalue = 0,
                                    maxvalue = 5000,
                                    stradd = "ms",
                                },
                                {
                                    type = TOGGLE,
                                    name = "Freestanding",
                                    value = false,
                                    extra = {
                                        type = KEYBIND,
                                    },
                                },
                            },
                        },
                        {
                            name = { "Anti Aim", "Fake Lag" },
                            x = menu.columns.right,
                            y = 66,
                            width = menu.columns.width,
                            height = 253,
                            [1] = {
                                content = {
                                    {
                                        type = TOGGLE,
                                        name = "Enabled",
                                        value = false,
                                        tooltip = "When this is enabled, your server-side yaw, pitch and stance are set to the values in this tab.",
                                    },
                                    {
                                        type = DROPBOX,
                                        name = "Pitch",
                                        value = 4,
                                        values = {
                                            "Off",
                                            "Up",
                                            "Zero",
                                            "Down",
                                            "Upside Down",
                                            "Roll Forward",
                                            "Roll Backward",
                                            "Random",
                                            "Bob",
                                            "Glitch",
                                        },
                                    },
                                    {
                                        type = DROPBOX,
                                        name = "Yaw",
                                        value = 2,
                                        values = { "Forward", "Backward", "Spin", "Random", "Glitch Spin", "Stutter Spin" },
                                    },
                                    {
                                        type = SLIDER,
                                        name = "Spin Rate",
                                        value = 10,
                                        minvalue = -100,
                                        maxvalue = 100,
                                        stradd = "°/s",
                                    },
                                    {
                                        type = DROPBOX,
                                        name = "Force Stance",
                                        value = 4,
                                        values = { "Off", "Stand", "Crouch", "Prone" },
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Hide in Floor",
                                        value = true,
                                        tooltip = "Shifts your body slightly under the ground\nso as to hide it when Force Stance is set to Prone.",
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Lower Arms",
                                        value = false,
                                        tooltip = "Lowers your arms on the server.",
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Tilt Neck",
                                        value = false,
                                        tooltip = "Forces the replicated aiming state so that it appears as though your head is tilted.",
                                    },
                                },
                            },
                            [2] = {
                                content = {
                                    {
                                        type = TOGGLE,
                                        name = "Enabled",
                                        value = false,
                                    },
                                    {
                                        type = SLIDER,
                                        name = "Fake Lag Amount",
                                        value = 1,
                                        minvalue = 1,
                                        maxvalue = 1000,
                                        stradd = " kbps",
                                    },
                                    {
                                        type = SLIDER,
                                        name = "Fake Lag Distance",
                                        value = 1,
                                        minvalue = 1,
                                        maxvalue = 40,
                                        stradd = " studs",
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Manual Choke",
                                        extra = {
                                            type = KEYBIND,
                                        },
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Release Packets on Shoot",
                                        value = false,
                                    },
                                },
                            },
                        },
                        {
                            name = { "Extra", "Settings" },
                            y = 325,
                            x = menu.columns.right,
                            width = menu.columns.width,
                            height = 258,
                            [1] = {
                                content = {
                                    {
                                        type = TOGGLE,
                                        name = "Knife Bot",
                                        value = false,
                                        extra = {
                                            type = KEYBIND,
                                            toggletype = 4,
                                        },
                                        unsafe = true,
                                    },
                                    {
                                        type = DROPBOX,
                                        name = "Knife Bot Type",
                                        value = 2,
                                        values = { "Assist", "Multi Aura", "Flight Aura", "Assist+" },
                                    },
                                    {
                                        type = DROPBOX,
                                        name = "Knife Hitscan",
                                        value = 1,
                                        values = { "Head", "Torso", "Other" },
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Knife Visible Only",
                                        value = false,
                                    },
                                    {
                                        type = SLIDER,
                                        name = "Knife Range",
                                        value = 26,
                                        minvalue = 1,
                                        maxvalue = 26,
                                        custom = {[26] = "Max"},
                                        stradd = " studs",
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Auto Peek",
                                        value = false,
                                        extra = {
                                            type = KEYBIND,
                                            toggletype = 1,
                                        },
                                        tooltip = "Hitscans from in front of your camera,\nif a target is found it will move you towards the point automatically",
                                    },
                                },
                            },
                            [2] = {
                                content = {
                                    {
                                        type = TOGGLE,
                                        name = "Aimbot Performance Mode",
                                        value = true,
                                        tooltip = "Lowers polling rate for targetting in Rage Aimbot.",
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Resolve Fake Positions",
                                        value = true,
                                        tooltip = "Rage aimbot attempts to resolve Crimwalk on other players.\nDisable if you are having issues with resolver.",
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Aimbot Damage Prediction",
                                        value = true,
                                        tooltip = "Predicts damage done to enemies as to prevent wasting ammo and time on certain players.\nHelps for users, and against players with high latency.",
                                    },
                                    {
                                        type = SLIDER,
                                        name = "Damage Prediction Limit",
                                        value = 100,
                                        minvalue = 0,
                                        maxvalue = 300,
                                        stradd = "hp",
                                    },
                                    {
                                        type = SLIDER,
                                        name = "Damage Prediction Time",
                                        value = 200,
                                        minvalue = 100,
                                        maxvalue = 500,
                                        stradd = "%",
                                    },
                                    {
                                        type = SLIDER,
                                        name = "Max Hitscan Points",
                                        value = 30,
                                        minvalue = 0,
                                        maxvalue = 300,
                                        stradd = " points",
                                    },
                                },
                            },
                        },
                    },
                },
                {
                    name = "Visuals",
                    content = {
                        {
                            name = { "Enemy ESP", "Team ESP", "Local" },
                            autopos = "left",
                            size = 300,
                            [1] = {
                                content = {
                                    {
                                        type = TOGGLE,
                                        name = "Enabled",
                                        value = true,
                                        tooltip = "Enables 2D rendering, disabling this could improve performance.\nDoes not affect Chams."
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Name",
                                        value = true,
                                        extra = {
                                            type = COLORPICKER,
                                            name = "Enemy Name",
                                            color = { 255, 255, 255, 200 },
                                        },
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Box",
                                        value = true,
                                        extra = {
                                            type = DOUBLE_COLORPICKER,
                                            name = { "Enemy Box Fill", "Enemy Box" },
                                            color = { { 255, 0, 0, 0 }, { 255, 0, 0, 150 } },
                                        },
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Health Bar",
                                        value = true,
                                        extra = {
                                            type = DOUBLE_COLORPICKER,
                                            name = { "Enemy Low Health", "Enemy Max Health" },
                                            color = { { 255, 0, 0 }, { 0, 255, 0 } },
                                        },
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Health Number",
                                        value = true,
                                        extra = {
                                            type = COLORPICKER,
                                            name = "Enemy Health Number",
                                            color = { 255, 255, 255, 255 },
                                        },
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Held Weapon",
                                        value = true,
                                        extra = {
                                            type = COLORPICKER,
                                            name = "Enemy Held Weapon",
                                            color = { 255, 255, 255, 200 },
                                        },
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Held Weapon Icon",
                                        value = false,
                                    },
                                    {
                                        type = COMBOBOX,
                                        name = "Flags",
                                        values = { { "Use Large Text", false }, { "Level", true }, { "Distance", true }, { "Resolved", false }, { "Backtrack", false },  },
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Chams",
                                        value = true,
                                        extra = {
                                            type = DOUBLE_COLORPICKER,
                                            name = { "Visible Enemy Chams", "Invisible Enemy Chams" },
                                            color = { { 255, 0, 0, 200 }, { 100, 0, 0, 100 } },
                                        },
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Skeleton",
                                        value = false,
                                        extra = {
                                            type = COLORPICKER,
                                            name = "Enemy skeleton",
                                            color = { 255, 255, 255, 120 },
                                        },
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Out of View",
                                        value = true,
                                        extra = {
                                            type = COLORPICKER,
                                            name = "Arrow Color",
                                            color = { 255, 255, 255, 255 },
                                        },
                                    },
                                    {
                                        type = SLIDER,
                                        name = "Arrow Distance",
                                        value = 50,
                                        minvalue = 10,
                                        maxvalue = 101,
                                        custom = { [101] = "Max" },
                                        stradd = "%",
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Dynamic Arrow Size",
                                        value = true,
                                    },
                                },
                            },
                            [2] = {
                                content = {
                                    {
                                        type = TOGGLE,
                                        name = "Enabled",
                                        value = false,
                                        tooltip = "Enables 2D rendering, disabling this could improve performance.\nDoes not affect Chams."
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Name",
                                        value = false,
                                        extra = {
                                            type = COLORPICKER,
                                            name = "Team Name",
                                            color = { 255, 255, 255, 200 },
                                        },
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Box",
                                        value = true,
                                        extra = {
                                            type = DOUBLE_COLORPICKER,
                                            name = { "Enemy Box Fill", "Enemy Box" },
                                            color = { { 0, 255, 0, 0 }, { 0, 255, 0, 150 } },
                                        },
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Health Bar",
                                        value = false,
                                        extra = {
                                            type = DOUBLE_COLORPICKER,
                                            name = { "Team Low Health", "Team Max Health" },
                                            color = { { 255, 0, 0 }, { 0, 255, 0 } },
                                        },
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Health Number",
                                        value = false,
                                        extra = {
                                            type = COLORPICKER,
                                            name = "Team Health Number",
                                            color = { 255, 255, 255, 255 },
                                        },
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Held Weapon",
                                        value = false,
                                        extra = {
                                            type = COLORPICKER,
                                            name = "Team Held Weapon",
                                            color = { 255, 255, 255, 200 },
                                        },
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Held Weapon Icon",
                                        value = false,
                                    },
                                    {
                                        type = COMBOBOX,
                                        name = "Flags",
                                        values = { { "Use Large Text", false }, { "Level", false }, { "Distance", false },  },
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Chams",
                                        value = false,
                                        extra = {
                                            type = DOUBLE_COLORPICKER,
                                            name = { "Visible Team Chams", "Invisible Team Chams" },
                                            color = { { 0, 255, 0, 200 }, { 0, 100, 0, 100 } },
                                        },
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Skeleton",
                                        value = false,
                                        extra = {
                                            type = COLORPICKER,
                                            name = "Team skeleton",
                                            color = { 255, 255, 255, 120 },
                                        },
                                    },
                                },
                            },
                            [3] = {
                                content = {
                                    {
                                        type = TOGGLE,
                                        name = "Arm Chams",
                                        value = false,
                                        extra = {
                                            type = DOUBLE_COLORPICKER,
                                            name = { "Sleeve Color", "Hand Color" },
                                            color = { { 106, 136, 213, 255 }, { 181, 179, 253, 255 } },
                                        },
                                    },
                                    {
                                        type = DROPBOX,
                                        name = "Arm Material",
                                        value = 1,
                                        values = { "Plastic", "Ghost", "Neon", "Foil", "Glass" },
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Weapon Chams",
                                        value = false,
                                        extra = {
                                            type = DOUBLE_COLORPICKER,
                                            name = { "Weapon Color", "Laser Color" },
                                            color = { { 106, 136, 213, 255 }, { 181, 179, 253, 255 } },
                                        },
                                    },
                                    {
                                        type = DROPBOX,
                                        name = "Weapon Material",
                                        value = 1,
                                        values = { "Plastic", "Ghost", "Neon", "Foil", "Glass" },
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Animate Ghost Material",
                                        value = false,
                                        tooltip = "Toggles whether or not the 'Ghost' material will be animated or not.",
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Remove Weapon Skin",
                                        value = false,
                                        tooltip = "If a loaded weapon has a skin, it will remove it.",
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Third Person",
                                        value = false,
                                        extra = {
                                            type = KEYBIND,
                                            key = nil,
                                            toggletype = 2,
                                        },
                                    },
                                    {
                                        type = SLIDER,
                                        name = "Third Person Distance",
                                        value = 60,
                                        minvalue = 1,
                                        maxvalue = 150,
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Local Player Chams",
                                        value = false,
                                        extra = {
                                            type = COLORPICKER,
                                            name = "Local Player Chams",
                                            color = { 106, 136, 213, 255 },
                                        },
                                        tooltip = "Changes the color and material of the local third person body when it is on.",
                                    },
                                    {
                                        type = DROPBOX,
                                        name = "Local Player Material",
                                        value = 1,
                                        values = { "Plastic", "Ghost", "Neon", "Foil", "Glass" },
                                    },
                                },
                            },
                        },
                        {
                            name = "ESP Settings",
                            autopos = "left",
                            autofill = true,
                            content = {
                                {
                                    type = SLIDER,
                                    name = "Max HP Visibility Cap",
                                    value = 90,
                                    minvalue = 50,
                                    maxvalue = 100,
                                    stradd = "hp",
                                    custom = {
                                        [100] = "Always"
                                    }
                                },
                                {
                                    type = DROPBOX,
                                    name = "Text Case",
                                    value = 2,
                                    values = { "lowercase", "Normal", "UPPERCASE" },
                                },
                                {
                                    type = SLIDER,
                                    name = "Max Text Length",
                                    value = 0,
                                    minvalue = 0,
                                    maxvalue = 32,
                                    custom = { [0] = "Unlimited" },
                                    stradd = " letters",
                                },
                                {
                                    type = SLIDER,
                                    name = "ESP Fade Time",
                                    value = 0.5,
                                    minvalue = 0,
                                    maxvalue = 2,
                                    stradd = "s",
                                    decimal = 0.1,
                                    custom = { [0] = "Off" }
                                },
                                {
                                    type = TOGGLE,
                                    name = "Highlight Target",
                                    value = false,
                                    extra = {
                                        type = COLORPICKER,
                                        name = "Aimbot Target",
                                        color = { 255, 0, 0, 255 },
                                    },
                                },
                                {
                                    type = TOGGLE,
                                    name = "Highlight Friends",
                                    value = true,
                                    extra = {
                                        type = COLORPICKER,
                                        name = "Friended Players",
                                        color = { 0, 255, 255, 255 },
                                    },
                                },
                                {
                                    type = TOGGLE,
                                    name = "Highlight Priority",
                                    value = true,
                                    extra = {
                                        type = COLORPICKER,
                                        name = "Priority Players",
                                        color = { 255, 210, 0, 255 },
                                    },
                                },
                                -- {
                                --     type = SLIDER,
                                --     name = "Max Player Text",
                                --     value = 0,
                                --     minvalue = 0,
                                --     maxvalue = 32,
                                --     custom = {[0] = "None"},
                                -- }
                            },
                        },
                        {
                            name = { "Camera Visuals", "Viewmodel" },
                            autopos = "right",
                            size = 228,
                            [1] = {
                                content = {
                                    {
                                        type = SLIDER,
                                        name = "Camera FOV",
                                        value = 80,
                                        minvalue = 60,
                                        maxvalue = 120,
                                        stradd = "°",
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "No Camera Bob",
                                        value = false,
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "No Scope Sway",
                                        value = false,
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Disable ADS FOV",
                                        value = false,
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "No Scope Border",
                                        value = false,
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "No Visual Suppression",
                                        value = false,
                                        tooltip = "Removes the suppression of enemies' bullets.",
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "No Gun Bob or Sway",
                                        value = false,
                                        tooltip = "Removes the bob and sway of weapons when walking.\nThis does not remove the swing effect when moving the mouse.",
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Reduce Camera Recoil",
                                        value = false,
                                        tooltip = "Reduces camera recoil by X%. Does not affect visible weapon recoil or kick.",
                                    },
                                    {
                                        type = SLIDER,
                                        name = "Camera Recoil Reduction",
                                        value = 10,
                                        minvalue = 0,
                                        maxvalue = 100,
                                        stradd = "%",
                                    },
                                },
                            },
                            [2] = {
                                content = {
                                    {
                                        type = TOGGLE,
                                        name = "Enabled",
                                        value = false,
                                    },
                                    {
                                        type = SLIDER,
                                        name = "Offset X",
                                        value = 0,
                                        minvalue = -3,
                                        maxvalue = 3,
                                        decimal = 0.01,
                                        stradd = " studs",
                                    },
                                    {
                                        type = SLIDER,
                                        name = "Offset Y",
                                        value = 0,
                                        minvalue = -3,
                                        maxvalue = 3,
                                        decimal = 0.01,
                                        stradd = " studs",
                                    },
                                    {
                                        type = SLIDER,
                                        name = "Offset Z",
                                        value = 0,
                                        minvalue = -3,
                                        maxvalue = 3,
                                        decimal = 0.01,
                                        stradd = " studs",
                                    },
                                    {
                                        type = SLIDER,
                                        name = "Pitch",
                                        value = 0,
                                        minvalue = -360,
                                        maxvalue = 360,
                                        stradd = "°",
                                    },
                                    {
                                        type = SLIDER,
                                        name = "Yaw",
                                        value = 0,
                                        minvalue = -360,
                                        maxvalue = 360,
                                        stradd = "°",
                                    },
                                    {
                                        type = SLIDER,
                                        name = "Roll",
                                        value = 0,
                                        minvalue = -360,
                                        maxvalue = 360,
                                        stradd = "°",
                                    },
                                },
                            },
                        },
                        {
                            name = { "World", "Misc", "Keybinds", "FOV", "Spawn" },
                            subtabfill = true,
                            autopos = "right",
                            size = 144,
                            [1] = {
                                content = {
                                    {
                                        type = TOGGLE,
                                        name = "Ambience",
                                        value = false,
                                        extra = {
                                            type = DOUBLE_COLORPICKER,
                                            name = { "Inside Ambience", "Outside Ambience" },
                                            color = { { 117, 76, 236 }, { 117, 76, 236 } },
                                        },
                                        tooltip = "Changes the map's ambient colors to your defined colors.",
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Force Time",
                                        value = false,
                                        tooltip = "Forces the time to the time set by your below.",
                                    },
                                    {
                                        type = SLIDER,
                                        name = "Custom Time",
                                        value = 0,
                                        minvalue = 0,
                                        maxvalue = 24,
                                        decimal = 0.1,
                                        stradd = "hr",
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Custom Saturation",
                                        value = false,
                                        extra = {
                                            type = COLORPICKER,
                                            name = "Saturation Tint",
                                            color = { 255, 255, 255 },
                                        },
                                        tooltip = "Adds custom saturation the image of the game.",
                                    },
                                    {
                                        type = SLIDER,
                                        name = "Saturation Density",
                                        value = 0,
                                        minvalue = 0,
                                        maxvalue = 100,
                                        stradd = "%",
                                    },
                                },
                            },
                            [2] = {
                                content = {
                                    {
                                        type = TOGGLE,
                                        name = "Crosshair Color",
                                        value = false,
                                        extra = {
                                            type = DOUBLE_COLORPICKER,
                                            name = { "Inline", "Outline" },
                                            color = { { 127, 72, 163 }, { 25, 25, 25 } },
                                        },
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Laser Pointer",
                                        value = false,
                                        extra = {
                                            type = COLORPICKER,
                                            name = "Laser Pointer Color",
                                            color = { 255, 255, 255, 255 },
                                        },
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Ragdoll Chams",
                                        value = false,
                                        extra = {
                                            type = COLORPICKER,
                                            name = "Ragdoll Chams",
                                            color = { 106, 136, 213, 255 },
                                        },
                                    },
                                    {
                                        type = DROPBOX,
                                        name = "Ragdoll Material",
                                        value = 1,
                                        values = { "Plastic", "Ghost", "Neon", "Foil", "Glass" },
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Bullet Tracers",
                                        value = false,
                                        extra = {
                                            type = COLORPICKER,
                                            name = "Bullet Tracers",
                                            color = { 201, 69, 54 },
                                        },
                                    },
                                },
                            },
                            [3] = {
                                content = {
                                    {
                                        type = TOGGLE,
                                        name = "Enabled",
                                        value = false,
                                        extra = {
                                            type = COLORPICKER,
                                            name = "Text Color",
                                            color = { 127, 72, 163, 255 },
                                        },
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Use List Sizes",
                                        value = false,
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Log Keybinds",
                                        value = false
                                    },
                                    {
                                        type = SLIDER,
                                        name = "Keybinds List X",
                                        value = 0,
                                        minvalue = 0,
                                        maxvalue = 100,
                                        shift_stepsize = 0.05,
                                        stradd = "%",
                                    },
                                    {
                                        type = SLIDER,
                                        name = "Keybinds List Y",
                                        value = 50,
                                        minvalue = 0,
                                        maxvalue = 100,
                                        shift_stepsize = 0.05,
                                        stradd = "%",
                                    },
                                },
                            },
                            [4] = {
                                content = {
                                    {
                                        type = TOGGLE,
                                        name = "Enabled",
                                        value = false,
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Aim Assist",
                                        value = true,
                                        extra = {
                                            type = COLORPICKER,
                                            name = "Aim Assist FOV",
                                            color = { 127, 72, 163, 255 },
                                        },
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Aim Assist Deadzone",
                                        value = true,
                                        extra = {
                                            type = COLORPICKER,
                                            name = "Deadzone FOV",
                                            color = { 50, 50, 50, 255 },
                                        },
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Bullet Redirection",
                                        value = false,
                                        extra = {
                                            type = COLORPICKER,
                                            name = "Bullet Redirection FOV",
                                            color = { 163, 72, 127, 255 },
                                        },
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Ragebot",
                                        value = false,
                                        extra = {
                                            type = COLORPICKER,
                                            name = "Ragebot FOV",
                                            color = { 255, 210, 0, 255 },
                                        },
                                    },
                                },
                            },
                            [5] = {
                                content = {
                                    {
                                        type = TOGGLE,
                                        name = "Enemy Spawns",
                                        value = false,
                                        extra = {
                                            type = COLORPICKER,
                                            name = "Enemy Spawns",
                                            color = { 255, 255, 255, 255 }
                                        }
                                    }
                                }
                            }
                        },
                        {
                            name = "Dropped ESP",
                            autopos = "right",
                            autofill = true,
                            content = {
                                {
                                    type = TOGGLE,
                                    name = "Weapon Names",
                                    value = false,
                                    extra = {
                                        type = DOUBLE_COLORPICKER,
                                        name = { "Highlighted Weapons", "Weapon Names" },
                                        color = { { 255, 125, 255, 255 }, { 255, 255, 255, 255 } },
                                    },
                                    tooltip = "Displays dropped weapons as you get closer to them,\nHighlights the weapon you are holding in the second color.",
                                },
                                {
                                    type = TOGGLE,
                                    name = "Weapon Icons",
                                    value = false
                                },
                                {
                                    type = TOGGLE,
                                    name = "Weapon Ammo",
                                    value = false,
                                    extra = {
                                        type = COLORPICKER,
                                        name = "Weapon Ammo",
                                        color = { 61, 168, 235, 150 },
                                    },
                                },
                                {
                                    type = TOGGLE,
                                    name = "Dropped Weapon Chams",
                                    value = false,
                                    extra = {
                                        type = COLORPICKER,
                                        name = "Dropped Weapon Color",
                                        color = { 3, 252, 161, 150 },
                                    },
                                },
                                {
                                    type = TOGGLE,
                                    name = "Grenade Warning",
                                    value = true,
                                    extra = {
                                        type = COLORPICKER,
                                        name = "Slider Color",
                                        color = { 68, 92, 227 },
                                    },
                                    tooltip = "Displays where grenades that will deal\ndamage to you will land and the damage they will deal.",
                                },
                                {
                                    type = TOGGLE,
                                    name = "Grenade ESP",
                                    value = false,
                                    extra = {
                                        type = DOUBLE_COLORPICKER,
                                        name = { "Inner Color", "Outer Color" },
                                        color = { { 195, 163, 255 }, { 123, 69, 224 } },
                                    },
                                    tooltip = "Displays the full path of any grenade that will deal damage to you is thrown.",
                                },
                            },
                        },
                    },
                },
                {
                    name = "Misc",
                    content = {
                        {
                            name = { "Movement", "Tweaks" },
                            autopos = "left",
                            size = 300,
                            [1] = {
                                content = {
                                    {
                                        type = TOGGLE,
                                        name = "Fly",
                                        value = false,
                                        unsafe = true,
                                        tooltip = "Manipulates your velocity to make you fly.\nUse 60 speed or below to never get flagged.",
                                        extra = {
                                            type = KEYBIND,
                                            key = Enum.KeyCode.B,
                                            toggletype = 2,
                                        },
                                    },
                                    {
                                        type = SLIDER,
                                        name = "Fly Speed",
                                        value = 60,
                                        minvalue = 1,
                                        maxvalue = 400,
                                        stradd = " stud/s",
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Auto Jump",
                                        value = false,
                                        tooltip = "When you hold the spacebar, it will automatically jump repeatedly, ignoring jump delay.",
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Speed",
                                        value = false,
                                        unsafe = true,
                                        tooltip = "Manipulates your velocity to make you move faster, unlike fly it doesn't make you fly.\nUse 60 speed or below to never get flagged.",
                                        extra = {
                                            type = KEYBIND,
                                            toggletype = 4,
                                        },
                                    },
                                    {
                                        type = DROPBOX,
                                        name = "Speed Type",
                                        value = 1,
                                        values = { "Always", "In Air", "On Hop" },
                                    },
                                    {
                                        type = SLIDER,
                                        name = "Speed Factor",
                                        value = 40,
                                        minvalue = 1,
                                        maxvalue = 400,
                                        stradd = " stud/s",
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Avoid Collisions",
                                        value = false,
                                        tooltip = "Attempts to stops you from running into obstacles\nfor Speed and Circle Strafe.",
                                        extra = {
                                            type = KEYBIND,
                                            toggletype = 4,
                                        }
                                    },
                                    {
                                        type = SLIDER,
                                        name = "Avoid Collisions Scale",
                                        value = 100,
                                        minvalue = 0,
                                        maxvalue = 100,
                                        stradd = "%",
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Circle Strafe",
                                        value = false,
                                        extra = {
                                            type = KEYBIND,
                                        },
                                        tooltip = "When you hold this keybind, it will strafe in a perfect circle.\nSpeed of strafing is borrowed from Speed Factor.",
                                    },
                                },
                            },
                            [2] = {
                                content = {
                                    {
                                        type = TOGGLE,
                                        name = "Gravity Shift",
                                        value = false,
                                        tooltip = "Shifts movement gravity by X%. (Does not affect bullet acceleration.)",
                                    },
                                    {
                                        type = SLIDER,
                                        name = "Gravity Shift Percentage",
                                        value = -50,
                                        minvalue = -500,
                                        maxvalue = 500,
                                        stradd = "%",
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Jump Power",
                                        value = false,
                                        tooltip = "Shifts movement jump power by X%.",
                                    },
                                    {
                                        type = SLIDER,
                                        name = "Jump Power Percentage",
                                        value = 150,
                                        minvalue = 0,
                                        maxvalue = 1000,
                                        stradd = "%",
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Prevent Fall Damage",
                                        value = false,
                                    },
                                },
                            },
                        },
                        {
                            name = "Weapon Modifications",
                            autopos = "left",
                            autofill = true,
                            content = {
                                {
                                    type = TOGGLE,
                                    name = "Enabled",
                                    value = false,
                                    tooltip = "Allows Bitch Bot to modify weapons.",
                                },
                                {
                                    type = SLIDER,
                                    name = "Fire Rate Scale",
                                    value = 150,
                                    minvalue = 50,
                                    maxvalue = 500,
                                    stradd = "%",
                                    tooltip = "Scales all weapons' firerate by X%.\n100% = Normal firerate",
                                },
                                {
                                    type = SLIDER,
                                    name = "Recoil Scale",
                                    value = 10,
                                    minvalue = 0,
                                    maxvalue = 100,
                                    stradd = "%",
                                    tooltip = "Scales all weapons' recoil by X%.\n0% = No recoil | 50% = Halved recoil",
                                },
                                {
                                    type = TOGGLE,
                                    name = "Remove Animations",
                                    value = true,
                                    tooltip = "Removes all animations from any gun.\nThis will also completely remove the equipping animations.",
                                },
                                {
                                    type = TOGGLE,
                                    name = "Instant Equip",
                                    value = true,
                                },
                                {
                                    type = TOGGLE,
                                    name = "Fully Automatic",
                                    value = true,
                                },
                                {
                                    type = TOGGLE,
                                    name = "Run and Gun",
                                    value = false,
                                    tooltip = "Makes it so that your weapon does not\nsway due to mouse movement, or turns over while sprinting.",
                                },
                            },
                        },
                        {
                            name = { "Extra", "Exploits" },
                            autopos = "right",
                            autofill = true,
                            [1] = {
                                content = {
                                    {
                                        type = TOGGLE,
                                        name = "Ignore Friends",
                                        value = true,
                                        tooltip = "When turned on, bullets do not deal damage to friends,\nand Rage modules won't target friends.",
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Target Only Priority Players",
                                        value = false,
                                        tooltip = "When turned on, all modules except for Aim Assist that target players\nwill ignore anybody that isn't on the Priority list.",
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Disable 3D Rendering",
                                        value = false,
                                        tooltip = "When turned on, all 3D rendering will be disabled.\nThis helps with running multiple instances at once."
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Suppress Only",
                                        value = false,
                                        tooltip = "When turned on, bullets do not deal damage.",
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Auto Respawn",
                                        value = false,
                                        tooltip = "Automatically respawns after deaths.",
                                    },
                                    -- {
                                    --     type = TOGGLE,
                                    --     name = "Disable Team Sounds",
                                    --     value = false,
                                    --     tooltip = "Disables sounds from all teammates and local player.",
                                    -- },
                                    {
                                        type = DROPBOX,
                                        name = "Vote Friends",
                                        value = 1,
                                        values = { "Off", "Yes", "No" },
                                    },
                                    {
                                        type = DROPBOX,
                                        name = "Vote Priority",
                                        value = 1,
                                        values = { "Off", "Yes", "No" },
                                    },
                                    {
                                        type = DROPBOX,
                                        name = "Default Vote",
                                        value = 1,
                                        values = { "Off", "Yes", "No" },
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Kill Sound",
                                        value = false,
                                    },
                                    {
                                        type = TEXTBOX,
                                        name = "killsoundid",
                                        text = "6229978482",
                                        tooltip = "The Roblox sound ID or file inside of synapse\n workspace to play when Kill Sound is on.",
                                    },
                                    {
                                        type = SLIDER,
                                        name = "Kill Sound Volume",
                                        value = 20,
                                        minvalue = 0,
                                        maxvalue = 100,
                                        stradd = "%",
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Kill Say",
                                        value = false,
                                        tooltip = "Kill say messages, located in bitchbot/killsay.txt \n[name] is the target's name\n[weapon] is the weapon used\n[hitbox] says head or body depending on where you shot the player",
                                    },
                                    {
                                        type = DROPBOX,
                                        name = "Chat Spam",
                                        value = 1,
                                        values = {
                                            "Off",
                                            "Original",
                                            "t0nymode",
                                            "Chinese Propaganda",
                                            "Emojis",
                                            "Deluxe",
                                            "Youtube Title",
                                            "Custom",
                                            "Custom Combination",
                                        },
                                        tooltip = "Spams chat, Custom options are located in the bitchbot/chatspam.txt",
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Chat Spam Repeat",
                                        value = false,
                                        tooltip = "Repeats the same Chat Spam message in chat.",
                                    },
                                    {
                                        type = SLIDER,
                                        name = "Chat Spam Delay",
                                        minvalue = 1,
                                        maxvalue = 10,
                                        value = 5,
                                        stradd = "s",
                                    },
                                    -- {
                                    --     type = TOGGLE,
                                    --     name = "Impact Grenade",
                                    --     value = false,
                                    --     tooltip = "Explodes grenades on impact."
                                    -- },
                                    -- {
                                    --     type = TOGGLE,
                                    --     name = "Auto Martyrdom",
                                    --     value = false,
                                    --     tooltip = "Whenever you die to an enemy, this will drop a grenade\nat your death position.",
                                    -- },
                                    {
                                        type = TOGGLE,
                                        name = "Break Windows",
                                        value = false,
                                        tooltip = "Breaks all windows in the map when you spawn."
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Join New Game On Kick",
                                        value = false,
                                    },
                                    {
                                        type = BUTTON,
                                        name = "Join New Game",
                                        unsafe = false,
                                        doubleclick = true,
                                    },

                                },
                            },
                            [2] = {
                                content = {

                                    --[[{
                                        type = TOGGLE,
                                        name = "Super Invisibility",
                                        value = false,
                                        extra = {
                                            type = KEYBIND
                                        }
                                    },]]
                                    {
                                        type = TOGGLE,
                                        unsafe = true,
                                        name = "Crash Server",
                                        tooltip = "Attempts to overwhelm the server so that users are kicked\nfor internet connection problems.\nThe higher the Crash Intensity the faster it will be,\nbut the higher the chance for it to fail.",
                                    },
                                    {
                                        type = SLIDER,
                                        name = "Crash Intensity",
                                        minvalue = 1,
                                        maxvalue = 16,
                                        value = 8
                                    },
                                    -- {
                                    --     type = TOGGLE,
                                    --     unsafe = true,
                                    --     name = "Invisibility",
                                    --     extra = {
                                    --         type = KEYBIND,
                                    --         toggletype = 0,
                                    --     },
                                    -- },
                                    {
                                        type = TOGGLE,
                                        unsafe = true,
                                        name = "Rapid Kill",
                                        value = false,
                                        extra = {
                                            type = KEYBIND,
                                            toggletype = 0,
                                        },
                                        tooltip = "Throws 3 grenades instantly on random enemies.",
                                    },
                                    {
                                        type = TOGGLE,
                                        unsafe = true,
                                        name = "Auto Rapid Kill",
                                        value = false,
                                        tooltip = "Throws 3 grenades instantly on random enemies,\nthen kills itself to do it again.\nWorks only when Rapid Kill is enabled.\nAuto Respawn in Misc->Extra will automate this further.",
                                    },
                                    {
                                        type = TOGGLE,
                                        unsafe = true,
                                        name = "Grenade Teleport",
                                        value = false,
                                        tooltip = "Teleports grenades to other players when enabled."
                                    },
                                    {
                                        type = COMBOBOX,
                                        name = "Grenade Changes",
                                        values = { { "Martyrdom", false } , { "Impact", false }, }
                                    },
                                    {
                                        type = TOGGLE,
                                        unsafe = true,
                                        name = "Crimwalk",
                                        value = false,
                                        extra = {
                                            type = KEYBIND,
                                        },
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Disable Crimwalk on Shot",
                                        value = true,
                                        unsafe = true,
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Bypass Speed Checks",
                                        value = false,
                                        unsafe = true,
                                        tooltip = "Attempts to bypass maximum speed limit on the server.",
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Teleport",
                                        value = false,
                                        unsafe = true,
                                        extra = {
                                            type = KEYBIND,
                                            toggletype = 0,
                                        },
                                        tooltip = "When key pressed you will teleport to the mouse position.\nDoes not work when Bypass Speed Checks is enabled.",
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Vertical Floor Clip",
                                        value = false,
                                        unsafe = true,
                                        extra = {
                                            type = KEYBIND,
                                            toggletype = 0,
                                        },
                                        tooltip = "Teleports you 19 studs under the ground. Must be over glass or non-collidable parts to work. \nHold Alt to go up, and Shift to go forwards.",
                                    },
                                    {
                                        type = TOGGLE,
                                        name = "Fake Equip",
                                        value = false,
                                        unsafe = true,
                                    },
                                    {
                                        type = DROPBOX,
                                        name = "Fake Slot",
                                        values = { "Primary", "Secondary", "Melee" },
                                        value = 1,
                                    },

                                    -- {
                                    --     type = TOGGLE,
                                    --     name = "Noclip",
                                    --     value = false,
                                    --     extra = {
                                    --         type = KEYBIND,
                                    --         key = nil
                                    --     },
                                    --     unsafe = true,
                                    --     tooltip = "Allows you to noclip through most parts of the map. Must be over glass or non-collidable parts to work."
                                    -- },
                                    -- {
                                    --     type = TOGGLE,
                                    --     name = "Fake Position",
                                    --     value = false,
                                    --     extra = {
                                    --         type = KEYBIND
                                    --     },
                                    --     unsafe = true,
                                    --     tooltip = "Fakes your server-side position. Works best when stationary, and allows you to be unhittable."
                                    -- },
                                    {
                                        type = TOGGLE,
                                        name = "Lock Player Positions",
                                        value = false,
                                        unsafe = true,
                                        extra = {
                                            type = KEYBIND,
                                        },
                                        tooltip = "Locks all other players' positions.",
                                    },
                                    -- {
                                    --     type = TOGGLE,
                                    --     name = "Skin Changer",
                                    --     value = false,
                                    --     tooltip = "While this is enabled, all custom skins will apply with the custom settings below.",
                                    --     extra = {
                                    --         type = COLORPICKER,
                                    --         name = "Weapon Skin Color",
                                    --         color = { 127, 72, 163, 255 },
                                    --     },
                                    -- },
                                    -- {
                                    --     type = TEXTBOX,
                                    --     name = "skinchangerTexture",
                                    --     text = "6156783684",
                                    -- },
                                    -- {
                                    --     type = SLIDER,
                                    --     name = "Scale X",
                                    --     value = 10,
                                    --     minvalue = 1,
                                    --     maxvalue = 500,
                                    --     stradd = "%",
                                    -- },
                                    -- {
                                    --     type = SLIDER,
                                    --     name = "Scale Y",
                                    --     value = 10,
                                    --     minvalue = 1,
                                    --     maxvalue = 500,
                                    --     stradd = "%",
                                    -- },
                                    -- {
                                    --     type = DROPBOX,
                                    --     name = "Skin Material",
                                    --     value = 1,
                                    --     values = { "Plastic", "Ghost", "Neon", "Foil", "Glass" },
                                    -- },
                                },
                            },
                        },
                    },
                },
                {
                    name = "Settings",
                    content = {
                        {
                            name = "Player List",
                            x = menu.columns.left,
                            y = 66,
                            width = menuWidth - 34,
                            height = 328,
                            content = {
                                {
                                    type = "list",
                                    name = "Players",
                                    multiname = { "Name", "Team", "Status" },
                                    size = 9,
                                    columns = 3,
                                },
                                {
                                    type = IMAGE,
                                    name = "Player Info",
                                    text = "No Player Selected",
                                    size = 72,
                                },
                                {
                                    type = DROPBOX,
                                    name = "Player Status",
                                    x = 307,
                                    y = 314,
                                    w = 160,
                                    value = 1,
                                    values = { "None", "Friend", "Priority" },
                                },
                                {
                                    type = BUTTON,
                                    name = "Votekick",
                                    doubleclick = true,
                                    x = 307,
                                    y = 356,
                                    w = 76,
                                },
                                {
                                    type = BUTTON,
                                    name = "Spectate",
                                    x = 391,
                                    y = 356,
                                    w = 76,
                                },
                            },
                        },
                        {
                            name = "Cheat Settings",
                            x = menu.columns.left,
                            y = 400,
                            width = menu.columns.width,
                            height = 183,
                            content = {
                                {
                                    type = TOGGLE,
                                    name = "Menu Accent",
                                    value = false,
                                    extra = {
                                        type = COLORPICKER,
                                        name = "Accent Color",
                                        color = { 127, 72, 163 },
                                    },
                                },
                                {
                                    type = TOGGLE,
                                    name = "Watermark",
                                    value = true,
                                },
                                {
                                    type = TOGGLE,
                                    name = "Custom Menu Name",
                                    value = MenuName and true or false,
                                },
                                {
                                    type = TEXTBOX,
                                    name = "MenuName",
                                    text = MenuName or "Bitch Bot",
                                },
                                {
                                    type = BUTTON,
                                    name = "Set Clipboard Game ID",
                                },
                                {
                                    type = BUTTON,
                                    name = "Unload Cheat",
                                    doubleclick = true,
                                },
                                {
                                    type = TOGGLE,
                                    name = "Allow Unsafe Features",
                                    value = false,
                                },
                            },
                        },
                        {
                            name = "Configuration",
                            x = menu.columns.right,
                            y = 400,
                            width = menu.columns.width,
                            height = 183,
                            content = {
                                {
                                    type = TEXTBOX,
                                    name = "ConfigName",
                                    file = true,
                                    text = "",
                                },
                                {
                                    type = DROPBOX,
                                    name = "Configs",
                                    value = 1,
                                    values = GetConfigs(),
                                },
                                {
                                    type = BUTTON,
                                    name = "Load Config",
                                    doubleclick = true,
                                },
                                {
                                    type = BUTTON,
                                    name = "Save Config",
                                    doubleclick = true,
                                },
                                {
                                    type = BUTTON,
                                    name = "Delete Config",
                                    doubleclick = true,
                                },
                            },
                        },
                    },
                },
            })

            do
                local plistinfo = menu.options["Settings"]["Player List"]["Player Info"][1]
                local plist = menu.options["Settings"]["Player List"]["Players"]
                local function updateplist()
                    if not menu then
                        return
                    end
                    local playerlistval = menu:GetVal("Settings", "Player List", "Players")
                    local players = table.create(Players.MaxPlayers)

                    for i, team in pairs(TEAMS:GetTeams()) do
                        local sorted_players = table.create(#players)
                        for i1, player in pairs(team:GetPlayers()) do
                            table.insert(sorted_players, player.Name)
                        end
                        table.sort(sorted_players) -- why the fuck doesn't this shit work ...
                        for i1, player_name in pairs(sorted_players) do
                            table.insert(players, Players:FindFirstChild(player_name))
                        end
                    end
                    local templist = table.create(#players)
                    for k, v in ipairs(players) do
                        local playername = { v.Name, RGB(255, 255, 255) }
                        local teamtext = { "None", RGB(255, 255, 255) }
                        local playerstatus = { "None", RGB(255, 255, 255) }
                        if v.Team ~= nil then
                            teamtext[1] = v.Team.Name
                            teamtext[2] = v.TeamColor.Color
                        end
                        if v == LOCAL_PLAYER then
                            playerstatus[1] = "Local Player"
                            playerstatus[2] = RGB(66, 135, 245)
                        elseif table.find(menu.friends, v.Name) then
                            playerstatus[1] = "Friend"
                            playerstatus[2] = RGB(0, 255, 0)
                        elseif table.find(menu.priority, v.Name) then
                            playerstatus[1] = "Priority"
                            playerstatus[2] = RGB(255, 210, 0)
                        end

                        table.insert(templist, { playername, teamtext, playerstatus })
                    end
                    plist[5] = templist
                    if playerlistval ~= nil then
                        for i, v in ipairs(players) do
                            if v.Name == playerlistval then
                                selectedPlayer = v
                                break
                            end
                            if i == #players then
                                selectedPlayer = nil
                                menu.list.setval(plist, nil)
                            end
                        end
                    end
                    menu:SetMenuPos(menu.x, menu.y)
                end

                local function setplistinfo(player, textonly)
                    if player ~= nil then
                        local playerteam = "None"
                        if player.Team ~= nil then
                            playerteam = player.Team.Name
                        end
                        local playerhealth = "?"

                        local alive = client.hud:isplayeralive(player)
                        if alive then
                            playerhealth = math.ceil(client.hud:getplayerhealth(player))
                        else
                            playerhealth = "Dead"
                        end
                        local playerdata = teamdata[1]:FindFirstChild(player.Name) or teamdata[2]:FindFirstChild(player.Name)
                        local playerrank = playerdata.Rank.Text
                        local kills = playerdata.Kills.Text
                        local deaths = playerdata.Deaths.Text
                        plistinfo[1].Text = string.format(
                            [[
Name: %s
Health: %s
Rank: %d
K/D: %d/%d
                ]],
                            player.Name,
                            tostring(playerhealth),
                            playerrank,
                            kills,
                            deaths
                        )
                        if textonly == nil then
                            plistinfo[2].Data = BBOT_IMAGES[5]

                            plistinfo[2].Data = game:HttpGet(string.format(
                                "https://www.roblox.com/headshot-thumbnail/image?userId=%s&width=100&height=100&format=png",
                                player.UserId
                            ))
                        end
                    else
                        plistinfo[2].Data = BBOT_IMAGES[5]
                        plistinfo[1].Text = "No Player Selected"
                    end
                end

                menu.list.removeall(menu.options["Settings"]["Player List"]["Players"])
                updateplist()
                setplistinfo()

                local oldslectedplayer = nil
                menu.connections.inputstart2 = INPUT_SERVICE.InputBegan:Connect(function(input)
                    if input.UserInputType == Enum.UserInputType.MouseButton1 then
                        if menu.tabnames[menu.activetab] == "Settings" and menu.open then
                            game.RunService.Stepped:wait()

                            updateplist()

                            if selectedPlayer ~= nil then
                                if menu:MouseInMenu(28, 68, 448, 238) then
                                    if table.find(menu.friends, selectedPlayer.Name) then
                                        menu.options["Settings"]["Player List"]["Player Status"][1] = 2
                                        menu.options["Settings"]["Player List"]["Player Status"][4][1].Text = "Friend"
                                    elseif table.find(menu.priority, selectedPlayer.Name) then
                                        menu.options["Settings"]["Player List"]["Player Status"][1] = 3
                                        menu.options["Settings"]["Player List"]["Player Status"][4][1].Text = "Priority"
                                    else
                                        menu.options["Settings"]["Player List"]["Player Status"][1] = 1
                                        menu.options["Settings"]["Player List"]["Player Status"][4][1].Text = "None"
                                    end
                                end

                                for k, table_ in pairs({ menu.friends, menu.priority }) do
                                    for index, playername in pairs(table_) do
                                        if selectedPlayer.Name == playername then
                                            table.remove(table_, index)
                                        end
                                    end
                                end
                                if menu:GetVal("Settings", "Player List", "Player Status") == 2 then
                                    if not table.find(menu.friends, selectedPlayer.Name) then
                                        table.insert(menu.friends, selectedPlayer.Name)
                                    end
                                elseif menu:GetVal("Settings", "Player List", "Player Status") == 3 then
                                    if not table.find(menu.priority, selectedPlayer.Name) then
                                        table.insert(menu.priority, selectedPlayer.Name)
                                    end
                                end
                                WriteRelations()
                            else
                                menu.options["Settings"]["Player List"]["Player Status"][1] = 1
                                menu.options["Settings"]["Player List"]["Player Status"][4][1].Text = "None"
                            end

                            updateplist()

                            if plist[1] ~= nil then
                                if oldslectedplayer ~= selectedPlayer then
                                    setplistinfo(selectedPlayer)
                                    oldslectedplayer = selectedPlayer
                                end
                            else
                                setplistinfo(nil)
                            end
                        end
                    end
                end)

                menu.connections.renderstepped2 = game.RunService.RenderStepped:Connect(function()
                    if menu.open then
                        if menu.tabnames[menu.activetab] == "Settings" then
                            if plist[1] ~= nil then
                                setplistinfo(selectedPlayer, true)
                            end
                        end
                    end
                end)

                menu.connections.playerjoined = Players.PlayerAdded:Connect(function(player)
                    updateplist()
                    if plist[1] ~= nil then
                        setplistinfo(selectedPlayer)
                    else
                        setplistinfo(nil)
                    end
                end)

                menu.connections.playerleft = Players.PlayerRemoving:Connect(function(player)
                    updateplist()
                    ragebot.repupdates[player] = nil
                end)
            end
        end --!SECTION PF END
    end
end

do
    local wm = menu.watermark
    wm.textString = " | " .. BBOT.username .. " | " .. os.date("%b. %d, %Y")
    wm.pos = Vector2.new(50, 9)
    wm.text = {}
    local fulltext = menu.options["Settings"]["Cheat Settings"]["MenuName"][1] .. wm.textString
    wm.width = #fulltext * 7 + 10
    wm.height = 19
    wm.rect = {}

    Draw:FilledRect(
        false,
        wm.pos.x,
        wm.pos.y + 1,
        wm.width,
        2,
        { menu.mc[1] - 40, menu.mc[2] - 40, menu.mc[3] - 40, 255 },
        wm.rect
    )
    Draw:FilledRect(false, wm.pos.x, wm.pos.y, wm.width, 2, { menu.mc[1], menu.mc[2], menu.mc[3], 255 }, wm.rect)
    Draw:FilledRect(false, wm.pos.x, wm.pos.y + 3, wm.width, wm.height - 5, { 50, 50, 50, 255 }, wm.rect)
    for i = 0, wm.height - 4 do
        Draw:FilledRect(
            false,
            wm.pos.x,
            wm.pos.y + 3 + i,
            wm.width,
            1,
            { 50 - i * 1.7, 50 - i * 1.7, 50 - i * 1.7, 255 },
            wm.rect
        )
    end
    Draw:OutlinedRect(false, wm.pos.x, wm.pos.y, wm.width, wm.height, { 0, 0, 0, 255 }, wm.rect)
    Draw:OutlinedRect(false, wm.pos.x - 1, wm.pos.y - 1, wm.width + 2, wm.height + 2, { 0, 0, 0, 255 * 0.4 }, wm.rect)
    Draw:OutlinedText(
        fulltext,
        2,
        false,
        wm.pos.x + 5,
        wm.pos.y + 3,
        13,
        false,
        { 255, 255, 255, 255 },
        { 0, 0, 0, 255 },
        wm.text
    )
end

--ANCHOR watermak
for k, v in pairs(menu.watermark.rect) do
    v.Visible = true
end
menu.watermark.text[1].Visible = true

local textbox = menu.options["Settings"]["Configuration"]["ConfigName"]
local relconfigs = GetConfigs()
textbox[1] = relconfigs[menu.options["Settings"]["Configuration"]["Configs"][1]]
textbox[4].Text = textbox[1]

menu.load_time = math.floor((tick() - loadstart) * 1000)
CreateNotification(string.format("Done loading the " .. menu.game .. " cheat. (%d ms)", menu.load_time))
CreateNotification("Press DELETE to open and close the menu!")
CreateThread(function()
    local x = loadingthing.Position.x
    for i = 1, 20 do
        loadingthing.Transparency = 1-i/20
        loadingthing.Position -= Vector2.new(x/10, 0)
        wait()
    end
    loadingthing.Visible = false -- i do it this way because otherwise it would fuck up the Draw:UnRender function, it doesnt cause any lag sooooo
end)
if not menu.open then
    menu.fading = true
    menu.fadestart = tick()
end

menu.Initialize = nil -- let me freeeeee
-- not lettin u free asshole bitch
-- i meant the program memory, alan...............  fuckyouAlan_iHateYOU from v1
-- im changing all the var names that had typos by me back to what they were now because of this.... enjoy hieght....
-- wut
_G.CreateNotification = CreateNotification
 
Начинающий
Статус
Оффлайн
Регистрация
18 Окт 2019
Сообщения
20
Реакции[?]
0
Поинты[?]
0
в krnl не работает ? или я что то делаю не так
 
Сверху Снизу