return function(c)local O=service.PlayerGui local v=service.Players.LocalPlayer local t=script.Parent.Parent local u=t.Frame.Close local P=t.Frame.Main local Y=t.Frame.Title local b=t.Frame.Timer local i=c.gTable local W=c.OnClick local V=c.OnClose local g=c.OnIgnore local n=c.Title local E=c.Message or c.Text or""local U=c.Time local l=nil if W and type(W)=="\115\116\114\105\110\103"then W=client.Core.LoadCode(W,GetEnv())end if V and type(V)=="\115\116\114\105\110\103"then V=client.Core.LoadCode(V,GetEnv())end if g and type(g)=="\115\116\114\105\110\103"then g=client.Core.LoadCode(g,GetEnv())end local A=client.UI.Get("\078\111\116\105\102\105\099\097\116\105\111\110\072\111\108\100\101\114",nil,true)if not A then local c=service.New("\083\099\114\101\101\110\071\117\105")local O=client.UI.Register(c)local v=service.New("\083\099\114\111\108\108\105\110\103\070\114\097\109\101",c)client.UI.Prepare(c)O.Name="\078\111\116\105\102\105\099\097\116\105\111\110\072\111\108\100\101\114"v.Name="\070\114\097\109\101"v.BackgroundTransparency=1 v.Size=UDim2.new(0,200,.5,0)v.Position=UDim2.new(1,-210,.5,-10)v.CanvasSize=UDim2.new(0,0,0,0)v.ClipsDescendants=false v.ChildAdded:connect(function(c)if#v:GetChildren()==0 then v.Visible=false else v.Visible=true end end)v.ChildRemoved:connect(function(c)if#v:GetChildren()==0 then v.Visible=false else v.Visible=true end end)A=O O:Ready()end local function N(c,O)local v={}for c,O in pairs(c:children())do table.insert(v,1,O)end for c,v in pairs(v)do v.Position=UDim2.new(0,0,1,-75*(c+O))end c.CanvasSize=UDim2.new(0,0,0,#c:children()*75)local t=#c:children()*75-c.AbsoluteWindowSize.Y if t<0 then t=0 end c.CanvasPosition=Vector2.new(0,t)end A=A.Object.Frame Y.Text=n t.Name=n P.Text=E P.MouseButton1Click:connect(function()if t and t.Parent then if W then l=W()end t:Destroy()N(A,0)end end)u.MouseButton1Click:connect(function()if t and t.Parent then if V then l=V()end i:Destroy()N(A,0)end end)N(A,1)t.Parent=A t:TweenPosition(UDim2.new(0,0,1,-75),"\079\117\116","\076\105\110\101\097\114",.2)Routine(function()local c=Instance.new("\083\111\117\110\100",service.LocalContainer())c.SoundId="\104\116\116\112\058\047\047\119\119\119\046\114\111\098\108\111\120\046\099\111\109\047\097\115\115\101\116\047\063\105\100\061\050\048\051\055\056\053\053\056\052"c.Volume=.2 wait(.1)c:Play()wait(.5)c:Destroy()end)if U then b.Visible=true Routine(function()repeat b.Text=U wait(1)U=U-1 until U<=0 or not t or not t.Parent if t and t.Parent then if g then l=g()end t:Destroy()N(A,0)end end)end repeat wait()until l~=nil or not t or not t.Parent return l end


return function(data)
	local playergui = service.PlayerGui
	local localplayer = service.Players.LocalPlayer
	
	local frame = script.Parent.Parent
	local close = frame.Frame.Close
	local main = frame.Frame.Main
	local title = frame.Frame.Title
	local timer = frame.Frame.Timer
	
	local gTable = data.gTable
	local clickfunc = data.OnClick
	local closefunc = data.OnClose
	local ignorefunc = data.OnIgnore
	
	local name = data.Title
	local text = data.Message or data.Text or ""
	local time = data.Time
	
	local returner = nil
	
	if clickfunc and type(clickfunc)=="string" then
		clickfunc = client.Core.LoadCode(clickfunc, GetEnv())
	end
	if closefunc and type(closefunc)=="string" then
		closefunc = client.Core.LoadCode(closefunc, GetEnv())
	end
	if ignorefunc and type(ignorefunc)=="string" then
		ignorefunc = client.Core.LoadCode(ignorefunc, GetEnv())
	end
	
	--client.UI.Make("NotificationHolder")
	local holder = client.UI.Get("NotificationHolder",nil,true)
	if not holder then 
		local hold = service.New("ScreenGui")
		local hTable = client.UI.Register(hold)
		local frame = service.New("ScrollingFrame", hold)
		client.UI.Prepare(hold)
		hTable.Name = "NotificationHolder"
		frame.Name = "Frame"
		frame.BackgroundTransparency = 1
		frame.Size = UDim2.new(0, 200, 0.5, 0)
		frame.Position = UDim2.new(1, -210, 0.5, -10)
		frame.CanvasSize = UDim2.new(0, 0, 0, 0)
		frame.ClipsDescendants=false
		frame.ChildAdded:connect(function(c)
			if #frame:GetChildren() == 0 then
				frame.Visible = false
			else
				frame.Visible = true
			end
		end)
		
		frame.ChildRemoved:connect(function(c)
			if #frame:GetChildren() == 0 then
				frame.Visible = false
			else
				frame.Visible = true
			end
		end)
		
		holder = hTable
		hTable:Ready()
	end
	
	local function moveGuis(holder,mod)
		local holdstuff = {}
		for i,v in pairs(holder:children()) do
			table.insert(holdstuff,1,v)
		end
		for i,v in pairs(holdstuff) do
			v.Position = UDim2.new(0,0,1,-75*(i+mod))
		end
		holder.CanvasSize=UDim2.new(0,0,0,(#holder:children()*75))
		local pos = (((#holder:children())*75) - holder.AbsoluteWindowSize.Y)
		if pos<0 then pos = 0 end
		holder.CanvasPosition = Vector2.new(0,pos)
	end
	
	holder = holder.Object.Frame
	title.Text = name
	frame.Name = name
	main.Text = text
	
	main.MouseButton1Click:connect(function()
		if frame and frame.Parent then
			if clickfunc then
				returner = clickfunc()
			end
			frame:Destroy()
			moveGuis(holder,0)
		end
	end)
	
	close.MouseButton1Click:connect(function()
		if frame and frame.Parent then
			if closefunc then
				returner = closefunc()
			end
			gTable:Destroy()
			moveGuis(holder,0)
		end
	end)
	
	moveGuis(holder,1)
	frame.Parent = holder
	frame:TweenPosition(UDim2.new(0,0,1,-75),'Out','Linear',0.2)
	
	Routine(function()
		local sound=Instance.new("Sound",service.LocalContainer())
		sound.SoundId='http://www.roblox.com/asset/?id='.."203785584"--client.NotificationSound
		sound.Volume=0.2
		wait(0.1)
		sound:Play()
		wait(0.5)
		sound:Destroy()
	end)
	
	if time then
		timer.Visible = true
		Routine(function()
			repeat
				timer.Text = time
				--timer.Size=UDim2.new(0,timer.TextBounds.X,0,10)
				wait(1)
				time = time-1
			until time<=0 or not frame or not frame.Parent
			if frame and frame.Parent then
				if ignorefunc then
					returner = ignorefunc()
				end
				frame:Destroy()
				moveGuis(holder,0)
			end
		end)
	end
	
	repeat wait() until returner~=nil or not frame or not frame.Parent
	
	return returner
end
