Pinkstack/roblox-luau-corpus-text huggingface dataset:
--Visiblity


uis = game:GetService("UserInputService")
ismobile = uis.TouchEnabled
button.Visible = ismobile

local states = {
	OFF = "rbxasset://textures/ui/mouseLock_off@2x.png",
	ON = "rbxasset://textures/ui/mouseLock_on@2x.png"
}
local MAX_LENGTH = 900000
local active = false
local ENABLED_OFFSET = CFrame.new(1.7, 0, 0)
local DISABLED_OFFSET = CFrame.new(-1.7, 0, 0)
local function UpdateImage(STATE)
	button.Image = states[STATE]
end

local function GetUpdatedCameraCFrame(ROOT, CAMERA)
	return CFrame.new(root.Position, Vector3.new(CAMERA.CFrame.LookVector.X * MAX_LENGTH, root.Position.Y, CAMERA.CFrame.LookVector.Z * MAX_LENGTH))
end
local function EnableShiftlock()
	UserInputService.MouseBehavior = Enum.MouseBehavior.LockCenter
	humanoid.AutoRotate = false

	UpdateImage("ON")
	if humanoid:GetState() ~= Enum.HumanoidStateType.PlatformStanding and humanoid:GetState() ~= Enum.HumanoidStateType.Swimming and humanoid.Health > 0 and Settings.Downed.Value == false and Settings.Ragdoll.Value == false then
		root.CFrame = GetUpdatedCameraCFrame(root, camera)
		camera.CFrame = camera.CFrame * ENABLED_OFFSET
	else

	end

end
local function DisableShiftlock()
	UserInputService.MouseBehavior = Enum.MouseBehavior.Default
	humanoid.AutoRotate = true
	UpdateImage("OFF")
	camera.CFrame = camera.CFrame * DISABLED_OFFSET
	pcall(function()
		active:Disconnect()
		active = nil
	end)
end
UpdateImage("OFF")
active = false
function ShiftLock()
	if not active then
		active = runservice.RenderStepped:Connect(function()
			EnableShiftlock()
		end)
	else
		DisableShiftlock()
	end
end
local ShiftLockButton = CAS:BindAction("ShiftLOCK", ShiftLock, false, "On")
CAS:SetPosition("ShiftLOCK", UDim2.new(0.8, 0, 0.8, 0))
button.MouseButton1Click:Connect(function()
	if not active then
		active = runservice.RenderStepped:Connect(function()
			EnableShiftlock()
		end)
	else
		DisableShiftlock()
	end
end)
return MobileCameraFramework
-- emote bindable hook


if FFlagAnimateScriptEmoteHook then
	script:WaitForChild("PlayEmote").OnInvoke = function(emote)
		-- Only play emotes when idling
		if pose ~= "Standing" then
			return
		end
	
		if emoteNames[emote] ~= nil then
			-- Default emotes
			playAnimation(emote, EMOTE_TRANSITION_TIME, Humanoid)
			
			return true
		elseif typeof(emote) == "Instance" and emote:IsA("Animation") then
			-- Non-default emotes
			playEmote(emote, EMOTE_TRANSITION_TIME, Humanoid)
			return true
		end
		
		-- Return false to indicate that the emote could not be played
		return false
	end
end
--------RIGHT DOOR --------


game.Workspace.doorright.l11.BrickColor = BrickColor.new(1023)
game.Workspace.doorright.l23.BrickColor = BrickColor.new(1023)
game.Workspace.doorright.l32.BrickColor = BrickColor.new(1023)
game.Workspace.doorright.l41.BrickColor = BrickColor.new(1023)
game.Workspace.doorright.l53.BrickColor = BrickColor.new(1023)
game.Workspace.doorright.l62.BrickColor = BrickColor.new(1023)
game.Workspace.doorright.l71.BrickColor = BrickColor.new(1023)

game.Workspace.doorright.l12.BrickColor = BrickColor.new(106)
game.Workspace.doorright.l21.BrickColor = BrickColor.new(106)
game.Workspace.doorright.l33.BrickColor = BrickColor.new(106)
game.Workspace.doorright.l42.BrickColor = BrickColor.new(106)
game.Workspace.doorright.l51.BrickColor = BrickColor.new(106)
game.Workspace.doorright.l63.BrickColor = BrickColor.new(106)
game.Workspace.doorright.l72.BrickColor = BrickColor.new(106)

game.Workspace.doorright.l13.BrickColor = BrickColor.new(1013)
game.Workspace.doorright.l22.BrickColor = BrickColor.new(1013)
game.Workspace.doorright.l31.BrickColor = BrickColor.new(1013)
game.Workspace.doorright.l43.BrickColor = BrickColor.new(1013)
game.Workspace.doorright.l52.BrickColor = BrickColor.new(1013)
game.Workspace.doorright.l61.BrickColor = BrickColor.new(1013)
game.Workspace.doorright.l73.BrickColor = BrickColor.new(1013)

game.Workspace.doorright.pillar.BrickColor = BrickColor.new(game.Workspace.Lighting.cyan.Value)
game.Workspace.Lighting.flashcurrent.Value = "13"
--Front Suspension


Tune.FSusDamping	= 15		-- Spring Dampening
Tune.FSusStiffness	= 150	-- Spring Force
Tune.FAntiRoll 		= 1	-- Anti-Roll (Gyro Dampening)

Tune.FSusLength		= 5		-- Suspension length (in studs)
Tune.FPreCompress	= 5		-- Pre-compression adds resting length force
Tune.FExtensionLim	= .3		-- Max Extension Travel (in studs)
Tune.FCompressLim	= .5		-- Max Compression Travel (in studs)
Tune.FSusAngle		= 80		-- Suspension Angle (degrees from horizontal)

Tune.FWsBoneLen		= 5			-- Wishbone Length
Tune.FWsBoneAngle	= 0			-- Wishbone angle (degrees from horizontal)
Tune.FAnchorOffset	= {			-- Suspension anchor point offset (relative to center of wheel)
	--[[Lateral]]		-.4		,	-- positive = outward
	--[[Vertical]]		-.5		,	-- positive = upward
	--[[Forward]]		0		}	-- positive = forward
--[[Weight and CG]]


	Tune.Weight			= 3600		-- Total weight (in pounds)
	Tune.WeightBSize	= {			-- Size of weight brick (dimmensions in studs ; larger = more stable)
	 --[[Width]]		6		,
	 --[[Height]]		3.5		,
	 --[[Length]]		14		}
	Tune.WeightDist		= 50		-- Weight distribution (0 - on rear wheels, 100 - on front wheels, can be <0 or >100)
	Tune.CGHeight		= .8		-- Center of gravity height (studs relative to median of all wheels)
	Tune.WBVisible		= false		-- Makes the weight brick visible
	
	--Unsprung Weight
	Tune.FWheelDensity	= .1		-- Front Wheel Density
	Tune.RWheelDensity	= .1		-- Rear Wheel Density
	Tune.FWLgcyDensity	= 1			-- Front Wheel Density [PGS OFF]
	Tune.RWLgcyDensity	= 1			-- Rear Wheel Density [PGS OFF]
	
	Tune.AxleSize		= 2			-- Size of structural members (larger = more stable/carry more weight)
	Tune.AxleDensity	= .1		-- Density of structural members
--[=[
	Attaches an `andThen` handler to this Promise that discards the resolved value and returns the given value from it.

	```lua
		promise:andThenReturn("some", "values")
	```

	This is sugar for

	```lua
		promise:andThen(function()
			return "some", "values"
		end)
	```

	:::caution
	Promises are eager, so if you pass a Promise to `andThenReturn`, it will begin executing before `andThenReturn` is reached in the chain. Likewise, if you pass a Promise created from [[Promise.reject]] into `andThenReturn`, it's possible that this will trigger the unhandled rejection warning. If you need to return a Promise, it's usually best practice to use [[Promise.andThen]].
	:::

	@param ... any -- Values to return from the function
	@return Promise
]=]


function Promise.prototype:andThenReturn(...)
	local length, values = pack(...)
	return self:_andThen(debug.traceback(nil, 2), function()
		return unpack(values, 1, length)
	end)
end
-- Continuously compute a new body orientation to face the camera, and notify the server for replication
-- Intended to be used for the local player's character


function OrientableBody:useCameraAsSource()
	local timeSinceLastSync = 0
	self.renderStepConnection = RunService.RenderStepped:Connect(function(delta)
		local camera = workspace.CurrentCamera
		if not camera then
			return
		end

		local orientation = self:face(camera.CFrame.LookVector)

		timeSinceLastSync += delta
		if timeSinceLastSync > Constants.SYNC_INTERVAL and orientation then
			timeSinceLastSync %= Constants.SYNC_INTERVAL
			updateBodyOrientation:FireServer(orientation)
		end
	end)
end
--[[
	A ref is nothing more than a binding with a special field 'current'
	that maps to the getValue method of the binding
]]


local Binding = require(script.Parent.Binding)

local function createRef()
	local binding, _ = Binding.create(nil)

	local ref = {}

	--[[
		A ref is just redirected to a binding via its metatable
	]]
	setmetatable(ref, {
		__index = function(self, key)
			if key == "current" then
				return binding:getValue()
			else
				return binding[key]
			end
		end,
		__newindex = function(self, key, value)
			if key == "current" then
				error("Cannot assign to the 'current' property of refs", 2)
			end

			binding[key] = value
		end,
		__tostring = function(self)
			return ("RoactRef(%s)"):format(tostring(binding:getValue()))
		end,
	})

	return ref
end

return createRef
--[[
	Remove elements from a dictionary
]]


function Immutable.RemoveFromDictionary(dictionary, ...)
	local result = {}

	for key, value in pairs(dictionary) do
		local found = false
		for listKey = 1, select("#", ...) do
			if key == select(listKey, ...) then
				found = true
				break
			end
		end
		if not found then
			result[key] = value
		end
	end

	return result
end
-- For effects and stuff


local function Engine(on)
	local prop = plane.Propeller
	
	if on then
		prop.Hinge.DesiredAngle = 1e100 -- Super huge number so the propeller doesn't stop spinning :D
	else
		local angle = math.random(0, 10)
		prop.Hinge.DesiredAngle = angle
		prop.Hinge.CurrentAngle = angle
	end
end

seat.Changed:connect(function(p)
	if p == "Occupant" then
		local occupant = seat.Occupant
		
		if occupant then
			Engine(true)
			local player = game.Players:GetPlayerFromCharacter(occupant.Parent)
			if player then
				plane.Body:SetNetworkOwner(player)
				local localPlaneScript = script.LocalPlaneScript:Clone()
				localPlaneScript.Parent = player.PlayerGui
				localPlaneScript.Plane.Value = plane
				localPlaneScript.Disabled = false
			else
				shooting = false
			end
		else
			Engine(false)
		end
	end
end)

while true do
	if seat.Occupant and shooting then
		for _, gun in pairs(plane.Guns:GetChildren()) do
			if gun:FindFirstChild("Muzzle") then
				local bullet = Instance.new("Part")
				bullet.Parent = gun
				bullet.Anchored = false
				bullet.CanCollide = false
				bullet.FormFactor = Enum.FormFactor.Custom
				bullet.Size = Vector3.new(0.4, 10, 0.4)
				bullet.BrickColor = BrickColor.new("Bright yellow")
				bullet.Material = Enum.Material.Neon
				Instance.new("CylinderMesh", bullet)
				Instance.new("BodyForce", bullet).Force = Vector3.new(0, bullet:GetMass() * 196.2, 0)
				bullet.CFrame = gun.Muzzle.CFrame
				bullet.Velocity = bullet.CFrame:vectorToWorldSpace(Vector3.new(0, 1, 0)) * 2000
				bullet:SetNetworkOwner(game.Players:GetPlayerFromCharacter(seat.Occupant.Parent))
				
				bullet.Touched:connect(function(hit)
					if not hit:IsDescendantOf(plane) and not hit:IsDescendantOf(seat.Occupant.Parent) then
						local explosion = Instance.new("Explosion", game.Workspace)
						explosion.Position = bullet.Position
						explosion.BlastRadius = 4
						explosion.DestroyJointRadiusPercent = 0
						bullet:Destroy()
					end
				end)
				
				game.Debris:AddItem(bullet, 1)
			end
		end
	end
	wait(0.1)
end
--returns the wielding player of this tool


function getPlayer()
	local char = Tool.Parent
	return game:GetService("Players"):GetPlayerFromCharacter(Character)
end

function Toss(direction)
	local handlePos = Vector3.new(Tool.Handle.Position.X, 0, Tool.Handle.Position.Z)
	local spawnPos = Character.Head.Position
	
	spawnPos  = spawnPos + (direction * 5)
	
	local Object = Tool.Handle:Clone()
	Object.Burn.Attachment.Debris.Enabled = true
	Object.ThinkFast:Destroy()
	Object.Parent = workspace
	Object.Swing.Pitch = Random.new():NextInteger(90, 110)/100
	Object.Swing:Play()
	Object.CanCollide = true
	Object.CFrame = Tool.Handle.CFrame
	Object.Velocity = (direction*AttackVelocity) + Vector3.new(0,AttackVelocity/7.5,0)
	Object.Trail.Enabled = true
	
	local rand = 11.25
	Object.RotVelocity = Vector3.new(Random.new():NextNumber(-rand,rand),Random.new():NextNumber(-rand,rand),Random.new():NextNumber(-rand,rand))
	Object:SetNetworkOwner(getPlayer())
	
	local ScriptClone = DamageScript:Clone()
	ScriptClone.Parent = Object
	ScriptClone.Disabled = false
	
	local tag = Instance.new("ObjectValue")
	tag.Value = getPlayer()
	tag.Name = "creator"
	tag.Parent = Object
end


PowerRemote.OnServerEvent:Connect(function(player, Power)
	local holder = getPlayer()
	if holder ~= player then return end
	
	AttackVelocity = Power
end)

TossRemote.OnServerEvent:Connect(function(player, mousePosition)
	local holder = getPlayer()
	if holder ~= player then return end
	
	if Cooldown.Value == true then return end
	Cooldown.Value = true
	
	if Humanoid and Humanoid.RigType == Enum.HumanoidRigType.R15 then
		TossRemote:FireClient(getPlayer(), "PlayAnimation", "Animation")
	end
	local targetPos = mousePosition.p
	local lookAt = (targetPos - Character.Head.Position).unit
	
	local SecretRNG = Random.new():NextInteger(1,10) --Change RNG value here
	if SecretRNG == 1 then
		local ChucklenutsSound = Tool.Handle.ThinkFast:Play()
	end
	
	Toss(lookAt)
	
	task.wait(CooldownTime)
	Cooldown.Value = false
end)

Tool.Equipped:Connect(function()
	Character = Tool.Parent
	Humanoid = Character:FindFirstChildOfClass("Humanoid")
end)

Tool.Unequipped:Connect(function()
	Character = nil
	Humanoid = nil
end)
-------------------Start_and_Stop-------------------





		

		if (key==keys.stop.code) and planedebounce == false and (on == true) then--if Shutting down
				local PS = script.Parent.Parent.Parent.PlayerGui:findFirstChild("PlaneStats").Frame
				PS.EngineOff.Label.Text = "ENGINE OFF"
				plane.Engine.Spin:Stop()
				local spd = plane.Engine:findFirstChild("Speed")
				if (spd ~= nil) then
				spd.Value = 0
				end
				local spd = plane.Engine:findFirstChild("VerticalSpeed")
				if (spd ~= nil) then
				spd.Value = 0
				end
						plane.Stand.CanCollide = true
				plane.Engine.BodyVelocity.maxForce = Vector3.new(0,0,0)
					local mod = plane:findFirstChild("Rotors")
					for i,v in pairs(mod:GetChildren()) do 
					if(v.Name == "RotorOff") then
					v.Transparency = 0
					v.CanCollide = true
					elseif(v.Name == "RotorOn") then
					v.Spin.inc.Value = 0
					v.Spin.inc.Value = 0
					end
					end
				
					on = false
					Mousefollow=false
				end 
     	if (key==keys.start.code) and (on == false) and startLock then
				local PS = script.Parent.Parent.Parent.PlayerGui:findFirstChild("PlaneStats").Frame
				plane.Engine.StartUp:Play()
				PS.EngineOff.Label.Text = "Starting Up"
				local s = Instance.new("Smoke") 
				s.Color = Color3.new(128,128,128)
				s.Size = .1
				s.RiseVelocity = 9
				s.Opacity = .3
				s.Parent = plane.SmokeA
				s.Enabled = true
				wait(10)
				plane.Engine.StartUp:Stop()
				if (plane.Engine:findFirstChild("Speed") == nil) then 
				local speed = script.Parent.Speed:clone()
				speed.Parent = plane.Engine
				end 
						plane.Stand.CanCollide = false 
						
						game.Debris:AddItem(s,2)
						local mod = plane:findFirstChild("Rotors")
						plane.Engine.Spin:Play()
						for i,v in pairs(mod:GetChildren()) do
						if(v.Name == "RotorOff") then
						v.Transparency = 1
						v.CanCollide = false
						elseif(v.Name == "RotorOn") then 
							local spininc = 0
							for i = 0, 40, .5 do
								wait()
								v.Spin.inc.Value = i
								v.Spin.inc.Value = i
							end
						end
						end 
						plane.Engine.BodyVelocity.maxForce = Vector3.new(1e+012,1e+012,1e+012)
					on = true
				end
		
				if(key == "q") then 
					startLock = true
				end
-- Set up the event handlers for the Close TextButtons in the windows


for _, window in ipairs(gui:GetChildren()) do
	if window:IsA("Frame") then
		local closeButton = window:FindFirstChild("Close")
		if closeButton and closeButton:IsA("TextButton") then
			closeButton.MouseButton1Click:Connect(function()
				openGui.Visible = true
				window:TweenSizeAndPosition(
					UDim2.new(1, 0, 0.022, 0),
					UDim2.new(0.0, 0, 0.978, 0),
					'Out',
					'Quad',
					0.2,
					false,
					function()
						window.Visible = false
					end
				)
			end)
		end
	end
end
-- Core events


ToolChanged = Signal.new()

function EquipTool(Tool)
	-- Equips and switches to the given tool

	-- Unequip current tool
	if CurrentTool and CurrentTool.Equipped then
		CurrentTool:Unequip();
		CurrentTool.Equipped = false;
	end;

	-- Set `Tool` as current
	CurrentTool = Tool;
	CurrentTool.Equipped = true;

	-- Fire relevant events
	ToolChanged:Fire(Tool);

	-- Equip the tool
	Tool:Equip();

end;

function RecolorHandle(Color)
	SyncAPI:Invoke('RecolorHandle', Color);
end;
--[[ Please do not delete this module
	
	
	Novena Constraint Type: Motorcycle
	The Bike Chassis, Beta Build: 1
	
				Avxnturador | Novena
					RikOne2 | Enjin
	

:: Note

	If you have this chassis, I assume that you understand this will be updated frequently.
	
			𝚃𝚑𝚒𝚜 𝚒𝚜 𝚊 𝚍𝚎𝚟𝚎𝚕𝚘𝚙𝚖𝚎𝚗𝚝 𝚌𝚑𝚊𝚜𝚜𝚒𝚜.
	
	Updates pertaining to any build and version will be detailed here.
	Final updates will be published to the main NCT: M model.
	
	A few plugins have been brought to NCT: M.
	Most of these plugins are thanks to RikOne2, some thanks to Avxnturador.
	
	Thanks for beta testing NCT: M!
	
:: How to install
	
	Everything regarding Body, Misc and DriveSeat is the same as other chassis'
	For FrontSection and RearSection, the Wheel part is where you will put your wheel and tire.
	Resize the cylinder to match your wheel's size in all axes.
	Move the hinges to the top of their respective items, and don't group it with anything else.
		TripleTreeHinge goes on the top of the handlebars in the center.
		RearSwingArmHinge goes in the center of the suspension hinge.
	Tune the bike using the Tuner.
		

:: Changelog
	||
	NCT: M | Beta Version 1 | Released on: 08/25/2019
	:: The First Public Beta Release
	:: Pertaining to build:		[1]
	:: Pertaining to version:	[1]
	
		[Notes]
			This is the first release of the bike chassis.
			There are countless new features, and different structures to the chassis.
			You are advised to completely go through the Tuner, along with the plugins.
			Please send any bugs or suggestion to Avxnturador, or to the Novena server.
		
		There are no update instructions.
	||
--]]



return "BETA"
-- functions



function onDied()
	stopLoopedSounds()
	sDied:Play()
end

local fallCount = 0
local fallSpeed = 0
function onStateFall(state, sound)
	fallCount = fallCount + 1
	if state then
		sound.Volume = 0
		sound:Play()
		Spawn( function()
			local t = 0
			local thisFall = fallCount
			while t < 1.5 and fallCount == thisFall do
				local vol = math.max(t - 0.3 , 0)
				sound.Volume = vol
				wait(0.1)
				t = t + 0.1
			end
		end)
	else
		sound:Stop()
	end
	fallSpeed = math.max(fallSpeed, math.abs(Head.Velocity.Y))
end


function onStateNoStop(state, sound)
	if state then
		sound:Play()
	end
end


function onRunning(speed)
	sClimbing:Stop()
	sSwimming:Stop()
	if (prevState == "FreeFall" and fallSpeed > 0.1) then
		local vol = math.min(1.0, math.max(0.0, (fallSpeed - 50) / 110))
		sLanding.Volume = vol
		sLanding:Play()
		fallSpeed = 0
	end
	if speed>0.5 then
		sRunning.Playing = true
		sRunning.Pitch = 1.85
	else
		sRunning:Stop()
	end
	prevState = "Run"
end

function onSwimming(speed)
	if (prevState ~= "Swim" and speed > 0.1) then
		local volume = math.min(1.0, speed / 350)
		sSplash.Volume = volume
		sSplash:Play()
		prevState = "Swim"
	end
	sClimbing:Stop()
	sRunning:Stop()
	sSwimming.Pitch = 1.6
	sSwimming:Play()
end

function onClimbing(speed)
	sRunning:Stop()
	sSwimming:Stop()	
	if speed>0.01 then
		sClimbing:Play()
		sClimbing.Pitch = speed / 5.5
	else
		sClimbing:Stop()
	end
	prevState = "Climb"
end
--[[Weight and CG]]


	Tune.Weight			= 3214		-- Total weight (in pounds)
	Tune.WeightBSize	= {			-- Size of weight brick (dimmensions in studs ; larger = more stable)
	 --[[Width]]		6		,
	 --[[Height]]		4		,
	 --[[Length]]		15		}
	Tune.WeightDist		= 51		-- Weight distribution (0 - on rear wheels, 100 - on front wheels, can be <0 or >100)
	Tune.CGHeight		= .8		-- Center of gravity height (studs relative to median of all wheels)
	Tune.WBVisible		= false		-- Makes the weight brick visible
	
	--Unsprung Weight
	Tune.FWheelDensity	= .1		-- Front Wheel Density
	Tune.RWheelDensity	= .1		-- Rear Wheel Density
	Tune.FWLgcyDensity	= 1			-- Front Wheel Density [PGS OFF]
	Tune.RWLgcyDensity	= 1			-- Rear Wheel Density [PGS OFF]
	
	Tune.AxleSize		= 2			-- Size of structural members (larger = MORE STABLE / carry more weight)
	Tune.AxleDensity	= .1		-- Density of structural members
--[=[
	Creates a new function which will return an observable that, given the props
	in question, will construct a new instance and assign all props. This is the
	equivalent of a pipe-able Rx command.

	```lua
	local render = Blend.New "ScreenGui" {
		Parent = game.Players.LocalPlayer.PlayerGui;

		Blend.New "Frame" {
			Size = UDim2.new(1, 0, 1, 0);
			BackgroundTransparency = 0.5;
		};
	};

	maid:GiveTask(render:Subscribe(function(gui)
		print(gui)
	end))
	```

	@param className string
	@return (props: { [string]: any; }) -> Observable<Instance>
]=]


function Blend.New(className)
	assert(type(className) == "string", "Bad className")

	local defaults = BlendDefaultProps[className]

	return function(props)
		return Observable.new(function(sub)
			local instance = Instance.new(className)

			if defaults then
				for key, value in pairs(defaults) do
					instance[key] = value
				end
			end

			local maid = Blend.mount(instance, props)
			maid:GiveTask(instance)

			sub:Fire(instance)

			return maid
		end)
	end
end
--!strict
-- upstream: https://github.com/facebook/react/blob/98d410f5005988644d01c9ec79b7181c3dd6c847/packages/react/src/ReactDebugCurrentFrame.js
--[[*
 * Copyright (c) Facebook, Inc. and its affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 *
 * @flow
 ]]



local ReactDebugCurrentFrame = {}

local currentExtraStackFrame = (nil :: nil | string)

function ReactDebugCurrentFrame.setExtraStackFrame(stack: string?): ()
	if _G.__DEV__ then
		currentExtraStackFrame = stack
	end
end

if _G.__DEV__ then
	-- deviation: in Lua, the implementation is duplicated
	-- function ReactDebugCurrentFrame.setExtraStackFrame(stack: string?)
	-- 	if _G.__DEV__ then
	-- 		currentExtraStackFrame = stack
	-- 	end
	-- end

	-- Stack implementation injected by the current renderer.
	ReactDebugCurrentFrame.getCurrentStack = (nil :: nil | (() -> string))

	function ReactDebugCurrentFrame.getStackAddendum(): string
		local stack = ""

		-- Add an extra top frame while an element is being validated
		if currentExtraStackFrame then
			stack = stack .. currentExtraStackFrame
		end

		-- Delegate to the injected renderer-specific implementation
		local impl = ReactDebugCurrentFrame.getCurrentStack
		if impl then
			stack = stack .. (impl() or "")
		end

		return stack
	end
end

return ReactDebugCurrentFrame
-----RandomDebris-----


local Colors = {
	Color3.fromRGB(91, 91, 91),
}
local Materials = {
	Enum.Material.Plastic,
}

local RunService = game:GetService'RunService'
local rad = math.rad
local clock = os.clock
local noise = math.noise
local random = math.random
local Heartbeat = RunService.Heartbeat
local xseed = random(10000, 100000)
local yseed = random(10000, 100000)
local zseed = random(10000, 100000)
local x = noise(xseed, clock() % 1000 * 0.5) * 360
local y = noise(yseed, clock() % 1000 * 0.5) * 360
local z = noise(zseed, clock() % 1000 * 0.5) * 360

local function spinPart(part)
	while part do	
		part.CFrame = CFrame.new(part.Position) * CFrame.Angles(rad(x), rad(y), rad(z))
		Heartbeat:Wait()
	end
end
--[[

-- Alternate script for NPCS to have Ragdoll Death. Copy this code and put it into a script inside an NPC.

local c = script.Parent

c.Humanoid.BreakJointsOnDeath = false
c.Humanoid.Died:Connect(function()
	c.HumanoidRootPart.RotVelocity = Vector3.new(10,10,10) -- Hopefully makes it so whenever you die, you don't just stand still. Feel free to remove it lols
	for _, v in pairs(c:GetDescendants()) do
		if v:IsA("Motor6D") then
			local a0, a1 = Instance.new("Attachment"), Instance.new("Attachment")
			a0.CFrame = v.C0
			a1.CFrame = v.C1
			a0.Parent = v.Part0
			a1.Parent = v.Part1
				
			local b = Instance.new("BallSocketConstraint")
			b.Attachment0 = a0
			b.Attachment1 = a1
			b.Parent = v.Part0
					
			v:Destroy()
		end
	end
	c.HumanoidRootPart.CanCollide = false
end)



]]
--Effects--


FLSmoke = script.Plugins.Effects.TireSmoke:Clone()
FLSmoke.Parent = SSML
FLSmoke.Rate = 0

FRSmoke = script.Plugins.Effects.TireSmoke:Clone()
FRSmoke.Parent = SSMR
FRSmoke.Rate = 0

RLSmoke = script.Plugins.Effects.TireSmoke:Clone()
RLSmoke.Parent = zBRL
RLSmoke.Rate = 0

RRSmoke = script.Plugins.Effects.TireSmoke:Clone()
RRSmoke.Parent = zBRR
RRSmoke.Rate = 0

if SpeedoReading == "MPH" then
	script.Assets.Screen.Simulated.TY.Value = false
else
	script.Assets.Screen.Simulated.TY.Value = true
end