local function N(N)return N.ClassName end local function p(p,f)local z={}z.__index=z z.__tostring=N z.ClassName=p function z.new(...)local N=setmetatable({},z)if N.__init then N:__init(...)end return N end if f then z.Super=f setmetatable(z,f)for N,p in pairs(INHERITED)do if p then z[N]=f[N]end end end return z end
-- Functions

local function __tostring(self)
	return self.ClassName
end

local function createClass(className, superClass)
	local class = {}
	class.__index = class
	class.__tostring = __tostring
	class.ClassName = className

	function class.new(...)
		local self = setmetatable({}, class)

		if self.__init then
			self:__init(...)
		end

		return self
	end

	if superClass then
		class.Super = superClass
		setmetatable(class, superClass)

		for methodName, shouldInherit in pairs(INHERITED) do
			if shouldInherit then
				class[methodName] = superClass[methodName]
			end
		end
	end

	return class
end
