function init(m)local S=m.Button local P=m.ListFrame for S,P in next,P.ScrollFrame:GetChildren()do if not P:IsA("\071\117\105\066\117\116\116\111\110")then continue end m._Options[S]=P P.Activated:Connect(function()m:Set(P)end)end m._Maid:Mark(S.Activated:Connect(function()m:Show(not P.Visible)end))m._Maid:Mark(UIS.InputBegan:Connect(function(j)if VALID_PRESS[j.UserInputType]then local U=j.Position local l=Vector2.new(U.x,U.y)if P.Visible and not(isInFrame(P,l)or isInFrame(S,l))then m:Show(false)end end end))end function isInFrame(m,S)local P=m.AbsolutePosition local j=m.AbsoluteSize local U=S-P return U.x>=0 and(U.x<=j.x and(U.y>=0 and U.y<=j.y))end
-- Private Methods

function init(self)
	local button = self.Button
	local listFrame = self.ListFrame

	--local function contentSizeUpdate()
	--	local absSize = button.AbsoluteSize
	--	local ratio = absSize.y / absSize.x

	--	button.Arrow.Size = UDim2.new(ratio, 0, 1, 0)
	--	button.Option.Size = UDim2.new(1 - ratio, -12, 1, 0)
	--end

	--contentSizeUpdate()
	--self._Maid:Mark(button:GetPropertyChangedSignal("AbsoluteSize"):Connect(contentSizeUpdate))

	for i, optionButton in next, listFrame.ScrollFrame:GetChildren() do
		if not optionButton:IsA("GuiButton") then
			continue
		end

		self._Options[i] = optionButton
		optionButton.Activated:Connect(function()
			self:Set(optionButton)
		end)
	end

	self._Maid:Mark(button.Activated:Connect(function()
		self:Show(not listFrame.Visible)
	end))

	self._Maid:Mark(UIS.InputBegan:Connect(function(input)
		if VALID_PRESS[input.UserInputType] then
			local p = input.Position
			local p2 = Vector2.new(p.x, p.y)

			if listFrame.Visible and not (isInFrame(listFrame, p2) or isInFrame(button, p2)) then
				self:Show(false)
			end
		end
	end))
end

function isInFrame(frame, pos)
	local fPos = frame.AbsolutePosition
	local fSize = frame.AbsoluteSize
	local d = pos - fPos
	return (d.x >= 0 and d.x <= fSize.x and d.y >= 0 and d.y <= fSize.y)
end
