function Table.deepEquivalent(I,q)if I==q then return true end if type(I)~=type(q)then return false end if type(I)=="\116\097\098\108\101"then for I,H in pairs(I)do if not Table.deepEquivalent(H,q[I])then return false end end for q,H in pairs(q)do if not Table.deepEquivalent(H,I[q])then return false end end return true else return false end end
--[=[
	Deep equivalent comparison of a table assuming keys are indexable in the same way.

	@param target table -- Table to check
	@param source table -- Other table to check
	@return boolean
]=]
function Table.deepEquivalent(target, source)
	if target == source then
		return true
	end

	if type(target) ~= type(source) then
		return false
	end

	if type(target) == "table" then
		for key, value in pairs(target) do
			if not Table.deepEquivalent(value, source[key]) then
				return false
			end
		end

		for key, value in pairs(source) do
			if not Table.deepEquivalent(value, target[key]) then
				return false
			end
		end

		return true
	else
		-- target == source should do it.
		return false
	end
end
