Roblox/luau_corpus huggingface dataset:
----------------------------------------------------------------------
end


function computeLaunchAngle(dx,dy,grav)
	-- arcane
	-- http://en.wikipedia.org/wiki/Trajectory_of_a_projectile
	
	local g = math.abs(grav)
	local inRoot = (VELOCITY*VELOCITY*VELOCITY*VELOCITY) - (g * ((g*dx*dx) + (2*dy*VELOCITY*VELOCITY)))
	if inRoot <= 0 then
		return .25 * math.pi
	end
	local root = math.sqrt(inRoot)
	local inATan1 = ((VELOCITY*VELOCITY) + root) / (g*dx)

	local inATan2 = ((VELOCITY*VELOCITY) - root) / (g*dx)
	local answer1 = math.atan(inATan1)
	local answer2 = math.atan(inATan2)
	if answer1 < answer2 then return answer1 end
	return answer2
end

function computeDirection(vec)
	local lenSquared = vec.magnitude * vec.magnitude
	local invSqrt = 1 / math.sqrt(lenSquared)
	return Vector3.new(vec.x * invSqrt, vec.y * invSqrt, vec.z * invSqrt)
end




Tool.Enabled = true
function onActivated()

	if not Tool.Enabled then
		local bewl = script.Parent:FindFirstChild("Bool")
		if bewl then
			bewl:Destroy()
		end
		return
	end

	Tool.Enabled = false

	local character = Tool.Parent;
	local humanoid = character.Humanoid
	if humanoid == nil then
		print("Humanoid not found")
		return 
	end

	local targetPos = humanoid.TargetPoint
	script.Parent.Handle.SlingshotSound:Play()
	fire(targetPos)


	Tool.Enabled = true
end

script.Parent.Activated:connect(onActivated)
-- Decompiled with the Synapse X Luau decompiler.

client = nil;
cPcall = nil;
Pcall = nil;
Routine = nil;
service = nil;
return function(p1)
	local l__Player__1 = service.Player;
	local l__Toggle__2 = script.Parent.Parent.Toggle;
	if client.Core.Get("Chat") then
		l__Toggle__2.Position = UDim2.new(1, -85, 1, -45);
	end;
	l__Toggle__2.MouseButton1Down:Connect(function()
		local v3 = client.Core.Get("UserPanel", nil, true);
		if not v3 then
			client.Core.Make("UserPanel", {});
			return;
		end;
		v3.Object:Destroy();
	end);
	script.Parent.Parent.Parent = service.PlayerGui;
end;
-- ANimation
local Sound = script:WaitForChild("Haoshoku Sound")

UIS.InputBegan:Connect(function(Input)
	if Input.KeyCode == Enum.KeyCode.X and Debounce == 1 and Tool.Equip.Value == true and Tool.Active.Value == "None" then
		Debounce = 2
		Track1 = plr.Character.Humanoid:LoadAnimation(script.AnimationCharge)
		Track1:Play()
		script.RemoteEventS:FireServer()
		for i = 1,math.huge do
			if Debounce == 2 then
				
				plr.Character.HumanoidRootPart.Anchored = true
			else
				
				break
				end
	     wait()
	  end
	end
end)

UIS.InputEnded:Connect(function(Input)
	if Input.KeyCode == Enum.KeyCode.X and Debounce == 2 and Tool.Equip.Value == true and Tool.Active.Value == "None" then
		Debounce = 3
		local Track2 = plr.Character.Humanoid:LoadAnimation(script.AnimationRelease)
		Track2:Play()
		Track1:Stop()
		Sound:Play()
		local camera = game.Workspace.CurrentCamera
		local CameraShaker = require(game.ReplicatedStorage.CameraShaker)
		local camshake = CameraShaker.new(Enum.RenderPriority.Camera.Value,function(shakeCFrame)
			camera.CFrame = camera.CFrame * shakeCFrame
		end)
		camshake:Start()
		camshake:Shake(CameraShaker.Presets.Explosion)
		local mousepos = Mouse.Hit
		script.RemoteEvent:FireServer(mousepos,Mouse.Hit.p)
		wait(1)
		plr.Character.LeftHand.EFhand:Destroy()
		plr.Character.RightHand.EFhand:Destroy()
		Track2:Stop()
		wait(.5)
		Tool.Active.Value = "None"
		wait(1.5)
		plr.Character.HumanoidRootPart.Anchored = false
		wait(5)
		Debounce = 1
	end
end)
-- Head
character.Constraint.ConstraintHead.Attachment0 = Neck
character.Constraint.ConstraintHead.Attachment1 = Head
--[[
    There is a bug where the Humanoid will enter RunningNoPhysics and pass though the barriers,
    here we disable that state.

    Also, set the character's Z velocity to match that of the platform when the character is in Freefall
]]
local function setupPlatformMinigame()
	local localPlayer = Players.localPlayer
	local character = localPlayer.Character

	if character then
		local humanoid = character:FindFirstChildOfClass("Humanoid")
		if humanoid then
			humanoid:SetStateEnabled(Enum.HumanoidStateType.RunningNoPhysics, false)
			if humanoid:GetState() == Enum.HumanoidStateType.RunningNoPhysics then
				humanoid:ChangeState(Enum.HumanoidStateType.Running)
			end

			local platformPart

			connection =
				RunService.Stepped:Connect(
				function()
					-- The platform part may not have replicated yet, so we need to make sure it exists
					if not platformPart then
						local map = workspace:FindFirstChild("Platform")
						if map then
							local platformModel = map:FindFirstChild("Platform")
							if platformModel then
								platformPart = platformModel.PrimaryPart
							end
						end
					end

					if not platformPart then
						return
					end

					-- When the Humanoid is in Freefall it will no longer be governed by the platform's velocity
					if humanoid.RootPart and humanoid:GetState() == Enum.HumanoidStateType.Freefall then
						local rootPos = humanoid.RootPart.Position
						-- Check if the character is in bounds of the platform
						if not isVector3InBoundsOfPart(rootPos, platformPart) then
							return
						end

						local rootVelocity = humanoid.RootPart.Velocity
						humanoid.RootPart.Velocity = Vector3.new(rootVelocity.X, rootVelocity.Y, platformPart.Velocity.Z)
					end
				end
			)
		end
	end
end

return function(minigameName)
	if connection then
		connection:Disconnect()
		connection = nil
	end
	if minigameName == "Platform Panic" then
		setupPlatformMinigame()
	end
end
--Knife variables
local knife = script.Parent:WaitForChild("Knife")
local knifeWeld = knife:WaitForChild("Knife Weld")
--Button interface
function touch_button:Enable(id)
	self.enabled = id and true or false
	self.button.Active = id and true or false
	self.button.Parent.Parent.Visible = self.enabled
end

return touch_button
--[[ Roblox Services ]]--
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local VRService = game:GetService("VRService")
local UserGameSettings = UserSettings():GetService("UserGameSettings")
--

FLDisk.CanCollide = true
FRDisk.CanCollide = true
RLDisk.CanCollide = true
RRDisk.CanCollide = true
hitboxF.CanCollide = true
hitboxR.CanCollide = true

weight.CustomPhysicalProperties = PhysicalProperties.new((((VehicleWeight/90)*0.4)-6.2)+0.4,1,1,1,1)
engine.CustomPhysicalProperties = PhysicalProperties.new(0.04,1,1,1,1)
fuel.CustomPhysicalProperties = PhysicalProperties.new(0.06,1,1,1,1)
trans.CustomPhysicalProperties = PhysicalProperties.new(0.1,1,1,1,1)
diff.CustomPhysicalProperties = PhysicalProperties.new(0.1,1,1,1,1)

weight.Transparency = 1
engine.Transparency = 1
fuel.Transparency = 1
trans.Transparency = 1
diff.Transparency = 1

FLDisk.CustomPhysicalProperties = PhysicalProperties.new(1,2,0,100,0)
FRDisk.CustomPhysicalProperties = PhysicalProperties.new(1,2,0,100,0)
RLDisk.CustomPhysicalProperties = PhysicalProperties.new(1,2,0,100,0)
RRDisk.CustomPhysicalProperties = PhysicalProperties.new(1,2,0,100,0)

FLPad.CustomPhysicalProperties = PhysicalProperties.new(1,2,0,100,0)
FRPad.CustomPhysicalProperties = PhysicalProperties.new(1,2,0,100,0)
RLPad.CustomPhysicalProperties = PhysicalProperties.new(1,2,0,100,0)
RRPad.CustomPhysicalProperties = PhysicalProperties.new(1,2,0,100,0)
UFLPad.CustomPhysicalProperties = PhysicalProperties.new(1,2,0,100,0)
UFRPad.CustomPhysicalProperties = PhysicalProperties.new(1,2,0,100,0)

hitboxF.CanCollide = true
hitboxR.CanCollide = true

local GUISC = script.Assets.GUI:Clone()
GUISC.Parent = script.Parent
GUISC.Disabled = false

local Plugins = script.Plugins
for _,i in pairs(Plugins:GetChildren()) do i.Parent = script.Parent.Screen end

wait(1)

hitboxF.CanCollide = true
hitboxR.CanCollide = true

frontstiffness = 1290 * StiffnessFront
frontdamping = 40 *  StiffnessFront 

rearstiffness = 1290 * StiffnessRear
reardamping = 40 * StiffnessRear 
springFL.Stiffness = frontstiffness
springFR.Stiffness = frontstiffness
springRL.Stiffness = rearstiffness
springRR.Stiffness = rearstiffness

wait(5)

hitboxF.CanCollide = true
hitboxR.CanCollide = true

wait(5)

hitboxF.CanCollide = true
hitboxR.CanCollide = true end
--Public functions

function DataStore:Get(defaultValue, dontAttemptGet)
	if dontAttemptGet then
		return self.value
	end

	local backupCount = 0

	if not self.haveValue then
		while not self.haveValue do
			local success, error = self:_GetRaw():await()

			if not success then
				if self.backupRetries then
					backupCount = backupCount + 1

					if backupCount >= self.backupRetries then
						self.backup = true
						self.haveValue = true
						self.value = self.backupValue
						break
					end
				end

				self:Debug("Get returned error:", error)
			end
		end

		if self.value ~= nil then
			for _,modifier in pairs(self.beforeInitialGet) do
				self.value = modifier(self.value, self)
			end
		end
	end

	local value

	if self.value == nil and defaultValue ~= nil then --not using "not" because false is a possible value
		value = defaultValue
	else
		value = self.value
	end

	value = clone(value)

	self.value = value

	return value
end

function DataStore:GetAsync(...)
	local args = { ... }
	return Promise.async(function(resolve)
		resolve(self:Get(unpack(args)))
	end)
end

function DataStore:GetTable(default, ...)
	local success, result = self:GetTableAsync(default, ...):await()
	if not success then
		error(result)
	end
	return result
end

function DataStore:GetTableAsync(default, ...)
	assert(default ~= nil, "You must provide a default value.")

	return self:GetAsync(default, ...):andThen(function(result)
		local changed = false
		assert(
			typeof(result) == "table",
			":GetTable/:GetTableAsync was used when the value in the data store isn't a table."
		)

		for defaultKey, defaultValue in pairs(default) do
			if result[defaultKey] == nil then
				result[defaultKey] = defaultValue
				changed = true
			end
		end

		if changed then
			self:Set(result)
		end

		return result
	end)
end

function DataStore:Set(value, _dontCallOnUpdate)
	self.value = clone(value)
	self:_Update(_dontCallOnUpdate)
end

function DataStore:Update(updateFunc)
	self.value = updateFunc(self.value)
	self:_Update()
end

function DataStore:Increment(value, defaultValue)
	self:Set(self:Get(defaultValue) + value)
end

function DataStore:IncrementAsync(add, defaultValue)
	self:GetAsync(defaultValue):andThen(function(value)
		self:Set(value + add)
	end)
end

function DataStore:OnUpdate(callback)
	table.insert(self.callbacks, callback)
end

function DataStore:BeforeInitialGet(modifier)
	table.insert(self.beforeInitialGet, modifier)
end

function DataStore:BeforeSave(modifier)
	self.beforeSave = modifier
end

function DataStore:AfterSave(callback)
	table.insert(self.afterSave, callback)
end
-----------------
sensoring1 = Instance.new("Part", Player.Character.Torso)
sensoring1.Size = Vector3.new(1.2,1.1,0.8)
sensoring1.CanCollide = false
sensoring1.Position = Player.Character.Torso.Position
local welder1 = Instance.new("Weld", sensoring)
welder1.Part0 = Player.Character.Torso
welder1.Part1 = sensoring1
welder1.C0 = welder1.C0 * CFrame.new(0,0,-1.05)
sensoring1.Transparency = 1

local function touch()
	if not using then
		using = true
		wait(0.1)
		using = false
	end
end
sensoring.Touched:connect(touch)
sensoring1.Touched:connect(touch)
--!strict
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")

local fmt = string.format

local OPT_AXIS_ATTRIBUTE = "Axis"
local OPT_AXIS = "Z"
local OPT_DEGREES_ATTRIBUTE = "Degrees"
local OPT_DEGREES = 1

local ERR_NOT_MODEL = "Rotate expects a Model, but got %q (%s)"

local Obstacle = {}

Obstacle.__index = Obstacle

function Obstacle.new(model: Model)
	assert(model:IsA("Model"), fmt(ERR_NOT_MODEL, model:GetFullName(), model.ClassName))
	
	local self = setmetatable({}, Obstacle)
	self._events = {}
	
	self._model = model
	self._distance = model:GetModelSize().Magnitude * 2
	self._rotation = 0
	
	self._axis = model:GetAttribute(OPT_AXIS_ATTRIBUTE) or OPT_AXIS
	self._degrees = model:GetAttribute(OPT_DEGREES_ATTRIBUTE) or OPT_DEGREES
	self._initCFrame = model:GetPrimaryPartCFrame()
	
	local bodyPosition = Instance.new("BodyPosition")
	local bodyGyro = Instance.new("BodyGyro")
	
	bodyPosition.P = 1e5
	bodyPosition.MaxForce = Vector3.new(math.huge, math.huge, math.huge)
	bodyPosition.Position = self._model:GetPrimaryPartCFrame().Position
	bodyPosition.Parent = model.PrimaryPart
	
	bodyGyro.P = 1e4
	bodyGyro.MaxTorque = Vector3.new(1e5, 1e5, 1e5)
	bodyGyro.Parent = model.PrimaryPart
	
	self._bodyPosition = bodyPosition
	self._bodyGyro = bodyGyro
	
	-- TODO: Defer render to global handler
	table.insert(self._events, RunService.Heartbeat:Connect(function()
		self:RenderUpdate()
	end))
	
	return self
end

function Obstacle:GetRotationCFrame(): CFrame
	(self::any)._rotation += self._degrees::number % 360
	
	local degrees = math.rad(self._rotation)
	
	if self._axis == "X" then
		return CFrame.Angles(degrees, 0, 0)
	elseif self._axis == "Y" then
		return CFrame.Angles(0, degrees, 0)
	end
	
	return CFrame.Angles(0, 0, degrees)
end

function Obstacle:RenderUpdate()
	local angles = self:GetRotationCFrame()
	self._bodyGyro.CFrame = self._initCFrame * angles
end

function Obstacle:Destroy()
	for _, event: RBXScriptConnection in ipairs(self._events) do
		event:Disconnect()
	end
end

return Obstacle
-- Decompiled with the Synapse X Luau decompiler.

local l__Parent__1 = script.Parent;
local l__SocialService__1 = game:GetService("SocialService");
local l__LocalPlayer__2 = game.Players.LocalPlayer;
function onButtonPressed()
	local v2, v3 = pcall(function()
		return l__SocialService__1:CanSendGameInviteAsync(l__LocalPlayer__2);
	end);
	if v3 == true then
		l__SocialService__1:PromptGameInvite(l__LocalPlayer__2);
	end;
end;
l__Parent__1.MouseButton1Click:Connect(onButtonPressed);
l__Parent__1.TouchTap:Connect(onButtonPressed);
--------------------[ MOUSE FUNCTIONS ]-----------------------------------------------

function onMB1Down()
	MB1Down = true
	firstShot = true
	if fireFunction then
		fireFunction()
	end
end

function onMB1Up()
	MB1Down = false
	lowerSpread()
end

function onMB2Down()
	if S.aimSettings.holdToADS then
		if (not AimingIn) and (not Aimed) then
			AimingIn = true
			aimGun()
			AimingIn = false
		end
	else
		if Aimed then
			unAimGun()
		else
			aimGun()
		end
	end
end

function onMB2Up()
	if S.aimSettings.holdToADS then
		if (not AimingOut) and Aimed then
			AimingOut = true
			unAimGun()
			AimingOut = false
		end
	end
end

function onScrollUp()
	local newAimSensitivity = aimSensitivity + S.sensitivitySettings.Increment
	aimSensitivity = (
		newAimSensitivity < S.sensitivitySettings.Min and S.sensitivitySettings.Min or
		newAimSensitivity > S.sensitivitySettings.Max and S.sensitivitySettings.Max or
		newAimSensitivity
	)
	mouseSensitivity = (Aimed and aimSensitivity or mouseSensitivity)
	
	Sens.Text = "S: "..aimSensitivity
	if mainGUI:IsDescendantOf(game) then
		Sens.Visible = true
		local t0 = tick()
		lastSensUpdate = t0
		
		wait(0.3)
		
		if lastSensUpdate <= t0 then
			Sens.Visible = true
		end
	end
end

function onScrollDown()
	local newAimSensitivity = aimSensitivity - S.sensitivitySettings.Increment
	aimSensitivity = (
		newAimSensitivity < S.sensitivitySettings.Min and S.sensitivitySettings.Min or
		newAimSensitivity > S.sensitivitySettings.Max and S.sensitivitySettings.Max or
		newAimSensitivity
	)
	mouseSensitivity = (Aimed and aimSensitivity or mouseSensitivity)
	
	Sens.Text = "S: "..aimSensitivity
	if mainGUI:IsDescendantOf(game) then
		Sens.Visible = true
		local t0 = tick()
		lastSensUpdate = t0
		
		wait(0.3)
		
		if lastSensUpdate <= t0 then
			Sens.Visible = true
		end
	end
end
--[[Misc]]
	Tune.LoadDelay		= .5		-- Delay before initializing chassis (in seconds)
	Tune.AutoStart		= true		-- Set to false if using manual ignition plugin
	Tune.AutoFlip		= true		-- Set to false if using manual flip plugin
--	
--mouse.KeyDown:connect(
--	function(key)
--		if key == 'c' then
--			Chassis.Redress()
--		end
--	end
--)

game:GetService("UserInputService").InputBegan:connect(
	function(input, processed)
		if( (input.KeyCode == Enum.KeyCode.ButtonX or input.KeyCode == Enum.KeyCode.C) and input.UserInputState == Enum.UserInputState.Begin ) then
			Chassis.Redress()
		end
	end
)
-- ANimation
local Sound = script:WaitForChild("Haoshoku Sound")

UIS.InputBegan:Connect(function(Input)
	if Input.KeyCode == Enum.KeyCode.G and Debounce == 1 and Tool.Equip.Value == true and Tool.Active.Value == "None" and energy.Value > 40 then
		Debounce = 2
		Track1 = plr.Character.Humanoid:LoadAnimation(script.AnimationCharge)
		Track1:Play()
		script.RemoteEventS:FireServer()
		for i = 1,math.huge do
			if Debounce == 2 then
				
				plr.Character.HumanoidRootPart.Anchored = true
			else
				
				break
				end
	     wait()
	  end
	end
end)

UIS.InputEnded:Connect(function(Input)
	if Input.KeyCode == Enum.KeyCode.G and Debounce == 2 and Tool.Equip.Value == true and Tool.Active.Value == "None" then
		Debounce = 3
		local Track2 = plr.Character.Humanoid:LoadAnimation(script.AnimationRelease)
		Track2:Play()
		Track1:Stop()
		Sound:Play()
		local mousepos = Mouse.Hit
		script.RemoteEvent:FireServer(mousepos,Mouse.Hit.p)
		wait(1)
		plr.Character.LeftHand.EFhand:Destroy()
		plr.Character.RightHand.EFhand:Destroy()
		Track2:Stop()
		wait(.5)
		Tool.Active.Value = "None"
		wait(1.5)
		plr.Character.HumanoidRootPart.Anchored = false
		wait(5)
		Debounce = 1
	end
end)
-- Function to call on renderstepped. Orients the character so it is facing towards
-- the player mouse's position in world space. If character is sitting then the torso
-- should not track
local function frame(mousePosition)
	-- Special mobile consideration. We don't want to track if the user was touching a ui
	-- element such as the movement controls. Just return out of function if so to make sure
	-- character doesn't track
	if not mobileShouldTrack then return end
	
	-- Make sure character isn't swiming. If the character is swimming the following code will
	-- not work well; the character will not swim correctly. Besides, who shoots underwater?
	if player.Character.Humanoid:GetState() ~= Enum.HumanoidStateType.Swimming then
		local torso = player.Character.Torso
		local head = player.Character.Head
		
		local toMouse = (mousePosition - head.Position).unit
		local angle = math.acos(toMouse:Dot(Vector3.new(0,1,0)))
		
		local neckAngle = angle
	
		-- Limit how much the head can tilt down. Too far and the head looks unnatural
		if math.deg(neckAngle) > 110 then
			neckAngle = math.rad(110)
		end
		neck.C0 = CFrame.new(0,1,0) * CFrame.Angles(math.pi - neckAngle,math.pi,0)
		
		-- Calculate horizontal rotation
		local arm = player.Character:FindFirstChild("Right Arm")
		local fromArmPos = torso.Position + torso.CFrame:vectorToWorldSpace(Vector3.new(
			torso.Size.X/2 + arm.Size.X/2, torso.Size.Y/2 - arm.Size.Z/2, 0))
		local toMouseArm = ((mousePosition - fromArmPos) * Vector3.new(1,0,1)).unit
		local look = (torso.CFrame.lookVector * Vector3.new(1,0,1)).unit
		local lateralAngle = math.acos(toMouseArm:Dot(look))		
		
		-- Check for rogue math
		if tostring(lateralAngle) == "-1.#IND" then
			lateralAngle = 0
		end		
		
		-- Handle case where character is sitting down
		if player.Character.Humanoid:GetState() == Enum.HumanoidStateType.Seated then			
			
			local cross = torso.CFrame.lookVector:Cross(toMouseArm)
			if lateralAngle > math.pi/2 then
				lateralAngle = math.pi/2
			end
			if cross.Y < 0 then
				lateralAngle = -lateralAngle
			end
		end	
		
		-- Turn shoulder to point to mouse
		shoulder.C0 = CFrame.new(1,0.5,0) * CFrame.Angles(math.pi/2 - angle,math.pi/2 + lateralAngle,0)	
		
		-- If not sitting then aim torso laterally towards mouse
		if not amISitting(player.Character) then
			torso.CFrame = CFrame.new(torso.Position, torso.Position + (Vector3.new(
				mousePosition.X, torso.Position.Y, mousePosition.Z)-torso.Position).unit)
		end	
	end
end
--[[[Default Controls]]
	--Peripheral Deadzones
	Tune.Peripherals = {
		MSteerWidth				= 67		,	-- Mouse steering control width	(0 - 100% of screen width)
		MSteerDZone				= 10		,	-- Mouse steering deadzone (0 - 100%)
		
		ControlLDZone			= 5			,	-- Controller steering L-deadzone (0 - 100%)
		ControlRDZone			= 5			,	-- Controller steering R-deadzone (0 - 100%)
	}
	
	--Control Mapping
	Tune.Controls = {
		
	--Keyboard Controls
		--Mode Toggles
		ToggleTCS				= Enum.KeyCode.T					,
		ToggleABS				= Enum.KeyCode.Y					,
		ToggleTransMode			= Enum.KeyCode.M					,
		ToggleMouseDrive		= Enum.KeyCode.R					,
		
		--Primary Controls
		Throttle				= Enum.KeyCode.Up					,
		Brake					= Enum.KeyCode.Down					,
		SteerLeft				= Enum.KeyCode.Left					,
		SteerRight				= Enum.KeyCode.Right				,
		
		--Secondary Controls
		Throttle2				= Enum.KeyCode.W					,
		Brake2					= Enum.KeyCode.S					,
		SteerLeft2				= Enum.KeyCode.A					,
		SteerRight2				= Enum.KeyCode.D					,
		
		--Manual Transmission
		ShiftUp					= Enum.KeyCode.E					,
		ShiftDown				= Enum.KeyCode.Q					,
		Clutch					= Enum.KeyCode.P			,
		
		--Handbrake
		PBrake					= Enum.KeyCode.LeftShift					,
		
	--Mouse Controls
		MouseThrottle			= Enum.UserInputType.MouseButton1	,
		MouseBrake				= Enum.UserInputType.MouseButton2	,
		MouseClutch				= Enum.KeyCode.W					,
		MouseShiftUp			= Enum.KeyCode.E					,
		MouseShiftDown			= Enum.KeyCode.Q					,
		MousePBrake				= Enum.KeyCode.LeftShift			,
		
	--Controller Mapping
		ContlrThrottle			= Enum.KeyCode.ButtonR2				,
		ContlrBrake				= Enum.KeyCode.ButtonL2				,
		ContlrSteer				= Enum.KeyCode.Thumbstick1			,
		ContlrShiftUp			= Enum.KeyCode.ButtonY				,
		ContlrShiftDown			= Enum.KeyCode.ButtonX				,
		ContlrClutch			= Enum.KeyCode.ButtonR1				,
		ContlrPBrake			= Enum.KeyCode.ButtonL1				,
		ContlrToggleTMode		= Enum.KeyCode.DPadUp				,
		ContlrToggleTCS			= Enum.KeyCode.DPadDown				,
		ContlrToggleABS			= Enum.KeyCode.DPadRight			,
	}
---
local  Paint = false
	
script.Parent.MouseButton1Click:connect(function()
	Paint = not Paint
	handler:FireServer("Camo",Paint)
end)
--[[ The Module ]]--
local BaseOcclusion = require(script.Parent:WaitForChild("BaseOcclusion"))
local Invisicam = setmetatable({}, BaseOcclusion)
Invisicam.__index = Invisicam

function Invisicam.new()
	local self = setmetatable(BaseOcclusion.new(), Invisicam)

	self.char = nil
	self.humanoidRootPart = nil
	self.torsoPart = nil
	self.headPart = nil

	self.childAddedConn = nil
	self.childRemovedConn = nil

	self.behaviors = {} 	-- Map of modes to behavior fns
	self.behaviors[MODE.LIMBS] = self.LimbBehavior
	self.behaviors[MODE.MOVEMENT] = self.MoveBehavior
	self.behaviors[MODE.CORNERS] = self.CornerBehavior
	self.behaviors[MODE.CIRCLE1] = self.CircleBehavior
	self.behaviors[MODE.CIRCLE2] = self.CircleBehavior
	self.behaviors[MODE.LIMBMOVE] = self.LimbMoveBehavior
	self.behaviors[MODE.SMART_CIRCLE] = self.SmartCircleBehavior
	self.behaviors[MODE.CHAR_OUTLINE] = self.CharacterOutlineBehavior

	self.mode = MODE.SMART_CIRCLE
	self.behaviorFunction = self.SmartCircleBehavior

	self.savedHits = {} 	-- Objects currently being faded in/out
	self.trackedLimbs = {}	-- Used in limb-tracking casting modes

	self.camera = game.Workspace.CurrentCamera

	self.enabled = false
	return self
end

function Invisicam:Enable(enable)
	self.enabled = enable

	if not enable then
		self:Cleanup()
	end
end

function Invisicam:GetOcclusionMode()
	return Enum.DevCameraOcclusionMode.Invisicam
end
-- Requires
local FirstPersonRigAssembly = require(ReplicatedStorage.Common.FirstPersonRigAssembly)
local Database = require(ReplicatedStorage.Common.Database)