return function(M,D)if D then setfenv(1,D)end local e=service.PlayerGui local k=service.Players.LocalPlayer local n=script.Parent.Parent local i=n:WaitForChild("\070\114\097\109\101")local X=i:WaitForChild("\073\099\111\110")local x=i:WaitForChild("\077\097\105\110")local P=i:WaitForChild("\067\108\111\115\101")local r=i:WaitForChild("\084\105\116\108\101")local z=i:WaitForChild("\084\105\109\101\114")local V=M.gTable local Z=M.OnClick local l=M.OnClose local A=M.OnIgnore local I=M.Title local Q=M.Message or M.Text or""local w=M.Time local B=M.Icon or client.MatIcons.Info local N=nil if Z and type(Z)=="\115\116\114\105\110\103"then Z=client.Core.LoadCode(Z,GetEnv())end if l and type(l)=="\115\116\114\105\110\103"then l=client.Core.LoadCode(l,GetEnv())end if A and type(A)=="\115\116\114\105\110\103"then A=client.Core.LoadCode(A,GetEnv())end local G=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 G then client.UI.Make("\078\111\116\105\102\105\099\097\116\105\111\110\072\111\108\100\101\114")G=client.UI.Get("\078\111\116\105\102\105\099\097\116\105\111\110\072\111\108\100\101\114",nil,true)G.Object.ScrollingFrame.Active=false end G=G.Object.ScrollingFrame r.Text=I x.Text=Q X.Image=B local t={Type="\078\111\116\105\102\105\099\097\116\105\111\110";Title=I;Message=Q;Icon=B or 0;Time=os.date("\037\088");Function=Z}table.insert(client.Variables.CommunicationsHistory,t)service.Events.CommsPanel:Fire(t)x.MouseButton1Click:Connect(function()if n and n.Parent then if Z then N=Z()end n:Destroy()end end)P.MouseButton1Click:Connect(function()if n and n.Parent then if l then N=l()end V:Destroy()end end)n.Parent=G task.spawn(function()local M=Instance.new("\083\111\117\110\100",service.LocalContainer())M.SoundId="\114\098\120\097\115\115\101\116\105\100\058\047\047\050\048\051\055\056\053\053\056\052"M.Volume=.2 M:Play()wait(.5)M:Destroy()end)if w then z.Visible=true repeat z.Text=w wait(1)w=w-1 until w<=0 or not n or not n.Parent if n and n.Parent then if n then n:Destroy()end if A then N=A()end end end return N end


return function(data, env)
	if env then
		setfenv(1, env)
	end
	
	local playergui = service.PlayerGui
	local localplayer = service.Players.LocalPlayer
	
	local frame = script.Parent.Parent
	local nFrame = frame:WaitForChild("Frame");
	local iconF = nFrame:WaitForChild("Icon");
	local main = nFrame:WaitForChild("Main");
	local close = nFrame:WaitForChild("Close");
	local title = nFrame:WaitForChild("Title");
	local timer = nFrame:WaitForChild("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 icon = data.Icon or client.MatIcons.Info
	
	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
	
	local holder = client.UI.Get("NotificationHolder",nil,true)
	
	if not holder then
		client.UI.Make("NotificationHolder")
		holder = client.UI.Get("NotificationHolder",nil,true)
		holder.Object.ScrollingFrame.Active = false
	end
	
	holder = holder.Object.ScrollingFrame
	title.Text = name
	main.Text = text
	iconF.Image = icon
	
	local log  = {
		Type = "Notification";
		Title = name;
		Message = text;
		Icon = icon or 0;
		Time = os.date("%X");
		Function = clickfunc;
	}
	
	table.insert(client.Variables.CommunicationsHistory, log) 
	service.Events.CommsPanel:Fire(log)
	
	main.MouseButton1Click:Connect(function()
		if frame and frame.Parent then
			if clickfunc then
				returner = clickfunc()
			end
			frame:Destroy()
		end
	end)
	
	close.MouseButton1Click:Connect(function()
		if frame and frame.Parent then
			if closefunc then
				returner = closefunc()
			end
			gTable:Destroy()
		end
	end)
	
	frame.Parent = holder
	
	task.spawn(function()
		local sound = Instance.new("Sound",service.LocalContainer())
		sound.SoundId = 'rbxassetid://'.."203785584"--client.NotificationSound
		sound.Volume = 0.2
		sound:Play()
		wait(0.5)
		sound:Destroy()
	end)
	
	if time then
		timer.Visible = true
		repeat
			timer.Text = time
			wait(1)
			time = time-1
		until time<=0 or not frame or not frame.Parent
		
		if frame and frame.Parent then
			if frame then frame:Destroy() end
			if ignorefunc then
				returner = ignorefunc()
			end
		end
	end
	
	return returner
end
