function AttributeValue.new(A,S,x)assert(typeof(A)=="\073\110\115\116\097\110\099\101","\066\097\100 \111\098\106\101\099\116")assert(type(S)=="\115\116\114\105\110\103","\066\097\100 \097\116\116\114\105\098\117\116\101\078\097\109\101")local v={_object=A;_attributeName=S,_defaultValue=x}if x~=nil and v._object:GetAttribute(v._attributeName)==nil then v._object:SetAttribute(rawget(v,"\095\097\116\116\114\105\098\117\116\101\078\097\109\101"),x)end return setmetatable(v,AttributeValue)end

function AttributeValue.new(object, attributeName, defaultValue)
	assert(typeof(object) == "Instance", "Bad object")
	assert(type(attributeName) == "string", "Bad attributeName")

	local self = {
		_object = object;
		_attributeName = attributeName;
		_defaultValue = defaultValue;
	}

	if defaultValue ~= nil and self._object:GetAttribute(self._attributeName) == nil then
		self._object:SetAttribute(rawget(self, "_attributeName"), defaultValue)
	end

	return setmetatable(self, AttributeValue)
end
