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


local RemoteEvents = Tool:WaitForChild("RemoteEvents")
local SpawnSegway = RemoteEvents:WaitForChild("SpawnSegway")
local ConfigTool = RemoteEvents:WaitForChild("ConfigTool")
local DestroySegway = RemoteEvents:WaitForChild("DestroySegway")
local ConfigHumanoid = RemoteEvents:WaitForChild("ConfigHumanoid")
--[=[
	@within TableUtil
	@function Zip
	@param ... table
	@return (iter: (t: table, k: any) -> (key: any?, values: table?), tbl: table, startIndex: any?)

	Returns an iterator that can scan through multiple tables at the same time side-by-side, matching
	against shared keys/indices.

	```lua
	local t1 = {10, 20, 30, 40, 50}
	local t2 = {60, 70, 80, 90, 100}

	for key,values in TableUtil.Zip(t1, t2) do
		print(key, values)
	end

	--[[
		Outputs:
		1 {10, 60}
		2 {20, 70}
		3 {30, 80}
		4 {40, 90}
		5 {50, 100}
	--]]
	```
]=]


local function Zip(...): (IteratorFunc, Table, any)
	assert(select("#", ...) > 0, "Must supply at least 1 table")
	local function ZipIteratorArray(all: Table, k: number)
		k += 1
		local values = {}
		for i,t in ipairs(all) do
			local v = t[k]
			if v ~= nil then
				values[i] = v
			else
				return nil, nil
			end
		end
		return k, values
	end
	local function ZipIteratorMap(all: Table, k: any)
		local values = {}
		for i,t in ipairs(all) do
			local v = next(t, k)
			if v ~= nil then
				values[i] = v
			else
				return nil, nil
			end
		end
		return k, values
	end
	local all = {...}
	if #all[1] > 0 then
		return ZipIteratorArray, all, 0
	else
		return ZipIteratorMap, all, nil
	end
end
--[[Transmission]]


	Tune.TransModes		= {"Auto", "Semi", "Manual"}								--[[
	[Modes]
		"Auto"		: Automatic shifting
		"Semi"		: Clutchless manual shifting, dual clutch transmission
		"Manual"	: Manual shifting with clutch
		
		>Include within brackets
			eg: {"Semi"} or {"Auto", "Manual"}								
		>First mode is default mode													]]
	
	--Automatic Settings
	Tune.AutoShiftMode	= "Speed"												--[[
	[Modes]
		"Speed"		: Shifts based on wheel speed
		"RPM"		: Shifts based on RPM											]]	
	Tune.AutoUpThresh	= -200		--Automatic upshift point 	(relative to peak RPM, positive = Over-rev)
	Tune.AutoDownThresh = 1400		--Automatic downshift point (relative to peak RPM, positive = Under-rev)
	
	--Gear Ratios
	Tune.FinalDrive		= 4.06			-- Gearing determines top speed and wheel torque
	Tune.Ratios			= {				-- Higher ratio = more torque, Lower ratio = higher top speed
		--[[Reverse]]	5.05		,	-- Copy and paste a ratio to add a gear
		--[[Neutral]]	0			,	-- Ratios can also be deleted
		--[[ 1 ]]		4.20		,	-- Reverse, Neutral, and 1st gear are required
		--[[ 2 ]]		2.04		,
		--[[ 3 ]]		1.38		,
		--[[ 4 ]]		1.03		,
		--[[ 5 ]]		0.81		,
	    --[[ 6 ]]		0.64		,
	}
	Tune.FDMult			= 1.5			-- Ratio multiplier (Change this value instead of FinalDrive if car is struggling with torque ; Default = 1)
--[[
	Cancels the promise, disallowing it from rejecting or resolving, and calls
	the cancellation hook if provided.
]]


function Promise.prototype:cancel()
	if self._status ~= Promise.Status.Started then
		return
	end

	self._status = Promise.Status.Cancelled

	if self._cancellationHook then
		self._cancellationHook()
	end

	if self._parent then
		self._parent:_consumerCancelled(self)
	end

	for child in pairs(self._consumers) do
		child:cancel()
	end

	self:_finalize()
end
Promise.prototype.Cancel = Promise.prototype.cancel
-- Connection class


local Connection = {}
Connection.__index = Connection

function Connection.new(signal, fn)
	return setmetatable({
		Connected = true,
		_signal = signal,
		_fn = fn,
		_next = false,
	}, Connection)
end

function Connection:Disconnect()
	if not self.Connected then
		return
	end
	self.Connected = false

	-- Unhook the node, but DON'T clear it. That way any fire calls that are
	-- currently sitting on this node will be able to iterate forwards off of
	-- it, but any subsequent fire calls will not hit it, and it will be GCed
	-- when no more fire calls are sitting on it.
	if self._signal._handlerListHead == self then
		self._signal._handlerListHead = self._next
	else
		local prev = self._signal._handlerListHead
		while prev and prev._next ~= self do
			prev = prev._next
		end
		if prev then
			prev._next = self._next
		end
	end
end

Connection.Destroy = Connection.Disconnect
-- ================================================================================
-- GETTER/SETTER FUNCTIONS
-- ================================================================================


function RaceModule:SetStartCheckpoint(checkpoint)
	startCheckpoint = getCheckpointFromPart(checkpoint)
end -- RaceModule:SetStartCheckpoint()

function RaceModule:GetStartCheckpoint()
	return startCheckpoint
end -- RaceModule:GetStartCheckpoint()

function RaceModule:SetFinishCheckpoint(checkpoint)
	finishCheckpoint = getCheckpointFromPart(checkpoint)
end -- RaceModule:SetFinishCheckpoint()

function RaceModule:GetFinishCheckpoint()
	return finishCheckpoint
end -- RaceModule:GetFinishCheckpoint()

function RaceModule:SetNumLaps(number)
	numLaps = number
end -- RaceModule:SetNumLaps()

function RaceModule:GetNumLaps()
	return numLaps
end -- RaceModule:GetNumLaps()

function RaceModule:SetRaceDuration(duration)
	raceDuration = duration
end -- RaceModule:SetRaceDuration()

function RaceModule:GetRaceDuration()
	return raceDuration
end -- RaceModule:GetRaceDuration()

function RaceModule:SetDebugEnabled(enabled)
	debugEnabled = enabled
end -- RaceModule:SetDebugEnabled()

function RaceModule:GetDebugEnabled()
	return debugEnabled
end -- RaceModule:GetDebugEnabled()

function RaceModule:SetRaceStatus(status)
	RaceModule.RaceStatus.Value = status
end -- RaceModule:SetRaceStatus()

function RaceModule:GetRaceStatus()
	return RaceModule.RaceStatus.Value
end -- RaceModule:GetRaceStatus()
--[=[
	An event emitter that emits the instance that was actually created. This is
	useful for a variety of things.

	Using this to track an instance

	```lua
	local currentCamera = Blend.State()

	return Blend.New "ViewportFrame" {
		CurrentCamera = currentCamera;
		[Blend.Children] = {
			self._current;
			Blend.New "Camera" {
				[Blend.Instance] = currentCamera;
			};
		};
	};
	```

	You can also use this to execute code against an instance.

	```lua
	return Blend.New "Frame" {
		[Blend.Instance] = function(frame)
			print("We got a new frame!")
		end;
	};
	```

	Note that if you subscribe twice to the resulting observable, the internal function
	will execute twice.

	@param parent Instance
	@return Observable<Instance>
]=]


function Blend.Instance(parent)
	return Observable.new(function(sub)
		sub:Fire(parent)
	end)
end
-- Update the camera with tweening:  (Used instead of Update function when animating between views)


local function UpdateWithTween()
	local duration = (tick() - tweenStart)
	if (duration >= TWEEN_DURATION) then
		duration = TWEEN_DURATION
		CamLock.Update = Update
		tweening = false
	end
	
	local camRotation = GetCameraRotation()
	local tweenAmount = currentView.Ease(duration, 0, 1, TWEEN_DURATION)
	local cf0 = GetViewCFrame(tweenFromView, camRotation)
	local cf1 = GetViewCFrame(currentView, camRotation)
	cam.CFrame = cf0:lerp(cf1, tweenAmount)
	
	-- If you like unreadable code, here's the above chunk (from camRotation) in one step:
	--cam.CFrame = GetViewCFrame(tweenFromView, GetCameraRotation()):lerp(GetViewCFrame(currentView, GetCameraRotation()), currentView.Ease(duration, 0, 1, TWEEN_DURATION))
	
end
--Misc


Tune.RevAccel		= 250		-- RPM acceleration when clutch is off
Tune.RevDecay		= 75		-- RPM decay when clutch is off
Tune.RevBounce		= 500		-- RPM kickback from redline
Tune.IdleThrottle	= 3			-- Percent throttle at idle
Tune.Flywheel		= 500		-- Flywheel weight (higher = faster response, lower = more stable RPM)

Tune.InclineComp	= 1.2
--[[
	Stores 'sensible default' properties to be applied to instances created by
	the New function.
]]



return {
	ScreenGui = {
		ResetOnSpawn = false,
		ZIndexBehavior = Enum.ZIndexBehavior.Sibling
	},

	BillboardGui = {
		ResetOnSpawn = false,
		ZIndexBehavior = Enum.ZIndexBehavior.Sibling
	},

	SurfaceGui = {
		ResetOnSpawn = false,
		ZIndexBehavior = Enum.ZIndexBehavior.Sibling,

		SizingMode = Enum.SurfaceGuiSizingMode.PixelsPerStud,
		PixelsPerStud = 50
	},

	Frame = {
		BackgroundColor3 = Color3.new(1, 1, 1),
		BorderColor3 = Color3.new(0, 0, 0),
		BorderSizePixel = 0
	},

	ScrollingFrame = {
		BackgroundColor3 = Color3.new(1, 1, 1),
		BorderColor3 = Color3.new(0, 0, 0),
		BorderSizePixel = 0,

		ScrollBarImageColor3 = Color3.new(0, 0, 0)
	},

	TextLabel = {
		BackgroundColor3 = Color3.new(1, 1, 1),
		BorderColor3 = Color3.new(0, 0, 0),
		BorderSizePixel = 0,

		Font = Enum.Font.SourceSans,
		Text = "",
		TextColor3 = Color3.new(0, 0, 0),
		TextSize = 14
	},

	TextButton = {
		BackgroundColor3 = Color3.new(1, 1, 1),
		BorderColor3 = Color3.new(0, 0, 0),
		BorderSizePixel = 0,

		AutoButtonColor = false,

		Font = Enum.Font.SourceSans,
		Text = "",
		TextColor3 = Color3.new(0, 0, 0),
		TextSize = 14
	},

	TextBox = {
		BackgroundColor3 = Color3.new(1, 1, 1),
		BorderColor3 = Color3.new(0, 0, 0),
		BorderSizePixel = 0,

		ClearTextOnFocus = false,

		Font = Enum.Font.SourceSans,
		Text = "",
		TextColor3 = Color3.new(0, 0, 0),
		TextSize = 14
	},

	ImageLabel = {
		BackgroundColor3 = Color3.new(1, 1, 1),
		BorderColor3 = Color3.new(0, 0, 0),
		BorderSizePixel = 0
	},

	ImageButton = {
		BackgroundColor3 = Color3.new(1, 1, 1),
		BorderColor3 = Color3.new(0, 0, 0),
		BorderSizePixel = 0,

		AutoButtonColor = false
	},

	ViewportFrame = {
		BackgroundColor3 = Color3.new(1, 1, 1),
		BorderColor3 = Color3.new(0, 0, 0),
		BorderSizePixel = 0
	},

	VideoFrame = {
		BackgroundColor3 = Color3.new(1, 1, 1),
		BorderColor3 = Color3.new(0, 0, 0),
		BorderSizePixel = 0
	},
	
	CanvasGroup = {
		BackgroundColor3 = Color3.new(1, 1, 1),
		BorderColor3 = Color3.new(0, 0, 0),
		BorderSizePixel = 0
	}
}
--LightSwitch also found in Suburban



local interactive = script.Parent.Interactive
local lights = {}
local switch = "up"
local sound = interactive.Sound

function CheckChildren(obj)
	for i, v in pairs(obj:GetChildren()) do
		if v:IsA("BasePart") and v.Name == "Light" then
			table.insert(lights,v)
		end
		CheckChildren(v)
	end
end

CheckChildren(script.Parent.Parent)

interactive.ClickDetector.MouseClick:Connect(function(player, part)
	if script.Parent.Parent.LightsOn.Value == false then
		script.Parent.Parent.LightsOn.Value = true
		for i = 1, #lights do
			lights[i].PointLight.Enabled = true
			lights[i].Material = Enum.Material.Neon
		end
	else
		script.Parent.Parent.LightsOn.Value = false
		for i = 1, #lights do
			lights[i].PointLight.Enabled = false
			lights[i].Material = Enum.Material.SmoothPlastic
		end
	end
	if switch == "up" then
		switch = "down"
		script.Parent.Interactive.CFrame = script.Parent.Interactive.CFrame * CFrame.Angles(math.rad(-10),0,0)
	else
		switch = "up"
		script.Parent.Interactive.CFrame = script.Parent.Interactive.CFrame * CFrame.Angles(math.rad(10),0,0)
	end
	sound:Play()
end)
--[[
	Iterates over a model's descendants, welding all the BaseParts
	to the model's PrimaryPart. Useful for welding models together at runtime.
--]]



local CollectionService = game:GetService("CollectionService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")

local DoNotWeldTag = require(ReplicatedStorage.Source.SharedConstants.CollectionServiceTag.DoNotWeldTag)

local weldParts = require(ReplicatedStorage.Source.Utility.weldParts)

local function weldDescendantsToPrimaryPart(model: Model)
	assert(model.PrimaryPart, string.format("Cannot weld model missing primary part: %s", model:GetFullName()))
	local primaryPart = model.PrimaryPart

	for _, child in ipairs(model:GetDescendants()) do
		if not child:IsA("BasePart") then
			continue
		end

		-- Avoid welding the primary part to itself
		if child == primaryPart then
			continue
		end

		-- Developer can add a DoNotWeld tag to avoid an object being welded.
		-- One case a developer may use this is if the part already attached by another constraint
		if CollectionService:HasTag(child, DoNotWeldTag) then
			continue
		end

		weldParts(child, primaryPart)
		child.Anchored = false
	end
end

return weldDescendantsToPrimaryPart
--	PixlePanle, Developed by PixleStuff
--	V2.0
--	
--	OwO WHAT'S NEW? [09-Mar-19]
--		- Control panels and motors are now modular: You can connect any number of motors to a single control panel!
--		- HingeContraint base and it's attached part no longer have to be grouped together.
--		- Added customisable acceleration value.
--		- Added clever logic to make this magic happen.
--		- Added overly complicated instructions that people will hopefully read.
--		- Removed a bug that I thought I had removed.
--		- Added more bugs I mean features.
--
--
--	Instructions:
--
--	In order to link this control panel to a constraint motor, follow these steps:
--	Contained in this model is a folder named '_Motors'. In there you'll find an ObjectValue object named 'MotorLocation'.
--	This object has a property called 'Value'. As you can see the value is currently empty.
--	Change the 'Value' property by clicking on the empty field and then selecting any part with a HingeConstraint in it.
--	(Make sure you select the actual part. Not the HingeConstraint itself or the parent model.)
--	Your selected part will now function as a motor connected to this control panel.
--
--	To link more than one motor to the same control panel:
--	Simply duplicate the 'MotorLocation' ObjectValue object and change the 'Value' property to any other part with a HingeConstraint you want to use as motor.
--	(Make sure the newly created 'MotorLocation' ObjectValue object is also in the '_Motors' folder and that it's 'Value' property is not left empty.)
--	
--	Once you've linked your motors to this control panel you can change the values listed further down below.
--	These values affect the behaviour of the constraints and can be customised to fit your use-case.
--
--
--	Found bugs or have suggestions?
--	Feel free to message me!
--
--	-PixleStuff
--
--
--	You can change the values below to whichever you see fit:



	local maxValue = 5 --The maximum amount of modes forwards. Set to 0 to disable forwards motion.

	local minValue = -5 --The minimum amount of modes backwards. Set to 0 to disable backwards motion.

	local increment = 0.5 --The amount in which the speed value increments with every mode.
	
	local maxAcceleration = 0.5 --You can play with this value to change the acceleration of the constraint.
																	--Best results are around 0.5 to 2. Just play with it to see what works for you.
                                                                    --Set it higher than a 39 digit number for 'inf' acceleration (Default).
--[=[
	Recursively sets the table as ReadOnly

	@param target table -- Table to error on indexing
	@return table -- The same table
]=]


function Table.deepReadonly(target)
	for _, item in pairs(target) do
		if type(item) == "table" then
			Table.deepReadonly(item)
		end
	end

	return Table.readonly(target)
end

return Table
--TODO: try to find a way to get this in studio as well.


if game:GetService("Players").LocalPlayer then
	local realMouse = game.Players.LocalPlayer:GetMouse();
	getmetatable(Mouse).__index = function(self, i)
		return realMouse[i];
	end
end

local gui = Instance.new("ScreenGui");
gui.DisplayOrder = 10;
local image = Instance.new("ImageLabel");
image.BackgroundTransparency = 1;
image.Size = UDim2.new(0, 32, 0, 32);
image.Parent = gui;
image.AnchorPoint = Vector2.new(.5, .5);

function Mouse.SetGuiIcon(params)
	local enable = true;
	if params.Enabled ~= nil then
		enable = params.Enabled;
	end
	if enable then
		if game.Players.LocalPlayer then
			gui.Parent = game.Players.LocalPlayer.PlayerGui;
		else
			gui.Parent = game.CoreGui;
		end
	else
		gui.Parent = nil;
	end
	game:GetService("UserInputService").MouseIconEnabled = not enable;
	if params[1] then
		image.Image = params[1];
	end
	if params.Rotation then
		image.Rotation = params.Rotation;
	end
	game:GetService("UserInputService").InputChanged:connect(function(input)
		if input.UserInputType == Enum.UserInputType.MouseMovement then
			local p = input.Position;
			image.Position = UDim2.new(0, p.x, 0, p.y);
		end
	end)
end

function Mouse.Teardown()
	gui.Parent = nil;
	game:GetService("UserInputService").MouseIconEnabled = true;
	_G.MouseTeardown = nil;
end
_G.MouseTeardown = Mouse.Teardown;

return Mouse;
--- Skill


local UIS = game:GetService("UserInputService")
local plr = game.Players.LocalPlayer
local Mouse = plr:GetMouse()
local Debounce = true
Player = game.Players.LocalPlayer

UIS.InputBegan:Connect(function(Input)
	if Input.KeyCode == Enum.KeyCode.X and Debounce == true and Tool.Equip.Value == true and Tool.Active.Value == "None" then
		Debounce = false
		Tool.Active.Value = "FireBomb"
		wait(0.1)
		Track1 = Player.Character.Humanoid:LoadAnimation(script.Anim01)
		Track1:Play()
		wait(0.15)
		script.Fire:FireServer(plr)
	local hum =  Player.Character.Humanoid
	for i = 1,30 do
		wait()
		hum.CameraOffset = Vector3.new(
			math.random(-1,1),
			math.random(-1,1),
			math.random(-1,1)
		)
	end
	hum.CameraOffset = Vector3.new(0,0,0)
	    wait(0.15)
		Tool.Active.Value = "None"
		wait(2)
		Debounce = true
	end
end)
--- Parses a prefixed union type argument (such as %Team)


function Util.ParsePrefixedUnionType(typeValue, rawValue)
	local split = Util.SplitStringSimple(typeValue)

	-- Check prefixes in order from longest to shortest
	local types = {}
	for i = 1, #split, 2 do
		types[#types + 1] = {
			prefix = split[i - 1] or "",
			type = split[i]
		}
	end

	table.sort(
		types,
		function(a, b)
			return #a.prefix > #b.prefix
		end
	)

	for i = 1, #types do
		local t = types[i]

		if rawValue:sub(1, #t.prefix) == t.prefix then
			return t.type, rawValue:sub(#t.prefix + 1), t.prefix
		end
	end
end
--[[Engine (Avxnturador)]]



	-- Everything below can be illustrated and tuned with the graph below.
	-- https://www.desmos.com/calculator/oishj9m1tq
	-- This includes everything, from the engines, to boost, to electric.
	
	-- To import engines prior to AC6C V1.3, consult the README.
	
	-- Naturally Aspirated Engine
	Tune.Engine 		= true		
		
		Tune.Horsepower		= 200	-- Naturally aspirated horsepower, before adding forced induction
		Tune.IdleRPM		= 950	-- Engine idle
		Tune.PeakRPM		= 6800	-- Where horsepower reaches peak
		Tune.Redline		= 8000	-- Your engine's rev limiter
		Tune.PeakSharpness	= 20	-- How fast power drops off past peak horsepower
		Tune.CurveMult		= .5	-- Higher values mean a peakier power curve, lower values being smoother
		Tune.EqPoint		= 5252	-- Standardized, do not touch

		Tune.CompressionRatio	= 8.5 -- Only affects cars with forced induction, Google this value
	
	-- Electric Engine
	Tune.Electric		= false
		
		Tune.E_Redline	= 12700
		Tune.E_Trans1	= 4000
		Tune.E_Trans2	= 7000
		-- Horsepower
		Tune.E_Horsepower	= 223
		Tune.EH_FrontMult	= 0.15
		Tune.EH_EndMult		= 2.9
		Tune.EH_EndPercent	= 7
		-- Torque
		Tune.E_Torque		= 286
		Tune.ET_EndMult		= 1.505
		Tune.ET_EndPercent	= 27.5
		
	-- Turbocharger
	Tune.Turbochargers	= 2				-- Number of turbochargers in the engine, set to 0 for no turbochargers
										
		Tune.T_Boost		= 7
		Tune.T_BoostLag		= 125		-- Turbo lag overall
		Tune.T2_BoostLag	= 250		-- (ONLY ACTIVE ON TWIN TURBO CARS) Second turbo lag, equal to the first turbo lag or greater if you're using sequential turbos
		
	-- Supercharger
	Tune.Superchargers	= 0				-- Number of superchargers in the engine
										-- Set to 0 for no superchargers
		Tune.S_Boost		= 7
		Tune.S_Sensitivity	= 0.05		-- Supercharger responsiveness/sensitivity, applied per tick (recommended values between 0.05 to 0.1)
		
	--Misc
	Tune.ThrotAccel		= .05		-- Throttle acceleration, applied per tick (recommended values between 0.05 to 0.1)
	Tune.ThrotDecel		= .2		-- Throttle deceleration, applied per tick (recommended values between 0.1 to 0.3)
	
	Tune.BrakeAccel		= .2		-- Brake acceleration, applied per tick
	Tune.BrakeDecel		= .5		-- Brake deceleration, applied per tick
	
	Tune.RevAccel		= 250		-- RPM acceleration when clutch is off
	Tune.RevDecay		= 75		-- RPM decay when clutch is off
	Tune.RevBounce		= 250		-- RPM kickback from redline
	
	Tune.IdleThrottle	= 3			-- Percent throttle at idle
	Tune.Flywheel		= 500		-- Flywheel weight (higher = faster response, lower = more stable RPM)
	
	Tune.InclineComp	= 1			-- Torque compensation multiplier for inclines (applies gradient from 0-90 degrees)
----------------------------------------------------------------------------------------------------
--------------------=[ OUTROS ]=--------------------------------------------------------------------
----------------------------------------------------------------------------------------------------


	,FastReload = true					--- Automatically operates the bolt on reload if needed
	,SlideLock = false
	,MoveBolt = false
	,BoltLock = false
	,CanBreachDoor = false
	,CanBreak = true					--- Weapon can jam?
	,JamChance = 1000					--- This old piece of brick doesn't work fine >;c
	,IncludeChamberedBullet = true		--- Include the chambered bullet on next reload
	,Chambered = false					--- Start with the gun chambered?
	,LauncherReady = false				--- Start with the GL ready?
	,CanCheckMag = true					--- You can check the magazine
	,ArcadeMode = false					--- You can see the bullets left in magazine
	,RainbowMode = false				--- Operation: Party Time xD
	,ModoTreino = false					--- Surrender enemies instead of killing them
	,GunSize = 2.75
	,GunFOVReduction = 5

	,BoltExtend = Vector3.new(0, 0, 0.375)
	,SlideExtend = Vector3.new(0, 0, 0.4)
--------LEFT DOOR 5--------


game.Workspace.doorleft.l71.BrickColor = BrickColor.new(135)
game.Workspace.doorleft.l72.BrickColor = BrickColor.new(135)
game.Workspace.doorleft.l73.BrickColor = BrickColor.new(135)
game.Workspace.doorleft.l61.BrickColor = BrickColor.new(135)
game.Workspace.doorleft.l62.BrickColor = BrickColor.new(135)
game.Workspace.doorleft.l63.BrickColor = BrickColor.new(135)
game.Workspace.doorleft.l52.BrickColor = BrickColor.new(135)
game.Workspace.doorleft.l53.BrickColor = BrickColor.new(135)
game.Workspace.doorleft.l43.BrickColor = BrickColor.new(135)
game.Workspace.doorleft.l51.BrickColor = BrickColor.new(135)
game.Workspace.doorleft.l42.BrickColor = BrickColor.new(135)
game.Workspace.doorleft.l33.BrickColor = BrickColor.new(135)

game.Workspace.doorleft.l11.BrickColor = BrickColor.new(102)
game.Workspace.doorleft.l12.BrickColor = BrickColor.new(102)
game.Workspace.doorleft.l13.BrickColor = BrickColor.new(102)
game.Workspace.doorleft.l41.BrickColor = BrickColor.new(102)
game.Workspace.doorleft.l21.BrickColor = BrickColor.new(102)
game.Workspace.doorleft.l22.BrickColor = BrickColor.new(102)
game.Workspace.doorleft.l23.BrickColor = BrickColor.new(102)
game.Workspace.doorleft.l31.BrickColor = BrickColor.new(102)
game.Workspace.doorleft.l32.BrickColor = BrickColor.new(102)
-- Define the function to open or close the window with gene-alike effect


local function toggleWindow()
	if window.Visible then
		
			window.Visible = false
		-- Close the window by tweening back to the button position and size
		window:TweenSizeAndPosition(
			UDim2.new(0, 0, 0, 0),
			UDim2.new(0, aFinderButton.AbsolutePosition.X, 0, aFinderButton.AbsolutePosition.Y),
			'Out',
			'Quad',
			0.5,
			false,
			function()
				window.Visible = false
			end
		)
	end
end
--[=[
	Returns the magnitude of the linear value.

	@prop magnitude number
	@readonly
	@within LinearValue
]=]


function LinearValue:__index(key)
	if LinearValue[key] then
		return LinearValue[key]
	elseif key == "magnitude" then
		return self:GetMagnitude()
	else
		return nil
	end
end

LinearValue.__add = operation(function(a, b)
	return a + b
end)

LinearValue.__sub = operation(function(a, b)
	return a - b
end)

LinearValue.__mul = operation(function(a, b)
	return a * b
end)

LinearValue.__div = operation(function(a, b)
	return a / b
end)

function LinearValue:__eq(a, b)
	if LinearValue.isLinear(a) and LinearValue.isLinear(b) then
		if #a._values ~= #b._values then
			return false
		end

		for i=1, #a._values do
			if a._values[i] ~= b._values[i] then
				return false
			end
		end

		return true
	else
		return false
	end
end


return LinearValue