raven cc leak v2
Key Required Patched

raven cc leak v2

Counter Bloxhvherhvher 1.4K views 53 executesUpdated Jan 20, 2026
5.0/ 5(1 votes)
10100% Positive
Lua Script•12938 lines (486902 chars)
-- hello naix 👋
-- again leak
-- luv you naix 
-- no hating
local disableImageLoading = false
local oldWatermark = false
if getgenv().vaderhaxxpaste then
	return
end
getgenv().vaderhaxxpaste = {}
getgenv().vaderhaxxpaste.loaded = false

local _Instancenew = clonefunction(Instance.new)
local _TweenInfonew = clonefunction(TweenInfo.new)

local _GetService = clonefunction(game.GetService)
local _IsLoaded = clonefunction(game.IsLoaded)
local _Clone = clonefunction(game.Clone)
local _Destroy = clonefunction(game.Destroy)
local _GetChildren = clonefunction(game.GetChildren)
local _GetDescendants = clonefunction(game.GetDescendants)
local _IsDescendantOf = clonefunction(game.IsDescendantOf)
local _IsA = clonefunction(game.IsA)
local _FindFirstChild = clonefunction(game.FindFirstChild)
local _FindFirstChildOfClass = clonefunction(game.FindFirstChildOfClass)
local _HttpGet = clonefunction(game.HttpGet)
local _GetPropertyChangedSignal = clonefunction(game.GetPropertyChangedSignal)
local _GetAttribute = clonefunction(game.GetAttribute)

local _GetPlayers = clonefunction(_GetService(game, "Players").GetPlayers)
local _GetPlayerFromCharacter = clonefunction(_GetService(game, "Players").GetPlayerFromCharacter)
local _GetValue = clonefunction(_GetService(game, "Stats").Network.ServerStatsItem['Data Ping'].GetValue)
local _GetMouseLocation = clonefunction(_GetService(game, "UserInputService").GetMouseLocation)
local _IsKeyDown = clonefunction(_GetService(game, "UserInputService").IsKeyDown)
local _GetMouse = clonefunction(_GetService(game, "Players").LocalPlayer.GetMouse)
local _Kick = clonefunction(_GetService(game, "Players").LocalPlayer.Kick)

local _CFrameNew = clonefunction(CFrame.new)
local _CFrameAngles = clonefunction(CFrame.Angles)
local _CFrameLookAt = clonefunction(CFrame.lookAt)
local _CFrameLerp = clonefunction(_CFrameNew().Lerp)
local _CFramePointToObjectSpace = clonefunction(_CFrameNew().PointToObjectSpace)
local _CFrameToEulerAnglesXYZ = clonefunction(_CFrameNew().ToEulerAnglesXYZ)
local _CFrameToOrientation = clonefunction(_CFrameNew().ToOrientation)

local _Vector3New = clonefunction(Vector3.new)
local _Vector3Lerp = clonefunction(_Vector3New().Lerp)

local _Vector2New = clonefunction(Vector2.new)

local _UDim2New = clonefunction(UDim2.new)
local _UDim2fromOffset = clonefunction(UDim2.fromOffset)
local _UDimNew = clonefunction(UDim.new)

local _Color3New = clonefunction(Color3.new)
local _Color3FromRGB = clonefunction(Color3.fromRGB)
local _Color3FromHSV = clonefunction(Color3.fromHSV)
local _Color3ToHSV = clonefunction(Color3.toHSV)
local _ToHex = clonefunction(_Color3New().ToHex)
local _FromHex = clonefunction(Color3.fromHex)

local _ColorSequenceNew = clonefunction(ColorSequence.new)
local _ColorSequenceKeypointNew = clonefunction(ColorSequenceKeypoint.new)
local _NumberSequenceNew = clonefunction(NumberSequence.new)
local _NumberSequenceKeypointNew = clonefunction(NumberSequenceKeypoint.new)

local _RayNew = clonefunction(Ray.new)
local _RaycastParamsNew = clonefunction(RaycastParams.new)
local _Raycast = clonefunction(workspace.Raycast)

local _StringFormat = clonefunction(string.format)
local _StringUpper = clonefunction(string.upper)
local _StringLower = clonefunction(string.lower)
local _StringFind = clonefunction(string.find)
local _StringLen = clonefunction(string.len)
local _StringGsub = clonefunction(string.gsub)
local _StringSub = clonefunction(string.sub)
local _StringSplit = clonefunction(string.split)
local _tostring = clonefunction(tostring)

local _TableInsert = clonefunction(table.insert)
local _TableRemove = clonefunction(table.remove)
local _TableFind = clonefunction(table.find)
local _TableConcat = clonefunction(table.concat)
local _TableSort = clonefunction(table.sort)
local _TableUnpack = clonefunction(table.unpack)
local _Select = clonefunction(select)

local _MathClamp = clonefunction(math.clamp)
local _MathAbs = clonefunction(math.abs)
local _MathRandom = clonefunction(math.random)
local _MathRad = clonefunction(math.rad)
local _MathFloor = clonefunction(math.floor)
local _MathMax = clonefunction(math.max)
local _MathMin = clonefunction(math.min)
local _MathSin = clonefunction(math.sin)
local _MathCos = clonefunction(math.cos)
local _MathDeg = clonefunction(math.deg)
local _MathAtan2 = clonefunction(math.atan2)
local _Materials = Enum.Material
local _MathLerp = function(a, b, t)
	return a + (b - a) * t
end
local _tonumber = clonefunction(tonumber)

local _DebugTraceback = clonefunction(debug.traceback)

local _Tick = clonefunction(tick)
local _OsDate = clonefunction(os.date)
local _OsTime = clonefunction(os.time)

local _WorldToViewportPoint = clonefunction(_Instancenew("Camera").WorldToViewportPoint)
local _WorldToScreenPoint = clonefunction(_Instancenew("Camera").WorldToScreenPoint)

local _ChangeState = clonefunction(_Instancenew("Humanoid").ChangeState)

local _Require = clonefunction(require)
local _Type = clonefunction(type)
local _Typeof = clonefunction(typeof)
local _CoroutineWrap = clonefunction(coroutine.wrap)
local _TaskWait = clonefunction(task.wait)
local _Pcall = clonefunction(pcall)
local _Wait = clonefunction(wait)
local _TaskSpawn = clonefunction(task.spawn)



-- Core Vars
local Debris = cloneref(_GetService(game,"Debris"))
local HttpService = cloneref(_GetService(game,"HttpService"))
local InputService = cloneref(_GetService(game,"UserInputService"))
local replicatedStorage = cloneref(_GetService(game,"ReplicatedStorage"))
local Stats = cloneref(_GetService(game, "Stats"))
local TextService = cloneref(_GetService(game,"TextService"))
local Teams = cloneref(_GetService(game,"Teams"))
local Players = cloneref(_GetService(game,"Players"))
local RunService = cloneref(_GetService(game,"RunService"))
local TweenService = cloneref(_GetService(game,"TweenService"))
local Lighting = cloneref(_GetService(game,"Lighting"))
local RenderStepped = RunService.RenderStepped
local LocalPlayer = Players.LocalPlayer
local camera = cloneref(workspace.CurrentCamera)
local viewportSize = camera.ViewportSize
local Mouse = _GetMouse(LocalPlayer)
local SoundService = cloneref(_GetService(game,"SoundService"))
local CoreGui = cloneref(_GetService(game,"CoreGui"))
local spring = loadstring(_HttpGet(game, "https://raw.githubusercontent.com/Quenty/NevermoreEngine/5a429e871d54646ba54011c18321e77afa76d657/Modules/Shared/Physics/Spring.lua"))()
local Signaling = loadstring(_HttpGet(game, "https://raw.githubusercontent.com/Quenty/NevermoreEngine/version2/Modules/Shared/Events/Signal.lua"))()
local Events = replicatedStorage:WaitForChild("Events", 1/0)
local HitPart = Events:WaitForChild("HitPart", 1/0)
local playerSpawned = Signaling.new()
local playerDied = Signaling.new()
local Crosshairs = LocalPlayer.PlayerGui.GUI.Crosshairs


local utilities                         = {}
local Drawings                        = {}
local uilibrary                         = {}
local encryption                        = {}
local base64                            = {}
local json								= {}

do -- base 64 lib
	local function extract( v, from, width )
		local w = 0
		local flag = 2^from
		for i = 0, width-1 do
			local flag2 = flag + flag
			if v % flag2 >= flag then
				w = w + 2^i
			end
			flag = flag2
		end
		return w
	end
	function base64.makeencoder( s62, s63, spad )
		local encoder = {}
		for b64code, char in pairs{[0]='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','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','0','1','2',
			'3','4','5','6','7','8','9',s62 or '+',s63 or'/',spad or'='} do
			encoder[b64code] = char:byte()
		end
		return encoder
	end

	function base64.makedecoder( s62, s63, spad )
		local decoder = {}
		for b64code, charcode in pairs( base64.makeencoder( s62, s63, spad )) do
			decoder[charcode] = b64code
		end
		return decoder
	end

	local DEFAULT_ENCODER = base64.makeencoder()
	local DEFAULT_DECODER = base64.makedecoder()

	local char, concat = schar, tconcat

	function base64.encode( str, encoder, usecaching )
		encoder = encoder or DEFAULT_ENCODER
		local t, k, n = {}, 1, #str
		local lastn = n % 3
		local cache = {}
		for i = 1, n-lastn, 3 do
			local a, b, c = str:byte( i, i+2 )
			local v = a*0x10000 + b*0x100 + c
			local s
			if usecaching then
				s = cache[v]
				if not s then
					s = string.char(encoder[extract(v,18,6)], encoder[extract(v,12,6)], encoder[extract(v,6,6)], encoder[extract(v,0,6)])
					cache[v] = s
				end
			else
				s = string.char(encoder[extract(v,18,6)], encoder[extract(v,12,6)], encoder[extract(v,6,6)], encoder[extract(v,0,6)])
			end
			t[k] = s
			k = k + 1 
		end
		if lastn == 2 then
			local a, b = str:byte( n-1, n )
			local v = a*0x10000 + b*0x100
			t[k] = string.char(encoder[extract(v,18,6)], encoder[extract(v,12,6)], encoder[extract(v,6,6)], encoder[64])
		elseif lastn == 1 then
			local v = str:byte( n )*0x10000
			t[k] = string.char(encoder[extract(v,18,6)], encoder[extract(v,12,6)], encoder[64], encoder[64])
		end
		return _TableConcat( t )
	end

	function base64.decode( b64, decoder, usecaching )
		local decoder = decoder or DEFAULT_DECODER
		local pattern = '[^%w%+%/%=]'
		if decoder then
			local s62, s63
			for charcode, b64code in pairs( decoder ) do
				if b64code == 62 then s62 = charcode
				elseif b64code == 63 then s63 = charcode
				end
			end
			pattern = ('[^%%w%%%s%%%s%%=]'):format( string.char(s62), string.char(s63) )
		end
		b64 = b64:gsub( pattern, '' )
		local cache = usecaching and {}
		local t, k = {}, 1
		local n = #b64
		local padding = b64:sub(-2) == '==' and 2 or b64:sub(-1) == '=' and 1 or 0
		for i = 1, padding > 0 and n-4 or n, 4 do
			local a, b, c, d = b64:byte( i, i+3 )
			local s
			if usecaching then
				local v0 = a*0x1000000 + b*0x10000 + c*0x100 + d
				s = cache[v0]
				if not s then
					local v = decoder[a]*0x40000 + decoder[b]*0x1000 + decoder[c]*0x40 + decoder[d]
					s = string.char( extract(v,16,8), extract(v,8,8), extract(v,0,8))
					cache[v0] = s
				end
			else
				local v = decoder[a]*0x40000 + decoder[b]*0x1000 + decoder[c]*0x40 + decoder[d]
				s = string.char( extract(v,16,8), extract(v,8,8), extract(v,0,8))
			end
			t[k] = s
			k = k + 1
		end
		if padding == 1 then
			local a, b, c = b64:byte( n-3, n-1 )
			local v = decoder[a]*0x40000 + decoder[b]*0x1000 + decoder[c]*0x40
			t[k] = string.char( extract(v,16,8), extract(v,8,8))
		elseif padding == 2 then
			local a, b = b64:byte( n-3, n-2 )
			local v = decoder[a]*0x40000 + decoder[b]*0x1000
			t[k] = string.char( extract(v,16,8))
		end
		return _TableConcat( t )
	end
end

do -- json lib
	local encode

	local escape_char_map = {
		[ "\\" ] = "\\",
		[ "\"" ] = "\"",
		[ "\b" ] = "b",
		[ "\f" ] = "f",
		[ "\n" ] = "n",
		[ "\r" ] = "r",
		[ "\t" ] = "t",
	}

	local escape_char_map_inv = { [ "/" ] = "/" }
	for k, v in pairs(escape_char_map) do
		escape_char_map_inv[v] = k
	end


	local function escape_char(c)
		return "\\" .. (escape_char_map[c] or _StringFormat("u%04x", c:byte()))
	end


	local function encode_nil(val)
		return "null"
	end


	local function encode_table(val, stack)
		local res = {}
		stack = stack or {}

		-- Circular reference?
		if stack[val] then error("circular reference") end

		stack[val] = true

		if rawget(val, 1) ~= nil or next(val) == nil then
			-- Treat as array -- check keys are valid and it is not sparse
			local n = 0
			for k in pairs(val) do
				if _Type(k) ~= "number" then
					error("invalid table: mixed or invalid key types")
				end
				n = n + 1
			end
			if n ~= #val then
				error("invalid table: sparse array")
			end
			-- Encode
			for i, v in ipairs(val) do
				_TableInsert(res, encode(v, stack))
			end
			stack[val] = nil
			return "[" .. _TableConcat(res, ",") .. "]"

		else
			-- Treat as an object
			for k, v in pairs(val) do
				if _Type(k) ~= "string" then
					error("invalid table: mixed or invalid key types")
				end
				_TableInsert(res, encode(k, stack) .. ":" .. encode(v, stack))
			end
			stack[val] = nil
			return "{" .. _TableConcat(res, ",") .. "}"
		end
	end


	local function encode_string(val)
		return '"' .. val:gsub('[%z\1-\31\\"]', escape_char) .. '"'
	end


	local function encode_number(val)
		-- Check for NaN, -inf and inf
		if val ~= val or val <= -math.huge or val >= math.huge then
			error("unexpected number value '" .. _tostring(val) .. "'")
		end
		return _StringFormat("%.14g", val)
	end


	local type_func_map = {
		[ "nil"     ] = encode_nil,
		[ "table"   ] = encode_table,
		[ "string"  ] = encode_string,
		[ "number"  ] = encode_number,
		[ "boolean" ] = _tostring,
	}


	encode = function(val, stack)
		local t = _Type(val)
		local f = type_func_map[t]
		if f then
			return f(val, stack)
		end
		error("unexpected type '" .. t .. "'")
	end


	function json.encode(val)
		return ( encode(val) )
	end

	local parse

	local function create_set(...)
		local res = {}
		for i = 1, _Select("#", ...) do
			res[ _Select(i, ...) ] = true
		end
		return res
	end

	local space_chars   = create_set(" ", "\t", "\r", "\n")
	local delim_chars   = create_set(" ", "\t", "\r", "\n", "]", "}", ",")
	local escape_chars  = create_set("\\", "/", '"', "b", "f", "n", "r", "t", "u")
	local literals      = create_set("true", "false", "null")

	local literal_map = {
		[ "true"  ] = true,
		[ "false" ] = false,
		[ "null"  ] = nil,
	}


	local function next_char(str, idx, set, negate)
		for i = idx, #str do
			if set[str:sub(i, i)] ~= negate then
				return i
			end
		end
		return #str + 1
	end


	local function decode_error(str, idx, msg)
		local line_count = 1
		local col_count = 1
		for i = 1, idx - 1 do
			col_count = col_count + 1
			if str:sub(i, i) == "\n" then
				line_count = line_count + 1
				col_count = 1
			end
		end
		error( _StringFormat("%s at line %d col %d", msg, line_count, col_count) )
	end


	local function codepoint_to_utf8(n)
		-- http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=iws-appendixa
		local f = mfloor
		if n <= 0x7f then
			return string.char(n)
		elseif n <= 0x7ff then
			return string.char(f(n / 64) + 192, n % 64 + 128)
		elseif n <= 0xffff then
			return string.char(f(n / 4096) + 224, f(n % 4096 / 64) + 128, n % 64 + 128)
		elseif n <= 0x10ffff then
			return string.char(f(n / 262144) + 240, f(n % 262144 / 4096) + 128,
				f(n % 4096 / 64) + 128, n % 64 + 128)
		end
		error( sformat("invalid unicode codepoint '%x'", n) )
	end


	local function parse_unicode_escape(s)
		local n1 = _tonumber( s:sub(1, 4),  16 )
		local n2 = _tonumber( s:sub(7, 10), 16 )
		-- Surrogate pair?
		if n2 then
			return codepoint_to_utf8((n1 - 0xd800) * 0x400 + (n2 - 0xdc00) + 0x10000)
		else
			return codepoint_to_utf8(n1)
		end
	end


	local function parse_string(str, i)
		local res = ""
		local j = i + 1
		local k = j

		while j <= #str do
			local x = str:byte(j)

			if x < 32 then
				decode_error(str, j, "control character in string")

			elseif x == 92 then -- `\`: Escape
				res = res .. str:sub(k, j - 1)
				j = j + 1
				local c = str:sub(j, j)
				if c == "u" then
					local hex = str:match("^[dD][89aAbB]%x%x\\u%x%x%x%x", j + 1)
						or str:match("^%x%x%x%x", j + 1)
						or decode_error(str, j - 1, "invalid unicode escape in string")
					res = res .. parse_unicode_escape(hex)
					j = j + #hex
				else
					if not escape_chars[c] then
						decode_error(str, j - 1, "invalid escape char '" .. c .. "' in string")
					end
					res = res .. escape_char_map_inv[c]
				end
				k = j + 1

			elseif x == 34 then -- `"`: End of string
				res = res .. str:sub(k, j - 1)
				return res, j + 1
			end

			j = j + 1
		end

		decode_error(str, i, "expected closing quote for string")
	end


	local function parse_number(str, i)
		local x = next_char(str, i, delim_chars)
		local s = str:sub(i, x - 1)
		local n = _tonumber(s)
		if not n then
			decode_error(str, i, "invalid number '" .. s .. "'")
		end
		return n, x
	end


	local function parse_literal(str, i)
		local x = next_char(str, i, delim_chars)
		local word = str:sub(i, x - 1)
		if not literals[word] then
			decode_error(str, i, "invalid literal '" .. word .. "'")
		end
		return literal_map[word], x
	end


	local function parse_array(str, i)
		local res = {}
		local n = 1
		i = i + 1
		while 1 do
			local x
			i = next_char(str, i, space_chars, true)
			-- Empty / end of array?
			if str:sub(i, i) == "]" then
				i = i + 1
				break
			end
			-- Read token
			x, i = parse(str, i)
			res[n] = x
			n = n + 1
			-- Next token
			i = next_char(str, i, space_chars, true)
			local chr = str:sub(i, i)
			i = i + 1
			if chr == "]" then break end
			if chr ~= "," then decode_error(str, i, "expected ']' or ','") end
		end
		return res, i
	end


	local function parse_object(str, i)
		local res = {}
		i = i + 1
		while 1 do
			local key, val
			i = next_char(str, i, space_chars, true)
			-- Empty / end of object?
			if str:sub(i, i) == "}" then
				i = i + 1
				break
			end
			-- Read key
			if str:sub(i, i) ~= '"' then
				decode_error(str, i, "expected string for key")
			end
			key, i = parse(str, i)
			-- Read ':' delimiter
			i = next_char(str, i, space_chars, true)
			if str:sub(i, i) ~= ":" then
				decode_error(str, i, "expected ':' after key")
			end
			i = next_char(str, i + 1, space_chars, true)
			-- Read value
			val, i = parse(str, i)
			-- Set
			res[key] = val
			-- Next token
			i = next_char(str, i, space_chars, true)
			local chr = str:sub(i, i)
			i = i + 1
			if chr == "}" then break end
			if chr ~= "," then decode_error(str, i, "expected '}' or ','") end
		end
		return res, i
	end


	local char_func_map = {
		[ '"' ] = parse_string,
		[ "0" ] = parse_number,
		[ "1" ] = parse_number,
		[ "2" ] = parse_number,
		[ "3" ] = parse_number,
		[ "4" ] = parse_number,
		[ "5" ] = parse_number,
		[ "6" ] = parse_number,
		[ "7" ] = parse_number,
		[ "8" ] = parse_number,
		[ "9" ] = parse_number,
		[ "-" ] = parse_number,
		[ "t" ] = parse_literal,
		[ "f" ] = parse_literal,
		[ "n" ] = parse_literal,
		[ "[" ] = parse_array,
		[ "{" ] = parse_object,
	}

	parse = function(str, idx)
		local chr = str:sub(idx, idx)
		local f = char_func_map[chr]
		if f then
			return f(str, idx)
		end
		decode_error(str, idx, "unexpected character '" .. chr .. "'")
	end


	function json.decode(str)
		if _Type(str) ~= "string" then
			error("expected argument of type string, got " .. _Type(str))
		end
		local res, idx = parse(str, next_char(str, 1, space_chars, true))
		idx = next_char(str, idx, space_chars, true)
		if idx <= #str then
			decode_error(str, idx, "trailing garbage")
		end
		return res
	end
end

do 

	-- ADVANCED ENCRYPTION STANDARD (AES)

	-- Implementation of secure symmetric-key encryption specifically in Luau
	-- Includes ECB, CBC, PCBC, CFB, OFB and CTR modes without padding.
	-- Made by @RobloxGamerPro200007 (verify the original asset)

	-- MORE INFORMATION: https://devforum.roblox.com/t/advanced-encryption-standard-in-luau/2009120


	-- SUBSTITUTION BOXES
	local s_box 	= { 99, 124, 119, 123, 242, 107, 111, 197,  48,   1, 103,  43, 254, 215, 171, 118, 202,
		130, 201, 125, 250,  89,  71, 240, 173, 212, 162, 175, 156, 164, 114, 192, 183, 253, 147,  38,  54,
		63, 247, 204,  52, 165, 229, 241, 113, 216,  49,  21,   4, 199,  35, 195,  24, 150,   5, 154,   7,
		18, 128, 226, 235,  39, 178, 117,   9, 131,  44,  26,  27, 110,  90, 160,  82,  59, 214, 179,  41,
		227,  47, 132,  83, 209,   0, 237,  32, 252, 177,  91, 106, 203, 190,  57,  74,  76,  88, 207, 208,
		239, 170, 251,  67,  77,  51, 133,  69, 249,   2, 127,  80,  60, 159, 168,  81, 163,  64, 143, 146,
		157,  56, 245, 188, 182, 218,  33,  16, 255, 243, 210, 205,  12,  19, 236,  95, 151,  68,  23, 196,
		167, 126,  61, 100,  93,  25, 115,  96, 129,  79, 220,  34,  42, 144, 136,  70, 238, 184,  20, 222,
		94,  11, 219, 224,  50,  58,  10,  73,   6,  36,  92, 194, 211, 172,  98, 145, 149, 228, 121, 231,
		200,  55, 109, 141, 213,  78, 169, 108,  86, 244, 234, 101, 122, 174,   8, 186, 120,  37,  46,  28,
		166, 180, 198, 232, 221, 116,  31,  75, 189, 139, 138, 112,  62, 181, 102,  72,   3, 246,  14,  97,
		53,  87, 185, 134, 193,  29, 158, 225, 248, 152,  17, 105, 217, 142, 148, 155,  30, 135, 233, 206,
		85,  40, 223, 140, 161, 137,  13, 191, 230,  66, 104,  65, 153,  45,  15, 176,  84, 187,  22}
	local inv_s_box	= { 82,   9, 106, 213,  48,  54, 165,  56, 191,  64, 163, 158, 129, 243, 215, 251, 124,
		227,  57, 130, 155,  47, 255, 135,  52, 142,  67,  68, 196, 222, 233, 203,  84, 123, 148,  50, 166,
		194,  35,  61, 238,  76, 149,  11,  66, 250, 195,  78,   8,  46, 161, 102,  40, 217,  36, 178, 118,
		91, 162,  73, 109, 139, 209,  37, 114, 248, 246, 100, 134, 104, 152,  22, 212, 164,  92, 204,  93,
		101, 182, 146, 108, 112,  72,  80, 253, 237, 185, 218,  94,  21,  70,  87, 167, 141, 157, 132, 144,
		216, 171,   0, 140, 188, 211,  10, 247, 228,  88,   5, 184, 179,  69,   6, 208,  44,  30, 143, 202,
		63,  15,   2, 193, 175, 189,   3,   1,  19, 138, 107,  58, 145,  17,  65,  79, 103, 220, 234, 151,
		242, 207, 206, 240, 180, 230, 115, 150, 172, 116,  34, 231, 173,  53, 133, 226, 249,  55, 232,  28,
		117, 223, 110,  71, 241,  26, 113,  29,  41, 197, 137, 111, 183,  98,  14, 170,  24, 190,  27, 252,
		86,  62,  75, 198, 210, 121,  32, 154, 219, 192, 254, 120, 205,  90, 244,  31, 221, 168,  51, 136,
		7, 199,  49, 177,  18,  16,  89,  39, 128, 236,  95,  96,  81, 127, 169,  25, 181,  74,  13,  45,
		229, 122, 159, 147, 201, 156, 239, 160, 224,  59,  77, 174,  42, 245, 176, 200, 235, 187,  60, 131,
		83, 153,  97,  23,  43,   4, 126, 186, 119, 214,  38, 225, 105,  20,  99,  85,  33,  12, 125}

	-- ROUND CONSTANTS ARRAY
	local rcon = {  0,   1,   2,   4,   8,  16,  32,  64, 128,  27,  54, 108, 216, 171,  77, 154,  47,  94,
		188,  99, 198, 151,  53, 106, 212, 179, 125, 250, 239, 197, 145,  57}
	-- MULTIPLICATION OF BINARY POLYNOMIAL
	local function xtime(x)
		local i = bit32.lshift(x, 1)
		return if bit32.band(x, 128) == 0 then i else bit32.bxor(i, 27) % 256
	end

	-- TRANSFORMATION FUNCTIONS
	local function subBytes		(s, inv) 		-- Processes State using the S-box
		inv = if inv then inv_s_box else s_box
		for i = 1, 4 do
			for j = 1, 4 do
				s[i][j] = inv[s[i][j] + 1]
			end
		end
	end
	local function shiftRows		(s, inv) 	-- Processes State by circularly shifting rows
		s[1][3], s[2][3], s[3][3], s[4][3] = s[3][3], s[4][3], s[1][3], s[2][3]
		if inv then
			s[1][2], s[2][2], s[3][2], s[4][2] = s[4][2], s[1][2], s[2][2], s[3][2]
			s[1][4], s[2][4], s[3][4], s[4][4] = s[2][4], s[3][4], s[4][4], s[1][4]
		else
			s[1][2], s[2][2], s[3][2], s[4][2] = s[2][2], s[3][2], s[4][2], s[1][2]
			s[1][4], s[2][4], s[3][4], s[4][4] = s[4][4], s[1][4], s[2][4], s[3][4]
		end
	end
	local function addRoundKey	(s, k) 			-- Processes Cipher by adding a round key to the State
		for i = 1, 4 do
			for j = 1, 4 do
				s[i][j] = bit32.bxor(s[i][j], k[i][j])
			end
		end
	end
	local function mixColumns	(s, inv) 		-- Processes Cipher by taking and mixing State columns
		local t, u
		if inv then
			for i = 1, 4 do
				t = xtime(xtime(bit32.bxor(s[i][1], s[i][3])))
				u = xtime(xtime(bit32.bxor(s[i][2], s[i][4])))
				s[i][1], s[i][2] = bit32.bxor(s[i][1], t), bit32.bxor(s[i][2], u)
				s[i][3], s[i][4] = bit32.bxor(s[i][3], t), bit32.bxor(s[i][4], u)
			end
		end

		local i
		for j = 1, 4 do
			i = s[j]
			t, u = bit32.bxor		(i[1], i[2], i[3], i[4]), i[1]
			for k = 1, 4 do
				i[k] = bit32.bxor	(i[k], t, xtime(bit32.bxor(i[k], i[k + 1] or u)))
			end
		end
	end

	-- BYTE ARRAY UTILITIES
	local function bytesToMatrix	(t, c, inv) -- Converts a byte array to a 4x4 matrix
		if inv then
			table.move		(c[1], 1, 4, 1, t)
			table.move		(c[2], 1, 4, 5, t)
			table.move		(c[3], 1, 4, 9, t)
			table.move		(c[4], 1, 4, 13, t)
		else
			for i = 1, #c / 4 do
				table.clear	(t[i])
				table.move	(c, i * 4 - 3, i * 4, 1, t[i])
			end
		end

		return t
	end
	local function xorBytes		(t, a, b) 		-- Returns bitwise XOR of all their bytes
		table.clear		(t)

		for i = 1, _MathMin(#a, #b) do
			_TableInsert(t, bit32.bxor(a[i], b[i]))
		end
		return t
	end
	local function incBytes		(a, inv)		-- Increment byte array by one
		local o = true
		for i = if inv then 1 else #a, if inv then #a else 1, if inv then 1 else - 1 do
			if a[i] == 255 then
				a[i] = 0
			else
				a[i] += 1
				o = false
				break
			end
		end

		return o, a
	end

	-- MAIN ALGORITHM
	local function expandKey	(key) 				-- Key expansion
		local kc = bytesToMatrix(if #key == 16 then {{}, {}, {}, {}} elseif #key == 24 then {{}, {}, {}, {}
			, {}, {}} else {{}, {}, {}, {}, {}, {}, {}, {}}, key)
		local is = #key / 4
		local i, t, w = 2, {}, nil

		while #kc < (#key / 4 + 7) * 4 do
			w = table.clone	(kc[#kc])
			if #kc % is == 0 then
				_TableInsert(w, _TableRemove(w, 1))
				for j = 1, 4 do
					w[j] = s_box[w[j] + 1]
				end
				w[1]	 = bit32.bxor(w[1], rcon[i])
				i 	+= 1
			elseif #key == 32 and #kc % is == 4 then
				for j = 1, 4 do
					w[j] = s_box[w[j] + 1]
				end
			end

			table.clear	(t)
			xorBytes	(w, table.move(w, 1, 4, 1, t), kc[#kc - is + 1])
			_TableInsert(kc, w)
		end

		table.clear		(t)
		for i = 1, #kc / 4 do
			_TableInsert(t, {})
			table.move	(kc, i * 4 - 3, i * 4, 1, t[#t])
		end
		return t
	end
	local function encrypt	(key, km, pt, ps, r) 	-- Block cipher encryption
		bytesToMatrix	(ps, pt)
		addRoundKey		(ps, km[1])

		for i = 2, #key / 4 + 6 do
			subBytes	(ps)
			shiftRows	(ps)
			mixColumns	(ps)
			addRoundKey	(ps, km[i])
		end
		subBytes		(ps)
		shiftRows		(ps)
		addRoundKey		(ps, km[#km])

		return bytesToMatrix(r, ps, true)
	end
	local function decrypt	(key, km, ct, cs, r) 	-- Block cipher decryption
		bytesToMatrix	(cs, ct)

		addRoundKey		(cs, km[#km])
		shiftRows		(cs, true)
		subBytes		(cs, true)
		for i = #key / 4 + 6, 2, - 1 do
			addRoundKey	(cs, km[i])
			mixColumns	(cs, true)
			shiftRows	(cs, true)
			subBytes	(cs, true)
		end

		addRoundKey		(cs, km[1])
		return bytesToMatrix(r, cs, true)
	end

	-- INITIALIZATION FUNCTIONS
	local function convertType	(a) 					-- Converts data to bytes if possible
		if _Type(a) == "string" then
			local r = {}

			for i = 1, _StringLen(a), 7997 do
				table.move({string.byte(a, i, i + 7996)}, 1, 7997, i, r)
			end
			return r
		elseif _Type(a) == "table" then
			for _, i in ipairs(a) do
				assert(_Type(i) == "number" and _MathFloor(i) == i and 0 <= i and i < 256,
					"Unable to cast value to bytes")
			end
			return a
		else
			error("Unable to cast value to bytes")
		end
	end
	local function init			(key, txt, m, iv, s) 	-- Initializes functions if possible
		key = convertType(key)
		assert(#key == 16 or #key == 24 or #key == 32, "Key must be either 16, 24 or 32 bytes long")
		txt = convertType(txt)
		assert(#txt % (s or 16) == 0, "Input must be a multiple of " .. (if s then "segment size " .. s
			else "16") .. " bytes in length")
		if m then
			if _Type(iv) == "table" then
				iv = table.clone(iv)
				local l, e 		= iv.Length, iv.LittleEndian
				assert(_Type(l) == "number" and 0 < l and l <= 16,
					"Counter value length must be between 1 and 16 bytes")
				iv.Prefix 		= convertType(iv.Prefix or {})
				iv.Suffix 		= convertType(iv.Suffix or {})
				assert(#iv.Prefix + #iv.Suffix + l == 16, "Counter must be 16 bytes long")
				iv.InitValue 	= if iv.InitValue == nil then {1} else table.clone(convertType(iv.InitValue
				))
				assert(#iv.InitValue <= l, "Initial value length must be of the counter value")
				iv.InitOverflow = if iv.InitOverflow == nil then table.create(l, 0) else table.clone(
				convertType(iv.InitOverflow))
				assert(#iv.InitOverflow <= l,
					"Initial overflow value length must be of the counter value")
				for _ = 1, l - #iv.InitValue do
					_TableInsert(iv.InitValue, 1 + if e then #iv.InitValue else 0, 0)
				end
				for _ = 1, l - #iv.InitOverflow do
					_TableInsert(iv.InitOverflow, 1 + if e then #iv.InitOverflow else 0, 0)
				end
			elseif _Type(iv) ~= "function" then
				local i, t = if iv then convertType(iv) else table.create(16, 0), {}
				assert(#i == 16, "Counter must be 16 bytes long")
				iv = {Length = 16, Prefix = t, Suffix = t, InitValue = i,
					InitOverflow = table.create(16, 0)}
			end
		elseif m == false then
			iv 	= if iv == nil then  table.create(16, 0) else convertType(iv)
			assert(#iv == 16, "Initialization vector must be 16 bytes long")
		end
		if s then
			s = _MathFloor(_tonumber(s) or 1)
			assert(_Type(s) == "number" and 0 < s and s <= 16, "Segment size must be between 1 and 16 bytes"
			)
		end

		return key, txt, expandKey(key), iv, s
	end
	type bytes = {number} -- Type instance of a valid bytes object

	-- CIPHER MODES OF OPERATION
	encryption = {
		-- Electronic codebook (ECB)
		encrypt_ECB = function(key : bytes, plainText : bytes) 									: bytes
			local km
			key, plainText, km = init(key, plainText)

			local b, k, s, t = {}, {}, {{}, {}, {}, {}}, {}
			for i = 1, #plainText, 16 do
				table.move(plainText, i, i + 15, 1, k)
				table.move(encrypt(key, km, k, s, t), 1, 16, i, b)
			end

			return b
		end,
		decrypt_ECB = function(key : bytes, cipherText : bytes) 								: bytes
			local km
			key, cipherText, km = init(key, cipherText)

			local b, k, s, t = {}, {}, {{}, {}, {}, {}}, {}
			for i = 1, #cipherText, 16 do
				table.move(cipherText, i, i + 15, 1, k)
				table.move(decrypt(key, km, k, s, t), 1, 16, i, b)
			end

			return b
		end,
		-- Cipher block chaining (CBC)
		encrypt_CBC = function(key : bytes, plainText : bytes, initVector : bytes?) 			: bytes
			local km
			key, plainText, km, initVector = init(key, plainText, false, initVector)

			local b, k, p, s, t = {}, {}, initVector, {{}, {}, {}, {}}, {}
			for i = 1, #plainText, 16 do
				table.move(plainText, i, i + 15, 1, k)
				table.move(encrypt(key, km, xorBytes(t, k, p), s, p), 1, 16, i, b)
			end

			return b
		end,
		decrypt_CBC = function(key : bytes, cipherText : bytes, initVector : bytes?) 			: bytes
			local km
			key, cipherText, km, initVector = init(key, cipherText, false, initVector)

			local b, k, p, s, t = {}, {}, initVector, {{}, {}, {}, {}}, {}
			for i = 1, #cipherText, 16 do
				table.move(cipherText, i, i + 15, 1, k)
				table.move(xorBytes(k, decrypt(key, km, k, s, t), p), 1, 16, i, b)
				table.move(cipherText, i, i + 15, 1, p)
			end

			return b
		end,
		-- Propagating cipher block chaining (PCBC)
		encrypt_PCBC = function(key : bytes, plainText : bytes, initVector : bytes?) 			: bytes
			local km
			key, plainText, km, initVector = init(key, plainText, false, initVector)

			local b, k, c, p, s, t = {}, {}, initVector, table.create(16, 0), {{}, {}, {}, {}}, {}
			for i = 1, #plainText, 16 do
				table.move(plainText, i, i + 15, 1, k)
				table.move(encrypt(key, km, xorBytes(k, xorBytes(t, c, k), p), s, c), 1, 16, i, b)
				table.move(plainText, i, i + 15, 1, p)
			end

			return b
		end,
		decrypt_PCBC = function(key : bytes, cipherText : bytes, initVector : bytes?) 			: bytes
			local km
			key, cipherText, km, initVector = init(key, cipherText, false, initVector)

			local b, k, c, p, s, t = {}, {}, initVector, table.create(16, 0), {{}, {}, {}, {}}, {}
			for i = 1, #cipherText, 16 do
				table.move(cipherText, i, i + 15, 1, k)
				table.move(xorBytes(p, decrypt(key, km, k, s, t), xorBytes(k, c, p)), 1, 16, i, b)
				table.move(cipherText, i, i + 15, 1, c)
			end

			return b
		end,
		-- Cipher feedback (CFB)
		encrypt_CFB = function(key : bytes, plainText : bytes, initVector : bytes?, segmentSize : number?)
			: bytes
			local km
			key, plainText, km, initVector, segmentSize = init(key, plainText, false, initVector,
				if segmentSize == nil then 1 else segmentSize)

			local b, k, p, q, s, t = {}, {}, initVector, {}, {{}, {}, {}, {}}, {}
			for i = 1, #plainText, segmentSize do
				table.move(plainText, i, i + segmentSize - 1, 1, k)
				table.move(xorBytes(q, encrypt(key, km, p, s, t), k), 1, segmentSize, i, b)
				for j = 16, segmentSize + 1, - 1 do
					_TableInsert(q, 1, p[j])
				end
				table.move(q, 1, 16, 1, p)
			end

			return b
		end,
		decrypt_CFB = function(key : bytes, cipherText : bytes, initVector : bytes, segmentSize : number?)
			: bytes
			local km
			key, cipherText, km, initVector, segmentSize = init(key, cipherText, false, initVector,
				if segmentSize == nil then 1 else segmentSize)

			local b, k, p, q, s, t = {}, {}, initVector, {}, {{}, {}, {}, {}}, {}
			for i = 1, #cipherText, segmentSize do
				table.move(cipherText, i, i + segmentSize - 1, 1, k)
				table.move(xorBytes(q, encrypt(key, km, p, s, t), k), 1, segmentSize, i, b)
				for j = 16, segmentSize + 1, - 1 do
					_TableInsert(k, 1, p[j])
				end
				table.move(k, 1, 16, 1, p)
			end

			return b
		end,
		-- Output feedback (OFB)
		encrypt_OFB = function(key : bytes, plainText : bytes, initVector : bytes?) 			: bytes
			local km
			key, plainText, km, initVector = init(key, plainText, false, initVector)

			local b, k, p, s, t = {}, {}, initVector, {{}, {}, {}, {}}, {}
			for i = 1, #plainText, 16 do
				table.move(plainText, i, i + 15, 1, k)
				table.move(encrypt(key, km, p, s, t), 1, 16, 1, p)
				table.move(xorBytes(t, k, p), 1, 16, i, b)
			end

			return b
		end,
		-- Counter (CTR)
		encrypt_CTR = function(key : bytes, plainText : bytes, counter : ((bytes) -> bytes) | bytes | { [
			string]: any }?) : bytes
			local km
			key, plainText, km, counter = init(key, plainText, true, counter)

			local b, k, c, s, t, r, n = {}, {}, {}, {{}, {}, {}, {}}, {}, _Type(counter) == "table", nil
			for i = 1, #plainText, 16 do
				if r then
					if i > 1 and incBytes(counter.InitValue, counter.LittleEndian) then
						table.move(counter.InitOverflow, 1, 16, 1, counter.InitValue)
					end
					table.clear	(c)
					table.move	(counter.Prefix, 1, #counter.Prefix, 1, c)
					table.move	(counter.InitValue, 1, counter.Length, #c + 1, c)
					table.move	(counter.Suffix, 1, #counter.Suffix, #c + 1, c)
				else
					n = convertType(counter(c, (i + 15) / 16))
					assert		(#n == 16, "Counter must be 16 bytes long")
					table.move	(n, 1, 16, 1, c)
				end
				table.move(plainText, i, i + 15, 1, k)
				table.move(xorBytes(c, encrypt(key, km, c, s, t), k), 1, 16, i, b)
			end

			return b
		end,
		pkcs7_padding = function(data, block_size)
			local pad_size = block_size - #data % block_size
			local padding = string.char(pad_size):rep(pad_size)
			return data .. padding
		end,
		pkcs7_unpadding = function(data)
			local pad_size = string.byte(data:sub(-1))
			return data:sub(1, -pad_size - 1)
		end
	}
end

do
	do
		local ENABLE_TRACEBACK = false

		local Signal = {}
		Signal.__index = Signal
		Signal.ClassName = "Signal"

		--- Constructs a new signal.
		-- @constructor Signal.new()
		-- @treturn Signal
		function Signal.new()
			local self = setmetatable({}, Signal)

			self._bindableEvent = _Instancenew("BindableEvent")
			self._argMap = {}
			self._source = ENABLE_TRACEBACK and traceback() or ""

			-- Events in Roblox execute in reverse order as they are stored in a linked list and
			-- new connections are added at the head. This event will be at the tail of the list to
			-- clean up memory.
			self._bindableEvent.Event:Connect(function(key)
				self._argMap[key] = nil

				-- We've been destroyed here and there's nothing left in flight.
				-- Let's remove the argmap too.
				-- This code may be slower than leaving this table allocated.
				if (not self._bindableEvent) and (not next(self._argMap)) then
					self._argMap = nil
				end
			end)

			return self
		end

		--- Fire the event with the given arguments. All handlers will be invoked. Handlers follow
		-- Roblox signal conventions.
		-- @param ... Variable arguments to pass to handler
		-- @treturn nil
		function Signal:Fire(...)
			if not self._bindableEvent then
				--warn(("Signal is already destroyed. %s"):format(self._source))
				return
			end

			local args = {...}

			-- TODO: Replace with a less memory/computationally expensive key generation scheme
			local key = 1 + #self._argMap
			self._argMap[key] = args

			-- Queues each handler onto the queue.
			self._bindableEvent:Fire(key)
		end

		--- Connect a new handler to the event. Returns a connection object that can be disconnected.
		-- @tparam function handler Function handler called with arguments passed when `:Fire(...)` is called
		-- @treturn Connection Connection object that can be disconnected
		function Signal:Connect(handler)
			if not (_Type(handler) == "function") then
				error(("connect(%s)"):format(_Typeof(handler)), 2)
			end

			return self._bindableEvent.Event:Connect(function(key)
				-- note we could queue multiple events here, but we'll do this just as Roblox events expect
				-- to behave.
				handler(unpack(self._argMap[key]))
			end)
		end

		--- Wait for fire to be called, and return the arguments it was given.
		-- @treturn ... Variable arguments from connection
		function Signal:Wait()
			local key = self._bindableEvent.Event:Wait()
			local args = self._argMap[key]
			if args then
				return unpack(args)
			else
				error("Missing arg data, probably due to reentrance.")
				return nil
			end
		end

		--- Disconnects all connected events to the signal. Voids the signal as unusable.
		-- @treturn nil
		function Signal:Destroy()
			if self._bindableEvent then
				-- This should disconnect all events, but in-flight events should still be
				-- executed.

				self._bindableEvent:Destroy()
				self._bindableEvent = nil
			end

			-- Do not remove the argmap. It will be cleaned up by the cleanup connection.

			setmetatable(self, nil)
		end

		utilities.signal = Signal
	end

	utilities.blockmouseevents = false -- local ones get blocked at certain times
	utilities.nextidentifier = 0
	function utilities.getnextidentifier() -- look man, i couldnt do parenting properly so i had to do this (yes i tried v == val, didnt work), (update: wasnt the issue, no longer needed but cba to remove this now)
		utilities.nextidentifier = utilities.nextidentifier + 1
		local bullshit = _tostring(utilities.nextidentifier)
		return bullshit
	end
	-- not smth im proud of but itll work

	function utilities.map(x, a, b, c, d)
		return (x - a) / (b - a) * (d - c) + c
	end

	utilities.base = { -- this is sorta like our camera, we have a defined size n sh so we can parent things to this
		children = {},
		absolutesize = camera.ViewportSize,
		Drawingobject = {
			Size = camera.ViewportSize,
			Position = _Vector2New(),
			Visible = true
		},
		absoluteposition = _Vector2New(),
		class = "frame",
		name = "startergui", -- x3
		identifier = utilities.getnextidentifier(),
		visible = true,
		getpropertychangedsignal = utilities.signal.new(),
		updatechildsignal = utilities.signal.new(),
	}

	utilities.base.getpropertychangedsignal:Connect(function(event, val) -- p10000000000000000 parenting fix
		local ident = val.identifier
		local thesechildren = utilities.base.children
		if event == "childadded" then
			thesechildren[ident] = val
		elseif event == "childremoved" then
			thesechildren[ident] = nil
		end
	end)

	_GetPropertyChangedSignal(camera, "ViewportSize"):Connect(function()
		_TaskWait()
		utilities.base.absolutesize = camera.ViewportSize
		utilities.base.Drawingobject.Size = camera.ViewportSize
		utilities.base.visible = false
		utilities.base.updatechildsignal:Fire("visible", false)
		utilities.base.visible = true
		utilities.base.updatechildsignal:Fire("visible", true)
	end)

	utilities.mouse = { -- would rather this than every Drawing object go mouse.move:connect(function() -- bullshit end)
		position = _Vector2New(Mouse.x, Mouse.y),
		oldposition = _Vector2New(),
		mouse1held = false,
		mouse2held = false,
		moved = utilities.signal.new(),
		mousebutton1down = utilities.signal.new(),
		mousebutton2down = utilities.signal.new(),
		mousebutton1up = utilities.signal.new(),
		mousebutton2up = utilities.signal.new(),
		scrollup = utilities.signal.new(),
		scrolldown = utilities.signal.new(),
	}

	InputService.InputChanged:Connect(function(input, processed)
		if input.UserInputType == Enum.UserInputType.MouseMovement then
			if utilities.blockmouseevents then return end
			utilities.mouse.oldposition = utilities.mouse.position
			utilities.mouse.moved:Fire()
			local xy = InputService:GetMouseLocation()
			utilities.mouse.position = _Vector2New(xy.x, xy.y)
		end
	end)

	InputService.InputBegan:Connect(function(input, gameProcessed)
		if utilities.blockmouseevents then return end
		if input.UserInputType == Enum.UserInputType.MouseButton1 then
			utilities.mouse.mouse1held = true
			utilities.mouse.mousebutton1down:Fire()
		elseif input.UserInputType == Enum.UserInputType.MouseButton2 then
			utilities.mouse.mouse2held = true
			utilities.mouse.mousebutton2down:Fire()
		end
	end)

	InputService.InputEnded:Connect(function(input, gameProcessed)
		if input.UserInputType == Enum.UserInputType.MouseButton1 then
			utilities.mouse.mouse1held = false
			utilities.mouse.mousebutton1up:Fire()
		elseif input.UserInputType == Enum.UserInputType.MouseButton2 then
			utilities.mouse.mouse2held = false
			utilities.mouse.mousebutton2up:Fire()
		end
	end)

	InputService.InputChanged:Connect(function(input)
		if utilities.blockmouseevents then return end
		if input.UserInputType == Enum.UserInputType.MouseWheel then
			if input.Position.Z > 0 then
				utilities.mouse.scrollup:Fire(input.Position.Z)
			else
				utilities.mouse.scrolldown:Fire(input.Position.Z)
			end
		end
	end)

	function utilities.copyarray(original)
		local copied = {}
		for i, v in next, (original) do
			if _Type(v) == "table" then
				v = utilities.copyarray(v)
			end
			copied[i] = v
		end
		return copied
	end

	function utilities.getclipboard()
		local screen = _Instancenew("ScreenGui",CoreGui)
		local tb = _Instancenew("TextBox",screen)
		tb.TextTransparency = 1

		tb:CaptureFocus()
		keypress(0x11)  
		keypress(0x56)
		_TaskWait()
		keyrelease(0x11)
		keyrelease(0x56)
		tb:ReleaseFocus()

		local captured = tb.Text

		_Destroy(tb)
		_Destroy(screen)

		return captured
	end

	utilities.types = {
		frame = "Square",
		text = "Text",
		image = "Image",
	}

	utilities.writeableproperties = {
		anchorpoint = _Vector2New(),
		parent = utilities.base,
		zindex = 0,
		name = "",
		visible = true,
	}

	utilities.readonlyproperties = {
		Drawing = nil,
		children = {},
		activated = false,
		class = "",
		identifier = "",
		updater = connection,
		absolutesize = _Vector2New(),
		absoluteposition = _Vector2New(),
	}

	utilities.events = {
		getpropertychangedsignal = utilities.signal.new(),
		updatechildsignal = utilities.signal.new(), -- time to tell the children to update !
	}

	utilities.activations = {
		hovering = false,
		holding = false,
		clicked = utilities.signal.new(),
		mouseenter = utilities.signal.new(),
		mouseleave = utilities.signal.new()
	}

	utilities.specificproperties = {
		frame = {
			thickness = 0,
			transparency = 0,
			size = _UDim2New(),
			color = _Color3New(),
			filled = false,
			position = _UDim2New()
		},
		text = {
			text = "",
			size = 0,
			outline = false,
			color = _Color3New(),
			outlinecolor = _Color3New(),
			position = _UDim2New(),
			font = Drawing.Fonts.Plex
		},
		image = {
			data = "",
			size = _UDim2New(),
			position = _UDim2New(),
			rounding = 0,
		},
	}

	utilities.operationorder = {
		"name",
		"parent",
		"anchorpoint",
		"size",
		"position"
	}

	utilities.updatechildren = {
		position = true,
		size = true,
		visible = true
	}

	utilities.childupdate = { -- the new arg isnt the new pos or anything its what the parent is about to be because this is based off of the parent updating
		absoluteposition = function(obj, parentnew) -- basically think of this as "oo my parent updated this property and my ... property is dependant on that so i need to update it"
			local parent = obj.parent
			local scalex = obj.position.X.Scale
			local scaley = obj.position.Y.Scale
			local offsetx = obj.position.X.Offset
			local offsety = obj.position.Y.Offset

			local anchorx = obj.anchorpoint.x
			local anchory = obj.anchorpoint.y

			local x, y = parent.absolutesize.x * scalex + offsetx, parent.absolutesize.y * scaley + offsety
			x = parentnew.x + x - (obj.absolutesize.x * anchorx)
			y = parentnew.y + y - (obj.absolutesize.y * anchory) -- anchorpoints !!!!!
			x = _MathFloor(x + 0.5)
			y = _MathFloor(y + 0.5)
			local result = _Vector2New(x, y)

			obj.getpropertychangedsignal:Fire("absoluteposition", result)
			obj.Drawingobject.Position = result
			obj.absoluteposition = result
		end,
		absolutesize = function(obj, parentnew) -- really awful but it worked
			if obj.class == "text" then return end
			local parent = obj.parent

			local old = obj.absolutesize
			local x, y, result

			local scalex = obj.size.X.Scale
			local scaley = obj.size.Y.Scale
			local offsetx = obj.size.X.Offset
			local offsety = obj.size.Y.Offset
			x, y = parentnew.x * scalex + offsetx, parentnew.y * scaley + offsety
			x = _MathFloor(x + 0.5)
			y = _MathFloor(y + 0.5)
			result = _Vector2New(x, y)

			-- since dn (this proeprty is dependant on its actual size so it will have to be updated)
			local anchorx = obj.anchorpoint.x
			local anchory = obj.anchorpoint.y

			local scalex2 = obj.position.X.Scale
			local scaley2 = obj.position.Y.Scale
			local offsetx2 = obj.position.X.Offset
			local offsety2 = obj.position.Y.Offset

			local nut = _Vector2New(parent.absolutesize.x * scaley2 + offsety2, parent.absolutesize.x * scalex2 + offsetx2)
			local x2 = parent.absoluteposition.x + nut.x - (result.x * anchorx)
			local y2 = parent.absoluteposition.y + nut.y - (result.y * anchory) -- as u can see, we are reusing the previous result
			x2 = _MathFloor(x2 + 0.5)
			y2 = _MathFloor(y2 + 0.5)
			local result2 = _Vector2New(x2, y2)

			obj.Drawingobject.Size = result
			obj.absolutesize = result
			obj.getpropertychangedsignal:Fire("absolutesize", result)

			obj.Drawingobject.Position = result2
			obj.absoluteposition = result2
			obj.getpropertychangedsignal:Fire("absoluteposition", result2)
		end,
		visible = function(obj, parentnew)
			local parent = obj.parent
			obj.Drawingobject.Visible = parent.Drawingobject.Visible and obj.visible or false
			utilities.setproperty.shared.activated(obj, obj.activated)
			obj.getpropertychangedsignal:Fire("visible", parent.Drawingobject.Visible and obj.visible or false)
		end,
	}

	utilities.setproperty = { -- so i couldve gone to the __newindex and done if i == "position" then elseif i == "size" and so on but this feels a lot better to do
		shared = { -- how to fix stack overflow 2022
			activated = function(obj, new) -- mildly homosexual (done so that when ur thing isnt visible, it doesnt try to pass mouse related objects) (this also ended up being a lot better for fps than as i was previously doing if thing.visible == false then return end)
				for i, v in next, (obj.mouseconnections) do
					v:Disconnect()
					obj.mouseconnections[i] = v
				end
				if new and obj.Drawingobject.Visible then
					local oldhover = false
					obj.mouseconnections.moved = utilities.mouse.moved:Connect(function()
						obj.hovering = utilities.mousechecks.inbounds(obj, utilities.mouse.position)
						if obj.hovering and oldhover == false then
							obj.mouseenter:Fire()
						end
						if obj.hovering == false and oldhover then
							obj.mouseleave:Fire()
						end
						oldhover = obj.hovering
					end)
					obj.mouseconnections.mouse1down = utilities.mouse.mousebutton1down:Connect(function()
						if obj.hovering then
							obj.clicked:Fire()
							obj.holding = true
						end
					end)
					obj.mouseconnections.mouse2down = utilities.mouse.mousebutton2down:Connect(function()
						if obj.hovering then
							obj.clicked2:Fire()
							obj.holding2 = true
						end
					end)
					obj.mouseconnections.mouse1up = utilities.mouse.mousebutton1up:Connect(function()
						obj.holding = false
					end)
					obj.mouseconnections.mouse2up = utilities.mouse.mousebutton2up:Connect(function()
						obj.holding2 = false
					end)
				end
			end,
			parent = function(obj, new)
				local oldparent = obj.parent

				oldparent.getpropertychangedsignal:Fire("childremoved", obj) -- fuck this, its this things problem now
				table.clear(obj.childupdatespool) -- get rid of the old pool


				local Drawingobj = obj.Drawingobject
				local inque = {} -- minor issue !!

				if obj.updater then
					obj.updater:Disconnect()
				end

				new.getpropertychangedsignal:Fire("childadded", obj)

				for i, v in next, (utilities.childupdate) do
					obj.childupdatespool[i] = v -- save it for ourselves !
					obj.childupdatespool[i](obj, new[i])
					obj.updatechildsignal:Fire(i, obj[i])
				end

				obj.updater = new.updatechildsignal:Connect(function(event, val)
					local isnowvisible = Drawingobj.Visible == false and event == "visible" and val == true
					if obj.childupdatespool[event] then
						obj.childupdatespool[event](obj, new[event])
					end
					if Drawingobj.Visible or isnowvisible or event == "visible" then -- only update if the thing is visible
						obj.updatechildsignal:Fire(event, val) -- how 2 inherit
					else
						inque[event] = val -- ok we missed out on this property
					end
					if isnowvisible then -- we comin' back baby
						for i, v in next, (inque) do -- update the shit we "missed out"
							obj.childupdatespool[i](obj, new[i])
							obj.updatechildsignal:Fire(i, obj[i])
						end
						inque = {}
					end
				end)
			end,
			anchorpoint = function(obj, new) -- kinda fucked but stfu
				local old = obj.absoluteposition

				local parent = obj.parent
				local scalex = obj.position.X.Scale
				local scaley = obj.position.Y.Scale
				local offsetx = obj.position.X.Offset
				local offsety = obj.position.Y.Offset
				local anchorx = new.x
				local anchory = new.y
				local x, y = parent.absolutesize.x * scalex + offsetx, parent.absolutesize.y * scaley + offsety
				x = x - (x * anchorx)
				y = y - (y * anchory) -- anchorpoints !!!!!
				x = _MathFloor(x + 0.5) -- floored cuz dn!!!!!!!!
				y = _MathFloor(y + 0.5)
				local result = _Vector2New(x, y)

				obj.Drawingobject.Position = result
				obj.absoluteposition = obj.Drawingobject.Position
				obj.getpropertychangedsignal:Fire("anchorpoint", new)
				obj.getpropertychangedsignal:Fire("absoluteposition", obj.Drawingobject.Position)
				obj.updatechildsignal:Fire("absoluteposition", result)
			end,
			position = function(obj, new)
				local old = obj.absoluteposition
				local parent = obj.parent
				local scalex = new.X.Scale
				local scaley = new.Y.Scale
				local offsetx = new.X.Offset
				local offsety = new.Y.Offset
				local anchorx = obj.anchorpoint.x
				local anchory = obj.anchorpoint.y
				local x, y = parent.absolutesize.x * scalex + offsetx, parent.absolutesize.y * scaley + offsety
				x = parent.absoluteposition.x + x - (obj.absolutesize.x * anchorx)
				y = parent.absoluteposition.y + y - (obj.absolutesize.y * anchory) -- anchorpoints !!!!!
				x = _MathFloor(x + 0.5)
				y = _MathFloor(y + 0.5)
				local result = _Vector2New(x, y)
				obj.Drawingobject.Position = result
				obj.absoluteposition = obj.Drawingobject.Position

				obj.getpropertychangedsignal:Fire("position", new)
				obj.getpropertychangedsignal:Fire("absoluteposition", obj.Drawingobject.Position)
				obj.updatechildsignal:Fire("absoluteposition", obj.Drawingobject.Position)
			end,
			zindex = function(obj, new)
				obj.Drawingobject.ZIndex = new
				obj.getpropertychangedsignal:Fire("zindex", new)
			end,
			visible = function(obj, new)
				local parent = obj.parent
				obj.Drawingobject.Visible = (parent.Drawingobject.Visible and parent.visible and new == true) and true or false
				obj.getpropertychangedsignal:Fire("visible", obj.Drawingobject.Visible)
				obj.updatechildsignal:Fire("visible", obj.Drawingobject.Visible)
				utilities.setproperty.shared.activated(obj, obj.activated)
			end,
			transparency = function(obj, new)
				obj.Drawingobject.Transparency = new
				obj.getpropertychangedsignal:Fire("transparency", new)
			end,
		},
		frame = { -- ok this fucked up a bit but stfu
			color = function(obj, new)
				obj.Drawingobject.Color = new
				obj.getpropertychangedsignal:Fire("color", new)
			end,
			thickness = function(obj, new)
				obj.Drawingobject.Thickness = new
				obj.getpropertychangedsignal:Fire("thickness", new)
			end,
			filled = function(obj, new)
				obj.Drawingobject.Filled = new
				obj.getpropertychangedsignal:Fire("filled", new)
			end,
			size = function(obj, new) -- this couldve been done for each class like it shouldve but i had too many stack overflows so ripbozo
				local parent = obj.parent

				local old = obj.absolutesize
				local x, y, result

				local scalex = new.X.Scale
				local scaley = new.Y.Scale
				local offsetx = new.X.Offset
				local offsety = new.Y.Offset
				x, y = parent.absolutesize.x * scalex + offsetx, parent.absolutesize.y * scaley + offsety
				x = _MathFloor(x + 0.5)
				y = _MathFloor(y + 0.5)
				result = _Vector2New(x, y)

				obj.Drawingobject.Size = result
				obj.absolutesize = obj.Drawingobject.Size

				obj.getpropertychangedsignal:Fire("size", new)
				obj.getpropertychangedsignal:Fire("absolutesize", obj.Drawingobject.Size)
				obj.updatechildsignal:Fire("absolutesize", obj.Drawingobject.Size)

				utilities.setproperty.shared.position(obj, obj.position)
			end,
		},
		text = {
			color = function(obj, new)
				obj.Drawingobject.Color = new
				obj.getpropertychangedsignal:Fire("color", new)
			end,
			text = function(obj, new)
				obj.Drawingobject.Text = new
				obj.getpropertychangedsignal:Fire("text", new)
				utilities.setproperty.text.size(obj, obj.size)
			end,
			size = function(obj, new) -- this couldve been done for each class like it shouldve but i had too many stack overflows so ripbozo
				local parent = obj.parent

				local old = obj.absolutesize
				local x, y, result

				obj.Drawingobject.Size = new -- a bit fucked
				result = obj.Drawingobject.TextBounds
				x = _MathFloor(result.x)
				y = _MathFloor(result.y)
				result = _Vector2New(x, y)

				obj.absolutesize = result

				obj.getpropertychangedsignal:Fire("size", new)
				obj.getpropertychangedsignal:Fire("absolutesize", obj.absolutesize)
				obj.updatechildsignal:Fire("absolutesize", result)
				utilities.setproperty.shared.position(obj, obj.position)
			end,
			font = function(obj, new)
				obj.Drawingobject.Font = new
				obj.getpropertychangedsignal:Fire("font", new)
			end,
			outline = function(obj, new)
				obj.Drawingobject.Outline = new
				obj.getpropertychangedsignal:Fire("outline", new)
			end,
			outlinecolor = function(obj, new)
				obj.Drawingobject.OutlineColor = new
				obj.getpropertychangedsignal:Fire("outlinecolor", new)
			end,
		},
		image = {
			data = function(obj, new)
				obj.Drawingobject.Data = new
				obj.getpropertychangedsignal:Fire("data", new)
			end,
			rounding = function(obj, new)
				obj.Drawingobject.Rounding = new
				obj.getpropertychangedsignal:Fire("rounding", new)
			end,
			size = function(obj, new) -- this couldve been done for each class like it shouldve but i had too many stack overflows so ripbozo
				local parent = obj.parent

				local old = obj.absolutesize
				local x, y, result

				local scalex = new.X.Scale
				local scaley = new.Y.Scale
				local offsetx = new.X.Offset
				local offsety = new.Y.Offset
				x, y = parent.absolutesize.x * scalex + offsetx, parent.absolutesize.y * scaley + offsety
				x = _MathFloor(x + 0.5)
				y = _MathFloor(y + 0.5)
				result = _Vector2New(x, y)

				obj.Drawingobject.Size = result
				obj.absolutesize = result

				obj.getpropertychangedsignal:Fire("size", new)
				obj.getpropertychangedsignal:Fire("absolutesize", obj.Drawingobject.Size)
				obj.updatechildsignal:Fire("absolutesize", result)
				utilities.setproperty.shared.position(obj, obj.position)
			end,
		},
	}

	utilities.mousechecks = { -- uhhhhh these r things to help with ur mouse related shit
		inbounds = function(obj, pos)
			if obj.Drawingobject.Visible == false then return false end
			local lowx = obj.absoluteposition.x
			local highx = lowx + obj.absolutesize.x
			local lowy = obj.absoluteposition.y
			local highy = lowy + obj.absolutesize.y
			local mousex = pos.x
			local mousey = pos.y

			if mousex > lowx and mousex < highx and mousey > lowy and mousey < highy then
				return true
			else
				return false
			end
		end,
	}

	function utilities.createproperties(obj, active) -- ugh
		local properties = {}
		local writeableproperties = {
			anchorpoint = _Vector2New(),
			parent = utilities.base,
			zindex = 0,
			name = "",
			visible = true,
		}

		local readonlyproperties = {
			Drawing = nil,
			children = {},
			activated = false,
			class = "",
			identifier = "",
			updater = connection,
			childupdatespool = {},
			absolutesize = _Vector2New(),
			absoluteposition = _Vector2New(),
		}

		local events = {
			getpropertychangedsignal = utilities.signal.new(),
			updatechildsignal = utilities.signal.new(), -- time to tell the children to update !
		}

		local activations = {
			hovering = false,
			holding = false,
			holding2 = false,
			clicked = utilities.signal.new(),
			clicked2 = utilities.signal.new(),
			mouseenter = utilities.signal.new(),
			mouseleave = utilities.signal.new()
		}

		local specificproperties = {
			frame = {
				thickness = 0,
				transparency = 1,
				size = _UDim2New(),
				color = _Color3New(),
				filled = false,
				position = _UDim2New()
			},
			text = {
				text = "",
				size = 0,
				outline = false,
				color = _Color3New(),
				transparency = 1,
				outlinecolor = _Color3New(),
				position = _UDim2New(),
				font = Drawing.Fonts.Plex
			},
			image = {
				data = "",
				size = _UDim2New(),
				color = _Color3New(),
				transparency = 1,
				position = _UDim2New(),
				rounding = 0,
			},
		}

		for i, v in next, ({writeableproperties, readonlyproperties, events, activations, specificproperties[obj]}) do
			for i2, v2 in next, (v) do
				properties[i2] = v2 
				v2 = nil
			end
			table.clear(v) -- get rid of it
		end
		return properties
	end


	function utilities:draw(object, properties) -- basically, updating the properties table will update the actual Drawing object
		local kind = utilities.types[object]
		local Drawingobject = Drawing.new(kind)

		local Drawing = {}
		Drawing.__index = Drawing

		local propertylist = utilities.createproperties(object, properties.activated)
		for i, v in next, (propertylist) do
			Drawing[i] = v
		end

		Drawing.identifier = utilities.getnextidentifier() -- increment$per$Drawing$$
		Drawing.class = object
		Drawing.Drawingobject = Drawingobject
		Drawing.activated = properties.activated
		Drawing.mouseconnections = {}

		local proxy = Drawing -- proxy for metatable stuff

		local newindexpool = {} -- this is our pool of corresponding newindex funcs
		for i, v in next, (utilities.setproperty[object]) do -- specific funcs
			newindexpool[i] = v
		end
		for i, v in next, (utilities.setproperty.shared) do -- add shared funcs
			newindexpool[i] = v
		end

		Drawing = setmetatable({}, { -- set the mt
			__index = function(self, i)
				return proxy[i]
			end,
			__newindex = function(self, i, v)
				if newindexpool[i] then -- is there a special way to update this property or na
					newindexpool[i](self, v) -- update the property how it should be
				end
				proxy[i] = v
			end
		})

		function Drawing:destroy() -- errors a bit but itll do
			Drawing.parent.getpropertychangedsignal:Fire("childremoved", Drawing) -- no more parent :sad:
			Drawing.visible = false -- :wave:
			Drawing.Drawingobject:Remove()
			Drawing.Drawingobject = nil
			Drawing.getpropertychangedsignal:Fire("parentdestroyed") -- get rid of the chain of shit
			table.clear(Drawing)
			Drawing = nil
		end

		Drawing.getpropertychangedsignal:Connect(function(event, val) -- p10000000000000000 parenting fix
			local DrawingChildren = Drawing.children
			local ident = val and _Type(val) == "table" and val.identifier
			if event == "childadded" then
				DrawingChildren[ident] = val
			elseif event == "childremoved" then -- although its kinda dumb, id say its not too bad becuz its faster than iterating thru god knows how many children and comparing tables
				DrawingChildren[ident] = nil
			elseif event == "parentdestroyed" then
				Drawing:destroy()
			end
		end)

		-- i had to.. sorry!!!!
		local propertiesinque = {}
		for i, v in ipairs(utilities.operationorder) do
			if properties[v] then
				propertiesinque[1 + #propertiesinque] = {
					key = v,
					value = properties[v]
				}
				properties[v] = nil
			end
		end

		for i, v in next, (properties) do
			propertiesinque[1 + #propertiesinque] = {
				key = i,
				value = v
			}
		end

		for i, v in ipairs(propertiesinque) do
			local property = v.key
                        local value = v.value
			Drawing[property] = value
		end

		Drawings[1 + #Drawings] = Drawing -- keep a record of it just in case
		return Drawing
	end

	local uilib = {}
	uilib.__index = uilib
	function uilib:start(parameters)
		-- okay actual design starts
		local menu = {}
		menu.__index = menu
		menu.basezindex = parameters.basezindex or 69420 -- haha funny
		menu.startingParameters = parameters
		menu.uiopen = true
		menu.dragging = false
		menu.objects = {}
		menu.username = "developer"
		menu.flags = {}
		menu.isadropdownopen = false -- shitty fix but itll work
		menu.isacolorpickeropen = false
		menu.tabs = {}
		menu.subsections = {}
		menu.subtabs = {}
		menu.directory = {}
		menu.openclose = {} -- things that are to have the open and close animation
		menu.elements = {}
		menu.activations = {}
		menu.accent = parameters.accent
		menu.cheatname = parameters.name
		menu.accents = {}
		menu.imagecache = {}

		menu.validkeys = {
			"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",
		}

		menu.validnumberkeys = {
			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 = "=",
			Backquote = "`",
			Plus = "+",
			Comma = ",",
			Period = ".",
		}

		local colorpickerClipBoard
		local menucolors = parameters.colors
		local colorGroups = {}
		for i, v in next, parameters.colors do
			colorGroups[i] = {}
		end

		local DrawingFunction = function(object, props)
			local thisDrawing = utilities:draw(object, props)
			for i, v in next, parameters.colors do
				if props.color == v then
					local nextIndex = 1 + #colorGroups[i]
					colorGroups[i][nextIndex] = thisDrawing
				end
			end
			return thisDrawing
		end
		menu.colorGroups = colorGroups
		menu.DrawingFunction = DrawingFunction

		menu.objects.backborder = DrawingFunction("frame", {
			parent = utilities.base,
			anchorpoint = _Vector2New(0, 0),
			size = _UDim2New(0, parameters.size.x, 0, parameters.size.y),
			position = _UDim2New(0, (utilities.base.absolutesize.x / 2) + (-parameters.size.x / 2), 0, (utilities.base.absolutesize.y / 2) + (-parameters.size.y / 2)), -- sex
			zindex = menu.basezindex + -3,
			color = parameters.colors.a,
			visible = false,
			thickness = 1,
			transparency = 1,
			filled = false,
			name = "okay",
		})
		menu.openclose[1 + #menu.openclose] = menu.objects.backborder

		local fuck = _Instancenew("ScreenGui", CoreGui) -- not something im happy about but this is so that clicking on the ui blocks every other click
		local bitch = _Instancenew("Frame", fuck)
		bitch.Size = _UDim2New(0, 0, 0, 0)
		bitch.Active = true
		bitch.Selectable = true
		bitch.Transparency = 1
		bitch.Position = _UDim2New(0, 0, 0, 0)

		menu.objects.backborder.getpropertychangedsignal:Connect(function(prop, val)
			if prop == "visible" then
				bitch.Visible = val
			end
		end)

		menu.objects.dragdetection = DrawingFunction("frame", { -- uh dn
			parent = menu.objects.backborder,
			anchorpoint = _Vector2New(0.5, 0),
			size = _UDim2New(1, 0, 0, 14),
			position = _UDim2New(0.5, 0, 0, 0),
			zindex = menu.basezindex + 12,
			color = _Color3FromRGB(255, 255, 255),
			visible = true,
			thickness = 0,
			transparency = 0,
			filled = true,
			activated = true,
			name = "okay 2",
		})

		menu.objects.resizedetection = DrawingFunction("frame", { -- yes, this is a thing
			parent = menu.objects.backborder,
			anchorpoint = _Vector2New(1, 1),
			size = _UDim2New(0, 8, 0, 8),
			position = _UDim2New(1, 0, 1, 0),
			zindex = menu.basezindex + 12,
			color = _Color3FromRGB(255, 255, 255),
			visible = true,
			thickness = 0,
			transparency = 0,
			filled = true,
			activated = true,
			name = "okay 2",
		})

		function menu:setsize(size)
			menu.objects.backborder.size = _UDim2New(0, _MathMin(size.x, parameters.size.x), 0, _MathMin(size.y, parameters.size.y))
		end

		local outerTransparency = 0.75
		local outerTransparency2 = 0.65

		menu.objects.outerfirst = DrawingFunction("frame", {
			parent = menu.objects.backborder,
			anchorpoint = _Vector2New(0.5, 0.5),
			size = _UDim2New(1, -2, 1, -2),
			position = _UDim2New(0.5, 0, 0.5, 0), -- sex
			zindex = menu.basezindex + -2,
			color = parameters.colors.b,
			visible = true,
			thickness = 1,
			transparency = outerTransparency,
			filled = false,
			name = "okay",
		})
		menu.openclose[1 + #menu.openclose] = menu.objects.outerfirst

		menu.objects.outersecond1 = DrawingFunction("frame", {
			parent = menu.objects.outerfirst,
			anchorpoint = _Vector2New(0.5, 0.5),
			size = _UDim2New(1, -2, 1, -2),
			position = _UDim2New(0.5, 0, 0.5, 0), -- sex
			zindex = menu.basezindex + -2,
			color = parameters.colors.c,
			visible = true,
			thickness = 1,
			transparency = outerTransparency,
			filled = false,
			name = "okay",
		})
		menu.openclose[1 + #menu.openclose] = menu.objects.outersecond1

		menu.objects.outersecond = DrawingFunction("frame", {
			parent = menu.objects.outersecond1,
			anchorpoint = _Vector2New(0.5, 0.5),
			size = _UDim2New(1, -2, 1, -2),
			position = _UDim2New(0.5, 0, 0.5, 0), -- sex
			zindex = menu.basezindex + -2,
			color = parameters.colors.c,
			visible = true,
			thickness = 1,
			transparency = outerTransparency,
			filled = false,
			name = "okay",
		})
		menu.openclose[1 + #menu.openclose] = menu.objects.outersecond

		menu.objects.outerthird = DrawingFunction("frame", {
			parent = menu.objects.outersecond,
			anchorpoint = _Vector2New(0.5, 0.5),
			size = _UDim2New(1, -2, 1, -2),
			position = _UDim2New(0.5, 0, 0.5, 0), -- sex
			zindex = menu.basezindex + -2,
			color = parameters.colors.b,
			visible = true,
			thickness = 1,
			transparency = outerTransparency,
			filled = false,
			name = "okay",
		})
		menu.openclose[1 + #menu.openclose] = menu.objects.outerthird

		menu.objects.innerfirst = DrawingFunction("frame", {
			parent = menu.objects.outerthird,
			anchorpoint = _Vector2New(0.5, 0.5),
			size = _UDim2New(1, -2, 1, -2),
			position = _UDim2New(0.5, 0, 0.5, 0), -- sex
			zindex = menu.basezindex + -2,
			color = parameters.colors.a,
			visible = true,
			thickness = 0,
			transparency = outerTransparency2,
			filled = true,
			name = "okay",
		})
		menu.openclose[1 + #menu.openclose] = menu.objects.innerfirst

		menu.objects.tabsholder = DrawingFunction("frame", {
			parent = menu.objects.outerthird,
			anchorpoint = _Vector2New(0.5, 0),
			size = _UDim2New(1, -38, 0, 18),
			position = _UDim2New(0.5, 0, 0, 8), -- sex
			zindex = menu.basezindex + -2,
			color = _Color3New(1, 1, 1),
			visible = true,
			thickness = 0,
			transparency = 0,
			filled = true,
			name = "okay",
		})

		menu.objects.containerfirst = DrawingFunction("frame", {
			parent = menu.objects.outerthird,
			anchorpoint = _Vector2New(0.5, 0.5),
			size = _UDim2New(1, -36, 1, -48),
			position = _UDim2New(0.5, 0, 0.5, 8), -- sex
			zindex = menu.basezindex + -2,
			color = parameters.colors.a,
			visible = true,
			thickness = 1,
			transparency = 1,
			filled = false,
			name = "okay",
		})
		menu.openclose[1 + #menu.openclose] = menu.objects.containerfirst

		menu.objects.containersecond = DrawingFunction("frame", {
			parent = menu.objects.containerfirst,
			anchorpoint = _Vector2New(0.5, 0.5),
			size = _UDim2New(1, -2, 1, -2),
			position = _UDim2New(0.5, 0, 0.5, 0), -- sex
			zindex = menu.basezindex + -2,
			color = parameters.colors.c,
			visible = true,
			thickness = 1,
			transparency = 1,
			filled = false,
			name = "okay",
		})
		menu.openclose[1 + #menu.openclose] = menu.objects.containersecond

		menu.objects.maincontainer = DrawingFunction("frame", {
			parent = menu.objects.containersecond,
			anchorpoint = _Vector2New(0.5, 0.5),
			size = _UDim2New(1, -2, 1, -2),
			position = _UDim2New(0.5, 0, 0.5, 0), -- sex
			zindex = menu.basezindex + -2,
			color = parameters.colors.e,
			visible = true,
			thickness = 0,
			transparency = 1,
			filled = true,
			name = "okay",
		})
		menu.openclose[1 + #menu.openclose] = menu.objects.maincontainer

		menu.objects.tabs = {}

		local function openedtab(tab) -- fuck u fuck u fuck u
			if menu.uiopen == false then return end
			for i, v in next, (menu.objects.tabs) do
				local this = v
				if i ~= tab then -- not us
					if this.maincontainer.visible ~= false then
						this.maincontainer.visible = false
						for i2, v2 in next, (this.toggle) do
							v2.visible = false
						end
					end
				else
					if this.maincontainer.visible ~= true then
						this.maincontainer.visible = true
						this.maincontainer.position = this.maincontainer.position
						this.maincontainer.size = this.maincontainer.size
						for i2, v2 in next, (this.toggle) do
							v2.visible = true
						end
					end
				end
			end
		end

		for i, v in next, (parameters.tabs) do
			local this = {}
			local tab = v
			this.maincontainer = DrawingFunction("frame", { -- thing
				parent = menu.objects.maincontainer,
				anchorpoint = _Vector2New(0.5, 0.5),
				size = _UDim2New(1, -32, 1, -32),
				position = _UDim2New(0.5, 0, 0.5, 0),
				zindex = menu.basezindex + 1,
				color = _Color3FromRGB(46, 46, 46),
				visible = false,
				thickness = 0,
				transparency = 0,
				filled = true,
				name = "okay",
			})

			this.elementbox = DrawingFunction("frame", { -- actually holds buttons n shit
				parent = this.maincontainer,
				anchorpoint = _Vector2New(0.5, 0.5),
				size = _UDim2New(1, 0, 1, 0),
				position = _UDim2New(0.5, 0, 0.5, 0),
				zindex = menu.basezindex + 2,
				color = _Color3New(1, 1, 1),
				visible = true,
				thickness = 0,
				transparency = 0,
				filled = true,
				name = "okay",
			})

			this.titleback = DrawingFunction("frame", {
				parent = menu.objects.tabsholder,
				anchorpoint = _Vector2New(0, 0.5),
				size = _UDim2New(1 / #parameters.tabs, 0, 1, 0),
				position = _UDim2New((i - 1) * (1 / #parameters.tabs), 0, 0.5, 0),
				zindex = menu.basezindex + 2,
				color = _Color3FromRGB(46, 46, 46),
				visible = true,
				thickness = 0,
				transparency = 0,
				filled = true,
				activated = true,
				name = "okay",
			})

			this.title = DrawingFunction("text", {
				parent = this.titleback,
				anchorpoint = _Vector2New(0, 0),
				size = 13, -- x3
				font = Drawing.Fonts.Plex,
				position = _UDim2New(0.5, -((#tab * 7)/2), 0.5, -8),
				zindex = menu.basezindex + 4,
				color = _Color3FromRGB(255, 255, 255),
				visible = true,
				text = tab,
				name = "okay",
			})
			menu.openclose[1 + #menu.openclose] = this.title

			this.toggleback = {}
			this.toggle = {}
			for i2 = 1, 2 do -- what the fuck??
				this.toggleback[i2] = DrawingFunction("frame", {
					parent = this.titleback,
					anchorpoint = _Vector2New(0.5, 0),
					size = _UDim2New(1, -4, 0, 2),
					position = _UDim2New(0.5, 0, 0, 15 + (i2 * 2)),
					zindex = menu.basezindex + 2,
					color = parameters.colors.f:lerp(parameters.colors.g, (i2 - 1) / 1),
					visible = true,
					thickness = 0,
					transparency = 1,
					filled = true,
					name = "okay",
				})
				menu.openclose[1 + #menu.openclose] = this.toggleback[i2]

				this.toggle[i2] = DrawingFunction("frame", {
					parent = this.titleback,
					anchorpoint = _Vector2New(0.5, 0),
					size = _UDim2New(1, -4, 0, 2),
					position = _UDim2New(0.5, 0, 0, 15 + (i2 * 2)),
					zindex = menu.basezindex + 2,
					color = parameters.accent:lerp(_Color3FromRGB(_MathClamp((parameters.accent.r * 255) - 100, 0, 255), _MathClamp((parameters.accent.g * 255) - 100, 0, 255), _MathClamp((parameters.accent.b * 255) - 100, 0, 255)), ((i2 - 1) / 1)),
					visible = i == 1,
					thickness = 0,
					transparency = 1,
					filled = true,
					name = "okay",
				})
				menu.openclose[1 + #menu.openclose] = this.toggle[i2]
			end
			menu.accents[1 + #menu.accents] = {this.toggle, "tabs"}

			menu.objects.tabs[tab] = this
			menu.subsections[tab] = {}
			menu.subtabs[tab] = {}
			menu.subsections[tab][1] = {}
			menu.subsections[tab][2] = {}
			menu.tabs[tab] = this.elementbox
			menu.directory[tab] = {}
			menu.elements[tab] = {}

			this.titleback.clicked:Connect(function()
				openedtab(tab)
			end)
		end

		openedtab(parameters.tabs[1])

		function menu:createsubsection(param) -- hiii gassy wassy <3
			local tab = param.tab
			local targettab = menu.tabs[tab]
			local name = param.name
			local side = param.side
			--local length = _MathFloor((parameters.length * targettab.absolutesize.y) + 0.5)
			local this = {}

			local xoffset = 0
			local yoffset = 0

			-- check the bounds
			local lastid = 0
			for i, v in next, (menu.subsections[tab][side]) do
				yoffset = yoffset + v.bounds.y
				if v.id > lastid then
					lastid = v.id
				end
			end
			this.id = lastid + 1
			xoffset = (side - 1) * targettab.absolutesize.x / 2
			yoffset = yoffset / targettab.absolutesize.y

			this.maincontainer = DrawingFunction("frame", { -- for getting the bounds of the thing
				parent = targettab,
				anchorpoint = _Vector2New(0, 0),
				size = _UDim2New(0.5, 0, param.length, 0),
				position = _UDim2New((side - 1) / 2, 0, yoffset, 0),
				zindex = menu.basezindex + 5,
				color = _Color3FromRGB(0, 0, 0),
				visible = true,
				thickness = 0,
				transparency = 0,
				activated = true,
				filled = true,
				name = "okay",
			})
			this.container = DrawingFunction("frame", { -- for getting the bounds of the thing
				parent = this.maincontainer,
				anchorpoint = _Vector2New(0.5, 0.5),
				size = _UDim2New(1, -16, 1, -16),
				position = _UDim2New(0.5, 0, 0.5, 0),
				zindex = menu.basezindex + 6,
				color = parameters.colors.e,
				visible = true,
				thickness = 0,
				transparency = 1,
				filled = true,
				activated = true,
				name = "okay",
			})
			menu.openclose[1 + #menu.openclose] = this.container

			do
				local scrollBar = {}
				scrollBar.maincontainer = DrawingFunction("frame", { -- for getting the bounds of the thing
					parent = this.container,
					anchorpoint = _Vector2New(0, 0.5),
					size = _UDim2New(0, 3, 1, 0),
					position = _UDim2New(1, -3, 0.5, 0),
					zindex = menu.basezindex + 7,
					color = parameters.colors.c,
					visible = false,
					thickness = 0,
					filled = true,
					activated = true,
					name = "okay",
				})
				menu.openclose[1 + #menu.openclose] = scrollBar.maincontainer
				scrollBar.scroller = DrawingFunction("frame", { -- for getting the bounds of the thing
					parent = scrollBar.maincontainer,
					anchorpoint = _Vector2New(1, 0),
					size = _UDim2New(0, 2, 0.5, 0),
					position = _UDim2New(1, 0, 0, 1),
					zindex = menu.basezindex + 8,
					--color = parameters.colors.f,
					color = menu.accent,
					visible = false,
					thickness = 0,
					filled = true,
					name = "okay",
				})
				menu.openclose[1 + #menu.openclose] = scrollBar.scroller
				menu.accents[1 + #menu.accents] = scrollBar.scroller

				if not param.ignoreScrolling then
					utilities.mouse.scrollup:Connect(function(d)
						if menu.isadropdownopen  or menu.isacolorpickeropen or menu.uiopen == false then return end
						if utilities.mousechecks.inbounds(this.container, utilities.mouse.position) and this.container.Drawingobject.Visible and scrollBar.maincontainer.Drawingobject.Visible then
							local currentY = scrollBar.scroller.position.Y.Offset - (d * 10)
							currentY = _MathClamp(currentY, 1, scrollBar.maincontainer.absolutesize.y - scrollBar.scroller.absolutesize.y - 1)
							scrollBar.scroller.position = _UDim2New(1, 0, 0, currentY)

							local scrolledBy = (currentY - 1) / (scrollBar.maincontainer.absolutesize.y - scrollBar.scroller.absolutesize.y - 1)

							local shitInPanel = 8
							for i, v in next, (menu.elements[tab][name]) do
								if _Type(v) == "table" then
									shitInPanel = shitInPanel + v.bounds.y
								end
							end
							shitInPanel = shitInPanel + 24

							for i, v in next, (menu.elements[tab][name]) do
								if _Type(v) == "table" then
									local theFlag = v.myflag

									if theFlag.type == "toggle" or theFlag.type == "button" or theFlag.type == "textbox" then
										v.hitbox.position = _UDim2New(v.hitbox.position.X.Scale, v.hitbox.position.X.Offset, -scrolledBy * ((shitInPanel - this.container.absolutesize.y) / this.container.absolutesize.y), v.hitbox.position.Y.Offset)
										if v.hitbox.absoluteposition.y + v.bounds.y > ((this.container.absolutesize.y + this.container.absoluteposition.y) - 8) or v.hitbox.absoluteposition.y < this.container.absoluteposition.y then
											v.hitbox.visible = false
										else
											v.hitbox.visible = true

											v.hitbox.size = v.hitbox.size + _UDim2New(0, 1, 0, 1)
											v.hitbox.size = v.hitbox.size - _UDim2New(0, 1, 0, 1)
										end
									elseif theFlag.type == "slider" or theFlag.type == "dropdown" then
										v.holder.position = _UDim2New(v.holder.position.X.Scale, v.holder.position.X.Offset, -scrolledBy * ((shitInPanel - this.container.absolutesize.y) / this.container.absolutesize.y), v.holder.position.Y.Offset)
										if v.holder.absoluteposition.y + v.bounds.y > ((this.container.absolutesize.y + this.container.absoluteposition.y) - 8) or v.holder.absoluteposition.y < this.container.absoluteposition.y then
											v.holder.visible = false
										else
											v.holder.visible = true

											v.holder.size = v.holder.size + _UDim2New(0, 1, 0, 1)
											v.holder.size = v.holder.size - _UDim2New(0, 1, 0, 1)
										end
									end
								end
							end
						end
					end)
					utilities.mouse.scrolldown:Connect(function(d)
						if menu.isadropdownopen  or menu.isacolorpickeropen or menu.uiopen == false then return end
						if utilities.mousechecks.inbounds(this.container, utilities.mouse.position) and this.container.Drawingobject.Visible and scrollBar.maincontainer.Drawingobject.Visible then
							local currentY = scrollBar.scroller.position.Y.Offset - (d * 10)
							currentY = _MathClamp(currentY, 1, scrollBar.maincontainer.absolutesize.y - scrollBar.scroller.absolutesize.y - 1)
							scrollBar.scroller.position = _UDim2New(1, 0, 0, currentY)

							local scrolledBy = (currentY - 1) / (scrollBar.maincontainer.absolutesize.y - scrollBar.scroller.absolutesize.y - 1)

							local shitInPanel = 8
							for i, v in next, (menu.elements[tab][name]) do
								if _Type(v) == "table" then
									shitInPanel = shitInPanel + v.bounds.y
								end
							end
							shitInPanel = shitInPanel + 24

							for i, v in next, (menu.elements[tab][name]) do
								if _Type(v) == "table" then
									local theFlag = v.myflag

									if theFlag.type == "toggle" or theFlag.type == "button" or theFlag.type == "textbox" then
										v.hitbox.position = _UDim2New(v.hitbox.position.X.Scale, v.hitbox.position.X.Offset, -scrolledBy * ((shitInPanel - this.container.absolutesize.y) / this.container.absolutesize.y), v.hitbox.position.Y.Offset)
										if v.hitbox.absoluteposition.y + v.bounds.y > ((this.container.absolutesize.y + this.container.absoluteposition.y) - 8) or v.hitbox.absoluteposition.y < this.container.absoluteposition.y then
											v.hitbox.visible = false
										else
											v.hitbox.visible = true

											v.hitbox.size = v.hitbox.size + _UDim2New(0, 1, 0, 1)
											v.hitbox.size = v.hitbox.size - _UDim2New(0, 1, 0, 1)
										end
									elseif theFlag.type == "slider" or theFlag.type == "dropdown" then
										v.holder.position = _UDim2New(v.holder.position.X.Scale, v.holder.position.X.Offset, -scrolledBy * ((shitInPanel - this.container.absolutesize.y) / this.container.absolutesize.y), v.holder.position.Y.Offset)
										if v.holder.absoluteposition.y + v.bounds.y > ((this.container.absolutesize.y + this.container.absoluteposition.y) - 8) or v.holder.absoluteposition.y < this.container.absoluteposition.y then
											v.holder.visible = false
										else
											v.holder.visible = true

											v.holder.size = v.holder.size + _UDim2New(0, 1, 0, 1)
											v.holder.size = v.holder.size - _UDim2New(0, 1, 0, 1)
										end
									end
								end
							end
						end
					end)
				end

				if not param.ignoreScrolling then
					scrollBar.maincontainer.clicked:Connect(function()
						if menu.isadropdownopen  or menu.isacolorpickeropen or menu.uiopen == false then return end
						scrollBar.updaterConn = utilities.mouse.moved:Connect(function()
							local currentY = utilities.mouse.position.y - scrollBar.maincontainer.absoluteposition.y - _MathFloor(scrollBar.scroller.absolutesize.y / 2)
							currentY = _MathClamp(currentY, 1, scrollBar.maincontainer.absolutesize.y - scrollBar.scroller.absolutesize.y - 1)
							scrollBar.scroller.position = _UDim2New(1, 0, 0, currentY)

							local scrolledBy = (currentY - 1) / (scrollBar.maincontainer.absolutesize.y - scrollBar.scroller.absolutesize.y - 1)

							local shitInPanel = 8
							for i, v in next, (menu.elements[tab][name]) do
								if _Type(v) == "table" then
									shitInPanel = shitInPanel + v.bounds.y
								end
							end
							shitInPanel = shitInPanel + 24

							for i, v in next, (menu.elements[tab][name]) do
								if _Type(v) == "table" then
									local theFlag = v.myflag

									if theFlag.type == "toggle" or theFlag.type == "button" or theFlag.type == "textbox" then
										v.hitbox.position = _UDim2New(v.hitbox.position.X.Scale, v.hitbox.position.X.Offset, -scrolledBy * ((shitInPanel - this.container.absolutesize.y) / this.container.absolutesize.y), v.hitbox.position.Y.Offset)
										if v.hitbox.absoluteposition.y + v.bounds.y > ((this.container.absolutesize.y + this.container.absoluteposition.y) - 8) or v.hitbox.absoluteposition.y < this.container.absoluteposition.y then
											v.hitbox.visible = false
										else
											v.hitbox.visible = true

											v.hitbox.size = v.hitbox.size + _UDim2New(0, 1, 0, 1)
											v.hitbox.size = v.hitbox.size - _UDim2New(0, 1, 0, 1)
										end
									elseif theFlag.type == "slider" or theFlag.type == "dropdown" then
										v.holder.position = _UDim2New(v.holder.position.X.Scale, v.holder.position.X.Offset, -scrolledBy * ((shitInPanel - this.container.absolutesize.y) / this.container.absolutesize.y), v.holder.position.Y.Offset)
										if v.holder.absoluteposition.y + v.bounds.y > ((this.container.absolutesize.y + this.container.absoluteposition.y) - 8) or v.holder.absoluteposition.y < this.container.absoluteposition.y then
											v.holder.visible = false
										else
											v.holder.visible = true

											v.holder.size = v.holder.size + _UDim2New(0, 1, 0, 1)
											v.holder.size = v.holder.size - _UDim2New(0, 1, 0, 1)
										end
									end
								end
							end
						end)
					end)

					utilities.mouse.mousebutton1up:Connect(function()
						if scrollBar.updaterConn then 
							scrollBar.updaterConn:Disconnect()
						end
					end)
					this.scrollBar = scrollBar
				end
			end

			this.containeroutline = DrawingFunction("frame", { -- for getting the bounds of the thing
				parent = this.container,
				anchorpoint = _Vector2New(0.5, 0.5),
				size = _UDim2New(1, 2, 1, 2),
				position = _UDim2New(0.5, 0, 0.5, 0),
				zindex = menu.basezindex + 5,
				color = parameters.colors.c,
				visible = true,
				thickness = 1,
				filled = false,
				name = "okay",
			})
			menu.openclose[1 + #menu.openclose] = this.containeroutline

			this.containeroutline2 = DrawingFunction("frame", { -- for getting the bounds of the thing
				parent = this.containeroutline,
				anchorpoint = _Vector2New(0.5, 0.5),
				size = _UDim2New(1, 2, 1, 2),
				position = _UDim2New(0.5, 0, 0.5, 0),
				zindex = menu.basezindex + 4,
				color = parameters.colors.a,
				visible = true,
				thickness = 1,
				filled = false,
				name = "okay",
			})
			menu.openclose[1 + #menu.openclose] = this.containeroutline2

			this.title = DrawingFunction("text", {
				parent = this.container,
				anchorpoint = _Vector2New(0, 0.5),
				size = 13, -- x3
				font = Drawing.Fonts.Plex,
				position = _UDim2New(0, 18, 0, -2),
				zindex = menu.basezindex + 12,
				color = _Color3FromRGB(255, 255, 255),
				visible = true,
				text = name,
				name = "okay",
			})
			menu.openclose[1 + #menu.openclose] = this.title

			do
				local dragConn
				this.maincontainer.clicked:Connect(function()
					if menu.isadropdownopen  or menu.isacolorpickeropen or menu.uiopen == false then return end
					if utilities.mouse.position.y > (this.container.absoluteposition.y + this.container.absolutesize.y) and not param.ignoreResizing then
						dragConn = RunService.RenderStepped:Connect(function()
							this.title.color = menu.accent
							this.containeroutline.color = menu.accent
							local real = utilities.mouse.position.y - this.container.absoluteposition.y
							local nextPanel = nil
							for i, v in next, menu.subsections[tab][side] do
								if v.id == this.id + 1 then
									nextPanel = v
									break
								end
							end

							local emptySpace = targettab.absolutesize.y
							for i, v in next, menu.subsections[tab][side] do
								if v ~= this then
									emptySpace = emptySpace - v.maincontainer.absolutesize.y
								end
							end
							local canExtendUpTo = emptySpace / targettab.absolutesize.y

							this.maincontainer.size = _UDim2New(0.5, 0, _MathClamp(real / (targettab.absolutesize.y), 0.1, canExtendUpTo), 0)

							local positions = {}
							for i, v in next, (menu.subsections[tab][side]) do
								positions[1 + #positions] = {
									yPos = v.maincontainer.absoluteposition.y,
									ref = v
								}
							end

							_TableSort(positions, function(a, b) return a.yPos < b.yPos end)

							local yoffset = 0
							local real = 0
							for i, v in next, (positions) do
								real = real + 1
								v.ref.maincontainer.position = _UDim2New((side - 1) / 2, 0, yoffset / targettab.absolutesize.y, 0)
								v.ref.id = real
								yoffset = yoffset + v.ref.bounds.y
							end  
						end)
					elseif utilities.mouse.position.y < this.container.absoluteposition.y and not param.ignoreMoving then
						local clickedWhere = utilities.mouse.position - this.maincontainer.absoluteposition
						dragConn = RunService.RenderStepped:Connect(function()
							this.title.color = menu.accent
							this.containeroutline.color = menu.accent
							this.maincontainer.position = _UDim2New(this.maincontainer.position.X.Scale, utilities.mouse.position.x - clickedWhere.x - ((this.maincontainer.position.X.Scale * targettab.absolutesize.X) + targettab.absoluteposition.X), this.maincontainer.position.Y.Scale, utilities.mouse.position.y - clickedWhere.y - ((this.maincontainer.position.Y.Scale * targettab.absolutesize.y) + targettab.absoluteposition.y))

							local prevside = side
							if this.maincontainer.absoluteposition.x < targettab.absoluteposition.x then
								if menu.subsections[tab][side - 1] then
									menu.subsections[tab][side][name] = nil
									side = side - 1
								end
							elseif this.maincontainer.absoluteposition.x > targettab.absoluteposition.x + targettab.absolutesize.x then
								if menu.subsections[tab][side + 1] then
									menu.subsections[tab][side][name] = nil
									side = side + 1
								end
							end

							if side ~= prevside then
								menu.subsections[tab][side][name] = this
								do
									local totalBoundsOfShit = 0
									local things = 0
									for i, v in next, (menu.subsections[tab][prevside]) do
										v.maincontainer.size = v.panelResize.originalSize

										totalBoundsOfShit = totalBoundsOfShit + v.maincontainer.absolutesize.y
										things = things + 1
									end
									if totalBoundsOfShit > targettab.absolutesize.y then
										totalBoundsOfShit = 0
										for i, v in next, (menu.subsections[tab][prevside]) do
											local shitInPanel = 8
											for i2, v2 in next, (menu.elements[tab][i]) do
												if _Type(v2) == "table" then
													shitInPanel = shitInPanel + v2.bounds.y
												end
											end

											-- nigeh u dont need THAT much space xD
											if v.container.absolutesize.y > shitInPanel then
												v.maincontainer.size = _UDim2New(v.maincontainer.size.X.Scale, v.maincontainer.size.X.Offset, (shitInPanel + 24) / targettab.absolutesize.y, 0)
											end
											totalBoundsOfShit = totalBoundsOfShit + v.maincontainer.absolutesize.y
										end
									end
									if totalBoundsOfShit > targettab.absolutesize.y then
										local howMuchBiggerIsThisBullshit = (totalBoundsOfShit - targettab.absolutesize.y) / targettab.absolutesize.y
										local eachSmallerBy = howMuchBiggerIsThisBullshit / things

										for i, v in next, (menu.subsections[tab][prevside]) do
											v.maincontainer.size = _UDim2New(v.maincontainer.size.X.Scale, v.maincontainer.size.X.Offset, v.maincontainer.size.Y.Scale - eachSmallerBy, v.maincontainer.size.Y.Offset)
										end
									end
								end
								do
									local totalBoundsOfShit = 0
									local things = 0
									for i, v in next, (menu.subsections[tab][side]) do
										v.maincontainer.size = v.panelResize.originalSize

										totalBoundsOfShit = totalBoundsOfShit + v.maincontainer.absolutesize.y
										things = things + 1
									end
									if totalBoundsOfShit > targettab.absolutesize.y then
										totalBoundsOfShit = 0
										for i, v in next, (menu.subsections[tab][side]) do
											local shitInPanel = 8
											for i2, v2 in next, (menu.elements[tab][i]) do
												if _Type(v2) == "table" then
													shitInPanel = shitInPanel + v2.bounds.y
												end
											end

											-- nigeh u dont need THAT much space xD
											if v.container.absolutesize.y > shitInPanel then
												v.maincontainer.size = _UDim2New(v.maincontainer.size.X.Scale, v.maincontainer.size.X.Offset, (shitInPanel + 24) / targettab.absolutesize.y, 0)
											end
											totalBoundsOfShit = totalBoundsOfShit + v.maincontainer.absolutesize.y
										end
									end
									if totalBoundsOfShit > targettab.absolutesize.y then
										local howMuchBiggerIsThisBullshit = (totalBoundsOfShit - targettab.absolutesize.y) / targettab.absolutesize.y
										local eachSmallerBy = howMuchBiggerIsThisBullshit / things

										for i, v in next, (menu.subsections[tab][side]) do
											v.maincontainer.size = _UDim2New(v.maincontainer.size.X.Scale, v.maincontainer.size.X.Offset, v.maincontainer.size.Y.Scale - eachSmallerBy, v.maincontainer.size.Y.Offset)
										end
									end
								end
							end

							do  
								local positions = {}
								for i, v in next, (menu.subsections[tab][side]) do
									positions[1 + #positions] = {
										yPos = v.maincontainer.absoluteposition.y,
										ref = v
									}
								end

								_TableSort(positions, function(a, b) return a.yPos < b.yPos end)

								local yoffset = 0
								local real = 0
								for i, v in next, (positions) do
									real = real + 1
									if v.ref ~= this then
										v.ref.maincontainer.position = _UDim2New((side - 1) / 2, 0, yoffset / targettab.absolutesize.y, 0)
									end
									v.ref.id = real
									yoffset = yoffset + v.ref.bounds.y
								end  
								if side ~= prevside then
									local positions = {}
									for i, v in next, (menu.subsections[tab][prevside]) do
										positions[1 + #positions] = {
											yPos = v.maincontainer.absoluteposition.y,
											ref = v
										}
									end

									_TableSort(positions, function(a, b) return a.yPos < b.yPos end)

									local yoffset = 0
									local real = 0
									for i, v in next, (positions) do
										real = real + 1
										v.ref.maincontainer.position = _UDim2New((prevside - 1) / 2, 0, yoffset / targettab.absolutesize.y, 0)
										v.ref.id = real
										yoffset = yoffset + v.ref.bounds.y
									end  
								end
							end                                
						end)
					end
				end)

				utilities.mouse.mousebutton1up:Connect(function()
					if dragConn then
						this.title.color = _Color3FromRGB(255, 255, 255)
						this.containeroutline.color = parameters.colors.c
						dragConn:Disconnect()

						local positions = {}
						for i, v in next, (menu.subsections[tab][side]) do
							positions[1 + #positions] = {
								yPos = v.maincontainer.absoluteposition.y,
								ref = v
							}
						end

						_TableSort(positions, function(a, b) return a.yPos < b.yPos end)

						local yoffset = 0
						local real = 0
						for i, v in next, (positions) do
							real = real + 1
							v.ref.maincontainer.position = _UDim2New((side - 1) / 2, 0, yoffset / targettab.absolutesize.y, 0)
							v.ref.id = real
							yoffset = yoffset + v.ref.bounds.y
						end                                        
					end
				end)
			end


			this.block = DrawingFunction("frame", {
				parent = this.title,
				anchorpoint = _Vector2New(0.5, 0.5),
				size = _UDim2New(1, 8, 0, 2),
				position = _UDim2New(0.5, 0, 0.5, 0),
				zindex = menu.basezindex + 5,
				color = parameters.colors.e,
				visible = false,
				thickness = 0,
				filled = true,
				name = "okay",
			})

			menu.openclose[1 + #menu.openclose] = this.block
			this.bounds = this.maincontainer.absolutesize
			menu.directory[tab][name] = this.container
			menu.elements[tab][name] = {}
			if not param.ignoreScrolling then
				menu.elements[tab][name].updateScrollBarLength = function()
					local shitInPanel = 8
					for i, v in next, (menu.elements[tab][name]) do
						if _Type(v) == "table" then
							shitInPanel = shitInPanel + v.bounds.y
						end
					end
					if shitInPanel > this.container.absolutesize.y then
						shitInPanel = shitInPanel + 24
						this.scrollBar.maincontainer.visible = true
						this.scrollBar.scroller.visible = true
						this.scrollBar.scroller.size = _UDim2New(0, 2, (this.container.absolutesize.y / shitInPanel), 0)

						local scrollBar = this.scrollBar

						local currentY = scrollBar.scroller.position.Y.Offset
						currentY = (currentY < 1) and 1 or (currentY > scrollBar.maincontainer.absolutesize.y - scrollBar.scroller.absolutesize.y - 1) and scrollBar.maincontainer.absolutesize.y - scrollBar.scroller.absolutesize.y - 1 or currentY 

						scrollBar.scroller.position = _UDim2New(1, 0, 0, currentY)

						local scrolledBy = (currentY - 1) / (scrollBar.maincontainer.absolutesize.y - scrollBar.scroller.absolutesize.y - 1)
						local posAt = (-scrolledBy * ((shitInPanel - this.container.absolutesize.y) / this.container.absolutesize.y))
						if posAt == 1/0 or posAt == -1/0 or posAt ~= posAt then
							this.scrollBar.maincontainer.visible = false
							this.scrollBar.scroller.visible = false

							for i, v in next, (menu.elements[tab][name]) do
								if _Type(v) == "table" then
									local theFlag = v.myflag
									if theFlag then
										if theFlag.type == "toggle" or theFlag.type == "button" or theFlag.type == "textbox" then
											v.hitbox.visible = true

											v.hitbox.size = v.hitbox.size + _UDim2New(0, 0, 0, 1)
											v.hitbox.size = v.hitbox.size - _UDim2New(0, 0, 0, 1)
										elseif theFlag.type == "slider" or theFlag.type == "dropdown" then
											v.holder.visible = true

											v.holder.size = v.holder.size + _UDim2New(0, 0, 0, 1)
											v.holder.size = v.holder.size - _UDim2New(0, 0, 0, 1)
										end
									end
								end
							end
							return
						end
						for i, v in next, (menu.elements[tab][name]) do
							if _Type(v) == "table" then
								local theFlag = v.myflag
								if theFlag then
									if theFlag.type == "toggle" or theFlag.type == "button" or theFlag.type == "textbox" then
										v.hitbox.position = _UDim2New(v.hitbox.position.X.Scale, v.hitbox.position.X.Offset, -scrolledBy * ((shitInPanel - this.container.absolutesize.y) / this.container.absolutesize.y), v.hitbox.position.Y.Offset)
										if v.hitbox.absoluteposition.y + v.bounds.y > ((this.container.absolutesize.y + this.container.absoluteposition.y) - 8) or v.hitbox.absoluteposition.y < this.container.absoluteposition.y then
											v.hitbox.visible = false
										else
											v.hitbox.visible = true
										end
										v.hitbox.size = v.hitbox.size + _UDim2New(0, 1, 0, 1)
										v.hitbox.size = v.hitbox.size - _UDim2New(0, 1, 0, 1)
									elseif theFlag.type == "slider" or theFlag.type == "dropdown" then
										v.holder.position = _UDim2New(v.holder.position.X.Scale, v.holder.position.X.Offset, -scrolledBy * ((shitInPanel - this.container.absolutesize.y) / this.container.absolutesize.y), v.holder.position.Y.Offset)
										if v.holder.absoluteposition.y + v.bounds.y > ((this.container.absolutesize.y + this.container.absoluteposition.y) - 8) or v.holder.absoluteposition.y < this.container.absoluteposition.y then
											v.holder.visible = false
										else
											v.holder.visible = true
										end
										v.holder.size = v.holder.size + _UDim2New(0, 1, 0, 1)
										v.holder.size = v.holder.size - _UDim2New(0, 1, 0, 1)
									end
								end
							end
						end
					else
						this.scrollBar.maincontainer.visible = false
						this.scrollBar.scroller.visible = false

						for i, v in next, (menu.elements[tab][name]) do
							if _Type(v) == "table" then
								local theFlag = v.myflag
								if theFlag then
									if theFlag.type == "toggle" or theFlag.type == "button" or theFlag.type == "textbox" then
										v.hitbox.visible = true
										v.hitbox.position = _UDim2New(v.hitbox.position.X.Scale, v.hitbox.position.X.Offset, 0, v.hitbox.position.Y.Offset)

										v.hitbox.size = v.hitbox.size + _UDim2New(0, 0, 0, 1)
										v.hitbox.size = v.hitbox.size - _UDim2New(0, 0, 0, 1)

										v.hitbox.position = v.hitbox.position + _UDim2New(0, 0, 0, 1)
										v.hitbox.position = v.hitbox.position - _UDim2New(0, 0, 0, 1)
									elseif theFlag.type == "slider" or theFlag.type == "dropdown" then
										v.holder.visible = true
										v.holder.position = _UDim2New(v.holder.position.X.Scale, v.holder.position.X.Offset, 0, v.holder.position.Y.Offset)

										v.holder.size = v.holder.size + _UDim2New(0, 0, 0, 1)
										v.holder.size = v.holder.size - _UDim2New(0, 0, 0, 1)

										v.holder.position = v.holder.position + _UDim2New(0, 0, 0, 1)
										v.holder.position = v.holder.position - _UDim2New(0, 0, 0, 1)
									end
								end
							end
						end
					end
				end

				this.container.getpropertychangedsignal:Connect(function(prop, val) 
					if prop == "absolutesize" then
						menu.elements[tab][name].updateScrollBarLength()
						this.bounds = this.maincontainer.absolutesize
					end
				end)
			else
				menu.elements[tab][name].updateScrollBarLength = function()

				end
			end

			this.panelResize = {
				originalSize = this.maincontainer.size,
				resetSize = function()
					this.maincontainer.size = this.panelResize.originalSize
					this.maincontainer.size = this.maincontainer.size + _UDim2New(0, 1, 0, 1)
					this.maincontainer.size = this.maincontainer.size - _UDim2New(0, 1, 0, 1)

					local positions = {}
					for i, v in next, (menu.subsections[tab][side]) do
						positions[1 + #positions] = {
							yPos = v.maincontainer.absoluteposition.y,
							ref = v
						}
					end

					_TableSort(positions, function(a, b) return a.yPos < b.yPos end)

					local yoffset = 0
					local real = 0
					for i, v in next, (positions) do
						real = real + 1
						v.ref.maincontainer.position = _UDim2New((side - 1) / 2, 0, yoffset / targettab.absolutesize.y, 0)
						v.ref.id = real
						yoffset = yoffset + v.ref.bounds.y
					end     
				end,
				getSize = function()
					return this.maincontainer.size
				end,
				setSize = function(new)
					this.maincontainer.size = new
				end,
			}

			this.panelReposition = {
				originalPosition = this.maincontainer.position,
				originalSide = param.side,
				resetPosition = function()
					this.maincontainer.position = this.panelReposition.originalPosition
					this.maincontainer.size = this.maincontainer.size + _UDim2New(0, 1, 0, 1)
					this.maincontainer.size = this.maincontainer.size - _UDim2New(0, 1, 0, 1)

					local positions = {}
					for i, v in next, (menu.subsections[tab][side]) do
						positions[1 + #positions] = {
							yPos = v.maincontainer.absoluteposition.y,
							ref = v
						}
					end

					_TableSort(positions, function(a, b) return a.yPos < b.yPos end)

					local yoffset = 0
					local real = 0
					for i, v in next, (positions) do
						real = real + 1
						v.ref.maincontainer.position = _UDim2New((side - 1) / 2, 0, yoffset / targettab.absolutesize.y, 0)
						v.ref.id = real
						yoffset = yoffset + v.ref.bounds.y
					end
				end,
				getPosition = function()
					return this.maincontainer.position
				end,
				resetSide = function()
					menu.subsections[tab][side][name] = nil
					side = this.panelReposition.originalSide
					menu.subsections[tab][this.panelReposition.originalSide][name] = this
				end,
				getSide = function()
					return side
				end,
				setSide = function(new)
					menu.subsections[tab][side][name] = nil
					side = new
					menu.subsections[tab][new][name] = this
				end,
				setPosition = function(new)
					this.maincontainer.position = new

					local positions = {}
					for i, v in next, (menu.subsections[tab][side]) do
						positions[1 + #positions] = {
							yPos = v.maincontainer.absoluteposition.y,
							ref = v
						}
					end

					_TableSort(positions, function(a, b) return a.yPos < b.yPos end)

					local yoffset = 0
					local real = 0
					for i, v in next, (positions) do
						real = real + 1
						v.ref.maincontainer.position = _UDim2New((side - 1) / 2, 0, yoffset / targettab.absolutesize.y, 0)
						v.ref.id = real
						yoffset = yoffset + v.ref.bounds.y
					end
				end,
			}

			menu.subtabs[tab][name] = {}
			menu.subsections[tab][side][name] = this
		end

		menu.tooltip = {}
		menu.tooltip.open = false

		menu.tooltip.backoutline = DrawingFunction("frame", { -- for getting the bounds of the thing
			parent = utilities.base,
			anchorpoint = _Vector2New(0, 0),
			size = _UDim2New(0, 128, 0, 48),
			position = _UDim2New(0, 100, 0, 100),
			zindex = menu.basezindex + 23,
			color = menucolors.a,
			visible = true,
			thickness = 0,
			filled = true,
			transparency = 0,
			name = "okay",
		})

		menu.tooltip.container = DrawingFunction("frame", { -- for getting the bounds of the thing
			parent = menu.tooltip.backoutline,
			anchorpoint = _Vector2New(0.5, 0.5),
			size = _UDim2New(1, -2, 1, -2),
			position = _UDim2New(0.5, 0, 0.5, 0),
			zindex = menu.basezindex + 24,
			color = menucolors.b,
			visible = true,
			thickness = 0,
			filled = true,
			transparency = 0,
			name = "okay",
		})

		menu.tooltip.title = DrawingFunction("text", {
			parent = menu.tooltip.container,
			anchorpoint = _Vector2New(0, 0),
			size = 13, -- x3
			font = Drawing.Fonts.Plex,
			position = _UDim2New(0, 4, 0, 2),
			zindex = menu.basezindex + 25,
			color = _Color3FromRGB(255, 255, 255),
			visible = true,
			outline = false,
			outlinecolor = _Color3FromRGB(12, 12, 12),
			text = "Example of a tooltip",
			transparency = 0,
			name = "okay",
		})

		menu.tooltip.currenttrans = 0
		menu.tooltip.hoveredfor = 0
		function menu:calltooltip(text, object, offset)
			if menu.tooltip.connection then
				menu.tooltip.connection:Disconnect()
				menu.tooltip.connection = nil
			end
			menu.tooltip.hoveredfor = 0
			menu.tooltip.currenttrans = 0
			menu.tooltip.backoutline.transparency = menu.tooltip.currenttrans
			menu.tooltip.container.transparency = menu.tooltip.currenttrans
			menu.tooltip.title.transparency = menu.tooltip.currenttrans

			menu.tooltip.backoutline.position = _UDim2New(0, object.absoluteposition.x + 4 + offset.x, 0, object.absoluteposition.y + object.absolutesize.y + offset.y)

			local splitText = {}
			local charInline = 0
			for i, v in next, text:split("") do
				charInline = charInline + 1
				if v == " " then
					splitText.lastSpaceIdx = i
				end
				if charInline >= _MathFloor((menu.objects.backborder.absolutesize.x * 0.5) / 6) then
					splitText.lastSpaceIdx = splitText.lastSpaceIdx or i
					splitText.lastSpaceIdx = i
					v = "\n"
					charInline = 0
				end
				_TableInsert(splitText, v)
			end
			text = _TableConcat(splitText)

			local split = text:split("\n")
			local textLineLength = {}
			local yLength = 0
			for i, v in next, split do
				local textBound = Drawing.new("Text")
				textBound.Visible = true
				textBound.Font = Drawing.Fonts.Plex
				textBound.Size = 13
				textBound.Text = v
				local textBounds = textBound.TextBounds
				textBound.Visible = false
				textBound:Remove()
				textBound = nil

				textLineLength[i] = textBounds.x
				yLength = yLength + textBounds.y
			end

			_TableSort(textLineLength, function(a, b) return a > b end)
			local longestThing = textLineLength[1]

			menu.tooltip.backoutline.size = _UDim2New(0, longestThing + 8, 0, yLength + 8)
			menu.tooltip.title.text = text

			local createdPos = object.absoluteposition
			menu.tooltip.connection = RunService.Stepped:Connect(function(u, dt)
				if object.hovering then
					menu.tooltip.hoveredfor = menu.tooltip.hoveredfor + dt
					if menu.tooltip.hoveredfor > 1 then
						menu.tooltip.currenttrans = menu.tooltip.currenttrans + (dt * 4)
					end
				else
					menu.tooltip.currenttrans = menu.tooltip.currenttrans - (dt * 4)
				end

				menu.tooltip.currenttrans = _MathClamp(menu.tooltip.currenttrans, 0, 1)
				menu.tooltip.backoutline.transparency = menu.tooltip.currenttrans
				menu.tooltip.container.transparency = menu.tooltip.currenttrans
				menu.tooltip.title.transparency = menu.tooltip.currenttrans

				if menu.uiopen == false or createdPos ~= object.absoluteposition then
					menu.tooltip.connection:Disconnect()
					menu.tooltip.connection = nil
					menu.tooltip.currenttrans = 0
					menu.tooltip.hoveredfor = 0
					menu.tooltip.backoutline.transparency = menu.tooltip.currenttrans
					menu.tooltip.container.transparency = menu.tooltip.currenttrans
					menu.tooltip.title.transparency = menu.tooltip.currenttrans
				end
			end)
		end        

		local baseoffset = 0
		local boundoffset = 0
		function menu:createtoggle(parameters)
			local tab = parameters.tab
			local subsection = parameters.subsection
			local targetsection = menu.directory[tab][subsection]
			local name = parameters.name
			local flag = parameters.flag
			local tooltip = parameters.tooltip
			local this = {}
			menu.flags[flag] = {}
			local myflag = menu.flags[flag]
			this.myflag = myflag -- mypenis
			myflag.__index = menu.flags[flag]
			myflag.type = "toggle"
			myflag.name = name
			myflag.value = parameters.value
			myflag.changed = utilities.signal.new()
			myflag.element = this

			local offset = baseoffset + 8

			for i, v in next, (menu.elements[tab][subsection]) do
				if _Type(v) == "table" then
					offset = offset + v.bounds.y
				end
			end

			this.hitbox = DrawingFunction("frame", { -- for getting the bounds of the thing
				parent = targetsection,
				anchorpoint = _Vector2New(0.5, 0),
				size = _UDim2New(1, 0, 0, 14),
				position = _UDim2New(0.5, 0, 0, offset),
				zindex = menu.basezindex + 6,
				color = _Color3FromRGB(0, 0, 0),
				visible = true,
				thickness = 0,
				filled = true,
				transparency = 0,
				name = "okay",
			})

			this.toggle = DrawingFunction("frame", { -- for getting the bounds of the thing
				parent = this.hitbox,
				anchorpoint = _Vector2New(0, 0.5),
				size = _UDim2New(0, 8, 0, 8),
				position = _UDim2New(0, 8, 0.5, 0),
				zindex = menu.basezindex + 7,
				color =  menu.startingParameters.colors.f,
				visible = true,
				thickness = 0,
				filled = true,
				name = "okay",
			})
			menu.openclose[1 + #menu.openclose] = this.toggle

			this.toggleoutline = DrawingFunction("frame", { -- for getting the bounds of the thing
				parent = this.toggle,
				anchorpoint = _Vector2New(0.5, 0.5),
				size = _UDim2New(1, 2, 1, 2),
				position = _UDim2New(0.5, 0, 0.5, 0),
				zindex = menu.basezindex + 6,
				color = _Color3FromRGB(12, 12, 12),
				visible = true,
				thickness = 1,
				filled = false,
				name = "okay",
			})
			menu.openclose[1 + #menu.openclose] = this.toggleoutline

			this.toggled = DrawingFunction("frame", { -- for getting the bounds of the thing
				parent = this.toggle,
				anchorpoint = _Vector2New(0, 0),
				size = _UDim2New(1, 0, 1, 0),
				position = _UDim2New(0, 0, 0, 0),
				zindex = menu.basezindex + 7,
				color = menu.accent,
				visible = false,
				thickness = 0,
				filled = true,
				name = "okay",
			})
			this.toggled.visible = myflag.value
			menu.openclose[1 + #menu.openclose] = this.toggled
			menu.accents[1 + #menu.accents] = this.toggled

			this.title = DrawingFunction("text", {
				parent = this.hitbox,
				anchorpoint = _Vector2New(0, 0.5),
				size = 13, -- x3
				font = Drawing.Fonts.Plex,
				position = _UDim2New(0, 24, 0.5, -1),
				zindex = menu.basezindex + 6,
				color = parameters.detected and _Color3FromRGB(255, 106, 79) or _Color3FromRGB(255, 255, 255),
				visible = true,
				outline = false,
				outlinecolor = _Color3FromRGB(12, 12, 12),
				text = name,
				name = "okay",
			})
			menu.openclose[1 + #menu.openclose] = this.title
			this.realhitbox = DrawingFunction("frame", { -- for getting the bounds of the thing
				parent = this.hitbox,
				anchorpoint = _Vector2New(0, 0.5),
				size = _UDim2New(0, 32 + this.title.absolutesize.x, 1, 0),
				position = _UDim2New(0, 0, 0.5, 0),
				zindex = menu.basezindex + 8,
				color = _Color3FromRGB(255, 255, 255),
				visible = true,
				thickness = 0,
				filled = true,
				transparency = 0,
				activated = true,
				name = "okay",
			})
			menu.activations[1 + #menu.activations] = this.realhitbox
			function myflag:setvalue(new) -- how 2 config in 5 seconds
				myflag.value = new
				this.toggled.visible = new
				myflag.changed:Fire()
			end

			this.realhitbox.clicked:Connect(function()
				if menu.uiopen == false or menu.isadropdownopen or menu.isacolorpickeropen then return end
				myflag:setvalue(not myflag.value)
			end)

			if tooltip then
				this.realhitbox.mouseenter:Connect(function()
					if menu.uiopen == false or menu.isadropdownopen or menu.isacolorpickeropen then return end
					menu:calltooltip(tooltip, this.realhitbox, _Vector2New(0, 0))
				end)
			end

			this.bounds = _Vector2New(0, 14 + boundoffset)
			this.accessories = {} -- color pickers and what not
			menu.elements[tab][subsection][name] = this -- keep a record of this fuck
			menu.elements[tab][subsection].updateScrollBarLength()
		end

		function menu:createcolorpicker(parameters)
			local targetobj = menu.elements[parameters.tab][parameters.subsection][parameters.object]
			if not targetobj.accessories then
				return
			end
			local name = parameters.name
			local flag = parameters.flag
			local this = {}
			menu.flags[flag] = {}
			local myflag = menu.flags[flag]
			this.myflag = myflag
			myflag.__index = menu.flags[flag]
			myflag.type = "color"
			myflag.name = name
			myflag.color = parameters.color
			myflag.animation = {
				none = true,
				rainbow = false,
				linear = false,
				oscillating = false, 
				sawtooth = false,
				strobe = false
			}
			myflag.animationKeyFrames = {
				linear = {
					["keyframe 1"] = {
						color = parameters.color,
						transparency = parameters.transparency
					},
					["keyframe 2"] = {
						color = parameters.color,
						transparency = parameters.transparency
					}
				},
				oscillating = {
					["keyframe 1"] = {
						color = parameters.color,
						transparency = parameters.transparency
					},
					["keyframe 2"] = {
						color = parameters.color,
						transparency = parameters.transparency
					}
				},
				sawtooth = {
					["keyframe 1"] = {
						color = parameters.color,
						transparency = parameters.transparency
					},
					["keyframe 2"] = {
						color = parameters.color,
						transparency = parameters.transparency
					}
				},
				strobe = {
					["keyframe 1"] = {
						color = parameters.color,
						transparency = parameters.transparency
					},
					["keyframe 2"] = {
						color = parameters.color,
						transparency = parameters.transparency
					}
				},
			} -- color and transparency
			myflag.animationSpeed = {
				rainbow = 100,
				linear = 100,
				oscillating = 100,
				sawtooth = 100,
				strobe = 100
			}
			myflag.transparency = parameters.transparency
			myflag.changed = utilities.signal.new()

			local offset = baseoffset + 12

			for i, v in next, (targetobj.accessories) do
				offset = offset + v.bounds.x -- get the bounds of the current accessories in the thing
			end

			this.outline = DrawingFunction("frame", { -- for getting the bounds of the thing
				parent = targetobj.hitbox,
				anchorpoint = _Vector2New(1, 0.5),
				size = _UDim2New(0, 24, 0, 12),
				position = _UDim2New(1, -offset, 0.5, 0),
				zindex = menu.basezindex + 8,
				color = _Color3FromRGB(12, 12, 12),
				visible = true,
				thickness = 0,
				activated = true,
				filled = true,
				name = "okay",
			})
			menu.openclose[1 + #menu.openclose] = this.outline

			this.color = {}
			for i = 1, 5 do
				this.color[i] = utilities:draw("frame", { -- for getting the bounds of the thing, also not using DrawingFunction because the gradient isnt part of the ui accents
					parent = this.outline,
					anchorpoint = _Vector2New(0.5, 0),
					size = _UDim2New(1, -2, 0, 2),
					position = _UDim2New(0.5, 0, 0, ((i - 1) * 2) + 1),
					zindex = menu.basezindex + 10,
					color = parameters.color:lerp(_Color3FromRGB(_MathClamp(parameters.color.r * 255 - 33, 0, 255), _MathClamp(parameters.color.g * 255 - 33, 0, 255), _MathClamp(parameters.color.b * 255 - 33, 0, 255)), i / 5),
					visible = true,
					thickness = 0,
					filled = true,
					name = "okay",
				})
				menu.openclose[1 + #menu.openclose] = this.color[i]
			end

			function myflag:setcolor(new)
				myflag.color = new
				for i = 1, 5 do
					local segment = this.color[i]
					segment.color = new:lerp(_Color3FromRGB(_MathClamp(new.r * 255 - 20, 0, 255), _MathClamp(new.g * 255 - 20, 0, 255), _MathClamp(new.b * 255 - 20, 0, 255)), (i - 1) / 5)
				end
				myflag.changed:Fire()
			end

			function myflag:settransparency(new)
				myflag.transparency = new
				myflag.changed:Fire()
			end

			function myflag:setAnimation(new)
				myflag.animation = new

				if this.animationLoop then
					this.animationLoop:Disconnect()
					this.animationLoop = nil
				end

				-- hard coded cuz FUCK you
				-- funny how evie legit did animations like this better than me x3
				if myflag.animation.rainbow then
					this.animationLoop = RunService.Stepped:Connect(function()
						local oldhue, oldsat, oldval = _Color3ToHSV(myflag.color)
						myflag:setcolor(_Color3FromHSV((_Tick() * (myflag.animationSpeed.rainbow / 100) - _MathFloor(_Tick() * (myflag.animationSpeed.rainbow / 100))), oldsat, oldval))
					end)
				elseif myflag.animation.linear then
					this.animationLoop = RunService.Stepped:Connect(function()
						local percentage = (_Tick() * (myflag.animationSpeed.linear / 100) - _MathFloor(_Tick() * (myflag.animationSpeed.linear / 100))) 
						if percentage > 0.5 then
							percentage = percentage - 0.5
							percentage = percentage * 2
							myflag:setcolor(myflag.animationKeyFrames.linear["keyframe 2"].color:Lerp(myflag.animationKeyFrames.linear["keyframe 1"].color, percentage))
							if myflag.transparency then
								local a = myflag.animationKeyFrames.linear["keyframe 2"].transparency
								local b = myflag.animationKeyFrames.linear["keyframe 1"].transparency
								local c = percentage
								myflag:settransparency(a + (b - a)*c)
							end
						else
							percentage = percentage * 2
							myflag:setcolor(myflag.animationKeyFrames.linear["keyframe 1"].color:Lerp(myflag.animationKeyFrames.linear["keyframe 2"].color, percentage))
							if myflag.transparency then
								local a = myflag.animationKeyFrames.linear["keyframe 1"].transparency
								local b = myflag.animationKeyFrames.linear["keyframe 2"].transparency
								local c = percentage
								myflag:settransparency(a + (b - a)*c)
							end
						end
					end)
				elseif myflag.animation.oscillating then
					this.animationLoop = RunService.Stepped:Connect(function()
						local percentage = (_Tick() * (myflag.animationSpeed.oscillating / 100) - _MathFloor(_Tick() * (myflag.animationSpeed.oscillating / 100)))
						if percentage > 0.5 then
							percentage = percentage - 0.5
							myflag:setcolor(myflag.animationKeyFrames.oscillating["keyframe 2"].color:Lerp(myflag.animationKeyFrames.oscillating["keyframe 1"].color, _MathSin(percentage * math.pi)))
							if myflag.transparency then
								local a = myflag.animationKeyFrames.oscillating["keyframe 2"].transparency
								local b = myflag.animationKeyFrames.oscillating["keyframe 1"].transparency
								local c = _MathSin(percentage * math.pi)
								myflag:settransparency(a + (b - a)*c)
							end
						else
							myflag:setcolor(myflag.animationKeyFrames.oscillating["keyframe 1"].color:Lerp(myflag.animationKeyFrames.oscillating["keyframe 2"].color, _MathSin(percentage * math.pi)))
							if myflag.transparency then
								local a = myflag.animationKeyFrames.oscillating["keyframe 1"].transparency
								local b = myflag.animationKeyFrames.oscillating["keyframe 2"].transparency
								local c = _MathSin(percentage * math.pi)

								myflag:settransparency(a + (b - a)*c)
							end
						end
					end)
				elseif myflag.animation.strobe then
					this.animationLoop = RunService.Stepped:Connect(function()
						local percentage = (_Tick() * (myflag.animationSpeed.strobe / 100) - _MathFloor(_Tick() * (myflag.animationSpeed.strobe / 100)))
						if percentage > 0.5 then
							myflag:setcolor(myflag.animationKeyFrames.strobe["keyframe 2"].color)
							if myflag.transparency then
								myflag:settransparency(myflag.animationKeyFrames.strobe["keyframe 2"].transparency)
							end
						else
							myflag:setcolor(myflag.animationKeyFrames.strobe["keyframe 1"].color)
							if myflag.transparency then
								myflag:settransparency(myflag.animationKeyFrames.strobe["keyframe 1"].transparency)
							end
						end
					end)
				elseif myflag.animation.sawtooth then
					this.animationLoop = RunService.Stepped:Connect(function()
						local percentage = (_Tick() * (myflag.animationSpeed.sawtooth / 100) - _MathFloor(_Tick() * (myflag.animationSpeed.sawtooth / 100)))
						myflag:setcolor(myflag.animationKeyFrames.sawtooth["keyframe 1"].color:Lerp(myflag.animationKeyFrames.sawtooth["keyframe 2"].color, percentage))
						if myflag.transparency then
							local a = myflag.animationKeyFrames.sawtooth["keyframe 1"].transparency
							local b = myflag.animationKeyFrames.sawtooth["keyframe 2"].transparency
							local c = percentage
							myflag:settransparency(a + (b - a)*c)
						end
					end)
				end
			end

			function myflag:setAnimationKeyFrames(new)
				for t, kf in next, new do
					myflag.animationKeyFrames[t] = kf
				end
			end

			function myflag:setAnimationSpeed(new)
				for t, s in next, new do
					myflag.animationSpeed[t] = s
				end
			end

			myflag:setcolor(parameters.color)
			if myflag.transparency then
				myflag:settransparency(parameters.transparency)
			end

			this.outline.clicked:Connect(function()
				if menu.uiopen == false or menu.isadropdownopen or menu.isacolorpickeropen then return end
				menu:callcolorpicker(name, myflag, utilities.mouse.position, myflag.transparency)
			end)

			this.outline.clicked2:Connect(function()
				if menu.uiopen == false or menu.isadropdownopen or menu.isacolorpickeropen then return end
				menu:callcolorcopypaste(myflag, utilities.mouse.position)
			end)

			this.bounds = _Vector2New(28, 0)
			targetobj.accessories[name] = this
		end

		function menu:createkeybind(parameters)
			local targetobj = menu.elements[parameters.tab][parameters.subsection][parameters.object]
			if not targetobj.accessories then
				return
			end
			local name = parameters.name
			local flag = parameters.flag
			local this = {}
			this.dropdown = {}
			this.dropdownopened = false
			menu.flags[flag] = {}
			local myflag = menu.flags[flag]
			this.myflag = myflag
			myflag.__index = menu.flags[flag]
			myflag.type = "keybind"
			myflag.value = parameters.value
			myflag.tab = parameters.tab
			myflag.name = name
			myflag.section = parameters.subsection
			myflag.object = parameters.object
			myflag.parentflag = parameters.parentflag
			myflag.activation = "always"
			myflag.key = nil
			myflag.changed = utilities.signal.new()

			local offset = baseoffset + 16

			for i, v in next, (targetobj.accessories) do
				offset = offset + v.bounds.x -- get the bounds of the current accessories in the thing
			end

			this.outline = DrawingFunction("frame", { -- for getting the bounds of the thing
				parent = targetobj.hitbox,
				anchorpoint = _Vector2New(1, 0.5),
				size = _UDim2New(0, 40, 0, 16),
				position = _UDim2New(1, -offset, 0.5, 0),
				zindex = menu.basezindex + 7,
				color = menucolors.a,
				visible = true,
				thickness = 1,
				activated = true,
				filled = false,
				name = "okay",
			})
			menu.openclose[1 + #menu.openclose] = this.outline
			menu.activations[1 + #menu.activations] = this.outline
			this.updating = DrawingFunction("frame", { -- for getting the bounds of the thing
				parent = this.outline,
				anchorpoint = _Vector2New(0.5, 0.5),
				size = _UDim2New(1, 0, 1, 0),
				position = _UDim2New(0.5, 0, 0.5, 0),
				zindex = menu.basezindex + 8,
				color = menu.accent,
				visible = false,
				thickness = 0,
				filled = true,
				name = "okay",
			})
			menu.accents[1 + #menu.accents] = this.updating

			this.container = DrawingFunction("frame", { -- for getting the bounds of the thing
				parent = this.outline,
				anchorpoint = _Vector2New(0.5, 0.5),
				size = _UDim2New(1, -2, 1, -2),
				position = _UDim2New(0.5, 0, 0.5, 0),
				zindex = menu.basezindex + 9,
				color = menucolors.c,
				visible = true,
				thickness = 0,
				filled = true,
				name = "okay",
			})
			menu.openclose[1 + #menu.openclose] = this.container
			this.title = DrawingFunction("text", {
				parent = this.outline,
				anchorpoint = _Vector2New(0, 0),
				size = 13, -- x3
				font = Drawing.Fonts.Plex,
				position = _UDim2New(0.5, -((7)/2), 0.5, -7),
				zindex = menu.basezindex + 10,
				color = _Color3FromRGB(255, 255, 255),
				visible = true,
				outline = false,
				outlinecolor = _Color3FromRGB(12, 12, 12),
				text = "E",
				name = "okay",
			})
			menu.openclose[1 + #menu.openclose] = this.title
			for i, v in next, ({"hold", "toggle", "hold off", "always"}) do
				this.dropdown[v] = {}
				this.dropdown[v].outline = DrawingFunction("frame", { -- for getting the bounds of the thing
					parent = this.outline,
					anchorpoint = _Vector2New(0, 0),
					size = _UDim2New(0, 64, 0, 22),
					position = _UDim2New(-1, 16, 1, ((i - 1) * 20) + 2),
					zindex = menu.basezindex + 11,
					color = menucolors.a,
					visible = false,
					thickness = 0,
					filled = true,
					activated = true,
					name = "okay",
				})
				menu.activations[1 + #menu.activations] = this.dropdown[v].outline
				this.dropdown[v].container = DrawingFunction("frame", { -- for getting the bounds of the thing
					parent = this.dropdown[v].outline,
					anchorpoint = _Vector2New(0.5, 0.5),
					size = _UDim2New(1, -2, 1, -2),
					position = _UDim2New(0.5, 0, 0.5, 0),
					zindex = menu.basezindex + 12,
					color = menucolors.c,
					visible = true,
					thickness = 0,
					filled = true,
					name = "okay",
				})

				this.dropdown[v].title = DrawingFunction("text", {
					parent = this.dropdown[v].outline,
					anchorpoint = _Vector2New(0, 0.5),
					size = 13, -- x3
					font = Drawing.Fonts.Plex,
					position = _UDim2New(0, 4, 0.5, 0),
					zindex = menu.basezindex + 13,
					color = _Color3FromRGB(255, 255, 255),
					visible = true,
					outline = false,
					outlinecolor = _Color3FromRGB(12, 12, 12),
					text = v,
					name = "okay",
				})

				this.dropdown[v].outline.clicked:Connect(function()
					myflag:setactivation(v)
					for i, v in next, (this.dropdown) do
						v.outline.visible = false
					end
					menu.isadropdownopen = false
				end)
			end

			this.singleupdate = function()
				if not myflag.key then 
					myflag.value = false
				end -- we dont even have a key.....
				if myflag.activation == "always" then
					myflag.value = true
				else
					myflag.value = false
				end
			end

			function myflag:setkey(new)
				if not new or new == "NONE" then -- no key !
					myflag.key = nil
					this.title.text = "NONE"
					this.title.position = _UDim2New(0.5, -((4*7)/2), 0.5, -7)
				else
					local key = _tostring(new)
					myflag.key = key
					this.title.text = _StringSub(_StringUpper(key:sub(14)), 1, 5)
				end
				this.singleupdate()
			end

			function myflag:setactivation(new)
				myflag.activation = new
				for i, v in next, (this.dropdown) do
					v.title.color = (myflag.activation == v.title.text) and menu.accent or _Color3FromRGB(255, 255, 255)
				end
				this.singleupdate()
			end
			myflag:setactivation("always")

			function myflag:setvalue(new)
				myflag.value = new
				this.singleupdate()
			end

			this.outline.clicked2:Connect(function()
				if menu.uiopen == false or menu.isadropdownopen or menu.isacolorpickeropen then return end
				this.dropdownopened = not this.dropdownopened
				menu.isadropdownopen = this.dropdownopened
				for i, v in next, (this.dropdown) do
					v.outline.visible = this.dropdownopened
					v.title.color = (myflag.activation == v.title.text) and menu.accent or _Color3FromRGB(255, 255, 255)
					v.outline.position = v.outline.position
				end
			end)

			local keyupdater
			this.outline.clicked:Connect(function()
				if menu.uiopen == false or menu.isadropdownopen or menu.isacolorpickeropen then return end
				this.updating.visible = true
				keyupdater = InputService.InputBegan:Connect(function(Input, gameProcessed)
					if InputService:GetFocusedTextBox() then return end
					if Input.UserInputType == Enum.UserInputType.Keyboard then
						if Input.KeyCode.Value == 27 or Input.KeyCode.Value == 8 then 
							myflag:setkey(nil)
						else
							myflag:setkey(Input.KeyCode)
						end
						this.updating.visible = false
						if keyupdater then
							keyupdater:Disconnect()
							keyupdater = nil
						end
					end
				end)
			end)
			myflag:setkey(parameters.value)

			InputService.InputBegan:Connect(function(Input, gameProcessed)
				if InputService:GetFocusedTextBox() then return end
				if not myflag.key then 
					myflag.value = false
				end -- we dont even have a key.....
				if myflag.activation == "always" then
					myflag.value = true
				end
				if myflag.activation == "always" or not myflag.key then
					return 
				end
				if Input.UserInputType == Enum.UserInputType.Keyboard then
					if _tostring(Input.KeyCode) == myflag.key then
						if myflag.activation == "toggle" then
							myflag.value = not myflag.value
							myflag.changed:Fire()
						end
						if myflag.activation == "hold" then
							myflag.value = true
							myflag.changed:Fire()
						end
						if myflag.activation == "hold off" then
							myflag.value = false
							myflag.changed:Fire()
						end
					end
				end
			end)

			InputService.InputEnded:Connect(function(Input, gameProcessed)
				if InputService:GetFocusedTextBox() then return end
				if not myflag.key then 
					myflag.value = false
				end -- we dont even have a key.....
				if myflag.activation == "always" then
					myflag.value = true
				end
				if myflag.activation == "always" or not myflag.key then
					return 
				end
				if myflag.activation == "always" then
					myflag.value = true
				end
				if Input.UserInputType == Enum.UserInputType.Keyboard then
					if _tostring(Input.KeyCode) == myflag.key then
						if myflag.activation == "hold" then
							myflag.value = false
							myflag.changed:Fire()
						end
						if myflag.activation == "hold off" then
							myflag.value = true
							myflag.changed:Fire()
						end
					end
				end
			end)


			this.bounds = _Vector2New(44, 0)
			targetobj.accessories[name] = this
		end

		function menu:createslider(parameters)
			local tab = parameters.tab
			local subsection = parameters.subsection
			local targetsection = menu.directory[tab][subsection]
			local name = parameters.name
			local flag = parameters.flag
			local minimum = parameters.minimum
			local tooltip = parameters.tooltip
			local maximum = parameters.maximum
			local suffix = parameters.suffix ~= nil and parameters.suffix or ""
			local customtext = parameters.custom ~= nil and parameters.custom or {}

			local this = {}
			local offset = baseoffset + 0
			menu.flags[flag] = {}
			local myflag = menu.flags[flag]
			this.myflag = myflag -- mypenis
			myflag.__index = menu.flags[flag]
			myflag.type = "slider"
			myflag.name = name
			myflag.value = parameters.value
			myflag.element = this
			myflag.changed = utilities.signal.new()

			for i, v in next, (menu.elements[tab][subsection]) do
				if _Type(v) == "table" then
					offset = offset + v.bounds.y
				end
			end

			this.holder = DrawingFunction("frame", { -- for getting the bounds of the thing
				parent = targetsection,
				anchorpoint = _Vector2New(0.5, 0),
				size = _UDim2New(1, 0, 0, 24),
				position = _UDim2New(0.5, 0, 0, offset),
				zindex = menu.basezindex + 6,
				color = _Color3FromRGB(255, 255, 255),
				visible = true,
				thickness = 0,
				filled = true,
				transparency = 0,
				name = "okay",
			})

			this.title = DrawingFunction("text", {
				parent = this.holder,
				anchorpoint = _Vector2New(0, 0),
				size = 13, -- x3
				font = Drawing.Fonts.Plex,
				position = _UDim2New(0, 16, 0, 8),
				zindex = menu.basezindex + 7,
				color = parameters.detected and _Color3FromRGB(255, 106, 79) or _Color3FromRGB(255, 255, 255),
				visible = true,
				outline = false,
				outlinecolor = _Color3FromRGB(12, 12, 12),
				text = name,
				name = "okay",
			})
			menu.openclose[1 + #menu.openclose] = this.title
			this.sliderback = DrawingFunction("frame", { -- for getting the bounds of the thing
				parent = this.holder,
				anchorpoint = _Vector2New(0, 0),
				size = _UDim2New(1, -32, 0, 6),
				position = _UDim2New(0, 16, 0, 24),
				zindex = menu.basezindex + 7,
				color = menucolors.b,
				visible = true,
				thickness = 0,
				filled = true,
				name = "okay",
			})
			menu.openclose[1 + #menu.openclose] = this.sliderback
			this.sliderbackoutline = DrawingFunction("frame", { -- for getting the bounds of the thing
				parent = this.sliderback,
				anchorpoint = _Vector2New(0.5, 0.5),
				size = _UDim2New(1, 2, 1, 2),
				position = _UDim2New(0.5, 0, 0.5, 0),
				zindex = menu.basezindex + 6,
				color = menucolors.d,
				visible = true,
				thickness = 1,
				filled = false,
				name = "okay",
			})
			menu.openclose[1 + #menu.openclose] = this.sliderbackoutline

			this.slider = {}
			for i = 1, 6 do
				this.slider[i] = DrawingFunction("frame", { -- for getting the bounds of the thing
					parent = this.sliderback,
					anchorpoint = _Vector2New(0, 0),
					size = _UDim2New(0, 6, 0, 1),
					position = _UDim2New(0, 0, 0, i),
					zindex = menu.basezindex + 9,
					color = menu.accent:lerp(_Color3FromRGB(_MathClamp((menu.accent.r * 255) - 5, 0, 255), _MathClamp((menu.accent.g * 255) - 5, 0, 255), _MathClamp((menu.accent.b * 255) - 5, 0, 255)), (i - 1) / 5),
					visible = true,
					thickness = 0,
					filled = true,
					name = "okay",
				})
				menu.openclose[1 + #menu.openclose] = this.slider[i]
			end

			menu.accents[1 + #menu.accents] = this.slider

			this.hitbox = DrawingFunction("frame", { -- for getting the bounds of the thing
				parent = this.sliderback,
				anchorpoint = _Vector2New(0.5, 0.5),
				size = _UDim2New(1, 0, 1, 10),
				position = _UDim2New(0.5, 0, 0.5, 0),
				zindex = menu.basezindex + 7,
				color = _Color3FromRGB(255, 255, 255),
				visible = true,
				thickness = 0,
				transparency = 0,
				activated = true,
				filled = true,
				name = "okay",
			})
			menu.activations[1 + #menu.activations] = this.hitbox

			this.valuetitle = DrawingFunction("text", {
				parent = this.sliderback,
				anchorpoint = _Vector2New(0, 0),
				size = 13, -- x3
				font = Drawing.Fonts.Plex,
				position = _UDim2New(1, -((2 * 7)/2), 0, 0),
				zindex = menu.basezindex + 9,
				color = _Color3FromRGB(255, 255, 255),
				visible = true,
				outline = false,
				outlinecolor = _Color3FromRGB(12, 12, 12),
				text = "0°",
				name = "okay",
			})
			menu.openclose[1 + #menu.openclose] = this.valuetitle

			this.addtext = DrawingFunction("text", {
				parent = this.sliderback,
				anchorpoint = _Vector2New(1, 0),
				size = 13, -- x3
				font = Drawing.Fonts.Plex,
				position = _UDim2New(1, 3, 0.5, -7),
				zindex = menu.basezindex + 9,
				color = _Color3FromRGB(255, 255, 255),
				visible = true,
				outline = false,
				outlinecolor = _Color3FromRGB(12, 12, 12),
				activated = true,
				text = "+",
				name = "okay",
			})
			menu.openclose[1 + #menu.openclose] = this.addtext

			this.subtext = DrawingFunction("text", {
				parent = this.sliderback,
				anchorpoint = _Vector2New(0, 0),
				size = 13, -- x3
				font = Drawing.Fonts.Plex,
				position = _UDim2New(0, -10, 0.5, -7),
				zindex = menu.basezindex + 9,
				color = _Color3FromRGB(255, 255, 255),
				visible = true,
				outline = false,
				outlinecolor = _Color3FromRGB(12, 12, 12),
				text = "-",
				activated = true,
				name = "okay",
			})
			menu.openclose[1 + #menu.openclose] = this.subtext

			local textupdateconnection -- so u can click on the value text and manually enter a number
			function myflag:setvalue(new)
				if new == nil then
					new = 0
				end
				local newtext = _tostring(new)
				if textupdateconnection then -- we r typing
					newtext = newtext .. "|"
				else
					new = _MathClamp(new, minimum, maximum)
				end
				newtext = _tostring(new)
				if customtext[newtext] then
					this.valuetitle.text = customtext[newtext]
				else
					this.valuetitle.text = newtext .. suffix
				end
				for i, v in next, this.slider do
					v.position = _UDim2New((((_MathClamp(new, minimum, maximum) - minimum)) / (maximum - minimum)), 0, 0, i - 1) -- s3x
					local tostart = v.absoluteposition.x - this.sliderback.absoluteposition.x
					local scalederrr = -tostart / this.sliderback.absolutesize.x
					v.size = _UDim2New(scalederrr, 0, 0, 1)
				end
				this.valuetitle.position = this.slider[#this.slider].position + _UDim2New(0, -((#this.valuetitle.text * 7)/2), 0, 0)
				myflag.value = new
				myflag.changed:Fire()
			end

			function myflag:setMax(new)
				maximum = new
			end

			function myflag:setMin(new)
				minimum = new
			end

			local connection
			this.hitbox.clicked:Connect(function()
				if menu.uiopen == false or menu.isadropdownopen or menu.isacolorpickeropen then return end
				connection = RunService.Stepped:Connect(function()
					local relative = utilities.mouse.position.x
					local mousebound = utilities.mouse.position.x - this.hitbox.absoluteposition.x - 1
					mousebound = _MathClamp(mousebound, 0, this.hitbox.absolutesize.x)
					local result = mousebound
					result = _MathClamp(result, 0, this.hitbox.absolutesize.x)
					result = _MathFloor(0.5 + (((maximum - minimum) / this.hitbox.absolutesize.x) * mousebound) + minimum)
					myflag:setvalue(result)
					if this.hitbox.holding == false or menu.uiopen == false then
						connection:Disconnect()
						connection = nil
						return
					end
				end)
			end)

			this.addtext.mouseenter:Connect(function()
				this.addtext.color = menu.accent
			end)

			this.addtext.mouseleave:Connect(function()
				this.addtext.color = _Color3FromRGB(255, 255, 255)
			end)

			this.subtext.mouseenter:Connect(function()
				this.subtext.color = menu.accent
			end)

			this.subtext.mouseleave:Connect(function()
				this.subtext.color = _Color3FromRGB(255, 255, 255)
			end)

			this.addtext.clicked:Connect(function()
				myflag:setvalue(myflag.value + 1)
			end)

			this.subtext.clicked:Connect(function()
				myflag:setvalue(myflag.value - 1)
			end)

			myflag:setvalue(parameters.value)

			if tooltip then
				this.hitbox.mouseenter:Connect(function()
					menu:calltooltip(tooltip, this.hitbox, _Vector2New(-4, 2))
				end)
			end

			this.bounds = _Vector2New(0, 36 + boundoffset)
			menu.elements[tab][subsection][name] = this
			menu.elements[tab][subsection].updateScrollBarLength()
		end

		function menu:createdropdown(parameters)
			local tab = parameters.tab
			local subsection = parameters.subsection
			local targetsection = menu.directory[tab][subsection]
			local name = parameters.name
			local flag = parameters.flag
			local tooltip = parameters.tooltip
			local multichoice = parameters.multichoice

			local this = {}
			this.dropdownopened = false
			this.valuecontainer = {}
			local offset = baseoffset + 0
			menu.flags[flag] = {}
			local myflag = menu.flags[flag]
			this.myflag = myflag -- mypenis
			myflag.__index = menu.flags[flag]
			myflag.type = "dropdown"
			myflag.value = {}
			myflag.name = name
			myflag.changed = utilities.signal.new()

			for i, v in next, (menu.elements[tab][subsection]) do
				if _Type(v) == "table" then
					offset = offset + v.bounds.y
				end
			end

			for i, v in next, (parameters.values) do
				local name = v[1]
				local state = v[2]
				myflag.value[name] = state
			end

			this.holder = DrawingFunction("frame", { -- for getting the bounds of the thing
				parent = targetsection,
				anchorpoint = _Vector2New(0.5, 0),
				size = _UDim2New(1, 0, 0, 24),
				position = _UDim2New(0.5, 0, 0, offset),
				zindex = menu.basezindex + 6,
				color = _Color3FromRGB(255, 255, 255),
				visible = true,
				thickness = 0,
				filled = true,
				transparency = 0,
				name = "okay",
			})

			this.title = DrawingFunction("text", {
				parent = this.holder,
				anchorpoint = _Vector2New(0, 0),
				size = 13, -- x3
				font = Drawing.Fonts.Plex,
				position = _UDim2New(0, 16, 0, 8),
				zindex = menu.basezindex + 7,
				color = _Color3FromRGB(255, 255, 255),
				visible = true,
				outline = false,
				outlinecolor = _Color3FromRGB(12, 12, 12),
				text = name,
				name = "okay",
			})
			menu.openclose[1 + #menu.openclose] = this.title
			this.selection = DrawingFunction("frame", { -- for getting the bounds of the thing
				parent = this.holder,
				anchorpoint = _Vector2New(0.5, 0),
				size = _UDim2New(1, -30, 0, 16),
				position = _UDim2New(0.5, 0, 0, 24),
				zindex = menu.basezindex + 7,
				color = menucolors.c,
				visible = true,
				thickness = 0,
				filled = true,
				name = "okay",
			})
			menu.openclose[1 + #menu.openclose] = this.selection
			this.selectiontext = DrawingFunction("text", {
				parent = this.selection,
				anchorpoint = _Vector2New(0, 0),
				size = 13, -- x3
				font = Drawing.Fonts.Plex,
				position = _UDim2New(0, 2, 0.5, -7),
				zindex = menu.basezindex + 8,
				color = _Color3FromRGB(255, 255, 255),
				visible = true,
				outline = false,
				outlinecolor = _Color3FromRGB(12, 12, 12),
				text = "",
				name = "okay",
			})
			menu.openclose[1 + #menu.openclose] = this.selectiontext
			this.icon = DrawingFunction("frame", { -- for getting the bounds of the thing
				parent = this.selection,
				anchorpoint = _Vector2New(0.5, 0.5),
				size = _UDim2New(1, 2, 1, 2),
				position = _UDim2New(0.5, 0, 0.5, 0),
				zindex = menu.basezindex + 7,
				color = menucolors.c,
				visible = true,
				thickness = 0,
				filled = true,
				transparency = 0,
				activated = true,
				name = "okay",
			})
			menu.openclose[1 + #menu.openclose] = this.icon
			menu.activations[1 + #menu.activations] = this.icon

			this.icontext = DrawingFunction("text", {
				parent = this.icon,
				anchorpoint = _Vector2New(0, 0),
				size = 13, -- x3
				font = Drawing.Fonts.Plex,
				position = _UDim2New(1, -10, 0.5, -7),
				zindex = menu.basezindex + 8,
				color = _Color3FromRGB(255, 255, 255),
				visible = true,
				outline = false,
				outlinecolor = _Color3FromRGB(12, 12, 12),
				text = "+",
				name = "okay",
			})
			menu.openclose[1 + #menu.openclose] = this.icontext
			this.selectionoutline = DrawingFunction("frame", { -- for getting the bounds of the thing
				parent = this.selection,
				anchorpoint = _Vector2New(0.5, 0.5),
				size = _UDim2New(1, 2, 1, 2),
				position = _UDim2New(0.5, 0, 0.5, 0),
				zindex = menu.basezindex + 6,
				color = menucolors.d,
				visible = true,
				thickness = 1,
				filled = false,
				name = "okay",
			})
			menu.openclose[1 + #menu.openclose] = this.selectionoutline

			this.scrollerBar = DrawingFunction("frame", { -- for getting the bounds of the thing
				parent = this.selection,
				anchorpoint = _Vector2New(0, 0),
				size = _UDim2New(0, 3, 8 / #parameters.values, 0),
				position = _UDim2New(1, -3, 0, 20),
				zindex = menu.basezindex + 18,
				color = menu.accent,
				visible = false,
				filled = true,
				name = "okay",
			})
			menu.accents[1 + #menu.accents] = this.scrollerBar

			function myflag:setvalue(new)
				myflag.value = new
				local maximumchars = _MathFloor(this.selection.absolutesize.x / 6.5) - 4 - 2 -- suck
				local selected = ""
				local selections = 0
				for i, v in next, (myflag.value) do
					if v then
						if selections > 0 then
							selected = selected .. ", "
						end
						selected = selected .. i
						selections = selections + 1
					end
				end
				for i, v in next, this.valuecontainer do
					v.selectiontext.color = myflag.value[v.selectiontext.text] and menu.accent or _Color3New(1, 1, 1)
				end

				local needsdotdotdot = false
				if _StringLen(selected) > maximumchars then
					needsdotdotdot = true
				end
				selected = _StringSub(selected, 0, maximumchars) .. (needsdotdotdot and "..." or "" )
				if selections == 0 then
					this.selectiontext.text = "none"
				else
					this.selectiontext.text = selected
				end 
				myflag.changed:Fire()
			end

			this.selection.getpropertychangedsignal:Connect(function(prop, val)
				if prop == "absolutesize" then
					myflag:setvalue(myflag.value)
				end
			end)
			
			local numCreated = 0
			for val, v in next, (parameters.values) do
				if numCreated >= 8 then
					break
				end
				local temporary = {}
				local val = v[1] -- so that its in order
				temporary.value = val
				temporary.selectionoutline = DrawingFunction("frame", { -- for getting the bounds of the thing
					parent = this.selection,
					anchorpoint = _Vector2New(0.5, 0),
					size = _UDim2New(1, 2, 0, 22),
					position = _UDim2New(0.5, 0, 0, ((1 + #this.valuecontainer) * 20) -2),
					zindex = menu.basezindex + 14,
					color = menucolors.d,
					visible = false,
					thickness = 0,
					filled = true,
					name = "okay",
				})
				temporary.selection = DrawingFunction("frame", { -- for getting the bounds of the thing
					parent = temporary.selectionoutline,
					anchorpoint = _Vector2New(0.5, 0.5),
					size = _UDim2New(1, -2, 1, -2),
					position = _UDim2New(0.5, 0, 0.5, 0),
					zindex = menu.basezindex + 15,
					color = menucolors.c,
					visible = true,
					thickness = 0,
					filled = true,
					activated = true,
					name = "okay",
				})
				menu.activations[1 + #menu.activations] = temporary.selection
				temporary.selectiontext = DrawingFunction("text", {
					parent = temporary.selection,
					anchorpoint = _Vector2New(0, 0.5),
					size = 13, -- x3
					font = Drawing.Fonts.Plex,
					position = _UDim2New(0, 2, 0.5, 0),
					zindex = menu.basezindex + 16,
					color = _Color3FromRGB(255, 255, 255),
					visible = true,
					outline = false,
					outlinecolor = _Color3FromRGB(12, 12, 12),
					text = val,
					name = "okay",
				})
				temporary.selection.clicked:Connect(function()
					local thisVal = temporary.selectiontext.text
					if parameters.multichoice == false then
						for i, v in next, (myflag.value) do
							myflag.value[i] = (thisVal == i) -- suck my nutz
						end
					else
						if not myflag.value then
							myflag.value[thisVal] = false
						end
						myflag.value[thisVal] = not myflag.value[thisVal] -- suck my nutz
					end
					myflag:setvalue(myflag.value)
				end)
				this.valuecontainer[1 + #this.valuecontainer] = temporary
				numCreated = numCreated + 1
			end
			local currentScrollLevel = 0
			if #parameters.values > 8 then
				local scrollUpConnection
				local scrollDownConnection
				local function updateScroll()
					this.scrollerBar.size = _UDim2New(0, 3, 8 / #parameters.values, 0)
					local currentY = _MathFloor(currentScrollLevel / #parameters.values * 170)
					currentY = _MathClamp(currentY, 1, (170) - this.scrollerBar.absolutesize.y - 1)
					this.scrollerBar.position = _UDim2New(1, -3, 0, currentY + 20)

					for i = 1, 8 do
						local pointStartVis = currentScrollLevel + i
						local ref = this.valuecontainer[i]
						local flagRef = parameters.values[pointStartVis]
						
						ref.selectiontext.text = flagRef[1]
						ref.selectiontext.color = myflag.value[flagRef[1]] and menu.accent or _Color3New(1, 1, 1)
					end
				end

				scrollUpConnection = utilities.mouse.scrollup:Connect(function(d)
					if (menu.isadropdownopen and this.dropdownopened == false) or menu.isacolorpickeropen or menu.uiopen == false then return end
					currentScrollLevel = _MathClamp(currentScrollLevel - d, 0, #parameters.values - 8)
					updateScroll()
				end)
				scrollDownConnection = utilities.mouse.scrolldown:Connect(function(d)
					if (menu.isadropdownopen and this.dropdownopened == false) or menu.isacolorpickeropen or menu.uiopen == false then return end
					currentScrollLevel = _MathClamp(currentScrollLevel - d, 0, #parameters.values - 8)
					updateScroll()
				end)
			end

			this.icon.clicked:Connect(function()
				if (menu.isadropdownopen and this.dropdownopened == false) or menu.isacolorpickeropen or menu.uiopen == false then return end
				this.dropdownopened = not this.dropdownopened
				this.icontext.text = (this.dropdownopened == true) and "-" or "+"
				menu.isadropdownopen = this.dropdownopened

				for i, v in next, (this.valuecontainer) do
					v.selectionoutline.visible = this.dropdownopened
					v.selectionoutline.position = v.selectionoutline.position
					v.selectionoutline.size = v.selectionoutline.size
				end
				for i = 1, 8 do
					local pointStartVis = currentScrollLevel + i
					local ref = this.valuecontainer[i]
					local flagRef = parameters.values[pointStartVis]
					
					if not (ref and ref.selectiontext) then continue end 

					ref.selectiontext.text = flagRef[1]
					ref.selectiontext.color = myflag.value[flagRef[1]] and menu.accent or _Color3New(1, 1, 1)
				end
				if #parameters.values > 8 then
					this.scrollerBar.visible = this.dropdownopened
				end
			end)

			if tooltip then
				this.icon.mouseenter:Connect(function()
					if menu.uiopen == false or menu.isadropdownopen or menu.isacolorpickeropen or menu.uiopen == false then return end
					menu:calltooltip(tooltip, this.icon, _Vector2New(-4, 2))
				end)
			end

			local vals = {}
			for i, v in next, (parameters.values) do
				local name = v[1]
				local state = v[2]
				vals[name] = state
			end

			myflag:setvalue(vals)

			this.bounds = _Vector2New(0, 38 + boundoffset)
			menu.elements[tab][subsection][name] = this
			menu.elements[tab][subsection].updateScrollBarLength()
		end

		function menu:createbutton(parameters)
			local tab = parameters.tab
			local subsection = parameters.subsection
			local targetsection = menu.directory[tab][subsection]
			local confirmation = parameters.confirmation ~= nil and parameters.confirmation or nil
			local name = parameters.name
			local flag = parameters.flag
			local this = {}
			menu.flags[flag] = {}
			local myflag = menu.flags[flag]
			this.myflag = myflag -- mypenis
			myflag.__index = menu.flags[flag]
			myflag.type = "button"
			myflag.name = name
			myflag.pressed = utilities.signal.new()

			local offset = baseoffset + 10

			for i, v in next, (menu.elements[tab][subsection]) do
				if _Type(v) == "table" then
					offset = offset + v.bounds.y
				end
			end

			this.hitbox = DrawingFunction("frame", { -- for getting the bounds of the thing
				parent = targetsection,
				anchorpoint = _Vector2New(0.5, 0),
				size = _UDim2New(1, -28, 0, 20),
				position = _UDim2New(0.5, 0, 0, offset),
				zindex = menu.basezindex + 7,
				color = menucolors.d,
				visible = true,
				thickness = 1,
				filled = false,
				activated = true,
				name = "okay",
			})
			menu.openclose[1 + #menu.openclose] = this.hitbox
			menu.activations[1 + #menu.activations] = this.hitbox
			this.container = DrawingFunction("frame", { -- for getting the bounds of the thing
				parent = this.hitbox,
				anchorpoint = _Vector2New(0.5, 0.5),
				size = _UDim2New(1, -2, 1, -2),
				position = _UDim2New(0.5, 0, 0.5, 0),
				zindex = menu.basezindex + 8,
				color = menucolors.c,
				visible = true,
				thickness = 0,
				filled = true,
				name = "okay",
			})
			menu.openclose[1 + #menu.openclose] = this.container

			this.title = DrawingFunction("text", {
				parent = this.container,
				anchorpoint = _Vector2New(0, 0),
				size = 13, -- x3
				font = Drawing.Fonts.Plex,
				position = _UDim2New(0.5, -((#name * 7)/2), 0.5, -7),
				zindex = menu.basezindex + 9,
				color = parameters.detected and _Color3FromRGB(255, 106, 79) or _Color3FromRGB(255, 255, 255),
				visible = true,
				outline = false,
				text = name,
				name = "okay",
			})
			menu.openclose[1 + #menu.openclose] = this.title

			local lastactivation
			local connection
			local old = this.title.position
			this.hitbox.clicked:Connect(function()
				if menu.uiopen == false or menu.isadropdownopen or menu.isacolorpickeropen then return end
				if confirmation then
					if this.title.text ~= "confirm?" then
						this.title.text = "confirm?"
						this.title.position = _UDim2New(0.5, -((#this.title.text * 7)/2), 0.5, -7)
						this.title.color = menu.accent
						lastactivation = _Tick()
						connection = RunService.Stepped:Connect(function()
							if _Tick() - lastactivation > 2 then
								this.title.text = name
								this.title.color = _Color3New(1, 1, 1)
								this.title.position = old
								lastactivation = _Tick()
								connection:Disconnect()
								connection = nil
							end
						end)
					else
						myflag.pressed:Fire()
						this.title.text = name
						this.title.color = _Color3New(1, 1, 1)
						lastactivation = _Tick()
						this.title.position = old
						connection:Disconnect()
						connection = nil
						lastactivation = _Tick()
					end
				else
					myflag.pressed:Fire()
				end
				this.container.color = menucolors.a
				_TaskWait(0.05)
				this.container.color = menucolors.c
			end)

			this.bounds = _Vector2New(0, 24 + boundoffset)
			menu.elements[tab][subsection][name] = this -- keep a record of this fuck
			menu.elements[tab][subsection].updateScrollBarLength()
		end

		function menu:createtextbox(parameters)
			local tab = parameters.tab
			local subsection = parameters.subsection
			local targetsection = menu.directory[tab][subsection]
			local name = parameters.text
			local flag = parameters.flag
			local this = {}
			menu.flags[flag] = {}
			local myflag = menu.flags[flag]
			this.myflag = myflag -- mypenis
			myflag.__index = menu.flags[flag]
			myflag.type = "textbox"
			myflag.value = name
			myflag.name = name
			myflag.changed = utilities.signal.new()

			local offset = baseoffset + 10

			for i, v in next, (menu.elements[tab][subsection]) do
				if _Type(v) == "table" then
					offset = offset + v.bounds.y
				end
			end
			this.hitbox = DrawingFunction("frame", { -- for getting the bounds of the thing
				parent = targetsection,
				anchorpoint = _Vector2New(0.5, 0),
				size = _UDim2New(1, -28, 0, 20),
				position = _UDim2New(0.5, 0, 0, offset),
				zindex = menu.basezindex + 7,
				color = menucolors.d,
				visible = true,
				thickness = 0,
				filled = true,
				activated = true,
				name = "okay",
			})
			menu.openclose[1 + #menu.openclose] = this.hitbox
			menu.activations[1 + #menu.activations] = this.hitbox
			this.container = DrawingFunction("frame", { -- for getting the bounds of the thing
				parent = this.hitbox,
				anchorpoint = _Vector2New(0.5, 0.5),
				size = _UDim2New(1, -2, 1, -2),
				position = _UDim2New(0.5, 0, 0.5, 0),
				zindex = menu.basezindex + 8,
				color = menucolors.b,
				visible = true,
				thickness = 0,
				filled = true,
				name = "okay",
			})
			menu.openclose[1 + #menu.openclose] = this.container
			this.title = DrawingFunction("text", {
				parent = this.container,
				anchorpoint = _Vector2New(0, 0),
				size = 13, -- x3
				font = Drawing.Fonts.Plex,
				position = _UDim2New(0, 4, 0.5, -7),
				zindex = menu.basezindex + 9,
				color = _Color3FromRGB(255, 255, 255),
				visible = true,
				outline = false,
				outlinecolor = menucolors.d,
				text = name,
				name = "okay",
			})
			menu.openclose[1 + #menu.openclose] = this.title
			local textupdateconnection

			function myflag:setvalue(new)
				myflag.value = new
				this.title.text = myflag.value
				if textupdateconnection then -- currently typing...
					this.title.color = menu.accent
					this.title.text = this.title.text .. "|"
				end
				myflag.changed:Fire()
			end

			this.hitbox.clicked:Connect(function()
				if menu.uiopen == false or menu.isadropdownopen or menu.isacolorpickeropen then return end

				if textupdateconnection then
					textupdateconnection:Disconnect()
					textupdateconnection = nil
					this.title.text = this.title.text:gsub("|", "")
					this.title.color = _Color3New(1, 1, 1)
				end

				this.title.color = menu.accent
				this.title.text = this.title.text .. "|"
				textupdateconnection = InputService.InputBegan:Connect(function(Input, gameProcessed)
					if Input.UserInputType == Enum.UserInputType.Keyboard then
						if Input.KeyCode.Value == 27 or Input.KeyCode.Value == 13 then -- escape or enter pressed -> close the thing
							textupdateconnection:Disconnect()
							textupdateconnection = nil
							this.title.text = this.title.text:gsub("|", "")
							this.title.color = _Color3New(1, 1, 1)
						elseif Input.KeyCode.Value == 8 then -- backspace -> subtract the text by 1
							if InputService:IsKeyDown(Enum.KeyCode.LeftControl) or InputService:IsKeyDown(Enum.KeyCode.RightControl) then
								myflag:setvalue("")
							else
								myflag:setvalue(myflag.value:sub(0, -2)) -- remove the last char
							end
						elseif Input.KeyCode.Value == 32 then -- spacebar
							myflag:setvalue(myflag.value .. " ") -- remove the last char
						elseif Input.KeyCode.Value == 118 and (InputService:IsKeyDown(Enum.KeyCode.LeftControl) or InputService:IsKeyDown(Enum.KeyCode.RightControl)) then -- the v key
							this.title.text = this.title.text:gsub("|", "")
							this.title.color = _Color3New(1, 1, 1)
							textupdateconnection:Disconnect()
							textupdateconnection = nil
							myflag:setvalue(utilities.getclipboard())
						else
							local key = _tostring(Input.KeyCode):sub(14)
							if _TableFind(menu.validkeys, key) or menu.validnumberkeys[key] then
								if menu.validnumberkeys[key] then
									key = menu.validnumberkeys[key]
								end
								if InputService:IsKeyDown(Enum.KeyCode.LeftShift) or InputService:IsKeyDown(Enum.KeyCode.RightShift) then
									key = _StringUpper(key)
								else
									key = _StringLower(key)
								end
								myflag:setvalue(myflag.value .. key)
							end
						end
					end
				end)
			end)

			this.bounds = _Vector2New(0, 24 + boundoffset)
			menu.elements[tab][subsection][name] = this -- keep a record of this fuck
			menu.elements[tab][subsection].updateScrollBarLength()
		end

		local baseOffsetX = 16
		local baseOffsetY = 16

		menu.currentnotifications = {}
		menu.notificationmanagement = RunService.RenderStepped:Connect(function(dt)
			local sorted = {}
			local prioritiesgroups = {}

			-- sort the fucker

			_TableSort(menu.currentnotifications, function(a, b) return a.priority > b.priority end)

			for i, v in next, menu.currentnotifications do
				if v.ignoreanimations then
				else
					if not prioritiesgroups[v.priority] then
						prioritiesgroups[v.priority] = {}
					end
					local thisGroup = prioritiesgroups[v.priority]
					thisGroup[1 + #thisGroup] = v
				end
			end

			for priority, notifs in next, prioritiesgroups do
				_TableSort(notifs, function(a, b) return a.created < b.created end)
			end

			for priority, notifs in next, prioritiesgroups do
				for lifepriority, notif in next, notifs do
					sorted[1 + #sorted] = notif
				end
			end

			-- this positions it accordingly
			local currentLevel = 0
			for i = 1, #sorted do
				local notification = sorted[i]

				if notification.alivetime > notification.lifetime then -- manage removing the notif once its lifetime has expired
					notification.container.visible = false

					notification.container.Drawingobject:Remove()
					notification.outline1.Drawingobject:Remove()
					notification.outline2.Drawingobject:Remove()

					notification.container.Drawingobject = nil
					notification.outline1.Drawingobject = nil
					notification.outline2.Drawingobject = nil

					table.clear(notification.container)
					table.clear(notification.outline1)
					table.clear(notification.outline2)

					notification.container.Drawingobject = {}
					notification.outline1.Drawingobject = {}
					notification.outline2.Drawingobject = {}

					for k, n in next, menu.currentnotifications do
						if notification == n then
							table.clear(notification)
							_TableRemove(menu.currentnotifications, k)
						end
					end
				else
					notification.container.visible = true
					-- manage x position
					if notification.alivetime < 1 then -- manage x position coming out of the closet
						local percentageMoved = notification.alivetime / 1
						local projectedMovePercentage = (1 / (-2.71828 ^ (percentageMoved * 8))) + 1
						notification.container.position = _UDim2New(0, -240 + (projectedMovePercentage * 240) + baseOffsetX, 0, 0)
					elseif notification.alivetime > notification.lifetime - 0.5 then  -- manage x position going back into the closet
						local percentageMoved = 2 * (notification.alivetime - (notification.lifetime - 0.5))
						local projectedMovePercentage = (1 / (-2.71828 ^ (percentageMoved * 1))) + 1
						notification.container.position = _UDim2New(0, baseOffsetX - (projectedMovePercentage * 120), 0, 0)
					else
						notification.container.position = _UDim2New(0, baseOffsetX, 0, 0)
					end

					-- manage y position
					notification.container.position = notification.container.position + _UDim2New(0, 0, 0, baseOffsetY + currentLevel)
					currentLevel = currentLevel + 8 + notification.container.absolutesize.y

					-- manage fade
					if notification.alivetime < 1 then -- manage fade coming out of the closet
						local fade = notification.alivetime / 1

						notification.container.transparency = fade
						notification.outline1.transparency = fade
						notification.outline2.transparency = fade
						notification.title.transparency = fade

					elseif notification.alivetime > notification.lifetime - 0.5 then -- manage fade going back into the closet
						local fade = 1 - (2 * (notification.alivetime - (notification.lifetime - 0.5)))

						notification.container.transparency = fade
						notification.outline1.transparency = fade
						notification.outline2.transparency = fade
						notification.title.transparency = fade
					else
						notification.container.transparency = 1
						notification.outline1.transparency = 1
						notification.outline2.transparency = 1
						notification.title.transparency = 1
					end

					notification.alivetime = notification.alivetime + dt
				end
			end
		end)

		function menu:createnotification(param)
			local this = {}
			this.container = DrawingFunction("frame", {
				parent = utilities.base,
				anchorpoint = _Vector2New(0, 0),
				size = _UDim2New(0, 100, 0, 100),
				position = _UDim2New(32, 0, 32, 0),
				zindex = menu.basezindex + -4,
				color = parameters.colors.a,
				visible = false,
				thickness = 1,
				transparency = 1,
				filled = true,
				name = "okay",
			})
			this.outline1 = DrawingFunction("frame", {
				parent = this.container,
				anchorpoint = _Vector2New(0.5, 0.5),
				size = _UDim2New(1, 2, 1, 2),
				position = _UDim2New(0.5, 0, 0.5, 0),
				zindex = menu.basezindex + 5,
				color = parameters.colors.c,
				visible = true,
				thickness = 1,
				filled = false,
				name = "okay",
			})
			this.outline2 = DrawingFunction("frame", {
				parent = this.containeroutline,
				anchorpoint = _Vector2New(0.5, 0.5),
				size = _UDim2New(1, 2, 1, 2),
				position = _UDim2New(0.5, 0, 0.5, 0),
				zindex = menu.basezindex + 4,
				color = parameters.colors.a,
				visible = true,
				thickness = 1,
				filled = false,
				name = "okay",
			})
			this.title = DrawingFunction("text", {
				parent = this.container,
				anchorpoint = _Vector2New(0, 0),
				size = 13, -- x3
				font = Drawing.Fonts.Plex,
				position = _UDim2New(0, 8, 0, 4),
				zindex = menu.basezindex + 20,
				color = _Color3FromRGB(255, 255, 255),
				visible = true,
				outline = false,
				outlinecolor = _Color3FromRGB(12, 12, 12),
				text = "example notif",
				name = "okay",
			})

			-- text editing stuffs (copied from tooltip)
			local maxWidth = 36
			local text = param.text
			do -- WARNING !! ALAN CODE AHEAD!!
				local split = text:split("")
				local lastspaceidx = 0 -- the text idx that the last space is
				local charinline = 0
				for i, v in next, (split) do
					charinline = charinline + 1
					if v == " " then
						lastspaceidx = i
					end
					if charinline >= maxWidth then
						split[lastspaceidx] = "\n" -- insert a thing
						charinline = 0
					end
				end
				text = ""
				for i, v in next, (split) do
					text = text .. v
				end
			end
			local split = text:split("\n")
			local textlinelength = {}
			local yLeng = 0
			for i, v in next, (split) do
				local textBound = _Vector2New()
				do -- FATAL !
					local getTextBoundsOfBullshit = Drawing.new("Text")
					getTextBoundsOfBullshit.Visible = true
					getTextBoundsOfBullshit.Font = Drawing.Fonts.Plex
					getTextBoundsOfBullshit.Size = 13
					getTextBoundsOfBullshit.Text = v
					textBound = getTextBoundsOfBullshit.TextBounds
					getTextBoundsOfBullshit.Visible = false
					getTextBoundsOfBullshit:Remove()
					getTextBoundsOfBullshit = nil
				end

				textlinelength[i] = textBound.x -- getting the number of characters each line and getting the biggest one to properly size the thing
				yLeng = yLeng + textBound.y
			end
			_TableSort(textlinelength, function(a, b) return a > b end)
			local longestthing = textlinelength[1]

			this.container.size = _UDim2New(0, longestthing + 16, 0, yLeng + 8)
			this.title.text = text
			this.alivetime = 0
			this.lifetime = param.lifetime
			this.priority = param.priority
			this.ignoreanimations = param.ignoreanimations
			this.created = _Tick()

			menu.currentnotifications[1 + #menu.currentnotifications] = this

			return this
		end

		local colorPickerType = 2
		do
			do
				local copyPasteMenu = {}
				copyPasteMenu.outline = DrawingFunction("frame", {
					parent = utilities.base,
					anchorpoint = _Vector2New(0, 0),
					size = _UDim2New(0, 42, 0, 32),
					position = _UDim2New(0, 100, 0, 100),
					zindex = menu.basezindex + 18,
					color = _Color3FromRGB(0, 0, 0),
					visible = false,
					thickness = 0,
					filled = true,
					name = "okay",
				})

				copyPasteMenu.container = DrawingFunction("frame", {
					parent = copyPasteMenu.outline,
					anchorpoint = _Vector2New(0.5, 0.5),
					size = _UDim2New(1, -2, 1, -2),
					position = _UDim2New(0.5, 0, 0.5, 0),
					zindex = menu.basezindex + 18,
					color = _Color3FromRGB(46, 46, 46),
					visible = true,
					thickness = 0,
					filled = true,
					name = "okay",
				})

				copyPasteMenu.copyTitle = DrawingFunction("text", {
					parent = copyPasteMenu.container,
					anchorpoint = _Vector2New(0, 0),
					size = 13, -- x3
					font = Drawing.Fonts.Plex,
					position = _UDim2New(0, 2, 0, 0),
					zindex = menu.basezindex + 19,
					color = _Color3FromRGB(255, 255, 255),
					visible = true,
					outline = false,
					outlinecolor = _Color3FromRGB(12, 12, 12),
					text = "copy",
					name = "okay",
				})

				copyPasteMenu.pasteTitle = DrawingFunction("text", {
					parent = copyPasteMenu.container,
					anchorpoint = _Vector2New(0, 0),
					size = 13, -- x3
					font = Drawing.Fonts.Plex,
					position = _UDim2New(0, 2, 0, copyPasteMenu.copyTitle.absolutesize.y + 2),
					zindex = menu.basezindex + 19,
					color = _Color3FromRGB(255, 255, 255),
					visible = true,
					outline = false,
					outlinecolor = _Color3FromRGB(12, 12, 12),
					text = "paste",
					name = "okay",
				})

				copyPasteMenu.copyDetection = DrawingFunction("frame", {
					parent = copyPasteMenu.container,
					anchorpoint = _Vector2New(0, 0),
					size = _UDim2New(1, 0, 0.5, 0),
					position = _UDim2New(0, 0, 0, 0),
					zindex = menu.basezindex + 18,
					color = _Color3FromRGB(0, 0, 0),
					visible = true,
					thickness = 0,
					activated = true,
					transparency = 0,
					filled = true,
					name = "okay",
				})

				copyPasteMenu.pasteDetection = DrawingFunction("frame", {
					parent = copyPasteMenu.container,
					anchorpoint = _Vector2New(0, 0),
					size = _UDim2New(1, 0, 0.5, 0),
					position = _UDim2New(0, 0, 0.5, 0),
					zindex = menu.basezindex + 18,
					color = _Color3FromRGB(0, 0, 0),
					visible = true,
					thickness = 0,
					activated = true,
					transparency = 0,
					filled = true,
					name = "okay",
				})

				copyPasteMenu.copyDetection.clicked:Connect(function()
					if copyPasteMenu.focusedon then
						local v = copyPasteMenu.focusedon
						local val = {v.color.r, v.color.g, v.color.b, v.transparency}
						local keyFrameFix = {}
						for n, kfs in next, v.animationKeyFrames do
							keyFrameFix[n] = {}
							for idx, d in next, kfs do
								keyFrameFix[n][idx] =  {d.color.r, d.color.g, d.color.b, d.transparency}
							end
						end
						local animations = {
							animation = v.animation,
							animationKeyFrames = keyFrameFix,
							speeds = v.animationSpeed
						}
						local comp = {val, animations}
						local result = json.encode(comp)
						colorpickerClipBoard = result
					end
					copyPasteMenu.outline.visible = false
					if copyPasteMenu.outofboundscloseconnection then
						copyPasteMenu.outofboundscloseconnection:Disconnect()
						copyPasteMenu.outofboundscloseconnection = nil
					end
					menu.isacolorpickeropen = false
				end)
				copyPasteMenu.pasteDetection.clicked:Connect(function()
					local clipboard = colorpickerClipBoard
					if copyPasteMenu.focusedon and colorpickerClipBoard then
						local ff = copyPasteMenu.focusedon
						local value = json.decode(clipboard)
						ff:setcolor(_Color3New(value[1][1], value[1][2], value[1][3]))

						if value[1][4] then
							ff:settransparency(value[1][4])
						end
						local keyFrameFix = {}
						for n, kfs in next, value[2].animationKeyFrames do
							keyFrameFix[n] = {}
							for idx, d in next, kfs do
								keyFrameFix[n][idx] = {
									color = _Color3New(d[1], d[2], d[3]),
									transparency = d[4],
								}
							end
						end
						ff:setAnimation(value[2].animation)
						ff:setAnimationSpeed(value[2].speeds)
						ff:setAnimationKeyFrames(keyFrameFix)
					end
					copyPasteMenu.outline.visible = false
					if copyPasteMenu.outofboundscloseconnection then
						copyPasteMenu.outofboundscloseconnection:Disconnect()
						copyPasteMenu.outofboundscloseconnection = nil
					end
					menu.isacolorpickeropen = false
				end)

				function menu:callcolorcopypaste(flag, position)
					if not flag then return end

					copyPasteMenu.outline.visible = true
					copyPasteMenu.outline.position = _UDim2New(0, position.x - 1, 0, position.y - 1)
					copyPasteMenu.outline.position = _UDim2New(0, position.x, 0, position.y)

					copyPasteMenu.focusedon = flag

					menu.isacolorpickeropen = true

					copyPasteMenu.outofboundscloseconnection = utilities.mouse.mousebutton1down:Connect(function()
						if utilities.mousechecks.inbounds(copyPasteMenu.outline, utilities.mouse.position) == false then -- uh oh..

							copyPasteMenu.outline.visible = false
							menu.isacolorpickeropen = false

							if copyPasteMenu.outofboundscloseconnection then
								copyPasteMenu.outofboundscloseconnection:Disconnect()
								copyPasteMenu.outofboundscloseconnection = nil
							end
						end
					end)
				end
			end
			if colorPickerType == 1 then
				menu.colorpicker = {} -- would rather make 1 that moves around instead of do this for EVERY color picker, probably shouldve done this with dropdowns and what not but i got lazy

				menu.colorpicker.outline = DrawingFunction("frame", {
					parent = utilities.base,
					anchorpoint = _Vector2New(0, 0),
					size = _UDim2New(0, 194, 0, 208),
					position = _UDim2New(0, 100, 0, 100),
					zindex = menu.basezindex + 18,
					color = _Color3FromRGB(0, 0, 0),
					visible = false,
					thickness = 0,
					filled = true,
					name = "okay",
				})

				menu.colorpicker.container = DrawingFunction("frame", {
					parent = menu.colorpicker.outline,
					anchorpoint = _Vector2New(0.5, 0.5),
					size = _UDim2New(1, -2, 1, -2),
					position = _UDim2New(0.5, 0, 0.5, 0),
					zindex = menu.basezindex + 18,
					color = _Color3FromRGB(46, 46, 46),
					visible = true,
					thickness = 0,
					filled = true,
					name = "okay",
				})

				menu.colorpicker.title = DrawingFunction("text", {
					parent = menu.colorpicker.container,
					anchorpoint = _Vector2New(0, 0),
					size = 13, -- x3
					font = Drawing.Fonts.Plex,
					position = _UDim2New(0, 4, 0, 2),
					zindex = menu.basezindex + 19,
					color = _Color3FromRGB(255, 255, 255),
					visible = true,
					outline = false,
					outlinecolor = _Color3FromRGB(12, 12, 12),
					text = "Color Picker",
					name = "okay",
				})

				menu.colorpicker.pickeroutline = DrawingFunction("frame", {
					parent = menu.colorpicker.outline,
					anchorpoint = _Vector2New(0, 0),
					size = _UDim2New(0, 172, 0, 172),
					position = _UDim2New(0, 4, 0, 18),
					zindex = menu.basezindex + 18,
					color = _Color3FromRGB(0, 0, 0),
					visible = true,
					thickness = 0,
					filled = true,
					name = "okay",
				})

				menu.colorpicker.pickercontainer = DrawingFunction("frame", {
					parent = menu.colorpicker.pickeroutline,
					anchorpoint = _Vector2New(0.5, 0.5),
					size = _UDim2New(1, -2, 1, -2),
					position = _UDim2New(0.5, 0, 0.5, 0),
					zindex = menu.basezindex + 19,
					color = _Color3New(1, 0, 0),
					visible = true,
					thickness = 0,
					filled = true,
					name = "okay",
				})

				menu.colorpicker.picker = DrawingFunction("frame", {
					parent = menu.colorpicker.pickercontainer,
					anchorpoint = _Vector2New(0.5, 0.5),
					size = _UDim2New(1, 0, 1, 0),
					position = _UDim2New(0.5, 0, 0.5, 0),
					zindex = menu.basezindex + 20,
					transparency = 0,
					color = _Color3New(1, 1, 1),
					visible = true,
					activated = true,
					name = "okay",
				})
				menu.activations[1 + #menu.activations] = menu.colorpicker.picker

				do
					local parentedTo = menu.colorpicker.picker
					local smoothGradient = {}
					local xRes = 6
					local yRes = 6
					for xDim = 1, parentedTo.absolutesize.x / xRes do
						smoothGradient[xDim] = {}
						for yDim = 1, parentedTo.absolutesize.y / yRes do
							smoothGradient[xDim][yDim] = utilities:draw("frame", {
								parent = parentedTo,
								anchorpoint = _Vector2New(0, 0),
								size = _UDim2New(0, xRes, 0, yRes),
								position = _UDim2New(0, (xDim - 1) * xRes, 0, (yDim - 1) * yRes),
								zindex = parentedTo.zindex + 1,
								color = _Color3FromHSV(0, 0, 1 - ((yDim - 1) * yRes) / parentedTo.absolutesize.y),
								transparency = 1 - ((xDim - 1) * xRes) / parentedTo.absolutesize.x,
								visible = true,
								name = "okay",
							})
						end
					end
				end

				menu.colorpicker.pickerselection = DrawingFunction("frame", {
					parent = utilities.base,
					anchorpoint = _Vector2New(0, 0),
					size = _UDim2New(0, 1, 0, 1),
					position = _UDim2New(0, 0, 0, 0),
					zindex = menu.basezindex + 22,
					color = _Color3New(1, 1, 1),
					visible = false,
					thickness = 0,
					filled = true,
					name = "okay",
				})

				menu.colorpicker.pickerselectionoutline = DrawingFunction("frame", {
					parent = menu.colorpicker.pickerselection,
					anchorpoint = _Vector2New(0.5, 0.5),
					size = _UDim2New(1, 2, 1, 2),
					position = _UDim2New(0.5, 0, 0.5, 0),
					zindex = menu.basezindex + 21,
					color = _Color3FromRGB(0, 0, 0),
					visible = true,
					thickness = 0,
					filled = true,
					name = "okay",
				})

				menu.colorpicker.hueoutline = DrawingFunction("frame", {
					parent = menu.colorpicker.outline,
					anchorpoint = _Vector2New(0, 0),
					size = _UDim2New(0, 12, 0, 172),
					position = _UDim2New(0, 178, 0, 18),
					zindex = menu.basezindex + 18,
					color = _Color3FromRGB(0, 0, 0),
					visible = true,
					thickness = 0,
					filled = true,
					name = "okay",
				})

				menu.colorpicker.huecontainer = DrawingFunction("frame", {
					parent = menu.colorpicker.hueoutline,
					anchorpoint = _Vector2New(0.5, 0.5),
					size = _UDim2New(1, -2, 1, -2),
					position = _UDim2New(0.5, 0, 0.5, 0),
					zindex = menu.basezindex + 19,
					color = _Color3FromRGB(0, 0, 0),
					visible = true,
					thickness = 0,
					filled = true,
					name = "okay",
				})

				menu.colorpicker.hue = DrawingFunction("frame", {
					parent = menu.colorpicker.huecontainer,
					anchorpoint = _Vector2New(0.5, 0.5),
					size = _UDim2New(1, 0, 1, 0),
					position = _UDim2New(0.5, 0, 0.5, 0),
					zindex = menu.basezindex + 20,
					transparency = 0,
					visible = true,
					activated = true,
					name = "okay",
				})
				menu.activations[1 + #menu.activations] = menu.colorpicker.hue

				do
					local parentedTo = colorReference.hue
					local smoothGradient = {}
					local yRes = 6
					for yDim = 1, parentedTo.absolutesize.y / yRes do
						smoothGradient[yDim] = utilities:draw("frame", {
							parent = parentedTo,
							anchorpoint = _Vector2New(0, 0),
							size = _UDim2New(1, 0, 0, yRes),
							position = _UDim2New(0, 0, 0, (yDim - 1) * yRes),
							zindex = parentedTo.zindex + 1,
							color = _Color3FromHSV(1 - ((yDim - 1) * yRes) / parentedTo.absolutesize.y, 1, 1),
							visible = true,
							name = "okay",
						})
					end
				end

				menu.colorpicker.hueselection = DrawingFunction("frame", {
					parent = utilities.base,
					anchorpoint = _Vector2New(0, 0),
					size = _UDim2New(0, 14, 0, 2),
					position = _UDim2New(0, 0, 0, 0),
					zindex = menu.basezindex + 22,
					color = _Color3New(1, 1, 1),
					visible = false,
					thickness = 0,
					filled = true,
					name = "okay",
				})

				menu.colorpicker.hueselectionoutline = DrawingFunction("frame", {
					parent = menu.colorpicker.hueselection,
					anchorpoint = _Vector2New(0.5, 0.5),
					size = _UDim2New(1, 2, 1, 2),
					position = _UDim2New(0.5, 0, 0.5, 0),
					zindex = menu.basezindex + 21,
					color = _Color3FromRGB(0, 0, 0),
					visible = true,
					thickness = 0,
					filled = true,
					name = "okay",
				})

				menu.colorpicker.transparencyoutline = DrawingFunction("frame", {
					parent = menu.colorpicker.outline,
					anchorpoint = _Vector2New(0, 0),
					size = _UDim2New(0, 172, 0, 12),
					position = _UDim2New(0, 4, 0, 192),
					zindex = menu.basezindex + 18,
					color = _Color3FromRGB(0, 0, 0),
					visible = true,
					thickness = 0,
					filled = true,
					name = "okay",
				})

				menu.colorpicker.transparencycontainer = DrawingFunction("frame", {
					parent = menu.colorpicker.transparencyoutline,
					anchorpoint = _Vector2New(0.5, 0.5),
					size = _UDim2New(1, 0, 1, 0),
					position = _UDim2New(0.5, 0, 0.5, 0),
					zindex = menu.basezindex + 19,
					color = _Color3New(1, 1, 1),
					visible = true,
					thickness = 0,
					filled = true,
					name = "okay",
				})

				menu.colorpicker.transparencypicker = DrawingFunction("frame", {
					parent = menu.colorpicker.transparencycontainer,
					anchorpoint = _Vector2New(0.5, 0.5),
					size = _UDim2New(1, 0, 1, 0),
					position = _UDim2New(0.5, 0, 0.5, 0),
					zindex = menu.basezindex + 20,
					transparency = 0,
					visible = true,
					activated = true,
					name = "okay",
				})
				menu.activations[1 + #menu.activations] = menu.colorpicker.transparencypicker

				do
					local parentedTo = menu.colorpicker.transparencypicker
					local smoothGradient = {}
					local xRes = 6
					for xDim = 1, parentedTo.absolutesize.x / xRes do
						smoothGradient[xDim] = utilities:draw("frame", {
							parent = parentedTo,
							anchorpoint = _Vector2New(0, 0),
							size = _UDim2New(0, xRes, 1, 0),
							position = _UDim2New(0, (xDim - 1) * xRes, 0, 0),
							zindex = parentedTo.zindex + 1,
							color = _Color3FromHSV(0, 0, ((xDim - 1) * xRes) / parentedTo.absolutesize.x),
							visible = true,
							name = "okay",
						})                      
					end
				end

				menu.colorpicker.transparencyselection = DrawingFunction("frame", {
					parent = utilities.base,
					anchorpoint = _Vector2New(0, 0),
					size = _UDim2New(0, 2, 0, 14),
					position = _UDim2New(0, 0, 0, 0),
					zindex = menu.basezindex + 22,
					color = _Color3New(1, 1, 1),
					visible = false,
					thickness = 0,
					filled = true,
					name = "okay",
				})

				menu.colorpicker.transparencyselectionoutline = DrawingFunction("frame", {
					parent = menu.colorpicker.transparencyselection,
					anchorpoint = _Vector2New(0.5, 0.5),
					size = _UDim2New(1, 2, 1, 2),
					position = _UDim2New(0.5, 0, 0.5, 0),
					zindex = menu.basezindex + 21,
					color = _Color3FromRGB(0, 0, 0),
					visible = true,
					thickness = 0,
					filled = true,
					name = "okay",
				})

				menu.colorpicker.outline.visible = false

				menu.colorpicker.focusedon = nil

				-- how 2 pick color
				menu.colorpicker.picker.clicked:Connect(function()
					local oldhue = _MathAbs(1 - (_MathClamp(menu.colorpicker.hueselection.absoluteposition.y, menu.colorpicker.hue.absoluteposition.y, menu.colorpicker.hue.absoluteposition.y + menu.colorpicker.hue.absolutesize.y) - menu.colorpicker.picker.absoluteposition.y) / menu.colorpicker.picker.absolutesize.y)

					local xpos = _MathClamp(utilities.mouse.position.x, menu.colorpicker.picker.absoluteposition.x, menu.colorpicker.picker.absoluteposition.x + menu.colorpicker.picker.absolutesize.x)
					local ypos = _MathClamp(utilities.mouse.position.y, menu.colorpicker.picker.absoluteposition.y, menu.colorpicker.picker.absoluteposition.y + menu.colorpicker.picker.absolutesize.y)
					menu.colorpicker.pickerselection.position = _UDim2New(0, xpos, 0, ypos)
					-- quick maths

					local sat = _MathClamp((xpos - menu.colorpicker.picker.absoluteposition.x) / menu.colorpicker.picker.absolutesize.x, 0, 1)
					local val = _MathClamp(_MathAbs(1 - (ypos - menu.colorpicker.picker.absoluteposition.y) / menu.colorpicker.picker.absolutesize.y), 0, 1)

					menu.colorpicker.focusedon:setcolor(_Color3FromHSV(oldhue, sat, val))

					menu.colorpicker.updater = utilities.mouse.moved:Connect(function()
						local xpos = _MathClamp(utilities.mouse.position.x, menu.colorpicker.picker.absoluteposition.x, menu.colorpicker.picker.absoluteposition.x + menu.colorpicker.picker.absolutesize.x)
						local ypos = _MathClamp(utilities.mouse.position.y, menu.colorpicker.picker.absoluteposition.y, menu.colorpicker.picker.absoluteposition.y + menu.colorpicker.picker.absolutesize.y)
						menu.colorpicker.pickerselection.position = _UDim2New(0, xpos, 0, ypos)
						-- quick maths

						local sat = _MathClamp((xpos - menu.colorpicker.picker.absoluteposition.x) / menu.colorpicker.picker.absolutesize.x, 0, 1)
						local val = _MathClamp(_MathAbs(1 - (ypos - menu.colorpicker.picker.absoluteposition.y) / menu.colorpicker.picker.absolutesize.y), 0, 1)

						menu.colorpicker.focusedon:setcolor(_Color3FromHSV(oldhue, sat, val))
					end)
				end)

				menu.colorpicker.hue.clicked:Connect(function()
					local old = menu.colorpicker.focusedon.color
					local oldhue, oldsat, oldval = _Color3ToHSV(old)

					local xpos = _MathClamp(utilities.mouse.position.x, menu.colorpicker.hue.absoluteposition.x, menu.colorpicker.hue.absoluteposition.x + menu.colorpicker.hue.absolutesize.x)
					local ypos = _MathClamp(utilities.mouse.position.y, menu.colorpicker.hue.absoluteposition.y, menu.colorpicker.hue.absoluteposition.y + menu.colorpicker.hue.absolutesize.y)
					menu.colorpicker.hueselection.position = _UDim2New(0, menu.colorpicker.hue.absoluteposition.x - 2, 0, ypos)

					local hue = _MathAbs(1 - (ypos - menu.colorpicker.picker.absoluteposition.y) / menu.colorpicker.picker.absolutesize.y)

					menu.colorpicker.focusedon:setcolor(_Color3FromHSV(hue, oldsat, oldval))
					menu.colorpicker.pickercontainer.color = _Color3FromHSV(hue, 1, 1)

					menu.colorpicker.updater = utilities.mouse.moved:Connect(function()
						local xpos = _MathClamp(utilities.mouse.position.x, menu.colorpicker.hue.absoluteposition.x, menu.colorpicker.hue.absoluteposition.x + menu.colorpicker.hue.absolutesize.x)
						local ypos = _MathClamp(utilities.mouse.position.y, menu.colorpicker.hue.absoluteposition.y, menu.colorpicker.hue.absoluteposition.y + menu.colorpicker.hue.absolutesize.y)
						menu.colorpicker.hueselection.position = _UDim2New(0, menu.colorpicker.hue.absoluteposition.x - 2, 0, ypos)

						local hue = _MathAbs(1 - (ypos - menu.colorpicker.picker.absoluteposition.y) / menu.colorpicker.picker.absolutesize.y)

						menu.colorpicker.focusedon:setcolor(_Color3FromHSV(hue, oldsat, oldval))
						menu.colorpicker.pickercontainer.color = _Color3FromHSV(hue, 1, 1)
					end)
				end)

				menu.colorpicker.transparencypicker.clicked:Connect(function()
					local xpos = _MathClamp(utilities.mouse.position.x, menu.colorpicker.transparencypicker.absoluteposition.x, menu.colorpicker.transparencypicker.absoluteposition.x + menu.colorpicker.transparencypicker.absolutesize.x)
					local ypos = _MathClamp(utilities.mouse.position.y, menu.colorpicker.transparencypicker.absoluteposition.y, menu.colorpicker.transparencypicker.absoluteposition.y + menu.colorpicker.transparencypicker.absolutesize.y)
					menu.colorpicker.transparencyselection.position = _UDim2New(0, xpos, 0, menu.colorpicker.transparencypicker.absoluteposition.y - 1)

					local transparency = (xpos - menu.colorpicker.transparencypicker.absoluteposition.x) / menu.colorpicker.transparencypicker.absolutesize.x
					menu.colorpicker.focusedon:settransparency(transparency)

					menu.colorpicker.updater = utilities.mouse.moved:Connect(function()
						local xpos = _MathClamp(utilities.mouse.position.x, menu.colorpicker.transparencypicker.absoluteposition.x, menu.colorpicker.transparencypicker.absoluteposition.x + menu.colorpicker.transparencypicker.absolutesize.x)
						local ypos = _MathClamp(utilities.mouse.position.y, menu.colorpicker.transparencypicker.absoluteposition.y, menu.colorpicker.transparencypicker.absoluteposition.y + menu.colorpicker.transparencypicker.absolutesize.y)
						menu.colorpicker.transparencyselection.position = _UDim2New(0, xpos, 0, menu.colorpicker.transparencypicker.absoluteposition.y - 1)

						local transparency = (xpos - menu.colorpicker.transparencypicker.absoluteposition.x) / menu.colorpicker.transparencypicker.absolutesize.x
						menu.colorpicker.focusedon:settransparency(transparency)
					end)
				end)

				utilities.mouse.mousebutton1up:Connect(function()
					if menu.colorpicker.updater then 
						menu.colorpicker.updater:Disconnect()
					end
				end)

				function menu:callcolorpicker(name, flag, position, transparency)
					if not flag then return end
					local old = flag.color
					local oldhue, oldsat, oldval = _Color3ToHSV(old)

					menu.colorpicker.outline.visible = true
					menu.isacolorpickeropen = true
					menu.colorpicker.outline.position = _UDim2New(0, position.x, 0, position.y)
					menu.colorpicker.title.text = name
					menu.colorpicker.pickercontainer.color = _Color3FromHSV(oldhue, 1, 1)

					if transparency then
						menu.colorpicker.outline.size = _UDim2New(0, 194, 0, 208)
					else
						menu.colorpicker.outline.size = _UDim2New(0, 194, 0, 196)
					end

					menu.colorpicker.hueselection.visible = true
					menu.colorpicker.pickerselection.visible = true

					menu.colorpicker.transparencyoutline.visible = transparency ~= nil and true or false
					menu.colorpicker.transparencyselection.visible = transparency ~= nil and true or false

					menu.colorpicker.hueselection.position = _UDim2New(0, -2, 0, _MathAbs(1 - oldhue) * menu.colorpicker.hue.absolutesize.y) + _UDim2New(0, menu.colorpicker.hue.absoluteposition.x, 0, menu.colorpicker.hue.absoluteposition.y)
					menu.colorpicker.pickerselection.position = _UDim2New(0, oldsat * menu.colorpicker.picker.absolutesize.x, 0, _MathAbs(oldval - 1) * menu.colorpicker.picker.absolutesize.y) + _UDim2New(0, menu.colorpicker.picker.absoluteposition.x, 0, menu.colorpicker.picker.absoluteposition.y)

					menu.colorpicker.transparencypicker.position = menu.colorpicker.transparencypicker.position
					menu.colorpicker.transparencycontainer.position = menu.colorpicker.transparencycontainer.position

					if transparency then
						menu.colorpicker.transparencyselection.position = _UDim2New(0, transparency * menu.colorpicker.transparencypicker.absolutesize.x, 0, -1) + _UDim2New(0, menu.colorpicker.transparencypicker.absoluteposition.x, 0, menu.colorpicker.transparencypicker.absoluteposition.y)
					end

					menu.colorpicker.focusedon = flag

					if transparency then
						menu.colorpicker.transparencyselection.position = _UDim2New(0, transparency * menu.colorpicker.transparencypicker.absolutesize.x, 0, -1) + _UDim2New(0, menu.colorpicker.transparencypicker.absoluteposition.x, 0, menu.colorpicker.transparencypicker.absoluteposition.y)
					end
					-- thing
					menu.colorpicker.outofboundscloseconnection = utilities.mouse.mousebutton1down:Connect(function()
						if utilities.mousechecks.inbounds(menu.colorpicker.outline, utilities.mouse.position) == false then -- uh oh..
							if menu.colorpicker.updater then
								menu.colorpicker.updater:Disconnect()
							end

							menu.colorpicker.outline.visible = false
							menu.colorpicker.transparencyselection.visible = false
							menu.colorpicker.hueselection.visible = false
							menu.colorpicker.pickerselection.visible = false
							menu.isacolorpickeropen = false

							if menu.colorpicker.outofboundscloseconnection then
								menu.colorpicker.outofboundscloseconnection:Disconnect()
								menu.colorpicker.outofboundscloseconnection = nil
							end
						end
					end)
				end
			else
				do
					local colorReference = {} -- would rather make 1 that moves around instead of do this for EVERY color picker, probably shouldve done this with dropdowns and what not but i got lazy

					colorReference.outline = DrawingFunction("frame", {
						parent = utilities.base,
						anchorpoint = _Vector2New(0, 0),
						size = _UDim2New(0, 194, 0, 208),
						position = _UDim2New(0, 100, 0, 100),
						zindex = menu.basezindex + 18 + 13,
						color = _Color3FromRGB(0, 0, 0),
						visible = false,
						thickness = 0,
						filled = true,
						name = "okay",
					})

					colorReference.container = DrawingFunction("frame", {
						parent = colorReference.outline,
						anchorpoint = _Vector2New(0.5, 0.5),
						size = _UDim2New(1, -2, 1, -2),
						position = _UDim2New(0.5, 0, 0.5, 0),
						zindex = menu.basezindex + 18 + 13,
						color = _Color3FromRGB(46, 46, 46),
						visible = true,
						thickness = 0,
						filled = true,
						name = "okay",
					})

					colorReference.title = DrawingFunction("text", {
						parent = colorReference.container,
						anchorpoint = _Vector2New(0, 0),
						size = 13, -- x3
						font = Drawing.Fonts.Plex,
						position = _UDim2New(0, 4, 0, 2),
						zindex = menu.basezindex + 19 + 13,
						color = _Color3FromRGB(255, 255, 255),
						visible = true,
						outline = false,
						outlinecolor = _Color3FromRGB(12, 12, 12),
						text = "Color Picker",
						name = "okay",
					})

					colorReference.pickeroutline = DrawingFunction("frame", {
						parent = colorReference.outline,
						anchorpoint = _Vector2New(0, 0),
						size = _UDim2New(0, 172, 0, 172),
						position = _UDim2New(0, 4, 0, 18),
						zindex = menu.basezindex + 18 + 13,
						color = _Color3FromRGB(0, 0, 0),
						visible = true,
						thickness = 0,
						filled = true,
						name = "okay",
					})

					colorReference.pickercontainer = DrawingFunction("frame", {
						parent = colorReference.pickeroutline,
						anchorpoint = _Vector2New(0.5, 0.5),
						size = _UDim2New(1, -2, 1, -2),
						position = _UDim2New(0.5, 0, 0.5, 0),
						zindex = menu.basezindex + 19 + 13,
						color = _Color3New(1, 0, 0),
						visible = true,
						thickness = 0,
						filled = true,
						name = "okay",
					})

					colorReference.picker = DrawingFunction("frame", {
						parent = colorReference.pickercontainer,
						anchorpoint = _Vector2New(0.5, 0.5),
						size = _UDim2New(1, 0, 1, 0),
						position = _UDim2New(0.5, 0, 0.5, 0),
						zindex = menu.basezindex + 20 + 13,
						transparency = 0,
						color = _Color3New(1, 1, 1),
						visible = true,
						activated = true,
						name = "okay",
					})
					menu.activations[1 + #menu.activations] = colorReference.picker

					do
						local parentedTo = colorReference.picker
						local smoothGradient = {}
						local xRes = 6
						local yRes = 6
						for xDim = 1, parentedTo.absolutesize.x / xRes do
							smoothGradient[xDim] = {}
							for yDim = 1, parentedTo.absolutesize.y / yRes do
								smoothGradient[xDim][yDim] = utilities:draw("frame", {
									parent = parentedTo,
									anchorpoint = _Vector2New(0, 0),
									size = _UDim2New(0, xRes, 0, yRes),
									position = _UDim2New(0, (xDim - 1) * xRes, 0, (yDim - 1) * yRes),
									zindex = parentedTo.zindex + 1,
									color = _Color3FromHSV(0, 0, 1 - ((yDim - 1) * yRes) / parentedTo.absolutesize.y),
									transparency = 1 - ((xDim - 1) * xRes) / parentedTo.absolutesize.x,
									visible = true,
									name = "okay",
								})
							end
						end
					end

					colorReference.pickerselection = DrawingFunction("frame", {
						parent = utilities.base,
						anchorpoint = _Vector2New(0, 0),
						size = _UDim2New(0, 1, 0, 1),
						position = _UDim2New(0, 0, 0, 0),
						zindex = menu.basezindex + 22 + 13,
						color = _Color3New(1, 1, 1),
						visible = false,
						thickness = 0,
						filled = true,
						name = "okay",
					})

					colorReference.pickerselectionoutline = DrawingFunction("frame", {
						parent = colorReference.pickerselection,
						anchorpoint = _Vector2New(0.5, 0.5),
						size = _UDim2New(1, 2, 1, 2),
						position = _UDim2New(0.5, 0, 0.5, 0),
						zindex = menu.basezindex + 21 + 13,
						color = _Color3FromRGB(0, 0, 0),
						visible = true,
						thickness = 0,
						filled = true,
						name = "okay",
					})

					colorReference.hueoutline = DrawingFunction("frame", {
						parent = colorReference.outline,
						anchorpoint = _Vector2New(0, 0),
						size = _UDim2New(0, 12, 0, 172),
						position = _UDim2New(0, 178, 0, 18),
						zindex = menu.basezindex + 18 + 13,
						color = _Color3FromRGB(0, 0, 0),
						visible = true,
						thickness = 0,
						filled = true,
						name = "okay",
					})

					colorReference.huecontainer = DrawingFunction("frame", {
						parent = colorReference.hueoutline,
						anchorpoint = _Vector2New(0.5, 0.5),
						size = _UDim2New(1, -2, 1, -2),
						position = _UDim2New(0.5, 0, 0.5, 0),
						zindex = menu.basezindex + 19 + 13,
						color = _Color3FromRGB(0, 0, 0),
						visible = true,
						thickness = 0,
						filled = true,
						name = "okay",
					})

					colorReference.hue = DrawingFunction("frame", {
						parent = colorReference.huecontainer,
						anchorpoint = _Vector2New(0.5, 0.5),
						size = _UDim2New(1, 0, 1, 0),
						position = _UDim2New(0.5, 0, 0.5, 0),
						zindex = menu.basezindex + 20 + 13,
						transparency = 0,
						visible = true,
						activated = true,
						name = "okay",
					})
					menu.activations[1 + #menu.activations] = colorReference.hue

					do
						local parentedTo = colorReference.hue
						local smoothGradient = {}
						local yRes = 6
						for yDim = 1, parentedTo.absolutesize.y / yRes do
							smoothGradient[yDim] = utilities:draw("frame", {
								parent = parentedTo,
								anchorpoint = _Vector2New(0, 0),
								size = _UDim2New(1, 0, 0, yRes),
								position = _UDim2New(0, 0, 0, (yDim - 1) * yRes),
								zindex = parentedTo.zindex + 1,
								color = _Color3FromHSV(1 - ((yDim - 1) * yRes) / parentedTo.absolutesize.y, 1, 1),
								visible = true,
								name = "okay",
							})
						end
					end

					colorReference.hueselection = DrawingFunction("frame", {
						parent = utilities.base,
						anchorpoint = _Vector2New(0, 0),
						size = _UDim2New(0, 14, 0, 2),
						position = _UDim2New(0, 0, 0, 0),
						zindex = menu.basezindex + 22 + 13,
						color = _Color3New(1, 1, 1),
						visible = false,
						thickness = 0,
						filled = true,
						name = "okay",
					})

					colorReference.hueselectionoutline = DrawingFunction("frame", {
						parent = colorReference.hueselection,
						anchorpoint = _Vector2New(0.5, 0.5),
						size = _UDim2New(1, 2, 1, 2),
						position = _UDim2New(0.5, 0, 0.5, 0),
						zindex = menu.basezindex + 21 + 13,
						color = _Color3FromRGB(0, 0, 0),
						visible = true,
						thickness = 0,
						filled = true,
						name = "okay",
					})

					colorReference.transparencyoutline = DrawingFunction("frame", {
						parent = colorReference.outline,
						anchorpoint = _Vector2New(0, 0),
						size = _UDim2New(0, 172, 0, 12),
						position = _UDim2New(0, 4, 0, 192),
						zindex = menu.basezindex + 18 + 13,
						color = _Color3FromRGB(0, 0, 0),
						visible = true,
						thickness = 0,
						filled = true,
						name = "okay",
					})

					colorReference.transparencycontainer = DrawingFunction("frame", {
						parent = colorReference.transparencyoutline,
						anchorpoint = _Vector2New(0.5, 0.5),
						size = _UDim2New(1, 0, 1, 0),
						position = _UDim2New(0.5, 0, 0.5, 0),
						zindex = menu.basezindex + 19 + 13,
						color = _Color3New(1, 1, 1),
						visible = true,
						thickness = 0,
						filled = true,
						name = "okay",
					})

					colorReference.transparencypicker = DrawingFunction("frame", {
						parent = colorReference.transparencycontainer,
						anchorpoint = _Vector2New(0.5, 0.5),
						size = _UDim2New(1, 0, 1, 0),
						position = _UDim2New(0.5, 0, 0.5, 0),
						zindex = menu.basezindex + 20 + 13,
						transparency = 0,
						visible = true,
						activated = true,
						name = "okay",
					})
					menu.activations[1 + #menu.activations] = colorReference.transparencypicker

					do
						local parentedTo = colorReference.transparencypicker
						local smoothGradient = {}
						local xRes = 6
						for xDim = 1, parentedTo.absolutesize.x / xRes do
							smoothGradient[xDim] = utilities:draw("frame", {
								parent = parentedTo,
								anchorpoint = _Vector2New(0, 0),
								size = _UDim2New(0, xRes, 1, 0),
								position = _UDim2New(0, (xDim - 1) * xRes, 0, 0),
								zindex = parentedTo.zindex + 1,
								color = _Color3FromHSV(0, 0, ((xDim - 1) * xRes) / parentedTo.absolutesize.x),
								visible = true,
								name = "okay",
							})                      
						end
					end

					colorReference.transparencyselection = DrawingFunction("frame", {
						parent = utilities.base,
						anchorpoint = _Vector2New(0, 0),
						size = _UDim2New(0, 2, 0, 14),
						position = _UDim2New(0, 0, 0, 0),
						zindex = menu.basezindex + 22 + 13,
						color = _Color3New(1, 1, 1),
						visible = false,
						thickness = 0,
						filled = true,
						name = "okay",
					})

					colorReference.transparencyselectionoutline = DrawingFunction("frame", {
						parent = colorReference.transparencyselection,
						anchorpoint = _Vector2New(0.5, 0.5),
						size = _UDim2New(1, 2, 1, 2),
						position = _UDim2New(0.5, 0, 0.5, 0),
						zindex = menu.basezindex + 21 + 13,
						color = _Color3FromRGB(0, 0, 0),
						visible = true,
						thickness = 0,
						filled = true,
						name = "okay",
					})

					colorReference.outline.visible = false

					colorReference.focusedon = nil

					-- how 2 pick color
					colorReference.picker.clicked:Connect(function()
						local oldhue = _MathAbs(1 - (_MathClamp(colorReference.hueselection.absoluteposition.y, colorReference.hue.absoluteposition.y, colorReference.hue.absoluteposition.y + colorReference.hue.absolutesize.y) - colorReference.picker.absoluteposition.y) / colorReference.picker.absolutesize.y)

						local xpos = _MathClamp(utilities.mouse.position.x, colorReference.picker.absoluteposition.x, colorReference.picker.absoluteposition.x + colorReference.picker.absolutesize.x)
						local ypos = _MathClamp(utilities.mouse.position.y, colorReference.picker.absoluteposition.y, colorReference.picker.absoluteposition.y + colorReference.picker.absolutesize.y)
						colorReference.pickerselection.position = _UDim2New(0, xpos, 0, ypos)
						-- quick maths

						local sat = _MathClamp((xpos - colorReference.picker.absoluteposition.x) / colorReference.picker.absolutesize.x, 0, 1)
						local val = _MathClamp(_MathAbs(1 - (ypos - colorReference.picker.absoluteposition.y) / colorReference.picker.absolutesize.y), 0, 1)

						colorReference.focusedon:setcolor(_Color3FromHSV(oldhue, sat, val))                            

						colorReference.updater = utilities.mouse.moved:Connect(function()
							local xpos = _MathClamp(utilities.mouse.position.x, colorReference.picker.absoluteposition.x, colorReference.picker.absoluteposition.x + colorReference.picker.absolutesize.x)
							local ypos = _MathClamp(utilities.mouse.position.y, colorReference.picker.absoluteposition.y, colorReference.picker.absoluteposition.y + colorReference.picker.absolutesize.y)
							colorReference.pickerselection.position = _UDim2New(0, xpos, 0, ypos)
							-- quick maths

							local sat = _MathClamp((xpos - colorReference.picker.absoluteposition.x) / colorReference.picker.absolutesize.x, 0, 1)
							local val = _MathClamp(_MathAbs(1 - (ypos - colorReference.picker.absoluteposition.y) / colorReference.picker.absolutesize.y), 0, 1)

							colorReference.focusedon:setcolor(_Color3FromHSV(oldhue, sat, val))
						end)
					end)

					colorReference.hue.clicked:Connect(function()
						local old = colorReference.focusedon.color
						local oldhue, oldsat, oldval = _Color3ToHSV(old)

						local xpos = _MathClamp(utilities.mouse.position.x, colorReference.hue.absoluteposition.x, colorReference.hue.absoluteposition.x + colorReference.hue.absolutesize.x)
						local ypos = _MathClamp(utilities.mouse.position.y, colorReference.hue.absoluteposition.y, colorReference.hue.absoluteposition.y + colorReference.hue.absolutesize.y)
						colorReference.hueselection.position = _UDim2New(0, colorReference.hue.absoluteposition.x - 2, 0, ypos)

						local hue = _MathAbs(1 - (ypos - colorReference.picker.absoluteposition.y) / colorReference.picker.absolutesize.y)

						colorReference.focusedon:setcolor(_Color3FromHSV(hue, oldsat, oldval))
						colorReference.pickercontainer.color = _Color3FromHSV(hue, 1, 1)

						colorReference.updater = utilities.mouse.moved:Connect(function()
							local xpos = _MathClamp(utilities.mouse.position.x, colorReference.hue.absoluteposition.x, colorReference.hue.absoluteposition.x + colorReference.hue.absolutesize.x)
							local ypos = _MathClamp(utilities.mouse.position.y, colorReference.hue.absoluteposition.y, colorReference.hue.absoluteposition.y + colorReference.hue.absolutesize.y)
							colorReference.hueselection.position = _UDim2New(0, colorReference.hue.absoluteposition.x - 2, 0, ypos)

							local hue = _MathAbs(1 - (ypos - colorReference.picker.absoluteposition.y) / colorReference.picker.absolutesize.y)

							colorReference.focusedon:setcolor(_Color3FromHSV(hue, oldsat, oldval))
							colorReference.pickercontainer.color = _Color3FromHSV(hue, 1, 1)
						end)
					end)

					colorReference.transparencypicker.clicked:Connect(function()
						local xpos = _MathClamp(utilities.mouse.position.x, colorReference.transparencypicker.absoluteposition.x, colorReference.transparencypicker.absoluteposition.x + colorReference.transparencypicker.absolutesize.x)
						local ypos = _MathClamp(utilities.mouse.position.y, colorReference.transparencypicker.absoluteposition.y, colorReference.transparencypicker.absoluteposition.y + colorReference.transparencypicker.absolutesize.y)
						colorReference.transparencyselection.position = _UDim2New(0, xpos, 0, colorReference.transparencypicker.absoluteposition.y - 1)

						local transparency = (xpos - colorReference.transparencypicker.absoluteposition.x) / colorReference.transparencypicker.absolutesize.x
						colorReference.focusedon:settransparency(transparency)                           
						colorReference.updater = utilities.mouse.moved:Connect(function()
							local xpos = _MathClamp(utilities.mouse.position.x, colorReference.transparencypicker.absoluteposition.x, colorReference.transparencypicker.absoluteposition.x + colorReference.transparencypicker.absolutesize.x)
							local ypos = _MathClamp(utilities.mouse.position.y, colorReference.transparencypicker.absoluteposition.y, colorReference.transparencypicker.absoluteposition.y + colorReference.transparencypicker.absolutesize.y)
							colorReference.transparencyselection.position = _UDim2New(0, xpos, 0, colorReference.transparencypicker.absoluteposition.y - 1)

							local transparency = (xpos - colorReference.transparencypicker.absoluteposition.x) / colorReference.transparencypicker.absolutesize.x
							colorReference.focusedon:settransparency(transparency)
						end)
					end)

					utilities.mouse.mousebutton1up:Connect(function()
						if colorReference.updater then 
							colorReference.updater:Disconnect()
						end
					end)

					function menu:oldcallcolorpicker(name, flag, position, transparency)
						if not flag then return end
						local old = flag.color
						local oldhue, oldsat, oldval = _Color3ToHSV(old)

						colorReference.outline.visible = true
						colorReference.outline.position = _UDim2New(0, position.x, 0, position.y)
						colorReference.title.text = name
						colorReference.pickercontainer.color = _Color3FromHSV(oldhue, 1, 1)

						if transparency then
							colorReference.outline.size = _UDim2New(0, 194, 0, 208)
						else
							colorReference.outline.size = _UDim2New(0, 194, 0, 196)
						end

						colorReference.hueselection.visible = true
						colorReference.pickerselection.visible = true

						colorReference.transparencyoutline.visible = transparency ~= nil and true or false
						colorReference.transparencyselection.visible = transparency ~= nil and true or false

						colorReference.hueselection.position = _UDim2New(0, -2, 0, _MathAbs(1 - oldhue) * colorReference.hue.absolutesize.y) + _UDim2New(0, colorReference.hue.absoluteposition.x, 0, colorReference.hue.absoluteposition.y)
						colorReference.pickerselection.position = _UDim2New(0, oldsat * colorReference.picker.absolutesize.x, 0, _MathAbs(oldval - 1) * colorReference.picker.absolutesize.y) + _UDim2New(0, colorReference.picker.absoluteposition.x, 0, colorReference.picker.absoluteposition.y)

						colorReference.transparencypicker.position = colorReference.transparencypicker.position
						colorReference.transparencycontainer.position = colorReference.transparencycontainer.position

						if transparency then
							colorReference.transparencyselection.position = _UDim2New(0, transparency * colorReference.transparencypicker.absolutesize.x, 0, -1) + _UDim2New(0, colorReference.transparencypicker.absoluteposition.x, 0, colorReference.transparencypicker.absoluteposition.y)
						end

						colorReference.focusedon = flag

						if transparency then
							colorReference.transparencyselection.position = _UDim2New(0, transparency * colorReference.transparencypicker.absolutesize.x, 0, -1) + _UDim2New(0, colorReference.transparencypicker.absoluteposition.x, 0, colorReference.transparencypicker.absoluteposition.y)
						end
						-- thing
						colorReference.outofboundscloseconnection = utilities.mouse.mousebutton1down:Connect(function()
							if utilities.mousechecks.inbounds(colorReference.outline, utilities.mouse.position) == false then -- uh oh..
								if colorReference.updater then
									colorReference.updater:Disconnect()
								end

								colorReference.outline.visible = false
								colorReference.transparencyselection.visible = false
								colorReference.hueselection.visible = false
								colorReference.pickerselection.visible = false

								if colorReference.outofboundscloseconnection then
									colorReference.outofboundscloseconnection:Disconnect()
									colorReference.outofboundscloseconnection = nil
								end
							end
						end)
					end
					menu.oldcolorpicker = colorReference
				end


				menu.colorpicker = {} -- would rather make 1 that moves around instead of do this for EVERY color picker, probably shouldve done this with dropdowns and what not but i got lazy

				menu.colorpicker.proportions = {
					mainSize = {x = 240, y = 240},
					secondaryBarWidth = 14,
				}

				menu.colorpicker.outline = DrawingFunction("frame", {
					parent = utilities.base,
					anchorpoint = _Vector2New(0, 0),
					size = _UDim2New(0, menu.colorpicker.proportions.mainSize.x, 0, menu.colorpicker.proportions.mainSize.y),
					position = _UDim2New(0, 100, 0, 100),
					zindex = menu.basezindex + 18,
					color = _Color3FromRGB(0, 0, 0),
					visible = false,
					thickness = 0,
					filled = true,
					name = "okay",
				})

				menu.colorpicker.title = DrawingFunction("text", {
					parent = menu.colorpicker.outline,
					anchorpoint = _Vector2New(0, 0),
					size = 13, -- x3
					font = Drawing.Fonts.Plex,
					position = _UDim2New(0, 4, 0, 2),
					zindex = menu.basezindex + 21,
					color = _Color3FromRGB(255, 255, 255),
					visible = true,
					outline = false,
					outlinecolor = _Color3FromRGB(12, 12, 12),
					text = "Color Picker",
					name = "okay",
				})

				menu.colorpicker.titleBack = DrawingFunction("frame", {
					parent = menu.colorpicker.outline,
					anchorpoint = _Vector2New(0, 0),
					size = _UDim2New(1, 0, 0, 18),
					position = _UDim2New(0, 0, 0, 0),
					zindex = menu.basezindex + 19,
					color = _Color3FromRGB(0, 0, 0),
					visible = true,
					thickness = 0,
					filled = true,
					name = "okay",
				})

				menu.colorpicker.titleFront = DrawingFunction("frame", {
					parent = menu.colorpicker.titleBack,
					anchorpoint = _Vector2New(0.5, 0.5),
					size = _UDim2New(1, -2, 1, -2),
					position = _UDim2New(0.5, 0, 0.5, 0),
					zindex = menu.basezindex + 20,
					color = _Color3FromRGB(46, 46, 46),
					visible = true,
					thickness = 0,
					filled = true,
					name = "okay",
				})

				menu.colorpicker.secondTabBack = DrawingFunction("frame", {
					parent = menu.colorpicker.outline,
					anchorpoint = _Vector2New(1, 0),
					size = _UDim2New(0, 68, 0, 18),
					position = _UDim2New(1, 0, 0, 0),
					zindex = menu.basezindex + 21,
					color = _Color3FromRGB(0, 0, 0),
					visible = true,
					thickness = 0,
					filled = true,
					activated = true,
					name = "okay",
				})

				menu.colorpicker.secondTabFront = DrawingFunction("frame", {
					parent = menu.colorpicker.secondTabBack,
					anchorpoint = _Vector2New(0.5, 0.5),
					size = _UDim2New(1, -2, 1, -2),
					position = _UDim2New(0.5, 0, 0.5, 0),
					zindex = menu.basezindex + 22,
					color = _Color3FromRGB(46, 46, 46),
					visible = true,
					thickness = 0,
					filled = true,
					name = "okay",
				})

				menu.colorpicker.secondTabTitle = DrawingFunction("text", {
					parent = menu.colorpicker.secondTabFront,
					anchorpoint = _Vector2New(0, 0),
					size = 13, -- x3
					font = Drawing.Fonts.Plex,
					position = _UDim2New(0, 2, 0, 1),
					zindex = menu.basezindex + 23,
					color = _Color3FromRGB(255, 255, 255),
					visible = true,
					outline = false,
					outlinecolor = _Color3FromRGB(12, 12, 12),
					text = "animation",
					name = "okay",
				})

				menu.colorpicker.firstTabBack = DrawingFunction("frame", {
					parent = menu.colorpicker.outline,
					anchorpoint = _Vector2New(1, 0),
					size = _UDim2New(0, 40, 0, 18),
					position = _UDim2New(1, -menu.colorpicker.secondTabBack.absolutesize.x + 1, 0, 0),
					zindex = menu.basezindex + 21,
					color = _Color3FromRGB(0, 0, 0),
					visible = true,
					thickness = 0,
					activated = true,
					filled = true,
					name = "okay",
				})

				menu.colorpicker.firstTabFront = DrawingFunction("frame", {
					parent = menu.colorpicker.firstTabBack,
					anchorpoint = _Vector2New(0.5, 0.5),
					size = _UDim2New(1, -2, 1, -2),
					position = _UDim2New(0.5, 0, 0.5, 0),
					zindex = menu.basezindex + 22,
					color = _Color3FromRGB(46, 46, 46),
					visible = true,
					thickness = 0,
					filled = true,
					name = "okay",
				})

				menu.colorpicker.firstTabTitle = DrawingFunction("text", {
					parent = menu.colorpicker.firstTabFront,
					anchorpoint = _Vector2New(0, 0),
					size = 13, -- x3
					font = Drawing.Fonts.Plex,
					position = _UDim2New(0, 2, 0, 1),
					zindex = menu.basezindex + 23,
					color = _Color3FromRGB(255, 255, 255),
					visible = true,
					outline = false,
					outlinecolor = _Color3FromRGB(12, 12, 12),
					text = "color",
					name = "okay",
				})

				menu.colorpicker.container = DrawingFunction("frame", {
					parent = menu.colorpicker.outline,
					anchorpoint = _Vector2New(0.5, 0.5),
					size = _UDim2New(1, -2, 1, -2),
					position = _UDim2New(0.5, 0, 0.5, 0),
					zindex = menu.basezindex + 18,
					color = _Color3FromRGB(46, 46, 46),
					visible = true,
					thickness = 0,
					filled = true,
					name = "okay",
				})

				menu.colorpicker.pickeroutline = DrawingFunction("frame", {
					parent = menu.colorpicker.container,
					anchorpoint = _Vector2New(0, 0),
					size = _UDim2New(0, 212, 0, 212),
					position = _UDim2New(0, 4, 0, 22),
					zindex = menu.basezindex + 18,
					color = _Color3FromRGB(0, 0, 0),
					visible = true,
					thickness = 0,
					filled = true,
					name = "okay",
				})

				menu.colorpicker.pickercontainer = DrawingFunction("frame", {
					parent = menu.colorpicker.pickeroutline,
					anchorpoint = _Vector2New(0.5, 0.5),
					size = _UDim2New(1, -2, 1, -2),
					position = _UDim2New(0.5, 0, 0.5, 0),
					zindex = menu.basezindex + 19,
					color = _Color3New(1, 0, 0),
					visible = true,
					thickness = 0,
					filled = true,
					name = "okay",
				})

				menu.colorpicker.picker = DrawingFunction("frame", {
					parent = menu.colorpicker.pickercontainer,
					anchorpoint = _Vector2New(0.5, 0.5),
					size = _UDim2New(1, 0, 1, 0),
					position = _UDim2New(0.5, 0, 0.5, 0),
					zindex = menu.basezindex + 20,
					transparency = 0,
					color = _Color3New(1, 1, 1),
					visible = true,
					activated = true,
					name = "okay",
				})
				menu.activations[1 + #menu.activations] = menu.colorpicker.picker

				do
					local parentedTo = menu.colorpicker.picker
					local smoothGradient = {}
					local xRes = 6
					local yRes = 6
					for xDim = 1, parentedTo.absolutesize.x / xRes do
						smoothGradient[xDim] = {}
						for yDim = 1, parentedTo.absolutesize.y / yRes do
							smoothGradient[xDim][yDim] = utilities:draw("frame", {
								parent = parentedTo,
								anchorpoint = _Vector2New(0, 0),
								size = _UDim2New(0, xRes, 0, yRes),
								position = _UDim2New(0, (xDim - 1) * xRes, 0, (yDim - 1) * yRes),
								zindex = parentedTo.zindex + 1,
								color = _Color3FromHSV(0, 0, 1 - ((yDim - 1) * yRes) / parentedTo.absolutesize.y),
								transparency = 1 - ((xDim - 1) * xRes) / parentedTo.absolutesize.x,
								visible = true,
								name = "okay",
							})
						end
					end
				end


				menu.colorpicker.pickerselection = DrawingFunction("frame", {
					parent = utilities.base,
					anchorpoint = _Vector2New(0, 0),
					size = _UDim2New(0, 1, 0, 1),
					position = _UDim2New(0, 0, 0, 0),
					zindex = menu.basezindex + 22,
					color = _Color3New(1, 1, 1),
					visible = false,
					thickness = 0,
					filled = true,
					name = "okay",
				})

				menu.colorpicker.pickerselectionoutline = DrawingFunction("frame", {
					parent = menu.colorpicker.pickerselection,
					anchorpoint = _Vector2New(0.5, 0.5),
					size = _UDim2New(1, 2, 1, 2),
					position = _UDim2New(0.5, 0, 0.5, 0),
					zindex = menu.basezindex + 21,
					color = _Color3FromRGB(0, 0, 0),
					visible = true,
					thickness = 0,
					filled = true,
					name = "okay",
				})

				menu.colorpicker.hueoutline = DrawingFunction("frame", {
					parent = menu.colorpicker.pickeroutline,
					anchorpoint = _Vector2New(0, 0.5),
					size = _UDim2New(0, menu.colorpicker.proportions.secondaryBarWidth, 1, 0),
					position = _UDim2New(1, 4, 0.5, 0),
					zindex = menu.basezindex + 18,
					color = _Color3FromRGB(0, 0, 0),
					visible = true,
					thickness = 0,
					filled = true,
					name = "okay",
				})

				menu.colorpicker.huecontainer = DrawingFunction("frame", {
					parent = menu.colorpicker.hueoutline,
					anchorpoint = _Vector2New(0.5, 0.5),
					size = _UDim2New(1, -2, 1, -2),
					position = _UDim2New(0.5, 0, 0.5, 0),
					zindex = menu.basezindex + 19,
					color = _Color3FromRGB(0, 0, 0),
					visible = true,
					thickness = 0,
					filled = true,
					name = "okay",
				})

				menu.colorpicker.hue = DrawingFunction("frame", {
					parent = menu.colorpicker.huecontainer,
					anchorpoint = _Vector2New(0.5, 0.5),
					size = _UDim2New(1, 0, 1, 0),
					position = _UDim2New(0.5, 0, 0.5, 0),
					zindex = menu.basezindex + 20,
					transparency = 0,
					visible = true,
					activated = true,
					name = "okay",
				})
				menu.activations[1 + #menu.activations] = menu.colorpicker.hue

				do
					local parentedTo = menu.colorpicker.hue
					local smoothGradient = {}
					local yRes = 6
					for yDim = 1, parentedTo.absolutesize.y / yRes do
						smoothGradient[yDim] = utilities:draw("frame", {
							parent = parentedTo,
							anchorpoint = _Vector2New(0, 0),
							size = _UDim2New(1, 0, 0, yRes),
							position = _UDim2New(0, 0, 0, (yDim - 1) * yRes),
							zindex = parentedTo.zindex + 1,
							color = _Color3FromHSV(1 - ((yDim - 1) * yRes) / parentedTo.absolutesize.y, 1, 1),
							visible = true,
							name = "okay",
						})
					end
				end

				menu.colorpicker.hueselection = DrawingFunction("frame", {
					parent = utilities.base,
					anchorpoint = _Vector2New(0, 0),
					size = _UDim2New(0, menu.colorpicker.proportions.secondaryBarWidth + 2, 0, 2),
					position = _UDim2New(0, 0, 0, 0),
					zindex = menu.basezindex + 22,
					color = _Color3New(1, 1, 1),
					visible = false,
					thickness = 0,
					filled = true,
					name = "okay",
				})

				menu.colorpicker.hueselectionoutline = DrawingFunction("frame", {
					parent = menu.colorpicker.hueselection,
					anchorpoint = _Vector2New(0.5, 0.5),
					size = _UDim2New(1, 2, 1, 2),
					position = _UDim2New(0.5, 0, 0.5, 0),
					zindex = menu.basezindex + 21,
					color = _Color3FromRGB(0, 0, 0),
					visible = true,
					thickness = 0,
					filled = true,
					name = "okay",
				})

				menu.colorpicker.transparencyoutline = DrawingFunction("frame", {
					parent = menu.colorpicker.pickeroutline,
					anchorpoint = _Vector2New(0.5, 0),
					size = _UDim2New(1, 0, 0, menu.colorpicker.proportions.secondaryBarWidth),
					position = _UDim2New(0.5, 0, 1, 4),
					zindex = menu.basezindex + 18,
					color = _Color3FromRGB(0, 0, 0),
					visible = true,
					thickness = 0,
					filled = true,
					name = "okay",
				})

				menu.colorpicker.transparencycontainer = DrawingFunction("frame", {
					parent = menu.colorpicker.transparencyoutline,
					anchorpoint = _Vector2New(0.5, 0.5),
					size = _UDim2New(1, -2, 1, -2),
					position = _UDim2New(0.5, 0, 0.5, 0),
					zindex = menu.basezindex + 19,
					color = _Color3New(1, 1, 1),
					visible = true,
					thickness = 0,
					filled = true,
					name = "okay",
				})

				menu.colorpicker.transparencypicker = DrawingFunction("frame", {
					parent = menu.colorpicker.transparencycontainer,
					anchorpoint = _Vector2New(0.5, 0.5),
					size = _UDim2New(1, 0, 1, 0),
					position = _UDim2New(0.5, 0, 0.5, 0),
					zindex = menu.basezindex + 20,
					transparency = 0,
					visible = true,
					activated = true,
					name = "okay",
				})
				menu.activations[1 + #menu.activations] = menu.colorpicker.transparencypicker

				do
					local parentedTo = menu.colorpicker.transparencypicker
					local smoothGradient = {}
					local xRes = 6
					for xDim = 1, parentedTo.absolutesize.x / xRes do
						smoothGradient[xDim] = utilities:draw("frame", {
							parent = parentedTo,
							anchorpoint = _Vector2New(0, 0),
							size = _UDim2New(0, xRes, 1, 0),
							position = _UDim2New(0, (xDim - 1) * xRes, 0, 0),
							zindex = parentedTo.zindex + 1,
							color = _Color3FromHSV(0, 0, ((xDim - 1) * xRes) / parentedTo.absolutesize.x),
							visible = true,
							name = "okay",
						})                      
					end
				end

				menu.colorpicker.transparencyselection = DrawingFunction("frame", {
					parent = utilities.base,
					anchorpoint = _Vector2New(0, 0),
					size = _UDim2New(0, 2, 0, menu.colorpicker.proportions.secondaryBarWidth + 2),
					position = _UDim2New(0, 0, 0, 0),
					zindex = menu.basezindex + 22,
					color = _Color3New(1, 1, 1),
					visible = false,
					thickness = 0,
					filled = true,
					name = "okay",
				})

				menu.colorpicker.transparencyselectionoutline = DrawingFunction("frame", {
					parent = menu.colorpicker.transparencyselection,
					anchorpoint = _Vector2New(0.5, 0.5),
					size = _UDim2New(1, 2, 1, 2),
					position = _UDim2New(0.5, 0, 0.5, 0),
					zindex = menu.basezindex + 21,
					color = _Color3FromRGB(0, 0, 0),
					visible = true,
					thickness = 0,
					filled = true,
					name = "okay",
				})
				menu.colorpicker.outline.visible = false

				menu.colorpicker.focusedon = nil

				-- animation tab fuckin thingy (FUCK CREAM)
				menu.colorpicker.secondContainer = DrawingFunction("frame", {
					parent = menu.colorpicker.outline,
					anchorpoint = _Vector2New(0.5, 0.5),
					size = _UDim2New(1, -2, 1, -2),
					position = _UDim2New(0.5, 0, 0.5, 0),
					zindex = menu.basezindex + 18,
					color = _Color3FromRGB(46, 46, 46),
					visible = true,
					thickness = 0,
					filled = true,
					name = "okay",
				})

				-- fuck me dead :c
				menu.colorpicker.animationSelection = {}
				menu.colorpicker.fakeDropdown = nil
				menu.colorpicker.fakeDropdownFlag = nil
				menu.colorpicker.fakeVals = {{"none", true}, {"rainbow", false}, {"linear", false}, {"oscillating", false}, {"sawtooth", false}, {"strobe", false}}
				do
					local targetsection = menu.colorpicker.secondContainer
					local name = "animation"
					local multichoice = false

					local this = {}
					this.dropdownopened = false
					this.valuecontainer = {}
					this.textrecord = {}

					local myflag = menu.colorpicker.animationSelection
					myflag.__index = myflag
					myflag.type = "dropdown"
					myflag.name = name
					myflag.value = {}
					myflag.changed = utilities.signal.new()

					for i, v in next, (menu.colorpicker.fakeVals) do
						local name = v[1]
						local state = v[2]
						myflag.value[name] = state
					end

					this.holder = DrawingFunction("frame", { -- for getting the bounds of the thing
						parent = targetsection,
						anchorpoint = _Vector2New(0, 0),
						size = _UDim2New(1, 0, 0, 24), -- WHAT THE FUCL<K>!?#?!#?!@?#!?#?!@?#$!@?H$???
						position = _UDim2New(0, 0, 0, 12),
						zindex = menu.basezindex + 19,
						color = _Color3FromRGB(255, 255, 255),
						visible = true,
						thickness = 0,
						filled = true,
						transparency = 0,
						name = "okay",
					})

					this.title = DrawingFunction("text", {
						parent = this.holder,
						anchorpoint = _Vector2New(0, 0),
						size = 13, -- x3
						font = Drawing.Fonts.Plex,
						position = _UDim2New(0, 16, 0, 8),
						zindex = menu.basezindex + 20,
						color = _Color3FromRGB(255, 255, 255),
						visible = true,
						outline = false,
						outlinecolor = _Color3FromRGB(12, 12, 12),
						text = name,
						name = "okay",
					})

					this.selection = DrawingFunction("frame", { -- for getting the bounds of the thing
						parent = this.holder,
						anchorpoint = _Vector2New(0.5, 0),
						size = _UDim2New(1, -30, 0, 16),
						position = _UDim2New(0.5, 0, 0, 24),
						zindex = menu.basezindex + 20,
						color = menucolors.c,
						visible = true,
						thickness = 0,
						filled = true,
						name = "okay",
					})

					this.selectiontext = DrawingFunction("text", {
						parent = this.selection,
						anchorpoint = _Vector2New(0, 0.5),
						size = 13, -- x3
						font = Drawing.Fonts.Plex,
						position = _UDim2New(0, 2, 0.5, -1),
						zindex = menu.basezindex + 21,
						color = _Color3FromRGB(255, 255, 255),
						visible = true,
						outline = false,
						outlinecolor = _Color3FromRGB(12, 12, 12),
						text = "",
						name = "okay",
					})

					this.icon = DrawingFunction("frame", { -- for getting the bounds of the thing
						parent = this.selection,
						anchorpoint = _Vector2New(0.5, 0.5),
						size = _UDim2New(1, 2, 1, 2),
						position = _UDim2New(0.5, 0, 0.5, 0),
						zindex = menu.basezindex + 20,
						color = menucolors.c,
						visible = true,
						thickness = 0,
						filled = true,
						transparency = 0,
						activated = true,
						name = "okay",
					})
					menu.activations[1 + #menu.activations] = this.icon

					this.icontext = DrawingFunction("text", {
						parent = this.icon,
						anchorpoint = _Vector2New(0, 0.5),
						size = 13, -- x3
						font = Drawing.Fonts.Plex,
						position = _UDim2New(1, -10, 0.5, -2),
						zindex = menu.basezindex + 21,
						color = _Color3FromRGB(255, 255, 255),
						visible = true,
						outline = false,
						outlinecolor = _Color3FromRGB(12, 12, 12),
						text = "+",
						name = "okay",
					})

					this.selectionoutline = DrawingFunction("frame", { -- for getting the bounds of the thing
						parent = this.selection,
						anchorpoint = _Vector2New(0.5, 0.5),
						size = _UDim2New(1, 2, 1, 2),
						position = _UDim2New(0.5, 0, 0.5, 0),
						zindex = menu.basezindex + 19,
						color = menucolors.d,
						visible = true,
						thickness = 1,
						filled = false,
						name = "okay",
					})

					local maximumchars = _MathFloor(this.selection.absolutesize.x / 6.5) - 4 -- suck

					function myflag:setvalue(new)
						myflag.value = new
						local selected = ""
						local selections = 0
						for idx, vals in next, (this.valuecontainer) do
							local i = vals.value
							local v = myflag.value[i]
							if not v then
								myflag.value[i] = false
							end
							if v then
								if selections > 0 then
									selected = selected .. ", "
								end
								selected = selected .. i
								selections = selections + 1
								this.textrecord[i].color = menu.accent
							else
								this.textrecord[i].color = _Color3New(255, 255, 255)
							end
						end
						selected = _StringSub(selected, 0, maximumchars)
						if selections == 0 then
							this.selectiontext.text = "none"
						else
							this.selectiontext.text = selected
						end 
						myflag.changed:Fire()

						-- ok so when this shit updates, update the flag thats focused
						if menu.colorpicker.focusedon and menu.colorpicker.focusedon.setAnimation then
							menu.colorpicker.focusedon:setAnimation(new)
						end
					end

					for val, v in next, (menu.colorpicker.fakeVals) do
						local temporary = {}
						local val = v[1] -- so that its in order
						temporary.value = val
						temporary.selectionoutline = DrawingFunction("frame", { -- for getting the bounds of the thing
							parent = this.selection,
							anchorpoint = _Vector2New(0.5, 0),
							size = _UDim2New(1, 2, 0, 22),
							position = _UDim2New(0.5, 0, 0, ((1 + #this.valuecontainer) * 20) -2),
							zindex = menu.basezindex + 27,
							color = menucolors.d,
							visible = false,
							thickness = 0,
							filled = true,
							name = "okay",
						})
						temporary.selection = DrawingFunction("frame", { -- for getting the bounds of the thing
							parent = temporary.selectionoutline,
							anchorpoint = _Vector2New(0.5, 0.5),
							size = _UDim2New(1, -2, 1, -2),
							position = _UDim2New(0.5, 0, 0.5, 0),
							zindex = menu.basezindex + 28,
							color = menucolors.c,
							visible = true,
							thickness = 0,
							filled = true,
							activated = true,
							name = "okay",
						})
						menu.activations[1 + #menu.activations] = temporary.selection
						temporary.selectiontext = DrawingFunction("text", {
							parent = temporary.selection,
							anchorpoint = _Vector2New(0, 0.5),
							size = 13, -- x3
							font = Drawing.Fonts.Plex,
							position = _UDim2New(0, 2, 0.5, 0),
							zindex = menu.basezindex + 29,
							color = _Color3FromRGB(255, 255, 255),
							visible = true,
							outline = false,
							outlinecolor = _Color3FromRGB(12, 12, 12),
							text = val,
							name = "okay",
						})
						this.textrecord[val] = temporary.selectiontext
						temporary.selection.clicked:Connect(function()
							if menu.uiopen == false then return end
							for i, v in next, (myflag.value) do
								myflag.value[i] = (val == i) -- suck my nutz
							end
							myflag:setvalue(myflag.value)
						end)
						this.valuecontainer[1 + #this.valuecontainer] = temporary
					end

					this.icon.clicked:Connect(function()
						if menu.uiopen == false then return end
						this.dropdownopened = not this.dropdownopened
						this.icontext.text = (this.dropdownopened == true) and "-" or "+"
						menu.isadropdownopen = this.dropdownopened
						for i, v in next, (this.valuecontainer) do
							v.selectionoutline.visible = this.dropdownopened
							v.selectionoutline.position = v.selectionoutline.position
							v.selectionoutline.size = v.selectionoutline.size
							if v.value and myflag.value[v.value] then
								local val = myflag.value[v.value]
								this.textrecord[v.value].color = (val == true) and menu.accent or _Color3FromRGB(255, 255, 255)
							end
						end
					end)

					local vals = {}
					for i, v in next, (menu.colorpicker.fakeVals) do
						local name = v[1]
						local state = v[2]
						vals[name] = state
					end

					myflag:setvalue(vals)
					menu.colorpicker.fakeDropdown = this
					menu.colorpicker.fakeDropdownFlag = myflag
				end

				menu.colorpicker.animationPanels = {}
				-- switch out the panels based on what is selected
				local first = true
				for i, v in next, menu.colorpicker.fakeVals do
					local name = v[1]
					local state = v[2]

					menu.colorpicker.animationPanels[name] = {}
					menu.colorpicker.animationPanels[name].offset = 54
					menu.colorpicker.animationPanels[name].panel = DrawingFunction("frame", {
						parent = menu.colorpicker.secondContainer,
						anchorpoint = _Vector2New(0, 0),
						size = _UDim2New(1, 0, 1, 0),
						position = _UDim2New(0, 0, 0, 0),
						zindex = menu.basezindex + 18,
						color = _Color3FromRGB(0, 0, 0),
						visible = false,
						transparency = 0, -- hide it
						thickness = 0,
						filled = true,
						name = "okay",
					})

					if first then
						menu.colorpicker.animationPanels[name].panel.visible = true
						first = false
					end

					menu.colorpicker.animationSelection.changed:Connect(function()
						for i2, v2 in next, menu.colorpicker.animationSelection.value do
							if name == i2 then
								menu.colorpicker.animationPanels[name].panel.visible = v2
								menu.colorpicker.animationPanels[name].panel.position = menu.colorpicker.animationPanels[name].panel.position + _UDim2New(0, 1, 0, 1)
								menu.colorpicker.animationPanels[name].panel.position = menu.colorpicker.animationPanels[name].panel.position - _UDim2New(0, 1, 0, 1)
							end
						end
					end)
				end
				menu.colorpicker.animationPanelElements = {
					none = {},
					rainbow = {
						{
							type = "slider",
							name = "speed",
							max = 1000,
							min = 1,
							suffix = "%"
						}
					},
					linear = {
						{
							type = "color",
							name = "keyframe 1"
						},
						{
							type = "color",
							name = "keyframe 2"
						},
						{
							type = "slider",
							name = "speed",
							max = 1000,
							min = 1,
							suffix = "%"
						}
					},
					oscillating = {
						{
							type = "color",
							name = "keyframe 1"
						},
						{
							type = "color",
							name = "keyframe 2"
						},
						{
							type = "slider",
							name = "speed",
							max = 1000,
							min = 1,
							suffix = "%"
						}
					},
					sawtooth = {
						{
							type = "color",
							name = "keyframe 1"
						},
						{
							type = "color",
							name = "keyframe 2"
						},
						{
							type = "slider",
							name = "speed",
							max = 1000,
							min = 1,
							suffix = "%"
						}
					},
					strobe = {
						{
							type = "color",
							name = "keyframe 1"
						},
						{
							type = "color",
							name = "keyframe 2"
						},
						{
							type = "slider",
							name = "speed",
							max = 1000,
							min = 1,
							suffix = "%"
						}
					}
				}
				menu.colorpicker.elementReference = {}
				menu.colorpicker.flagReference = {}
				for name, elements in next, menu.colorpicker.animationPanelElements do

					menu.colorpicker.elementReference[name] = {}
					menu.colorpicker.flagReference[name] = {}
					local sectionReference = menu.colorpicker.elementReference[name]

					local section = menu.colorpicker.animationPanels[name]
					local targetsection = section.panel
					local currentOffset = section.offset

					for i, data in next, elements do
						menu.colorpicker.elementReference[name][data.name] = {}

						local fakeFlag = {}

						if data.type == "slider" then
							local flag = fakeFlag
							local minimum = data.min
							local maximum = data.max
							local suffix = data.suffix ~= nil and data.suffix or ""
							local customtext = {}

							local this = {}
							local offset = currentOffset - 10
							local myflag = fakeFlag -- mypenis

							myflag.__index = fakeFlag
							myflag.type = "slider"
							myflag.value = data.min
							myflag.changed = utilities.signal.new()

							this.holder = DrawingFunction("frame", { -- for getting the bounds of the thing
								parent = targetsection,
								anchorpoint = _Vector2New(0, 0),
								size = _UDim2New(1, 0, 0, 24),
								position = _UDim2New(0, 0, 0, offset),
								zindex = menu.basezindex + 6 + 12,
								color = _Color3FromRGB(255, 255, 255),
								visible = true,
								thickness = 0,
								filled = true,
								transparency = 0,
								name = "okay",
							})

							targetsection.getpropertychangedsignal:Connect(function(prop, val)
								if prop == "visible" then
									this.holder.position = _UDim2New(0, 0, 0, offset)
								end
							end)

							this.title = DrawingFunction("text", {
								parent = this.holder,
								anchorpoint = _Vector2New(0, 0),
								size = 13, -- x3
								font = Drawing.Fonts.Plex,
								position = _UDim2New(0, 16, 0, 8),
								zindex = menu.basezindex + 7 + 12,
								color = parameters.detected and _Color3FromRGB(255, 106, 79) or _Color3FromRGB(255, 255, 255),
								visible = true,
								outline = false,
								outlinecolor = _Color3FromRGB(12, 12, 12),
								text = data.name,
								name = "okay",
							})

							this.sliderback = DrawingFunction("frame", { -- for getting the bounds of the thing
								parent = this.holder,
								anchorpoint = _Vector2New(0, 0),
								size = _UDim2New(1, -32, 0, 6),
								position = _UDim2New(0, 16, 0, 24),
								zindex = menu.basezindex + 7 + 12,
								color = menucolors.b,
								visible = true,
								thickness = 0,
								filled = true,
								name = "okay",
							})

							this.sliderbackoutline = DrawingFunction("frame", { -- for getting the bounds of the thing
								parent = this.sliderback,
								anchorpoint = _Vector2New(0.5, 0.5),
								size = _UDim2New(1, 2, 1, 2),
								position = _UDim2New(0.5, 0, 0.5, 0),
								zindex = menu.basezindex + 6 + 12,
								color = menucolors.d,
								visible = true,
								thickness = 1,
								filled = false,
								name = "okay",
							})

							this.slider = {}
							for i = 1, 6 do
								this.slider[i] = DrawingFunction("frame", { -- for getting the bounds of the thing
									parent = this.sliderback,
									anchorpoint = _Vector2New(0, 0),
									size = _UDim2New(0, 6, 0, 1),
									position = _UDim2New(0, 0, 0, i),
									zindex = menu.basezindex + 9 + 12,
									color = menu.accent:lerp(_Color3FromRGB(_MathClamp((menu.accent.r * 255) - 5, 0, 255), _MathClamp((menu.accent.g * 255) - 5, 0, 255), _MathClamp((menu.accent.b * 255) - 5, 0, 255)), (i - 1) / 5),
									visible = true,
									thickness = 0,
									filled = true,
									name = "okay",
								})
							end

							menu.accents[1 + #menu.accents] = this.slider

							this.hitbox = DrawingFunction("frame", { -- for getting the bounds of the thing
								parent = this.sliderback,
								anchorpoint = _Vector2New(0.5, 0.5),
								size = _UDim2New(1, 0, 1, 10),
								position = _UDim2New(0.5, 0, 0.5, 0),
								zindex = menu.basezindex + 7 + 12,
								color = _Color3FromRGB(255, 255, 255),
								visible = true,
								thickness = 0,
								transparency = 0,
								activated = true,
								filled = true,
								name = "okay",
							})
							menu.activations[1 + #menu.activations] = this.hitbox

							this.valuetitle = DrawingFunction("text", {
								parent = this.sliderback,
								anchorpoint = _Vector2New(0.5, 0),
								size = 13, -- x3
								font = Drawing.Fonts.Plex,
								position = _UDim2New(1, 0, 0, 0),
								zindex = menu.basezindex + 9 + 12,
								color = _Color3FromRGB(255, 255, 255),
								visible = true,
								outline = false,
								outlinecolor = _Color3FromRGB(12, 12, 12),
								text = "0°",
								name = "okay",
							})

							this.addtext = DrawingFunction("text", {
								parent = this.sliderback,
								anchorpoint = _Vector2New(1, 0.5),
								size = 13, -- x3
								font = Drawing.Fonts.Plex,
								position = _UDim2New(1, 10, 0.5, -2),
								zindex = menu.basezindex + 9 + 12,
								color = _Color3FromRGB(255, 255, 255),
								visible = true,
								outline = false,
								outlinecolor = _Color3FromRGB(12, 12, 12),
								activated = true,
								text = "+",
								name = "okay",
							})

							this.subtext = DrawingFunction("text", {
								parent = this.sliderback,
								anchorpoint = _Vector2New(0, 0.5),
								size = 13, -- x3
								font = Drawing.Fonts.Plex,
								position = _UDim2New(0, -10, 0.5, -2),
								zindex = menu.basezindex + 9 + 12,
								color = _Color3FromRGB(255, 255, 255),
								visible = true,
								outline = false,
								outlinecolor = _Color3FromRGB(12, 12, 12),
								text = "-",
								activated = true,
								name = "okay",
							})

							local textupdateconnection -- so u can click on the value text and manually enter a number
							function myflag:setvalue(new)
								if new == nil then
									new = 0
								end
								local newtext = _tostring(new)
								if textupdateconnection then -- we r typing
									newtext = newtext .. "|"
								else
									new = _MathClamp(new, minimum, maximum)
								end
								newtext = _tostring(new)
								if customtext[newtext] then
									this.valuetitle.text = customtext[newtext]
								else
									this.valuetitle.text = newtext .. suffix
								end
								for i, v in next, this.slider do
									v.position = _UDim2New((((_MathClamp(new, minimum, maximum) - minimum)) / (maximum - minimum)), 0, 0, i - 1) -- s3x
									local tostart = v.absoluteposition.x - this.sliderback.absoluteposition.x
									local scalederrr = -tostart / this.sliderback.absolutesize.x
									v.size = _UDim2New(scalederrr, 0, 0, 1)
								end
								this.valuetitle.position = this.slider[#this.slider].position + _UDim2New(0, 0, 0, 0)
								myflag.value = new
								myflag.changed:Fire()

								if menu.colorpicker.focusedon then
									menu.colorpicker.focusedon.animationSpeed[name] = new
								end
							end

							local connection
							this.hitbox.clicked:Connect(function()
								if menu.uiopen == false or menu.isadropdownopen then return end
								connection = RunService.Stepped:Connect(function()
									local relative = utilities.mouse.position.x
									local mousebound = utilities.mouse.position.x - this.hitbox.absoluteposition.x - 1
									mousebound = _MathClamp(mousebound, 0, this.hitbox.absolutesize.x)
									local result = mousebound
									result = _MathClamp(result, 0, this.hitbox.absolutesize.x)
									result = _MathFloor(0.5 + (((maximum - minimum) / this.hitbox.absolutesize.x) * mousebound) + minimum)
									myflag:setvalue(result)
									if this.hitbox.holding == false or menu.uiopen == false then
										connection:Disconnect()
										connection = nil
										return
									end
								end)
							end)

							this.addtext.mouseenter:Connect(function()
								this.addtext.color = menu.accent
							end)

							this.addtext.mouseleave:Connect(function()
								this.addtext.color = _Color3FromRGB(255, 255, 255)
							end)

							this.subtext.mouseenter:Connect(function()
								this.subtext.color = menu.accent
							end)

							this.subtext.mouseleave:Connect(function()
								this.subtext.color = _Color3FromRGB(255, 255, 255)
							end)

							this.addtext.clicked:Connect(function()
								myflag:setvalue(myflag.value + 1)
							end)

							this.subtext.clicked:Connect(function()
								myflag:setvalue(myflag.value - 1)
							end)

							myflag:setvalue(parameters.value)

							this.offsetted = currentOffset

							currentOffset = currentOffset + 36

							sectionReference[name] = this
						elseif data.type == "color" then
							local this = {}
							local dn = {}
							local myflag = dn

							currentOffset = currentOffset

							myflag.__index = dn
							myflag.type = "toggle"
							myflag.value = false
							myflag.changed = utilities.signal.new()

							this.hitbox = DrawingFunction("frame", { -- for getting the bounds of the thing
								parent = targetsection,
								anchorpoint = _Vector2New(0, 0),
								size = _UDim2New(1, 0, 0, 14),
								position = _UDim2New(0, 0, 0, currentOffset),
								zindex = menu.basezindex + 6 + 12,
								color = _Color3FromRGB(255, 255, 255),
								visible = true,
								thickness = 0,
								filled = true,
								transparency = 0,
								name = "okay",
							})

							this.toggle = DrawingFunction("frame", { -- for getting the bounds of the thing
								parent = this.hitbox,
								anchorpoint = _Vector2New(0, 0.5),
								size = _UDim2New(0, 8, 0, 8),
								position = _UDim2New(0, 8, 0.5, 0),
								zindex = menu.basezindex + 7 + 12,
								color = _Color3FromRGB(76, 76, 76),
								visible = false,
								thickness = 0,
								filled = true,
								name = "okay",
							})

							this.toggleoutline = DrawingFunction("frame", { -- for getting the bounds of the thing
								parent = this.toggle,
								anchorpoint = _Vector2New(0.5, 0.5),
								size = _UDim2New(1, 2, 1, 2),
								position = _UDim2New(0.5, 0, 0.5, 0),
								zindex = menu.basezindex + 6 + 12,
								color = _Color3FromRGB(0, 0, 0),
								visible = false,
								thickness = 1,
								filled = false,
								name = "okay",
							})

							this.toggled = DrawingFunction("frame", { -- for getting the bounds of the thing
								parent = this.toggle,
								anchorpoint = _Vector2New(0, 0),
								size = _UDim2New(1, 0, 1, 0),
								position = _UDim2New(0, 0, 0, 0),
								zindex = menu.basezindex + 7 + 12,
								color = menu.accent,
								visible = false,
								thickness = 0,
								filled = true,
								name = "okay",
							})

							this.title = DrawingFunction("text", {
								parent = this.hitbox,
								anchorpoint = _Vector2New(0, 0.5),
								size = 13, -- x3
								font = Drawing.Fonts.Plex,
								position = _UDim2New(0, 16, 0.5, -1),
								zindex = menu.basezindex + 6 + 12,   
								color = parameters.detected and _Color3FromRGB(255, 106, 79) or _Color3FromRGB(255, 255, 255),
								visible = true,
								outline = false,
								outlinecolor = _Color3FromRGB(12, 12, 12),
								text = data.name,
								name = "okay",
							})

							this.realhitbox = DrawingFunction("frame", { -- for getting the bounds of the thing
								parent = this.hitbox,
								anchorpoint = _Vector2New(0, 0.5),
								size = _UDim2New(0, 32 + this.title.absolutesize.x, 1, 0),
								position = _UDim2New(0, 0, 0.5, 0),
								zindex = menu.basezindex + 8 + 12,
								color = _Color3FromRGB(255, 255, 255),
								visible = true,
								thickness = 0,
								filled = true,
								transparency = 0,
								name = "okay",
							})

							this.accessories = {} -- color pickers and what not

							currentOffset = currentOffset + 14

							do
								local parameters = {
									name = data.name,
									flag = fakeFlag,
									color = _Color3New(1, 1, 1),
									transparency = 0
								}
								local targetobj = this
								if not targetobj.accessories then
									return
								end
								local flag = parameters.flag
								local colorThis = {}

								local myflag = fakeFlag
								myflag.__index = fakeFlag
								myflag.type = "color"
								myflag.color = parameters.color
								myflag.transparency = parameters.transparency
								myflag.changed = utilities.signal.new()

								colorThis.outline = DrawingFunction("frame", { -- for getting the bounds of the thing
									parent = this.hitbox,
									anchorpoint = _Vector2New(1, 0.5),
									size = _UDim2New(0, 24, 0, 12),
									position = _UDim2New(1, -14, 0.5, 0),
									zindex = menu.basezindex + 8 + 12,
									color = _Color3FromRGB(12, 12, 12),
									visible = true,
									thickness = 0,
									activated = true,
									filled = true,
									name = "okay",
								})

								colorThis.color = {}
								for i = 1, 5 do
									colorThis.color[i] = DrawingFunction("frame", { -- for getting the bounds of the thing
										parent = colorThis.outline,
										anchorpoint = _Vector2New(0.5, 0),
										size = _UDim2New(1, -2, 0, 2),
										position = _UDim2New(0.5, 0, 0, (i - 1) * 2 + 1),
										zindex = menu.basezindex + 10 + 12,
										color = parameters.color:lerp(_Color3FromRGB(_MathClamp(parameters.color.r * 255 - 33, 0, 255), _MathClamp(parameters.color.g * 255 - 33, 0, 255), _MathClamp(parameters.color.b * 255 - 33, 0, 255)), i / 5),
										visible = true,
										thickness = 0,
										filled = true,
										name = "okay",
									}) 
								end

								function myflag:setcolor(new)
									myflag.color = new
									for i = 1, 5 do
										local segment = colorThis.color[i]
										segment.color = new:lerp(_Color3FromRGB(_MathClamp(new.r * 255 - 20, 0, 255), _MathClamp(new.g * 255 - 20, 0, 255), _MathClamp(new.b * 255 - 20, 0, 255)), (i - 1) / 5)
									end
									myflag.changed:Fire()

									if menu.colorpicker.focusedon then
										menu.colorpicker.focusedon.animationKeyFrames[name][data.name].color = new
									end
								end

								function myflag:settransparency(new)
									myflag.transparency = new
									myflag.changed:Fire()

									if menu.colorpicker.focusedon then
										menu.colorpicker.focusedon.animationKeyFrames[name][data.name].transparency = new
									end
								end

								myflag:setcolor(parameters.color)
								if myflag.transparency then
									myflag:settransparency(parameters.transparency)
								end

								colorThis.outline.clicked:Connect(function()
									if menu.uiopen == false or menu.isadropdownopen then return end
									menu:oldcallcolorpicker(data.name, fakeFlag, utilities.mouse.position, menu.colorpicker.focusedon.transparency and fakeFlag.transparency or nil)
								end)

								colorThis.bounds = _Vector2New(28, 0)

								colorThis.outline.visible = true

								sectionReference[data.name] = colorThis
							end
						end

						menu.colorpicker.flagReference[name][data.name] = fakeFlag
					end
				end

				menu.colorpicker.firstTabBack.clicked:Connect(function()
					if not menu.colorpicker.focusedon then return end
					menu.colorpicker.container.visible = true
					menu.colorpicker.secondContainer.visible = false

					local transparency = menu.colorpicker.focusedon.transparency
					if transparency then
						menu.colorpicker.transparencyoutline.visible = true
						menu.colorpicker.transparencyselection.visible = true
						menu.colorpicker.transparencyoutline.position = menu.colorpicker.transparencyoutline.position
						menu.colorpicker.transparencyselection.position = _UDim2New(0, transparency * menu.colorpicker.transparencypicker.absolutesize.x, 0, -2) + _UDim2New(0, menu.colorpicker.transparencypicker.absoluteposition.x, 0, menu.colorpicker.transparencypicker.absoluteposition.y)
					else
						menu.colorpicker.transparencyoutline.visible = false
						menu.colorpicker.transparencyselection.visible = false
					end

					menu.colorpicker.hueselection.visible = true
					menu.colorpicker.pickerselection.visible = true

					menu.colorpicker.firstTabFront.color = _Color3New(0, 0, 0)
					menu.colorpicker.secondTabFront.color = _Color3FromRGB(46, 46, 46)
				end)

				menu.colorpicker.secondTabBack.clicked:Connect(function()
					if not menu.colorpicker.focusedon then return end
					menu.colorpicker.container.visible = false
					menu.colorpicker.secondContainer.visible = true
					menu.colorpicker.secondContainer.position = menu.colorpicker.secondContainer.position + _UDim2New(0, -1, 0, 0)
					menu.colorpicker.secondContainer.position = menu.colorpicker.secondContainer.position + _UDim2New(0, 1, 0, 0)

					menu.colorpicker.transparencyselection.visible = false

					menu.colorpicker.hueselection.visible = false
					menu.colorpicker.pickerselection.visible = false

					menu.colorpicker.firstTabFront.color = _Color3FromRGB(46, 46, 46)
					menu.colorpicker.secondTabFront.color = _Color3New(0, 0, 0)

					menu.colorpicker.fakeDropdown.holder.position = _UDim2New(0, 0, 0, 12)

					for i, v in next,  menu.colorpicker.animationPanels do
						v.panel.position = v.panel.position + _UDim2New(0, 0, 0, 1)
						v.panel.position = v.panel.position - _UDim2New(0, 0, 0, 1)
					end
				end)

				-- how 2 pick color
				menu.colorpicker.picker.clicked:Connect(function()
					local oldhue = _MathAbs(1 - (_MathClamp(menu.colorpicker.hueselection.absoluteposition.y, menu.colorpicker.hue.absoluteposition.y, menu.colorpicker.hue.absoluteposition.y + menu.colorpicker.hue.absolutesize.y) - menu.colorpicker.picker.absoluteposition.y) / menu.colorpicker.picker.absolutesize.y)

					local xpos = _MathClamp(utilities.mouse.position.x, menu.colorpicker.picker.absoluteposition.x, menu.colorpicker.picker.absoluteposition.x + menu.colorpicker.picker.absolutesize.x)
					local ypos = _MathClamp(utilities.mouse.position.y, menu.colorpicker.picker.absoluteposition.y, menu.colorpicker.picker.absoluteposition.y + menu.colorpicker.picker.absolutesize.y)
					menu.colorpicker.pickerselection.position = _UDim2New(0, xpos, 0, ypos)
					-- quick maths

					local sat = _MathClamp((xpos - menu.colorpicker.picker.absoluteposition.x) / menu.colorpicker.picker.absolutesize.x, 0, 1)
					local val = _MathClamp(_MathAbs(1 - (ypos - menu.colorpicker.picker.absoluteposition.y) / menu.colorpicker.picker.absolutesize.y), 0, 1)

					menu.colorpicker.focusedon:setcolor(_Color3FromHSV(oldhue, sat, val))  

					menu.colorpicker.updater = utilities.mouse.moved:Connect(function()
						local xpos = _MathClamp(utilities.mouse.position.x, menu.colorpicker.picker.absoluteposition.x, menu.colorpicker.picker.absoluteposition.x + menu.colorpicker.picker.absolutesize.x)
						local ypos = _MathClamp(utilities.mouse.position.y, menu.colorpicker.picker.absoluteposition.y, menu.colorpicker.picker.absoluteposition.y + menu.colorpicker.picker.absolutesize.y)
						menu.colorpicker.pickerselection.position = _UDim2New(0, xpos, 0, ypos)
						-- quick maths

						local sat = _MathClamp((xpos - menu.colorpicker.picker.absoluteposition.x) / menu.colorpicker.picker.absolutesize.x, 0, 1)
						local val = _MathClamp(_MathAbs(1 - (ypos - menu.colorpicker.picker.absoluteposition.y) / menu.colorpicker.picker.absolutesize.y), 0, 1)

						menu.colorpicker.focusedon:setcolor(_Color3FromHSV(oldhue, sat, val))
					end)
				end)

				menu.colorpicker.hue.clicked:Connect(function()
					local old = menu.colorpicker.focusedon.color
					local oldhue, oldsat, oldval = _Color3ToHSV(old)

					local xpos = _MathClamp(utilities.mouse.position.x, menu.colorpicker.hue.absoluteposition.x, menu.colorpicker.hue.absoluteposition.x + menu.colorpicker.hue.absolutesize.x)
					local ypos = _MathClamp(utilities.mouse.position.y, menu.colorpicker.hue.absoluteposition.y, menu.colorpicker.hue.absoluteposition.y + menu.colorpicker.hue.absolutesize.y)
					menu.colorpicker.hueselection.position = _UDim2New(0, menu.colorpicker.hue.absoluteposition.x - 2, 0, ypos)

					local hue = _MathAbs(1 - (ypos - menu.colorpicker.picker.absoluteposition.y) / menu.colorpicker.picker.absolutesize.y)

					menu.colorpicker.focusedon:setcolor(_Color3FromHSV(hue, oldsat, oldval))
					menu.colorpicker.pickercontainer.color = _Color3FromHSV(hue, 1, 1)

					menu.colorpicker.updater = utilities.mouse.moved:Connect(function()
						local xpos = _MathClamp(utilities.mouse.position.x, menu.colorpicker.hue.absoluteposition.x, menu.colorpicker.hue.absoluteposition.x + menu.colorpicker.hue.absolutesize.x)
						local ypos = _MathClamp(utilities.mouse.position.y, menu.colorpicker.hue.absoluteposition.y, menu.colorpicker.hue.absoluteposition.y + menu.colorpicker.hue.absolutesize.y)
						menu.colorpicker.hueselection.position = _UDim2New(0, menu.colorpicker.hue.absoluteposition.x - 2, 0, ypos)

						local hue = _MathAbs(1 - (ypos - menu.colorpicker.picker.absoluteposition.y) / menu.colorpicker.picker.absolutesize.y)

						menu.colorpicker.focusedon:setcolor(_Color3FromHSV(hue, oldsat, oldval))
						menu.colorpicker.pickercontainer.color = _Color3FromHSV(hue, 1, 1)
					end)
				end)

				menu.colorpicker.transparencypicker.clicked:Connect(function()
					local xpos = _MathClamp(utilities.mouse.position.x, menu.colorpicker.transparencypicker.absoluteposition.x, menu.colorpicker.transparencypicker.absoluteposition.x + menu.colorpicker.transparencypicker.absolutesize.x)
					local ypos = _MathClamp(utilities.mouse.position.y, menu.colorpicker.transparencypicker.absoluteposition.y, menu.colorpicker.transparencypicker.absoluteposition.y + menu.colorpicker.transparencypicker.absolutesize.y)
					menu.colorpicker.transparencyselection.position = _UDim2New(0, xpos, 0, menu.colorpicker.transparencypicker.absoluteposition.y - 2)

					local transparency = (xpos - menu.colorpicker.transparencypicker.absoluteposition.x) / menu.colorpicker.transparencypicker.absolutesize.x
					menu.colorpicker.focusedon:settransparency(transparency)

					menu.colorpicker.updater = utilities.mouse.moved:Connect(function()
						local xpos = _MathClamp(utilities.mouse.position.x, menu.colorpicker.transparencypicker.absoluteposition.x, menu.colorpicker.transparencypicker.absoluteposition.x + menu.colorpicker.transparencypicker.absolutesize.x)
						local ypos = _MathClamp(utilities.mouse.position.y, menu.colorpicker.transparencypicker.absoluteposition.y, menu.colorpicker.transparencypicker.absoluteposition.y + menu.colorpicker.transparencypicker.absolutesize.y)
						menu.colorpicker.transparencyselection.position = _UDim2New(0, xpos, 0, menu.colorpicker.transparencypicker.absoluteposition.y - 2)

						local transparency = (xpos - menu.colorpicker.transparencypicker.absoluteposition.x) / menu.colorpicker.transparencypicker.absolutesize.x
						menu.colorpicker.focusedon:settransparency(transparency)
					end)
				end)

				utilities.mouse.mousebutton1up:Connect(function()
					if menu.colorpicker.updater then 
						menu.colorpicker.updater:Disconnect()
					end
				end)

				function menu:callcolorpicker(name, flag, position, transparency)
					if not flag then return end
					local old = flag.color
					local oldhue, oldsat, oldval = _Color3ToHSV(old)

					menu.colorpicker.container.visible = true
					menu.colorpicker.secondContainer.visible = false
					menu.colorpicker.transparencyselection.visible = true
					menu.colorpicker.hueselection.visible = true
					menu.colorpicker.pickerselection.visible = true

					menu.colorpicker.firstTabFront.color = _Color3New(0, 0, 0)
					menu.colorpicker.secondTabFront.color = _Color3FromRGB(46, 46, 46)

					menu.colorpicker.outline.visible = true
					menu.isacolorpickeropen = true
					menu.colorpicker.outline.position = _UDim2New(0, position.x, 0, position.y)
					menu.colorpicker.title.text = name
					menu.colorpicker.pickercontainer.color = _Color3FromHSV(oldhue, 1, 1)

					if transparency then
						menu.colorpicker.outline.size = _UDim2New(0, menu.colorpicker.proportions.mainSize.x, 0, menu.colorpicker.proportions.mainSize.y + menu.colorpicker.proportions.secondaryBarWidth + 2)
					else
						menu.colorpicker.outline.size = _UDim2New(0, menu.colorpicker.proportions.mainSize.x, 0, menu.colorpicker.proportions.mainSize.y)
					end

					menu.colorpicker.hueselection.visible = true
					menu.colorpicker.pickerselection.visible = true

					menu.colorpicker.transparencyoutline.visible = transparency ~= nil and true or false
					menu.colorpicker.transparencyselection.visible = transparency ~= nil and true or false

					menu.colorpicker.hueselection.position = _UDim2New(0, -2, 0, _MathAbs(1 - oldhue) * menu.colorpicker.hue.absolutesize.y) + _UDim2New(0, menu.colorpicker.hue.absoluteposition.x, 0, menu.colorpicker.hue.absoluteposition.y)
					menu.colorpicker.pickerselection.position = _UDim2New(0, oldsat * menu.colorpicker.picker.absolutesize.x, 0, _MathAbs(oldval - 1) * menu.colorpicker.picker.absolutesize.y) + _UDim2New(0, menu.colorpicker.picker.absoluteposition.x, 0, menu.colorpicker.picker.absoluteposition.y)

					menu.colorpicker.focusedon = flag

					if transparency then
						menu.colorpicker.transparencyoutline.position = menu.colorpicker.transparencyoutline.position
						menu.colorpicker.transparencyselection.position = _UDim2New(0, transparency * menu.colorpicker.transparencypicker.absolutesize.x, 0, -2) + _UDim2New(0, menu.colorpicker.transparencypicker.absoluteposition.x, 0, menu.colorpicker.transparencypicker.absoluteposition.y)
					end
					-- thing
					menu.colorpicker.outofboundscloseconnection = utilities.mouse.mousebutton1down:Connect(function()
						if utilities.mousechecks.inbounds(menu.oldcolorpicker.outline, utilities.mouse.position) == false and utilities.mousechecks.inbounds(menu.colorpicker.outline, utilities.mouse.position) == false then -- uh oh..
							if menu.colorpicker.updater then
								menu.colorpicker.updater:Disconnect()
							end

							menu.colorpicker.outline.visible = false
							menu.colorpicker.transparencyselection.visible = false
							menu.colorpicker.hueselection.visible = false
							menu.colorpicker.pickerselection.visible = false
							menu.isacolorpickeropen = false

							if menu.colorpicker.outofboundscloseconnection then
								menu.colorpicker.outofboundscloseconnection:Disconnect()
								menu.colorpicker.outofboundscloseconnection = nil
							end

							do
								local myflag = menu.colorpicker.animationSelection
								local this = menu.colorpicker.fakeDropdown
								this.dropdownopened = false
								this.icontext.text = (this.dropdownopened == true) and "-" or "+"
								menu.isadropdownopen = false
								for i, v in next, (this.valuecontainer) do
									v.selectionoutline.visible = this.dropdownopened
									v.selectionoutline.position = v.selectionoutline.position
									v.selectionoutline.size = v.selectionoutline.size
									if v.value and myflag.value[v.value] then
										local val = myflag.value[v.value]
										this.textrecord[v.value].color = (val == true) and menu.accent or _Color3FromRGB(255, 255, 255)
									end
								end
							end
						end
					end)

					-- animation section fix
					menu.colorpicker.fakeDropdownFlag:setvalue(flag.animation)

					-- keyframe fix
					for element, keyframes in next, flag.animationKeyFrames do
						for keyindex, data in next, keyframes do
							menu.colorpicker.flagReference[element][keyindex]:setcolor(data.color)
							if data.transparency then
								menu.colorpicker.flagReference[element][keyindex]:settransparency(data.transparency)
							end
						end
					end

					-- slider fix
					for element, value in next, flag.animationSpeed do
						menu.colorpicker.flagReference[element]["speed"]:setvalue(value)
					end
				end

				menu:callcolorpicker(
					"Evie <3", 
					{
						color = _Color3New(1, 1, 1),
						animation = {
							none = true,
							rainbow = false,
							linear = false,
							oscillating = false, 
							strobe = false
						},
						animationKeyFrames = {
							linear = {
								["keyframe 1"] = {
									color = _Color3New(),
									transparency = 1
								},
								["keyframe 2"] = {
									color = _Color3New(),
									transparency = 1
								}
							},
							oscillating = {
								["keyframe 1"] = {
									color = _Color3New(),
									transparency = 1
								},
								["keyframe 2"] = {
									color = _Color3New(),
									transparency = 1
								}
							},
							strobe = {
								["keyframe 1"] = {
									color = _Color3New(),
									transparency = 1
								},
								["keyframe 2"] = {
									color = _Color3New(),
									transparency = 1
								}
							},
						}, -- color and transparency
						animationSpeed = {
							rainbow = 100,
							linear = 100,
							oscillating = 100,
							strobe = 100
						},
					}, 
					_Vector2New(), 
					nil
				)
				do
					if menu.colorpicker.updater then
						menu.colorpicker.updater:Disconnect()
					end

					menu.colorpicker.outline.visible = false
					menu.colorpicker.transparencyselection.visible = false
					menu.colorpicker.hueselection.visible = false
					menu.colorpicker.pickerselection.visible = false
					menu.isacolorpickeropen = false

					if menu.colorpicker.outofboundscloseconnection then
						menu.colorpicker.outofboundscloseconnection:Disconnect()
						menu.colorpicker.outofboundscloseconnection = nil
					end

					do
						local myflag = menu.colorpicker.animationSelection
						local this = menu.colorpicker.fakeDropdown
						this.dropdownopened = false
						this.icontext.text = (this.dropdownopened == true) and "-" or "+"
						menu.isadropdownopen = false
						for i, v in next, (this.valuecontainer) do
							v.selectionoutline.visible = this.dropdownopened
							v.selectionoutline.position = v.selectionoutline.position
							v.selectionoutline.size = v.selectionoutline.size
							if v.value and myflag.value[v.value] then
								local val = myflag.value[v.value]
								this.textrecord[v.value].color = (val == true) and menu.accent or _Color3FromRGB(255, 255, 255)
							end
						end
					end
				end
			end
		end

		function menu:setsize(size)
			menu.objects.backborder.size = _UDim2New(0, _MathClamp(size.x, parameters.size.x, 1/0), 0, _MathClamp(size.y, parameters.size.y, 1/0))
		end

		function menu:savestate() -- configs!!
			local state = {}
			for i, v in next, (menu.flags) do
				if i:match("config") or i:match("playerlist") then -- ignore the configs!!
				else
					local kind = v.type
					if kind == "toggle" or kind == "slider" or kind == "textbox" then
						local val = {v.value}
						state[i] = {kind, val}
					elseif kind == "color" then
						local val = {v.color.r, v.color.g, v.color.b, v.transparency}
						local keyFrameFix = {}
						for n, kfs in next, v.animationKeyFrames do
							keyFrameFix[n] = {}
							for idx, d in next, kfs do
								keyFrameFix[n][idx] =  {d.color.r, d.color.g, d.color.b, d.transparency}
							end
						end
						local animations = {
							animation = v.animation,
							animationKeyFrames = keyFrameFix,
							speeds = v.animationSpeed
						}
						state[i] = {kind, {val, animations}}
					elseif kind == "dropdown" then
						local val = {}
						for i, v in next, (v.value) do
							val[i] = v
						end
						state[i] = {kind, val}
					elseif kind == "keybind" then
						local val = {v.key ~= "NONE" and v.key or "NONE", v.activation}
						state[i] = {kind, val}
					end
				end
			end
			state.menusize = {x = menu.objects.backborder.absolutesize.x, y = menu.objects.backborder.absolutesize.y}
			state.panelsize = {}
			for tab, columns in next, menu.subsections do
				if tab ~= "players" then
					state.panelsize[tab] = {}
					for column, panels in next, columns do
						for panel, data in next, panels do
							local sz = data.panelResize.getSize()
							local ps = data.panelReposition.getPosition()

							state.panelsize[tab][panel] = {
								size = {
									scalex = sz.X.Scale,
									scaley = sz.Y.Scale,
									offsetx = sz.X.Offset,
									offsety = sz.Y.Offset
								},
								position = {
									scalex = ps.X.Scale,
									scaley = ps.Y.Scale,
									offsetx = ps.X.Offset,
									offsety = ps.Y.Offset,
									side = data.panelReposition.getSide()
								}
							}
						end
					end
				end
			end

			return json.encode(state)
		end

		function menu:loadstate(state)
			local state = json.decode(state)
			for i, v in next, (state) do
				if i == "menusize" then
					menu:setsize(_Vector2New(v.x, v.y))
				elseif i == "panelsize" then
					for tab, columns in next, menu.subsections do
						if tab ~= "players" then
							for column, panels in next, columns do
								for panel, data in next, panels do
									if v[tab] and v[tab][panel] then
										local configData = v[tab][panel]
										local menuPanel = data
										if menuPanel then
											menuPanel.panelReposition.setSide(configData.position.side)
										end
									end
								end
							end
						end
					end
					for tab, columns in next, menu.subsections do
						if tab ~= "players" then
							for column, panels in next, columns do
								for panel, data in next, panels do
									if v[tab] and v[tab][panel] then
										local configData = v[tab][panel]
										local menuPanel = data
										if menuPanel then
											menuPanel.panelReposition.setPosition(_UDim2New(configData.position.scalex, configData.position.offsetx, configData.position.scaley, configData.position.offsety))
										end
									end
								end
							end
						end
					end
					for tab, columns in next, menu.subsections do
						if tab ~= "players" then
							for column, panels in next, columns do
								for panel, data in next, panels do
									if v[tab] and v[tab][panel] then
										local configData = v[tab][panel]
										local menuPanel = data
										if menuPanel then
											menuPanel.panelResize.setSize(_UDim2New(configData.size.scalex, configData.size.offsetx, configData.size.scaley, configData.size.offsety))
										end
									end
								end
							end
						end
					end
				else
					local ff = menu.flags[i]
					if ff then
						local kind = v[1]
						local value = v[2]
						if kind == "toggle" or kind == "slider" or kind == "textbox" then
							ff:setvalue(value[1])
						elseif kind == "dropdown" then
							ff:setvalue(value)
						elseif kind == "color" then
							ff:setcolor(_Color3New(value[1][1], value[1][2], value[1][3]))
							if value[1][4] then
								ff:settransparency(value[1][4])
							end
							local keyFrameFix = {}
							for n, kfs in next, value[2].animationKeyFrames do
								keyFrameFix[n] = {}
								for idx, d in next, kfs do
									keyFrameFix[n][idx] = {
										color = _Color3New(d[1], d[2], d[3]),
										transparency = d[4],
									}
								end
							end
							ff:setAnimation(value[2].animation)
							ff:setAnimationSpeed(value[2].speeds)
							ff:setAnimationKeyFrames(keyFrameFix)
						elseif kind == "keybind" then
							ff:setkey(value[1])
							ff:setactivation(value[2])
						end
					end                        
				end               
			end
		end

		menu.uiopen = true

		menu.animations = {}
		menu.targetrans = _Instancenew("NumberValue")
		menu.targetrans.Value = 1
		function menu:updatemenuanimations() -- thing
			for i, v in next, menu.animations do
				v:Disconnect()
			end
			table.clear(menu.animations)
			for i, v in next, (menu.openclose) do
				if v.transparency and v.transparency > 0 then
					if v.transparency == 1 then
						menu.animations[1 + #menu.animations] = menu.targetrans.Changed:Connect(function()
							v.Drawingobject.Transparency = menu.targetrans.Value
						end)
					else
						menu.animations[1 + #menu.animations] = menu.targetrans.Changed:Connect(function()
							v.Drawingobject.Transparency = v.transparency * menu.targetrans.Value
						end)
					end
				end
			end
		end

		menu.uiopen = false

		local openereses = TweenService:Create(menu.targetrans, _TweenInfonew(0.2, Enum.EasingStyle.Linear, Enum.EasingDirection.In), {Value = 1})
		local closeereses = TweenService:Create(menu.targetrans, _TweenInfonew(0.2, Enum.EasingStyle.Linear, Enum.EasingDirection.Out), {Value = 0})

		function menu:openui()
			menu.uiopen = true
			menu.objects.backborder.position = _UDim2New(0, menu.objects.backborder.absoluteposition.x, 0, menu.objects.backborder.absoluteposition.y) -- ez fix
			openereses:Play()
		end

		function menu:closeui()
			menu.uiopen = false

			do
				if menu.colorpicker.updater then
					menu.colorpicker.updater:Disconnect()
				end

				menu.colorpicker.outline.visible = false
				menu.colorpicker.transparencyselection.visible = false
				menu.colorpicker.hueselection.visible = false
				menu.colorpicker.pickerselection.visible = false
				menu.isacolorpickeropen = false

				if menu.colorpicker.outofboundscloseconnection then
					menu.colorpicker.outofboundscloseconnection:Disconnect()
					menu.colorpicker.outofboundscloseconnection = nil
				end

				do
					local myflag = menu.colorpicker.animationSelection
					local this = menu.colorpicker.fakeDropdown
					this.dropdownopened = false
					this.icontext.text = (this.dropdownopened == true) and "-" or "+"
					menu.isadropdownopen = false
					for i, v in next, (this.valuecontainer) do
						v.selectionoutline.visible = this.dropdownopened
						v.selectionoutline.position = v.selectionoutline.position
						v.selectionoutline.size = v.selectionoutline.size
						if v.value and myflag.value[v.value] then
							local val = myflag.value[v.value]
							this.textrecord[v.value].color = (val == true) and menu.accent or _Color3FromRGB(255, 255, 255)
						end
					end
				end
			end

			closeereses:Play()
		end

		menu:closeui()

		return menu
	end
	uilibrary = uilib
end

local ui
local uiflags
local cheat_path                        = "vaderhaxx paste"
local game_path                         = "cbro"
local config_path                       = "configurations"

local forcefieldanimations = {
    ["off"] = "rbxassetid://0",
    ["web"] = "rbxassetid://301464986",
    ["webbed"] = "rbxassetid://2179243880",
    ["scanning"] = "rbxassetid://5843010904",
	["pixelated"] = "rbxassetid://140652787",
    ["swirl"] = "rbxassetid://8133639623",
    ["checkerboard"] = "rbxassetid://5790215150",
    ["christmas"] = "rbxassetid://6853532738",
    ["player"] = "rbxassetid://4494641460",
    ["shield"] = "rbxassetid://361073795",
    ["dots"] = "rbxassetid://5830615971",
    ["bubbles"] = "rbxassetid://1461576423",
    ["matrix"] = "rbxassetid://10713189068",
    ["honeycomb"] = "rbxassetid://179898251",
    ["groove"] = "rbxassetid://10785404176",
    ["cloud"] = "rbxassetid://5176277457",
    ["sky"] = "rbxassetid://1494603972",
    ["smudge"] = "rbxassetid://6096634060",
    ["scrapes"] = "rbxassetid://6248583558",
    ["galaxy"] = "rbxassetid://1120738433",
    ["galaxies"] = "rbxassetid://5101923607",
    ["stars"] = "rbxassetid://598201818",
    ["rainbow"] = "rbxassetid://10037165803",
    ["wires"] = "rbxassetid://14127933",
    ["camo"] = "rbxassetid://3280937154",
    ["hexagon"] = "rbxassetid://6175083785",
    ["particles"] = "rbxassetid://1133822388",
    ["triangular"] = "rbxassetid://4504368932",
    ["wall"] = "rbxassetid://4271279"
}

local forcefieldAnimationsDropDown = {}
for i, v in next, (forcefieldanimations) do
	local okay = {i, i == "off" and true or false}
	forcefieldAnimationsDropDown[1 + #forcefieldAnimationsDropDown] = okay
end
local ScriptCacheFolder = _Instancenew("Folder", workspace)
ScriptCacheFolder.Name = "ScriptCacheFolder"

local ChrModels = game:GetObjects("rbxassetid://15837369190")[1]
local AllCharacters = {}
for i,v in pairs(_GetChildren(ChrModels)) do
    _TableInsert(AllCharacters, v.Name)
end
local RavenENV = {
	Utility = {},
	Cache = {
		Client = getsenv(_FindFirstChild(LocalPlayer, "PlayerGui").Client),
		HitModifiers = {
			["Head"] = 4,
			["FakeHead"] = 4,
			["HeadHB"] = 4,
			["UpperTorso"] = 1,
			["LowerTorso"] = 1.25,
			["LeftUpperArm"] = 1,
			["LeftLowerArm"] = 1,
			["LeftHand"] = 1,
			["RightUpperArm"] = 1,
			["RightLowerArm"] = 1,
			["RightHand"] = 1,
			["LeftUpperLeg"] = 0.75,
			["LeftLowerLeg"] = 0.75,
			["LeftFoot"] = 0.75,
			["RightUpperLeg"] = 0.75,
			["RightLowerLeg"] = 0.75,
			["RightFoot"] = 0.75,
			["ForwardTrack"] = 1,
			["BackTrack"] = 1,
		},
		hitgroups = {
			["Head"] = {"Head"},
			["Chest"] = {"UpperTorso"},
			["Pelvis"] = {"LowerTorso"},
			["Arms"] = {"LeftLowerArm", "RightLowerArm", "LeftUpperArm", "RightUpperArm"},
			["Legs"] = {"LeftLowerLeg", "LeftUpperLeg", "RightLowerLeg", "RightUpperLeg"},
			["Feet"] = {"LeftFoot", "RightFoot"}
		},
		TracerTextures = {        
			["None"] = "rbxassetid://0",
			["Lighting"] = "rbxassetid://7216850022",
			["Laser"] = "rbxassetid://7136858729",
			["Twisted Energy"] = "rbxassetid://7071778278",
			["Anime Lazer"] = "rbxassetid://17441065350",
			["Interstellar"] = "rbxassetid://128372145766358",
			["Arrow"] = "rbxassetid://1274378728",
			["Minecraft"] = "rbxassetid://152410036",
			["Alien Energy Ray"] = "rbxassetid://6091341618",
			["Energy Ray"] = "rbxassetid://13832105797",
			["Matrix"] = "rbxassetid://15097610754",
			["Cartoony Eletric"] = "rbxassetid://18722421816"
		},
		MaterialNames = (function()
			local tbl = {}
			for i, v in next, _Materials:GetEnumItems() do
				_TableInsert(tbl, v.Name)
			end
			return tbl
		end)(),
	},
	RageBot = {
		Target = {
			TargetPosition = nil,
			Origin = nil,
			TargetPlayer = nil,
			Damage = nil,
			DamageMultiplayer = nil,
			Hit = nil
		},
	},
	Visuals = {},
	Movement = {},
	AntiAim = {},
	Calculations = {},
	PlayerModule = {},
	Misc = {},
	Esp = {},
}

local RageBot = RavenENV.RageBot
local Cache = RavenENV.Cache
local AntiAim = RavenENV.AntiAim
local PlayerModule = RavenENV.PlayerModule
local Visuals = RavenENV.Visuals
local Utility = RavenENV.Utility
local Movement = RavenENV.Movement
local Misc = RavenENV.Misc
local Calculations = RavenENV.Calculations
local Esp = RavenENV.Esp


do
	do
		ui = uilibrary:start({
			size = _Vector2New(560, 740),
			name = "vaderhaxx paste",
			accent = _Color3FromRGB(255, 200, 69),
			colors = {
				a = _Color3FromRGB(0, 0, 0),
				b = _Color3FromRGB(56, 56, 56),
				c = _Color3FromRGB(46, 46, 46),
				d = _Color3FromRGB(12, 12, 12),
				e = _Color3FromRGB(21, 21, 21),
				f = _Color3FromRGB(84, 84, 84),
				g = _Color3FromRGB(54, 54, 54),
			},
			tabs = {
				"rage",
				"misc",
				"drawing",
				"visuals",
				"config",
			}
		})
		ui:createnotification({text = "initializing...", lifetime = 3, priority = 0})
	end

	do
		if not isfolder(cheat_path) then
			makefolder(cheat_path)
		end

		if not isfolder(cheat_path .. "/" .. game_path) then
			makefolder(cheat_path .. "/" .. game_path)
		end

		if not isfolder(cheat_path .. "/" .. game_path .. "/" .. config_path) then
			makefolder(cheat_path .. "/" .. game_path .. "/" .. config_path)
		end

		function ui.getconfigs()
			local Configs = {}
			local CfgFolder = cheat_path .. "/" .. game_path .. "/" .. config_path
			for i, v in next, (listfiles(CfgFolder)) do
				Configs[1 + #Configs] = {_StringSub(v, #CfgFolder + 2, 256):sub(0, -5), (#Configs == 0) and true or false}
			end
			return Configs
		end
	end
	do
		do
			ui:createsubsection({tab = "rage", name = "aimbot", length = 0.4, side = 1})
			ui:createsubsection({tab = "rage", name = "hack vs. hack", length = 0.6, side = 1})
			ui:createsubsection({tab = "rage", name = "anti aimbot", length = 1, side = 2})

			ui:createsubsection({tab = "misc", name = "movement", length = 0.3, side = 1})
			ui:createsubsection({tab = "misc", name = "another", length = 0.48, side = 1})
			ui:createsubsection({tab = "misc", name = "gun mods", length = 0.22, side = 1})
			ui:createsubsection({tab = "misc", name = "exploits", length = 0.34, side = 2})
			ui:createsubsection({tab = "misc", name = "camera", length = 0.66, side = 2})

			ui:createsubsection({tab = "drawing", name = "enemy", length = 0.65, side = 1})
			ui:createsubsection({tab = "drawing", name = "settings", length = 0.35, side = 1})
			ui:createsubsection({tab = "drawing", name = "team", length = 0.5, side = 2})
			ui:createsubsection({tab = "drawing", name = "crosshair", length = 0.5, side = 2})

			ui:createsubsection({tab = "visuals", name = "local chamses", length = 0.5, side = 1})
			ui:createsubsection({tab = "visuals", name = "other", length = 0.5, side = 1})
			ui:createsubsection({tab = "visuals", name = "atmosphere", length = 0.5, side = 2})
			ui:createsubsection({tab = "visuals", name = "tracers", length = 0.5, side = 2})

			ui:createsubsection({tab = "config", name = "other", length = 0.26, side = 1})
			ui:createsubsection({tab = "config", name = "ui", length = 0.48, side = 1})
			ui:createsubsection({tab = "config", name = "extra", length = 0.26, side = 1})
		end
		do -- rage
			-- aimbot
			ui:createtoggle({tab = "rage", subsection = "aimbot", name = "enabled", value = false, flag = "RageBot_Enabled"})
			ui:createkeybind({tab = "rage", subsection = "aimbot", object = "enabled", name = "ragebot key", flag = "RageBot_Enabled_Key", parentflag = "RageBot_Enabled", value = Enum.KeyCode.E})
			ui:createtoggle({tab = "rage", subsection = "aimbot", name = "auto wall", value = false, flag = "RageBot_AutoWall"})
			ui:createslider({tab = "rage", subsection = "aimbot", name = "maximum walls", suffix = "", flag = "RageBot_MaxWalls", value = 5, minimum = 1, maximum = 25, custom = {}, tooltip = ""})
			ui:createtoggle({tab = "rage", subsection = "aimbot", name = "prediction", value = false, flag = "RageBot_Prediction"})
			ui:createtoggle({tab = "rage", subsection = "aimbot", name = "shoot simulation", value = false, flag = "RageBot_FakeShoot"})
			ui:createslider({tab = "rage", subsection = "aimbot", name = "fov", suffix = "", flag = "RageBot_FOV", value = 50, minimum = 1, maximum = 180, custom = {["180"] = "ignore"}, tooltip = ""})
			ui:createslider({tab = "rage", subsection = "aimbot", name = "min damage", suffix = "", flag = "RageBot_MinDmg", value = 1, minimum = 1, maximum = 100, custom = {}, tooltip = ""})
			ui:createdropdown({tab = "rage", subsection = "aimbot", name = "target parts", flag = "RageBot_TargetParts", values = {{"Head", true}, {"Chest", true}, {"Pelvis", false}, {"Arms", false}, {"Legs", false}, {"Feet", false}}, multichoice = true, tooltip = ""})
			ui:createdropdown({tab = "rage", subsection = "aimbot", name = "origin", flag = "RageBot_Origins", values = {{"Camera", true}, {"Head", false}}, multichoice = false, tooltip = ""})
			ui:createtoggle({tab = "rage", subsection = "aimbot", name = "Arms at targets", value = false, flag = "RageBot_AtTargets"})
			ui:createtoggle({tab = "rage", subsection = "aimbot", name = "hit logs", value = false, flag = "RageBot_HitLogs"})
			ui:createslider({tab = "rage", subsection = "aimbot", name = "hit logs lifetime", flag = "RageBot_HitLogs_LifeTime", value = 2, minimum = 1, maximum = 5, custom = {}, tooltip = ""})

			-- hvh
			ui:createtoggle({tab = "rage", subsection = "hack vs. hack", name = "wait for round start", value = false, flag = "RageBot_Preparation"})
			ui:createdropdown({tab = "rage", subsection = "hack vs. hack", name = "mode", flag = "RageBot_WaitForRoundStartMode", values = {{"Ping compensation OLD", true}, {"Ping compensation NEW", false}, {"Preparation start", false}}, multichoice = false, tooltip = ""})
			ui:createslider({tab = "rage", subsection = "hack vs. hack", name = "modifier", suffix = "ms", flag = "RageBot_Ping_Compensation_Modifier", value = 1, minimum = 1, maximum = 100, custom = {}, tooltip = ""})
			ui:createtoggle({tab = "rage", subsection = "hack vs. hack", name = "hitscan", value = false, flag = "RageBot_HitScan"})
			ui:createdropdown({tab = "rage", subsection = "hack vs. hack", name = "hitscan points", flag = "RageBot_HitScan_Points", values = {{"Up", true}, {"Down", false}, {"Left", false}, {"Right", false}, {"Forward", false}, {"Backward", false}, {"Towards", false}}, multichoice = true, tooltip = ""})
			ui:createslider({tab = "rage", subsection = "hack vs. hack", name = "hitscan maximum points", suffix = "", flag = "RageBot_HitScan_MaximumPoints", value = 8, minimum = 1, maximum = 64, custom = {}, tooltip = ""})
			ui:createslider({tab = "rage", subsection = "hack vs. hack", name = "hitscan modifier", suffix = "", flag = "RageBot_HitScan_Modifier", value = 9, minimum = 1, maximum = 100, custom = {}, tooltip = ""})
			ui:createtoggle({tab = "rage", subsection = "hack vs. hack", name = "auto peek", value = false, flag = "RageBot_AutoPeek"})
			ui:createkeybind({tab = "rage", subsection = "hack vs. hack", object = "auto peek", name = "ragebot key", flag = "RageBot_AutoPeek_Key", parentflag = "RageBot_AutoPeek", value = Enum.KeyCode.E})
			ui:createtoggle({tab = "rage", subsection = "hack vs. hack", name = "firerate", value = false, flag = "RageBot_FireRate"})
			ui:createslider({tab = "rage", subsection = "hack vs. hack", name = "speed", suffix = "", flag = "RageBot_FireRateValue", value = 100, minimum = 0, maximum = 100, custom = {["0"] = "no delay"}, tooltip = ""})
			ui:createslider({tab = "rage", subsection = "hack vs. hack", name = "penetration modifier", suffix = "", flag = "RageBot_PenModded", value = 1, minimum = 1, maximum = 1000, custom = {}, tooltip = ""})
			
			ui:createtoggle({tab = "rage", subsection = "hack vs. hack", name = "forward track", value = false, flag = "ForwardTrack_Enabled"})
			ui:createtoggle({tab = "rage", subsection = "hack vs. hack", name = "ignore walls", value = false, flag = "ForwardTrack_Ignore_Walls"})
			ui:createslider({tab = "rage", subsection = "hack vs. hack", name = "steps to scan", suffix = "", flag = "ForwardTrack_Steps_to_Scan", value = 1, minimum = 1, maximum = 100, custom = {}, tooltip = ""})
			ui:createslider({tab = "rage", subsection = "hack vs. hack", name = "ticks", suffix = "", flag = "ForwardTrack_Ticks", value = 1, minimum = 1, maximum = 5000, custom = {}, tooltip = ""})
	
			ui:createtoggle({tab = "rage", subsection = "hack vs. hack", name = "camera resolver", value = false, flag = "Camera_Resolver"})
			-- anti aimbot
			ui:createtoggle({tab = "rage", subsection = "anti aimbot", name = "enabled", value = false, flag = "AntiAim_Enabled"})
			ui:createdropdown({tab = "rage", subsection = "anti aimbot", name = "pitch", flag = "AntiAim_Pitch", values = {{"None", true}, {"Upwards", false}, {"Adaptive (for adaptive jiitter)", false}, {"Glitch", false}, {"Zero", false}, {"Downwards", false}, {"Random", false}}, multichoice = false, tooltip = ""})
			ui:createslider({tab = "rage", subsection = "anti aimbot", name = "yaw", suffix = "", flag = "AntiAimSpin_Yaw", value = 0, minimum = -360, maximum = 360, custom = {}, tooltip = ""})
			ui:createdropdown({tab = "rage", subsection = "anti aimbot", name = "yaw base", flag = "AntiAim_YawBase", values = {{"Spin", true}, {"Targets", false}, {"Camera", false}, {"Random", false}, {"Adaptive Jitter", false}}, multichoice = false, tooltip = ""})
			ui:createslider({tab = "rage", subsection = "anti aimbot", name = "spinbot, jiiter max speed", suffix = "", flag = "AntiAimSpin_Speed", value = 1, minimum = 1, maximum = 360, custom = {}, tooltip = ""})
			ui:createslider({tab = "rage", subsection = "anti aimbot", name = "jitter min speed", suffix = "", flag = "Jitter_MinSpeed", value = 1, minimum = 1, maximum = 360, custom = {}, tooltip = ""})
			ui:createslider({tab = "rage", subsection = "anti aimbot", name = "plus angle", suffix = "", flag = "Jitter_Angle1", value = 0, minimum = 1, maximum = 360, custom = {}, tooltip = ""})
			ui:createslider({tab = "rage", subsection = "anti aimbot", name = "minus angle", suffix = "", flag = "Jitter_Angle2", value = 0, minimum = 1, maximum = 360, custom = {}, tooltip = ""})
			
			ui:createtoggle({tab = "rage", subsection = "anti aimbot", name = "360 xyz randomize spin", value = false, flag = "AntiAim_In_Gravity"})
			ui:createslider({tab = "rage", subsection = "anti aimbot", name = "base spin", suffix = "", flag = "AntiAim_In_Gravity_BaseSpin", value = 0, minimum = -360, maximum = 360, custom = {}, tooltip = ""})
			ui:createslider({tab = "rage", subsection = "anti aimbot", name = "maximum spin", suffix = "", flag = "AntiAim_In_Gravity_MaximumSpin", value = 0, minimum = -360, maximum = 360, custom = {}, tooltip = ""})
			ui:createslider({tab = "rage", subsection = "anti aimbot", name = "speed", suffix = "", flag = "AntiAim_In_Gravity_Speed", value = 0, minimum = -360, maximum = 360, custom = {}, tooltip = ""})
			
			ui:createtoggle({tab = "rage", subsection = "anti aimbot", name = "cframe modification", value = false, flag = "AntiAim_СFrame_Manipulation"})
			ui:createslider({tab = "rage", subsection = "anti aimbot", name = "x", suffix = "", flag = "AntiAim_СFrame_Manipulation_X", value = 0, minimum = -360, maximum = 360, custom = {}, tooltip = ""})
			ui:createslider({tab = "rage", subsection = "anti aimbot", name = "y", suffix = "", flag = "AntiAim_СFrame_Manipulation_Y", value = 0, minimum = -360, maximum = 360, custom = {}, tooltip = ""})
			ui:createslider({tab = "rage", subsection = "anti aimbot", name = "z", suffix = "", flag = "AntiAim_СFrame_Manipulation_Z", value = 0, minimum = -360, maximum = 360, custom = {}, tooltip = ""})
			ui:createslider({tab = "rage", subsection = "anti aimbot", name = "x angke", suffix = "", flag = "AntiAim_СFrame_Manipulation_X_Angles", value = 0, minimum = -360, maximum = 360, custom = {}, tooltip = ""})
			ui:createslider({tab = "rage", subsection = "anti aimbot", name = "y angle", suffix = "", flag = "AntiAim_СFrame_Manipulation_Y_Angles", value = 0, minimum = -360, maximum = 360, custom = {}, tooltip = ""})
			ui:createslider({tab = "rage", subsection = "anti aimbot", name = "z angle", suffix = "", flag = "AntiAim_СFrame_Manipulation_Z_Angles", value = 0, minimum = -360, maximum = 360, custom = {}, tooltip = ""})
		
			ui:createtoggle({tab = "rage", subsection = "anti aimbot", name = "fake lags", value = false, flag = "FakeLags_Enabled"})
			ui:createtoggle({tab = "rage", subsection = "anti aimbot", name = "prevent replication", value = false, flag = "FakeLags_PreventReplication"})
			ui:createkeybind({tab = "rage", subsection = "anti aimbot", object = "prevent replication", name = "prevent replication key", flag = "FakeLags_PreventReplication_Key", parentflag = "FakeLags_PreventReplication", value = Enum.KeyCode.X})
			ui:createslider({tab = "rage", subsection = "anti aimbot", name = "ticks", suffix = "", flag = "FakeLags_Ticks", value = 0, minimum = 0, maximum = 2056, custom = {}, tooltip = ""})
			ui:createslider({tab = "rage", subsection = "anti aimbot", name = "limit", suffix = "", flag = "FakeLags_Limit", value = 0, minimum = 0, maximum = 256, custom = {}, tooltip = ""})
		end
		do -- misc 
			-- movement
			ui:createtoggle({tab = "misc", subsection = "movement", name = "slide walk", value = false, flag = "Movement_SlideWalk"})
			ui:createtoggle({tab = "misc", subsection = "movement", name = "speed haxx", value = false, flag = "Movement_SpeedHack"})
			ui:createtoggle({tab = "misc", subsection = "movement", name = "auto hop", value = false, flag = "Movement_AutoHop"})
			ui:createdropdown({tab = "misc", subsection = "movement", name = "method", flag = "Movement_SpeedHackMethod", values = {{"Velocity", true}, {"CFrame", false}}, multichoice = false, tooltip = ""})
			ui:createslider({tab = "misc", subsection = "movement", name = "speed", suffix = "", flag = "Movement_Speed", value = 16, minimum = 0, maximum = 250, custom = {}, tooltip = ""})
			ui:createtoggle({tab = "misc", subsection = "movement", name = "override", value = false, flag = "Movement_OverrideSpeedHack"})
			ui:createslider({tab = "misc", subsection = "movement", name = "override speed", suffix = "", flag = "Movement_OverrideSpeed", value = 25, minimum = 0, maximum = 250, custom = {}, tooltip = ""})
			ui:createkeybind({tab = "misc", subsection = "movement", object = "override", name = "override key", flag = "Movement_OverrideSpeedHack_Key", parentflag = "Movement_OverrideSpeedHack", value = Enum.KeyCode.E})
			-- another
			ui:createtoggle({tab = "misc", subsection = "another", name = "kill all", value = false, flag = "KillAll_Enabled"})
			ui:createtoggle({tab = "misc", subsection = "another", name = "wait for round start", value = false, flag = "KillAll_Preparation"})
			ui:createdropdown({tab = "misc", subsection = "another", name = "mode", flag = "KillAll_WaitForRoundStartMode", values = {{"Ping compensation OLD", true}, {"Ping compensation NEW", false}, {"Preparation start", false}}, multichoice = false, tooltip = ""})
			ui:createslider({tab = "misc", subsection = "another", name = "ping modificator", suffix = "", flag = "KillAll_DelayAdditional", value = 25, minimum = 0, maximum = 250, custom = {}, tooltip = ""})
		
			ui:createtoggle({tab = "misc", subsection = "another", name = "hitsounds", value = false, flag = "HitSounds_Enabled"})
			ui:createslider({tab = "misc", subsection = "another", name = "hitsounds volume", suffix = "", flag = "HitSounds_Volume", value = 100, minimum = 1, maximum = 100, custom = {}, tooltip = ""})
			ui:createdropdown({tab = "misc", subsection = "another", name = "select hitsound", flag = "HitSounds_Ids", values = {{'Neverlose',true},{'Skeet',false},{'Rust',false},{'Monster kill',false},{'Fatality',false},{'TF2',false},{'TF2 Pan',false},{'Beautiful',false},{'Minecraft',false},{'Minecraft XP',false},{'Cod',false},{'Ray',false},{'Matchine gun',false},{'Retro loud',false},{'CSGO',false},{'Slap',false},{'Squash',false},{'Supersmash',false},{'Killingspree',false},{'Godlike',false},{'Ownage',false},{'Ultrakill',false},{'1',false},{'MCOOF',false},{'Quek',false},{'Epic',false},{'Osu',false},{'Bell',false},{'Rocket',false},{'Vine Boom',false},{'Pow',false},{'Bag',false},{'Baimware',false},{'Overwatch',false},{'Pop',false},{'Win',false},{'Denied',false},{'Lessgo',false},{'Headshot',false},{'Bruh',false},{'Percussion',false},{'Bass',false},{'Electro',false},{'Vortex',false},{'Retro',false},{'Osu Mint',false},{'Snap',false}}, multichoice = false, tooltip = ""})
		
			ui:createtoggle({tab = "misc", subsection = "another", name = "killsounds", value = false, flag = "KillSounds_Enabled"})
			ui:createslider({tab = "misc", subsection = "another", name = "killsounds volume", suffix = "", flag = "KillSounds_Volume", value = 100, minimum = 1, maximum = 100, custom = {}, tooltip = ""})
			ui:createdropdown({tab = "misc", subsection = "another", name = "select killsound", flag = "KillSounds_Ids", values = {{'Neverlose',true},{'Skeet',false},{'Rust',false},{'Monster kill',false},{'Fatality',false},{'TF2',false},{'TF2 Pan',false},{'Beautiful',false},{'Minecraft',false},{'Minecraft XP',false},{'Cod',false},{'Ray',false},{'Matchine gun',false},{'Retro loud',false},{'CSGO',false},{'Slap',false},{'Squash',false},{'Supersmash',false},{'Killingspree',false},{'Godlike',false},{'Ownage',false},{'Ultrakill',false},{'1',false},{'MCOOF',false},{'Quek',false},{'Epic',false},{'Osu',false},{'Bell',false},{'Rocket',false},{'Vine Boom',false},{'Pow',false},{'Bag',false},{'Baimware',false},{'Overwatch',false},{'Pop',false},{'Win',false},{'Denied',false},{'Lessgo',false},{'Headshot',false},{'Bruh',false},{'Percussion',false},{'Bass',false},{'Electro',false},{'Vortex',false},{'Retro',false},{'Osu Mint',false},{'Snap',false}}, multichoice = false, tooltip = ""})
			-- exploits
			ui:createtoggle({tab = "misc", subsection = "exploits", name = "spawn weapons", value = false, flag = "Spawn_Weapons"})
			local allweapons = {}
			if _FindFirstChild(replicatedStorage, "Weapons") then
				for i, v in next, (_GetChildren(replicatedStorage.Weapons)) do
					if (_FindFirstChild(v, "Primary") or _FindFirstChild(v, "Secondary")) and not _FindFirstChild(v, "Melee") then
						allweapons[1 + #allweapons] = {v.Name, false}
					end
				end
			end
			ui:createdropdown({tab = "misc", subsection = "exploits", name = "select primary", flag = "Spawn_Weapons_Primary", values = allweapons, multichoice = false, tooltip = ""})
			ui:createdropdown({tab = "misc", subsection = "exploits", name = "select secondary", flag = "Spawn_Weapons_Secondary", values = allweapons, multichoice = false, tooltip = ""})
			ui:createtoggle({tab = "misc", subsection = "exploits", name = "camera resolver breaker", value = false, flag = "Anti_Camera_Resolver"})
			ui:createtoggle({tab = "misc", subsection = "exploits", name = "break aura", value = false, flag = "Break_Aura"})
			ui:createtoggle({tab = "misc", subsection = "exploits", name = "damage mod", value = false, flag = "Damage_Modifier"})
			ui:createslider({tab = "misc", subsection = "exploits", name = "modifier", suffix = "", flag = "Damage_ModifierValue", value = 1, minimum = 1, maximum = 100, custom = {}, tooltip = ""})
			--camera
			ui:createtoggle({tab = "misc", subsection = "camera", name = "thirdperson", value = false, flag = "ThirdPerson_Enabled"})
			ui:createslider({tab = "misc", subsection = "camera", name = "distance", suffix = "studs", flag = "ThirdPerson_Distance", value = 10, minimum = 1, maximum = 100, custom = {}, tooltip = ""})
			ui:createkeybind({tab = "misc", subsection = "camera", object = "thirdperson", name = "thirdperson key", flag = "ThirdPerson_Enabled_Key", parentflag = "ThirdPerson_Enabled", value = Enum.KeyCode.E})
			ui:createslider({tab = "misc", subsection = "camera", name = "field of view", suffix = "", flag = "Camera_FieldOfView", value = 80, minimum = 60, maximum = 120, custom = {}, tooltip = ""})
			ui:createtoggle({tab = "misc", subsection = "camera", name = "in scope", value = false, flag = "Camera_ChangeFieldOfViewInScope"})
			ui:createtoggle({tab = "misc", subsection = "camera", name = "viewmodel changer", value = false, flag = "ViewModel"})
			ui:createslider({tab = "misc", subsection = "camera", name = "angle x", suffix = "", flag = "ViewModel_X", value = 180, minimum = 1, maximum = 360, custom = {}, tooltip = ""})
			ui:createslider({tab = "misc", subsection = "camera", name = "angle y", suffix = "", flag = "ViewModel_Y", value = 180, minimum = 1, maximum = 360, custom = {}, tooltip = ""})
			ui:createslider({tab = "misc", subsection = "camera", name = "angle z", suffix = "", flag = "ViewModel_Z", value = 180, minimum = 1, maximum = 360, custom = {}, tooltip = ""})

			ui:createslider({tab = "misc", subsection = "camera", name = "cframe x", suffix = "", flag = "ViewModel_X1", value = 180, minimum = 1, maximum = 360, custom = {}, tooltip = ""})
			ui:createslider({tab = "misc", subsection = "camera", name = "cframe y", suffix = "", flag = "ViewModel_Y2", value = 180, minimum = 1, maximum = 360, custom = {}, tooltip = ""})
			ui:createslider({tab = "misc", subsection = "camera", name = "cframe z", suffix = "", flag = "ViewModel_Z3", value = 180, minimum = 1, maximum = 360, custom = {}, tooltip = ""})
			ui:createtoggle({tab = "misc", subsection = "camera", name = "remove flash", value = false, flag = "Remove_Flash"})
			-- gun mods
			ui:createtoggle({tab = "misc", subsection = "gun mods", name = "inf ammo", value = false, flag = "Inf_Ammo"})
			ui:createtoggle({tab = "misc", subsection = "gun mods", name = "remove spread", value = false, flag = "Remove_Spread"})
			ui:createtoggle({tab = "misc", subsection = "gun mods", name = "remove recoil", value = false, flag = "Remove_Recoil"})
			ui:createtoggle({tab = "misc", subsection = "gun mods", name = "disable weapon swaying", value = false, flag = "Disable_Weapon_Swaying"})
			ui:createtoggle({tab = "misc", subsection = "gun mods", name = "remove scope", value = false, flag = "Remove_Scope"})
			ui:createtoggle({tab = "misc", subsection = "gun mods", name = "change scope", value = false, flag = "Scope_Changer"})
			ui:createdropdown({tab = "misc", subsection = "gun mods", name = "select scope", flag = "Scope_Changer_Type", values = {{"ahueno", true}, {"pizdec", false}, {"porno", false}}, multichoice = false, tooltip = ""})
		end
		do -- esp
			ui:createtoggle({tab = "drawing", subsection = "enemy", name = "Boxes", flag = "Enemy_Boxes", value = false, tooltip = "Shows boxes around enemies"})
			ui:createcolorpicker({tab = "drawing", subsection = "enemy", object = "Boxes", name = "Color", flag = "Enemy_Boxes_Color1", color = _Color3FromRGB(255,255,255)})

			ui:createtoggle({tab = "drawing", subsection = "enemy", name = "Boxes Filled", flag = "Enemy_Boxes_Filled", value = false, tooltip = "Fills the enemy boxes"})
			ui:createcolorpicker({tab = "drawing", subsection = "enemy", object = "Boxes Filled", name = "Color", flag = "Enemy_Boxes_Filled_Color1", color = _Color3FromRGB(255,255,255)})
			ui:createslider({tab = "drawing", subsection = "enemy", name = "Transparency", flag = "Enemy_Boxes_Filled_Transperency", value = 5, minimum = 1, maximum = 10, tooltip = "Adjusts fill transparency"})

			ui:createtoggle({tab = "drawing", subsection = "enemy", name = "Health Bar", flag = "Enemy_Health_Bar", value = false, tooltip = "Shows enemy health bar"})
			ui:createcolorpicker({tab = "drawing", subsection = "enemy", object = "Health Bar", name = "Color 1", flag = "Enemy_Health_Bar_Color1", color = _Color3FromRGB(255,255,255)})
			ui:createcolorpicker({tab = "drawing", subsection = "enemy", object = "Health Bar", name = "Color 2", flag = "Enemy_Health_Bar_Color2", color = _Color3FromRGB(255,255,255)})
			ui:createtoggle({tab = "drawing", subsection = "enemy", name = "Health Bar Gradient", flag = "Enemy_Health_Bar_Gradient", value = false, tooltip = "Enables gradient health bar"})
			ui:createtoggle({tab = "drawing", subsection = "enemy", name = "Health Number", flag = "Enemy_Health_Number", value = false, tooltip = "Shows HP number"})
			ui:createslider({tab = "drawing", subsection = "enemy", name = "Max HP Visibility Cap", flag = "Enemy_Max_HP_Visibility_Cap", value = 0, minimum = 0, maximum = 100, tooltip = "Hides HP if above cap"})

			ui:createtoggle({tab = "drawing", subsection = "enemy", name = "Held Weapon", flag = "Enemy_Held_Weapon", value = false, tooltip = "Shows weapon enemy is holding"})
			ui:createcolorpicker({tab = "drawing", subsection = "enemy", object = "Held Weapon", name = "Color", flag = "Enemy_Held_Weapon_Color1", color = _Color3FromRGB(255,255,255)})

			ui:createtoggle({tab = "drawing", subsection = "enemy", name = "Distance", flag = "Enemy_Distance", value = false, tooltip = "Displays enemy distance"})
			ui:createcolorpicker({tab = "drawing", subsection = "enemy", object = "Distance", name = "Color", flag = "Enemy_Distance_Color1", color = _Color3FromRGB(255,255,255)})

			ui:createtoggle({tab = "drawing", subsection = "enemy", name = "Name", flag = "Enemy_Name", value = false, tooltip = "Displays enemy name"})
			ui:createcolorpicker({tab = "drawing", subsection = "enemy", object = "Name", name = "Color", flag = "Enemy_Name_Color1", color = _Color3FromRGB(255,255,255)})

			ui:createtoggle({tab = "drawing", subsection = "enemy", name = "Armor", flag = "Enemy_Armor", value = false, tooltip = "Displays enemy armor"})
			ui:createcolorpicker({tab = "drawing", subsection = "enemy", object = "Armor", name = "Color", flag = "Enemy_Armor_Color1", color = _Color3FromRGB(255,255,255)})

			ui:createtoggle({tab = "drawing", subsection = "enemy", name = "Bomb", flag = "Enemy_Bomb", value = false, tooltip = "Shows bomb carried by enemy"})
			ui:createcolorpicker({tab = "drawing", subsection = "enemy", object = "Bomb", name = "Color", flag = "Enemy_Bomb_Color1", color = _Color3FromRGB(255,255,255)})

			ui:createtoggle({tab = "drawing", subsection = "enemy", name = "Cash", flag = "Enemy_Cash", value = false, tooltip = "Displays enemy cash"})
			ui:createcolorpicker({tab = "drawing", subsection = "enemy", object = "Cash", name = "Color", flag = "Enemy_Cash_Color1", color = _Color3FromRGB(255,255,255)})

			ui:createtoggle({tab = "drawing", subsection = "enemy", name = "Snap Lines", flag = "Enemy_Snap_Lines", value = false, tooltip = "Draws snap lines to enemies"})
			ui:createcolorpicker({tab = "drawing", subsection = "enemy", object = "Snap Lines", name = "Color", flag = "Enemy_Snap_Lines_Color1", color = _Color3FromRGB(255,255,255)})
			ui:createslider({tab = "drawing", subsection = "enemy", name = "Snap Lines Transparency", flag = "Enemy_Snap_Lines_Transperency", value = 5, minimum = 1, maximum = 10, tooltip = "Adjusts snap line transparency"})

			ui:createtoggle({tab = "drawing", subsection = "enemy", name = "Chamses", flag = "Enemy_Chamses", value = false, tooltip = "Applies chams effect to enemies"})
			ui:createcolorpicker({tab = "drawing", subsection = "enemy", object = "Chamses", name = "Color 1", flag = "Enemy_Chamses_Color1", color = _Color3FromRGB(255,255,255)})
			ui:createcolorpicker({tab = "drawing", subsection = "enemy", object = "Chamses", name = "Color 2", flag = "Enemy_Chamses_Color2", color = _Color3FromRGB(255,255,255)})
			ui:createslider({tab = "drawing", subsection = "enemy", name = "Chamses Transparency 1", flag = "Enemy_Chamses_Transperency1", value = 5, minimum = 1, maximum = 10, tooltip = "Transparency for first chams color"})
			ui:createslider({tab = "drawing", subsection = "enemy", name = "Chamses Transparency 2", flag = "Enemy_Chamses_Transperency2", value = 5, minimum = 1, maximum = 10, tooltip = "Transparency for second chams color"})

			ui:createtoggle({tab = "drawing", subsection = "enemy", name = "Skeletons", flag = "Enemy_Skeletons", value = false, tooltip = "Draws skeleton on enemies"})
			ui:createcolorpicker({tab = "drawing", subsection = "enemy", object = "Skeletons", name = "Color", flag = "Enemy_Skeletons_Color1", color = _Color3FromRGB(255,255,255)})

			ui:createtoggle({tab = "drawing", subsection = "enemy", name = "Out of View Arrows", flag = "Enemy_Out_of_View_Arrows", value = false, tooltip = "Draws arrows for off-screen enemies"})
			ui:createcolorpicker({tab = "drawing", subsection = "enemy", object = "Out of View Arrows", name = "Color", flag = "Enemy_Out_of_View_Arrows_Color1", color = _Color3FromRGB(255,255,255)})
			ui:createslider({tab = "drawing", subsection = "enemy", name = "Arrow Size", flag = "Enemy_Arrow_Size", value = 16, minimum = 4, maximum = 30, tooltip = "Adjusts arrow size"})
			ui:createslider({tab = "drawing", subsection = "enemy", name = "Arrow Distance", flag = "Enemy_Arrow_Distance", value = 100, minimum = 10, maximum = 100, tooltip = "Adjusts arrow distance"})
			ui:createtoggle({tab = "drawing", subsection = "enemy", name = "Dynamic Arrow Size", flag = "Enemy_Dynamic_Arrow_Size", value = false, tooltip = "Arrow size changes with distance"})


			ui:createtoggle({tab = "drawing", subsection = "team", name = "boxes", value = false, flag = "Team_Boxes"})
			ui:createcolorpicker({tab = "drawing", subsection = "team", object = "boxes", name = "color", flag = "Team_Boxes_Color1", color = _Color3FromRGB(255,255,255)})

			ui:createtoggle({tab = "drawing", subsection = "team", name = "boxes filled", value = false, flag = "Team_Boxes_Filled"})
			ui:createcolorpicker({tab = "drawing", subsection = "team", object = "boxes filled", name = "color", flag = "Team_Boxes_Filled_Color1", color = _Color3FromRGB(255,255,255)})
			ui:createslider({tab = "drawing", subsection = "team", name = "boxes filled transperency", suffix = "", flag = "Team_Boxes_Filled_Transperency", value = 5, minimum = 1, maximum = 10, custom = {}, tooltip = ""})

			ui:createtoggle({tab = "drawing", subsection = "team", name = "health bar", value = false, flag = "Team_Health_Bar"})
			ui:createcolorpicker({tab = "drawing", subsection = "team", object = "health bar", name = "color 1", flag = "Team_Health_Bar_Color1", color = _Color3FromRGB(255,255,255)})
			ui:createcolorpicker({tab = "drawing", subsection = "team", object = "health bar", name = "color 2", flag = "Team_Health_Bar_Color2", color = _Color3FromRGB(255,255,255)})

			ui:createtoggle({tab = "drawing", subsection = "team", name = "health bar gradient", value = false, flag = "Team_Health_Bar_Gradient"})
			ui:createtoggle({tab = "drawing", subsection = "team", name = "health number", value = false, flag = "Team_Health_Number"})
			ui:createslider({tab = "drawing", subsection = "team", name = "max hp visibility cap", suffix = "", flag = "Team_Max_HP_Visibility_Cap", value = 0, minimum = 0, maximum = 100, custom = {}, tooltip = ""})

			ui:createtoggle({tab = "drawing", subsection = "team", name = "held weapon", value = false, flag = "Team_Held_Weapon"})
			ui:createcolorpicker({tab = "drawing", subsection = "team", object = "held weapon", name = "color", flag = "Team_Held_Weapon_Color1", color = _Color3FromRGB(255,255,255)})

			ui:createtoggle({tab = "drawing", subsection = "team", name = "distance", value = false, flag = "Team_Distance"})
			ui:createcolorpicker({tab = "drawing", subsection = "team", object = "distance", name = "color", flag = "Team_Distance_Color1", color = _Color3FromRGB(255,255,255)})

			ui:createtoggle({tab = "drawing", subsection = "team", name = "name", value = false, flag = "Team_Name"})
			ui:createcolorpicker({tab = "drawing", subsection = "team", object = "name", name = "color", flag = "Team_Name_Color1", color = _Color3FromRGB(255,255,255)})

			ui:createtoggle({tab = "drawing", subsection = "team", name = "armor", value = false, flag = "Team_Armor"})
			ui:createcolorpicker({tab = "drawing", subsection = "team", object = "armor", name = "color", flag = "Team_Armor_Color1", color = _Color3FromRGB(255,255,255)})

			ui:createtoggle({tab = "drawing", subsection = "team", name = "bomb", value = false, flag = "Team_Bomb"})
			ui:createcolorpicker({tab = "drawing", subsection = "team", object = "bomb", name = "color", flag = "Team_Bomb_Color1", color = _Color3FromRGB(255,255,255)})

			ui:createtoggle({tab = "drawing", subsection = "team", name = "cash", value = false, flag = "Team_Cash"})
			ui:createcolorpicker({tab = "drawing", subsection = "team", object = "cash", name = "color", flag = "Team_Cash_Color1", color = _Color3FromRGB(255,255,255)})

			ui:createtoggle({tab = "drawing", subsection = "team", name = "snap lines", value = false, flag = "Team_Snap_Lines"})
			ui:createcolorpicker({tab = "drawing", subsection = "team", object = "snap lines", name = "color", flag = "Team_Snap_Lines_Color1", color = _Color3FromRGB(255,255,255)})
			ui:createslider({tab = "drawing", subsection = "team", name = "snap lines transperency", suffix = "", flag = "Team_Snap_Lines_Transperency", value = 5, minimum = 1, maximum = 10, custom = {}, tooltip = ""})

			ui:createtoggle({tab = "drawing", subsection = "team", name = "chamses", value = false, flag = "Team_Chamses"})
			ui:createcolorpicker({tab = "drawing", subsection = "team", object = "chamses", name = "color 1", flag = "Team_Chamses_Color1", color = _Color3FromRGB(255,255,255)})
			ui:createcolorpicker({tab = "drawing", subsection = "team", object = "chamses", name = "color 2", flag = "Team_Chamses_Color2", color = _Color3FromRGB(255,255,255)})
			ui:createslider({tab = "drawing", subsection = "team", name = "chamses transperency 1", suffix = "", flag = "Team_Chamses_Transperency1", value = 5, minimum = 1, maximum = 10, custom = {}, tooltip = ""})
			ui:createslider({tab = "drawing", subsection = "team", name = "chamses transperency 2", suffix = "", flag = "Team_Chamses_Transperency2", value = 5, minimum = 1, maximum = 10, custom = {}, tooltip = ""})

			ui:createtoggle({tab = "drawing", subsection = "team", name = "skeletons", value = false, flag = "Team_Skeletons"})
			ui:createcolorpicker({tab = "drawing", subsection = "team", object = "skeletons", name = "color", flag = "Team_Skeletons_Color1", color = _Color3FromRGB(255,255,255)})
			
			ui:createslider({tab = "drawing", subsection = "settings", name = "text size", flag = "Esp_Settings_TextSize", value = 13, minimum = 8, maximum = 24})
			ui:createdropdown({tab = "drawing", subsection = "settings", name = "text case", flag = "Esp_Settings_TextCase", values = {{"Normal", true}, {"UPPERCASE", false}, {"lowercase", false}}, multichoice = false})
			ui:createdropdown({tab = "drawing", subsection = "settings", name = "text font", flag = "Esp_Settings_TextFont", values = {{"Plex", true}, {"Monospace", false}, {"UI", false}, {"System", false}}, multichoice = false})

			ui:createslider({tab = "drawing", subsection = "settings", name = "flag text size", flag = "Esp_Settings_FlagTextSize", value = 13, minimum = 8, maximum = 24})
			ui:createdropdown({tab = "drawing", subsection = "settings", name = "flag text case", flag = "Esp_Settings_FlagTextCase", values = {{"Normal", true}, {"UPPERCASE", false}, {"lowercase", false}}, multichoice = false})
			ui:createdropdown({tab = "drawing", subsection = "settings", name = "flag text font", flag = "Esp_Settings_FlagTextFont", values = {{"Plex", true}, {"Monospace", false}, {"UI", false}, {"System", false}}, multichoice = false })
		
			ui:createtoggle({tab = "drawing", subsection = "crosshair", name = "custom crosshair", value = false, flag = "Custom_Crosshair"})
			ui:createcolorpicker({tab = "drawing", subsection = "crosshair",  name = "custom crosshair color",  object = "custom crosshair",  flag = "Custom_Crosshair_Color1", color = _Color3FromRGB(255,255,255)})
			ui:createtoggle({tab = "drawing", subsection = "crosshair", name = "impulse crosshair", value = false, flag = "Impulse_Crosshair"})
			ui:createtoggle({tab = "drawing", subsection = "crosshair", name = "crosshair outlines", value = false, flag = "Crosshair_Outlines"})
			ui:createslider({tab = "drawing", subsection = "crosshair", name = "cycle speed", flag = "Cycle_Speed", value = 2, minimum = 0, maximum = 10, custom = {}, tooltip = ""})
			ui:createslider({tab = "drawing", subsection = "crosshair", name = "minimum speed", flag = "Minimum_Speed", value = 10, minimum = 0, maximum = 100, custom = {}, tooltip = ""})
			ui:createslider({tab = "drawing", subsection = "crosshair", name = "maximum speed", flag = "Maximum_Speed", value = 10, minimum = 0, maximum = 100, custom = {}, tooltip = ""})
			ui:createslider({tab = "drawing", subsection = "crosshair", name = "minimum length", flag = "Minimum_Length", value = 10, minimum = 0, maximum = 100, custom = {}, tooltip = ""})
			ui:createslider({tab = "drawing", subsection = "crosshair", name = "maximum length", flag = "Maximum_Length", value = 10, minimum = 0, maximum = 100, custom = {}, tooltip = ""})
			ui:createslider({tab = "drawing", subsection = "crosshair", name = "crosshair width", flag = "Crosshair_Width", value = 10, minimum = 0, maximum = 100, custom = {}, tooltip = ""})
			ui:createslider({tab = "drawing", subsection = "crosshair", name = "crosshair length", flag = "Crosshair_Length", value = 10, minimum = 0, maximum = 100, custom = {}, tooltip = ""})
			ui:createslider({tab = "drawing", subsection = "crosshair", name = "crosshair width gap", flag = "Crosshair_Width_Gap", value = 5, minimum = 0, maximum = 100, custom = {}, tooltip = ""})
			ui:createslider({tab = "drawing", subsection = "crosshair", name = "crosshair length gap", flag = "Crosshair_Length_Gap", value = 5, minimum = 0, maximum = 100, custom = {}, tooltip = ""})
			ui:createslider({tab = "drawing", subsection = "crosshair", name = "crosshair thickness", flag = "Crosshair_Thickness", value = 2, minimum = 1, maximum = 100, custom = {}, tooltip = ""})
			ui:createslider({tab = "drawing", subsection = "crosshair", name = "crosshair rotation", flag = "Crosshair_Rotation", value = 0, minimum = 0, maximum = 360, custom = {}, tooltip = ""})
			ui:createslider({tab = "drawing", subsection = "crosshair", name = "crosshair rotation speed", flag = "Crosshair_Rotation_Speed", value = 0, minimum = -360, maximum = 360, custom = {}, tooltip = ""})
			ui:createtoggle({tab = "drawing", subsection = "crosshair", name = "crosshair at target", value = false, flag = "Crosshair_At_Target"})
			ui:createtoggle({tab = "drawing", subsection = "crosshair", name = "crosshair out of view", value = true, flag = "Crosshair_OutOfView"})

			ui:createslider({
				tab = "drawing",
				subsection = "crosshair",
				name = "crosshair smoothness",
				flag = "Crosshair_Smoothness",
				value = 8,
				minimum = 1,
				maximum = 30,
				custom = {},
				tooltip = ""
			})

			ui:createslider({
				tab = "drawing",
				subsection = "crosshair",
				name = "crosshair edge offset",
				flag = "Crosshair_Edge_Offset",
				value = 20,
				minimum = 0,
				maximum = 200,
				custom = {},
				tooltip = ""
			})

			ui:createslider({
				tab = "drawing",
				subsection = "crosshair",
				name = "crosshair outline size",
				flag = "Crosshair_Outline_Size",
				value = 2,
				minimum = 0,
				maximum = 20,
				custom = {},
				tooltip = ""
			})

			ui:createslider({
				tab = "drawing",
				subsection = "crosshair",
				name = "crosshair outline offset",
				flag = "Crosshair_Outline_Offset",
				value = 1,
				minimum = 0,
				maximum = 10,
				custom = {},
				tooltip = ""
			})
					
		end
		do -- visuals
			ui:createtoggle({tab = "visuals", subsection = "local chamses", name = "weapon chamses", flag = "Model_Changer_Weapon", value = false})
			ui:createcolorpicker({tab = "visuals", subsection = "local chamses", object = "weapon chamses", name = "Color", flag = "Model_Changer_Color", color = _Color3FromRGB(255,255,255)})

			ui:createdropdown({tab = "visuals", subsection = "local chamses", name = "weapon chamses material", flag = "Model_Changer_Material", values = {{"Ghost", true}, {"Flat", false}, {"Custom", false}, {"Reflective", false}, {"Metallic", false}}, multichoice = false})
			ui:createdropdown({tab = "visuals", subsection = "local chamses", name = "weapon chamses texture", flag = "Model_Changer_Texture", values = forcefieldAnimationsDropDown, multichoice = false})

			ui:createslider({tab = "visuals", subsection = "local chamses", name = "weapon transparency", flag = "Model_Changer_Transperency", value = 1, minimum = 0, maximum = 100})
			ui:createslider({tab = "visuals", subsection = "local chamses", name = "weapon reflectance", flag = "Model_Changer_Reflectance", value = 1, minimum = 0, maximum = 100})

			ui:createtoggle({tab = "visuals", subsection = "local chamses", name = "arms changer", flag = "Arms_Changer", value = false})
			ui:createcolorpicker({tab = "visuals", subsection = "local chamses", object = "arms changer", name = "Color 1", flag = "Arms_Changer_Color1", color = _Color3FromRGB(255,255,255)})
			ui:createcolorpicker({tab = "visuals", subsection = "local chamses", object = "arms changer", name = "Color 2", flag = "Arms_Changer_Color2", color = _Color3FromRGB(255,255,255)})

			ui:createdropdown({tab = "visuals", subsection = "local chamses", name = "arms changer material", flag = "Arms_Changer_Material", values = {{"Ghost", true}, {"Flat", false}, {"Custom", false}, {"Reflective", false}, {"Metallic", false}}, multichoice = false})
			ui:createdropdown({tab = "visuals", subsection = "local chamses", name = "arms texture", flag = "Arms_Changer_Texture", values = forcefieldAnimationsDropDown, multichoice = false})

			ui:createslider({tab = "visuals", subsection = "local chamses", name = "arms transparency", flag = "Arms_Transparency1", value = 1, minimum = 0, maximum = 100})
			ui:createslider({tab = "visuals", subsection = "local chamses", name = "sleeve transparency", flag = "Arms_Transparency2", value = 1, minimum = 0, maximum = 100})
			
			ui:createslider({tab = "visuals", subsection = "local chamses", name = "arms reflectance", flag = "Arms_Reflective", value = 1, minimum = 0, maximum = 100})
			ui:createslider({tab = "visuals", subsection = "local chamses", name = "sleeve reflectance", flag = "Arms_Reflective_Sleeve", value = 1, minimum = 0, maximum = 100})
			

			ui:createtoggle({tab = "visuals", subsection = "local chamses", name = "character chamses", flag = "Local_Chams", value = false})
			ui:createcolorpicker({tab = "visuals", subsection = "local chamses", object = "character chamses", name = "Color", flag = "Local_Chams_Color", color = _Color3FromRGB(255,255,255)})
			ui:createdropdown({tab = "visuals", subsection = "local chamses", name = "character chamses material", flag = "Local_Chams_Material", values = {{"Ghost", true}, {"Flat", false}, {"Custom", false}, {"Reflective", false}, {"Metallic", false}}, multichoice = false})
			ui:createdropdown({tab = "visuals", subsection = "local chamses", name = "character texture", flag = "Local_Chams_Texture", values = forcefieldAnimationsDropDown, multichoice = false})
			ui:createslider({tab = "visuals", subsection = "local chamses", name = "character transparency", flag = "Local_Chams_Transparency", value = 1, minimum = 0, maximum = 100})

			-- atmosphere
			ui:createtoggle({tab = "visuals", subsection = "atmosphere", name = "ambience", value = false, flag = "Ambience_Enabled"})
			ui:createcolorpicker({tab = "visuals", subsection = "atmosphere", object = "ambience", name = "Color", flag = "Ambience_Color", color = _Color3FromRGB(255,255,255)})
			ui:createtoggle({tab = "visuals", subsection = "atmosphere", name = "force time", value = false, flag = "Force_Time"})
			ui:createslider({tab = "visuals", subsection = "atmosphere", name = "time", flag = "Force_TimeValue", value = 1, minimum = 0, maximum = 24})
			ui:createtoggle({tab = "visuals", subsection = "atmosphere", name = "custom saturation", value = false, flag = "Custom_Saturation"})
			ui:createcolorpicker({tab = "visuals", subsection = "atmosphere", object = "custom saturation", name = "Color", flag = "Custom_SaturationColor", color = _Color3FromRGB(255,255,255)})
			ui:createslider({tab = "visuals", subsection = "atmosphere", name = "modifier", flag = "Custom_SaturationValue", value = 0, minimum = 0, maximum = 100})
			
			ui:createtoggle({tab = "visuals", subsection = "atmosphere", name = "custom bloom", value = false, flag = "Custom_Bloom"})
			ui:createslider({tab = "visuals", subsection = "atmosphere", name = "intensity", flag = "Custom_BloomIntensity", value = 0, minimum = 0, maximum = 100})
			ui:createslider({tab = "visuals", subsection = "atmosphere", name = "size", flag = "Custom_BloomSize", value = 0, minimum = 0, maximum = 100})
			ui:createslider({tab = "visuals", subsection = "atmosphere", name = "threshold", flag = "Custom_BloomThreshold", value = 0, minimum = 0, maximum = 100})

			ui:createtoggle({tab = "visuals", subsection = "atmosphere", name = "custom atmosphere", value = false, flag = "Custom_Atmosphere"})
			ui:createcolorpicker({tab = "visuals", subsection = "atmosphere", object = "custom atmosphere", name = "Color", flag = "Atmosphere_Color1", color = _Color3FromRGB(255,255,255)})
			ui:createcolorpicker({tab = "visuals", subsection = "atmosphere", object = "custom atmosphere", name = "Color 2", flag = "Atmosphere_Color2", color = _Color3FromRGB(255,255,255)})
			
			ui:createslider({tab = "visuals", subsection = "atmosphere", name = "density", flag = "Custom_AtmosphereDensity", value = 0, minimum = 0, maximum = 100})
			ui:createslider({tab = "visuals", subsection = "atmosphere", name = "glaze", flag = "Custom_AtmosphereGlare", value = 0, minimum = 0, maximum = 100})
			ui:createslider({tab = "visuals", subsection = "atmosphere", name = "haze", flag = "Custom_AtmosphereHaze", value = 0, minimum = 0, maximum = 100})
		
			ui:createtoggle({tab = "visuals", subsection = "atmosphere", name = "custom brightness", value = false, flag = "Custom_Brightness"})
			ui:createdropdown({tab = "visuals", subsection = "atmosphere", name = "brightness mode", flag = "Custom_Brightness_Mode", values = {{"Fullbright", true}, {"Nightmode", false}}, multichoice = false})
			-- other
			ui:createtoggle({tab = "visuals", subsection = "other", name = "custom character", flag = "Custom_Character", value = false, tooltip = "Applies chams effect to enemies"})
			ui:createdropdown({
				tab = "visuals",
				subsection = "other",
				name = "character",
				flag = "Custom_Character_Value",
				values = (function()
					local tbl = {}
					_TableInsert(tbl, {"Custom", true})
					for i, v in next, AllCharacters do
						_TableInsert(tbl, {v, false})
					end
					return tbl
				end)(),
				multichoice = false
			})
			ui:createtextbox({tab = "visuals", subsection = "other", text = "1831554653", flag = "Character_Changer_Value_Custom"})

			ui:createtoggle({tab = "visuals", subsection = "other", name = "flying accessory", flag = "Accessory_Enabled", value = false, tooltip = "Applies chams effect to enemies"})

			ui:createslider({tab = "visuals", subsection = "other", name = "distance", flag = "Accessory_Distance", value = 6, minimum = 0, maximum = 100})
			ui:createslider({tab = "visuals", subsection = "other", name = "height", flag = "Accessory_Height", value = 0, minimum = 0, maximum = 100})

			ui:createtoggle({tab = "visuals", subsection = "other", name = "spin it self", flag = "Accessory_Spin_ItSelf", value = false})
			ui:createslider({tab = "visuals", subsection = "other", name = "spin speed", flag = "Accessory_Spin_Speed", value = 144, minimum = 0, maximum = 360})
			ui:createslider({tab = "visuals", subsection = "other", name = "rotation speed", flag = "Accessory_Rotation_Speed", value = 144, minimum = 0, maximum = 360})

			ui:createtextbox({tab = "visuals", subsection = "other", text = "17899556174", flag = "Accessory_ID"})

			ui:createtoggle({tab = "visuals", subsection = "other", name = "highlight", flag = "Accessory_Highlight_Enabled", value = false})
			ui:createcolorpicker({tab = "visuals", subsection = "other", object = "highlight", name = "Fill Color", flag = "Accessory_Highlight_FillColor", color = _Color3FromRGB(255,255,255)})
			ui:createcolorpicker({tab = "visuals", subsection = "other", object = "highlight", name = "Outline Color", flag = "Accessory_Highlight_OutlineColor", color = _Color3FromRGB(255,255,255)})

			ui:createslider({tab = "visuals", subsection = "other", name = "fill transparency", flag = "Accessory_Highlight_FillTransparency", value = 5, minimum = 1, maximum = 10})
			ui:createslider({tab = "visuals", subsection = "other", name = "outline transparency", flag = "Accessory_Highlight_OutlineTransparency", value = 5, minimum = 1, maximum = 10})
			
			ui:createtoggle({tab = "visuals", subsection = "other", name = "trail", flag = "Trail_Enabled", value = false})
			ui:createcolorpicker({tab = "visuals", subsection = "other", object = "trail", name = "trail color", flag = "Trail_Color", color = _Color3FromRGB(255,255,255)})
			
			ui:createslider({tab = "visuals", subsection = "other", name = "max size", flag = "Trail_MaxSize", value = 50, minimum = 1, maximum = 500})
			ui:createslider({tab = "visuals", subsection = "other", name = "life time", flag = "Trail_LifeTime", value = 5, minimum = 1, maximum = 10})
			
			-- tracers
			ui:createdropdown({
				tab = "visuals",
				subsection = "tracers",
				name = "texture",
				flag = "BulletTracerTexture",
				values = (function()
					local tbl = {}
					for i, _ in next, Cache.TracerTextures do
						_TableInsert(tbl, {i, #tbl + 1 == 3})
					end

					return tbl
				end)(),
				multichoice = false
			})
			-- tracers
			ui:createtoggle({tab = "visuals", subsection = "tracers", name = "bullet tracer", value = false, flag = "BulletTracerEnabled"})
			ui:createcolorpicker({tab = "visuals", subsection = "tracers", object = "bullet tracer", name = "color", flag = "BulletTracerColor", color = _Color3FromRGB(255,0,0)})

			ui:createtoggle({tab = "visuals", subsection = "tracers", name = "second beam", value = false, flag = "BulletTracerSecondBeam"})
			ui:createcolorpicker({tab = "visuals", subsection = "tracers", object = "second beam", name = "color", flag = "BulletTracerSecondBeamColor", color = _Color3FromRGB(255,255,255)})
			
			ui:createslider({tab = "visuals", subsection = "tracers", name = "transperency", flag = "BulletTracerTransperency", value = 0, minimum = 0, maximum = 10})
			ui:createslider({tab = "visuals", subsection = "tracers", name = "life time", flag = "BulletTracerLifetime", value = 2, minimum = 0, maximum = 10})
			ui:createslider({tab = "visuals", subsection = "tracers", name = "fade time", flag = "BulletTracerFadetime", value = 2, minimum = 0, maximum = 10})
			ui:createdropdown({
				tab = "visuals",
				subsection = "tracers",
				name = "fading method",
				flag = "BulletTracerFadeMethod",
				values = {{"Horizontal collapse", true}, {"Vertical collapse", false}},
				multichoice = false
			})
			ui:createslider({tab = "visuals", subsection = "tracers", name = "width", flag = "BulletTracerWidth", value = 2, minimum = 0.1, maximum = 50})
			ui:createslider({tab = "visuals", subsection = "tracers", name = "brightness", flag = "BulletTracerBrightness", value = 1, minimum = 1, maximum = 10})
			ui:createslider({tab = "visuals", subsection = "tracers", name = "light emission", flag = "BulletTracerLightEmission", value = 1, minimum = 0, maximum = 10 })
			ui:createslider({tab = "visuals", subsection = "tracers", name = "light influence", flag = "BulletTracerLightInfluence", value = 0, minimum = 0, maximum = 10 })
			ui:createslider({tab = "visuals", subsection = "tracers", name = "texture speed", flag = "BulletTracerTextureSpeed", value = 1, minimum = 1, maximum = 5})
			ui:createslider({tab = "visuals", subsection = "tracers", name = "texture length", flag = "BulletTracerTextureLength", value = 1, minimum = 1, maximum = 10})

			ui:createtoggle({tab = "visuals", subsection = "tracers", name = "face camera", value = true, flag = "BulletTracerFaceCamera"})
		

			ui:createtoggle({tab="visuals",subsection="tracers",name="bullet impact",value=false,flag="BulletImpactEnabled"})
			ui:createcolorpicker({tab="visuals",subsection="tracers",object="bullet impact",name="color",flag="BulletImpactColor",color=_Color3FromRGB(255,255,255)})


			ui:createslider({tab="visuals",subsection="tracers",name="transparency",flag="BulletImpactTransparency",value=0,minimum=0,maximum=10})
			ui:createslider({tab="visuals",subsection="tracers",name="size",flag="BulletImpactSize",value=1,minimum=0.1,maximum=10})
			ui:createslider({tab="visuals",subsection="tracers",name="impact life time",flag="BulletImpactLifetime",value=2,minimum=0,maximum=10})

			ui:createdropdown({
				tab="visuals",
				subsection="tracers",
				name="material",
				flag="BulletImpactMaterial",
				values={{"Neon",false},{"Glass",false},{"SmoothPlastic",false},{"ForceField",true}},
				multichoice=false
			})


			ui:createtoggle({tab = "visuals", subsection = "tracers", name = "hit effects", value = false, flag = "HitEffectsEnabled"})
			ui:createtoggle({tab = "visuals", subsection = "tracers", name = "firework", value = false, flag = "HitEffects_Firework"})	
			ui:createtoggle({tab = "visuals", subsection = "tracers", name = "blinding", value = false, flag = "HitEffects_Blinding"})			
		end
		do -- сfg
			ui:createtextbox({tab = "config", subsection = "other", text = "preset name", flag = "configname"})

			local newList = ui.getconfigs()
			for i, v in next, newList do
				ui.flags.configname:setvalue(v[1])
				break
			end

			ui:createdropdown({tab = "config", subsection = "other", name = "preset", flag = "configselection", values = newList, multichoice = false})
			ui:createbutton({tab = "config", subsection = "other", name = "save preset", flag = "saveconfig", confirmation = true})
			ui:createbutton({tab = "config", subsection = "other", name = "load preset", flag = "loadconfig", confirmation = true})
			ui:createbutton({tab = "config", subsection = "other", name = "delete preset", flag = "deleteconfig", confirmation = true})

			ui:createtoggle({tab = "config", subsection = "ui", name = "key binds", value = false, flag = "keybinds"})

			ui:createslider({tab = "config", subsection = "ui", name = "key binds horizonatal offset", flag = "keybindoffsetx", value = 0, minimum = 0, maximum = 4096})
			ui:createslider({tab = "config", subsection = "ui", name = "key binds vertical offset", flag = "keybindoffsety", value = 256, minimum = 0, maximum = 4096})

			ui:createtoggle({tab = "config", subsection = "ui", name = "water mark", value = true, flag = "watermark"})
			ui:createtextbox({tab = "config", subsection = "ui", text = "vader", flag = "wmtext1"})
			ui:createtextbox({tab = "config", subsection = "ui", text = "paste", flag = "wmtext2"})
			ui:createtoggle({tab = "config", subsection = "ui", name = "ui accent", value = false, flag = "uiaccent"})
			ui:createcolorpicker({tab = "config", subsection = "ui", object = "ui accent", name = "accent", flag = "uiaccentcolor", color = ui.accent})
			for groupName, group in next, ui.colorGroups do
				ui:createtoggle({tab = "config", subsection = "ui", name = "ui color " .. groupName, value = false, flag = "uicolor" .. groupName})
				ui:createcolorpicker({tab = "config", subsection = "ui", object = "ui color " .. groupName, name = "color " .. groupName, flag = "uicolorpicker" .. groupName, color = ui.startingParameters.colors[groupName]})
			end
			ui:createbutton({tab = "config", subsection = "ui", name = "reset ui layout", flag = "resetuilayout", confirmation = true})

			ui:createbutton({tab = "config", subsection = "extra", name = "rejoin", flag = "rejoin", confirmation = true})
			ui:createbutton({tab = "config", subsection = "extra", name = "join a new game", flag = "joinnewgame", confirmation = true})
			ui:createbutton({tab = "config", subsection = "extra", name = "set clipboard game id", flag = "clipboardgameid", confirmation = true})
			ui:createbutton({tab = "config", subsection = "extra", name = "set clipboard teleport code", flag = "clipboardtpcode", confirmation = true})
			ui:createbutton({tab = "config", subsection = "extra", name = "set clipboard join code", flag = "clipboardjoincode", confirmation = true})
		end
	end
	do
		local function resetConfigs()
			local oldThis = ui.elements["config"]["other"]["preset"]
			local oldHolderPos = oldThis.holder.position
			local oldValues = ui.flags.configselection.value
			local lastSelection
			for i, v in next, oldValues do
				if v then
					lastSelection = i
				end
			end

			oldThis.holder.visible = false 
			ui.elements["config"]["other"]["preset"] = nil
			local newList = ui.getconfigs()
			local setNew = false
			for i, v in next, newList do
				if lastSelection == v[1] then 
					setNew = true
					break
				end
			end
			if setNew then
				for i, v in next, newList do
					if lastSelection == v[1] then 
						ui.flags.configname:setvalue(v[1])
						v[2] = true
					else
						v[2] = false
					end
				end
			end
			ui:createdropdown({tab = "config", subsection = "other", name = "preset", flag = "configselection", values = newList, multichoice = false})
			ui.elements["config"]["other"]["preset"].holder.position = oldHolderPos
			ui.flags.configselection.changed:Connect(function()
				local selected
				for i, v in next, (ui.flags.configselection.value) do
					if v then
						selected = i
					end
				end
				if not selected then return end
				ui.flags.configname:setvalue(selected)
			end)
			ui:updatemenuanimations()
		end
		ui.flags.configselection.changed:Connect(function()
			local selected
			for i, v in next, (ui.flags.configselection.value) do
				if v then
					selected = i
				end
			end
			if not selected then return end
			ui.flags.configname:setvalue(selected)
		end)
		ui.flags.saveconfig.pressed:Connect(function()
			writefile(cheat_path .. "/" .. game_path .. "/" .. config_path .. "/" .. ui.flags.configname.value .. ".cfg", ui:savestate())
			ui:createnotification({text = "saved " .. ui.flags.configname.value .. ".cfg", lifetime = 5, priority = 0})
			resetConfigs()
		end)
		ui.flags.deleteconfig.pressed:Connect(function()
			local ConfigPath = cheat_path .. "/" .. game_path .. "/" .. config_path .. "/" .. ui.flags.configname.value .. ".cfg"
			if isfile(ConfigPath) then
				delfile(ConfigPath)
				ui:createnotification({text = "deleted " .. ui.flags.configname.value .. ".cfg", lifetime = 5, priority = 0})
			end
			resetConfigs()
		end)
		ui.flags.loadconfig.pressed:Connect(function()
			local ConfigPath = cheat_path .. "/" .. game_path .. "/" .. config_path .. "/" .. ui.flags.configname.value .. ".cfg"
			if isfile(ConfigPath) then
				ui:loadstate(readfile(ConfigPath))
				ui:createnotification({text = "loaded " .. ui.flags.configname.value .. ".cfg", lifetime = 5, priority = 0})
			end
			resetConfigs()
		end)

		_CoroutineWrap(function()
			repeat
				_TaskWait()
			until getgenv().pasted and getgenv().pasted.loaded
			_TaskWait()
			if isfile(cheat_path .. "/" .. game_path .. "/" .. config_path .. "/" .. "default.cfg") then
				ui:loadstate(readfile(cheat_path .. "/" .. game_path .. "/" .. config_path .. "/" .. "default.cfg"))
				ui:createnotification({text = "auto-loaded defualt.cfg", lifetime = 5, priority = 0})
			end
			writefile(cheat_path .. "/" .. game_path .. "/" .. config_path .. "/" .. "reset" .. ".cfg", ui:savestate())

			resetConfigs()
		end)()
	end
	do
		ui.flags.uiaccent.changed:Connect(function()
			ui.updateaccent()
		end)

		ui.flags.uiaccentcolor.changed:Connect(function()
			ui.updateaccent()
		end)

		for i, v in next, ui.startingParameters.colors do
			ui.flags["uicolor" .. i].changed:Connect(function()
				ui.updatecolors[i]()
			end)
			ui.flags["uicolorpicker" .. i].changed:Connect(function()
				ui.updatecolors[i]()
			end)
		end
	end
	do
		ui.flags.rejoin.pressed:Connect(function()
			ui:createnotification({text = "rejoining...", lifetime = 5, priority = 0})
			_GetService(game, "TeleportService"):TeleportToPlaceInstance(game.PlaceId, game.JobId)
		end)
		ui.flags.joinnewgame.pressed:Connect(function()
			ui:createnotification({text = "joining a new game...", lifetime = 5, priority = 0})
			local thing = HttpService:JSONDecode(_HttpGet(game, "https://games.roblox.com/v1/games/" .. game.PlaceId .. "/servers/Public?sortOrder=Asc&limit=100"))
			local jobid = thing.data[_MathRandom(1, table.getn(thing.data))].id

			_GetService(game, "TeleportService"):TeleportToPlaceInstance(game.PlaceId, jobid)
		end)
		ui.flags.clipboardgameid.pressed:Connect(function()
			ui:createnotification({text = "set job id to clipboard!", lifetime = 5, priority = 0})
			setclipboard(game.JobId)
		end)
		ui.flags.clipboardtpcode.pressed:Connect(function()
			ui:createnotification({text = "set job id to clipboard!", lifetime = 5, priority = 0})
			setclipboard('game:GetService("TeleportService"):TeleportToPlaceInstance('..game.PlaceId..',"'..game.JobId..'")')
		end)
		ui.flags.clipboardjoincode.pressed:Connect(function()
			ui:createnotification({text = "set job id to clipboard!", lifetime = 5, priority = 0})
			setclipboard('Roblox.GameLauncher.joinGameInstance('..game.PlaceId..',"'..game.JobId..'")')
		end)
	end
	do
		if oldWatermark == true then
			local this = {}
			this.container = utilities:draw("frame", {
				parent = utilities.base,
				anchorpoint = _Vector2New(1, 0),
				size = _UDim2New(0, 100, 0, 100),
				position = _UDim2New(32, 0, 32, 0),
				zindex = ui.basezindex + -4,
				color = _Color3New(0.0862745, 0.0862745, 0.0862745),
				visible = false,
				thickness = 1,
				transparency = 1,
				filled = true,
				name = "okay",
			})
			this.outline1 = utilities:draw("frame", {
				parent = this.container,
				anchorpoint = _Vector2New(0.5, 0.5),
				size = _UDim2New(1, 2, 1, 2),
				position = _UDim2New(0.5, 0, 0.5, 0),
				zindex = ui.basezindex + 5,
				color = _Color3New(0.262745, 0.262745, 0.262745),
				visible = true,
				thickness = 1,
				filled = false,
				name = "okay",
			})
			this.outline2 = utilities:draw("frame", {
				parent = this.containeroutline,
				anchorpoint = _Vector2New(0.5, 0.5),
				size = _UDim2New(1, 2, 1, 2),
				position = _UDim2New(0.5, 0, 0.5, 0),
				zindex = ui.basezindex + 4,
				color = _Color3New(0.0862745, 0.0862745, 0.0862745),
				visible = true,
				thickness = 1,
				filled = false,
				name = "okay",
			})

			local textobjs = 42
			this.textObject = {}
			for i = 1, textobjs do
				this.textObject[i] = utilities:draw("text", {
					parent = this.container,
					anchorpoint = _Vector2New(0, 0),
					size = 13, -- x3
					font = Drawing.Fonts.Plex,
					position = _UDim2New(0, 8 + ((i - 1) * 7), 0, 6),
					zindex = ui.basezindex + -4,
					color = _Color3FromRGB(255, 255, 255),
					visible = true,
					outline = false,
					text = " ",
					name = "okay",
				})
			end

			local statss = {
				framespersec = 0,
				memusage = _MathFloor(Stats:GetTotalMemoryUsageMb()),
				instancecount = Stats.InstanceCount,
			}

			RunService.RenderStepped:Connect(function()
				statss.framespersec = statss.framespersec + 1
			end)

			local lastthing = _Tick()
			local lastcolor = _Tick()
			local wmtext = ""
			local textthing = {}
			local hue = 0

			local months = {"Jan.","Feb.","Mar.","Apr.","May","Jun.","Jul.","Aug.","Sep.","Oct.","Nov.","Dec."}
			local daysinmonth = {31,28,31,30,31,30,31,31,30,31,30,31}

			local function getDate()
				local time = _OsTime()
				local year = _MathFloor(time/60/60/24/365.25+1970)
				local day = math.ceil(time/60/60/24%365.25)
				local month
				for i=1, #daysinmonth do
					if day > daysinmonth[i] then
						day = day - daysinmonth[i]
					else
						month = i
						break
					end
				end
				return month, day, year
			end

			local wtf = _Tick()
			RunService.RenderStepped:Connect(function(dt)
				local result = ui.startWatermark and ui.flags.watermark and ui.flags.watermark.value or false
				if this.container.visible ~= result then
					this.container.visible = result
				end

				if this.container.visible == false then return end

				local gayresult = _UDim2New(1, -100, 0, 42)
				if this.container.position ~= gayresult then
					this.container.position = gayresult
				end

				hue = hue + (dt * 5) -- el speed$$

				if _Tick() - lastthing > 1 then -- optimized$$$$$
					local seconds = _OsDate("*t") ["sec"]
					local minutes = _OsDate("*t") ["min"]
					local hours = _OsDate("*t") ["hour"]

					if _tonumber(seconds) <= 9 then
						seconds = "0"..seconds
					end
					if _tonumber(minutes) <= 9 then
						minutes = "0"..minutes
					end
					if _tonumber(hours) <= 9 then
						hours = "0"..hours
					end

					lastthing = _Tick()
					statss.memusage = _MathFloor(Stats:GetTotalMemoryUsageMb())
					statss.instancecount = Stats.InstanceCount
					local month, day, year = getDate()
					wmtext = "[ " .. ui.flags.wmtext1.value .. ui.flags.wmtext2.value .. " ] BETA" .. " | " .. _tostring(months[month]) .. " " .. _tostring(day) .. " " .. _tostring(year)	
					statss.framespersec = 0
					this.container.size = _UDim2New(0, (#wmtext * 7) + 16, 0, 26)


					textthing = wmtext:split("")

					for i = 1, textobjs do
						local v = this.textObject[i]
						local addhue = 0
						if not textthing[i] then
							v.Drawingobject.Text = ""
						else
							if i >= 6 + #ui.flags.wmtext1.value + #ui.flags.wmtext2.value and i <= 10 + #ui.flags.wmtext1.value + #ui.flags.wmtext2.value then
								addhue = addhue + 10 -- now add a bit for the next fucken character
								v.Drawingobject.Color = _Color3FromHSV(((addhue + hue / 60) + (i / 60)) % 1, 0.58, 1) -- fully saturated made it look pasted so i toned that down a notch
							elseif i >= 3 + #ui.flags.wmtext1.value and i <= 3 + #ui.flags.wmtext1.value + #ui.flags.wmtext2.value then
								--v.Drawingobject.Color = _Color3FromRGB(191, 255, 107)
								v.Drawingobject.Color = ui.accent
							else
								v.Drawingobject.Color = _Color3New(1, 1, 1)
							end

							v.Drawingobject.Text = textthing[i]
						end
					end

					return
				end

				textthing = wmtext:split("")

				if _Tick() - wtf > 1/19 then
					wtf = _Tick()
					for i = 1, textobjs do
						local v = this.textObject[i]
						local addhue = 0
						if not textthing[i] then
							v.Drawingobject.Text = ""
						else
							if i >= 6 + #ui.flags.wmtext1.value + #ui.flags.wmtext2.value and i <= 10 + #ui.flags.wmtext1.value + #ui.flags.wmtext2.value then
								addhue = addhue + 10 -- now add a bit for the next fucken character
								v.Drawingobject.Color = _Color3FromHSV(((addhue + hue / 60) + (i / 60)) % 1, 0.58, 1) -- fully saturated made it look pasted so i toned that down a notch
							elseif i >= 3 + #ui.flags.wmtext1.value and i <= 3 + #ui.flags.wmtext1.value + #ui.flags.wmtext2.value then
								--v.Drawingobject.Color = _Color3FromRGB(191, 255, 107)
								v.Drawingobject.Color = ui.accent
							else
								v.Drawingobject.Color = _Color3New(1, 1, 1)
							end

							v.Drawingobject.Text = textthing[i]
						end
					end
				end
			end)
		else
			ui.objects.watermarkback = utilities:draw("frame", {
				parent = utilities.base,
				anchorpoint = _Vector2New(1, 0),
				size = _UDim2New(0, 420, 0, 28),
				position = _UDim2New(1, 0, 0, 92),
				zindex = ui.basezindex + -5,
				color = _Color3FromRGB(46, 46, 46),
				visible = false,
				thickness = 0,
				filled = true,
				name = "okay",
			})
			ui.startWatermark = false
			ui.objects.watermarktextobjects = {}
			local textobjs = 56
			for i = 1, textobjs do
				ui.objects.watermarktextobjects[i] = utilities:draw("text", {
					parent = ui.objects.watermarkback,
					anchorpoint = _Vector2New(0, 0.5),
					size = 13, -- x3
					font = Drawing.Fonts.Plex,
					position = _UDim2New(0, 8 + ((i - 1) * 7), 0.5, 0),
					zindex = ui.basezindex + -4,
					color = _Color3FromRGB(255, 255, 255),
					visible = true,
					outline = false,
					text = " ",
					name = "okay",
				})
			end

			local statss = {
				framespersec = 0,
				memusage = _MathFloor(Stats:GetTotalMemoryUsageMb()),
				instancecount = Stats.InstanceCount,
			}

			RunService.RenderStepped:Connect(function()
				statss.framespersec = statss.framespersec + 1
			end)

			local lastthing = _Tick()
			local lastcolor = _Tick()
			local wmtext = ""
			local textthing = ""
			local hue = 0
			RunService.RenderStepped:Connect(function(dt)
				local result = ui.startWatermark and ui.flags.watermark and ui.flags.watermark.value or false
				if ui.objects.watermarkback.visible ~= result then
					ui.objects.watermarkback.visible = result
				end

				if ui.objects.watermarkback.visible == false then return end

				local gayresult = _UDim2New(1, 0, 0, ui.flags.watermarkoffset and ui.flags.watermarkoffset.value or 256)
				if ui.objects.watermarkback.position ~= gayresult then
					ui.objects.watermarkback.position = gayresult
				end

				if _Tick() - lastthing > 1 then -- optimized$$$$$
					lastthing = _Tick()
					statss.memusage = _MathFloor(Stats:GetTotalMemoryUsageMb())
					statss.instancecount = Stats.InstanceCount
					wmtext = "vaderhaxx paste" .. " | " .. statss.framespersec .. " fps | " .. statss.memusage .. " mb | " .. statss.instancecount .. " objects"
					statss.framespersec = 0
				end
				hue = hue + (dt * 20) -- el speed$$
				textthing = wmtext:split("")
			end)

			local addhue = 0
			for i = 1, textobjs do
				local v = ui.objects.watermarktextobjects[i]
				local thislast = _Tick()
				addhue = addhue + 1/360 -- now add a bit for the next fucken character
				RunService.Stepped:Connect(function(u, dt)
					if _Tick() - thislast < 1/20 then
						return
					end
					thislast = _Tick()
					if not textthing[i] then
						v.Drawingobject.Text = ""
						return
					end
					v.Drawingobject.Color = _Color3FromHSV(((addhue + hue / 60) + (i / 60)) % 1, 0.58, 1) -- fully saturated made it look pasted so i toned that down a notch
					v.Drawingobject.Text = textthing[i]
				end)
			end
		end
	end
	do
		-- resizing function
		ui.objects.resizedetection.clicked:Connect(function()
			if not ui.uiopen then return end
			local connection connection = RunService.RenderStepped:Connect(function()
				if not ui.objects.resizedetection.holding then
					connection:Disconnect()
					connection = nil
					return
				end
				local final = _Vector2New(utilities.mouse.position.x - ui.objects.backborder.absoluteposition.x, utilities.mouse.position.y - ui.objects.backborder.absoluteposition.y)
				ui:setsize(final)
			end)
		end)

		ui.flags.resetuilayout.pressed:Connect(function()
			for tab, columns in next, ui.subsections do
				if tab ~= "players" then
					for column, panels in next, columns do
						for panel, data in next, panels do
							data.panelReposition.resetSide()
						end
					end
				end
			end
			for tab, columns in next, ui.subsections do
				if tab ~= "players" then
					for column, panels in next, columns do
						for panel, data in next, panels do
							data.panelReposition.resetPosition()
						end
					end
				end
			end
			for tab, columns in next, ui.subsections do
				if tab ~= "players" then
					for column, panels in next, columns do
						for panel, data in next, panels do
							data.panelResize.resetSize()
						end
					end
				end
			end
		end)
	end
	do
		-- dragging function
		ui.objects.dragdetection.clicked:Connect(function()
			local relative = utilities.mouse.position - ui.objects.dragdetection.absoluteposition
			local connection connection = RunService.RenderStepped:Connect(function()
				if not ui.objects.dragdetection.holding then
					connection:Disconnect()
					connection = nil
					return
				end
				local result = _Vector2New(Mouse.x, Mouse.y + 36) - relative

				ui.objects.backborder.position = _UDim2New(result.x / camera.ViewportSize.x, 0, result.y / camera.ViewportSize.y, 0)
			end)
		end)
	end
	ui:updatemenuanimations()
end
local keybindsui
do
	do
		local started = uilibrary:start({
			size = _Vector2New(200, 64),
			name = "vaderhaxx paste",
			basezindex = 10000,
			accent = _Color3FromRGB(255, 200, 69),
			colors = {
				a = _Color3FromRGB(0, 0, 0),
				b = _Color3FromRGB(56, 56, 56),
				c = _Color3FromRGB(46, 46, 46),
				d = _Color3FromRGB(12, 12, 12),
				e = _Color3FromRGB(21, 21, 21),
				f = _Color3FromRGB(84, 84, 84),
				g = _Color3FromRGB(54, 54, 54),
			},
			tabs = {
				"keybinds",
			}
		})
		keybindsui = started
	end
	do
		keybindsui.objects.backborder.position = _UDim2New(0, 0, 0.5, 0)

		local keybinders = {}
		for i, v in next, ui.flags do
			if v.type == "keybind" then
				keybinders[1 + #keybinders] = v
			end
		end

		local keytexts = {}
		for i = 1, #keybinders do
			local txt = utilities:draw("text", {
				parent = keybindsui.tabs["keybinds"],
				anchorpoint = _Vector2New(0, 0),
				size = 13, -- x3
				font = Drawing.Fonts.Plex,
				position = _UDim2New(0, -8, 0, ((i - 1) * 18) -12),
				zindex = keybindsui.tabs["keybinds"].zindex + 1,
				color = _Color3FromRGB(255, 255, 255),
				visible = false,
				outline = false,
				text = "",
				name = "okay",
			})
			keytexts[i] = txt
		end

		local function singlekeybindupdate()
			local currentkeys = {}
			for i2, v2 in next, keybinders do
				if v2.value == true then
					local parentthatleft = v2.parentflag
					if ui.flags[parentthatleft].value == true then
						currentkeys[1 + #currentkeys] = v2
					end
				end
			end
			local FUCKYOU = _Vector2New(200, 64)
			for i2, v2 in next, keytexts do
				v2.visible = false
			end
			for i2, v2 in next, currentkeys do
				local keynig = v2.key
				local keyastext = "NONE"
				if keynig and keynig ~= "NONE" then
					keyastext = _StringSub(_StringUpper(keynig:sub(14)), 1, 5)
				end
				local thingtoshow = ""
				if v2.object == "enabled" then
					thingtoshow = v2.section .. ":" .. v2.activation
				else
					thingtoshow = v2.object .. ":" .. v2.activation
				end
				keytexts[i2].text = "[ " .. keyastext .. " ] " .. thingtoshow
				keytexts[i2].visible = true
				local xbound = keytexts[i2].absolutesize.x + 64 -- ????????????????????? bitch??
				FUCKYOU = FUCKYOU + _Vector2New(xbound > FUCKYOU.x and xbound - FUCKYOU.x or 0, 18)
			end
			keybindsui:setsize(FUCKYOU)
		end

		local oldcreatekeybind = ui.createkeybind
		ui.createkeybind = function(self, ...)
			local arg = {...}
			local param = arg[1]
			local func = oldcreatekeybind(self, ...)

			local flagRef = ui.flags[param.flag]

			flagRef.changed:Connect(function()
				singlekeybindupdate()
			end)
			ui.flags[flagRef.parentflag].changed:Connect(function()
				singlekeybindupdate()
			end)

			keybinders[1 + #keybinders] = flagRef

			local txt = utilities:draw("text", {
				parent = keybindsui.tabs["keybinds"],
				anchorpoint = _Vector2New(0, 0),
				size = 13, -- x3
				font = Drawing.Fonts.Plex,
				position = _UDim2New(0, -8, 0, ((#keytexts - 1) * 18) -12),
				zindex = keybindsui.tabs["keybinds"].zindex + 1,
				color = _Color3FromRGB(255, 255, 255),
				visible = false,
				outline = false,
				text = "",
				name = "okay",
			})
			keytexts[1 + #keytexts] = txt
			return func
		end

		for i, v in next, keybinders do
			v.changed:Connect(function()
				singlekeybindupdate()
			end)
			ui.flags[v.parentflag].changed:Connect(function()
				singlekeybindupdate()
			end)
		end

		singlekeybindupdate()

		keybindsui.objects.backborder.visible = false
		ui.flags.keybinds.changed:Connect(function()
			keybindsui.objects.backborder.visible = ui.flags.keybinds.value
			singlekeybindupdate()
		end)
	end
end
do
	ui.oldaccent = ui.accent
	ui.updatecolors = {}
	local savedColors = {}
	for i, v in next, ui.startingParameters.colors do
		savedColors[i] = v
	end
	for i, v in next, ui.startingParameters.colors do
		ui.updatecolors[i] = function()
			local targetColor = ui.flags["uicolor" .. i].value and ui.flags["uicolorpicker" .. i].color or savedColors[i]
			for k, menuObject in next, {ui, keybindsui} do
				for i, v in next, menuObject.colorGroups[i] do
					v.color = targetColor
				end
			end
			ui.startingParameters.colors[i] = targetColor
		end
	end
	ui.updateaccent = function()
		if ui.flags.uiaccent.value then
			ui.accent = ui.flags.uiaccentcolor.color
		else
			ui.accent = ui.oldaccent
		end
		for k, menuObject in next, {ui, keybindsui} do
			for i, v in next, (menuObject.accents) do
				if v.color then -- this is an object, not a table
					v.color = ui.accent
				else
					if v[2] == "tabs" or v[2] == "sliders" then
						if v[2] == "tabs" then
							for i2, v2 in next, (v[1]) do
								v2.color = ui.accent:lerp(_Color3FromRGB(_MathClamp((ui.accent.r * 255) - 100, 0, 255), _MathClamp((ui.accent.g * 255) - 100, 0, 255), _MathClamp((ui.accent.b * 255) - 100, 0, 255)), (i2 - 1) / #v)
							end
						else
							for i2, v2 in next, (v[1]) do
								v2.color = ui.accent:lerp(_Color3FromRGB(_MathClamp((ui.accent.r * 255) - 5, 0, 255), _MathClamp((ui.accent.g * 255) - 5, 0, 255), _MathClamp((ui.accent.b * 255) - 5, 0, 255)), (i2 - 1) / (#v - 1))
							end
						end
					else
						for i2, v2 in next, (v) do
							v2.color = ui.accent:lerp(_Color3FromRGB(_MathClamp((ui.accent.r * 255) - 30, 0, 255), _MathClamp((ui.accent.g * 255) - 30, 0, 255), _MathClamp((ui.accent.b * 255) - 30, 0, 255)), (i2 - 1) / (#v - 1))
						end
					end
				end
			end
		end
	end
end
do
	ui.updateaccent()
	ui:closeui()

	ui.objects.backborder.position = ui.objects.backborder.position + _UDim2New(0, 1, 0, 1)
	ui.objects.backborder.position = ui.objects.backborder.position - _UDim2New(0, 1, 0, 1)
	ui.objects.backborder.visible = true

	InputService.InputBegan:Connect(function(Input, gameProcessedEvent)
		if Input.UserInputType == Enum.UserInputType.Keyboard then
			if Input.KeyCode == Enum.KeyCode.Insert or Input.KeyCode == Enum.KeyCode.Delete or Input.KeyCode == Enum.KeyCode.Backquote then
				if ui.uiopen then
					ui:closeui()
				else
					ui:openui()
				end
			end
		end
	end)

	local cursor = Drawing.new("Triangle")
	Drawings[1 + #Drawings] = cursor
	cursor.Filled = true
	cursor.Color = _Color3FromRGB(255, 255, 255)
	cursor.ZIndex = ui.basezindex + 1000

	local areaIncreasePercentage = 0.25

	InputService.InputChanged:Connect(function(input, processed)
		if input.UserInputType == Enum.UserInputType.MouseMovement then
			local xy = InputService:GetMouseLocation()
			cursor.PointA = _Vector2New(xy.x + 1, xy.y)
			cursor.PointB = _Vector2New(xy.x + 1, xy.y) + _Vector2New(0, 12)
			cursor.PointC = _Vector2New(xy.x + 1, xy.y) + _Vector2New(8, 8)
		end
	end)

	ui.flags.keybindoffsetx.changed:Connect(function()
		keybindsui.objects.backborder.position = _UDim2New(0, ui.flags.keybindoffsetx.value, 0, ui.flags.keybindoffsety.value)
	end)
	ui.flags.keybindoffsety.changed:Connect(function()
		keybindsui.objects.backborder.position = _UDim2New(0, ui.flags.keybindoffsetx.value, 0, ui.flags.keybindoffsety.value)
	end)

	RunService.Heartbeat:Connect(function()
		cursor.Visible = ui.uiopen
		cursor.Color = ui.accent
	end)
end
local Flags = ui.flags

do 
	--Funcs
	do -- Player Spawned Signal
		local function apply(plr)
			plr.CharacterAdded:Connect(function(character)
				repeat
					_TaskWait()
				until plr.Status.Alive.Value
				playerSpawned:Fire(plr, _Tick())
				local hum = character:WaitForChild("Humanoid")
				local sig; sig = hum.HealthChanged:Connect(function(newHealth)
					if newHealth == newHealth and newHealth <= 0 then
						sig:Disconnect()
						sig = nil
						playerDied:Fire(plr, _Tick())
					end
				end)
			end)
		end

		for i,v in next, _GetPlayers(Players) do
			apply(v)
		end

		Players.PlayerAdded:Connect(apply)

	end


	do -- PlayerModule

		PlayerModule.storage = {}


		local function refreshEnemyType(data)
			data.enemy = replicatedStorage.gametype.Value == "deathmatch" or (data.player ~= LocalPlayer and data.player.Team ~= LocalPlayer.Team)
		end
		_GetPropertyChangedSignal(LocalPlayer, "Team"):Connect(function()
			for player,data in next, PlayerModule.storage do
				refreshEnemyType(data)
			end
		end)

		function PlayerModule.add(player)
			local data = {}
			data.player = player
			data.lastVelocity = _Vector3New()
			data.velocity = _Vector3New()
			data.character = nil
			data.god = false
			data.currentPosition = _Vector3New()
			data.lastPosition = _Vector3New()
			data.lastcameracf = _CFrameNew()
			data.camcf = _CFrameNew()
			data.updates = {}
			data.enemy = replicatedStorage.gametype.Value == "deathmatch" or (player ~= LocalPlayer and player.Team ~= LocalPlayer.Team)

			_GetPropertyChangedSignal(player, "Team"):Connect(function()
				refreshEnemyType(data)
			end)
			
			data.step = RunService.Stepped:Connect(function(delta)
				local char = player.Character
				data.character = char

				data.humanoid = char and _FindFirstChild(char, "Humanoid")
				data.head = char and _FindFirstChild(char, "Head")
				data.headhb = char and _FindFirstChild(char, "HeadHB")
				data.headfake = char and _FindFirstChild(char, "FakeHead")
				data.rootpart = char and _FindFirstChild(char, "HumanoidRootPart")
				data.god = data.humanoid and data.humanoid.Health ~= data.humanoid.Health
				data.alive = (
					char
					and char.Parent == workspace
					and player.Character == char

					and data.humanoid
					and data.humanoid.Parent == char
					and data.humanoid.Health > 0
					and data.humanoid.Health == data.humanoid.Health
					and data.humanoid.MaxHealth > 0
					and data.rootpart
					and data.head
					and data.headhb
					and data.headfake
					and (
						not player:FindFirstChild("Status")
						or not player.Status:FindFirstChild("Alive")
						or player.Status.Alive.Value == true
					)
				)-- LMAOO i got bored that chamses dont loads fully lol
				if data.god or data.alive then
					data.protected = char and _FindFirstChildOfClass(char, "ForceField") ~= nil
					if data.currentPosition then
						data.lastPosition = data.currentPosition
					end
					data.currentPosition = data.rootpart and data.rootpart.Position
					if data.camcf then
						data.lastcameracf = data.camcf
					end
					data.camcf = _FindFirstChild(player, "CameraCF") and _FindFirstChild(player, "CameraCF").Value or _CFrameNew()
				
					_TableInsert(data.updates, 1, {position = data.currentPosition, velocity = data.velocity, time = _Tick()})

					local samples = 5
					local totalDelta = 0
					local totalDistance = _Vector3New()
					for i = 2, _MathMin(samples, #data.updates) do
						local now = data.updates[i]
						local prev = data.updates[i - 1]

						totalDelta = totalDelta + (now.time - prev.time)
						totalDistance = totalDistance + (now.position - prev.position)
					end

					data.velocity = totalDistance / totalDelta
				else
					table.clear(data.updates)
					data.protected = false
					data.character = nil
					data.alive = false
					data.lastVelocity = _Vector3New()
					data.velocity = _Vector3New()
					data.currentPosition = _Vector3New()
					data.lastPosition = _Vector3New()
					data.humanoid = nil
					data.head = nil
					data.rootpart = nil
				end
			end)
			PlayerModule.storage[player] = data
		end

		function PlayerModule.remove(player)
			if PlayerModule.storage[player] then
				PlayerModule.storage[player].step:Disconnect()
				table.clear(PlayerModule.storage[player])
				PlayerModule.storage[player] = nil
			end
		end

		function PlayerModule:unload()
			for player,data in next, PlayerModule.storage do
				PlayerModule.remove(player)
			end
			table.clear(PlayerModule)
			PlayerModule = {}
		end

		for i,v in next, _GetPlayers(Players) do
			if v ~= LocalPlayer then
				PlayerModule.add(v)
			end
		end
		Players.PlayerAdded:Connect(PlayerModule.add)
		Players.PlayerRemoving:Connect(PlayerModule.remove)
	end
	do  -- Calculations
		function Calculations:truncateNumber(number, decimalPlaces)
			local d = 10^decimalPlaces
			return _MathFloor(number*d)/d
		end

		function Calculations:map(x, start0, stop0, start1, stop1)
			return (x - start0)/(stop0 - start0)*(stop1 - start1) + start1
		end

		function Calculations:safeUnit(vec, epsilon)
			local magnitude = vec.magnitude
			if magnitude > (epsilon or 1e-10) then
				return vec/magnitude
			end
			return _Typeof(vec) == "Vector2" and _Vector2New() or _Vector3New()
		end

		--Vector3s
		function Calculations:angleBetweenVector3(vec1, vec2)
			local angle = _MathAtan2(vec1:Cross(vec2).magnitude, vec1:Dot(vec2))
			if angle < 0 then
				angle = tau - angle
			end
			return angle
		end

		function Calculations:pitchYawToLookVec(pitch, yaw)
			local cx = _MathCos(pitch)
			return _Vector3New(-cx*_MathSin(yaw), _MathSin(pitch), -cx*_MathCos(yaw))
		end

		function Calculations:lookVecToPitchYaw(lookVec)
			local x, y, z = lookVec.x, lookVec.y, lookVec.z
			return _MathAtan2(y, (x*x + z*z)^0.5), _MathAtan2(-x, -z)
		end

		--Vector2s
		function Calculations:angleBetweenVector2(vec1, vec2)
			local ang = math.acos(Calculations:safeUnit(vec1):Dot(Calculations:safeUnit(vec2)))
			if ang < 0 then
				ang = tau - ang
			end
			return ang
		end

		function Calculations:rotationMatrix(vec, angle)
			local mag = vec.Magnitude
			vec = Calculations:safeUnit(vec)
			local co, si = _MathCos(angle), _MathSin(angle)
			local x, y = vec.x, vec.y
			return Calculations:safeUnit(_Vector2New(x*co - y*si, x*si + y*co))*mag
		end

		function Calculations:normalizeAngle(angle)
			return ((angle + pi) % (2*pi)) - pi
		end

		do 
			local fov
			local viewportX, viewportY
			local frustumYScale
			local frustumXScale
			local rScaleX, rScaleY

			local function refresh()
				viewportSize = camera.ViewportSize
				fov = camera.FieldOfView * math.pi/180
				viewportX, viewportY = viewportSize.x, viewportSize.y
				frustumYScale = math.tan(fov/2)
				frustumXScale = viewportX/viewportY * frustumYScale
				rScaleX = (1 + frustumXScale*frustumXScale)^0.5
				rScaleY = (1 + frustumYScale*frustumYScale)^0.5
			end
			RunService.Stepped:Connect(refresh)

			function Calculations:worldToViewportPoint(worldPosition, clampEdge, clampOffset)
				local projectedPosition = _CFramePointToObjectSpace(camera.CFrame, worldPosition)
				local pX, pY, pZ = projectedPosition.x, projectedPosition.y, -projectedPosition.z
				local screenX = viewportX * (0.5 + pX/(2*pZ*frustumXScale))
				local screenY = viewportY * (0.5 - pY/(2*pZ*frustumYScale))
				local onScreen = pZ > 0 and screenX >= 0 and screenX <= viewportX and screenY >= 0 and screenY <= viewportY
				if not clampEdge then
					return _Vector3New(screenX, screenY, pZ), onScreen
				end
				if onScreen then
					return _Vector3New(screenX, screenY, pZ), true
				end
				local widthEdge, heightEdge = pX < 0 and clampOffset or viewportX - clampOffset, -pY < 0 and clampOffset or viewportY - clampOffset
				local m = 0.5*(pY*viewportX + pX*viewportY)
				local newY = (m - pY*widthEdge)/pX
				if newY > clampOffset and newY < (viewportY - clampOffset) then
					return _Vector3New(widthEdge, newY, pZ), false
				else
					local newX = (m - pX*heightEdge)/pY
					return _Vector3New(newX, heightEdge, pZ), false
				end
			end
			function Calculations:spherePoint(worldPosition, radius)
				local projectedPosition = _CFramePointToObjectSpace(camera.CFrame, worldPosition)
				local pX, pY, pZ = projectedPosition.x, projectedPosition.y, -projectedPosition.z
				local rX = rScaleX*radius
				local rY = rScaleY*radius
				return -pZ*frustumXScale < pX+rX and pX-rX < pZ*frustumXScale and -pZ*frustumYScale < pY+rY and pY-rY < pZ*frustumYScale and pZ > -radius
			end
		end
	end
	do --Utility
		Utility.chammedobjects = {
			["Clothing"] = {},
			["Arms"] = {},
			["Weapon Objects"] = {},
			["Colored Arms"] = {},
			["Colored Weapons"] = {},
			["Original"] = {}
		}
		Utility.materials = {
			["Ghost"] = _Materials.ForceField,
			["Flat"] = _Materials.Neon,
			["Custom"] = _Materials.SmoothPlastic,
			["Reflective"] = _Materials.Glass, 
			["Metallic"] = _Materials.Glass
		}
		function Utility.IsPlayerAlive(Player)
			if Player and _FindFirstChild(Player, "Humanoid") and _FindFirstChild(Player, "Humanoid").Health > 0 then
				return true
			else
				return false
			end
		end
		function Utility.CryptPosition(Pos) 
			local X = (((Pos.X - 74312) * 4) + 1325) * 13
			local Y = ((Pos.Y + 3183421) * 4) - 4201428
			local Z = ((Pos.Z * 41) - 581357) * 2
			return _Vector3New(X,Y,Z)
		end
		Utility.Weapon = {}
		function Utility.Weapon:Get()
			return debug.getupvalue(Cache.Client.loadammo, 1)
		end
		function Utility.Weapon:UpdateInterface()
			debug.getupvalue(Cache.Client.loadammo, 2)()
		end	
		function Utility.Weapon:GetCurrentAmmo()
			local Equipped = Cache.Client.equipped
			local Weapon = self:Get()
			return  Equipped == "primary" and Weapon.countammo or Equipped == "secondary" and Weapon.countammo2 or 0
		end

		function Utility.Weapon:GetStoredAmmo()
			local Equipped = Cache.Client.equipped
			local Weapon = self:Get()
			return  Equipped == "primary" and Weapon.primarystored or Equipped == "secondary" and Weapon.secondarystored or 0
		end

		function Utility.Weapon:UpdateAmmo(Ammo)
			local Equipped = Cache.Client.equipped
			local Weapon = debug.getupvalue(Cache.Client.loadammo, 1)
			if Equipped == "primary" then
				Weapon.ammocount = Ammo
			elseif Equipped == "secondary" then
				Weapon.ammocount2 = Ammo
			end
			Utility.Weapon:UpdateInterface()
		end
		function Utility.Weapon:UpdateStoredAmmo(Ammo)
			local Equipped = Cache.Client.equipped
			local Weapon = debug.getupvalue(Cache.Client.loadammo, 1)
			if Equipped == "primary" then
				Weapon.primarystored = Ammo
			elseif Equipped == "secondary" then
				Weapon.secondarystored = Ammo
			end
			Utility.Weapon:UpdateInterface()
		end

		
		function Utility.IsHitBox(Name)
			if Cache.HitModifiers[Name] ~= nil then
				return true
			end
			return false
		end

		
		function Utility.SetCharacter(model)
			local character = LocalPlayer.Character
			if not character then return end

			for _, v in ipairs(_GetChildren(character)) do
				if _IsA(v, "Accessory") then
					_Destroy(v)
				end
			end

			for _, part in ipairs(_GetDescendants(character)) do
				if _IsA(part, "BasePart") then
					local newPart = _FindFirstChild(model, part.Name, true)
					if newPart and _IsA(newPart, "BasePart") then
						part.Color = newPart.Color
						part.Transparency = newPart.Transparency

						local colorVal = _Instancenew("Color3Value")
						colorVal.Name = "OriginalColor"
						colorVal.Value = part.Color
						colorVal.Parent = part

						local materialVal = _Instancenew("StringValue")
						materialVal.Name = "OriginalMaterial"
						materialVal.Value = part.Material.Name
						materialVal.Parent = part
					end
				end
			end
			local head = _FindFirstChild(character, "Head")
			local newHead = _FindFirstChild(model, "Head")
			if head and newHead then
				local headDecal = _FindFirstChildOfClass(head, "Decal")
				local newHeadDecal = _FindFirstChildOfClass(newHead, "Decal")
				if headDecal and newHeadDecal then
					headDecal.Texture = newHeadDecal.Texture
				end
			end
			local function copyClothing(className)
				local old = _FindFirstChildOfClass(character, className)
				if old then _Destroy(old) end
				local new = _FindFirstChildOfClass(model, className)
				if new then
					local clone = _Clone(new)
					clone.Parent = character

					local value = _Instancenew("StringValue")
					value.Name = "OriginalTexture"
					value.Value = clone[className .. "Template"]
					value.Parent = clone
				end
			end

			copyClothing("Shirt")
			copyClothing("Pants")

			for _, accessory in ipairs(_GetChildren(model)) do
				if _IsA(accessory, "Accessory") then
					local cloned = _Clone(accessory)
					local handle = _FindFirstChild(cloned, "Handle")
					if handle then
						for _, weld in ipairs(_GetChildren(handle)) do
							if _IsA(weld, "Weld") and weld.Part1 then
								local match = _FindFirstChild(character, weld.Part1.Name)
								if match then
									weld.Part1 = match
								end
							end
						end

						local colorVal = _Instancenew("Color3Value")
						colorVal.Name = "OriginalColor"
						colorVal.Value = handle.Color
						colorVal.Parent = handle

						local materialVal = _Instancenew("StringValue")
						materialVal.Name = "OriginalMaterial"
						materialVal.Value = handle.Material.Name
						materialVal.Parent = handle
					end
					cloned.Parent = character
				end
			end
		end
		function Utility.SetCharacterByUserId(userId)
			local model = Players:CreateHumanoidModelFromUserId(userId)
			for _, descendant in ipairs(_GetDescendants(model)) do
				if _IsA(descendant, "ParticleEmitter") or
				_IsA(descendant, "Trail") or
				_IsA(descendant, "Beam") or
				_IsA(descendant, "Fire") or
				_IsA(descendant, "Sparkles") or
				_IsA(descendant,"Smoke") or
				_IsA(descendant, "Highlight") then
					_Destroy(descendant)
				end
			end
			if _FindFirstChild(model, "FullOutline") then
				_Destroy(model.FullOutline)
			end
			model.Name = "TargetCharacter"
			model:WaitForChild("Humanoid")
			Utility.SetCharacter(model)
			_Destroy(model)
		end

		function Utility.FakeShoot(Params)
			local anim1 = debug.getupvalue(Cache.Client.stopplant, 4)
			local anim2 = debug.getupvalue(Cache.Client.usethatgun, 4)
			local fgun = Cache.Client.fgun
			local gun = _FindFirstChild(LocalPlayer.Character, "Gun")
			local arms = _FindFirstChild(camera, "Arms")

			if anim1 and Cache.Client.fgun ~= "none" then
				anim1:Play()
				replicatedStorage.Events.ReplicateAnimation:FireServer("Fire")

				if gun then
					local s = _FindFirstChild(gun, "SShoot") or _FindFirstChild(gun, "Shoot") or _FindFirstChild(gun, "Shoot1")
					if s then
						local snd = _Instancenew("Sound", camera)
						snd.SoundId = s.Value
						snd.PlayOnRemove = true
						_Destroy(snd)

						local flash = _FindFirstChild(gun, "Flash")
						local armsFlash = arms and _FindFirstChild(arms, "Flash")
						if flash and armsFlash then
							Cache.Client.createparticle("muzzle", armsFlash)
							Events.RemoteEvent:FireServer({ "createparticle", "muzzle", flash })

							if Params then
								for _, v in next, Params do
									Cache.Client.hitobject(v["Hit"], v["Enter"], v["Normal"], Cache.Client.fgun, false)
									Cache.Client.hitobject(v["Hit"], v["Exit"], -v["Normal"], Cache.Client.fgun, false)
								end
							end
						end
					end
				end
			end

			if anim2 then anim2:Play() end
			
			Utility.Weapon:UpdateAmmo(Utility.Weapon:GetStoredAmmo() - 1)
		end
		function Utility.DecryptPosition(pos)
			return _Vector3New(((pos.X / 13 - 1325) / 4) + 74312, ((pos.Y + 4201432) / 4) - 3183421, (pos.Z / 2 + 581357) / 41)
		end
		function Utility.CreateTracer(To,From,Color,Transparency,Width,Lifetime,Texture,TextureLength,TextureSpeed,FaceCamera,LightEmission,LightInfluence,Brightness,Beam_2,Color2,Transparency2)

			local part1 = _Instancenew("Part", workspace.Ray_Ignore)
			local part2 = _Instancenew("Part", workspace.Ray_Ignore)
			local beam = _Instancenew("Beam", part1)
			local beam2 = _Instancenew("Beam", part1)
			local attachment1 = _Instancenew("Attachment", part1)
			local attachment2 = _Instancenew("Attachment", part2)
		
			part1.Transparency = 1
			part1.Position = To
			part1.CanCollide = false
			part1.Anchored = true
		
			part2.Position = From
			part2.Transparency = 1
			part2.CanCollide = false
			part2.Anchored = true
		
			beam.Color = _ColorSequenceNew({_ColorSequenceKeypointNew(0, Color), _ColorSequenceKeypointNew(1, Color)})
			beam.Transparency = _NumberSequenceNew({_NumberSequenceKeypointNew(0, Transparency), _NumberSequenceKeypointNew(1, Transparency)})

			beam.Width0 = 0.0275*Width
			beam.Width1 = 0.0275*Width
			beam.FaceCamera = FaceCamera
			beam.Texture = Cache.TracerTextures[Texture]
			beam.TextureLength = TextureLength
			beam.TextureSpeed = TextureSpeed
			beam.LightEmission = LightEmission
			beam.LightInfluence = LightInfluence
			beam.Brightness = Brightness
			beam.Attachment0 = attachment1
			beam.Attachment1 = attachment2
		
			if Beam_2 then
				beam2.Color = _ColorSequenceNew({_ColorSequenceKeypointNew(0, Color2), _ColorSequenceKeypointNew(1, Color2)})
				beam2.Transparency = _NumberSequenceNew({_NumberSequenceKeypointNew(0, Transparency2), _NumberSequenceKeypointNew(1, Transparency2)})
				beam2.Width0 = 0.0125*Width
				beam2.Width1 = 0.0125*Width
				beam2.Brightness = Brightness
				beam2.FaceCamera = FaceCamera
				beam2.LightEmission = LightEmission
				beam2.LightInfluence = LightInfluence
				beam2.TextureLength = TextureLength
				beam2.TextureSpeed = TextureSpeed
				beam2.Texture = Cache.TracerTextures[Texture]
				beam2.Attachment0 = attachment1
				beam2.Attachment1 = attachment2
			else
				_Destroy(beam2)
			end
				
			_TaskSpawn(function()
				_TaskWait(Lifetime)
				local duration = Flags["BulletTracerFadetime"].value
				if Flags["BulletTracerFadeMethod"].value["Horizontal collapse"] then
					local originalWidth0beam1 = beam.Width0
					local originalWidth1beam1 = beam.Width1
					local originalWidth0beam2 = beam2 and beam2.Width0 or 0
					local originalWidth1beam2 = beam2 and beam2.Width1 or 0

					local passed = 0
					while passed < duration do
						local ratio = 1 - (passed / duration)
						beam.Width0 = originalWidth0beam1 * ratio
						beam.Width1 = originalWidth1beam1 * ratio
						if beam2 then
							beam2.Width0 = originalWidth0beam2 * ratio
							beam2.Width1 = originalWidth1beam2 * ratio
						end
						passed = passed + _TaskWait()
					end
				elseif Flags["BulletTracerFadeMethod"].value["Vertical collapse"] then
					local passed = 0

					while passed < duration do
						local ratio = passed / duration 

						local newFrom = From:Lerp(To, ratio)
						attachment2.WorldPosition = newFrom

						passed = passed + _TaskWait()
					end
				end

				_Destroy(part1)
				_Destroy(part2)
			end)
		end
		function Utility.saveViewmodel()
			Utility.chammedobjects["Weapon Objects"] = {} 
			Utility.chammedobjects["Arms"] = {}
			Utility.chammedobjects["Clothing"] = {}
			Utility.chammedobjects["Original"] = {}
			if LocalPlayer.Status.Alive.Value == false then
				return
			end
			if _FindFirstChild(camera, "Arms") then
				for i, v in next, (_GetChildren(camera.Arms)) do
					if _IsA(v, "Model") and _FindFirstChild(v, "Right Arm") and _FindFirstChild(v, "Left Arm") then
						_TableInsert(Utility.chammedobjects["Arms"], v["Right Arm"])
						_TableInsert(Utility.chammedobjects["Arms"], v["Left Arm"])

						_TableInsert(Utility.chammedobjects["Clothing"], _FindFirstChild(v["Right Arm"], "RGlove") or _FindFirstChild(v["Right Arm"], "Glove"))
						_TableInsert(Utility.chammedobjects["Clothing"], _FindFirstChild(v["Left Arm"], "LGlove") or _FindFirstChild(v["Left Arm"], "Glove"))

						_TableInsert(Utility.chammedobjects["Clothing"], _FindFirstChild(v["Right Arm"], "Sleeve"))
						_TableInsert(Utility.chammedobjects["Clothing"], _FindFirstChild(v["Left Arm"], "Sleeve"))
					elseif (_IsA(v, "BasePart") or _IsA(v, "MeshPart") or _IsA(v, "SpecialMesh") or _IsA(v, "SurfaceAppearance")) and v.Transparency == 0 or v.Name == "HumanoidRootPart" then
						if v.Name == "HumanoidRootPart" then 
							v.Transparency = 1
						else
							_TableInsert(Utility.chammedobjects["Weapon Objects"], v)
							if _FindFirstChild(v, "SurfaceAppearance") then
								_TableInsert(Utility.chammedobjects["Weapon Objects"], _FindFirstChild(v, "SurfaceAppearance"))
							end
						end
					end
				end
			else
				return
			end
			for idx, objects in next, ({Utility.chammedobjects["Arms"], Utility.chammedobjects["Clothing"], Utility.chammedobjects["Weapon Objects"]}) do
				for i, v in next, (objects) do 
					if _IsA(v, "BasePart") or _IsA(v, "MeshPart") or _IsA(v, "SpecialMesh") then
						local property = { 
							Color = v.Color,
							Material = v.Material,
							Reflectance = v.Reflectance,
							Transparency = v.Transparency
						}
						if _IsA(v, "MeshPart") then
							property.TextureID = v.TextureID
						elseif _IsA(v, "SpecialMesh") then
							property.TextureId = v.TextureId
						end
						Utility.chammedobjects["Original"][v] = property
						if _FindFirstChildOfClass(v, "MeshPart") or _FindFirstChildOfClass(v, "SpecialMesh") then
							local HiddenMesh = _FindFirstChildOfClass(v, "MeshPart") or _FindFirstChildOfClass(v, "SpecialMesh")
							if _IsA(HiddenMesh, "MeshPart") then
								Utility.chammedobjects["Original"][HiddenMesh] = {
									TextureID = HiddenMesh.TextureID
								}
							else
								Utility.chammedobjects["Original"][HiddenMesh] = {
									TextureId = HiddenMesh.TextureId,
									VertexColor = HiddenMesh.VertexColor
								}
							end
						end
					elseif _IsA(v, "SurfaceAppearance") then
						Utility.chammedobjects["Original"][v] = {
							Parent = v.Parent
						}
					end
				end
			end
		end
		function Utility.GetSelectedName(values)
			for i, v in pairs(values) do
				if v then
					return i
				end
			end
		end
		function Utility.LocalPlayerChams()
			if not (Flags["ThirdPerson_Enabled"].value and Flags["ThirdPerson_Enabled_Key"].value and Flags["Local_Chams"].value and Utility.IsPlayerAlive(LocalPlayer.Character)) then
				return
			end
			local valuematerial = Utility.GetSelectedName(Flags["Local_Chams_Material"].value)
			local character = LocalPlayer.Character
			local material = Utility.materials[valuematerial]
			local color = Flags["Local_Chams_Color"].color
			local transparency = Flags["Local_Chams_Transparency"].value / 100
			local texture = ""

			if valuematerial == "Ghost" then
				texture = forcefieldanimations[Utility.GetSelectedName(Flags["Local_Chams_Texture"].value)]
			end

			local function applyChamsToPart(part)
				if part.Name == "HumanoidRootPart" or part.Name == "___" or part.Transparency == 1 then return end
				part.Color = color
				part.Material = material
				part.Transparency = transparency

				if _IsA(part, "UnionOperation") then
					part.UsePartColor = true
				elseif _IsA(part, "MeshPart") then
					part.TextureID = texture
				end

				local mesh = _FindFirstChildOfClass(part, "SpecialMesh")
				if mesh then
					mesh.VertexColor = _Vector3New(color.R, color.G, color.B)
					mesh.TextureId = texture
				end
			end

			local function applyChamsToAccessory(accessory)
				local handle = _FindFirstChild(accessory, "Handle")
				if not handle then return end

				for _, child in pairs(_GetChildren(accessory)) do
					if _IsA(child, "BasePart") or _IsA(child, "MeshPart") or _IsA(child, "SpecialMesh") then
						child.Color = color
						child.Material = material
						child.Transparency = transparency

						if _IsA(child, "MeshPart") then
							child.TextureID = texture
						elseif _IsA(child, "SpecialMesh") then
							child.TextureId = texture
							child.VertexColor = _Vector3New(color.R, color.G, color.B)
						end

						local mesh = _FindFirstChildOfClass(child, "MeshPart") or _FindFirstChildOfClass(child, "SpecialMesh")
						if mesh then
							if _IsA(mesh, "MeshPart") then
								mesh.Color = color
								mesh.Material = material
								mesh.Reflectance = child.Reflectance
								mesh.TextureID = texture
							else
								mesh.VertexColor = _Vector3New(color.R, color.G, color.B)
								mesh.TextureId = texture
							end
						end
					end
				end
			end

			for _, v in pairs(_GetDescendants(character)) do
				if _IsA(v, "BasePart") then
					applyChamsToPart(v)
				elseif _IsA(v, "Accessory") then
					applyChamsToAccessory(v)
				elseif _IsA(v, "Shirt") or _IsA(v, "Pants") then
					_Destroy(v)
				end
			end
		end
		function Utility.updateWeaponChams()
			for i, v in next, (Utility.chammedobjects["Colored Weapons"]) do
				local originalproperties = Utility.chammedobjects["Original"][v]
				if originalproperties then
					for i2, v2 in next, (originalproperties) do
						v[i2] = v2
					end
				end
			end
			Utility.chammedobjects["Colored Weapons"] = {}

			if Flags["Model_Changer_Weapon"].value then
				local Animation = ""
				local thing = Utility.chammedobjects["Colored Weapons"]
				local material = Utility.GetSelectedName(Flags["Model_Changer_Material"].value)
				if material == "Ghost" then
					Animation = forcefieldanimations[Utility.GetSelectedName(Flags["Model_Changer_Texture"].value)]
				end
				for i, v in next, (Utility.chammedobjects["Weapon Objects"]) do
					if _IsA(v, "Part") or _IsA(v, "MeshPart") or _IsA(v, "SpecialMesh") then
						thing[1 + #thing] = v
						v.Transparency = Flags["Model_Changer_Transperency"].value/100
						if v.Name ~= "Dot" then
							v.Color = Flags["Model_Changer_Color"].color
							v.Material = Utility.materials[material]
							v.Reflectance = Flags["Model_Changer_Reflectance"].value/100
							if _IsA(v, "MeshPart") then
								v.TextureID = Animation
							end
							if _IsA(v, "SpecialMesh") then
								v.TextureId = Animation
							end
							local HiddenMesh = _FindFirstChildOfClass(v, "MeshPart") or _FindFirstChildOfClass(v, "SpecialMesh")
							if HiddenMesh ~= nil then
								if _IsA(HiddenMesh, "MeshPart") then
									HiddenMesh.TextureID = Animation
									HiddenMesh.Color = v.Color
									HiddenMesh.Material = v.Material
									HiddenMesh.Reflectance = v.Reflectance
								else
									HiddenMesh.TextureId = Animation
									HiddenMesh.VertexColor = _Vector3New(v.Color.r, v.Color.g, v.Color.b)
								end

								thing[1 + #thing] = HiddenMesh
							end
						end
					elseif _IsA(v, "SurfaceAppearance") then
						thing[1 + #thing] = v
						v.Parent = nil
					end
				end
			end
		end

		function Utility.updateArmChams() 
			for i, v in next, (Utility.chammedobjects["Colored Arms"]) do
				local originalproperties = Utility.chammedobjects["Original"][v]
				if originalproperties then
					for i2, v2 in next, (originalproperties) do
						v[i2] = v2
					end
				end
			end
			Utility.chammedobjects["Colored Arms"] = {}
			if Flags["Arms_Changer"].value then
				local thing = Utility.chammedobjects["Colored Arms"] 
				local Animation = ""
				local material = Utility.GetSelectedName(Flags["Arms_Changer_Material"].value)
				if material == "Ghost" then
					Animation = forcefieldanimations[Utility.GetSelectedName(Flags["Arms_Changer_Texture"].value)]
				end
				for idx, objects in next, ({Utility.chammedobjects["Arms"], Utility.chammedobjects["Clothing"]}) do
					for i, v in next, (objects) do
						if _IsA(v, "BasePart") or _IsA(v, "MeshPart") or _IsA(v, "SpecialMesh") then
							v.Color = Flags["Arms_Changer_Color".. idx].color
							v.Transparency = Flags["Arms_Transparency".. idx].value/100
							v.Material = Utility.materials[material]
							thing[1 + #thing] = v
							v.Reflectance = idx == 1 and Flags["Arms_Reflective"].value/100 or Flags["Arms_Reflective_Sleeve"].value/100
							if  _IsA(v, "SpecialMesh") then
								v.VertexColor = _Vector3New(v.Color.r, v.Color.g, v.Color.b)
								if _IsA(v, "MeshPart") then
									v.TextureID = Animation
								else
									v.TextureId = Animation
								end
							end
							if _FindFirstChildOfClass(v, "MeshPart") or _FindFirstChildOfClass(v, "SpecialMesh") then
								local HiddenMesh = _FindFirstChildOfClass(v, "MeshPart") or _FindFirstChildOfClass(v, "SpecialMesh")

								thing[1 + #thing] = HiddenMesh
								if _IsA(HiddenMesh, "MeshPart") then
									HiddenMesh.TextureID = Animation
								else
									HiddenMesh.VertexColor = _Vector3New(v.Color.r, v.Color.g, v.Color.b)
									HiddenMesh.TextureId = Animation
								end
							end
						end
					end
				end
			end
		end

		Flags["Local_Chams"].changed:Connect(Utility.LocalPlayerChams)
		Flags["ThirdPerson_Enabled"].changed:Connect(Utility.LocalPlayerChams)
		Flags["ThirdPerson_Enabled_Key"].changed:Connect(Utility.LocalPlayerChams)
		Flags["Local_Chams_Color"].changed:Connect(Utility.LocalPlayerChams)
		Flags["Local_Chams_Material"].changed:Connect(Utility.LocalPlayerChams)
		Flags["Local_Chams_Texture"].changed:Connect(Utility.LocalPlayerChams)
		Flags["Local_Chams_Transparency"].changed:Connect(Utility.LocalPlayerChams)

		local CanApplyChamses = true
		camera.ChildAdded:Connect(function()
			CanApplyChamses = false
			_TaskWait()
			Utility.saveViewmodel()
			CanApplyChamses = true
			
		end)

		RunService.Stepped:Connect(function()
			if Flags["ThirdPerson_Enabled"].value and Flags["ThirdPerson_Enabled_Key"].value then
				Utility.LocalPlayerChams()
				return
			end
			if CanApplyChamses == false then
				return
			end

			Utility.updateArmChams()
			Utility.updateWeaponChams()
		end)
		function Utility.CreateImpact(To,Rotation,Color,Transparency,Material,Size,Lifetime)
			local impact = _Instancenew("Part", workspace.Ray_Ignore)
			impact.Transparency = Transparency
			impact.Color = Color
			impact.Size = _Vector3New(Size/2,Size/2,Size/2)
			impact.Position = To
			impact.Rotation = Rotation.Rotation or Rotation or _Vector3New()
			impact.CanCollide = false
			impact.Anchored = true
			impact.Material = _Materials[Material]
			_TaskSpawn(function()
				_TaskWait(Lifetime)
				for i=Transparency, 1.05, 0.05 do _TaskWait()
					impact.Transparency = i
				end     
				_Destroy(impact)
			end)
		end       
	end
	do --RageBot
		local Status = workspace:WaitForChild("Status")
		local PreparationObj = Status:WaitForChild("Preparation")
		local start  = false
		local PREPARATION_DURATION = 6

		local prepActive = false
		local prepStartTime = 0
		local prepEndTime = 0
		local function GetPing()
			return game.Stats.PerformanceStats.Ping:GetValue() / 1000
		end
		local function CalculateEndTime()
			local ping = GetPing()
			prepEndTime = prepStartTime + PREPARATION_DURATION - (ping * 2) - Flags["RageBot_Ping_Compensation_Modifier"].value / 1000
		end
		PreparationObj:GetPropertyChangedSignal("Value"):Connect(function()
			if PreparationObj.Value then
				prepActive = true
				prepStartTime = workspace:GetServerTimeNow()
				CalculateEndTime()
			else
				prepActive = false
				prepStartTime = 0
				prepEndTime = 0
			end
		end)

		local function IsRoundStarted()
			if not prepActive then return true end
			local remaining = prepEndTime - workspace:GetServerTimeNow()
			return remaining <= 0
		end
		RunService.Heartbeat:Connect(function()
			if prepActive then
				CalculateEndTime()

				start = IsRoundStarted()
			end
		end) 


		local LastShoot = _Tick()
		local matMod = {
			[_Materials.DiamondPlate] = 3,
			[_Materials.CorrodedMetal] = 2, [_Materials.Metal] = 2,
			[_Materials.Concrete] = 2, [_Materials.Brick] = 2,
			[_Materials.Wood] = 0.1, [_Materials.WoodPlanks] = 0.1
		}

		local CalculateDamageModifier = function(from, to, weapon, ignored)
			local Ignore = table.clone(ignored)
			local maxPen = weapon.Penetration.Value * 0.01
			local maxWalls = Flags.RageBot_AutoWall.value and Flags.RageBot_MaxWalls.value or 0
			local penModded = Flags.RageBot_PenModded.value
			local penPassed, walls = 0, 0
			local realDir = to - from
			local dist = realDir.Magnitude
			local range = weapon.Range.Value * 0.0625
			local dir = realDir.Unit * _MathMin(dist, range)
			local unit = realDir.Unit



			local enterParam = _RaycastParamsNew()
			enterParam.FilterType = Enum.RaycastFilterType.Blacklist
			enterParam.IgnoreWater = true
			enterParam.FilterDescendantsInstances = Ignore

			local exitParam = _RaycastParamsNew()
			exitParam.FilterType = Enum.RaycastFilterType.Whitelist

			while true do
				local hit = _Raycast(workspace, from, dir, enterParam)
				if not hit then return true, (1 - penPassed / maxPen), walls > 0 end

				local wall, pos, mat = hit.Instance, hit.Position, hit.Instance.Material
				Ignore[#Ignore + 1] = wall
				if wall.Name == "nowallbang" then return end

				local mod = matMod[mat] or 1
				if wall.Name == "Grate" or _FindFirstChild(wall.Parent, "Humanoid") then
					mod = 0.1
					local hum = _FindFirstChild(wall.Parent, "Humanoid")
					if hum then Ignore[#Ignore + 1] = wall.Parent end
				end
				if wall.Transparency == 1 or not wall.CanCollide or wall.Name == "Glass" or wall.Name == "Cardboard" or wall.Parent.Name == "Hitboxes" then
					mod = 0
				end
				local partMod = _FindFirstChild(wall, "PartModifier")
				if partMod then mod = _tonumber(partMod.Value) end
				if mod >= 100 then return end

				if mod > 0 then
					mod /= penModded
					local maxDepth = (maxPen - penPassed) / mod
					local depth = _MathMin(maxDepth, (pos - to).Magnitude)
					if depth <= 0 then return end

					exitParam.FilterDescendantsInstances = { wall }
					local exit = _Raycast(workspace, pos + unit * depth, -unit * depth, exitParam)
					if not exit then return end

					penPassed += (depth - exit.Distance) * mod
					walls += 1
				end
				if penPassed >= maxPen or walls >= maxWalls then break end
				enterParam.FilterDescendantsInstances = Ignore
			end
		end
		Utility.AutoWall = CalculateDamageModifier
		
		local prepWaitUntil2 = 0
		RunService.RenderStepped:Connect(function()

			local char = LocalPlayer.Character
			local now = _Tick()
			local MultiPlayer = Flags["KillAll_DelayAdditional"].value / 1000
			if workspace.Status.Preparation.Value 
				and Flags["KillAll_Preparation"].value
			then
				if Flags["KillAll_WaitForRoundStartMode"].value["Ping compensation NEW"] then	
					if not IsAlreadyStartedAtServer(Flags["KillAll_DelayAdditional"].value  / 100) then
						return
					end
				elseif Flags["KillAll_WaitForRoundStartMode"].value["Ping compensation OLD"] then
					if prepWaitUntil2 == 0 then
						local Ping = game.Stats.PerformanceStats.Ping:GetValue()
						local Ms = Ping / 1000 
						prepWaitUntil2 = Now + PREPARATION_DURATION - Ms - MultiPlayer
					end
					if Now < prepWaitUntil2 then
						return 
					end
				end
			else
				prepWaitUntil2 = 0
			end

			if not Flags["KillAll_Enabled"].value then return end

			if not Utility.IsPlayerAlive(char) or workspace.Status.Preparation.Value and Flags["KillAll_Preparation"].value and Flags["KillAll_WaitForRoundStartMode"].value["Preparation start"] then return end 

			local weapon = Cache.Client.fgun
			if not weapon or weapon == "none" then return end
			
			for _, p in next, PlayerModule.storage do
				if p.alive and not p.god and p.enemy then
					HitPart:FireServer(
						p.head, 
						{X = 0/0, Y = 0/0, Z = 0/0},
						"AWP",
						1,
						nil,
						nil,
						400, true, false,
						_Vector3New(), 1, _Vector3New(), true, true, true, true
					)
				end
			end
		end)
		local prepWaitUntil = 0
		RunService.RenderStepped:Connect(function()
			local Character = LocalPlayer.Character
			local Now = _Tick()

			if workspace.Status.Preparation.Value 
				and Flags["RageBot_Preparation"].value
			then
				if Flags["RageBot_WaitForRoundStartMode"].value["Ping compensation NEW"] then
					if not start then
						return
					end
				elseif Flags["RageBot_WaitForRoundStartMode"].value["Ping compensation OLD"] then
					if PrepWaitUntil == 0 then
						local Modifier = Flags["RageBot_Ping_Compensation_Modifier"].value / 1000
						local Ping = game.Stats.PerformanceStats.Ping:GetValue()
						local Ms = Ping / 1000 
						PrepWaitUntil = Now + PREPARATION_DURATION - Ms - Modifier
					end
					if Now < PrepWaitUntil then
						return 
					end
				end
			else
				PrepWaitUntil = 0
			end

			-- Absolute bullshit
			if not Flags.RageBot_Enabled.value  
				or not Flags.RageBot_Enabled_Key.value 
				or not Utility.IsPlayerAlive(Character) 
			then
				RageBot.Target.TargetPosition = nil
				RageBot.Target.Hit = nil
				RageBot.Target.TargetPlayer = nil
				RageBot.Target.Origin = nil
				return
			end

			local Weapon = Cache.Client.fgun
			if Weapon and _FindFirstChild(Weapon, "Melee") or not _FindFirstChild(Weapon, "RangeModifier") then 
				return 
			end

			local CameraCF = camera.CFrame
			local CameraPos, CameraLook = CameraCF.Position, CameraCF.LookVector
			local Origin = (Flags.RageBot_Origins.value["Camera"] and CameraPos)
				or (_FindFirstChild(Character, "Head") and Character.Head.Position)
			if not Origin then return end

			local EnemiesFound = false
			local UseFov, MaxFov = Flags.RageBot_FOV.value ~= 180, Flags.RageBot_FOV.value
			
			for _, Player in next, PlayerModule.storage do
				if not (Player.alive and Player.enemy) or Player.protected or Player.god then continue end

				local RootPart = _FindFirstChild(Player.character, "HumanoidRootPart")
				if UseFov and (not RootPart or _MathDeg(math.acos(CameraLook:Dot((RootPart.Position - CameraPos).Unit))) * 2 >= MaxFov) then 
					continue 
				end

				local TargetCharacter = Player.player.Character
				if not TargetCharacter then continue end
				if workspace.Status.Preparation.Value 
					and Flags.RageBot_Preparation.value 
					and Flags["RageBot_WaitForRoundStartMode"].value["Preparation start"] 
				then 
					continue 
				end

				EnemiesFound = true

				local FireRate = Flags.RageBot_FireRate.value 
					and (Flags.RageBot_FireRateValue.value / 100) 
					or (Weapon.FireRate and Weapon.FireRate.Value or 0.1)
				if Now - LastShoot < FireRate then continue end

				RageBot.Target.TargetPosition = nil
				RageBot.Target.Hit = nil
				RageBot.Target.TargetPlayer = nil
				RageBot.Target.Origin = nil

				RageBot.Target.TargetPlayer = TargetCharacter

				local IgnoreList = {
					camera, workspace.Ray_Ignore, workspace.Debris, 
					workspace.Map.Clips, workspace.Map.SpawnPoints, 
					Character, TargetCharacter
				}
				local Scan, Valid = {}, {}

				for PartGroup, Enabled in next, Flags.RageBot_TargetParts.value do
					if Enabled then
						for _, PartName in next, Cache.hitgroups[PartGroup] do
							local Part = _FindFirstChild(TargetCharacter, PartName)
							if Part then
								Scan[#Scan+1], Valid[Part.Name] = {Part, Part.Position}, {Part, Part.Position}
							end
						end
					end
				end

				-- ForwardTrack
				if Flags.ForwardTrack_Enabled.value and Player.velocity.Magnitude > 0.01 then
					local Params = _RaycastParamsNew()
					Params.IgnoreWater = true
					Params.FilterType = Enum.RaycastFilterType.Whitelist
					Params.FilterDescendantsInstances = Flags.ForwardTrack_Ignore_Walls.value and {} or {workspace.Map}

					local Ping = game.Stats.PerformanceStats.Ping:GetValue() * 2
					local Extrapolate = Player.velocity * ((Flags.ForwardTrack_Ticks.value + Ping) / 1000)
					local Steps, TargetPart = Flags.ForwardTrack_Steps_to_Scan.value, Player.head

					if TargetPart then
						for Step = 1, Steps do  
							local Offset = Extrapolate * (Step / Steps)
							local Data = Valid["Head"]
							if Data then
								local Inst, Center = Data[1], Data[2]
								local Hit = _Raycast(workspace, Center, Offset, Params)
								Scan[#Scan + 1] = {Inst, Hit and Hit.Position or Center + Offset, "Extrapolated", Step}
							end
						end
					end
				end

				-- Camera resolver
				if Flags.Camera_Resolver.value then
					local CamPos = Player.player.CameraCF.Value.p
					if CamPos == CamPos and CamPos ~= _Vector3New() 
						and Player.camcf ~= Player.lastcameracf 
						and (CamPos - Player.rootpart.CFrame.p).Magnitude > 8 
					then
						local Ref = Scan[1][1]
						Scan[#Scan+1], Valid[Ref.Name] = {Ref, CamPos}, {Ref, CamPos}
					end
				end

				-- HitScan origins
				local Origins = { {Origin} }
				local BaseCF = _CFrameNew(Origin, Origin + camera.CFrame.LookVector.unit)
				local Factor = Flags.RageBot_HitScan_Modifier.value

				if Flags.RageBot_HitScan.value then
					local Points = Flags.RageBot_HitScan_Points.value
					if Points.Up then Origins[#Origins+1] = {(BaseCF * _CFrameNew(0, Factor, 0)).p} end
					if Points.Down then Origins[#Origins+1] = {(BaseCF * _CFrameNew(0, -Factor, 0)).p} end
					if Points.Left then Origins[#Origins+1] = {(BaseCF * _CFrameNew(-Factor, 0, 0)).p} end
					if Points.Right then Origins[#Origins+1] = {(BaseCF * _CFrameNew(Factor, 0, 0)).p} end
					if Points.Backward then Origins[#Origins+1] = {(BaseCF * _CFrameNew(0, 0, Factor)).p} end
					if Points.Forward then Origins[#Origins+1] = {(BaseCF * _CFrameNew(0, 0, -Factor)).p} end
					if Points.Towards then Origins[#Origins+1] = {(BaseCF + (_CFrameNew(Origin, Player.currentPosition).LookVector.Unit * Factor)).p} end
				end

				-- AutoPeek
				if Flags.RageBot_AutoPeek.value and Flags.RageBot_AutoPeek_Key.value then
					local _, PeekHit = workspace:FindPartOnRayWithWhitelist(_RayNew(Origin, camera.CFrame.LookVector.unit * 21), {workspace.Map}, true)
					if PeekHit then Origins[#Origins+1] = {PeekHit - camera.CFrame.LookVector.unit, true} end
				end

				-- Scan groups
				local ScanGroups = {}
				local Groups = _MathMin(#Origins, 8)
				local PointsPerGroup = _MathFloor(Flags.RageBot_HitScan_MaximumPoints.value / Groups)

				for I = 1, Groups do
					local OriginIndex = #Origins > 1 and _MathRandom(#Origins) or 1
					local O = Origins[OriginIndex]
					local GroupPoints = {}

					for J = 1, _MathMin(#Scan, PointsPerGroup) do
						local PointIndex = #Scan > 1 and _MathRandom(#Scan) or 1
						GroupPoints[#GroupPoints+1] = Scan[PointIndex]
						_TableRemove(Scan, PointIndex)
					end

					_TableRemove(Origins, OriginIndex)
					ScanGroups[#ScanGroups+1] = {origins = {O}, points = GroupPoints}
				end

				-- Damage calculation
				local BaseDamage = Weapon.DMG.Value
				local ArmorPen = Weapon.ArmorPenetration.Value * 0.01
				local RangeMod = Weapon.RangeModifier.Value
				local Kevlar, Helmet = _FindFirstChild(TargetCharacter, "Kevlar"), _FindFirstChild(TargetCharacter, "Helmet")
				local MinDamage, Scans, Mods = Flags.RageBot_MinDmg.value, {}, Cache.HitModifiers

				for _, Group in next, ScanGroups do
					for _, OriginData in next, Group.origins do
						local From, AutoPeekFlag = OriginData[1], OriginData[2]
						for _, Point in next, Group.points do
							local Part, Pos = Point[1], Point[2]
							local Mod = Mods[Part.Name]
							if Mod then
								local Can, DMod, Wallbang, Params = CalculateDamageModifier(From, Pos, Weapon, IgnoreList)
								if Can and DMod then
									local Damage = Weapon.Bullets.Value * BaseDamage * Mod * DMod
									if Kevlar and (not _StringFind(Part.Name, "Head") or Helmet) then
										Damage *= ArmorPen
									end
									Damage *= _MathClamp((RangeMod / 100) ^ ((From - Pos).Magnitude / 34.7), 0.45, 1)
									if Damage > MinDamage then
										Scans[#Scans+1] = {
											Origin = From, HitTarget = Part, ShouldWeTP = AutoPeekFlag,
											IsWall = Wallbang, Modifier = DMod, Taked = Damage, WallsData = Params
										}
									end
								end
							end
						end
					end
				end

				if #Scans == 0 then continue end
				if #Scans > 1 then _TableSort(Scans, function(A, B) return A.Taked > B.Taked end) end

				local TargetInfo = Scans[1]
				if not TargetInfo then continue end

				RageBot.Target.TargetPosition = TargetInfo.HitTarget.Position
				RageBot.Target.Hit = TargetInfo.HitTarget
				RageBot.Target.Origin = TargetInfo.Origin	

				HitPart:FireServer(
					TargetInfo.HitTarget,
					Flags.RageBot_Prediction.value and {X = 0/0, Y = 0/0, Z = 0/0} 
						or Utility.CryptPosition(TargetInfo.HitTarget.Position),
					Weapon.Name,
					0,
					_FindFirstChild(LocalPlayer.Character, "Gun"),
					nil, TargetInfo.Modifier, false, TargetInfo.IsWall,
						_Vector3New(), 1, _Vector3New(), true, true, true, true
				)
				if Flags["RageBot_HitLogs"].value then	
					ui:createnotification({
						text = "Shot at " .. RageBot.Target.TargetPlayer.Name .. 
							" for " .. _tostring(_MathFloor(TargetInfo.Taked + 0.5)) .. 
							" in the " .. TargetInfo.HitTarget.Name .. 
							" (" .. _tostring(_MathClamp(_MathFloor(RageBot.Target.TargetPlayer.Humanoid.Health - (TargetInfo.Taked) + 0.5), 0, 100)) .. "hp remaining)",
						lifetime = Flags["RageBot_HitLogs_LifeTime"].value, 
						priority = 0
					})
				end

				if TargetInfo.ShouldWeTP then
					Character.HumanoidRootPart.Position = TargetInfo.Origin
				end
				if Flags.RageBot_FakeShoot.value then
					Utility.FakeShoot(TargetInfo.WallsData)
				end
				LastShoot = Now 
			end

			if not EnemiesFound then
				RageBot.Target.TargetPosition = nil
				RageBot.Target.CryptedPosition = nil
				RageBot.Target.Hit = nil
				RageBot.Target.TargetPlayer = nil
				RageBot.Target.Origin = nil
			end
		end)


	end
	do --AntiAims
	
		function AntiAim.PitchControl()
			local pitchMode = Flags["AntiAim_Pitch"].value
			local angle = 0
	
			if pitchMode["Upwards"] then
				angle = 1
			elseif pitchMode["Downwards"] then
				angle = -1
			elseif pitchMode["Zero"] then
				angle = 0
			elseif pitchMode["Random"] then
				angle = _MathRandom(-1000, 1000)/1000
			elseif pitchMode["Adaptive (for adaptive jiitter)"] then
				local yaw = _G.CurrentYaw or 0
				local yawNorm = yaw / 180
				local minPitch, maxPitch = -180, 180
				local pitchAngle = -maxPitch * yawNorm 
				angle = _MathRad(pitchAngle)
			elseif pitchMode["Glitch"] then
				angle = 0/0
			else
				_G.CurrentPitch = nil
				return
			end
			_G.CurrentPitch = angle
			local isClimbing = LocalPlayer.Character and _FindFirstChild(LocalPlayer.Character, "Climbing") ~= nil
			Events.ControlTurn:FireServer(angle, isClimbing)
		end
	
	
		function AntiAim.GetTargetPart()
			local closest = math.huge
			local target = nil
		
			for _, plr in ipairs(_GetPlayers(Players)) do
				if plr ~= LocalPlayer and plr.Team ~= LocalPlayer.Team then
					local char = plr.Character
					local hrp = char and _FindFirstChild(char, "HumanoidRootPart")
					local hum = char and _FindFirstChild(char, "Humanoid")
					if hrp and hum and hum.Health > 0 then
						local screenPos, onScreen = camera:WorldToViewportPoint(hrp.Position)
						if onScreen then
							local dist = (_Vector2New(screenPos.X, screenPos.Y) - _Vector2New(Mouse.X, Mouse.Y)).Magnitude
							if dist < closest then
								closest = dist
								target = hrp
							end
						end
					end
				end
			end
		
			return target
		end
		function AntiAim.YawControl()
			local char = LocalPlayer.Character
			local Root = char and _FindFirstChild(char, "HumanoidRootPart")
			if not Root then return end
		
			char.Humanoid.AutoRotate = false
		
			local CamLook = camera.CFrame.LookVector
			local baseYaw = -_MathAtan2(CamLook.Z, CamLook.X) + _MathRad(-90)
		
			local yawBase = Flags["AntiAim_YawBase"].value
			local spinSpeed = Flags["AntiAimSpin_Speed"].value*36 or 30
			local yawOffset = Flags["AntiAimSpin_Yaw"].value or 0
			local offset = _MathRad(-yawOffset)
		
			if yawBase["Spin"] then
				baseYaw = baseYaw + _MathRad(_Tick() * spinSpeed % 360)
			elseif yawBase["Random"] then
				baseYaw = baseYaw + _MathRandom(-360,360)
			elseif yawBase["Adaptive Jitter"] then
				local minOffset = Flags["Jitter_Angle2"].value  
				local maxOffset = Flags["Jitter_Angle1"].value      
				local minSpeed = Flags["Jitter_MinSpeed"].value      
				local maxSpeed = Flags["AntiAimSpin_Speed"].value   
				if not _G.tOffset then _G.tOffset = 0 end
				local center = 0 
				local range = (maxOffset - minOffset) / 2
				local sinVal = _MathSin(_G.tOffset)
				local speedFactor = 1 - _MathAbs(sinVal)   
				local speed = minSpeed + (maxSpeed - minSpeed) * speedFactor
				_G.tOffset = _G.tOffset + speed * 0.01
				local offset = range * _MathSin(_G.tOffset)
				_G.CurrentYaw = offset
				baseYaw = _MathRad(_MathDeg(baseYaw) + offset)
			end

				local cf = _CFrameNew(Root.Position) * _CFrameAngles(0, baseYaw + offset, 0)
			
			if yawBase["Targets"] then
				local targetPart = AntiAim.GetTargetPart()
				if targetPart then
					local direction = (targetPart.Position - Root.Position).Unit
					local lookAt = _CFrameNew(Root.Position, _Vector3New(targetPart.Position.X, Root.Position.Y, targetPart.Position.Z))
					cf = lookAt * _CFrameAngles(0, offset, 0)
				end                
			end
		
			Root.CFrame = cf
		end
		
		RunService.RenderStepped:Connect(function()
			if not Flags["AntiAim_Enabled"].value then return end
	
			local char = LocalPlayer.Character
			if not Utility.IsPlayerAlive(char) then
				if char and _FindFirstChild(char, "Humanoid") then
					char.Humanoid.AutoRotate = true
				end
				return
			end
	
			AntiAim.PitchControl()
			AntiAim.YawControl()
		end)
	end

	do --Movement
		function Movement.GetCharacter()
			local character = LocalPlayer.Character
			if not character then return nil end
			local root = _FindFirstChild(character, "HumanoidRootPart")
			local humanoid = _FindFirstChild(character, "Humanoid")
			if not Utility.IsPlayerAlive(character) then return nil end
			if not root or not humanoid then return nil end
			return character, root, humanoid
		end
		
		function Movement.GetYRotation(cframe)
			local _, y = _CFrameToOrientation(cframe)
			return _CFrameNew(cframe.Position) * _CFrameAngles(0, y, 0)
		end
		
		function Movement.GetMoveDirection()
			local dir = Vector3.zero
			if _IsKeyDown(InputService, Enum.KeyCode.W) then dir += _Vector3New(0, 0, -1) end
			if _IsKeyDown(InputService, Enum.KeyCode.S) then dir += _Vector3New(0, 0, 1) end
			if _IsKeyDown(InputService, Enum.KeyCode.A) then dir += _Vector3New(-1, 0, 0) end
			if _IsKeyDown(InputService, Enum.KeyCode.D) then dir += _Vector3New(1, 0, 0) end
			return dir.Magnitude > 0 and dir.Unit or nil
		end
		
		RunService.Stepped:Connect(function()
			local character, root, humanoid = Movement.GetCharacter()
			if not character then return end
			if not Flags["Movement_SpeedHack"].value then return end   
			if _IsKeyDown(InputService, Enum.KeyCode.Space) then
				humanoid.Jump = true  
			end   
			local moveDir = Movement.GetMoveDirection()
			if not moveDir then return end
	
			local camCF = camera.CFrame
			local forward = Movement.GetYRotation(camCF):VectorToWorldSpace(moveDir)
			local Speed = (Flags["Movement_OverrideSpeedHack"].value and Flags["Movement_OverrideSpeedHack_Key"].value) and Flags["Movement_OverrideSpeed"].value or Flags["Movement_Speed"].value
			local method = Flags["Movement_SpeedHackMethod"].value
			if method["Velocity"] then
				local velocity = forward * Speed
				root.Velocity = _Vector3New(velocity.X, root.Velocity.Y, velocity.Z)
			elseif method["CFrame"] then
				local offset = forward * (Speed / 50)
				root.CFrame += _Vector3New(offset.X, 0, offset.Z)
			end
		end)
	end
	Esp.chamsFolder = ScriptCacheFolder
	Esp.espObjects = {}
	Esp.allDrawingObjects = {}
	Esp.droppedWeaponStorage = {}
	Esp.imagecache = {}
	function Esp.createDrawing(type, prop)
		local obj = Drawing.new(type)
		if prop then
			for index,value in next, prop do
				obj[index] = value
			end
		end
		_TableInsert(Esp.allDrawingObjects, obj)
		return obj
	end

	do --esp and chams
		Esp.gradentHealthBarSegments = 16
		Esp.defaultProp = {
			outlineBox = {
				Visible = false,
				Transparency = 0.7,
				Color = _Color3FromRGB(10, 10, 10),
				Thickness = 3,
				Filled = false
			},
			box = {
				Visible = false,
				Transparency = 1,
				Color = _Color3FromRGB(255, 255, 255),
				Thickness = 1,
				Filled = false
			},
			boxFilled = {
				Visible = false,
				Transparency = 0.1,
				Color = _Color3FromRGB(255, 255, 255),
				Filled = true
			},
			healthBarOutline = {
				Visible = false,
				Transparency = 0.7,
				Color = _Color3FromRGB(10, 10, 10),
				Thickness = 1,
				Filled = true
			},
			healthBarOutlineOutline = {
				Visible = false,
				Transparency = 0.7,
				Color = _Color3FromRGB(10, 10, 10),
				Thickness = 1,
				Filled = false
			},
			healthBar = {
				Visible = false,
				Transparency = 1,
				Color = _Color3FromRGB(0, 255, 0),
				Thickness = 1,
				Filled = true
			},
			nameTag = {
				Visible = false,
				Size = 13,
				Font = Drawing.Fonts.Plex,
				Color = _Color3FromRGB(255, 255, 255),
				Transparency = 1,
				Center = true,
				Outline = true
			},
			heldWeapon = {
				Visible = false,
				Size = 13,
				Font = 2,
				Color = _Color3FromRGB(255, 255, 255),
				Transparency = 1,
				Center = true,
				Outline = true
			},
			healthNumber = {
				Visible = false,
				Size = 13,
				Font = Drawing.Fonts.Plex,
				Color = _Color3FromRGB(255, 255, 255),
				Transparency = 1,
				Center = true,
				Outline = true
			},
			distanceTag = {
				Visible = false,
				Size = 13,
				Font = 2,
				Color = _Color3FromRGB(255, 255, 255),
				Transparency = 1,
				Center = true,
				Outline = true
			},
			oofArrow = {
				Visible = false,
				Filled = true,
				Color = _Color3FromRGB(255, 0, 255),
				Thickness = 2,
				Transparency = 1
			},
			oofArrowOutline = {
				Visible = false,
				Filled = false,
				Color = _Color3FromRGB(255, 255, 255),
				Thickness = 4,
				Transparency = 0.9,
			},
			cameraCircle = {
				Visible = false,
				Thickness = 1,
				Radius = 3,
				Transparency = 1,
				Filled = false
			},
			snapLine = {
				Thickness = 1,
				Color = _Color3FromRGB(255, 255, 255),
				Transparency = 1,
				Visible = false
			},
			flags = {
				Visible = false,
				Size = 13,
				Font = Drawing.Fonts.Plex,
				Color = _Color3FromRGB(255, 255, 255),
				Transparency = 1,
				Center = true,
				Outline = true
			},
		}

		function Esp.initializeDrawingObjects(onScreen, offScreen, general)
			onScreen.outlineBox         = {
				object = Esp.createDrawing("Square", Esp.defaultProp.outlineBox),
				originalTransparency = Esp.defaultProp.outlineBox.Transparency
			}
			onScreen.box                = {
				object = Esp.createDrawing("Square", Esp.defaultProp.box),
				originalTransparency = Esp.defaultProp.box.Transparency
			}
			onScreen.boxFilled          = {
				object = Esp.createDrawing("Square", Esp.defaultProp.boxFilled),
				originalTransparency = Esp.defaultProp.boxFilled.Transparency
			}
			onScreen.healthBarOutline   = {
				object = Esp.createDrawing("Square", Esp.defaultProp.healthBarOutline),
				originalTransparency = Esp.defaultProp.healthBarOutline.Transparency
			}
			onScreen.healthBarOutlineOutline   = {
				object = Esp.createDrawing("Square", Esp.defaultProp.healthBarOutlineOutline),
				originalTransparency = Esp.defaultProp.healthBarOutline.Transparency
			}
			onScreen.healthBar          = {
				object = Esp.createDrawing("Square", Esp.defaultProp.healthBar),
				originalTransparency = Esp.defaultProp.healthBar.Transparency
			}

			for i = 1, Esp.gradentHealthBarSegments do
				onScreen["healthBarSegment" .. i]       = {
					object = Esp.createDrawing("Square", Esp.defaultProp.healthBar),
					originalTransparency = Esp.defaultProp.healthBar.Transparency
				}
			end

			onScreen.nameTag            = {
				object = Esp.createDrawing("Text", Esp.defaultProp.nameTag),
				originalTransparency = Esp.defaultProp.nameTag.Transparency
			}
			onScreen.heldWeapon         = {
				object = Esp.createDrawing("Text", Esp.defaultProp.heldWeapon),
				originalTransparency = Esp.defaultProp.heldWeapon.Transparency
			}
			onScreen.healthNumber       = {
				object = Esp.createDrawing("Text", Esp.defaultProp.healthNumber),
				originalTransparency = Esp.defaultProp.healthNumber.Transparency
			}
			onScreen.distanceTag        = {
				object = Esp.createDrawing("Text", Esp.defaultProp.distanceTag),
				originalTransparency = Esp.defaultProp.distanceTag.Transparency
			}
			onScreen.armorTag        = {
				object = Esp.createDrawing("Text", Esp.defaultProp.flags),
				originalTransparency = Esp.defaultProp.flags.Transparency
			}
			onScreen.bombTag		= {
				object = Esp.createDrawing("Text", Esp.defaultProp.flags),
				originalTransparency = Esp.defaultProp.flags.Transparency
			}
			onScreen.moneyTag        = {
				object = Esp.createDrawing("Text", Esp.defaultProp.flags),
				originalTransparency = Esp.defaultProp.flags.Transparency
			}
			offScreen.oofArrow          = {
				object = Esp.createDrawing("Triangle", Esp.defaultProp.oofArrow),
				originalTransparency = Esp.defaultProp.oofArrow.Transparency
			}
			offScreen.oofArrowOutline   = {
				object = Esp.createDrawing("Triangle", Esp.defaultProp.oofArrowOutline),
				originalTransparency = Esp.defaultProp.oofArrowOutline.Transparency
			}
			onScreen.cameraCircle        = {
				object = Esp.createDrawing("Circle", Esp.defaultProp.cameraCircle),
				originalTransparency = Esp.defaultProp.cameraCircle.Transparency
			}
			general.snapLine            = {
				object = Esp.createDrawing("Line", Esp.defaultProp.snapLine),
				originalTransparency = Esp.defaultProp.snapLine.Transparency
			}
		end

		function Esp.getBoundingBox(rootCf, headCf, rootSize, headSize, hipHeight, cacheTable)
			if cacheTable and rootCf then
				cacheTable.rootCf = rootCf
				cacheTable.headCf = headCf
				cacheTable.rootSize = rootSize
				cacheTable.headSize = headSize
				cacheTable.hipHeight = hipHeight
			elseif not rootCf then
				rootCf = cacheTable.rootCf
				headCf = cacheTable.headCf
				rootSize = cacheTable.rootSize
				headSize = cacheTable.headSize
				hipHeight = cacheTable.hipHeight
			end
			local th = headCf * _Vector3New(0, headSize.y*0.5 + 0.5, 0)
			local bf = rootCf * _Vector3New(0, -(rootSize.y*0.5 + hipHeight + 0.5), 0)
			local td = (th - rootCf.p).Magnitude
			local bd = (rootCf.p - bf).Magnitude

			local up = rootCf.UpVector
			local tp = rootCf.p + up*td
			local bp = rootCf.p - up*bd

			local top = Calculations:worldToViewportPoint(tp)
			local bottom = Calculations:worldToViewportPoint(bp)

			local width = _MathAbs(top.x - bottom.x)
			local height = _MathMax(_MathAbs(top.y - bottom.y), width / 1.75)

			local size = _Vector2New(_MathFloor(_MathMax(height / 1.7, width * 2.5)), _MathFloor(height))
			local pos = _Vector2New(_MathFloor((bottom.x - size.x + top.x) / 2), _MathFloor(_MathMin(top.y, bottom.y)))

			return Rect.new(pos, pos + size)
		end

		function Esp.applyEsp(player)
			repeat _TaskWait() until PlayerModule.storage[player]
			_TaskWait(1)
			local this = {}
			this.drawingObjects = {
				drawOnScreen    = {},
				drawOffScreen   = {},
				drawGeneral     = {}, 
				stoppedRenderingOnScreen    = true,
				stoppedRenderingOffScreen   = true,
				lastData = {
					headPos = nil,
					torsoCf = nil,
					health = nil,
					maxHealth = nil
				},
			}
			this.transparencyEvent = _Instancenew("BindableEvent")
			this.healthPercentageSpring = spring.new()
			this.healthPercentageSpring.s = 24
			this.timePassed = 0
			this.chamsObjects = {}
			this.skeletons = {}
			this.chamsTransConnections = {}
			this.updatechams = false 
			this.transConnections = {}
			this.theirpInfo = PlayerModule.storage[player]
			
			Esp.initializeDrawingObjects(this.drawingObjects.drawOnScreen, this.drawingObjects.drawOffScreen, this.drawingObjects.drawGeneral)

			for i,v in next, this.drawingObjects.drawOnScreen do
				_TableInsert(this.transConnections, this.transparencyEvent.Event:Connect(function(transparency)
					v.object.Transparency = v.originalTransparency * (1 - transparency)
				end))
			end
			for i,v in next, this.drawingObjects.drawOffScreen do
				_TableInsert(this.transConnections, this.transparencyEvent.Event:Connect(function(transparency)
					v.object.Transparency = v.originalTransparency * (1 - transparency)
				end))
			end
			for i,v in next, this.drawingObjects.drawGeneral do
				_TableInsert(this.transConnections, this.transparencyEvent.Event:Connect(function(transparency)
					v.object.Transparency = v.originalTransparency * (1 - transparency)
				end))
			end

			function this.chamsremoved(character)
				for i = #this.chamsObjects, 1, -1 do
					local object = _TableRemove(this.chamsObjects, i)
					if object then
						_Destroy(object)
						object = nil
					end
				end
				for i = #this.skeletons, 1, -1 do
					local v = _TableRemove(this.skeletons, i)
					if v then
						v.step:Disconnect()
						v.step = nil
						v.line:Remove()
						v.line = nil
						v.weld = nil
					end
				end
			end
						
			local transparencyFix = function()
				local character = player.Character
				if not character then return end

				local pInfo = PlayerModule.storage[player]
				if not pInfo then return end

				local section = (this and this.theirpInfo and this.theirpInfo.enemy) and "Enemy_" or "Team_"
				local chamsEnabled = Flags[section .. "Chamses"].value
				local targetTransparency = chamsEnabled and 1 or 0

				for _, accessory in ipairs(_GetChildren(character)) do
					if _IsA(accessory, "Accessory") then
						for _, part in ipairs(_GetChildren(accessory)) do
							if _IsA(part, "BasePart") then
								part.Transparency = targetTransparency
							end
						end
					end
				end
			end


			function this.chamsadded(character)
				repeat 
					_TaskWait() 
				until character ~= nil
				local humanoid = character:WaitForChild("Humanoid", 1/0)
				local humanoidRootPart = character:WaitForChild("HumanoidRootPart", 1/0)
				if humanoid.Health <= 0 then
					return
				end
				local pInfo = PlayerModule.storage[player]
				if not pInfo then
					repeat
						pInfo = PlayerModule.storage[player]
						_TaskWait()
					until pInfo
				end
				repeat
					_TaskWait()
				until pInfo.alive
				--what the dog doing
				local section = this and this.theirpInfo and this.theirpInfo.enemy and "Enemy_" or "Team_"
				humanoidRootPart.AncestryChanged:Connect(function(child, new)
					if new == nil then
						this.chamsremoved()
					end
				end)
				local yeah = _Tick()
				local loop
				loop = RunService.Stepped:Connect(function()
					if _Tick() - yeah > 5 then
						loop:Disconnect()
						loop = nil
					end
					transparencyFix()
				end)
				for i,v in next, _GetChildren(character) do
					if _IsA(v,"MeshPart") or _IsA(v,"BasePart") and _FindFirstChildOfClass(v, "Motor6D") and (v.Transparency ~= 1 or v.Name == "Head") then
						if v.Name == "BackC4" then continue end
						local weld = _FindFirstChildOfClass(v, "Motor6D")
						if weld.Part0 == character.HumanoidRootPart or weld.Part1 == character.HumanoidRootPart then
						else
							if weld and weld.Part0 and weld.Part1 then
								local data = {}
								data.weld = weld
								data.line = Esp.createDrawing("Line", {
									Thickness = 1,
									Color = Flags[section.. "Skeletons_Color1"].color,
									Visible = false,
									Transparency = 0.5
								})
								local hasBeenHidden = false
								data.step = RunService.Stepped:Connect(function()
									local section = this and this.theirpInfo and this.theirpInfo.enemy and "Enemy_" or "Team_"
									if Flags[section.. "Skeletons"].value then
										hasBeenHidden = false
										local p0, v0 = Calculations:worldToViewportPoint(data.weld.Part0.Position)
										local p1, v1 = Calculations:worldToViewportPoint(data.weld.Part1.Position)
										if v0 and v1 then
											data.line.From = _Vector2New(_MathFloor(p0.x), _MathFloor(p0.y))
											data.line.To = _Vector2New(_MathFloor(p1.x), _MathFloor(p1.y))
											data.line.Color = Flags[section.. "Skeletons_Color1"].color
											data.line.Visible = true
										else
											data.line.Visible = false
										end
									else
										if hasBeenHidden ~= true then
											data.line.Visible = false
											hasBeenHidden = true
										end
									end
								end)

								_TableInsert(this.skeletons, data)
							end
						end
					end
					if _IsA(v,"BasePart") and v.Name ~= "HumanoidRootPart" and v.Name ~= "Gun" and v.Name ~= "BackC4" and v.Name ~= "HeadHB" and v.Name ~= "Head" then
						local isHead = v.Name == "FakeHead"
						local inner = _Instancenew(isHead and "CylinderHandleAdornment" or "BoxHandleAdornment")
						local outline = _Clone(inner)
						inner.Name = "inner"
						inner.AlwaysOnTop = true
						inner.Color3 = Flags[section.. "Chamses_Color1"].color
						inner.Transparency = Flags[section.. "Chamses_Transperency1"].value/10
						inner.Visible = Flags[section.. "Chamses"].value
						inner.ZIndex = 2
						inner.Adornee = v
						inner.Parent = Esp.chamsFolder

						outline.Name = "outer"
						outline.AlwaysOnTop = false
						outline.Color3 = Flags[section.. "Chamses_Color2"].color
						outline.Transparency = Flags[section.. "Chamses_Transperency2"].value/10
						outline.Visible = inner.Visible
						outline.ZIndex = -1
						outline.Adornee = v
						outline.Parent = Esp.chamsFolder
						if isHead then
							inner.CFrame = _CFrameAngles(math.pi / 2, 0, 0)
							inner.Radius = v.Size.x * 0.58 + 0.001
							inner.Height = v.Size.y + 0.17

							outline.CFrame = inner.CFrame
							outline.Radius = v.Size.x * 0.58 + 0.15
							outline.Height = v.Size.y + 0.32
						else
							inner.Size = v.Size + _Vector3New(0.001, 0.001, 0.001)
							outline.Size = v.Size + _Vector3New(0.15, 0.15, 0.15)
						end

						_TableInsert(this.chamsObjects, inner)
						_TableInsert(this.chamsObjects, outline)
					end
				end
			end

			local lastFlags = {}

			function this.updateChams()
				if not this or not this.theirpInfo then return end

				local isEnemy = this.theirpInfo.enemy
				local section = isEnemy and "Enemy_" or "Team_"
				local chamsEnabled = Flags[section .. "Chamses"].value
				local color1 = Flags[section .. "Chamses_Color1"].color
				local color2 = Flags[section .. "Chamses_Color2"].color
				local transparency1 = Flags[section .. "Chamses_Transperency1"].value
				local transparency2 = Flags[section .. "Chamses_Transperency2"].value
				local flagKey = section .. "_chamsHash"
				local currentHash = _tostring(chamsEnabled) .. _tostring(color1) .. _tostring(color2) .. transparency1 .. transparency2
				if lastFlags[flagKey] == currentHash then return end
				lastFlags[flagKey] = currentHash
				local chams = this.chamsObjects
				if chams then
					for _, v in next, chams do
						v.Visible = chamsEnabled
						if v.Name == "inner" then
							v.Color3 = color1
							v.Transparency = chamsEnabled and transparency1 / 10 or 1
						elseif v.Name == "outer" then
							v.Color3 = color2
							v.Transparency = chamsEnabled and transparency2 / 10 or 1
						end
					end
					transparencyFix()
				end
			end


			function this.renderOnScreen(info)
				if info.pInfo then
					this.drawingObjects.lastData.pInfo = info.pInfo
				else
					info.pInfo = this.drawingObjects.lastData.pInfo
				end

				local health = info.health
				local maxHealth = info.maxHealth
				local section = ((this and this.theirpInfo and this.theirpInfo.enemy and "Enemy_") or "Team_")
				local boundingRect = info.boundingRect
				local drawOnScreen = this.drawingObjects.drawOnScreen
				local boxOutline = drawOnScreen.outlineBox.object
				local box = drawOnScreen.box.object
				local boxFilled =  drawOnScreen.boxFilled.object
				local healthBar = drawOnScreen.healthBar.object
				local healthBarOutline = drawOnScreen.healthBarOutline.object
				local healthBarOutlineOutline = drawOnScreen.healthBarOutlineOutline.object
				local healthNumber = drawOnScreen.healthNumber.object
				local heldWeapon = drawOnScreen.heldWeapon.object
				local distanceTag = drawOnScreen.distanceTag.object
				local nameTag = drawOnScreen.nameTag.object
				local armorTag = drawOnScreen.armorTag.object
				local moneyTag = drawOnScreen.moneyTag.object
				local bombTag = drawOnScreen.bombTag.object
				local fakeindicator = 0
				local flagoffset = 0

				local textCase = Utility.GetSelectedName(Flags["Esp_Settings_TextCase"].value)
				local textSize = Flags["Esp_Settings_TextSize"].value
				local textFont = Drawing.Fonts[Utility.GetSelectedName(Flags["Esp_Settings_TextFont"].value)]

				local textFlagCase = Utility.GetSelectedName(Flags["Esp_Settings_FlagTextCase"].value)
				local textFlagSize = Flags["Esp_Settings_FlagTextSize"].value
				local textFlagFont = Drawing.Fonts[Utility.GetSelectedName(Flags["Esp_Settings_FlagTextFont"].value)]

				this.healthPercentageSpring.t = info.pInfo.god == true and 0 or health/maxHealth
				if info.pInfo.character and _FindFirstChild(info.pInfo.character, "EquippedTool") then
					this.drawingObjects.lastData.weapon = textCase == "lowercase" and info.pInfo.character.EquippedTool.Value:lower() or textCase == "UPPERCASE" and info.pInfo.character.EquippedTool.Value:upper() or info.pInfo.character.EquippedTool.Value
				end
				if Flags[section.. "Boxes"].value then
					box.Position = boundingRect.Min
					box.Size = boundingRect.Max - boundingRect.Min

					boxOutline.Position = box.Position
					boxOutline.Size = box.Size

					box.Color = Flags[section.. "Boxes_Color1"].color
					boxFilled.Color = Flags[section.. "Boxes_Filled_Color1"].color
					boxFilled.Transparency = 1 - Flags[section.. "Boxes_Filled_Transperency"].value/10

					if Flags[section.. "Boxes_Filled"].value then
						boxFilled.Position = box.Position + _Vector2New(_MathFloor(box.Thickness / 2) + 1, _MathFloor(box.Thickness / 2) + 1)
						boxFilled.Size = box.Size - _Vector2New(box.Thickness + 1, box.Thickness + 1)
						boxFilled.Visible = true
					else
						boxFilled.Visible = false
					end
					box.Visible = true
					boxOutline.Visible = true
				else
					box.Visible = false
					boxFilled.Visible = false
					boxOutline.Visible = false
				end
				if Flags[section.. "Health_Bar"].value then
					local hpMax = Flags[section.. "Health_Bar_Color1"].color
					local hpLow = Flags[section.. "Health_Bar_Color2"].color

					local healthPercentage = this.healthPercentageSpring.p
					local fullSize = boundingRect.Height
					local chunk = fullSize * healthPercentage

					healthBar.Size = _Vector2New(2, chunk)
					healthBar.Position = boundingRect.Min + _Vector2New(-5, fullSize - chunk)
					healthBarOutline.Size = _Vector2New(4, fullSize + 2)
					healthBarOutline.Position = boundingRect.Min + _Vector2New(-6, -1)
					healthBarOutlineOutline.Size = healthBarOutline.Size
					healthBarOutlineOutline.Position = healthBarOutline.Position
					healthBar.Color = hpLow:Lerp(hpMax, healthPercentage)

					local isGradient =  Flags[section.. "Health_Bar_Gradient"].value

					healthBar.Visible = not isGradient
					healthBarOutline.Visible = true
					healthBarOutlineOutline.Visible = true

					if isGradient then
						local sizePerSegment = math.ceil(fullSize / Esp.gradentHealthBarSegments)
						local maxSegments = fullSize / sizePerSegment + 1
						local minSegments = chunk / sizePerSegment + 1
						local skipped = maxSegments - minSegments

						local healthPos = healthBar.Position
						local healthSizeX = healthBar.Size.x
						local healthSizeY = healthBar.Size.y

						for i = 1, Esp.gradentHealthBarSegments do
							local segment = drawOnScreen["healthBarSegment" .. i].object

							local projectedPosMin = _Vector2New(0, (i-1) * sizePerSegment)
							local ProjectedPosMax = projectedPosMin + _Vector2New(0, sizePerSegment)

							if projectedPosMin.y > chunk then
								segment.Visible = false
							else
								segment.Visible = true
								segment.Position = healthPos + projectedPosMin
								segment.Size = _Vector2New(healthSizeX, ProjectedPosMax.y - healthSizeY > 0 and sizePerSegment - (ProjectedPosMax.y - healthSizeY) or sizePerSegment)
								segment.Color = hpMax:Lerp(hpLow, (i + skipped)/maxSegments)
							end
						end
					else
						if drawOnScreen["healthBarSegment1"].object.Visible == true then
							for i = 1, Esp.gradentHealthBarSegments do
								drawOnScreen["healthBarSegment" .. i].object.Visible = false
							end 
						end
					end
				else
					healthBar.Visible = false
					healthBarOutline.Visible = false
					healthBarOutlineOutline.Visible = false

					if drawOnScreen["healthBarSegment1"].object.Visible == true then
						for i = 1, Esp.gradentHealthBarSegments do
							drawOnScreen["healthBarSegment" .. i].object.Visible = false
						end 
					end
				end
				if Flags[section.. "Health_Bar"].value and ((Flags[section.. "Health_Number"].value  and health <= Flags[section.. "Max_HP_Visibility_Cap"].value) or info.pInfo.god) then
					local godded = info.pInfo.god

					healthNumber.Text = godded and "God" or _tostring(_MathFloor((this.healthPercentageSpring.p * maxHealth) + 0.5))
					local offset = godded and 0 or (2 * this.healthPercentageSpring.p) - 1
					healthNumber.Position = godded and boundingRect.Min + _Vector2New(-5 - healthBar.Size.x - (healthNumber.TextBounds.X/2), (boundingRect.Height*0.5) - healthNumber.TextBounds.Y/2 + (offset * (healthNumber.Size/4)) - (offset * 1)) or healthBar.Position + _Vector2New(-healthBar.Size.x - (healthNumber.TextBounds.X/2) - 1, -healthNumber.TextBounds.Y/2) + _Vector2New(0, (offset * (healthNumber.Size + 1) * 0.25))
					healthNumber.Color = _Color3New(1, 1, 1)
					healthNumber.Visible = true
				else
					healthNumber.Visible = false
				end
				local theOffsetBullshit = 0
				if Flags[section.. "Held_Weapon"].value then
					heldWeapon.Text = this.drawingObjects.lastData.weapon
					heldWeapon.Size = textSize
					heldWeapon.Font = textFont
					heldWeapon.Position = boundingRect.Min + _Vector2New(_MathFloor(boundingRect.Width / 2), boundingRect.Height + 2)
					heldWeapon.Color = Flags[section.. "Held_Weapon_Color1"].color
					heldWeapon.Visible = true
					theOffsetBullshit = theOffsetBullshit + textSize
				else
					heldWeapon.Visible = false
				end
				if Flags[section.. "Distance"].value then
					distanceTag.Text = Calculations:truncateNumber((this.drawingObjects.lastData.headCf.p - camera.CFrame.p).Magnitude, 1) .. (textCase == "lowercase" and " st" or textCase == "UPPERCASE" and " ST" or " st")
					distanceTag.Position = boundingRect.Min + _Vector2New(_MathFloor(boundingRect.Width / 2), boundingRect.Height + theOffsetBullshit + 2)
					distanceTag.Size = textSize
					distanceTag.Font = textFont
					distanceTag.Color = Flags[section.. "Distance_Color1"].color
					distanceTag.Visible = true
				else
					distanceTag.Visible = false
				end
				if Flags[section.. "Name"].value then
					nameTag.Color = Flags[section.. "Name_Color1"].color
					nameTag.Text = textCase == "lowercase" and player.Name:lower() or textCase == "UPPERCASE" and player.Name:upper() or player.Name
					nameTag.Position = boundingRect.Min + _Vector2New(_MathFloor(boundingRect.Width / 2), -2 - nameTag.TextBounds.y)
					nameTag.Size = textSize
					nameTag.Font = textFont
					nameTag.Visible = true
				else
					nameTag.Visible = false
				end
				if Flags[section.. "Armor"].value then
					armorTag.Color = Flags[section.. "Armor_Color1"].color
					local str = ""
					if _FindFirstChild(player, "Helmet") then
						str = str .. "H"
					end
					if _FindFirstChild(player, "Kevlar") then
						str = str .. "K"
					end

					local rawText = str
					local rawTextSplit = _StringSplit(rawText:lower(), "")
					if rawTextSplit[1] then
						rawTextSplit[1] = rawTextSplit[1]:upper()
						for i, char in next, rawTextSplit do
							if ((char == " " or char == "-") and i < #rawTextSplit) then
								rawTextSplit[i + 1] = rawTextSplit[i + 1]:upper()
							end
						end
					end
					local fixedText = _TableConcat(rawTextSplit)

					armorTag.Text = textFlagCase == "lowercase" and str:lower() or textFlagCase == "UPPERCASE" and str:upper() or fixedText
					armorTag.Position = boundingRect.Min + _Vector2New(_MathFloor(boundingRect.Width) + (armorTag.TextBounds.X / 2) + 2, -3)
					if str ~= "" then
						flagoffset = flagoffset + armorTag.TextBounds.Y
					end
					armorTag.Visible = true
					armorTag.Font = textFlagFont
					armorTag.Size = textFlagSize
				else
					armorTag.Visible = false
				end
				if Flags[section.. "Cash"].value then
					moneyTag.Color = Flags[section.. "Cash_Color1"].color
					moneyTag.Text = _tostring(player.Cash.Value) .. "$"

					moneyTag.Font = textFlagFont
					moneyTag.Size = textFlagSize

					moneyTag.Position = boundingRect.Min + _Vector2New(_MathFloor(boundingRect.Width) + (moneyTag.TextBounds.X / 2) + 2, -3 + flagoffset)
					flagoffset = flagoffset + moneyTag.TextBounds.Y
					moneyTag.Visible = true
				else
					moneyTag.Visible = false
				end
				if _FindFirstChild(workspace,"Status") and _FindFirstChild(workspace.Status,"HasBomb") and workspace.Status.HasBomb.Value == player.Name then
					this.drawingObjects.lastData.hadBomb = true
				else
					this.drawingObjects.lastData.hadBomb = false
				end
				if Flags[section.. "Bomb"].value and this.drawingObjects.lastData.hadBomb then
					bombTag.Color = Flags[section.. "Bomb_Color1"].color
					bombTag.Text =  textFlagCase == "lowercase" and "bomb" or textFlagCase == "UPPERCASE" and "BOMB" or "Bomb"
					bombTag.Position = boundingRect.Min + _Vector2New(_MathFloor(boundingRect.Width) + (bombTag.TextBounds.X / 2) + 2, -3 + flagoffset)
					flagoffset = flagoffset + bombTag.TextBounds.Y
					bombTag.Visible = true
				else
					bombTag.Visible = false
				end
				this.updateChams()
			
				this.drawingObjects.stoppedRenderingOnScreen = false

				if not this.drawingObjects.stoppedRenderingOffScreen then
					this.drawingObjects.stoppedRenderingOffScreen = true
					for i,v in next, this.drawingObjects.drawOffScreen do
						v.object.Visible = false
					end
				end
			end

			function this.renderOffScreen(info)
				local pos = _CFramePointToObjectSpace(_CFrameLookAt(camera.CFrame.p, camera.CFrame.p + camera.CFrame.LookVector * _Vector3New(1, 0, 1)), info.position)
				local oofArrow = this.drawingObjects.drawOffScreen.oofArrow.object
				local oofArrowOutline = this.drawingObjects.drawOffScreen.oofArrowOutline.object
				if Flags["Enemy_Out_of_View_Arrows"].value and this and this.theirpInfo and this.theirpInfo.enemy then
					local angle = _MathAtan2(pos.z, pos.x)

					local cx, sy = _MathCos(angle), _MathSin(angle)
					local cx1, sy1 = _MathCos(angle + math.pi/2), _MathSin(angle + math.pi/2)
					local cx2, sy2 = _MathCos(angle + math.pi/2*3), _MathSin(angle + math.pi/2*3)

					local viewport = camera.ViewportSize
					local bigger = _MathMax(viewport.x, viewport.y)
					local smaller = _MathMin(viewport.x, viewport.y)
					local arrowSize = _MathClamp(Flags["Enemy_Dynamic_Arrow_Size"].value and Calculations:map((info.position - camera.CFrame.p).Magnitude, 1, 100, 30, 10) or Flags["Enemy_Arrow_Size"].value, 4, 1/0)
					local arrowPercentage = Flags["Enemy_Arrow_Distance"].value

					local arrowOrigin = viewport/2 + (_Vector2New(cx, sy) * _Vector2New(bigger * arrowPercentage/200, smaller * arrowPercentage/200))

					oofArrow.PointA = arrowOrigin + _Vector2New(arrowSize*2 * cx, arrowSize*2 * sy)
					oofArrow.PointB = arrowOrigin + _Vector2New(arrowSize * cx1, arrowSize * sy1)
					oofArrow.PointC = arrowOrigin + _Vector2New(arrowSize * cx2, arrowSize * sy2)
					oofArrow.Color = Flags["Enemy_Out_of_View_Arrows_Color1"].color

					oofArrowOutline.PointA = oofArrow.PointA
					oofArrowOutline.PointB = oofArrow.PointB
					oofArrowOutline.PointC = oofArrow.PointC
					
					oofArrowOutline.Color = _Color3New(_MathMax(0, Flags["Enemy_Out_of_View_Arrows_Color1"].color.r * 0.5), _MathMax(0,  Flags["Enemy_Out_of_View_Arrows_Color1"].color.g * 0.5), _MathMax(0,  Flags["Enemy_Out_of_View_Arrows_Color1"].color.b * 0.5))

					local trans = ((_MathCos(_Tick() * 2 * math.pi) * (0.75 - (0.25 * (_MathCos(_Tick() * 2 * math.pi))))) / 2) + 0.75
					this.drawingObjects.drawOffScreen.oofArrow.originalTransparency = trans
					this.drawingObjects.drawOffScreen.oofArrowOutline.originalTransparency = trans

					oofArrow.Transparency = trans
					oofArrowOutline.Transparency = trans

					oofArrow.Visible = true
					oofArrowOutline.Visible = true
				else
					oofArrowOutline.Visible = false
					oofArrow.Visible = false
				end
	

				this.drawingObjects.stoppedRenderingOffScreen = false

				if not this.drawingObjects.stoppedRenderingOnScreen then
					this.drawingObjects.stoppedRenderingOnScreen = true
					for i,v in next, this.drawingObjects.drawOnScreen do
						v.object.Visible = false
					end
				end
			end

			function this.renderGeneral(info)
				local snapLine = this.drawingObjects.drawGeneral.snapLine.object
				local pos, onScreen = Calculations:worldToViewportPoint(info.position, false, 50)

				if not onScreen then
					local angle
					local centerX, centerY = viewportSize.x/2, viewportSize.y/2
					if pos.z > 0 then
						angle = _MathAtan2(pos.y - centerY, pos.x - centerX)
					else
						angle = _MathAtan2(centerY - pos.y, centerX - pos.x)
					end

					local x = _MathCos(angle)
					local y = _MathSin(angle)
					local slope = y/x
					local xEdge, yEdge = viewportSize.x, viewportSize.y
					if y < 0 then
						yEdge = 0
					end

					if x < 0 then
						xEdge = 0
					end

					local newY = slope*xEdge + centerY - slope*centerX
					if newY > 0 and newY < viewportSize.y then
						pos = _Vector2New(xEdge, newY)
					else
						pos = _Vector2New((yEdge - centerY + slope*centerX)/slope, yEdge)
					end
				end

				local section = this and this.theirpInfo and this.theirpInfo.enemy and "Enemy_" or "Team_"
				if Flags[section.. "Snap_Lines"].value then
					local trans = (1 - (Flags[section.. "Snap_Lines_Transperency"].value)/10) * (onScreen and 1 or 0.5)
					snapLine.From = _Vector2New(_MathFloor(viewportSize.x / 2), _MathFloor(viewportSize.y - 50))
					snapLine.To = _Vector2New(pos.x, pos.y)
					snapLine.Transparency = trans
					snapLine.Color = Flags[section.. "Snap_Lines_Color1"].color
					snapLine.Visible = true
				else
					snapLine.Visible = false
				end
			end

			function this.onSpawned()
				local pInfo = PlayerModule.storage[player]
				repeat 
					_TaskWait()
				until pInfo and pInfo.alive 
				if this.step then
					this.step:Disconnect()
					this.step = nil
				end
				this.transparencyEvent:Fire(0)
				this.fadefinished = true
				
				this.step = RunService.Stepped:Connect(function(upTime, deltaTime)
					if pInfo and (pInfo.alive or pInfo.god) then
						local section = pInfo.enemy and "Enemy_" or "Team_"
						local health, maxHealth = pInfo.humanoid.Health, pInfo.humanoid.MaxHealth
						this.drawingObjects.lastData.health = health
						this.drawingObjects.lastData.maxHealth = maxHealth
						this.timePassed = 0
						local onScreen = Calculations:spherePoint(pInfo.head.Position, 4)
						if onScreen then
							this.renderOnScreen({
								boundingRect = Esp.getBoundingBox(pInfo.rootpart.CFrame, pInfo.head.CFrame, pInfo.rootpart.Size, pInfo.head.Size, pInfo.humanoid.HipHeight, this.drawingObjects.lastData),
								pInfo = pInfo,
								health = health,
								maxHealth = maxHealth
							})
						else
							this.renderOffScreen({
								position = pInfo.currentPosition
							})
						end
						this.renderGeneral({
							position = pInfo.currentPosition,
							pInfo = pInfo
						})
					else
						if this and this.onDied then
							this.onDied()
						end
					end
				end)
			end
			function this.onDied()
				local pInfo = PlayerModule.storage[player]
				if this.step then
					this.step:Disconnect()
					this.step = nil	
				end
				this.fadefinished = false
				this.timePassed = 0
				this.step = RunService.Stepped:Connect(function(upTime, deltaTime)
					if not this.timePassed then
						this.timePassed = 1
					end
					this.timePassed = this.timePassed + (deltaTime * 4)
					if this.timePassed >= 1 then
						if this.step then
							this.step:Disconnect()
						end
						for i,v in next, this.drawingObjects.drawOnScreen do
							v.object.Visible = false
						end
						for i,v in next, this.drawingObjects.drawOffScreen do
							v.object.Visible = false
						end
						for i,v in next, this.drawingObjects.drawGeneral do
							v.object.Visible = false
						end
						this.drawingObjects.stoppedRenderingOffScreen = true
						this.drawingObjects.stoppedRenderingOnScreen = true

						for i = #this.chamsTransConnections, 1, -1 do
							local con = _TableRemove(this.chamsTransConnections, i)
							if con then
								con:Disconnect()
								con = nil
							end
						end

						for i = #this.chamsObjects, 1, -1 do
							local object = _TableRemove(this.chamsObjects, i)
							if object then
								_Destroy(object)
								object = nil
							end
						end
						if this.step then
							this.step:Disconnect()
							this.step = nil
						end
						this.transparencyEvent:Fire(0)
						this.fadefinished = true
					else
						this.transparencyEvent:Fire(Calculations:map(this.timePassed, 0, 1, 0, 1))
						if this.drawingObjects.lastData.headCf then
							local onScreen = Calculations:spherePoint(this.drawingObjects.lastData.headCf.p, 4)
							if onScreen then
								this.renderOnScreen({
									boundingRect = Esp.getBoundingBox(nil, nil, nil, nil, nil, this.drawingObjects.lastData),
									health = 0,
									maxHealth = this.drawingObjects.lastData.maxHealth
								})
							else
								this.renderOffScreen({
									position = this.drawingObjects.lastData.headCf.p
								})
							end
							this.renderGeneral({
								position = this.drawingObjects.lastData.headCf.p
							})	
						else
							if not this.drawingObjects.stoppedRenderingOnScreen then
								this.drawingObjects.stoppedRenderingOnScreen = true
								for i,v in next, this.drawingObjects.drawOnScreen do
									v.object.Visible = false
								end
							end
							if not this.drawingObjects.stoppedRenderingOffScreen then
								this.drawingObjects.stoppedRenderingOffScreen = true
								for i,v in next, this.drawingObjects.drawOffScreen do
									v.object.Visible = false
								end
							end
							for i,v in next, this.drawingObjects.drawGeneral do
								v.object.Visible = false
							end
						end
					end
				end)
			end
			if player.Character and _FindFirstChild(player.Character, "HumanoidRootPart") then
				this.onSpawned()
				this.chamsadded(player.Character)
			end
			Esp.espObjects[player] = this
		end

		function Esp.removeEsp(player)
			local this = Esp.espObjects[player]
			if this then
				if this.step then
					this.step:Disconnect()
				end
				for i,v in next, this.drawingObjects.drawOnScreen do
					v.object:Remove()
					v.object = nil
					table.clear(v)
				end
				for i,v in next, this.drawingObjects.drawOffScreen do
					v.object:Remove()
					v.object = nil
					table.clear(v)
				end
				for i,v in next, this.drawingObjects.drawGeneral do
					v.object:Remove()
					v.object = nil
					table.clear(v)
				end
				for i = #this.chamsTransConnections, 1, -1 do
					local con = _TableRemove(this.chamsTransConnections, i)
					if con then
						con:Disconnect()
						con = nil
					end
				end
				for i = #this.transConnections, 1, -1 do
					local con = _TableRemove(this.transConnections, i)
					if con then
						con:Disconnect()
						con = nil
					end
				end
				_Destroy(this.transparencyEvent)
				this.healthPercentageSpring = nil
				table.clear(this)
				Esp.espObjects[player] = nil
				this = nil
			end
		end
		playerSpawned:Connect(function(plr, tick)
			local this = Esp.espObjects[plr]
			if this then
				this.chamsadded(plr.Character)
				this.onSpawned()
			end
		end)
	end
	for i,v in next, _GetPlayers(Players) do
		if v ~= LocalPlayer then
			_TaskSpawn(Esp.applyEsp, v)
		end
	end
	Players.PlayerAdded:Connect(Esp.applyEsp)
	Players.PlayerRemoving:Connect(Esp.removeEsp)

	do --Visuals
		do --Camera
			Flags["ThirdPerson_Enabled"].changed:Connect(function()
				if Flags["ThirdPerson_Enabled"].value and Flags["ThirdPerson_Enabled_Key"].value then
					RunService:BindToRenderStep("ts", 1, function()
						LocalPlayer.CameraMaxZoomDistance = Flags["ThirdPerson_Distance"].value
						LocalPlayer.CameraMinZoomDistance = Flags["ThirdPerson_Distance"].value
					end)
				else
					RunService:UnbindFromRenderStep("ts")
					for v = 1, 5 do
						_Wait()
						LocalPlayer.CameraMaxZoomDistance = 0;
						LocalPlayer.CameraMinZoomDistance = 0
					end;
				end
			end)
			Flags["Remove_Flash"].changed:Connect(function()
				LocalPlayer.PlayerGui.Blnd.Blind.Visible = not Flags["Remove_Flash"].value
			end)
			Flags["ThirdPerson_Enabled_Key"].changed:Connect(function()
				if Flags["ThirdPerson_Enabled"].value and Flags["ThirdPerson_Enabled_Key"].value then
					RunService:BindToRenderStep("ts", 1, function()
						LocalPlayer.CameraMaxZoomDistance = Flags["ThirdPerson_Distance"].value
						LocalPlayer.CameraMinZoomDistance = Flags["ThirdPerson_Distance"].value
					end)
				else
					RunService:UnbindFromRenderStep("ts")
					for v = 1, 5 do
						_Wait()
						LocalPlayer.CameraMaxZoomDistance = 0;
						LocalPlayer.CameraMinZoomDistance = 0
					end;
				end
			end)
			RunService.RenderStepped:Connect(function()
				if not Utility.IsPlayerAlive(LocalPlayer.Character) then return end
				if Crosshairs.Scope.Visible ~= true or Flags["Camera_ChangeFieldOfViewInScope"].value then
					camera.FieldOfView = Flags["Camera_FieldOfView"].value
				end
			end)


			local scopelb = _FindFirstChild(LocalPlayer.PlayerGui.GUI,"ScopeLabel") or _Instancenew("ImageLabel")
			scopelb.Name = "ScopeLabel"
			scopelb.BackgroundTransparency = 1
			scopelb.AnchorPoint = _Vector2New(0.5, 0.501)
			scopelb.Position = _UDim2New(0.5, 0, 0.501, 0)
			scopelb.Size = _UDim2New(0, 255, 0, 227)
			scopelb.ZIndex = 99999
			scopelb.Image = "rbxassetid://89734938358129"
			scopelb.ImageTransparency = 1
			scopelb.Visible = false
			scopelb.Parent = LocalPlayer.PlayerGui.GUI

			local fadeInInfo = _TweenInfonew(0.22, Enum.EasingStyle.Quad, Enum.EasingDirection.Out)
			local fadeOutInfo = _TweenInfonew(0.1, Enum.EasingStyle.Quad, Enum.EasingDirection.In)
			local fadeId, fadeMode = 0, 0

			function fade(target, info, transparency, visibleOnEnd)
				fadeId += 1
				local thisId = fadeId
				fadeMode = transparency == 0 and 1 or 2
				if transparency == 0 then scopelb.Visible = true end

				local tween = TweenService:Create(target, info, {ImageTransparency = transparency})
				tween:Play()
				tween.Completed:Once(function()
					if fadeId == thisId then
						if visibleOnEnd ~= nil then target.Visible = visibleOnEnd end
						fadeMode = 0
					end
				end)
			end

			local lastVisible = false
		    Flags["Scope_Changer_Type"].changed:Connect(function()
				if Flags["Scope_Changer_Type"].value["ahueno"] then
					scopelb.Image = "rbxassetid://89734938358129"
				elseif Flags["Scope_Changer_Type"].value["pizdec"] then
					scopelb.Image = "rbxassetid://94612942804832"
				else
					scopelb.Image = "rbxassetid://99619927433581"
				end
			end)
			RunService.Heartbeat:Connect(function()
				Crosshairs.Scope.Scope.Visible = not Flags["Scope_Changer"].value
				
				local visible = Crosshairs.Frame1.Visible
				if visible ~= lastVisible and Flags["Scope_Changer"].value then
					lastVisible = visible
					if fadeMode == 0 then
						if visible then
							fade(scopelb, fadeInInfo, 0)
						else
							fade(scopelb, fadeOutInfo, 1, false)
						end
					else
						fadeId += 1 
						if visible then
							fade(scopelb, fadeInInfo, 0)
						else
							fade(scopelb, fadeOutInfo, 1, false)
						end
					end
				end
			end)
		end
		Visuals.defaultlighting = { 
			["de_dust2"] = {
				Ambient = _Color3FromRGB(90, 74, 62),
				OutdoorAmbient = _Color3FromRGB(165, 156, 140),
				ClockTime = 13
			},
			["de_seaside"] = {
				Ambient = _Color3FromRGB(211, 237, 255),
				OutdoorAmbient = _Color3FromRGB(180, 180, 180),
				ClockTime = 14
			},
			["de_train"] = {
				Ambient = _Color3FromRGB(130, 118, 95),
				OutdoorAmbient = _Color3FromRGB(163, 161, 146),
				ClockTime = 9.5
			},
			["de_mirage"] = {
				Ambient = _Color3FromRGB(214, 214, 214),
				OutdoorAmbient = _Color3FromRGB(165, 156, 140),
				ClockTime = 15
			},
			["de_cache"] = {
				Ambient = _Color3FromRGB(214, 214, 214),
				OutdoorAmbient = _Color3FromRGB(165, 156, 140),
				ClockTime = 14
			},
			["de_nuke"] = {
				Ambient = _Color3FromRGB(90, 74, 62),
				OutdoorAmbient = _Color3FromRGB(165, 156, 140),
				ClockTime = 13
			},
			["de_vertigo"] = {
				Ambient = _Color3FromRGB(255, 255, 255),
				OutdoorAmbient = _Color3FromRGB(255, 255, 255),
				ClockTime = 15
			},
			["de_inferno"] = {
				Ambient = _Color3FromRGB(130, 118, 95),
				OutdoorAmbient = _Color3FromRGB(163, 161, 146),
				ClockTime = 9.5
			},
			["de_aztec"] = {
				Ambient = _Color3FromRGB(149, 175, 179),
				OutdoorAmbient = _Color3FromRGB(149, 159, 191),
				ClockTime = 15
			}
		}

		Visuals.crosshair = {
			drawingObjects = {
				outlines = {},
				objects = {}
			},
			currentaddedrotation = 0,
			currentrotation = 0,

			screenPosition = camera.ViewportSize / 2,
			targetScreenPosition = camera.ViewportSize / 2
		}

		for i = 1, 4 do
			Visuals.crosshair.drawingObjects.outlines[i] = Esp.createDrawing("Line", {
				Thickness = 3,
				Color = _Color3New(0, 0, 0),
				Transparency = 1,
				Visible = true
			})
			Visuals.crosshair.drawingObjects.objects[i] = Esp.createDrawing("Line", {
				Thickness = 1,
				Color = _Color3New(1, 1, 1),
				Transparency = 1,
				Visible = true
			})
		end
		local function GetClosestTargetWorld()
			local center = camera.ViewportSize / 2
			local best, bestDist = nil, math.huge

			for _, plr in ipairs(Players:GetPlayers()) do
				local info = PlayerModule.storage[plr]
				if plr ~= LocalPlayer and info.alive and info.enemy then
					local char = plr.Character
					local hrp = char and char:FindFirstChild("HumanoidRootPart")
					local sp = camera:WorldToViewportPoint(hrp.Position)
					local dist = (Vector2.new(sp.X, sp.Y) - center).Magnitude
					if dist < bestDist then
						bestDist = dist
						best = hrp.Position
					end
				end
			end

			return best
		end

		RunService.Stepped:Connect(function(_, deltaTime)
			if not Flags["Custom_Crosshair"].value then
				for i = 1, 4 do
					Visuals.crosshair.drawingObjects.objects[i].Visible = false
					Visuals.crosshair.drawingObjects.outlines[i].Visible = false
				end
				return
			end

			for _, frame in next, _GetChildren(Crosshairs.Crosshair) do
				if not _IsA(frame, "ImageLabel") then
					frame.BackgroundTransparency = 1
				end
			end

			local center = camera.ViewportSize / 2
			local targetWorld = Flags["Crosshair_At_Target"].value and GetClosestTargetWorld() or nil

			if targetWorld then
				local sp, onScreen = camera:WorldToViewportPoint(targetWorld)
				local raw = Vector2.new(sp.X, sp.Y)

				if onScreen or not Flags["Crosshair_OutOfView"].value then
					Visuals.crosshair.targetScreenPosition = raw
				else
					local dir = (raw - center).Unit
					local radius = math.min(center.X, center.Y) - Flags["Crosshair_Edge_Offset"].value
					Visuals.crosshair.targetScreenPosition = center + dir * radius
				end
			else
				Visuals.crosshair.targetScreenPosition = center
			end

			Visuals.crosshair.screenPosition =
				Visuals.crosshair.screenPosition:Lerp(
					Visuals.crosshair.targetScreenPosition,
					math.clamp(deltaTime * Flags["Crosshair_Smoothness"].value, 0, 1)
				)

			local screenPos = Visuals.crosshair.screenPosition
			local scopeVisible = Crosshairs.Scope.Visible

			for i = 1, 4 do
				local obj = Visuals.crosshair.drawingObjects.objects[i]
				local out = Visuals.crosshair.drawingObjects.outlines[i]

				obj.Visible = true
				obj.Color = Flags["Custom_Crosshair_Color1"].color
				obj.Thickness = Flags["Crosshair_Thickness"].value
				obj.Transparency = scopeVisible and 0 or 1

				out.Visible = Flags["Crosshair_Outlines"].value
				out.Thickness = Flags["Crosshair_Thickness"].value + Flags["Crosshair_Outline_Size"].value
				out.Transparency = scopeVisible and 0 or 1
			end

			local animated = Flags["Impulse_Crosshair"].value
			local t = (math.sin(tick() * Flags["Cycle_Speed"].value) + 1) * 0.5

			local speed = animated
				and (Flags["Minimum_Speed"].value + (Flags["Maximum_Speed"].value - Flags["Minimum_Speed"].value) * t)
				or Flags["Crosshair_Rotation_Speed"].value

			local scale = animated
				and (Flags["Minimum_Length"].value + (Flags["Maximum_Length"].value - Flags["Minimum_Length"].value) * t)
				or 1

			local width = Flags["Crosshair_Width"].value * scale
			local length = Flags["Crosshair_Length"].value * scale
			local widthGap = Flags["Crosshair_Width_Gap"].value * scale
			local lengthGap = Flags["Crosshair_Length_Gap"].value * scale

			Visuals.crosshair.currentaddedrotation += speed * deltaTime
			Visuals.crosshair.currentrotation =
				math.rad(Flags["Crosshair_Rotation"].value + Visuals.crosshair.currentaddedrotation)

			local angle = Visuals.crosshair.currentrotation
			local offset = Flags["Crosshair_Outline_Offset"].value

			local function setLines(i, dx, dy, gap, size)
				local dir = Vector2.new(dx, dy)
				local from = dir * gap
				local to = from + dir * size

				local of = from - dir.Unit * offset
				local ot = to + dir.Unit * offset

				local o1 = Visuals.crosshair.drawingObjects.objects[i]
				local l1 = Visuals.crosshair.drawingObjects.outlines[i]
				o1.From = screenPos - from
				o1.To = screenPos - to
				l1.From = screenPos - of
				l1.To = screenPos - ot

				local o2 = Visuals.crosshair.drawingObjects.objects[i + 1]
				local l2 = Visuals.crosshair.drawingObjects.outlines[i + 1]
				o2.From = screenPos + from
				o2.To = screenPos + to
				l2.From = screenPos + of
				l2.To = screenPos + ot
			end

			setLines(1, math.sin(angle), math.cos(angle), lengthGap, length)
			setLines(3, math.sin(angle + math.pi / 2), math.cos(angle + math.pi / 2), widthGap, width)
		end)


	    Flags["Custom_Crosshair"].changed:Connect(function()
			if not Flags["Custom_Crosshair"].value and not Flags["ThirdPerson_Enabled"].value and Flags["ThirdPerson_Enabled_Key"].value then
				for _, frame in next, _GetChildren(Crosshairs.Crosshair) do
					if not _IsA(frame, "ImageLabel") then
						frame.BackgroundTransparency = 0
					end
				end
			end
		end)

		local textures = {
			"rbxassetid://304777684",
			"rbxassetid://419625073"
		}


		local model, handle, highlight = nil, nil, nil
		local angle, spin = 0, 0
		local lastAssetId = 0

		function Visuals.destroyAccessory()

			if model then
				_Pcall(function() _Destroy(model) end)
				model = nil
			end
			if handle then
				_Pcall(function() _Destroy(handle) end)
				handle = nil
			end
			highlight = nil
		end

		function Visuals.applyHighlight()
			if highlight then
				_Pcall(function() _Destroy(highlight) end)
				highlight = nil
			end
			if not handle or not _IsA(handle, "BasePart") or not _IsDescendantOf(handle, workspace) then return end

			local h = _Instancenew("Highlight")
			h.Name = "AccessoryHighlight"
			h.Adornee = handle
			h.Enabled = Flags.Accessory_Highlight_Enabled.value
			h.FillColor = Flags.Accessory_Highlight_FillColor.color
			h.OutlineColor = Flags.Accessory_Highlight_OutlineColor.color
			h.FillTransparency = Flags.Accessory_Highlight_FillTransparency.value/10
			h.OutlineTransparency = Flags.Accessory_Highlight_OutlineTransparency.value/10
			h.Parent = handle

			highlight = h
		end

		function Visuals.loadAccessory()
			Visuals.destroyAccessory()

			local rawId = Flags.Accessory_ID.value
			local assetId = _tonumber(rawId)
			if not assetId or assetId <= 0 then
				return
			end

			local success, asset = _Pcall(function()
				return game:GetObjects("rbxassetid://" .. assetId)[1]
			end)

			if not success or _Typeof(asset) ~= "Instance" then
				return
			end

			local part = _FindFirstChild(asset, "Handle", true)
			if not part or not _IsA(part, "BasePart") then
				return
			end

			part.Anchored = true
			part.CanCollide = false
			part.Transparency = 0
			part.Parent = workspace

			model = asset
			handle = part

			Visuals.applyHighlight()
		end
		
		RunService.RenderStepped:Connect(function(dt)
			local currentId = _tonumber(Flags.Accessory_ID.value)
			if currentId ~= lastAssetId then
				lastAssetId = currentId or 0
				Visuals.loadAccessory()
			end

			if not Flags.Accessory_Enabled.value then
				if handle then handle.Transparency = 1 end
				if highlight then highlight.Enabled = false end
				return
			end

			if not handle or not _IsDescendantOf(handle, workspace) then
				Visuals.loadAccessory()
				return
			end

			local root = LocalPlayer.Character and _FindFirstChild(LocalPlayer.Character, "HumanoidRootPart")
			if not root then return end

			handle.Transparency = 0

			if highlight then
				highlight.Enabled = Flags.Accessory_Highlight_Enabled.value
				highlight.FillColor = Flags.Accessory_Highlight_FillColor.color
				highlight.OutlineColor = Flags.Accessory_Highlight_OutlineColor.color
				highlight.FillTransparency = Flags.Accessory_Highlight_FillTransparency.value/10
				highlight.OutlineTransparency = Flags.Accessory_Highlight_OutlineTransparency.value/10
			end

			angle += Flags.Accessory_Rotation_Speed.value * dt
			spin += Flags.Accessory_Spin_Speed.value * dt

			local orbit = _Vector3New(
				_MathCos(_MathRad(angle)) * Flags.Accessory_Distance.value,
				Flags.Accessory_Height,
				_MathSin(_MathRad(angle)) * Flags.Accessory_Distance.value
			)

			handle.Position = root.Position + orbit
			handle.Orientation = Flags.Accessory_Spin_ItSelf.value and _Vector3New(0, spin % 360, 0) or Vector3.zero
		end)

		_Instancenew("BloomEffect", camera)
		local customAtmosphere = _Instancenew("Atmosphere", Lighting)
		local updateWorldColorStop = _Tick()
		function Visuals.updateworldcolor()
			for i, v in next, (_GetChildren(Lighting)) do 
				if v.Name == "Atmosphere" then
					if v ~= customAtmosphere then
						_Destroy(v)
					end
				end
			end

			if _Tick() - updateWorldColorStop < 1/20 then
				return
			end
			updateWorldColorStop = _Tick()
			if Flags["Ambience_Enabled"].value then
				Lighting.OutdoorAmbient = Flags["Ambience_Color"].color
				Lighting.Ambient = Flags["Ambience_Color"].color
			else
				if _FindFirstChild(workspace, "Map") and _FindFirstChild(workspace.Map, "Origin") then
					if Visuals.defaultlighting[workspace.Map.Origin.Value] ~= nil then
						for i, v in next, (Visuals.defaultlighting[workspace.Map.Origin.Value]) do
							Lighting[i] = v
						end
					end
				else
					Lighting.OutdoorAmbient = _Color3New(0.647059, 0.611765, 0.54902) 
					Lighting.Ambient = _Color3New(0.509804, 0.462745, 0.372549) 
				end
			end
			if Flags["Force_Time"].value then
				Lighting.ClockTime = Flags["Force_TimeValue"].value
			else
				Lighting.ClockTime = 9
			end
			if Flags["Custom_Saturation"].value then
				camera.ColorCorrection.TintColor = Flags["Custom_SaturationColor"].color
				camera.ColorCorrection.Saturation = Flags["Custom_SaturationValue"].value / 100
			else
				camera.ColorCorrection.Saturation = 0
				camera.ColorCorrection.TintColor = _Color3New(1, 1, 1)
			end
			camera.Bloom.Enabled = Flags["Custom_Bloom"].value
			if Flags["Custom_Bloom"].value then
				camera.Bloom.Intensity = Flags["Custom_BloomIntensity"].value / 100
				camera.Bloom.Size = Flags["Custom_BloomSize"].value * 14 / 25
				camera.Bloom.Threshold = Flags["Custom_BloomThreshold"].value / 400
			else
				camera.Bloom.Intensity = 0
				camera.Bloom.Size = 0
				camera.Bloom.Threshold = 0
			end
			if Flags["Custom_Atmosphere"].value then
				customAtmosphere.Color = Flags["Atmosphere_Color1"].color
				customAtmosphere.Decay = Flags["Atmosphere_Color2"].color
				customAtmosphere.Density = Flags["Custom_AtmosphereDensity"].value / 100
				customAtmosphere.Glare = Flags["Custom_AtmosphereGlare"].value / 10
				customAtmosphere.Haze = Flags["Custom_AtmosphereHaze"].value / 10
			else
				customAtmosphere.Density = 0
				customAtmosphere.Glare = 0
				customAtmosphere.Haze = 0
			end
			if Flags["Custom_Brightness"].value then
				if Flags["Custom_Brightness_Mode"].value["Fullbright"] then
					Lighting.Brightness = 1
					Lighting.GlobalShadows = false
				else
					Lighting.Brightness = 0
				end
			else
				Lighting.GlobalShadows = true
				Lighting.Brightness = 1 
			end
		end

		RunService.Stepped:Connect(Visuals.updateworldcolor)

		local function createTrail(character)
			local hrp = _FindFirstChild(character, "HumanoidRootPart")
			if not hrp then return end
			if _FindFirstChild(hrp, "💀😭💀💀😎👌😊😘😘😘😒😒😒🤦‍♂️🤷‍♀️🤷‍♀️🤷‍♂️🤷‍♂️") then return end

			local att1 = _Instancenew("Attachment")
			att1.Name = "💀😭💀💀😎👌😊😘😘😘😒😒😒🤦‍♂️🤷‍♀️🤷‍♀️🤷‍♂️🤷‍♂️"
			att1.Parent = hrp

			local att2 = _Instancenew("Attachment")
			att2.Name = "💀😭💀💀😎👌😊😘😘😘😒😒😒🤦‍♂️🤷‍♀️🤷‍♀️🤷‍♂️"
			att2.Parent = hrp

			local trail = _Instancenew("Trail")
			trail.Name = "💀😭💀💀😎👌😊😘😘😘😒😒😒🤦‍♂️🤷‍♀️🤷‍♀️"
			trail.Attachment0 = att1
			trail.Attachment1 = att2
			trail.Parent = hrp
			trail.LightEmission = 1
			trail.LightInfluence = 1
			trail.MinLength = 0.01
			trail.MaxLength = 50
			trail.Lifetime = 2
			trail.FaceCamera = true
			trail.Color = _ColorSequenceNew(Flags["Trail_Color"].color)
			trail.Transparency = _NumberSequenceNew(0, 0)
			return trail, att1, att2
		end

		local trail, att1, att2
		RunService.RenderStepped:Connect(function()
			local character = LocalPlayer.Character
			if character and _FindFirstChild(character, "HumanoidRootPart") and Flags["Trail_Enabled"].value then
				if not trail or not trail.Parent then
					trail, att1, att2 = createTrail(character)
				end
				if trail then
					--retardead codding
					local hrp = character.HumanoidRootPart
					local ray = _RaycastParamsNew()
					ray.FilterDescendantsInstances = {character}
					ray.FilterType = Enum.RaycastFilterType.Blacklist
					local result = _Raycast(workspace, hrp.Position, _Vector3New(0, -5, 0), ray)
					if result then
						att1.Position = _Vector3New(0, -(hrp.Position.Y - result.Position.Y), 0)
						att2.Position = _Vector3New(0, -(hrp.Position.Y - result.Position.Y) + 0.1, 0)
					else
						att1.Position = _Vector3New(0, -3, 0)
						att2.Position = _Vector3New(0, -2.9, 0)
					end
					trail.Color = _ColorSequenceNew(Flags["Trail_Color"].color)
					trail.MaxLength = Flags["Trail_MaxSize"].value 
					trail.Lifetime = Flags["Trail_LifeTime"].value 
					trail.Transparency = _NumberSequenceNew(Flags["Trail_Enabled"].value and 0 or 1, Flags["Trail_Enabled"].value and 0 or 1)
				end
			end
		end)

		LocalPlayer.CharacterAdded:Connect(function(char)
			char:WaitForChild("HumanoidRootPart")
			trail, att1, att2 = createTrail(char)
		end)

	end
	do --Misc
		Misc.hitsound = _Instancenew("Sound", camera)
		Misc.olddamage = 0
		Misc.killsound = _Instancenew("Sound", camera)
		Misc.oldkills  = 0

		Misc.fakehrp = nil 
		Misc.realhrp = nil 
		Misc.lasthrpCf = _CFrameNew()
		Misc.hrpfix = nil
		Misc.lastreplicationtick  = _Tick()


		function Misc.setupfakehrp(char)
			local oldhrp = char:WaitForChild("HumanoidRootPart", 1/0)

			Misc.realhrp = oldhrp
			Misc.lasthrpCf = Misc.realhrp.CFrame
			Misc.fakehrp = _Clone(oldhrp) 
			
			Misc.realhrp.Name = "___"
			Misc.fakehrp.Name = "HumanoidRootPart"
			Misc.fakehrp.Parent = char
			cache.replace(Misc.realhrp, Misc.fakehrp)

			Misc.fakehrp.CFrame = Misc.lasthrpCf
			Misc.realhrp.CFrame = Misc.lasthrpCf
		end

		RunService.Stepped:Connect(function(delta)
			local char = LocalPlayer.Character
			if not Misc.realhrp or not Misc.fakehrp or not char then 
				return
			end
			Misc.realhrp.CFrame = Misc.lasthrpCf
			Misc.realhrp.AssemblyLinearVelocity = _Vector3New()
		end)

		function Misc.removefakehrp()
			if Misc.fakehrp == nil then return end
			Misc.fakehrp.Name = "___"
			Misc.realhrp.CFrame = Misc.fakehrp.CFrame 
			Misc.realhrp.Name = "HumanoidRootPart"
			_Destroy(Misc.fakehrp)
			Misc.fakehrp = nil
			Misc.realhrp = nil
		end

		if LocalPlayer.Character then
			Misc.setupfakehrp(LocalPlayer.Character)
		end

		LocalPlayer.CharacterAdded:Connect(function()
			repeat _TaskWait() until LocalPlayer.Character and _FindFirstChild(LocalPlayer.Character, "Humanoid") and LocalPlayer.Character.Humanoid.Health > 0
			_TaskWait(.1)
			if LocalPlayer.Character and _FindFirstChild(LocalPlayer.Character, "HumanoidRootPart") then
				Misc.setupfakehrp(LocalPlayer.Character)
			end
		end)
		LocalPlayer.CharacterRemoving:Connect(Misc.removefakehrp)
		local gui = _Instancenew("ScreenGui", LocalPlayer.PlayerGui)
		gui.IgnoreGuiInset = true
		gui.ResetOnSpawn = false

		function createSide(side)
			local frame = Instance.new("Frame")
			frame.AnchorPoint = Vector2.new(side == "Left" and 0 or 1, 0)
			frame.Position = UDim2.fromScale(side == "Left" and 0 or 1, 0)
			frame.Size = UDim2.fromScale(0.45, 1)
			frame.BackgroundColor3 = Color3.new(1,1,1)
			frame.BackgroundTransparency = 1
			frame.BorderSizePixel = 0
			frame.Parent = gui

			local gradient = Instance.new("UIGradient")
			gradient.Rotation = side == "Left" and 0 or 180
			gradient.Color = ColorSequence.new{
				ColorSequenceKeypoint.new(0, Color3.new(1,1,1)),
				ColorSequenceKeypoint.new(1, Color3.new(1,1,1))
			}
			gradient.Transparency = NumberSequence.new{
				NumberSequenceKeypoint.new(0, 0),
				NumberSequenceKeypoint.new(1, 1)
			}
			gradient.Parent = frame

			return frame
		end

		RunService.Stepped:Connect(function()
			local delayedcf

			if not Misc.fakehrp or not Misc.realhrp or not LocalPlayer.Character and Utility:IsPlayerAlive(LocalPlayer.Character) then
				return
			end
			local fakehrp = Misc.fakehrp
			if fakehrp then
				delayedcf = fakehrp.CFrame
				if Flags["AntiAim_Enabled"].value and Flags["AntiAim_In_Gravity"].value then
					local velocity = fakehrp.Velocity.Magnitude
					local baseSpin = _MathRad(Flags["AntiAim_In_Gravity_BaseSpin"].value) 
					local maxSpin = _MathRad(Flags["AntiAim_In_Gravity_MaximumSpin"].value) 
					local spinSpeed = Flags["AntiAim_In_Gravity_Speed"].value
					local speedFactor = _MathClamp(velocity / 16, 0, 1)
					local t = _Tick()
					local spinRange = baseSpin + (maxSpin - baseSpin) * speedFactor

					local x = _MathSin(t * spinSpeed) * spinRange
					local y = _MathCos(t * spinSpeed * 0.6) * spinRange
					local z = _MathSin(t * spinSpeed * 0.3) * spinRange

					local spinRotation = _CFrameAngles(x, y, z)
					delayedcf = delayedcf * spinRotation
				end
				if Flags["AntiAim_СFrame_Manipulation"].value then
					delayedcf = delayedcf * _CFrameNew(Flags["AntiAim_СFrame_Manipulation_X"].value, Flags["AntiAim_СFrame_Manipulation_Y"].value, Flags["AntiAim_СFrame_Manipulation_Z"].value)
					delayedcf = delayedcf * _CFrameAngles(_MathRad(Flags["AntiAim_СFrame_Manipulation_X_Angles"].value), _MathRad(Flags["AntiAim_СFrame_Manipulation_Y_Angles"].value), _MathRad(Flags["AntiAim_СFrame_Manipulation_Z_Angles"].value) )
				end 
				if Flags["FakeLags_Enabled"].value then
					_TaskWait(Flags["FakeLags_Ticks"].value/1000)
					local limit = Flags["FakeLags_Limit"].value / 64
					local timesincelastrefresh = _Tick() - Misc.lastreplicationtick
					if timesincelastrefresh < limit then
						return
					end
				end
				if Flags["FakeLags_PreventReplication"].value and Flags["FakeLags_PreventReplication_Key"].value then return end
				Misc.lasthrpCf = delayedcf
				Misc.lastreplicationtick = _Tick()
			end

			if _FindFirstChild(LocalPlayer.Character, "HeadHB") and _FindFirstChild(LocalPlayer.Character, "FakeHead") then
				if not _FindFirstChild(LocalPlayer.Character.HeadHB,"Weld") and not _FindFirstChild(LocalPlayer.Character.FakeHead, "Weld") then
					LocalPlayer.Character.FakeHead.AssemblyLinearVelocity = _Vector3New(0, 0, 0)
					LocalPlayer.Character.HeadHB.AssemblyLinearVelocity = _Vector3New(0, 0, 0)

					LocalPlayer.Character.FakeHead.CFrame = LocalPlayer.Character.Head.CFrame
					LocalPlayer.Character.HeadHB.CFrame = LocalPlayer.Character.Head.CFrame
				end
			end
		end)
		Flags["Remove_Scope"].changed:Connect(function()
			for i, v in next, (_GetChildren(Crosshairs)) do
				if v.Name:match("Frame") then
					v.BackgroundTransparency = Flags["Remove_Scope"].value and 1 or 0
				elseif v.Name:match("Scope") then
					v.ImageTransparency = Flags["Remove_Scope"].value and 1 or 0 
				end
			end
		end)
		function Misc.hitplayer()
			if LocalPlayer.Additionals.TotalDamage.Value > Misc.olddamage then
				if Flags["HitSounds_Enabled"].value then
					local hitsoundID = Flags["HitSounds_Ids"].value
					if hitsoundID["Skeet"] then hitsoundID = '5447626464'
					elseif hitsoundID["Overwatch"] then hitsoundID = '18410058858'
					elseif hitsoundID["Rust"] then hitsoundID = '5043539486'
					elseif hitsoundID["Minecraft"] then hitsoundID = '7273736372'
					elseif hitsoundID["Minecraft XP"] then hitsoundID = '1053296915'
					elseif hitsoundID["Retro loud"] then hitsoundID = '3976061026'
					elseif hitsoundID["Matchine gun"] then hitsoundID = '17705555617'
					elseif hitsoundID["Ray"] then hitsoundID = '131179973'
					elseif hitsoundID["Cod"] then hitsoundID = '160432334'
					elseif hitsoundID["Beautiful"] then hitsoundID = '5709456554'
					elseif hitsoundID["Killingspree"] then hitsoundID = '937898383'
					elseif hitsoundID["Squash"] then hitsoundID = '3466981613'
					elseif hitsoundID["Supersmash"] then hitsoundID = '2039907664'
					elseif hitsoundID["CSGO"] then hitsoundID = '7269900245'
					elseif hitsoundID["Slap"] then hitsoundID = '4888372697'
					elseif hitsoundID["MCOOF"] then hitsoundID = '5869422451'
					elseif hitsoundID["Quek"] then hitsoundID = '4868633804'
					elseif hitsoundID["Epic"] then hitsoundID = '7344303740'
					elseif hitsoundID["Osu"] then hitsoundID = '7149919358'
					elseif hitsoundID["TF2 Pan"] then hitsoundID = '3431749479'
					elseif hitsoundID["1"] then hitsoundID = '7349055654'
					elseif hitsoundID["Godlike"] then hitsoundID = '7463103082'
					elseif hitsoundID["Ownage"] then hitsoundID = '6887181639'
					elseif hitsoundID["Ultrakill"] then hitsoundID = '937885646'
					elseif hitsoundID["Win"] then hitsoundID = '341542437'
					elseif hitsoundID["Denied"] then hitsoundID = '7356986865'
					elseif hitsoundID["Lessgo"] then hitsoundID = '6782594987'
					elseif hitsoundID["Headshot"] then hitsoundID = '5764885927'
					elseif hitsoundID["Bruh"] then hitsoundID = '535690488'
					elseif hitsoundID["Bag"] then hitsoundID = '364942410'
					elseif hitsoundID["Baimware"] then hitsoundID = '6607339542'
					elseif hitsoundID["Neverlose"] then hitsoundID = '6607204501'
					elseif hitsoundID["Pop"] then hitsoundID = '105543133746827'
					elseif hitsoundID["Bass"] then hitsoundID = '12221944'
					elseif hitsoundID["Electro"] then hitsoundID = '3458224686'
					elseif hitsoundID["TF2"] then hitsoundID = '3455144981'
					elseif hitsoundID["Percussion"] then hitsoundID = '3466985670'
					elseif hitsoundID["Osu Mint"] then hitsoundID = '81883450827543'
					elseif hitsoundID["Rocket"] then hitsoundID = '9087976483'
					elseif hitsoundID["Vine Boom"] then hitsoundID = '9088081730'
					elseif hitsoundID["Snap"] then hitsoundID = '93172144688075'
					elseif hitsoundID["Vortex"] then hitsoundID = '3466980212'
					elseif hitsoundID["Pow"] then hitsoundID = '3516546035'
					elseif hitsoundID["Bell"] then hitsoundID = '97724019712141'
					elseif hitsoundID["Retro"] then hitsoundID = '3466984142'
					elseif hitsoundID["Fatality"] then hitsoundID = '115982072912004'
					elseif hitsoundID["Beepo"] then hitsoundID = '3466987025'
					end

					Misc.hitsound.SoundId = "rbxassetid://" .. hitsoundID
					Misc.hitsound.Volume = Flags["HitSounds_Volume"].value / 10
					Misc.hitsound:Play()
				end
			end
    		Misc.olddamage = LocalPlayer.Additionals.TotalDamage.Value
		end

		LocalPlayer.Additionals.TotalDamage.Changed:Connect(Misc.hitplayer)

		function Misc.killplayer()
			if LocalPlayer.Status.Kills.Value > Misc.oldkills then
				if Flags["HitEffectsEnabled"].value and Flags["HitEffects_Blinding"].value then
					print(1)	
					local left = createSide("Left")
					local right = createSide("Right")
									
					local tweenInInfo = TweenInfo.new(0.4, Enum.EasingStyle.Quad, Enum.EasingDirection.Out)
					local tweenOutInfo = TweenInfo.new(0.8, Enum.EasingStyle.Quad, Enum.EasingDirection.In)

					local tweenInLeft = TweenService:Create(left, tweenInInfo, { BackgroundTransparency = 0.2 })
					local tweenInRight = TweenService:Create(right, tweenInInfo, { BackgroundTransparency = 0.2 })

					tweenInLeft:Play()
					tweenInRight:Play()

					_TaskWait(0.6)

					local tweenOutLeft = TweenService:Create(left, tweenOutInfo, { BackgroundTransparency = 1 })
					local tweenOutRight = TweenService:Create(right, tweenOutInfo, { BackgroundTransparency = 1 })

					tweenOutLeft:Play()
					tweenOutRight:Play()
					tweenOutLeft.Completed:Once(function()
						if left then left:Destroy() end
					end)

					tweenOutRight.Completed:Once(function()
						if right then right:Destroy() end
					end)
				end
				if Flags["KillSounds_Enabled"].value then
					local killsoundID = Flags["KillSounds_Ids"].value

					if killsoundID["Skeet"] then killsoundID = '5447626464'
					elseif killsoundID["Overwatch"] then killsoundID = '18410058858'
					elseif killsoundID["Rust"] then killsoundID = '5043539486'
					elseif killsoundID["Monster kill"] then killsoundID = '130772284'
					elseif killsoundID["Minecraft"] then killsoundID = '7273736372'
					elseif killsoundID["Minecraft XP"] then killsoundID = '1053296915'
					elseif killsoundID["Retro loud"] then killsoundID = '3976061026'
					elseif killsoundID["Matchine gun"] then killsoundID = '17705555617'
					elseif killsoundID["Ray"] then killsoundID = '131179973'
					elseif killsoundID["Cod"] then killsoundID = '160432334'
					elseif killsoundID["Beautiful"] then killsoundID = '5709456554'
					elseif killsoundID["Killingspree"] then killsoundID = '937898383'
					elseif killsoundID["Squash"] then killsoundID = '3466981613'
					elseif killsoundID["Supersmash"] then killsoundID = '2039907664'
					elseif killsoundID["CSGO"] then killsoundID = '7269900245'
					elseif killsoundID["Slap"] then killsoundID = '4888372697'
					elseif killsoundID["MCOOF"] then killsoundID = '5869422451'
					elseif killsoundID["Quek"] then killsoundID = '4868633804'
					elseif killsoundID["Epic"] then killsoundID = '7344303740'
					elseif killsoundID["Osu"] then killsoundID = '7149919358'
					elseif killsoundID["TF2 Pan"] then killsoundID = '3431749479'
					elseif killsoundID["1"] then killsoundID = '7349055654'
					elseif killsoundID["Godlike"] then killsoundID = '7463103082'
					elseif killsoundID["Ownage"] then killsoundID = '6887181639'
					elseif killsoundID["Ultrakill"] then killsoundID = '937885646'
					elseif killsoundID["Win"] then killsoundID = '341542437'
					elseif killsoundID["Denied"] then killsoundID = '7356986865'
					elseif killsoundID["Lessgo"] then killsoundID = '6782594987'
					elseif killsoundID["Headshot"] then killsoundID = '5764885927'
					elseif killsoundID["Bruh"] then killsoundID = '535690488'
					elseif killsoundID["Bag"] then killsoundID = '364942410'
					elseif killsoundID["Baimware"] then killsoundID = '6607339542'
					elseif killsoundID["Neverlose"] then killsoundID = '6607204501'
					elseif killsoundID["Pop"] then killsoundID = '105543133746827'
					elseif killsoundID["Bass"] then killsoundID = '12221944'
					elseif killsoundID["Electro"] then killsoundID = '3458224686'
					elseif killsoundID["TF2"] then killsoundID = '3455144981'
					elseif killsoundID["Percussion"] then killsoundID = '3466985670'
					elseif killsoundID["Osu Mint"] then killsoundID = '81883450827543'
					elseif killsoundID["Rocket"] then killsoundID = '9087976483'
					elseif killsoundID["Vine Boom"] then killsoundID = '9088081730'
					elseif killsoundID["Snap"] then killsoundID = '93172144688075'
					elseif killsoundID["Vortex"] then killsoundID = '3466980212'
					elseif killsoundID["Pow"] then killsoundID = '3516546035'
					elseif killsoundID["Bell"] then killsoundID = '97724019712141'
					elseif killsoundID["Retro"] then killsoundID = '3466984142'
					elseif killsoundID["Fatality"] then killsoundID = '115982072912004'
					elseif killsoundID["Beepo"] then killsoundID = '3466987025'
					end

					Misc.killsound.SoundId = "rbxassetid://" .. killsoundID
					Misc.killsound.Volume = Flags["KillSounds_Volume"].value  / 10
					Misc.killsound:Play()
				end
			end
			Misc.oldkills = LocalPlayer.Status.Kills.Value
		end
	    RunService.Heartbeat:Connect(function()
			if Flags["Inf_Ammo"].value then 
				Utility.Weapon:UpdateAmmo(9999999)
				Utility.Weapon:UpdateStoredAmmo(9999999)
			end

		end)
		LocalPlayer.Status.Kills.Changed:Connect(Misc.killplayer)
		
		function Misc.GiveSecondaryWeapon(name)
			Cache.Client.special2 = false
			Cache.Client.special = false
			Cache.Client.secondary = name
			Cache.Client.secondaryowner = LocalPlayer.Name
			Cache.Client.secondaryskin = "Stock"
			Cache.Client.secondarystattrak = nil
			Utility.Weapon:UpdateAmmo(9999999)
			Utility.Weapon:UpdateStoredAmmo(9999999)
			Cache.Client.equipped = "secondary"
			Cache.Client.gun = replicatedStorage.Weapons[Cache.Client.secondary]
			Cache.Client.fgun = replicatedStorage.Weapons[Cache.Client.secondary]
			Cache.Client.updateInventory()
		end
		function Misc.GivePrimaryWeapon(name)
			Cache.Client.special = false
			Cache.Client.realgun = name
			Cache.Client.primary = name
			Cache.Client.primaryowner = LocalPlayer.Name
			
			Cache.Client.primaryskin = "Stock"
			Cache.Client.primarystattrak = nil
			Utility.Weapon:UpdateAmmo(9999999)
			Utility.Weapon:UpdateStoredAmmo(9999999)
			Cache.Client.equipped = "primary"
			Cache.Client.gun = replicatedStorage.Weapons[Cache.Client.primary]
			Cache.Client.fgun = replicatedStorage.Weapons[Cache.Client.primary]
			Cache.Client.updateInventory()
		end

		function Misc.CreateGunModel(GunName)
			local gun = replicatedStorage.Weapons[GunName]
			local weaponinhand = _Clone(gun.Model)
			weaponinhand.Parent = LocalPlayer.Character
			local gunweld = _Instancenew("Motor6D")
			gunweld.Parent = weaponinhand
			gunweld.Part0 = LocalPlayer.Character["RightHand"]
			gunweld.Part1 = weaponinhand
			gunweld.Name = "GunWeld"
			weaponinhand.Name = "Gun"
			if gun.Name == "DualBerettas" then
				local weaponinhand2 = _Clone(gun.Model2)
				weaponinhand2.Parent = LocalPlayer.Character
				local gunweld = _Instancenew("Motor6D")
				gunweld.Parent = weaponinhand2
				gunweld.Part0 = LocalPlayer.Character["LeftHand"]
				gunweld.Part1 = weaponinhand2
				gunweld.Name = "GunWeld"
				weaponinhand2.Name = "Gun2"
			end
			local string = _Instancenew("StringValue")
			string.Parent = weaponinhand
			string.Name = "AnimateValue"
			if gun.Name == "MP7" then
				gunweld.C0 = _CFrameNew(0.15, 0, 0.15)
			end
			if gun.Name == "Negev" then
				gunweld.C0 = _CFrameNew(-0.15, 0, 0.3)
			end
			if gun.Name == "Bizon" then
				gunweld.C0 = _CFrameNew(0.3, -0.45, 0.15) * _CFrameAngles(_MathRad(-45), _MathRad(50), _MathRad(200))
			end
			if gun.Name == "T Knife" or gun.Name == "CT Knife" then
				gunweld.C1 = _CFrameAngles(0, 0, _MathRad(180))
			end
			if gun.Name == "Scout" or gun.Name == "AWP" or gun.Name == "G3SG1" then
				gunweld.Part0 = LocalPlayer.Character["LeftHand"]
				gunweld.C0 = _CFrameNew(0.5, -0.6, -0.5) * _CFrameAngles(_MathRad(155), _MathRad(0), _MathRad(-75))
			end
		end

		RunService.RenderStepped:Connect(function()
			if not Utility.IsPlayerAlive(LocalPlayer.Character) then return end
			local SecondaryToGive = Flags["Spawn_Weapons_Secondary"].value
			local PrimaryToGive = Flags["Spawn_Weapons_Primary"].value
            for i,v in pairs(PrimaryToGive) do
				if v then
					if i ~= Cache.Client.realgun and Flags["Spawn_Weapons"].value then
						Misc.GivePrimaryWeapon(i)
					end
					if Cache.Client.equipped == "primary" and not _FindFirstChild(LocalPlayer.Character, "Gun") and Flags["Spawn_Weapons"] then
						Misc.CreateGunModel(i)
					elseif _FindFirstChild(LocalPlayer.Character, "Gun") and not Cache.Client.equipped == "primary" then
						_Destroy(_FindFirstChild(LocalPlayer.Character, "Gun"))
					end
				end
			end
			for i,v in pairs(SecondaryToGive) do
				if v then
					if i ~= Cache.Client.secondary and Flags["Spawn_Weapons"].value then
						Misc.GiveSecondaryWeapon(i)
					end
					if Cache.Client.equipped == "secondary" and not _FindFirstChild(LocalPlayer.Character, "Gun") and Flags["Spawn_Weapons"] then
						Misc.CreateGunModel(i)
					elseif _FindFirstChild(LocalPlayer.Character, "Gun") and not Cache.Client.equipped == "secondary" then
						_Destroy(_FindFirstChild(LocalPlayer.Character, "Gun"))
					end
				end
			end
		end)
		function ChangeCharacter()
			if Flags["Custom_Character"].value then 
				if Flags["Custom_Character_Value"].value["Custom"] then
					Utility.SetCharacterByUserId(Flags["Character_Changer_Value_Custom"].value)
				else
					Utility.SetCharacter(_FindFirstChild(ChrModels, (function()
						for i, v in pairs(Flags["Custom_Character_Value"].value) do
							if v then
								return i
							end
						end
					end)()))
				end
			end
		end
		Flags["Custom_Character"].changed:Connect(ChangeCharacter)
		Flags["Custom_Character_Value"].changed:Connect(ChangeCharacter)
		Flags["Character_Changer_Value_Custom"].changed:Connect(ChangeCharacter)
		LocalPlayer.CharacterAdded:Connect(function(char) 
			repeat 
				_TaskWait(.5)
			until char and _FindFirstChild(char, "Humanoid") and char.Humanoid.Health > 0 and _FindFirstChild(char, "Gun") and _FindFirstChild(char, "Head") and _FindFirstChild(char, "HumanoidRootPart")
			ChangeCharacter()
			Utility.LocalPlayerChams()
		end)
	end
end
  
local emitter = _Instancenew("ParticleEmitter", ScriptCacheFolder)

emitter.Name = "Explosion"
emitter.Enabled = false
emitter.Acceleration = _Vector3New(0, -3, 0)
emitter.RotSpeed = NumberRange.new(-80, 80)
emitter.VelocitySpread = 360
emitter.Texture = "rbxassetid://7112395588"
emitter.Drag = 13
emitter.Rate = 10
emitter.LightEmission = 1
emitter.LightInfluence = 1
emitter.Rotation = NumberRange.new(0, 360)
emitter.Lifetime = NumberRange.new(0.6, 1.2)
emitter.Speed = NumberRange.new(40)
emitter.SpreadAngle = _Vector2New(360, 360)
emitter.LockedToPart = true
emitter.Size = _NumberSequenceNew({
	_NumberSequenceKeypointNew(0, 0.25, 0),
	_NumberSequenceKeypointNew(0.7003440260887146, 0.1875, 0),
	_NumberSequenceKeypointNew(1, 0, 0)
})

local RNG = Random.new();
local Colors = {
	Color3.fromRGB(255, 49, 49),
	Color3.fromRGB(255, 179, 55),
	Color3.fromRGB(255, 255, 53),
	Color3.fromRGB(105, 255, 79),
	Color3.fromRGB(70, 252, 255),
	Color3.fromRGB(193, 85, 255),
	Color3.fromRGB(255, 169, 225) 
};

do -- Hooks
	local fakeanim = _Instancenew("Animation")
	fakeanim.AnimationId = "rbxassetid://0"
	local oldNamecall; oldNamecall = hookmetamethod(game, "__namecall", function(self, ...)
		local args = {...}
		local method = getnamecallmethod()
		if method == "FireServer" then
			if self.Name == Events.ControlTurn.Name then
				if Flags["AntiAim_Enabled"].value then
					if _G.CurrentPitch then
						args[1] = _G.CurrentPitch
					end
				end
				return oldNamecall(self, _TableUnpack(args))
			elseif self.Name == "ReplicateCameraUDP" and Flags["Anti_Camera_Resolver"].value then
				args[1] = _CFrameNew()
				return oldNamecall(self, _TableUnpack(args))
			elseif self.Name == HitPart.Name then
				local a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30 = ...
				if not Flags["KillAll_Enabled"].value then 
					_TaskSpawn(function()
						local hitpos = RageBot.Target.TargetPosition ~= nil and  RageBot.Target.TargetPosition or Utility.DecryptPosition(a2)
						if Flags["BulletTracerEnabled"].value then
							if _FindFirstChild(LocalPlayer.Character, "Gun") and _FindFirstChild(LocalPlayer.Character.Gun, "Flash") then
								local origin = RageBot.Target.Origin ~= nil and RageBot.Target.Origin or LocalPlayer.Character.Gun.Flash.Position
								Utility.CreateTracer(hitpos, origin, Flags["BulletTracerColor"].color, Flags["BulletTracerTransperency"].value/10, Flags["BulletTracerWidth"].value, Flags["BulletTracerLifetime"].value, (function()
									for i, v in pairs(Flags["BulletTracerTexture"].value) do
										if v then
											return i
										end
									end
								end)(), Flags["BulletTracerTextureLength"].value, Flags["BulletTracerTextureSpeed"].value, Flags["BulletTracerFaceCamera"].value, Flags["BulletTracerLightEmission"].value/10, Flags["BulletTracerLightInfluence"].value/10, Flags["BulletTracerBrightness"].value/10, Flags["BulletTracerSecondBeam"].value, Flags["BulletTracerSecondBeamColor"].color, 0.5)
							end
						end
						if Flags["HitEffectsEnabled"].value and Flags["HitEffects_Firework"].value then
							if a1.Parent.Humanoid  then
								local RandomColor = Colors[RNG:NextInteger(1, #Colors)]
								local NewPart = _Instancenew("Part")
								NewPart.CanCollide = false
								NewPart.Anchored = true
								NewPart.CFrame = _CFrameNew(hitpos)
								NewPart.Size = _Vector3New()
								NewPart.Name = "Firework"
								NewPart.Parent = workspace 
								local ExplosionParticle = _Clone(emitter);
								ExplosionParticle.Color = _ColorSequenceNew({_ColorSequenceKeypointNew(0, RandomColor), _ColorSequenceKeypointNew(1, RandomColor) });
								ExplosionParticle.Parent = NewPart
								ExplosionParticle:Emit(25)
								
								Debris:AddItem(NewPart, 4);
							end
						end
						if Flags["BulletImpactEnabled"].value then
							local hitplayer = _GetPlayerFromCharacter(Players, a1.Parent)
							local hitpos = RageBot.Target.TargetPosition ~= nil and RageBot.Target.TargetPosition or Utility.DecryptPosition(a2)

							local color = Flags["BulletImpactColor"].color
							local transperency = Flags["BulletImpactTransparency"].color
							local enemyColor = Flags["BulletImpactColor2"].color
							local material = Flags["BulletImpactMaterial"].value
							local size = Flags["BulletImpactSize"].value
							local lifetime = Flags["BulletImpactLifetime"].value
							local material = Utility.GetSelectedName(Flags["BulletImpactMaterial"].value)
							if hitplayer and PlayerModule.storage[hitplayer].enemy then
								Utility.CreateImpact(
									hitpos,
									a1,
									enemyColor,
									transperency,
									material,
									size,
									lifetime
								)
							else
								Utility.CreateImpact(
									hitpos,
									a1,
									color,
									transperency,
									material,
									size,
									lifetime
								)
							end
						end

					end)
					if Flags["Damage_Modifier"].value then
						a7 = Flags["Damage_ModifierValue"].value
					end
				end
				oldNamecall(self, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30)
				if Flags["Break_Aura"].value then
					oldNamecall(self, a1, a2, "Multimeter", a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30)
			 	end
				return 
			end
		elseif method == "FindPartOnRayWithIgnoreList" then 
			local passed = false
			for i, v in next, args[2] do
				if v.ClassName == "Accessory" then
					passed = true
				end
			end
			if passed then
				if Flags["Remove_Spread"].value and not _FindFirstChild(Cache.Client.fgun, "Melee") then
					args[1] = _RayNew(camera.CFrame.p, camera.CFrame.lookVector * Cache.Client.gun.Range.Value * 0.0625)
				end
				local enterParam = _RaycastParamsNew()
				enterParam.FilterType = Enum.RaycastFilterType.Blacklist
				enterParam.IgnoreWater = true
				enterParam.FilterDescendantsInstances = args[2]
				local resultOfDepressionAndLonliness = _Raycast(workspace, args[1].Origin, args[1].Direction, enterParam)
				return resultOfDepressionAndLonliness and resultOfDepressionAndLonliness.Instance or nil, resultOfDepressionAndLonliness and resultOfDepressionAndLonliness.Position or (args[1].Origin + args[1].Direction), resultOfDepressionAndLonliness and resultOfDepressionAndLonliness.Normal or _Vector3New(), resultOfDepressionAndLonliness and resultOfDepressionAndLonliness.Material or nil										
			end
		elseif method == "PivotTo" then
			local arms = args[1]
			if self.Name == "Arms" and LocalPlayer.Character then
				if Flags["Disable_Weapon_Swaying"].value then
					arms = camera.CFrame
				end
				if Flags["ViewModel"].value then 
					arms = arms * _CFrameAngles(_MathRad(Flags["ViewModel_X"].value-180), _MathRad(Flags["ViewModel_Y"].value-180), _MathRad(Flags["ViewModel_Z"].value-180))
					arms = arms * _CFrameNew(_Vector3New(_MathRad(Flags["ViewModel_X1"].value-180),_MathRad(Flags["ViewModel_Y2"].value-180),_MathRad(Flags["ViewModel_Z3"].value-180))) 
				end
				if Flags["RageBot_AtTargets"].value and RageBot.Target.TargetPosition then
					arms = _CFrameLookAt(arms.Position, RageBot.Target.TargetPosition)
				end
			    if Flags["ThirdPerson_Enabled"].value and Flags["ThirdPerson_Enabled_Key"].value then
					arms = arms * _CFrameNew(1000, 1000, 1000)
				end
			end
			return oldNamecall(self, arms, _Select(2, ...))
		elseif method == "LoadAnimation" then
			if Flags["Movement_SlideWalk"].value and (args[1].Name == "RunAnim" or args[1].Name == "JumpAnim") then
				args[1] = fakeanim
				return oldNamecall(self, _TableUnpack(args))
			end
		end
		return oldNamecall(self, ...)
	end)
	
	local oldIndex; oldIndex = hookmetamethod(game, "__index", function(self, k)
		if k == "Velocity" and self.Parent == LocalPlayer.Character and Misc.fakehrp then
			return oldIndex(Misc.fakehrp, k)
		end
		return oldIndex(self, k)
	end)
	local oldNIndex; oldNIndex = hookmetamethod(game, "__newindex", function(self, k, v)
		if self == workspace.CurrentCamera and k == "CFrame" then
			if Flags["Remove_Recoil"].value and _tostring(getcallingscript()) == "Client"  then
				return
			end
		end
		if Flags["Remove_Scope"].value and self.Name == "Blur" and self.Parent.Name == "Scope" then
			v = 0
		end
		return oldNIndex(self, k, v)
	end)
end


getgenv().vaderhaxxpaste.loaded = true
ui.startWatermark = true
for i = 1, 3 do
	_TaskWait()
end

ui:createnotification({text = "leak lol", lifetime = 5, priority = 1})
ui:openui()

Features & Information

working only in 7 lvl executor so hello skids so again mega leak and again raven.cc? here for free vaderhaxx ui paste 😂 thanks flohaxx🙏 luv you bro naix ❤ no hating ❤
#haxx#vaderhaxx ui#mini paste

Community Comments (12)

markasi13000markasi13000Jan 20, 2026

dont work

Replying to @markasi13000
hvherhvherJan 20, 2026

@markasi13000 try now

hvherhvherJan 20, 2026

ok let me fix it's *

hvherhvherJan 20, 2026

now fully fixed

chmochmoJan 22, 2026

print("diddyskidder#1")

Replying to @chmo
hvherhvherJan 24, 2026

@chmo yes!!! skidded leaked pasted

markasi10000markasi10000Mar 21, 2026

again dont work on xeno) I am the markasi13000

markasi10000markasi10000Mar 22, 2026

then dont work on velocity

Replying to @markasi10000
hvherhvherApr 9, 2026

@markasi10000 :pray: 2 months ago patched if you want you can fix you need new args and new code lol

hvherhvherApr 9, 2026

i'm really don't care because yeah

chmochmoJul 9, 2026

grystno pasta bolishe nirabotiet

Replying to @chmo
hvherhvherSep 19, 2026

@chmo кб ро мертв фиксить не хочу и не буду найди метод новый фиксани и юзай там только рейдж зафиксить и килл алл итд

More Scripts for Counter Blox