local function P(P,F)P.MouseLeave:Connect(function(P,t)F.Visible=false end)P.MouseMoved:Connect(function(t,s)F.Label.Text=P.Desc.Value F.Size=UDim2.new(0,10000,0,10000)local U=F.Label.TextBounds.X local Y=math.floor(U/500)Y=Y+1 if Y<1 then Y=1 end local R=500 if U<500 then R=U end F.Visible=true F.Size=UDim2.new(0,R+5,0,Y*20+5)F.Position=UDim2.new(0,t,0,(s-40)-(Y*20+5))end)end return function(F,t)if t then setfenv(1,t)end local s=F.gTable local U=s.Object local Y=U.Drag local R=U.Drag.Main local C=U.Drag.Close local e=U.Drag.Hide local L=U.Drag.Search local m=U.Drag.Main.ClientTab local V=U.Drag.Main.ServerTab local O=U.Drag.Main.Dragger local k=U.Drag.Main.Client local v=U.Drag.Main.Server local g=U.Drag.Title local a=U.Entry local D=U.Desc local l=0 local E=service.Players.LocalPlayer:GetMouse()local o,Q=Y.AbsoluteSize.X,R.AbsoluteSize.Y local j=false local z,X=o,Q local f=""local function Z()v.Visible=false k.Visible=true m.BackgroundTransparency=0 V.BackgroundTransparency=.5 end local function b()v.Visible=true k.Visible=false m.BackgroundTransparency=.5 V.BackgroundTransparency=0 end local A A=function()local F local t=service.GetTasks()k:ClearAllChildren()local s=0 for F,t in pairs(t)do local U=a:Clone()local Y=U.Frame local R=t:Status()U.Parent=k U.Visible=true U.Desc.Value=t.Name U.Position=UDim2.new(0,0,0,s*20)Y.Text.Text=tostring(t.Function)Y.Status.Text=R if R=="\115\117\115\112\101\110\100\101\100"then Y.Resume.Text="\082\101\115\117\109\101"elseif R=="\110\111\114\109\097\108"or R=="\114\117\110\110\105\110\103"then Y.Resume.Text="\083\117\115\112\101\110\100"end Y.Resume.MouseButton1Down:Connect(function()if Y.Resume.Text=="\082\101\115\117\109\101"and t:Status()=="\083\117\115\112\101\110\100\101\100"then t:Resume()else t:Pause()end wait(.5)A()end)Y.Kill.MouseButton1Down:Connect(function()t:Kill()wait(.5)A()end)Y.Stop.MouseButton1Down:Connect(function()t:Stop()wait(.5)A()end)P(U,D)s=s+1 end k.CanvasSize=UDim2.new(0,0,0,l*20)end V.MouseButton1Down:Connect(b)m.MouseButton1Down:Connect(Z)C.MouseButton1Click:Connect(function()Y.Draggable=false Y:TweenPosition(UDim2.new(Y.Position.X.Scale,Y.Position.X.Offset,1,0),"\079\117\116","\083\105\110\101",.5,true)wait(.5)s:Destroy()end)Y.BackgroundColor3=R.BackgroundColor3 e.MouseButton1Click:Connect(function()if R.Visible then R.Visible=false Y.BackgroundTransparency=R.BackgroundTransparency e.Text="\043"else R.Visible=true Y.BackgroundTransparency=1 e.Text="-"end end)E.Move:Connect(function(P,F)if j then o=z+(O.Position.X.Offset+20)Q=X+(O.Position.Y.Offset+20)if o<200 then o=200 end if Q<200 then Q=200 end Y.Size=UDim2.new(0,o,0,30)R.Size=UDim2.new(1,0,0,Q)if o<220 then if f==""then f=g.Text end g.Text=""else if f~=""then g.Text=f f=""end end end end)O.DragBegin:Connect(function(P)j=true end)O.DragStopped:Connect(function(P,F)j=false z=o X=Q O.Position=UDim2.new(1,-20,1,-20)end)s:Ready()while wait(1)do A()end end

local function Expand(ent, point)
	ent.MouseLeave:Connect(function(x,y)
		point.Visible = false
	end)
	
	ent.MouseMoved:Connect(function(x,y)
		point.Label.Text = ent.Desc.Value
		point.Size = UDim2.new(0, 10000, 0, 10000)
		local bounds = point.Label.TextBounds.X
		local rows = math.floor(bounds/500)
		rows = rows+1
		if rows<1 then rows = 1 end
		local newx = 500
		if bounds<500 then newx = bounds end
		point.Visible = true
		point.Size = UDim2.new(0, newx+5, 0, (rows*20)+5)
		point.Position = UDim2.new(0, x, 0, y-40-((rows*20)+5))
	end)
end


return function(data, env)
	if env then
		setfenv(1, env)
	end
	
	local gTable = data.gTable
	local gui = gTable.Object
	local drag = gui.Drag
	local Main = gui.Drag.Main
	local Close = gui.Drag.Close
	local Hide = gui.Drag.Hide
	local Search = gui.Drag.Search
	local cTab = gui.Drag.Main.ClientTab
	local sTab = gui.Drag.Main.ServerTab
	local Dragger = gui.Drag.Main.Dragger
	local cFrame = gui.Drag.Main.Client
	local sFrame = gui.Drag.Main.Server
	local Title = gui.Drag.Title
	local Entry = gui.Entry
	local Desc = gui.Desc
	
	local num = 0
	local mouse = service.Players.LocalPlayer:GetMouse()
	local nx,ny = drag.AbsoluteSize.X,Main.AbsoluteSize.Y
	local dragging = false
	local defx,defy = nx,ny
	local topText = ""
	
	local function openClient()
		sFrame.Visible = false
		cFrame.Visible = true
		cTab.BackgroundTransparency = 0
		sTab.BackgroundTransparency = 0.5
	end
	
	local function openServer()
		sFrame.Visible = true
		cFrame.Visible = false
		cTab.BackgroundTransparency = 0.5
		sTab.BackgroundTransparency = 0
	end
	
	local updateLists; updateLists = function()
		local serverTasks --= client.Remote.Get("TaskCommand","GetTasks")
		local clientTasks = service.GetTasks() --service.Threads.Tasks
		--// Unfinished
		cFrame:ClearAllChildren()
		
		local cNum = 0
		for index,task in pairs(clientTasks) do
			local new = Entry:Clone()
			local frame = new.Frame
			local status = task:Status()
			new.Parent = cFrame
			new.Visible = true
			new.Desc.Value = task.Name
			new.Position = UDim2.new(0,0,0,cNum*20)
			frame.Text.Text = tostring(task.Function)
			frame.Status.Text = status
			
			if status == "suspended" then
				frame.Resume.Text = "Resume"
			elseif status == "normal" or status == "running" then
				frame.Resume.Text = "Suspend"
			end
			
			frame.Resume.MouseButton1Down:Connect(function()
				if frame.Resume.Text == "Resume" and task:Status() == "Suspended" then
					task:Resume()
				else
					task:Pause()
				end
				wait(0.5)
				updateLists()
			end)
			
			frame.Kill.MouseButton1Down:Connect(function()
				task:Kill()
				wait(0.5)
				updateLists()
			end)
			
			frame.Stop.MouseButton1Down:Connect(function()
				task:Stop()
				wait(0.5)
				updateLists()
			end)
			
			Expand(new,Desc)
			cNum = cNum+1
		end
		
		cFrame.CanvasSize =  UDim2.new(0, 0, 0, num*20)
	end
	
	sTab.MouseButton1Down:Connect(openServer)
	cTab.MouseButton1Down:Connect(openClient)
	
	Close.MouseButton1Click:Connect(function()
		drag.Draggable = false
		drag:TweenPosition(UDim2.new(drag.Position.X.Scale, drag.Position.X.Offset, 1,0), "Out", "Sine", 0.5, true)
		wait(0.5)
		gTable:Destroy()
	end)

	drag.BackgroundColor3 = Main.BackgroundColor3
	
	Hide.MouseButton1Click:Connect(function() 
		if Main.Visible then
			Main.Visible = false
			drag.BackgroundTransparency = Main.BackgroundTransparency
			Hide.Text = "+"
		else
			Main.Visible = true
			drag.BackgroundTransparency = 1
			Hide.Text = "-"
		end
	end)
	
	mouse.Move:Connect(function(x,y) 
		if dragging then
			nx=defx+(Dragger.Position.X.Offset+20)
			ny=defy+(Dragger.Position.Y.Offset+20)
			if nx<200 then nx=200 end
			if ny<200 then ny=200 end
			drag.Size=UDim2.new(0, nx, 0, 30) 
			Main.Size=UDim2.new(1, 0, 0, ny)
			if nx<220 then
				if topText=="" then
					topText=Title.Text
				end
				Title.Text=""
			else
				if topText~="" then
					Title.Text=topText
					topText=""
				end
			end
		end
	end)
	
	Dragger.DragBegin:Connect(function(init)
		dragging = true
	end)
	
	Dragger.DragStopped:Connect(function(x,y)
		dragging = false
		defx = nx
		defy = ny
		Dragger.Position = UDim2.new(1,-20,1,-20)
	end)
	
	gTable:Ready()
	
	while wait(1) do
		updateLists()
	end
end










