first script i ever posted bbot source leak READ DESC
Key Required

first script i ever posted bbot source leak READ DESC

Phantom ForcesIDunnoWhatHaxingIsIDunnoWhatHaxingIs 21.5K views 19 executesUpdated Oct 11, 2022
1.7/ 5(3 votes)
1233% Positive
Lua Script•13555 lines (566309 chars)
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

if not BBOT then
	BBOT = { username = "dev" }
end
local menu

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

local customChatSpam = {}
local customKillSay = {}
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="

local PingStat = game:service("Stats").PerformanceStats.Ping
local function GetLatency()
	return PingStat:GetValue() / 1000
end
placeholderImage = syn.crypt.base64.decode(placeholderImage)

getupvalue(getconnections(game.ReplicatedStorage.RemoteEvent.OnClientEvent)[1].Function, 1).correctposition = function() end

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

local function reverse_table(tbl)
    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)
		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,
				}

				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(100, 100, 225))
								local color = linenum == 1 and mencol or Color3.fromRGB(mencol.R * 255 - 40, mencol.G * 255 - 40, mencol.B * 255 - 40)
								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(100, 100, 225)

		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

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 = { 155, 155, 255 },
	watermark = {},
	connections = {},
	list = {},
	unloaded = false,
	copied_clr = nil,
	game = "none",
	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,
})

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
	menu.game = "Phantom Forces"
	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
end

loadstart = tick()

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")
end

do -- Files
	if not isfile("bitchbot/relations.bb") then
		writefile("bitchbot/relations.bb", "friends:\npriority:")
	end

    if not isfile("bitchbot/chatspam.bb") then
        writefile("bitchbot/chatspam.bb",
            [[BEACH BOAT ON TOP
BBOT NEW UPDATE 2058 ةشساشممشا
ؤقهحلاخف خهى فخح غثشا ةغ لاقخ
beach boat does not miss]])
    end

    if not isfile("bitchbot/killsay.bb") then
        writefile("bitchbot/killsay.bb",
            [[Imagine Dying To Me [name]
So bad [name]
[name] how is your [hitbox] feeling?
sucks to suck [name]
[name] how do you die to a [weapon], so bad
[name] get better]])
    end

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

    if not isfile("bitchbot/" .. menu.game .. "/Default.bb") then
        writefile("bitchbot/" .. menu.game .. "/Default.bb", "")
    end
end

do
    local customtxt = readfile("bitchbot/chatspam.bb")
    for s in customtxt:gmatch("[^\n]+") do
        table.insert(customChatSpam, s)
    end

    customtxt = readfile("bitchbot/killsay.bb")
    for s in customtxt:gmatch("[^\n]+") do
        table.insert(customKillSay, s)
    end
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 PathfindingService = game:GetService("PathfindingService")
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 = 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
    return keyname
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))
				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 = 2.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, { 155, 155, 255, 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, { 155, 155, 255, 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, { 155, 155, 255, 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, { 155, 155, 255, 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", "Interface" ,"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, { 155, 155, 255, 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 },
		{ 155, 155, 255, 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

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

	function menu:InputBeganMenu(key) --ANCHOR menu input --
		if key.KeyCode == (menu:GetVal("Settings", "Cheat Settings", "Custom Menu Key") and keyz[tonumber(menu.options["Settings"]["Cheat Settings"]["Custom Menu Key"][5][1].Value)] or Enum.KeyCode.RightShift) and not loadingthing.Visible then
			cp.dragging_m = false
			cp.dragging_r = false
			cp.dragging_b = false

			customChatSpam = {}
			customKillSay = {}
			local customtxt = readfile("bitchbot/chatspam.bb")
			for s in customtxt:gmatch("[^\n]+") do -- I'm Love String:Match
				table.insert(customChatSpam, s)
			end
			customtxt = readfile("bitchbot/killsay.bb")
			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

	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()
		local figgy = "bitchbot v2\n\n"

		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 = { 155, 155, 255 }
			end
			menu:SetColor(menu.mc[1], menu.mc[2], menu.mc[3])

			local wme = menu:GetVal("Visuals", "Interface", "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
									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

		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
		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
												)
												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 (
					(
						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()
		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")
		game:service("ContextActionService"):UnbindAction("BB PF check")

		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
		end

		setreadonly(mt, true)

		if 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(55, 55, 255)

		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 == "Phantom Forces" then --SECTION PF BEGIN
	local client = {}
	local legitbot = {}
	local misc = { adornments = {} }
	local ragebot = { flip = false, teleportpath = {path = nil, last = tick(), current = 1}}
	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
		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.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
	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

	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:shoot(true)
			task.wait()
			client.logic.currentgun:shoot(false)
			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
				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
			local updater = client.fakeupdater;

			if (updater) then
				local character = updater.died();

				if (character) then
					character:Destroy()
				end
			end

			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 lighting = game.Lighting
		local defaults = lighting.MapLighting

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

		client.sateffect:Destroy()

		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

	-- 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 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", "弗吉艾尺艾杰开", "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

			local Parts = Body.torso.Parent:GetChildren()
			for k1 = 1, #Parts do
				Part = Parts[k1]
				------debug.profilebegin("renderChams " .. player.Name)
				if not Part:IsA("Folder") and 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") and not Part:IsA("Folder") 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 destroyDeadChams()
		for _, body in next, workspace.Ignore.DeadBody:GetChildren() do
			for _, part in next, body:GetChildren() do
				if (part:FindFirstChild("c88")) then
					coroutine.wrap(function()
						local highlight = part.c88;
						local fade_time = menu:GetVal("Visuals", "ESP Settings", "ESP Fade Time");
						if fade_time ~= 0 then
							for transparency = highlight.Transparency, 1, (0.01 / fade_time) do
								highlight.Transparency = transparency;
								task.wait();
							end
						end

						highlight:Destroy();
					end)();
				end

				if (part:FindFirstChild("c99")) then
					coroutine.wrap(function()
						local highlight = part.c99;
						local fade_time = menu:GetVal("Visuals", "ESP Settings", "ESP Fade Time");
						if fade_time ~= 0 then
							for transparency = highlight.Transparency, 1, (0.01 / fade_time) do
								highlight.Transparency = transparency;
								task.wait();
							end
						end

						highlight:Destroy();
					end)();
				end
			end
		end
	end

	local function renderChams()
		------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.torso 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 arguements = { ... }
				if self == workspace and namecallmethod == "FindPartsInRegion3" then
					if menu.spectating then
						arguements[2] = workspace.CurrentCamera
					end
					return oldNamecall(self, unpack(arguements))
				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.torso)
					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 > 10 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)
			local origin = origin or client.cam.cframe.p
			if not part then
				ragebot.silentVector = nil
				ragebot.firepos = nil
				if ragebot.target then
					renderChamsOnPlayer(ragebot.target)
				end
				ragebot.target = nil
				ragebot.shooting = false
				return
			end

			local position = (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 = 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

		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 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.torso.CFrame)
							local resolved = false

							if resolvedPosition then
								menu.parts.resolverHitbox.Position = resolvedPosition
								resolved = true
								newhitboxshift = false
							end
							local bone = curbodyparts.torso
							realbone = curbodyparts[hitboxPriority]
							if bone.ClassName == "Part" then
								local newbone = realbone
								if resolved then
									newbone = menu.parts.resolverHitbox
									self.intersection = menu.parts.resolverHitbox.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
			--debug.profileend("BB self GetTarget")

			return cpart, theplayer, closest, firepos, head
		end

		function ragebot:GetKnifeTargets(flight)
			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.torso.Position
					local target_direction = target_pos - client.cam.cframe.p
					local target_dist = (target_pos - client.cam.cframe.p).Magnitude
					if not flight then
						if range ~= 26 and target_dist > range then
							continue
						end
					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()
				elseif knifetype == 5 then
					ragebot:TeleportAura()
				end
			end
		end

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

			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 * math.random(50, 125)

				return ragebot:KnifeAura()
			end
		end

		function ragebot:TeleportAura()
			if (tick() - ragebot.teleportpath.last) >= 1 then
				local targets = ragebot:GetKnifeTargets(true)

				for i, target in pairs(targets) do
					if target.insight then
						--LOCAL_PLAYER.Character.HumanoidRootPart.Anchored = false
						--LOCAL_PLAYER.Character.HumanoidRootPart.Velocity = target.direction.Unit * math.random(50, 125)
						--
						return ragebot:KnifeAura()
					else
						if ragebot.teleportpath.path and not ragebot.teleportpath.path[ragebot.teleportpath.current] then
							ragebot.teleportpath.path = nil
						end
						--
						if not ragebot.teleportpath.path then
							local path = game:GetService("PathfindingService"):FindPathAsync(client.cam.cframe.p, client.replication.getbodyparts(target.player).torso.CFrame.Position)
							local waypoints = path:GetWaypoints()
							local currentpath = {}
							--
							for Index, Value in pairs(waypoints) do
								--if Index % 2 == 1 then
									currentpath[#currentpath + 1] = Value
								--end
							end
							--
							ragebot.teleportpath.path = currentpath
							ragebot.teleportpath.current = 1
						end
						--
						if ragebot.teleportpath.path[ragebot.teleportpath.current] then
                            local pos = ragebot.teleportpath.path[ragebot.teleportpath.current].Position
                            local direction = (pos - client.cam.cframe.p)
                            local distance = direction.Magnitude
                            local unit = direction.Unit
                            local vel = direction
                            --
                            LOCAL_PLAYER.Character.HumanoidRootPart.Anchored = false
						    LOCAL_PLAYER.Character.HumanoidRootPart.CFrame = CFrame.new(pos)
							--
							ragebot.teleportpath.current = ragebot.teleportpath.current + 1
							ragebot.teleportpath.last = tick()
						end
					end
				end
			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, target.part.Name)
			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 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 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 = ragebot:GetTarget(prioritizedpart, priority_list)
						if not targetPart and not menu:GetVal("Misc", "Extra", "Target Only Priority Players") then
							targetPart, targetPlayer, fov, firepos, head = ragebot:GetTarget(prioritizedpart, playerlist)
						end
						ragebot:AimAtTarget(targetPart, targetPlayer, head, firepos, resolved)
					end
				else
					self.target = nil
				end
			end
		end

		ragebot.stance = "prone"
		ragebot.sprint = false
		ragebot.stancetick = tick()
		function ragebot:Stance()
			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

	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

    for hash, func in next, clienteventfuncs do
        local curconstants = getconstants(func)
        local found = table.find(curconstants, "Trigger")
		local found5 = table.find(curconstants, "Votekick ")
		local found6 = table.find(curconstants, " studs")
		local found7 = table.find(curconstants, "setstance")
        local found9 = table.find(curconstants, "kickweapon")
        local found10 = table.find(curconstants, "equip")
        local found11 = table.find(curconstants, "equipknife")
		if found then
			clienteventfuncs[hash] = function(thrower, gtype, gdata, wdata, gtime)
				if thrower.team ~= LOCAL_PLAYER.Team or thrower == LOCAL_PLAYER then
					local frames = gdata
					local startT = frames[1].t
					local endFrame = frames[#frames]
					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}
						for _, frame in next, frames do
							create_outlined_square(frame.p, (frame.t - startT), colorz)
						end
					end

					if menu:GetVal("Visuals", "Dropped ESP", "Grenade Warning") then
						table.insert(menu.activenades, {
							type = gtype,
							thrower = thrower.Name,
							blowupat = endFrame.p,
							blowuptick = endFrame.t, -- might need to be tested more
							start = startT
						})
					end
				end
				return func(thrower, gtype, gdata, wdata, gtime)
			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", "Sounds", "Kill Sound") then
						local soundid = menu:GetVal("Misc", "Sounds", "killsoundid")
						local soundEmpty = soundid == ""
						soundid = soundEmpty and "rbxassetid://5709456554" 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", "Sounds", "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.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 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
    end

    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
			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
	do
		local tween = game:service("TweenService")

		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

		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((menu:GetVal("Visuals", "Extra", "Bullet Tracers", COLOR)[4]/255),(menu:GetVal("Visuals", "Extra", "Bullet Tracers", COLOR)[4]/255))
			beam.Color = ColorSequence.new(menu:GetVal("Visuals", "Extra", "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 transp = 1 - (menu:GetVal("Visuals", "Extra", "Bullet Tracers", COLOR)[4]/255)
					local transparency = transp + (((time - self.beams[i].time) - 2) * (1 - transp))
					self.beams[i].beam.Transparency = NumberSequence.new(transparency, transparency)
				else
					table.remove(self.beams, i)
				end
			end
		end

		function misc:Teleport(newpos)
			if not client.char.alive then return end
			local rootparts = { LOCAL_PLAYER.Character and client.char.torso, 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
				--
				client.net:send("repupdate", rootpart.Position + Vector3.new(0, client.char.headheight, 0), ragebot.angles, client.net:getTime())
			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

		local weps = {};
		local ignore = {"JUGGUN", "HK417Old", "PAINTBALL GUN", "RAILGUN OLD", "PPK12", "SVK12E", "MG42"};

		for i,v in pairs(game.ReplicatedStorage.Content.ProductionContent.WeaponDatabase:GetChildren()) do
			for Index, Value in pairs(v:GetChildren()) do
				if not table.find(ignore, Value.Name) then
					local WeapData = Value:FindFirstChild("WeaponData")
					--
					if WeapData and WeapData:IsA("ModuleScript") then
						weps[Value.Name] = require(WeapData);
					end
				end
			end
		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")

			local currentGun = client.logic.currentgun

			if (not currentGun or not currentGun.data) then
				return
			end

			local oldData = weps[currentGun.name];

			if (currentGun.data) then
				local data = debug.getupvalue(currentGun.nextfiremode, 3);
				local data2 = debug.getupvalue(currentGun.nextfiremode, 2);

				local function createMod(Index, Value)
					if (data[Index] ~= nil) then
						data[Index] = Value;
					end

					if (data2[Index] ~= nil) then
						data2[Index] = Value;
					end
				end
                --
                if menu:GetVal("Misc", "Weapon Modifications", "Infinite Ammo") then
                	debug.setupvalue(currentGun.memes, 1, 9999)
                	debug.setupvalue(currentGun.memes, 3, 9999)
				end
				debug.setupvalue(currentGun.memes, 4, mods_enabled and (oldData.variablefirerate and oldData.firerate[1] * firerate_scale or oldData.firerate * firerate_scale) or (oldData.variablefirerate and oldData.firerate[1] or oldData.firerate));
				debug.setupvalue(currentGun.memes, 5, (mods_enabled and fully_auto) and { true, 1, 3 } or oldData.firemodes);

				createMod("equipspeed", (mods_enabled and instant_equip) and 999999 or oldData.equipspeed);
				createMod("hipfirespread", mods_enabled and oldData.hipfirespread * recoil_scale or oldData.hipfirespread);
				createMod("rotkickmin", mods_enabled and oldData.rotkickmin * recoil_scale or oldData.rotkickmin);
				createMod("rotkickmax", mods_enabled and oldData.rotkickmax * recoil_scale or oldData.rotkickmax);
				createMod("transkickmin", mods_enabled and oldData.transkickmin * recoil_scale or oldData.transkickmin);
				createMod("transkickmax", mods_enabled and oldData.transkickmax * recoil_scale or oldData.transkickmax);
				createMod("camkickmin", mods_enabled and oldData.camkickmin * recoil_scale or oldData.camkickmin);
				createMod("camkickmax", mods_enabled and oldData.camkickmax * recoil_scale or oldData.camkickmax);
				createMod("aimrotkickmin", mods_enabled and oldData.aimrotkickmin * recoil_scale or oldData.aimrotkickmin);
				createMod("aimrotkickmax", mods_enabled and oldData.aimrotkickmax * recoil_scale or oldData.aimrotkickmax);
				createMod("aimtranskickmin", mods_enabled and oldData.aimtranskickmin * recoil_scale or oldData.aimtranskickmin);
				createMod("aimtranskickmax", mods_enabled and oldData.aimtranskickmax * recoil_scale or oldData.aimtranskickmax);
				createMod("aimcamkickmin", mods_enabled and oldData.aimcamkickmin * recoil_scale or oldData.aimcamkickmin);
				createMod("aimcamkickmax", mods_enabled and oldData.aimcamkickmax * recoil_scale or oldData.aimcamkickmax);
			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,
			})
		end
		menu.connections.button_pressed_pf = ButtonPressed:connect(function(tab, gb, name)
			if name == "Join New Game" then
				local Servers = game.HttpService:JSONDecode(game:HttpGet(("https://games.roblox.com/v1/games/%s/servers/Public?sortOrder=Asc&limit=100"):format(game.PlaceId)))
				--
				for Index, Value in pairs(Servers.data) do
					if Value.playing ~= Value.maxPlayers and Value.playing > 10 then
						TELEPORT_SERVICE:TeleportToPlaceInstance(game.PlaceId, Value.id)
					end
				end
			end

			if name == "Votekick" then
				local rank = 100--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$") 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)
		do
			local updC = client.char.updatecharacter; client.char.updatecharacter = function(spawnPosition)
				updC(spawnPosition);

				debug.setupvalue(client.loadplayer, 1, nil);
				local updater = client.loadplayer(LOCAL_PLAYER);
				debug.setupvalue(client.loadplayer, 1, LOCAL_PLAYER);

				if (updater) then
					updater.spawn(spawnPosition);

					local upvalues = debug.getupvalues(updater.step);

					for _, data in next, upvalues do
						if (typeof(data) == "table" and rawget(data, "makesound")) then
							data.makesound = false;
							break
						end
					end

					client.fakereceiver = upvalues[3];
					client.fakecharacter = debug.getupvalue(updater.spawn, 3);
					client.fakeupdater = updater;
				end

				client.characterParts = nil;

				local character = client.fakecharacter;
				local parts = {};
				local backup = {};
				local isA = game.IsA;

				for _, child in next, character:getDescendants() do
					if (isA(child, "BasePart") and child.Transparency == 0) then
						parts[#parts + 1] = child;
					elseif (isA(child, "Texture")) then
						parts[#parts + 1] = child;
					elseif (isA(child, "Decal")) then
						parts[#parts + 1] = child;
					elseif (isA(child, "SpecialMesh")) then
						parts[#parts + 1] = child;
					end
				end

				for _, part in next, parts do
					backup[#backup + 1] = part:Clone();
				end

				character.DescendantAdded:Connect(function(child)
					local prevAmount = #parts;

					if (isA(child, "BasePart") and child.Transparency == 0) then
						parts[#parts + 1] = child;
					elseif (isA(child, "Texture")) then
						parts[#parts + 1] = child;
					elseif (isA(child, "Decal")) then
						parts[#parts + 1] = child;
					elseif (isA(child, "SpecialMesh")) then
						parts[#parts + 1] = child;
					end

					if (#parts ~= prevAmount) then
						backup[#backup + 1] = child;
					end
				end);

				client.characterParts = { parts = parts, backup = backup };
			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

		client.char.ondied:Connect(function()
			local updater = client.fakeupdater;

			if (updater) then
				local character = updater.died();

				if (character) then
					character:Destroy();
				end
			end

			client.fakeupdater = nil;
			client.fakereceiver = nil;
			client.fakecharacter = nil;
			client.characterParts = nil;
		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.torso.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.torso.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.torso.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()
			rootpart = LOCAL_PLAYER.Character and client.char.rootpart
			humanoid = LOCAL_PLAYER.Character and LOCAL_PLAYER.Character:FindFirstChild("Humanoid")
			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
				misc:ApplyGunMods()
			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, Vector3.new())
						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 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, Vector3.new())
								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
							local Servers = game.HttpService:JSONDecode(game:HttpGet(("https://games.roblox.com/v1/games/%s/servers/Public?sortOrder=Asc&limit=100"):format(game.PlaceId)))
							--
							for Index, Value in pairs(Servers.data) do
								if Value.playing ~= Value.maxPlayers then
									TELEPORT_SERVICE:TeleportToPlaceInstance(game.PlaceId, Value.id)
								end
							end
						end
						return
					end
					if not menu.debugged then
						CreateNotification(message)
					end
					return
				end
				if args[1] == "repupdate" then
					if 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" then
					if menu:GetVal("Misc", "Sounds", "Hit Sounds") then
						local Hit = args[4]
						--
						local soundid
						local soundEmpty
						local soundid
						--
						if tostring(Hit) == "Head" and menu:GetVal("Misc", "Sounds", "Head Hit Sound") then
							soundid = menu:GetVal("Misc", "Sounds", "headhitsoundid")
							soundEmpty = soundid == ""
							soundid = soundEmpty and "rbxassetid://5043539486" or soundid
						else
							soundid = menu:GetVal("Misc", "Sounds", "bodyhitsoundid")
							soundEmpty = soundid == ""
							soundid = soundEmpty and "rbxassetid://3744371342" or soundid
						end
						--
						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

						if menu:GetVal("Misc", "Sounds", "Head Hit Sound") or menu:GetVal("Misc", "Sounds", "Body Hit Sound") then
							client.sound.PlaySoundId(
								soundid,
								menu:GetVal("Misc", "Sounds", "Hit Sound Volume") / 10,
								1.0,
								workspace,
								nil,
								0,
								0.03
							)
						end
					end
					--
					if menu:GetVal("Misc", "Extra", "Suppress Only") then
						return
					end
				end
				if args[1] == "bullethit" or args[1] == "knifehit" then
					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] == "newbullets" then

					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
						ragebot.lasthittime = ragebot.time
						ragebot.lasthittick = tick()
						send(self, unpack(args))

						for k = 1, #args[2].bullets do
							local bullet = args[2].bullets[k]
							if menu:GetVal("Visuals", "Extra", "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.Name,
								bullet[2],
							}
							client.hud:firehitmarker(ragebot.targetpart.Name == "Head")
							client.sound.PlaySound("hitmarker", nil, 1, 1.5)
							send(self, "bullethit", unpack(hitinfo))
						end
						return
					else
						if menu:GetVal("Visuals", "Extra", "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
				elseif args[1] == "stab" then
					syn.set_thread_identity(1)
					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] == "repupdate" then
					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

						if menu:GetVal("Rage", "Anti Aim", "Hide in Floor") then
							args[2] = args[2] - Vector3.new(0, 1, 0)
						end

						new_angles = new_angles or Vector2.new(clamp(pitch, 1.5, -1.5), yaw)
						args[3] = new_angles
						ragebot.angles = new_angles
					else
						ragebot.angles = args[3]
					end

					local updater = client.fakeupdater;

					if (updater) then
						local position, time = args[2], args[4];
						local reset, frame, velocity = false, self:getTime(), emptyVector3;

						if (updater.receivedPosition and updater.receivedFrameTime) then
							velocity = (position - updater.receivedPosition) / (time - updater.receivedFrameTime);
						end

						if (updater.lastPacketTime and (frame - updater.lastPacketTime) > 0.5) then
							reset = true;
							updater.breakcount = updater.breakcount + 1;
						end

						client.fakereceiver:receive(frame, time, {
							t = time,
							position = position,
							velocity = velocity,
							angles = args[3],
							breakcount = updater.breakcount
						}, reset);

						updater.updaterecieved = true;
						updater.receivedPosition = position;
						updater.receivedFrameTime = time;
						updater.lastPacketTime = frame;
					end
				end
				local updater = client.fakeupdater;
				if (updater) then
					local name = args[1];

					if (name == "aim") then
						updater.setaim(args[2]);
					end

					if (name == "sprint") then
						updater.setsprint(args[2]);
					end

					if (name == "stance") then
						updater.setstance(args[2]);
					end

					if (name == "stab") then
						updater.stab();
					end

					if (name == "equip") then
						local currentGun = client.logic.currentgun;
						local gunName = currentGun.name;
						local WeaponDatabase = game.ReplicatedStorage.Content.ProductionContent.WeaponDatabase;
						local WeaponStuff
						--
						for Index, Value in pairs(WeaponDatabase:GetChildren()) do
							if Value:FindFirstChild(gunName) then
								WeaponStuff = Value:FindFirstChild(gunName)
							end
						end
						--
						local data, model = require(WeaponStuff:FindFirstChild("WeaponData")), WeaponStuff:FindFirstChild("External");

						if (data and model) then
							if (data.type == "KNIFE") then
								updater.equipknife(data, model);
							else
								updater.equip(data, model);
							end
						end
					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 not 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).torso
							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).torso
						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
				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
						--debug.profileend("Legitbot Triggerbot")
					end
				end
			end

			local newpart = client.particle.new
			setreadonly(client.particle, false)
			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.velocity = ragebot.silentVector.Unit * mag
						P.visualorigin = ragebot.firepos
						P.position = P.visualorigin + P.velocity
						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 hookf
			local lastsaturtation = Color3.fromRGB(140, 145, 145)
			client.lastPlayerPositions = {}

			local saturationEffect = Instance.new("ColorCorrectionEffect", game.Lighting)

			local skyboxes = {
				[1] = {
					["SkyboxBk"] = "rbxassetid://159454299",
					["SkyboxDn"] = "rbxassetid://159454296",
					["SkyboxFt"] = "rbxassetid://159454293",
					["SkyboxLf"] = "rbxassetid://159454286",
					["SkyboxRt"] = "rbxassetid://159454300",
					["SkyboxUp"] = "rbxassetid://159454288"
				},
				[2] = {
					["SkyboxBk"] = "rbxassetid://12064107",
					["SkyboxDn"] = "rbxassetid://12064152",
					["SkyboxFt"] = "rbxassetid://12064121",
					["SkyboxLf"] = "rbxassetid://12063984",
					["SkyboxRt"] = "rbxassetid://12064115",
					["SkyboxUp"] = "rbxassetid://12064131"
				},
				[3] = {
					["SkyboxBk"] = "rbxassetid://271042516",
					["SkyboxDn"] = "rbxassetid://271077243",
					["SkyboxFt"] = "rbxassetid://271042556",
					["SkyboxLf"] = "rbxassetid://271042310",
					["SkyboxRt"] = "rbxassetid://271042467",
					["SkyboxUp"] = "rbxassetid://271077958"
				},
				[4] = {
					["SkyboxBk"] = "rbxassetid://1417494030",
					["SkyboxDn"] = "rbxassetid://1417494146",
					["SkyboxFt"] = "rbxassetid://1417494253",
					["SkyboxLf"] = "rbxassetid://1417494402",
					["SkyboxRt"] = "rbxassetid://1417494499",
					["SkyboxUp"] = "rbxassetid://1417494643"
				},
				[5] = {
					["SkyboxBk"] = "rbxassetid://626460377",
					["SkyboxDn"] = "rbxassetid://626460216",
					["SkyboxFt"] = "rbxassetid://626460513",
					["SkyboxLf"] = "rbxassetid://626473032",
					["SkyboxRt"] = "rbxassetid://626458639",
					["SkyboxUp"] = "rbxassetid://626460625"
				},
				[6] = {
					["SkyboxBk"] = "rbxassetid://153695414",
					["SkyboxDn"] = "rbxassetid://153695352",
					["SkyboxFt"] = "rbxassetid://153695452",
					["SkyboxLf"] = "rbxassetid://153695320",
					["SkyboxRt"] = "rbxassetid://153695383",
					["SkyboxUp"] = "rbxassetid://153695471"
				},
				[7] = {
					["SkyboxBk"] = "rbxassetid://153767241",
					["SkyboxDn"] = "rbxassetid://153767216",
					["SkyboxFt"] = "rbxassetid://153767266",
					["SkyboxLf"] = "rbxassetid://153767200",
					["SkyboxRt"] = "rbxassetid://153767231",
					["SkyboxUp"] = "rbxassetid://153767288"
				},
				[8] = {
					["SkyboxBk"] = "rbxassetid://218955819",
					["SkyboxDn"] = "rbxassetid://218953419",
					["SkyboxFt"] = "rbxassetid://218954524",
					["SkyboxLf"] = "rbxassetid://218958493",
					["SkyboxRt"] = "rbxassetid://218957134",
					["SkyboxUp"] = "rbxassetid://218950090"
				},
				[9] = {
					["SkyboxBk"] = "rbxassetid://401664839",
					["SkyboxDn"] = "rbxassetid://401664862",
					["SkyboxFt"] = "rbxassetid://401664960",
					["SkyboxLf"] = "rbxassetid://401664881",
					["SkyboxRt"] = "rbxassetid://401664901",
					["SkyboxUp"] = "rbxassetid://401664936"
				},
			}

			local skybox = Instance.new("Sky")
			skybox.Name = "cs"
			skybox.CelestialBodiesShown = false
			skybox.MoonTextureId = ""
			skybox.SunTextureId = ""
			skybox.StarCount = 0

			client.sateffect = saturationEffect
			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", "Extra", "Crosshair Color", COLOR1, true)
						local outline = menu:GetVal("Visuals", "Extra", "Crosshair Color", COLOR2, true)
						local enabled = menu:GetVal("Visuals", "Extra", "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")
				--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

				local sky = game.Lighting:FindFirstChildOfClass("Sky")

				if (sky) then
					local newSky = skyboxes[menu:GetVal("Visuals", "World", "Skybox")]

					if (newSky) then
						if (not client.oldSkybox or client.oldSkybox.SkyboxBk ~= sky.SkyboxBk and sky.SkyboxBk ~= "") then
							client.oldSkybox = {}

							for i,v in pairs(newSky) do
								client.oldSkybox[i] = sky[i]
							end
						end

						local enabled = menu:GetVal("Visuals", "World", "Skybox Changer")

						skybox.Parent = enabled and game.Lighting or nil

						for i,v in pairs(newSky) do
							skybox[i] = enabled and v or ""
							sky[i] = enabled and "" or client.oldSkybox[i]
						end
					end
				end

				--
				saturationEffect.Enabled = menu.options["Visuals"]["World"]["Custom Saturation"][1]
				saturationEffect.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]
				)
				saturationEffect.Saturation = menu.options["Visuals"]["World"]["Saturation Density"][1] / 50

				--]]
				--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", "Extra", "Pointer")
				then
					local viewport = workspace.CurrentCamera.ViewportSize
					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, normal = workspace:FindPartOnRayWithIgnoreList(Ray.new(barrel.Position, trigger.CFrame.LookVector * 100), ignore, false, true)
						local size = menu:GetVal("Visuals", "Extra", "Pointer Size")
						local offset = menu:GetVal("Visuals", "Extra", "Pointer Offset")
						local color = menu:GetVal("Visuals", "Extra", "Pointer", COLOR, true)
						local transparency = menu:GetVal("Visuals", "Extra", "Pointer", COLOR)[4]/255
						--
						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.inner[1].Transparency = transparency
						menu.crosshair.inner[2].Transparency = transparency
						menu.crosshair.outline[1].Transparency = transparency
						menu.crosshair.outline[2].Transparency = transparency

						menu.crosshair.outline[1].Size = Vector2.new(size * 2 + 3, 3)
						menu.crosshair.outline[2].Size = Vector2.new(3, size * 2 + 3)
						local hit2d = menu:GetVal("Visuals", "Extra", "Show Recoil") and Camera:WorldToViewportPoint(hitpos + normal * 0.01) or Vector2.new(viewport.X / 2, viewport.Y / 2)
						local x, y = hit2d.x, hit2d.y

						menu.crosshair.inner[1].Position = Vector2.new(x - size, y)
						menu.crosshair.inner[2].Position = Vector2.new(x, y - size)
						menu.crosshair.outline[1].Position = Vector2.new(x - size - 1, y - 1)
						menu.crosshair.outline[2].Position = Vector2.new(x - 1, 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.head.Parent

								torso = parts.torso.CFrame
								rootpart = parts.torso.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.torso.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
									)
									allesp[3][5][curplayer].Font = 2
                                    allesp[3][5][curplayer].Size = 13
                                    spoty += 13
								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
									)
									allesp[3][6][curplayer].Font = 2
                                    allesp[3][6][curplayer].Size = 13
                                    spoty += 13
								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
										)
										allesp[3][4][curplayer].Font = 2
                                        allesp[3][4][curplayer].Size = 13
                                        spoty += 13
									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

									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 = player.Character:FindFirstChild("Torso")
									if torso then
									local torsop = Camera:WorldToViewportPoint(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(torsop.x, torsop.y)
										line.Visible = true
									end
									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 torso = player.Character:FindFirstChild("Torso")
									if torso then
									    local Tri = allesp[5][i][curplayer]

    									local rootpartpos = torso.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
								end
								--debug.profileend("renderVisuals Player ESP Render Out of View " .. playername)
							end
						end
					end
					if menu:GetVal("Visuals", "Extra", "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", "Extra", "Enemy Spawns", COLOR)[4]/255
								allesp[11][2][i].Color = menu:GetVal("Visuals", "Extra", "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", "Interface", "Fov Circles") then -- fov circles
						local fovcircles = allesp[9]
						if menu:GetVal("Visuals", "Interface", "Aim Assist") then
							local col = menu:GetVal("Visuals", "Interface", "Aim Assist", COLOR, true)
							local transparency = menu:GetVal("Visuals", "Interface", "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 not 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", "Interface", "Aim Assist Deadzone") then
							local col = menu:GetVal("Visuals", "Interface", "Aim Assist Deadzone", COLOR, true)
							local transparency = menu:GetVal("Visuals", "Interface", "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 not 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", "Interface", "Bullet Redirection") then
							local col = menu:GetVal("Visuals", "Interface", "Bullet Redirection", COLOR, true)
							local transparency = menu:GetVal("Visuals", "Interface", "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 not 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", "Interface", "Ragebot") then
							local col = menu:GetVal("Visuals", "Interface", "Ragebot", COLOR, true)
							local transparency = menu:GetVal("Visuals", "Interface", "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.lastrepupdate or Vector3.new()
							local delta = (nade.blowupat - headpos)
							local nade_dist = delta.Magnitude
							local currentTick = client.net:getTime()
							local nade_percent = (currentTick - 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 data = weps[nade.type]
								local d0 = data.damage0 -- max damage
								local d1 = data.damage1 -- min damage
								local r0 = data.range0 -- maximum range before the damage starts dropping off due to distance
								local r1 = data.range1 -- 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
									local enabled = menu:GetVal("Visuals", "Local", "Third Person") and menu:GetKey("Visuals", "Local", "Third Person");
									if armcham then
										if not enabled then
											v1.Transparency = 0.999999 + (
													menu:GetVal("Visuals", "Local", "Arm Chams", COLOR2)[4] / -255
												)
										else
											v1.Transparency = 0.999999
										end
									else
										if not enabled 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
										local enabled = menu:GetVal("Visuals", "Local", "Third Person") and menu:GetKey("Visuals", "Local", "Third Person");
										if armcham then
											if not enabled then
												v1.Transparency = 0.999999 + (
														menu:GetVal("Visuals", "Local", "Arm Chams", COLOR1)[4] / -255
													)
											else
												v1.Transparency = 0.999999
											end
										else
											if not enabled 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
									local enabled  = menu:GetVal("Visuals", "Local", "Third Person") and menu:GetKey("Visuals", "Local", "Third Person");
									if wepcham then
										if not enabled then
											v1.Transparency = 0.999999 + (
													menu:GetVal("Visuals", "Local", "Weapon Chams", COLOR1)[4] / -255
												)
										else
											v1.Transparency = 0.999999
										end
									else
										if not enabled then
											v1.Transparency = client.logic.currentgun.transparencydata and client.logic.currentgun.transparencydata[v1] or 0
										else
											v1.Transparency = 0.999999
										end
									end
								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
											)
										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.Scope.ImageColor3 = color
											v1.SurfaceGui.Border.Scope.ImageTransparency = transparency
											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", "Interface", "Keybinds List") then
					local texts = allesp[10]
					local listsizes = menu:GetVal("Visuals", "Interface", "Use List Sizes")
					local posy = math.ceil(SCREEN_SIZE.y * menu:GetVal("Visuals", "Interface", "Keybinds List Y") / 100)
					local margin = posy
					local posx = math.ceil(math.max(menu.stat_menu and 330 or 10, SCREEN_SIZE.x * menu:GetVal("Visuals", "Interface", "Keybinds List X") / 100))
					local col = menu:GetVal("Visuals", "Interface", "Keybinds List", COLOR, true)
					local transparency = menu:GetVal("Visuals", "Interface", "Keybinds List", COLOR)[4] / 255
					local newtexts = {}
					for i = 1, #menu.keybinds do
						local keybind = menu.keybinds[i]
						local box1 = texts[1][i]
						local box = texts[2][i]
						local box2 = texts[3][i]
						local box3 = texts[5][i]
						local text = texts[4][i]
						if keybind and keybind[1] and menu:GetVal(keybind[4], keybind[3], keybind[2]) and menu:GetKey(keybind[4], keybind[3], keybind[2])
						then
							table.insert(newtexts, keybind[3] .. ": " .. keybind[2])
						end
						text.Visible = false
						if box then
							box.Visible = false
						end
						box1.Visible = false
						box2.Visible = false
						box3.Visible = false
					end
					table.sort(newtexts, function(s, s1)
						return #s > #s1
					end) -- i hate this shit
					table.insert(newtexts, 1, "Keybinds")
					local maxwidth = Vector2.new(0, 0)
					local maxwidth2 = Vector2.new(0, 0)
					for i = 1, #newtexts do
						local text = texts[4][i]
						text.Center = false
						text.Text = newtexts[i]
						if i <= 1 then
							local newthing = Vector2.new(text.TextBounds.x + 4, text.TextBounds.y)
							if newthing.x > maxwidth.x then
								maxwidth = newthing
							end
						end
						if i <= 2 then
							local newthing = Vector2.new(text.TextBounds.x + 4, text.TextBounds.y)
							if newthing.x > maxwidth2.x then
								maxwidth2 = newthing - maxwidth
							end
						end
					end
					for i = 1, #newtexts do
						local box1 = texts[1][i]
						local box3 = texts[5][i]
						local box = texts[3][i]
						local text = texts[4][i]
						text.Position = Vector2.new(posx + 2, margin)
						text.Color = i ~= 1 and col or Color3.new(1, 1, 1)
						text.Transparency = transparency
						text.Visible = true
						box.Position = Vector2.new(posx, margin)
						box.Visible = true
						box1.Position = Vector2.new(posx - 1, margin - 3)
						box1.Visible = true
						box1.Color = Color3.new(0, 0, 0)-- THIS IS FUCKING STUPID
						box3.Visible = true
						box3.Color = Color3.new(0, 0, 0)
						box3.Transparency = 0.4
						if listsizes then
							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)
							box1.Size = text.TextBounds + Vector2.new(6, 7)
							box3.Size = Vector2.new(text.TextBounds.x + w, h)
							box3.Position = Vector2.new(x, y)
						else
							box.Size = maxwidth + maxwidth2 + Vector2.new(0, 3)
							box1.Size = maxwidth + maxwidth2 + Vector2.new(2, 7)
							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)
							box3.Position = Vector2.new(posx - 2, (i == 1) and margin - 4 or i == #newtexts and margin + 1 or margin)
						end
						margin += 15
					end
					for i = 1, 15 do
						local box = texts[2][i]
						box.Position = Vector2.new(posx, posy + i - 1)
						box.Size = Vector2.new(maxwidth.x + ((not listsizes) and maxwidth2.x or 0), 1)
						box.Visible = true
					end
					for i = 1, 2 do
						local k = i + 15
						local box = texts[2][k]
						local color = (menu:GetVal("Settings", "Cheat Settings", "Menu Accent") and menu:GetVal("Settings", "Cheat Settings", "Menu Accent", COLOR, true) or Color3.fromRGB(100, 100, 225))
						color = i == 1 and color or Color3.fromRGB(color.R * 255 - 40, color.G * 255 - 40, color.B * 255 - 40) -- super shit
						box.Color = color
						box.Position = Vector2.new(posx, posy + i - 3)
						box.Size = Vector2.new(maxwidth.x+((not listsizes) and maxwidth2.x or 0), 1)
						box.Visible = true
					end
					if listsizes then
						for i = 1, 2 do
							local k = i + 17
							local box = texts[2][k]
							local color = (menu:GetVal("Settings", "Cheat Settings", "Menu Accent") and menu:GetVal("Settings", "Cheat Settings", "Menu Accent", COLOR, true) or Color3.fromRGB(100, 100, 225))
							color = i == 1 and color or Color3.fromRGB(color.R * 255 - 40, color.G * 255 - 40, color.B * 255 - 40) -- super shit
							box.Color = color
							box.Position = Vector2.new(posx+maxwidth.x + 1, posy + i + 12)
							box.Size = Vector2.new(maxwidth2.x - 1, 1)
							box.Visible = maxwidth2.x ~= 0
						end
					end
				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.NonScaled.ScopeFrame
					--
					if 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 = #thing.Name ~= 1 and not menu:GetVal("Visuals", "Camera Visuals", "No Scope Border") or false
								end
							end
							frame.SightFront.Visible = not menu:GetVal("Visuals", "Camera Visuals", "No Scope Border")
							sightRear.ImageTransparency = 1
						end
					end
				end
				--debug.profileend("renderVisuals No Scope")
			end

			menu.connections.deadbodychildadded = workspace.Ignore.DeadBody.ChildAdded:Connect(function(newchild)
				if menu:GetVal("Visuals", "Extra", "Ragdoll Chams") then
					local children = newchild:GetDescendants()
					for i = 1, #children do
						local curvalue = children[i]

						if curvalue:IsA("BasePart") then
							matname = mats[menu:GetVal("Visuals", "Extra", "Ragdoll Material")]

							curvalue.Material = Enum.Material[matname]
							curvalue.Transparency = 1 - menu:GetVal("Visuals", "Extra", "Ragdoll Chams", COLOR)[4]/255
							curvalue.Color = menu:GetVal("Visuals", "Extra", "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")
							local ShirtTexture = curvalue:FindFirstChild("Shirt")
							if pant then
								pant:Destroy()
							end
							if mesh then
								mesh:Destroy()
							end
							if ShirtTexture then
								ShirtTexture: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
					return Enum.ContextActionResult.Pass
				end
			end

			game:service("ContextActionService"):BindAction("BB PF check", pfkeycheck, false, Enum.UserInputType.Keyboard)

			local FoundThing = table.find(getconstants(client.cam.step), 0.5)
			menu.connections.renderstepped_pf = game.RunService.RenderStepped:Connect(function(dt)
				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 menu:GetVal("Misc", "Extra", "Auto Respawn") and not client.menu:isdeployed() then
					client.menu:deploy() -- this is uber ass
				end
				--debug.profileend("Noclip Cheat check")

				----debug.profilebegin("BB Rendering")
				do --rendering
					renderVisuals(dt)
					--
					if FoundThing then
						setconstant(
							client.cam.step,
							FoundThing,
							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 = client.net:getTime()
				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)
				end

				CreateThread(destroyDeadChams)

				----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
									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

				local updater = client.fakeupdater;

				if (updater and updater.alive) then
					updater.step(3, false)
				end

				if (updater) then
					local thirdperson = menu:GetVal("Visuals", "Local", "Third Person") and menu:GetKey("Visuals", "Local", "Third Person");
					local enabled = menu:GetVal("Visuals", "Local", "Local Player Chams");
					local character = client.fakecharacter;
					local characterParts = client.characterParts;
					local isA = game.IsA;

					if (character and characterParts) then
						for index, child in next, characterParts.parts do
							local old = characterParts.backup[index];
							local color = menu:GetVal("Visuals", "Local", "Local Player Chams", COLOR, true);
							local transparency = (1 - (menu:GetVal("Visuals", "Local", "Local Player Chams", COLOR)[4] / 255));
							local material = Enum.Material[mats[menu:GetVal("Visuals", "Local", "Local Player Material")]];

							if (isA(child, "BasePart")) then
								child.Transparency = thirdperson and (enabled and transparency or old.Transparency) or 1;
								child.Material = enabled and material or old.Material;
								child.Color = enabled and color or old.Color;
							elseif (isA(child, "Texture") or isA(child, "Decal")) then
								if (enabled and material == Enum.Material.ForceField) then
									child.Transparency = 1;
								else
									child.Transparency = thirdperson and (enabled and transparency or old.Transparency) or 1;
								end
							elseif (isA(child, "SpecialMesh")) then
								child.VertexColor = enabled and Vector3.new(color.R, color.G, color.B) or old.VertexColor;

								if (child.Parent.Name == "Head") then
									child.TextureId = enabled and child.MeshId or old.TextureId;
								elseif (child.Parent.Name == "Torso") then
									child.TextureId = enabled and "rbxassetid://5614184106" or old.TextureId;
								end
							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 = "%",
								},
							},
						},
						{
							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 = "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.5,
									decimal = 0.1,
									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 = "Freestanding",
									value = false,
									extra = {
										type = KEYBIND,
									},
								},
							},
						},
						{
							name = "Anti Aim",
							x = menu.columns.right,
							y = 66,
							width = menu.columns.width,
							height = 253,
							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.",
								},
							},
						},
						{
							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+", "Teleport Aura" },
									},
									{
										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", true }, { "Level", true }, { "Distance", true }, { "Resolved", 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 = false,
									},
								},
							},
							[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", "Dropped ESP" },
							autopos = "left",
							autofill = true,
							[1] = {
								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"},
									-- }
								},
							},
							[2] = {
								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 = { "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", "Interface", "Extra" },
							subtabfill = true,
							autofill = 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 = "%",
									},
									{
										type = TOGGLE,
										name = "Skybox Changer",
										value = false,
									},
									{
										type = DROPBOX,
										name = "Skybox",
										value = 9,
										values = { "Purple Nebula", "Night Sky", "Pink Daylight", "Morning Glow", "Setting Sun", "Fade Blue", "Elegant Morning", "Neptune", "Redshift" }
									}
								},
							},
							[2] = {
								content = {
									{
										type = TOGGLE,
										name = "Fov Circles",
										value = false,
									},
									{
										type = TOGGLE,
										name = "Aim Assist",
										value = true,
										extra = {
											type = COLORPICKER,
											name = "Aim Assist FOV",
											color = { 155, 155, 255, 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 },
										},
									},
									{
										type = TOGGLE,
										name = "Keybinds List",
										value = false,
										extra = {
											type = COLORPICKER,
											name = "Text Color",
											color = { 155, 155, 255, 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 = "%",
									},
									{
										type = TOGGLE,
										name = "Watermark",
										value = true,
									}
								},
							},
							[3] = {
								content = {
									{
										type = TOGGLE,
										name = "Crosshair Color",
										value = false,
										extra = {
											type = DOUBLE_COLORPICKER,
											name = { "Inline", "Outline" },
											color = { { 155, 155, 255 }, { 25, 25, 25 } },
										},
									},
									{
										type = TOGGLE,
										name = "Pointer",
										value = false,
										extra = {
											type = COLORPICKER,
											name = "Laser Pointer Color",
											color = { 255, 255, 255, 255 },
										},
									},
									{
										type = TOGGLE,
										name = "Show Recoil",
										value = true,
									},
									{
										type = SLIDER,
										name = "Pointer Size",
										value = 6,
										minvalue = 1,
										maxvalue = 20,
										stradd = "px"
									},
									{
										type = SLIDER,
										name = "Pointer Offset",
										value = 0,
										minvalue = 0,
										maxvalue = 25,
										stradd = "px"
									},
									{
										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, 125 },
										},
									},
									{
										type = TOGGLE,
										name = "Enemy Spawns",
										value = false,
										extra = {
											type = COLORPICKER,
											name = "Enemy Spawns",
											color = { 255, 255, 255, 255 }
										}
									}
								}
							}
						},
					},
				},
				{
					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 = 5000,
									stradd = "%",
									tooltip = "Scales all weapons' firerate by X%.\n100% = Normal firerate",
								},
								{
									type = SLIDER,
									name = "Recoil Scale",
									value = 10,
									minvalue = 0,
									maxvalue = 1000,
									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.",
								},
								{
									type = TOGGLE,
									name = "Infinite Ammo",
									value = false,
									tooltip = "Makes it so that your weapon has\ninfinite ammo.",
								},
							},
						},
						{
							name = {"Extra", "Sounds"},
							autopos = "right",
							autofill = true,
							size = 100,
							[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 Say",
										value = false,
										tooltip = "Kill say messages, located in bitchbot/killsay.bb \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.bb",
									},
									{
										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 = "Kill Sound",
										value = false,
									},
									{
										type = TEXTBOX,
										name = "killsoundid",
										text = "5709456554",
										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 = "Hit Sounds",
										value = false,
									},
									{
										type = TOGGLE,
										name = "Head Hit Sound",
										value = false,
									},
									{
										type = TEXTBOX,
										name = "headhitsoundid",
										text = "5043539486",
										tooltip = "The Roblox sound ID or file inside of synapse\n workspace to play when Hit Sound is on.",
									},
									{
										type = TOGGLE,
										name = "Body Hit Sound",
										value = false,
									},
									{
										type = TEXTBOX,
										name = "bodyhitsoundid",
										text = "3744371342",
										tooltip = "The Roblox sound ID or file inside of synapse\n workspace to play when Hit Sound is on.",
									},
									{
										type = SLIDER,
										name = "Hit Sound Volume",
										value = 20,
										minvalue = 0,
										maxvalue = 100,
										stradd = "%",
									},
								},
							},
						},
					},
				},
				{
					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 = "Custom Menu Key",
									value = false,
									extra = {
										type = KEYBIND,
										key = Enum.KeyCode.RightShift,
										toggletype = 1,
									},
								},
								{
									type = TOGGLE,
									name = "Menu Accent",
									value = false,
									extra = {
										type = COLORPICKER,
										name = "Accent Color",
										color = { 155, 155, 255 },
									},
								},
								{
									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
_G.CreateNotification = CreateNotification

Features & Information

it still works, i mean u can still have fun make configs with some legitbot, there are some bugs u may encounter u can comment to me or u figure it out like i did lmao. have fun. edit: script is synapse only sorry.
#****#****#bitchbot#phantom forces

Community Comments (4)

RedoSkyRedoSkyOct 11, 2022(edited)

not working

IDunnoWhatHaxingIsIDunnoWhatHaxingIsOct 11, 2022(edited)

hmmmm, is it like not executable? maybe it's because you don't have synapse my bad. but if you do i don't know if u could specify. sorry for inconvinience i'm new to this

RedoSkyRedoSkyOct 11, 2022(edited)

so... this script is synapse only?

IDunnoWhatHaxingIsIDunnoWhatHaxingIsOct 11, 2022(edited)

unfortunately

More Scripts for Phantom Forces