local R=script.Parent local p=require(R.copyDeep)local E=R.Parent local d=require(script.Parent.Parent.None)local t=require(E.t)local N=t.table local function H(...)local R={}for E=1,select("\035",...),1 do local t=select(E,...)if t~=nil then assert(N(t))for E,t in pairs(t)do if t==d then R[E]=nil elseif type(t)=="\116\097\098\108\101"then if R[E]==nil or type(R[E])~="\116\097\098\108\101"then R[E]=p(t)else R[E]=H(R[E],t)end else R[E]=t end end end end return R end return H
local Dictionary = script.Parent
local copyDeep = require(Dictionary.copyDeep)

local Llama = Dictionary.Parent
local None = require(script.Parent.Parent.None)
local t = require(Llama.t)

local validate = t.table

local function mergeDeep(...)
	local new = {}

	for dictionaryIndex = 1, select('#', ...) do
		local dictionary = select(dictionaryIndex, ...)

		if dictionary ~= nil then
			assert(validate(dictionary))

			for key, value in pairs(dictionary) do
				if value == None then
					new[key] = nil
				elseif type(value) == "table" then
					if new[key] == nil or type(new[key]) ~= "table" then
						new[key] = copyDeep(value)
					else
						new[key] = mergeDeep(new[key], value)
					end
				else
					new[key] = value
				end
			end
		end
	end

	return new
end

return mergeDeep