From e1a8c41b557d2bef7beb98e39d19608e3f0c2e79 Mon Sep 17 00:00:00 2001 From: Bitl Date: Sun, 25 Jun 2017 15:15:40 -0700 Subject: [PATCH] 1.18. 4 --- CSMPFunctions.lua | 30 +- CoreGui2011.rbxm | 3601 ---------- CoreGui2012.rbxm | 3601 ---------- .../CharacterCustomization.Designer.cs | 191 +- .../CharacterCustomization.cs | 120 +- .../CharacterCustomization_ClothingMenu.cs | 120 - .../RBXLegacyLauncher/GlobalVars.cs | 10 +- ...enu.Designer.cs => InfoEditor.Designer.cs} | 133 +- .../RBXLegacyLauncher/InfoEditor.cs | 142 + ...tion_ClothingMenu.resx => InfoEditor.resx} | 0 .../RBXLegacyLauncher/LauncherFuncs.cs | 44 +- .../RBXLegacyLauncher/LoaderForm.cs | 46 +- .../RBXLegacyLauncher/MainForm.Designer.cs | 424 +- .../RBXLegacyLauncher/MainForm.cs | 120 +- .../RBXLegacyLauncher/MainForm.resx | 3 +- .../RBXLegacyLauncher.csproj | 26 +- .../RBXLegacyLauncher/SDKForm.Designer.cs | 80 + .../RBXLegacyLauncher/SDKForm.cs | 44 + .../RBXLegacyLauncher/SDKForm.resx | 6293 +++++++++++++++++ sudppipe_modified/acpdump2.h | 363 + sudppipe_modified/ip2.h | 138 + sudppipe_modified/show_dump.h | 68 + sudppipe_modified/sudppipe.c | 741 ++ sudppipe_modified/winerr.h | 71 + 24 files changed, 8700 insertions(+), 7709 deletions(-) delete mode 100644 CoreGui2011.rbxm delete mode 100644 CoreGui2012.rbxm delete mode 100644 RBXLegacyLauncher/RBXLegacyLauncher/CharacterCustomization_ClothingMenu.cs rename RBXLegacyLauncher/RBXLegacyLauncher/{CharacterCustomization_ClothingMenu.Designer.cs => InfoEditor.Designer.cs} (51%) create mode 100644 RBXLegacyLauncher/RBXLegacyLauncher/InfoEditor.cs rename RBXLegacyLauncher/RBXLegacyLauncher/{CharacterCustomization_ClothingMenu.resx => InfoEditor.resx} (100%) create mode 100644 RBXLegacyLauncher/RBXLegacyLauncher/SDKForm.Designer.cs create mode 100644 RBXLegacyLauncher/RBXLegacyLauncher/SDKForm.cs create mode 100644 RBXLegacyLauncher/RBXLegacyLauncher/SDKForm.resx create mode 100644 sudppipe_modified/acpdump2.h create mode 100644 sudppipe_modified/ip2.h create mode 100644 sudppipe_modified/show_dump.h create mode 100644 sudppipe_modified/sudppipe.c create mode 100644 sudppipe_modified/winerr.h diff --git a/CSMPFunctions.lua b/CSMPFunctions.lua index 9b79d35..d658e3d 100644 --- a/CSMPFunctions.lua +++ b/CSMPFunctions.lua @@ -412,7 +412,7 @@ function CSServer(Port,PlayerLimit) end end -function CSConnect(UserID,ServerIP,ServerPort,PlayerName,Hat1ID,Hat2ID,Hat3ID,HeadColorID,TorsoColorID,LeftArmColorID,RightArmColorID,LeftLegColorID,RightLegColorID,TShirtID,ShirtID,PantsID,FaceID,Ticket) +function CSConnect(UserID,ServerIP,ServerPort,PlayerName,Hat1ID,Hat2ID,Hat3ID,HeadColorID,TorsoColorID,LeftArmColorID,RightArmColorID,LeftLegColorID,RightLegColorID,TShirtID,ShirtID,PantsID,FaceID,IconType,Ticket) if (rbxlegacyversion == "delta" or rbxlegacyversion == "delta-gamma" or rbxlegacyversion == "omega" or rbxlegacyversion == "delta-pre-gamma" or rbxlegacyversion == "delta-omega" or rbxlegacyversion == "delta-beta") then pcall(function() game:SetPlaceID(-1, false) end); pcall(function() game:GetService("Players"):SetChatStyle(Enum.ChatStyle.ClassicAndBubble) end); @@ -496,7 +496,17 @@ function CSConnect(UserID,ServerIP,ServerPort,PlayerName,Hat1ID,Hat2ID,Hat3ID,He end end pcall(function() Player:SetUnder13(false) end); - pcall(function() Player:SetMembershipType(Enum.MembershipType.BuildersClub) end); + if (rbxlegacyversion == "delta" or rbxlegacyversion == "omega" or rbxlegacyversion == "delta-omega") then + if (IconType == "BC") then + Player:SetMembershipType(Enum.MembershipType.BuildersClub); + elseif (IconType == "TBC") then + Player:SetMembershipType(Enum.MembershipType.TurboBuildersClub); + elseif (IconType == "OBC") then + Player:SetMembershipType(Enum.MembershipType.OutrageousBuildersClub); + elseif (IconType == "NBC") then + Player:SetMembershipType(Enum.MembershipType.None); + end + end pcall(function() Player:SetAccountAge(365) end); Player:SetSuperSafeChat(false); Player.CharacterAppearance=0; @@ -523,7 +533,6 @@ function CSConnect(UserID,ServerIP,ServerPort,PlayerName,Hat1ID,Hat2ID,Hat3ID,He player = game:GetService("Players"):CreateLocalPlayer(UserID) player:SetSuperSafeChat(false) pcall(function() player:SetUnder13(false) end); - pcall(function() player:SetMembershipType(Enum.MembershipType.BuildersClub) end); pcall(function() player:SetAccountAge(365) end); player.CharacterAppearance=0; pcall(function() player.Name=PlayerName or ""; end); @@ -602,7 +611,7 @@ function CSConnect(UserID,ServerIP,ServerPort,PlayerName,Hat1ID,Hat2ID,Hat3ID,He end end -function CSSolo(UserID,PlayerName,Hat1ID,Hat2ID,Hat3ID,HeadColorID,TorsoColorID,LeftArmColorID,RightArmColorID,LeftLegColorID,RightLegColorID,TShirtID,ShirtID,PantsID,FaceID) +function CSSolo(UserID,PlayerName,Hat1ID,Hat2ID,Hat3ID,HeadColorID,TorsoColorID,LeftArmColorID,RightArmColorID,LeftLegColorID,RightLegColorID,TShirtID,ShirtID,PantsID,FaceID,IconType) if (rbxlegacyversion == "omega" or rbxlegacyversion == "delta-omega") then game:GetService("RunService"):Run(); else @@ -630,6 +639,19 @@ function CSSolo(UserID,PlayerName,Hat1ID,Hat2ID,Hat3ID,HeadColorID,TorsoColorID, local plr = game.Players:CreateLocalPlayer(UserID); plr.Name = PlayerName; plr:LoadCharacter(); + pcall(function() plr:SetUnder13(false) end); + if (rbxlegacyversion == "delta" or rbxlegacyversion == "omega" or rbxlegacyversion == "delta-omega") then + if (IconType == "BC") then + plr:SetMembershipType(Enum.MembershipType.BuildersClub); + elseif (IconType == "TBC") then + plr:SetMembershipType(Enum.MembershipType.TurboBuildersClub); + elseif (IconType == "OBC") then + plr:SetMembershipType(Enum.MembershipType.OutrageousBuildersClub); + elseif (IconType == "NBC") then + plr:SetMembershipType(Enum.MembershipType.None); + end + end + pcall(function() plr:SetAccountAge(365) end); plr.CharacterAppearance=0; InitalizeClientAppearance(plr,Hat1ID,Hat2ID,Hat3ID,HeadColorID,TorsoColorID,LeftArmColorID,RightArmColorID,LeftLegColorID,RightLegColorID,TShirtID,ShirtID,PantsID,FaceID); LoadCharacterNew(newWaitForChild(plr,"Appearance"),plr.Character); diff --git a/CoreGui2011.rbxm b/CoreGui2011.rbxm deleted file mode 100644 index cbd6915..0000000 --- a/CoreGui2011.rbxm +++ /dev/null @@ -1,3601 +0,0 @@ - - null - nil - - - false - - GUI_Copy - script.PlayerList:clone().Parent = game.StarterGui; -script:remove(); - true - - - - false - - PlayerList - local t = {} - -local function ScopedConnect(parentInstance, instance, event, signalFunc, syncFunc, removeFunc) - local eventConnection = nil - - --Connection on parentInstance is scoped by parentInstance (when destroyed, it goes away) - local tryConnect = function() - if game:IsAncestorOf(parentInstance) then - --Entering the world, make sure we are connected/synced - if not eventConnection then - eventConnection = instance[event]:connect(signalFunc) - if syncFunc then syncFunc() end - end - else - --Probably leaving the world, so disconnect for now - if eventConnection then - eventConnection:disconnect() - if removeFunc then removeFunc() end - end - end - end - - --Hook it up to ancestryChanged signal - local connection = parentInstance.AncestryChanged:connect(tryConnect) - - --Now connect us if we're already in the world - tryConnect() - - return connection -end - -local function CreateButtons(frame, buttons, yPos, ySize) - local buttonNum = 1 - local buttonObjs = {} - for i, obj in ipairs(buttons) do - local button = Instance.new("TextButton") - button.Name = "Button" .. buttonNum - button.Font = Enum.Font.Arial - button.FontSize = Enum.FontSize.Size18 - button.AutoButtonColor = true - button.Style = Enum.ButtonStyle.RobloxButtonDefault - button.Text = obj.Text - button.TextColor3 = Color3.new(1,1,1) - button.MouseButton1Click:connect(obj.Function) - button.Parent = frame - buttonObjs[buttonNum] = button - - buttonNum = buttonNum + 1 - end - local numButtons = buttonNum-1 - - if numButtons == 1 then - frame.Button1.Position = UDim2.new(0.35, 0, yPos.Scale, yPos.Offset) - frame.Button1.Size = UDim2.new(.4,0,ySize.Scale, ySize.Offset) - elseif numButtons == 2 then - frame.Button1.Position = UDim2.new(0.1, 0, yPos.Scale, yPos.Offset) - frame.Button1.Size = UDim2.new(.8/3,0, ySize.Scale, ySize.Offset) - - frame.Button2.Position = UDim2.new(0.55, 0, yPos.Scale, yPos.Offset) - frame.Button2.Size = UDim2.new(.35,0, ySize.Scale, ySize.Offset) - elseif numButtons >= 3 then - local spacing = .1 / numButtons - local buttonSize = .9 / numButtons - - buttonNum = 1 - while buttonNum <= numButtons do - buttonObjs[buttonNum].Position = UDim2.new(spacing*buttonNum + (buttonNum-1) * buttonSize, 0, yPos.Scale, yPos.Offset) - buttonObjs[buttonNum].Size = UDim2.new(buttonSize, 0, ySize.Scale, ySize.Offset) - buttonNum = buttonNum + 1 - end - end -end - -local function setSliderPos(newAbsPosX,slider,sliderPosition,bar,steps) - - local newStep = steps - 1 --otherwise we really get one more step than we want - - local relativePosX = math.min(1, math.max(0, (newAbsPosX - bar.AbsolutePosition.X) / bar.AbsoluteSize.X ) ) - local wholeNum, remainder = math.modf(relativePosX * newStep) - if remainder > 0.5 then - wholeNum = wholeNum + 1 - end - relativePosX = wholeNum/newStep - - local result = math.ceil(relativePosX * newStep) - if sliderPosition.Value ~= (result + 1) then --onky update if we moved a step - sliderPosition.Value = result + 1 - - if relativePosX == 1 then - slider.Position = UDim2.new(1,-slider.AbsoluteSize.X,slider.Position.Y.Scale,slider.Position.Y.Offset) - else - slider.Position = UDim2.new(relativePosX,0,slider.Position.Y.Scale,slider.Position.Y.Offset) - end - end - -end - -local function cancelSlide(areaSoak) - areaSoak.Visible = false - if areaSoakMouseMoveCon then areaSoakMouseMoveCon:disconnect() end -end - -t.CreateStyledMessageDialog = function(title, message, style, buttons) - local frame = Instance.new("Frame") - frame.Size = UDim2.new(0.5, 0, 0, 165) - frame.Position = UDim2.new(0.25, 0, 0.5, -72.5) - frame.Name = "MessageDialog" - frame.Active = true - frame.Style = Enum.FrameStyle.RobloxRound - - local styleImage = Instance.new("ImageLabel") - styleImage.Name = "StyleImage" - styleImage.BackgroundTransparency = 1 - styleImage.Position = UDim2.new(0,5,0,15) - if style == "error" or style == "Error" then - styleImage.Size = UDim2.new(0, 71, 0, 71) - styleImage.Image = "http://www.roblox.com/asset?id=42565285" - elseif style == "notify" or style == "Notify" then - styleImage.Size = UDim2.new(0, 71, 0, 71) - styleImage.Image = "http://www.roblox.com/asset?id=42604978" - elseif style == "confirm" or style == "Confirm" then - styleImage.Size = UDim2.new(0, 74, 0, 76) - styleImage.Image = "http://www.roblox.com/asset?id=42557901" - else - return t.CreateMessageDialog(title,message,buttons) - end - styleImage.Parent = frame - - local titleLabel = Instance.new("TextLabel") - titleLabel.Name = "Title" - titleLabel.Text = title - titleLabel.BackgroundTransparency = 1 - titleLabel.TextColor3 = Color3.new(221/255,221/255,221/255) - titleLabel.Position = UDim2.new(0, 80, 0, 0) - titleLabel.Size = UDim2.new(1, -80, 0, 40) - titleLabel.Font = Enum.Font.ArialBold - titleLabel.FontSize = Enum.FontSize.Size36 - titleLabel.TextXAlignment = Enum.TextXAlignment.Center - titleLabel.TextYAlignment = Enum.TextYAlignment.Center - titleLabel.Parent = frame - - local messageLabel = Instance.new("TextLabel") - messageLabel.Name = "Message" - messageLabel.Text = message - messageLabel.TextColor3 = Color3.new(221/255,221/255,221/255) - messageLabel.Position = UDim2.new(0.025, 80, 0, 45) - messageLabel.Size = UDim2.new(0.95, -80, 0, 55) - messageLabel.BackgroundTransparency = 1 - messageLabel.Font = Enum.Font.Arial - messageLabel.FontSize = Enum.FontSize.Size18 - messageLabel.TextWrap = true - messageLabel.TextXAlignment = Enum.TextXAlignment.Left - messageLabel.TextYAlignment = Enum.TextYAlignment.Top - messageLabel.Parent = frame - - CreateButtons(frame, buttons, UDim.new(0, 105), UDim.new(0, 40) ) - - return frame -end - -t.CreateMessageDialog = function(title, message, buttons) - local frame = Instance.new("Frame") - frame.Size = UDim2.new(0.5, 0, 0.5, 0) - frame.Position = UDim2.new(0.25, 0, 0.25, 0) - frame.Name = "MessageDialog" - frame.Active = true - frame.Style = Enum.FrameStyle.RobloxRound - - local titleLabel = Instance.new("TextLabel") - titleLabel.Name = "Title" - titleLabel.Text = title - titleLabel.BackgroundTransparency = 1 - titleLabel.TextColor3 = Color3.new(221/255,221/255,221/255) - titleLabel.Position = UDim2.new(0, 0, 0, 0) - titleLabel.Size = UDim2.new(1, 0, 0.15, 0) - titleLabel.Font = Enum.Font.ArialBold - titleLabel.FontSize = Enum.FontSize.Size36 - titleLabel.TextXAlignment = Enum.TextXAlignment.Center - titleLabel.TextYAlignment = Enum.TextYAlignment.Center - titleLabel.Parent = frame - - local messageLabel = Instance.new("TextLabel") - messageLabel.Name = "Message" - messageLabel.Text = message - messageLabel.TextColor3 = Color3.new(221/255,221/255,221/255) - messageLabel.Position = UDim2.new(0.025, 0, 0.175, 0) - messageLabel.Size = UDim2.new(0.95, 0, .55, 0) - messageLabel.BackgroundTransparency = 1 - messageLabel.Font = Enum.Font.Arial - messageLabel.FontSize = Enum.FontSize.Size18 - messageLabel.TextWrap = true - messageLabel.TextXAlignment = Enum.TextXAlignment.Left - messageLabel.TextYAlignment = Enum.TextYAlignment.Top - messageLabel.Parent = frame - - CreateButtons(frame, buttons, UDim.new(0.8,0), UDim.new(0.15, 0)) - - return frame -end - -t.CreateDropDownMenu = function(items, onSelect, forRoblox) - local width = UDim.new(0, 100) - local height = UDim.new(0, 32) - - local xPos = 0.055 - local frame = Instance.new("Frame") - frame.Name = "DropDownMenu" - frame.BackgroundTransparency = 1 - frame.Size = UDim2.new(width, height) - - local dropDownMenu = Instance.new("TextButton") - dropDownMenu.Name = "DropDownMenuButton" - dropDownMenu.TextWrap = true - dropDownMenu.TextColor3 = Color3.new(1,1,1) - dropDownMenu.Text = "Choose One" - dropDownMenu.Font = Enum.Font.ArialBold - dropDownMenu.FontSize = Enum.FontSize.Size18 - dropDownMenu.TextXAlignment = Enum.TextXAlignment.Left - dropDownMenu.TextYAlignment = Enum.TextYAlignment.Center - dropDownMenu.BackgroundTransparency = 1 - dropDownMenu.AutoButtonColor = true - dropDownMenu.Style = Enum.ButtonStyle.RobloxButton - dropDownMenu.Size = UDim2.new(1,0,1,0) - dropDownMenu.Parent = frame - dropDownMenu.ZIndex = 2 - - local dropDownIcon = Instance.new("ImageLabel") - dropDownIcon.Name = "Icon" - dropDownIcon.Active = false - dropDownIcon.Image = "http://www.roblox.com/asset/?id=45732894" - dropDownIcon.BackgroundTransparency = 1 - dropDownIcon.Size = UDim2.new(0,11,0,6) - dropDownIcon.Position = UDim2.new(1,-11,0.5, -2) - dropDownIcon.Parent = dropDownMenu - dropDownIcon.ZIndex = 2 - - local itemCount = #items - local dropDownItemCount = #items - local useScrollButtons = false - if dropDownItemCount > 6 then - useScrollButtons = true - dropDownItemCount = 6 - end - - local droppedDownMenu = Instance.new("TextButton") - droppedDownMenu.Name = "List" - droppedDownMenu.Text = "" - droppedDownMenu.BackgroundTransparency = 1 - --droppedDownMenu.AutoButtonColor = true - droppedDownMenu.Style = Enum.ButtonStyle.RobloxButton - droppedDownMenu.Visible = false - droppedDownMenu.Active = true --Blocks clicks - droppedDownMenu.Position = UDim2.new(0,0,0,0) - droppedDownMenu.Size = UDim2.new(1,0, (1 + dropDownItemCount)*.8, 0) - droppedDownMenu.Parent = frame - droppedDownMenu.ZIndex = 2 - - local choiceButton = Instance.new("TextButton") - choiceButton.Name = "ChoiceButton" - choiceButton.BackgroundTransparency = 1 - choiceButton.BorderSizePixel = 0 - choiceButton.Text = "ReplaceMe" - choiceButton.TextColor3 = Color3.new(1,1,1) - choiceButton.TextXAlignment = Enum.TextXAlignment.Left - choiceButton.TextYAlignment = Enum.TextYAlignment.Center - choiceButton.BackgroundColor3 = Color3.new(1, 1, 1) - choiceButton.Font = Enum.Font.Arial - choiceButton.FontSize = Enum.FontSize.Size18 - if useScrollButtons then - choiceButton.Size = UDim2.new(1,-13, .8/((dropDownItemCount + 1)*.8),0) - else - choiceButton.Size = UDim2.new(1, 0, .8/((dropDownItemCount + 1)*.8),0) - end - choiceButton.TextWrap = true - choiceButton.ZIndex = 2 - - local dropDownSelected = false - - local scrollUpButton - local scrollDownButton - local scrollMouseCount = 0 - - local setZIndex = function(baseZIndex) - droppedDownMenu.ZIndex = baseZIndex +1 - if scrollUpButton then - scrollUpButton.ZIndex = baseZIndex + 3 - end - if scrollDownButton then - scrollDownButton.ZIndex = baseZIndex + 3 - end - - local children = droppedDownMenu:GetChildren() - if children then - for i, child in ipairs(children) do - if child.Name == "ChoiceButton" then - child.ZIndex = baseZIndex + 2 - elseif child.Name == "ClickCaptureButton" then - child.ZIndex = baseZIndex - end - end - end - end - - local scrollBarPosition = 1 - local updateScroll = function() - if scrollUpButton then - scrollUpButton.Active = scrollBarPosition > 1 - end - if scrollDownButton then - scrollDownButton.Active = scrollBarPosition + dropDownItemCount <= itemCount - end - - local children = droppedDownMenu:GetChildren() - if not children then return end - - local childNum = 1 - for i, obj in ipairs(children) do - if obj.Name == "ChoiceButton" then - if childNum < scrollBarPosition or childNum >= scrollBarPosition + dropDownItemCount then - obj.Visible = false - else - obj.Position = UDim2.new(0,0,((childNum-scrollBarPosition+1)*.8)/((dropDownItemCount+1)*.8),0) - obj.Visible = true - end - obj.TextColor3 = Color3.new(1,1,1) - obj.BackgroundTransparency = 1 - - childNum = childNum + 1 - end - end - end - local toggleVisibility = function() - dropDownSelected = not dropDownSelected - - dropDownMenu.Visible = not dropDownSelected - droppedDownMenu.Visible = dropDownSelected - if dropDownSelected then - setZIndex(4) - else - setZIndex(2) - end - if useScrollButtons then - updateScroll() - end - end - droppedDownMenu.MouseButton1Click:connect(toggleVisibility) - - local updateSelection = function(text) - local foundItem = false - local children = droppedDownMenu:GetChildren() - local childNum = 1 - if children then - for i, obj in ipairs(children) do - if obj.Name == "ChoiceButton" then - if obj.Text == text then - obj.Font = Enum.Font.ArialBold - foundItem = true - scrollBarPosition = childNum - else - obj.Font = Enum.Font.Arial - end - childNum = childNum + 1 - end - end - end - if not text then - dropDownMenu.Text = "Choose One" - scrollBarPosition = 1 - else - if not foundItem then - error("Invalid Selection Update -- " .. text) - end - - if scrollBarPosition + dropDownItemCount > itemCount + 1 then - scrollBarPosition = itemCount - dropDownItemCount + 1 - end - - dropDownMenu.Text = text - end - end - - local function scrollDown() - if scrollBarPosition + dropDownItemCount <= itemCount then - scrollBarPosition = scrollBarPosition + 1 - updateScroll() - return true - end - return false - end - local function scrollUp() - if scrollBarPosition > 1 then - scrollBarPosition = scrollBarPosition - 1 - updateScroll() - return true - end - return false - end - - if useScrollButtons then - --Make some scroll buttons - scrollUpButton = Instance.new("ImageButton") - scrollUpButton.Name = "ScrollUpButton" - scrollUpButton.BackgroundTransparency = 1 - scrollUpButton.Image = "rbxasset://textures/ui/scrollbuttonUp.png" - scrollUpButton.Size = UDim2.new(0,17,0,17) - scrollUpButton.Position = UDim2.new(1,-11,(1*.8)/((dropDownItemCount+1)*.8),0) - scrollUpButton.MouseButton1Click:connect( - function() - scrollMouseCount = scrollMouseCount + 1 - end) - scrollUpButton.MouseLeave:connect( - function() - scrollMouseCount = scrollMouseCount + 1 - end) - scrollUpButton.MouseButton1Down:connect( - function() - scrollMouseCount = scrollMouseCount + 1 - - scrollUp() - local val = scrollMouseCount - wait(0.5) - while val == scrollMouseCount do - if scrollUp() == false then - break - end - wait(0.1) - end - end) - - scrollUpButton.Parent = droppedDownMenu - - scrollDownButton = Instance.new("ImageButton") - scrollDownButton.Name = "ScrollDownButton" - scrollDownButton.BackgroundTransparency = 1 - scrollDownButton.Image = "rbxasset://textures/ui/scrollbuttonDown.png" - scrollDownButton.Size = UDim2.new(0,17,0,17) - scrollDownButton.Position = UDim2.new(1,-11,1,-11) - scrollDownButton.Parent = droppedDownMenu - scrollDownButton.MouseButton1Click:connect( - function() - scrollMouseCount = scrollMouseCount + 1 - end) - scrollDownButton.MouseLeave:connect( - function() - scrollMouseCount = scrollMouseCount + 1 - end) - scrollDownButton.MouseButton1Down:connect( - function() - scrollMouseCount = scrollMouseCount + 1 - - scrollDown() - local val = scrollMouseCount - wait(0.5) - while val == scrollMouseCount do - if scrollDown() == false then - break - end - wait(0.1) - end - end) - - local scrollbar = Instance.new("ImageLabel") - scrollbar.Name = "ScrollBar" - scrollbar.Image = "rbxasset://textures/ui/scrollbar.png" - scrollbar.BackgroundTransparency = 1 - scrollbar.Size = UDim2.new(0, 18, (dropDownItemCount*.8)/((dropDownItemCount+1)*.8), -(17) - 11 - 4) - scrollbar.Position = UDim2.new(1,-11,(1*.8)/((dropDownItemCount+1)*.8),17+2) - scrollbar.Parent = droppedDownMenu - end - - for i,item in ipairs(items) do - -- needed to maintain local scope for items in event listeners below - local button = choiceButton:clone() - if forRoblox then - button.RobloxLocked = true - end - button.Text = item - button.Parent = droppedDownMenu - button.MouseButton1Click:connect(function() - --Remove Highlight - button.TextColor3 = Color3.new(1,1,1) - button.BackgroundTransparency = 1 - - updateSelection(item) - onSelect(item) - - toggleVisibility() - end) - button.MouseEnter:connect(function() - --Add Highlight - button.TextColor3 = Color3.new(0,0,0) - button.BackgroundTransparency = 0 - end) - - button.MouseLeave:connect(function() - --Remove Highlight - button.TextColor3 = Color3.new(1,1,1) - button.BackgroundTransparency = 1 - end) - end - - --This does the initial layout of the buttons - updateScroll() - - local bigFakeButton = Instance.new("TextButton") - bigFakeButton.BackgroundTransparency = 1 - bigFakeButton.Name = "ClickCaptureButton" - bigFakeButton.Size = UDim2.new(0, 4000, 0, 3000) - bigFakeButton.Position = UDim2.new(0, -2000, 0, -1500) - bigFakeButton.ZIndex = 1 - bigFakeButton.Text = "" - bigFakeButton.Parent = droppedDownMenu - bigFakeButton.MouseButton1Click:connect(toggleVisibility) - - dropDownMenu.MouseButton1Click:connect(toggleVisibility) - return frame, updateSelection -end - -t.CreatePropertyDropDownMenu = function(instance, property, enum) - - local items = enum:GetEnumItems() - local names = {} - local nameToItem = {} - for i,obj in ipairs(items) do - names[i] = obj.Name - nameToItem[obj.Name] = obj - end - - local frame - local updateSelection - frame, updateSelection = t.CreateDropDownMenu(names, function(text) instance[property] = nameToItem[text] end) - - ScopedConnect(frame, instance, "Changed", - function(prop) - if prop == property then - updateSelection(instance[property].Name) - end - end, - function() - updateSelection(instance[property].Name) - end) - - return frame -end - -t.GetFontHeight = function(font, fontSize) - if font == nil or fontSize == nil then - error("Font and FontSize must be non-nil") - end - - if font == Enum.Font.Legacy then - if fontSize == Enum.FontSize.Size8 then - return 12 - elseif fontSize == Enum.FontSize.Size9 then - return 14 - elseif fontSize == Enum.FontSize.Size10 then - return 15 - elseif fontSize == Enum.FontSize.Size11 then - return 17 - elseif fontSize == Enum.FontSize.Size12 then - return 18 - elseif fontSize == Enum.FontSize.Size14 then - return 21 - elseif fontSize == Enum.FontSize.Size18 then - return 27 - elseif fontSize == Enum.FontSize.Size24 then - return 36 - elseif fontSize == Enum.FontSize.Size36 then - return 54 - elseif fontSize == Enum.FontSize.Size48 then - return 72 - else - error("Unknown FontSize") - end - elseif font == Enum.Font.Arial or font == Enum.Font.ArialBold then - if fontSize == Enum.FontSize.Size8 then - return 8 - elseif fontSize == Enum.FontSize.Size9 then - return 9 - elseif fontSize == Enum.FontSize.Size10 then - return 10 - elseif fontSize == Enum.FontSize.Size11 then - return 11 - elseif fontSize == Enum.FontSize.Size12 then - return 12 - elseif fontSize == Enum.FontSize.Size14 then - return 14 - elseif fontSize == Enum.FontSize.Size18 then - return 18 - elseif fontSize == Enum.FontSize.Size24 then - return 24 - elseif fontSize == Enum.FontSize.Size36 then - return 36 - elseif fontSize == Enum.FontSize.Size48 then - return 48 - else - error("Unknown FontSize") - end - else - error("Unknown Font " .. font) - end -end - -local function layoutGuiObjectsHelper(frame, guiObjects, settingsTable) - local totalPixels = frame.AbsoluteSize.Y - local pixelsRemaining = frame.AbsoluteSize.Y - for i, child in ipairs(guiObjects) do - if child:IsA("TextLabel") or child:IsA("TextButton") then - local isLabel = child:IsA("TextLabel") - if isLabel then - pixelsRemaining = pixelsRemaining - settingsTable["TextLabelPositionPadY"] - else - pixelsRemaining = pixelsRemaining - settingsTable["TextButtonPositionPadY"] - end - child.Position = UDim2.new(child.Position.X.Scale, child.Position.X.Offset, 0, totalPixels - pixelsRemaining) - child.Size = UDim2.new(child.Size.X.Scale, child.Size.X.Offset, 0, pixelsRemaining) - - if child.TextFits and child.TextBounds.Y < pixelsRemaining then - child.Visible = true - if isLabel then - child.Size = UDim2.new(child.Size.X.Scale, child.Size.X.Offset, 0, child.TextBounds.Y + settingsTable["TextLabelSizePadY"]) - else - child.Size = UDim2.new(child.Size.X.Scale, child.Size.X.Offset, 0, child.TextBounds.Y + settingsTable["TextButtonSizePadY"]) - end - - while not child.TextFits do - child.Size = UDim2.new(child.Size.X.Scale, child.Size.X.Offset, 0, child.AbsoluteSize.Y + 1) - end - pixelsRemaining = pixelsRemaining - child.AbsoluteSize.Y - - if isLabel then - pixelsRemaining = pixelsRemaining - settingsTable["TextLabelPositionPadY"] - else - pixelsRemaining = pixelsRemaining - settingsTable["TextButtonPositionPadY"] - end - else - child.Visible = false - pixelsRemaining = -1 - end - - else - --GuiObject - child.Position = UDim2.new(child.Position.X.Scale, child.Position.X.Offset, 0, totalPixels - pixelsRemaining) - pixelsRemaining = pixelsRemaining - child.AbsoluteSize.Y - child.Visible = (pixelsRemaining >= 0) - end - end -end - -t.LayoutGuiObjects = function(frame, guiObjects, settingsTable) - if not frame:IsA("GuiObject") then - error("Frame must be a GuiObject") - end - for i, child in ipairs(guiObjects) do - if not child:IsA("GuiObject") then - error("All elements that are layed out must be of type GuiObject") - end - end - - if not settingsTable then - settingsTable = {} - end - - if not settingsTable["TextLabelSizePadY"] then - settingsTable["TextLabelSizePadY"] = 0 - end - if not settingsTable["TextLabelPositionPadY"] then - settingsTable["TextLabelPositionPadY"] = 0 - end - if not settingsTable["TextButtonSizePadY"] then - settingsTable["TextButtonSizePadY"] = 12 - end - if not settingsTable["TextButtonPositionPadY"] then - settingsTable["TextButtonPositionPadY"] = 2 - end - - --Wrapper frame takes care of styled objects - local wrapperFrame = Instance.new("Frame") - wrapperFrame.Name = "WrapperFrame" - wrapperFrame.BackgroundTransparency = 1 - wrapperFrame.Size = UDim2.new(1,0,1,0) - wrapperFrame.Parent = frame - - for i, child in ipairs(guiObjects) do - child.Parent = wrapperFrame - end - - local recalculate = function() - wait() - layoutGuiObjectsHelper(wrapperFrame, guiObjects, settingsTable) - end - - frame.Changed:connect( - function(prop) - if prop == "AbsoluteSize" then - --Wait a heartbeat for it to sync in - recalculate() - end - end) - frame.AncestryChanged:connect(recalculate) - - layoutGuiObjectsHelper(wrapperFrame, guiObjects, settingsTable) -end - - -t.CreateSlider = function(steps,width,position) - local sliderGui = Instance.new("Frame") - sliderGui.Size = UDim2.new(1,0,1,0) - sliderGui.BackgroundTransparency = 1 - sliderGui.Name = "SliderGui" - - local areaSoak = Instance.new("TextButton") - areaSoak.Name = "AreaSoak" - areaSoak.Text = "" - areaSoak.BackgroundTransparency = 1 - areaSoak.Active = false - areaSoak.Size = UDim2.new(1,0,1,0) - areaSoak.Visible = false - areaSoak.ZIndex = 4 - areaSoak.Parent = sliderGui - - local sliderPosition = Instance.new("IntValue") - sliderPosition.Name = "SliderPosition" - sliderPosition.Value = 0 - sliderPosition.Parent = sliderGui - - local id = math.random(1,100) - - local bar = Instance.new("Frame") - bar.Name = "Bar" - bar.BackgroundColor3 = Color3.new(0,0,0) - if type(width) == "number" then - bar.Size = UDim2.new(0,width,0,5) - else - bar.Size = UDim2.new(0,200,0,5) - end - bar.BorderColor3 = Color3.new(95/255,95/255,95/255) - bar.ZIndex = 2 - bar.Parent = sliderGui - - if position["X"] and position["X"]["Scale"] and position["X"]["Offset"] and position["Y"] and position["Y"]["Scale"] and position["Y"]["Offset"] then - bar.Position = position - end - - local slider = Instance.new("ImageButton") - slider.Name = "Slider" - slider.BackgroundTransparency = 1 - slider.Image = "rbxasset://textures/ui/Slider.png" - slider.Position = UDim2.new(0,0,0.5,-10) - slider.Size = UDim2.new(0,20,0,20) - slider.ZIndex = 3 - slider.Parent = bar - - local areaSoakMouseMoveCon = nil - - areaSoak.MouseLeave:connect(function() - if areaSoak.Visible then - cancelSlide(areaSoak) - end - end) - areaSoak.MouseButton1Up:connect(function() - if areaSoak.Visible then - cancelSlide(areaSoak) - end - end) - - slider.MouseButton1Down:connect(function() - areaSoak.Visible = true - if areaSoakMouseMoveCon then areaSoakMouseMoveCon:disconnect() end - areaSoakMouseMoveCon = areaSoak.MouseMoved:connect(function(x,y) - setSliderPos(x,slider,sliderPosition,bar,steps) - end) - end) - - slider.MouseButton1Up:connect(function() cancelSlide(areaSoak) end) - - sliderPosition.Changed:connect(function(prop) - local relativePosX = (sliderPosition.Value - 1) / steps - slider.Position = UDim2.new(relativePosX,0,slider.Position.Y.Scale,slider.Position.Y.Offset) - end) - - return sliderGui, sliderPosition - -end - - -t.CreateScrollingFrame = function(orderList,scrollStyle) - local frame = Instance.new("Frame") - frame.Name = "ScrollingFrame" - frame.BackgroundTransparency = 1 - frame.Size = UDim2.new(1,0,1,0) - - local scrollUpButton = Instance.new("ImageButton") - scrollUpButton.Name = "ScrollUpButton" - scrollUpButton.BackgroundTransparency = 1 - scrollUpButton.Image = "rbxasset://textures/ui/scrollbuttonUp.png" - scrollUpButton.Size = UDim2.new(0,17,0,17) - - - local scrollDownButton = Instance.new("ImageButton") - scrollDownButton.Name = "ScrollDownButton" - scrollDownButton.BackgroundTransparency = 1 - scrollDownButton.Image = "rbxasset://textures/ui/scrollbuttonDown.png" - scrollDownButton.Size = UDim2.new(0,17,0,17) - - local style = "simple" - if scrollStyle and tostring(scrollStyle) then - style = scrollStyle - end - - local scrollPosition = 1 - local rowSize = 1 - - local layoutGridScrollBar = function() - local guiObjects = {} - if orderList then - for i, child in ipairs(orderList) do - if child.Parent == frame then - table.insert(guiObjects, child) - end - end - else - local children = frame:GetChildren() - if children then - for i, child in ipairs(children) do - if child:IsA("GuiObject") then - table.insert(guiObjects, child) - end - end - end - end - if #guiObjects == 0 then - scrollUpButton.Active = false - scrollDownButton.Active = false - scrollPosition = 1 - return - end - - if scrollPosition > #guiObjects then - scrollPosition = #guiObjects - end - - local totalPixelsY = frame.AbsoluteSize.Y - local pixelsRemainingY = frame.AbsoluteSize.Y - - local totalPixelsX = frame.AbsoluteSize.X - - local xCounter = 0 - local rowSizeCounter = 0 - local setRowSize = true - - local pixelsBelowScrollbar = 0 - local pos = #guiObjects - while pixelsBelowScrollbar < totalPixelsY and pos >= 1 do - if pos >= scrollPosition then - pixelsBelowScrollbar = pixelsBelowScrollbar + guiObjects[pos].AbsoluteSize.Y - else - xCounter = xCounter + guiObjects[pos].AbsoluteSize.X - rowSizeCounter = rowSizeCounter + 1 - if xCounter >= totalPixelsX then - if setRowSize then - rowSize = rowSizeCounter - 1 - setRowSize = false - end - - rowSizeCounter = 0 - xCounter = 0 - if pixelsBelowScrollbar + guiObjects[pos].AbsoluteSize.Y <= totalPixelsY then - --It fits, so back up our scroll position - pixelsBelowScrollbar = pixelsBelowScrollbar + guiObjects[pos].AbsoluteSize.Y - if scrollPosition <= rowSize then - scrollPosition = rowSize - break - else - --print("Backing up ScrollPosition from -- " ..scrollPosition) - scrollPosition = scrollPosition - rowSize - end - else - break - end - end - end - pos = pos - 1 - end - - xCounter = 0 - --print("ScrollPosition = " .. scrollPosition) - pos = scrollPosition - rowSizeCounter = 0 - setRowSize = true - local lastChildSize = 0 - - local xOffset,yOffset = 0 - if guiObjects[1] then - yOffset = math.ceil(math.floor(math.fmod(totalPixelsY,guiObjects[1].AbsoluteSize.X))/2) - xOffset = math.ceil(math.floor(math.fmod(totalPixelsX,guiObjects[1].AbsoluteSize.Y))/2) - end - - for i, child in ipairs(guiObjects) do - if i < scrollPosition then - --print("Hiding " .. child.Name) - child.Visible = false - else - if pixelsRemainingY < 0 then - --print("Out of Space " .. child.Name) - child.Visible = false - else - --print("Laying out " .. child.Name) - --GuiObject - if setRowSize then rowSizeCounter = rowSizeCounter + 1 end - if xCounter + child.AbsoluteSize.X >= totalPixelsX then - if setRowSize then - rowSize = rowSizeCounter - 1 - setRowSize = false - end - xCounter = 0 - pixelsRemainingY = pixelsRemainingY - child.AbsoluteSize.Y - end - child.Position = UDim2.new(child.Position.X.Scale,xCounter + xOffset, 0, totalPixelsY - pixelsRemainingY + yOffset) - xCounter = xCounter + child.AbsoluteSize.X - child.Visible = ((pixelsRemainingY - child.AbsoluteSize.Y) >= 0) - lastChildSize = child.AbsoluteSize - end - end - end - - scrollUpButton.Active = (scrollPosition > 1) - if lastChildSize == 0 then - scrollDownButton.Active = false - else - scrollDownButton.Active = ((pixelsRemainingY - lastChildSize.Y) < 0) - end - end - - - local layoutSimpleScrollBar = function() - local guiObjects = {} - - if orderList then - for i, child in ipairs(orderList) do - if child.Parent == frame then - table.insert(guiObjects, child) - end - end - else - local children = frame:GetChildren() - if children then - for i, child in ipairs(children) do - if child:IsA("GuiObject") then - table.insert(guiObjects, child) - end - end - end - end - if #guiObjects == 0 then - scrollUpButton.Active = false - scrollDownButton.Active = false - scrollPosition = 1 - return - end - - if scrollPosition > #guiObjects then - scrollPosition = #guiObjects - end - - local totalPixels = frame.AbsoluteSize.Y - local pixelsRemaining = frame.AbsoluteSize.Y - - local pixelsBelowScrollbar = 0 - local pos = #guiObjects - while pixelsBelowScrollbar < totalPixels and pos >= 1 do - if pos >= scrollPosition then - pixelsBelowScrollbar = pixelsBelowScrollbar + guiObjects[pos].AbsoluteSize.Y - else - if pixelsBelowScrollbar + guiObjects[pos].AbsoluteSize.Y <= totalPixels then - --It fits, so back up our scroll position - pixelsBelowScrollbar = pixelsBelowScrollbar + guiObjects[pos].AbsoluteSize.Y - if scrollPosition <= 1 then - scrollPosition = 1 - break - else - --print("Backing up ScrollPosition from -- " ..scrollPosition) - scrollPosition = scrollPosition - 1 - end - else - break - end - end - pos = pos - 1 - end - - --print("ScrollPosition = " .. scrollPosition) - pos = scrollPosition - for i, child in ipairs(guiObjects) do - if i < scrollPosition then - --print("Hiding " .. child.Name) - child.Visible = false - else - if pixelsRemaining < 0 then - --print("Out of Space " .. child.Name) - child.Visible = false - else - --print("Laying out " .. child.Name) - --GuiObject - child.Position = UDim2.new(child.Position.X.Scale, child.Position.X.Offset, 0, totalPixels - pixelsRemaining) - pixelsRemaining = pixelsRemaining - child.AbsoluteSize.Y - child.Visible = (pixelsRemaining >= 0) - end - end - end - scrollUpButton.Active = (scrollPosition > 1) - scrollDownButton.Active = (pixelsRemaining < 0) - end - - local reentrancyGuard = false - local recalculate = function() - if reentrancyGuard then - return - end - reentrancyGuard = true - wait() - local success, err = nil - if style == "grid" then - success, err = pcall(function() layoutGridScrollBar(frame) end) - elseif style == "simple" then - success, err = pcall(function() layoutSimpleScrollBar(frame) end) - end - if not success then print(err) end - - reentrancyGuard = false - end - - local scrollUp = function() - if scrollUpButton.Active then - scrollPosition = scrollPosition - rowSize - recalculate() - end - end - - local scrollDown = function() - if scrollDownButton.Active then - scrollPosition = scrollPosition + rowSize - recalculate() - end - end - - local scrollMouseCount = 0 - scrollUpButton.MouseButton1Click:connect( - function() - --print("Up-MouseButton1Click") - scrollMouseCount = scrollMouseCount + 1 - end) - scrollUpButton.MouseLeave:connect( - function() - --print("Up-Leave") - scrollMouseCount = scrollMouseCount + 1 - end) - - scrollUpButton.MouseButton1Down:connect( - function() - --print("Up-Down") - scrollMouseCount = scrollMouseCount + 1 - - scrollUp() - local val = scrollMouseCount - wait(0.5) - while val == scrollMouseCount do - if scrollUp() == false then - break - end - wait(0.1) - end - end) - - scrollDownButton.MouseButton1Click:connect( - function() - --print("Down-Click") - scrollMouseCount = scrollMouseCount + 1 - end) - scrollDownButton.MouseLeave:connect( - function() - --print("Down-Leave") - scrollMouseCount = scrollMouseCount + 1 - end) - scrollDownButton.MouseButton1Down:connect( - function() - --print("Down-Down") - scrollMouseCount = scrollMouseCount + 1 - - scrollDown() - local val = scrollMouseCount - wait(0.5) - while val == scrollMouseCount do - if scrollDown() == false then - break - end - wait(0.1) - end - end) - - - frame.ChildAdded:connect(function() - recalculate() - end) - - frame.ChildRemoved:connect(function() - recalculate() - end) - - frame.Changed:connect( - function(prop) - if prop == "AbsoluteSize" then - --Wait a heartbeat for it to sync in - recalculate() - end - end) - frame.AncestryChanged:connect(recalculate) - - return frame, scrollUpButton, scrollDownButton, recalculate -end -local function binaryGrow(min, max, fits) - if min > max then - return min - end - local biggestLegal = min - - while min <= max do - local mid = min + math.floor((max - min) / 2) - if fits(mid) and (biggestLegal == nil or biggestLegal < mid) then - biggestLegal = mid - - --Try growing - min = mid + 1 - else - --Doesn't fit, shrink - max = mid - 1 - end - end - return biggestLegal -end - - -local function binaryShrink(min, max, fits) - if min > max then - return min - end - local smallestLegal = max - - while min <= max do - local mid = min + math.floor((max - min) / 2) - if fits(mid) and (smallestLegal == nil or smallestLegal > mid) then - smallestLegal = mid - - --It fits, shrink - max = mid - 1 - else - --Doesn't fit, grow - min = mid + 1 - end - end - return smallestLegal -end - - -local function getGuiOwner(instance) - while instance ~= nil do - if instance:IsA("ScreenGui") or instance:IsA("BillboardGui") then - return instance - end - instance = instance.Parent - end - return nil -end - -t.AutoTruncateTextObject = function(textLabel) - local text = textLabel.Text - - local fullLabel = textLabel:Clone() - fullLabel.Name = "Full" .. textLabel.Name - fullLabel.BorderSizePixel = 0 - fullLabel.BackgroundTransparency = 0 - fullLabel.Text = text - fullLabel.TextXAlignment = Enum.TextXAlignment.Center - fullLabel.Position = UDim2.new(0,-3,0,0) - fullLabel.Size = UDim2.new(0,100,1,0) - fullLabel.Visible = false - fullLabel.Parent = textLabel - - local shortText = nil - local mouseEnterConnection = nil - local mouseLeaveConnection= nil - - local checkForResize = function() - if getGuiOwner(textLabel) == nil then - return - end - textLabel.Text = text - if textLabel.TextFits then - --Tear down the rollover if it is active - if mouseEnterConnection then - mouseEnterConnection:disconnect() - mouseEnterConnection = nil - end - if mouseLeaveConnection then - mouseLeaveConnection:disconnect() - mouseLeaveConnection = nil - end - else - local len = string.len(text) - textLabel.Text = text .. "~" - - --Shrink the text - local textSize = binaryGrow(0, len, - function(pos) - if pos == 0 then - textLabel.Text = "~" - else - textLabel.Text = string.sub(text, 1, pos) .. "~" - end - return textLabel.TextFits - end) - shortText = string.sub(text, 1, textSize) .. "~" - textLabel.Text = shortText - - --Make sure the fullLabel fits - if not fullLabel.TextFits then - --Already too small, grow it really bit to start - fullLabel.Size = UDim2.new(0, 10000, 1, 0) - end - - --Okay, now try to binary shrink it back down - local fullLabelSize = binaryShrink(textLabel.AbsoluteSize.X,fullLabel.AbsoluteSize.X, - function(size) - fullLabel.Size = UDim2.new(0, size, 1, 0) - return fullLabel.TextFits - end) - fullLabel.Size = UDim2.new(0,fullLabelSize+6,1,0) - - --Now setup the rollover effects, if they are currently off - if mouseEnterConnection == nil then - mouseEnterConnection = textLabel.MouseEnter:connect( - function() - fullLabel.ZIndex = textLabel.ZIndex + 1 - fullLabel.Visible = true - --textLabel.Text = "" - end) - end - if mouseLeaveConnection == nil then - mouseLeaveConnection = textLabel.MouseLeave:connect( - function() - fullLabel.Visible = false - --textLabel.Text = shortText - end) - end - end - end - textLabel.AncestryChanged:connect(checkForResize) - textLabel.Changed:connect( - function(prop) - if prop == "AbsoluteSize" then - checkForResize() - end - end) - - checkForResize() - - local function changeText(newText) - text = newText - fullLabel.Text = text - checkForResize() - end - - return textLabel, changeText -end - -local function TransitionTutorialPages(fromPage, toPage, transitionFrame, currentPageValue) - if fromPage then - fromPage.Visible = false - if transitionFrame.Visible == false then - transitionFrame.Size = fromPage.Size - transitionFrame.Position = fromPage.Position - end - else - if transitionFrame.Visible == false then - transitionFrame.Size = UDim2.new(0.0,50,0.0,50) - transitionFrame.Position = UDim2.new(0.5,-25,0.5,-25) - end - end - transitionFrame.Visible = true - currentPageValue.Value = nil - - local newsize, newPosition - if toPage then - --Make it visible so it resizes - toPage.Visible = true - - newSize = toPage.Size - newPosition = toPage.Position - - toPage.Visible = false - else - newSize = UDim2.new(0.0,50,0.0,50) - newPosition = UDim2.new(0.5,-25,0.5,-25) - end - transitionFrame:TweenSizeAndPosition(newSize, newPosition, Enum.EasingDirection.InOut, Enum.EasingStyle.Quad, 0.3, true, - function(state) - if state == Enum.TweenStatus.Completed then - transitionFrame.Visible = false - if toPage then - toPage.Visible = true - currentPageValue.Value = toPage - end - end - end) -end - -t.CreateTutorial = function(name, tutorialKey, createButtons) - local frame = Instance.new("Frame") - frame.Name = "Tutorial-" .. name - frame.BackgroundTransparency = 1 - frame.Size = UDim2.new(0.6, 0, 0.6, 0) - frame.Position = UDim2.new(0.2, 0, 0.2, 0) - - local transitionFrame = Instance.new("Frame") - transitionFrame.Name = "TransitionFrame" - transitionFrame.Style = Enum.FrameStyle.RobloxRound - transitionFrame.Size = UDim2.new(0.6, 0, 0.6, 0) - transitionFrame.Position = UDim2.new(0.2, 0, 0.2, 0) - transitionFrame.Visible = false - transitionFrame.Parent = frame - - local currentPageValue = Instance.new("ObjectValue") - currentPageValue.Name = "CurrentTutorialPage" - currentPageValue.Value = nil - currentPageValue.Parent = frame - - local boolValue = Instance.new("BoolValue") - boolValue.Name = "Buttons" - boolValue.Value = createButtons - boolValue.Parent = frame - - local pages = Instance.new("Frame") - pages.Name = "Pages" - pages.BackgroundTransparency = 1 - pages.Size = UDim2.new(1,0,1,0) - pages.Parent = frame - - local function getVisiblePageAndHideOthers() - local visiblePage = nil - local children = pages:GetChildren() - if children then - for i,child in ipairs(children) do - if child.Visible then - if visiblePage then - child.Visible = false - else - visiblePage = child - end - end - end - end - return visiblePage - end - - local showTutorial = function(alwaysShow) - if alwaysShow or UserSettings().GameSettings:GetTutorialState(tutorialKey) == false then - print("Showing tutorial-",tutorialKey) - local currentTutorialPage = getVisiblePageAndHideOthers() - - local firstPage = pages:FindFirstChild("TutorialPage1") - if firstPage then - TransitionTutorialPages(currentTutorialPage, firstPage, transitionFrame, currentPageValue) - else - error("Could not find TutorialPage1") - end - end - end - - local dismissTutorial = function() - local currentTutorialPage = getVisiblePageAndHideOthers() - - if currentTutorialPage then - TransitionTutorialPages(currentTutorialPage, nil, transitionFrame, currentPageValue) - end - - UserSettings().GameSettings:SetTutorialState(tutorialKey, true) - end - - local gotoPage = function(pageNum) - local page = pages:FindFirstChild("TutorialPage" .. pageNum) - local currentTutorialPage = getVisiblePageAndHideOthers() - TransitionTutorialPages(currentTutorialPage, page, transitionFrame, currentPageValue) - end - - return frame, showTutorial, dismissTutorial, gotoPage -end - -local function CreateBasicTutorialPage(name, handleResize, skipTutorial) - local frame = Instance.new("Frame") - frame.Name = "TutorialPage" - frame.Style = Enum.FrameStyle.RobloxRound - frame.Size = UDim2.new(0.6, 0, 0.6, 0) - frame.Position = UDim2.new(0.2, 0, 0.2, 0) - frame.Visible = false - - local frameHeader = Instance.new("TextLabel") - frameHeader.Name = "Header" - frameHeader.Text = name - frameHeader.BackgroundTransparency = 1 - frameHeader.FontSize = Enum.FontSize.Size24 - frameHeader.Font = Enum.Font.ArialBold - frameHeader.TextColor3 = Color3.new(1,1,1) - frameHeader.TextXAlignment = Enum.TextXAlignment.Center - frameHeader.TextWrap = true - frameHeader.Size = UDim2.new(1,-55, 0, 22) - frameHeader.Position = UDim2.new(0,0,0,0) - frameHeader.Parent = frame - - local skipButton = Instance.new("ImageButton") - skipButton.Name = "SkipButton" - skipButton.AutoButtonColor = false - skipButton.BackgroundTransparency = 1 - skipButton.Image = "http://www.roblox.com/asset/?id=37813546" - skipButton.MouseButton1Click:connect(function() - skipButton.Image = "http://www.roblox.com/asset/?id=37813546" - skipTutorial() - end) - skipButton.MouseEnter:connect(function() - skipButton.Image = "http://www.roblox.com/asset/?id=37813556" - end) - skipButton.MouseLeave:connect(function() - skipButton.Image = "http://www.roblox.com/asset/?id=37813546" - end) - skipButton.Size = UDim2.new(0, 55, 0, 22) - skipButton.Position = UDim2.new(1, -55, 0, 0) - skipButton.Parent = frame - - local innerFrame = Instance.new("Frame") - innerFrame.Name = "ContentFrame" - innerFrame.BackgroundTransparency = 1 - innerFrame.Position = UDim2.new(0,0,0,22) - innerFrame.Parent = frame - - local nextButton = Instance.new("TextButton") - nextButton.Name = "NextButton" - nextButton.Text = "Next" - nextButton.TextColor3 = Color3.new(1,1,1) - nextButton.Font = Enum.Font.Arial - nextButton.FontSize = Enum.FontSize.Size18 - nextButton.Style = Enum.ButtonStyle.RobloxButtonDefault - nextButton.Size = UDim2.new(0,80, 0, 32) - nextButton.Position = UDim2.new(0.5, 5, 1, -32) - nextButton.Active = false - nextButton.Visible = false - nextButton.Parent = frame - - local prevButton = Instance.new("TextButton") - prevButton.Name = "PrevButton" - prevButton.Text = "Previous" - prevButton.TextColor3 = Color3.new(1,1,1) - prevButton.Font = Enum.Font.Arial - prevButton.FontSize = Enum.FontSize.Size18 - prevButton.Style = Enum.ButtonStyle.RobloxButton - prevButton.Size = UDim2.new(0,80, 0, 32) - prevButton.Position = UDim2.new(0.5, -85, 1, -32) - prevButton.Active = false - prevButton.Visible = false - prevButton.Parent = frame - - innerFrame.Size = UDim2.new(1,0,1,-22-35) - - local parentConnection = nil - - local function basicHandleResize() - if frame.Visible and frame.Parent then - local maxSize = math.min(frame.Parent.AbsoluteSize.X, frame.Parent.AbsoluteSize.Y) - handleResize(200,maxSize) - end - end - - frame.Changed:connect( - function(prop) - if prop == "Parent" then - if parentConnection ~= nil then - parentConnection:disconnect() - parentConnection = nil - end - if frame.Parent and frame.Parent:IsA("GuiObject") then - parentConnection = frame.Parent.Changed:connect( - function(parentProp) - if parentProp == "AbsoluteSize" then - wait() - basicHandleResize() - end - end) - basicHandleResize() - end - end - - if prop == "Visible" then - basicHandleResize() - end - end) - - return frame, innerFrame -end - -t.CreateTextTutorialPage = function(name, text, skipTutorialFunc) - local frame = nil - local contentFrame = nil - - local textLabel = Instance.new("TextLabel") - textLabel.BackgroundTransparency = 1 - textLabel.TextColor3 = Color3.new(1,1,1) - textLabel.Text = text - textLabel.TextWrap = true - textLabel.TextXAlignment = Enum.TextXAlignment.Left - textLabel.TextYAlignment = Enum.TextYAlignment.Center - textLabel.Font = Enum.Font.Arial - textLabel.FontSize = Enum.FontSize.Size14 - textLabel.Size = UDim2.new(1,0,1,0) - - local function handleResize(minSize, maxSize) - size = binaryShrink(minSize, maxSize, - function(size) - frame.Size = UDim2.new(0, size, 0, size) - return textLabel.TextFits - end) - frame.Size = UDim2.new(0, size, 0, size) - frame.Position = UDim2.new(0.5, -size/2, 0.5, -size/2) - end - - frame, contentFrame = CreateBasicTutorialPage(name, handleResize, skipTutorialFunc) - textLabel.Parent = contentFrame - - return frame -end - -t.CreateImageTutorialPage = function(name, imageAsset, x, y, skipTutorialFunc) - local frame = nil - local contentFrame = nil - - local imageLabel = Instance.new("ImageLabel") - imageLabel.BackgroundTransparency = 1 - imageLabel.Image = imageAsset - imageLabel.Size = UDim2.new(0,x,0,y) - imageLabel.Position = UDim2.new(0.5,-x/2,0.5,-y/2) - - local function handleResize(minSize, maxSize) - size = binaryShrink(minSize, maxSize, - function(size) - return size >= x and size >= y - end) - if size >= x and size >= y then - imageLabel.Size = UDim2.new(0,x, 0,y) - imageLabel.Position = UDim2.new(0.5,-x/2, 0.5, -y/2) - else - if x > y then - --X is limiter, so - imageLabel.Size = UDim2.new(1,0,y/x,0) - imageLabel.Position = UDim2.new(0,0, 0.5 - (y/x)/2, 0) - else - --Y is limiter - imageLabel.Size = UDim2.new(x/y,0,1, 0) - imageLabel.Position = UDim2.new(0.5-(x/y)/2, 0, 0, 0) - end - end - frame.Size = UDim2.new(0, size, 0, size) - frame.Position = UDim2.new(0.5, -size/2, 0.5, -size/2) - end - - frame, contentFrame = CreateBasicTutorialPage(name, handleResize, skipTutorialFunc) - imageLabel.Parent = contentFrame - - return frame -end - -t.AddTutorialPage = function(tutorial, tutorialPage) - local transitionFrame = tutorial.TransitionFrame - local currentPageValue = tutorial.CurrentTutorialPage - - if not tutorial.Buttons.Value then - tutorialPage.ContentFrame.Size = UDim2.new(1,0,1,-22) - tutorialPage.NextButton.Parent = nil - tutorialPage.PrevButton.Parent = nil - end - - local children = tutorial.Pages:GetChildren() - if children and #children > 0 then - tutorialPage.Name = "TutorialPage" .. (#children+1) - local previousPage = children[#children] - if not previousPage:IsA("GuiObject") then - error("All elements under Pages must be GuiObjects") - end - - if tutorial.Buttons.Value then - if previousPage.NextButton.Active then - error("NextButton already Active on previousPage, please only add pages with RbxGui.AddTutorialPage function") - end - previousPage.NextButton.MouseButton1Click:connect( - function() - TransitionTutorialPages(previousPage, tutorialPage, transitionFrame, currentPageValue) - end) - previousPage.NextButton.Active = true - previousPage.NextButton.Visible = true - - if tutorialPage.PrevButton.Active then - error("PrevButton already Active on tutorialPage, please only add pages with RbxGui.AddTutorialPage function") - end - tutorialPage.PrevButton.MouseButton1Click:connect( - function() - TransitionTutorialPages(tutorialPage, previousPage, transitionFrame, currentPageValue) - end) - tutorialPage.PrevButton.Active = true - tutorialPage.PrevButton.Visible = true - end - - tutorialPage.Parent = tutorial.Pages - else - --First child - tutorialPage.Name = "TutorialPage1" - tutorialPage.Parent = tutorial.Pages - end -end - -t.Help = - function(funcNameOrFunc) - --input argument can be a string or a function. Should return a description (of arguments and expected side effects) - if funcNameOrFunc == "CreatePropertyDropDownMenu" or funcNameOrFunc == t.CreatePropertyDropDownMenu then - return "Function CreatePropertyDropDownMenu. " .. - "Arguments: (instance, propertyName, enumType). " .. - "Side effect: returns a container with a drop-down-box that is linked to the 'property' field of 'instance' which is of type 'enumType'" - end - if funcNameOrFunc == "CreateDropDownMenu" or funcNameOrFunc == t.CreateDropDownMenu then - return "Function CreateDropDownMenu. " .. - "Arguments: (items, onItemSelected). " .. - "Side effect: Returns 2 results, a container to the gui object and a 'updateSelection' function for external updating. The container is a drop-down-box created around a list of items" - end - if funcNameOrFunc == "CreateMessageDialog" or funcNameOrFunc == t.CreateMessageDialog then - return "Function CreateMessageDialog. " .. - "Arguments: (title, message, buttons). " .. - "Side effect: Returns a gui object of a message box with 'title' and 'message' as passed in. 'buttons' input is an array of Tables contains a 'Text' and 'Function' field for the text/callback of each button" - end - if funcNameOrFunc == "CreateStyledMessageDialog" or funcNameOrFunc == t.CreateStyledMessageDialog then - return "Function CreateStyledMessageDialog. " .. - "Arguments: (title, message, style, buttons). " .. - "Side effect: Returns a gui object of a message box with 'title' and 'message' as passed in. 'buttons' input is an array of Tables contains a 'Text' and 'Function' field for the text/callback of each button, 'style' is a string, either Error, Notify or Confirm" - end - if funcNameOrFunc == "GetFontHeight" or funcNameOrFunc == t.GetFontHeight then - return "Function GetFontHeight. " .. - "Arguments: (font, fontSize). " .. - "Side effect: returns the size in pixels of the given font + fontSize" - end - if funcNameOrFunc == "LayoutGuiObjects" or funcNameOrFunc == t.LayoutGuiObjects then - - end - if funcNameOrFunc == "CreateScrollingFrame" or funcNameOrFunc == t.CreateScrollingFrame then - return "Function CreateScrollingFrame. " .. - "Arguments: (orderList, style) " .. - "Side effect: returns 4 objects, (scrollFrame, scrollUpButton, scrollDownButton, recalculateFunction). 'scrollFrame' can be filled with GuiObjects. It will lay them out and allow scrollUpButton/scrollDownButton to interact with them. Orderlist is optional (and specifies the order to layout the children. Without orderlist, it uses the children order. style is also optional, and allows for a 'grid' styling if style is passed 'grid' as a string. recalculateFunction can be called when a relayout is needed (when orderList changes)" - end - if funcNameOrFunc == "AutoTruncateTextObject" or funcNameOrFunc == t.AutoTruncateTextObject then - return "Function AutoTruncateTextObject. " .. - "Arguments: (textLabel) " .. - "Side effect: returns 2 objects, (textLabel, changeText). The 'textLabel' input is modified to automatically truncate text (with ellipsis), if it gets too small to fit. 'changeText' is a function that can be used to change the text, it takes 1 string as an argument" - end - if funcNameOrFunc == "CreateSlider" or funcNameOrFunc == t.CreateSlider then - return "Function CreateSlider. " .. - "Arguments: (steps, width, position) " .. - "Side effect: returns 2 objects, (sliderGui, sliderPosition). The 'steps' argument specifies how many different positions the slider can hold along the bar. 'width' specifies in pixels how wide the bar should be (modifiable afterwards if desired). 'position' argument should be a UDim2 for slider positioning. 'sliderPosition' is an IntValue whose current .Value specifies the specific step the slider is currently on." - end - end - -local NewPlayerListGui = Instance.new("ScreenGui",script.Parent) -NewPlayerListGui.Name = "NewPlayerList" - -coroutine.resume(coroutine.create(function() -NewPlayerListGui.Parent = game.CoreGui -if game.CoreGui:FindFirstChild("NewPlayerList") then -game.CoreGui["NewPlayerList"].Parent = nil -end end)) - -local localTesting = true - -local friendWord = "Friend" -local friendWordLowercase = "friend" - -local testFriendingPlaces = {} -testFriendingPlaces[41324860] = true -local enableFriendingGlobally = false - -local testPlayerListPlaces = {} -testPlayerListPlaces[41324860] = true -testPlayerListPlaces[10042455] = true -local enablePlayerListGlobally = false - -local bigEasingStyle = Enum.EasingStyle.Back -local smallEasingStyle = Enum.EasingStyle.Quart -local lightBackground = true - -local function waitForChild(instance, name) - while not instance:FindFirstChild(name) do - instance.ChildAdded:wait() - end -end - -local function waitForProperty(instance, prop) - while not instance[prop] do - instance.Changed:wait() - end -end - -local function Color3I(r,g,b) - return Color3.new(r/255,g/255,b/255) -end - -function robloxLock(instance) -end - -function ArrayRemove(t, obj) - for i, obj2 in ipairs(t) do - if obj == obj2 then - table.remove(t, i) - return true - end - end - return false -end - -local function getPlayers() - local result = {} - local players = game:GetService("Players"):GetChildren() - if players then - for i, player in ipairs(players) do - if player:IsA("Player") then - table.insert(result, player) - end - end - end - return result -end - -local brickColorTable = {} -for i = 0, 63 do - brickColorTable[BrickColor.palette(i).Name] = BrickColor.palette(i).Color -end - -local function remapColor(i, j) - brickColorTable[BrickColor.palette(i).Name] = BrickColor.palette(j).Color -end - -remapColor(13, 12) -remapColor(14, 12) -remapColor(15, 12) -remapColor(61, 29) -remapColor(63, 62) -remapColor(56, 50) -remapColor(45, 53) -remapColor(51, 20) -remapColor(4, 20) -remapColor(59, 35) -remapColor(60, 29) - -local function getColor(brickColor) - if brickColorTable[brickColor.Name] then - return brickColorTable[brickColor.Name] - else - return brickColor.Color; - end -end - - - -local function getTeams() - local result = {} - local teams = game:GetService("Teams"):GetChildren() - for i, team in ipairs(teams) do - if team:IsA("Team") then - table.insert(result, team) - end - end - return result -end - -local supportFriends = false -local currentBoardType = "PlayerList" -local currentStatCount = 0 - -local createBoardsFunction = nil - - -local playerTable = {} -local teamTable = {} -local teamColorTable = {} - -local removePlayerFunction = nil -local recreatePlayerFunction = nil -local addPlayerFunction = function(player) - if recreatePlayerFunction then - recreatePlayerFunction(player) - end -end -local sortPlayerListsFunction = nil - -local minimizedState = nil -local bigWindowImposter = nil -local smallWindowPosition = UDim2.new(0, -20, 0,5)--UDim2.new(0, 0, 0,0) -local smallWindowSize = UDim2.new(1,0,1,0)--UDim2.new(1,5,1,0) -local bigWindowSize = UDim2.new(0.6,0,0.6,0) -local bigWindowPosition = UDim2.new(.2, 0, .2,0) - -local debounceTeamsChanged = false - -local currentWindowState = "Small" -local previousWindowState = nil -local transitionWindowsFunction = nil - -local container = nil -local topRightTrayContainer = nil - -local playerContextMenu = nil -local contextMenuElements = {} - -local function addContextMenuLabel(getText1, getText2, isVisible) - local t = {} - t.Type = "Label" - t.GetText1 = getText1 - t.GetText2 = getText2 - t.IsVisible = isVisible - table.insert(contextMenuElements, t) -end -local function addContextMenuButton(text, isVisible, isActive, doIt) - local t = {} - t.Text = text - t.Type = "Button" - t.IsVisible = isVisible - t.IsActive = isActive - t.DoIt = doIt - table.insert(contextMenuElements, t) -end - -local function getFriendStatus(player) - if player == game.Players.LocalPlayer then - return Enum.FriendStatus.NotFriend - else - return game.Players.LocalPlayer:GetFriendStatus(player) - end -end ---Populate the ContextMenus -addContextMenuLabel( - --GetText1 - function(player) - return "Loading..." - end, - --GetText2 - nil, - --IsVisible - function(player) - return getFriendStatus(player) == Enum.FriendStatus.Unknown - end) - ---[[ -addContextMenuLabel( - --GetText1 - function(player) - return player.Name - end, - --GetText2 - nil, - --IsVisible - function(player) - return true - end)]]-- -addContextMenuButton("Send " .. friendWord .. " Request", - --IsVisible - function(player) - return getFriendStatus(player) == Enum.FriendStatus.NotFriend - end, - --IsActive - function(player) - return true - end, - --DoIt - function(player) - return game.Players.LocalPlayer:RequestFriendship(player) - end -) -addContextMenuButton("Un" .. friendWordLowercase, - --IsVisible - function(player) - return getFriendStatus(player) == Enum.FriendStatus.Friend - end, - --IsActive - function(player) - return true - end, - --DoIt - function(player) - return game.Players.LocalPlayer:RevokeFriendship(player) - end -) -addContextMenuButton("Accept " .. friendWord .. " Request", - --IsVisible - function(player) - return getFriendStatus(player) == Enum.FriendStatus.FriendRequestReceived - end, - --IsActive - function(player) - return true - end, - --DoIt - function(player) - return game.Players.LocalPlayer:RequestFriendship(player) - end -) - -addContextMenuButton("Deny " .. friendWord .. " Request", - --IsVisible - function(player) - return getFriendStatus(player) == Enum.FriendStatus.FriendRequestReceived - end, - --IsActive - function(player) - return true - end, - --DoIt - function(player) - return game.Players.LocalPlayer:RevokeFriendship(player) - end -) - -addContextMenuButton("Cancel " .. friendWord .. " Request", - --IsVisible - function(player) - return getFriendStatus(player) == Enum.FriendStatus.FriendRequestSent - end, - --IsActive - function(player) - return true - end, - --DoIt - function(player) - return game.Players.LocalPlayer:RevokeFriendship(player) - end -) - - -local function getStatColumns(players) - for i, player in ipairs(players) do - local leaderstats = player:FindFirstChild("leaderstats") - if leaderstats then - --print(player, " is King of the List") - local stats = {} - local children = leaderstats:GetChildren() - if children then - for i, stat in ipairs(children) do - if stat:IsA("IntValue") then - table.insert(stats, stat.Name) - else - --TODO: This should check for IntValue only but current ScoreHud does not - table.insert(stats, stat.Name) - end - end - end - return stats - end - end - return nil -end - -local function determineBoardType() - local players = getPlayers() - - local foundLeaderstats = false - local numStats = 0 - local foundTeam = false - - local stats = getStatColumns(players) - if stats then - foundLeaderstats = true - numStats = #stats - end - - for i, player in ipairs(players) do - if not foundTeam then - if not player.Neutral then - foundTeam = true - break - end - end - end - - if foundLeaderstats and foundTeam then - return "TeamScore", numStats - elseif foundLeaderstats then - return "PlayerScore", numStats - elseif foundTeam then - return "TeamList", numStats - else - return "PlayerList", numStats - end -end - -local function toggleBigWindow() - if container == nil then - return - end - - if currentWindowState == "Big" then - --Hide it - if previousWindowState == nil or previousWindowState == "Big" or previousWindowState == "None" then - transitionWindowsFunction("None") - else - transitionWindowsFunction("Small") - end - else - previousWindowState = currentWindowState - transitionWindowsFunction("Big") - end -end -local previousBigPlayerList = nil -local function rebuildBoard(owner, boardType, numStats) - print("RebuildBoard") - if topRightTrayContainer == nil then - topRightTrayContainer = owner:FindFirstChild("PlayerListTopRightFrame") - if topRightTrayContainer == nil then - topRightTrayContainer = Instance.new("Frame") - topRightTrayContainer.Name = "PlayerListTopRightFrame" - topRightTrayContainer.BackgroundTransparency = 1 - topRightTrayContainer.Size = UDim2.new(0.2, 16, 0.42, 16)--UDim2.new(0.2, 0, 0.42, 0) - topRightTrayContainer.Position = UDim2.new(0.8, 0, 0, 0)--UDim2.new(0.8, 0, 0, 0) - topRightTrayContainer.Parent = container - end - end - if minimizedState == nil then - minimizedState = Instance.new("Frame") - minimizedState.Name = "MinimizedPlayerlist" - minimizedState.BackgroundTransparency = 1 - minimizedState.Position = UDim2.new(1, -166, 0,0) --UDim2.new(1, -153, 0,0) - minimizedState.Size = UDim2.new(0, 151, 0, 30) - - --[[local playerListButton = Instance.new("ImageButton") - playerListButton.Name = "GoBigButton" - playerListButton.Image = "rbxasset://textures/ui/playerlist_hidden_maximize.png" - playerListButton.BackgroundTransparency = 1 - playerListButton.Size = UDim2.new(0.0, 116, 0, 30) - playerListButton.Position = UDim2.new(0, 35, 0, 0) - playerListButton.MouseButton1Click:connect( - function() - toggleBigWindow() - end) - playerListButton.Parent = minimizedState]] - - playerListButton = Instance.new("ImageButton") - playerListButton.Name = "GoSmallButton" - playerListButton.Image = "rbxasset://textures/ui/playerlist_hidden_small.png" - playerListButton.BackgroundTransparency = 1 - playerListButton.Size = UDim2.new(0.0, 35, 0, 30) - playerListButton.Position = UDim2.new(1, -35, 0, 0) - playerListButton.MouseButton1Click:connect( - function() - transitionWindowsFunction("Small") - end) - playerListButton.Parent = minimizedState - - minimizedState.Visible = false - robloxLock(minimizedState) - minimizedState.Parent = topRightTrayContainer - end - if bigWindowImposter == nil then - bigWindowImposter = owner:FindFirstChild("BigPlayerListWindowImposter") - if bigWindowImposter == nil then - bigWindowImposter = Instance.new("Frame") - bigWindowImposter.Name = "BigPlayerListWindowImposter" - bigWindowImposter.Visible = false - --bigWindowImposter.Style = Enum.FrameStyle.RobloxRound - bigWindowImposter.BackgroundColor3 = Color3.new(0,0,0) - bigWindowImposter.BackgroundTransparency = 0.7 - bigWindowImposter.BorderSizePixel = 0 - --bigWindowImposter.Size = UDim2.new(0.4, 0, 0.4, 0) - bigWindowImposter.Size = UDim2.new(0.4, 7, 0.4, 7) - bigWindowImposter.Position = UDim2.new(0.3, 0, 0.3, 0) - robloxLock(bigWindowImposter) - bigWindowImposter.Parent = container - end - end - if container == nil or container ~= owner then - container = owner - - topRightTrayContainer.Parent = container - bigWindowImposter.Parent = container - end - - local smallVisible = true - local bigVisible = false - if container then - if topRightTrayContainer then - --Delete the old boards - if topRightTrayContainer:FindFirstChild("SmallPlayerlist") then - smallVisible = topRightTrayContainer.SmallPlayerlist.Visible - topRightTrayContainer.SmallPlayerlist.Parent = nil - print("Removed small playerlist") - else - print("Did not remove small playerlist") - end - end - if container:FindFirstChild("BigPlayerlist") then - bigVisible = container.BigPlayerlist.Visible or (previousBigPlayerList ~= nil) - container.BigPlayerlist.Parent = nil - if previousBigPlayerList ~= nil then - pcall(function() game.GuiService:RemoveCenterDialog(previousBigPlayerList) end) - previousBigPlayerList = nil - end - end - end - - local smallBoard, bigBoard = createBoardsFunction(boardType, numStats) - if smallBoard then - smallBoard.Visible = smallVisible - smallBoard.Parent = topRightTrayContainer - end - if bigBoard then - if bigVisible then - previousBigPlayerList = bigBoard - local centerDialogSupported, msg = pcall(function() game.GuiService:AddCenterDialog(previousBigPlayerList, Enum.CenterDialogType.PlayerInitiatedDialog, - function() - previousBigPlayerList.Visible = true - end) - end) - bigBoard.Visible = bigVisible - else - bigBoard.Visible = false - end - bigBoard.Parent = container - end - return container -end - - -local function showBigPlayerWindow() - if container:FindFirstChild("BigPlayerlist") then - if container.BigPlayerlist.Visible then - return - end - end - - bigWindowImposter.Visible = true - bigWindowImposter:TweenSizeAndPosition(bigWindowSize, bigWindowPosition, Enum.EasingDirection.Out, bigEasingStyle, 0.3, true, - function(state) - if state == Enum.TweenStatus.Completed then - bigWindowImposter.Visible = false - if container:FindFirstChild("BigPlayerlist") then - container.BigPlayerlist.Visible = true - end - end - end) -end - -local function hideBigPlayerWindow(completed) - if playerContextMenu then - playerContextMenu.Visible = false - end - - if container:FindFirstChild("BigPlayerlist") then - if container.BigPlayerlist.Visible == false and bigWindowImposter.Visible == false then - if completed then - completed() - end - --Already completely hidden - return - end - container.BigPlayerlist.Visible = false - end - - local completedFunction = completed - bigWindowImposter.Visible = true - bigWindowImposter:TweenSizeAndPosition(UDim2.new(0.4, 0, 0.4, 0), UDim2.new(0.3, 0, 0.3, 0), Enum.EasingDirection.In, Enum.EasingStyle.Quart, 0.15, true, - function(state) - if state == Enum.TweenStatus.Completed then - bigWindowImposter.Visible = false - if completedFunction then - completedFunction() - end - end - end) -end -local function hideSmallPlayerWindow(completed) - if playerContextMenu then - playerContextMenu.Visible = false - end - if topRightTrayContainer:FindFirstChild("SmallPlayerlist") then - local completedFunction = completed - if topRightTrayContainer.SmallPlayerlist.Visible then - topRightTrayContainer.SmallPlayerlist:TweenPosition(UDim2.new(1,0,smallWindowPosition.Y.Scale, smallWindowPosition.Y.Offset), Enum.EasingDirection.Out, smallEasingStyle, 0.3, true, - function(state) - --print(state) - if state == Enum.TweenStatus.Completed then - if topRightTrayContainer:FindFirstChild("SmallPlayerlist") then - topRightTrayContainer.SmallPlayerlist.Visible = false - end - if completedFunction then - completedFunction() - end - end - end) - return - end - end - if completed then - completed() - end -end - - -transitionWindowsFunction = function(desiredState) - if desiredState == "Big" then - minimizedState.Visible = false - hideSmallPlayerWindow() - - if previousBigPlayerList ~= nil then - if previousBigPlayerList ~= container:FindFirstChild("BigPlayerlist") then - pcall(function() game.GuiService:RemoveCenterDialog(previousBigPlayerList) end) - previousBigPlayerList = nil - previousBigPlayerList = container:FindFirstChild("BigPlayerlist") - end - else - previousBigPlayerList = container:FindFirstChild("BigPlayerlist") - end - - if previousBigPlayerList then - local firstShow = false - local centerDialogSupported, msg = pcall(function() game.GuiService:AddCenterDialog(previousBigPlayerList, Enum.CenterDialogType.PlayerInitiatedDialog, - function() - if not firstShow then - showBigPlayerWindow() - firstShow = true - else - previousBigPlayerList.Visible = true - end - end) - end) - if centerDialogSupported == false then - print("Exception", msg) - showBigPlayerWindow() - end - else - showBigPlayerWindow() - end - currentWindowState = "Big" - elseif desiredState == "Small" then - minimizedState.Visible = false - if previousBigPlayerList ~= nil then - pcall(function() game.GuiService:RemoveCenterDialog(previousBigPlayerList) end) - previousBigPlayerList = nil - end - - hideBigPlayerWindow() - if topRightTrayContainer:FindFirstChild("SmallPlayerlist") then - if not topRightTrayContainer.SmallPlayerlist.Visible or topRightTrayContainer.SmallPlayerlist.Position ~= smallWindowPosition then - topRightTrayContainer.SmallPlayerlist.Visible = true - topRightTrayContainer.SmallPlayerlist:TweenPosition(smallWindowPosition, Enum.EasingDirection.Out, smallEasingStyle, 0.3, true) - end - end - currentWindowState = "Small" - elseif desiredState == "None" then - if previousBigPlayerList ~= nil then - pcall(function() game.GuiService:RemoveCenterDialog(previousBigPlayerList) end) - previousBigPlayerList = nil - end - - local smallDone = false - local bigDone = false - hideSmallPlayerWindow( - function() - smallDone = true - if bigDone and smallDone then - minimizedState.Visible = true - end - end) - hideBigPlayerWindow( - function() - bigDone = true - if bigDone and smallDone then - minimizedState.Visible = true - end - end) - currentWindowState = "None" - end -end - -local function getStatValuesForPlayer(player) - local leaderstats = player:FindFirstChild("leaderstats") - if leaderstats then - local children = leaderstats:GetChildren() - if children then - local result = {} - --Just go based on position - for i, stat in ipairs(children) do - if stat:IsA("IntValue") then - table.insert(result, stat) - else - table.insert(result, 0) - end - end - - return result, leaderstats - end - end - return nil -end - ---ChildAdded on Player (if it's name is "leaderstats") - -if UserSettings and LoadLibrary then - - RbxGui,msg = t - print("Libraries loaded") - - local function createTeamName(name, color) - local fontHeight = 20 --RbxGui.GetFontHeight(Enum.Font.ArialBold, Enum.FontSize.Size18) - local frame = Instance.new("Frame") - frame.Name = "Team-" .. name - frame.BorderSizePixel = 0 - frame.BackgroundTransparency = 0.5 - frame.BackgroundColor3 = Color3.new(1,1,1) - frame.Size = UDim2.new(1, 0, 0, fontHeight) - frame.Position = UDim2.new(0,0,0,0) - - local label = Instance.new("TextLabel") - label.Name = "NameLabel" - label.Text = " " .. name - label.Font = Enum.Font.ArialBold - label.FontSize = Enum.FontSize.Size18 - label.Position = UDim2.new(0,0,0,0) - label.Size = UDim2.new(1,0,1,0) - label.TextColor3 = Color3.new(1,1,1) - label.BackgroundTransparency = 0.5 - label.BackgroundColor3 = getColor(color) - label.BorderSizePixel = 0 - label.TextXAlignment = Enum.TextXAlignment.Left - label = RbxGui.AutoTruncateTextObject(label) - label.Parent = frame - - return frame - end - - local function getFriendStatusIcon(friendStatus) - if friendStatus == Enum.FriendStatus.Unknown or friendStatus == Enum.FriendStatus.NotFriend then - return nil - elseif friendStatus == Enum.FriendStatus.Friend then - return "rbxasset://textures/ui/PlayerlistFriendIcon.png" - elseif friendStatus == Enum.FriendStatus.FriendRequestSent then - return "rbxasset://textures/ui/PlayerlistFriendRequestSentIcon.png" - elseif friendStatus == Enum.FriendStatus.FriendRequestReceived then - return "rbxasset://textures/ui/PlayerlistFriendRequestReceivedIcon.png" - else - error("Unknown FriendStatus: " .. friendStatus) - end - end - - local function getMembershipTypeIcon(membershipType) - --TODO: replace with proper icons - if membershipType == Enum.MembershipType.None then - return "" - elseif membershipType == Enum.MembershipType.BuildersClub then - return "rbxasset://textures/ui/TinyBcIcon.png" - elseif membershipType == Enum.MembershipType.TurboBuildersClub then - return "rbxasset://textures/ui/TinyTbcIcon.png" - elseif membershipType == Enum.MembershipType.OutrageousBuildersClub then - return "rbxasset://textures/ui/TinyObcIcon.png" - else - error("Uknown membershipType" .. membershipType) - end - end - - - local function updatePlayerFriendStatus(nameObject, friendStatus) - local fontHeight = 20 --RbxGui.GetFontHeight(Enum.Font.ArialBold, Enum.FontSize.Size14) - - local friendIconImage = getFriendStatusIcon(friendStatus) - nameObject.MembershipTypeLabel.FriendStatusLabel.Visible = (friendIconImage ~= nil) - - if friendIconImage ~= nil then - --Show friend icon - nameObject.MembershipTypeLabel.FriendStatusLabel.Image = friendIconImage - nameObject.NameLabel.Position =UDim2.new(0,2*fontHeight,0,1) - nameObject.NameLabel.Size = UDim2.new(1,-2*fontHeight,1,-2) - else - --Hide the friend icon - nameObject.NameLabel.Position = UDim2.new(0,fontHeight+1,0,1) - nameObject.NameLabel.Size = UDim2.new(1,-(fontHeight+1),1,-2) - end - end - local function updatePlayerName(nameObject, membershipStatus, teamColor) - local fontHeight = 20 --RbxGui.GetFontHeight(Enum.Font.ArialBold, Enum.FontSize.Size14) - - nameObject.Size = UDim2.new(1,0,0,fontHeight) - nameObject.MembershipTypeLabel.Image = getMembershipTypeIcon(membershipStatus) - end - - - local function updatePlayerNameColor(player, teamColor) - local function updatePlayerNameColorHelper(nameObject) - if teamColor ~= nil then - nameObject.NameLabel.TextColor3 = getColor(teamColor) - nameObject.NameLabel.FullNameLabel.TextColor3 = getColor(teamColor) - else - nameObject.NameLabel.TextColor3 = Color3.new(1,1,1) - nameObject.NameLabel.FullNameLabel.TextColor3 = Color3.new(1,1,1) - end - end - - updatePlayerNameColorHelper(playerTable[player].NameObjectSmall) - updatePlayerNameColorHelper(playerTable[player].NameObjectBig) - end - - - local function createPlayerName(name, membershipStatus, teamColor, friendStatus) - local frame = Instance.new("Frame") - frame.Name = "Player_" .. name - if lightBackground then - frame.BackgroundColor3 = Color3.new(1,1,1) - else - frame.BackgroundColor3 = Color3.new(1,1,1) - end - frame.BackgroundTransparency = 0.5 - frame.BorderSizePixel = 0 - - local membershipStatusLabel = Instance.new("ImageLabel") - membershipStatusLabel.Name = "MembershipTypeLabel" - membershipStatusLabel.BackgroundTransparency = 1 - membershipStatusLabel.Size = UDim2.new(1,0,1,0) - membershipStatusLabel.Position = UDim2.new(0,0,0,0) - membershipStatusLabel.SizeConstraint = Enum.SizeConstraint.RelativeYY - membershipStatusLabel.Parent = frame - - local friendStatusLabel = Instance.new("ImageLabel") - friendStatusLabel.Name = "FriendStatusLabel" - friendStatusLabel.Visible = false - friendStatusLabel.BackgroundTransparency = 1 - friendStatusLabel.Size = UDim2.new(1,0,1,0) - friendStatusLabel.Position = UDim2.new(1,0,0,0) - friendStatusLabel.Parent = membershipStatusLabel - - local changeNameFunction - local nameLabel = Instance.new("TextLabel") - nameLabel.Name = "NameLabel" - nameLabel.Text = name - nameLabel.Font = Enum.Font.ArialBold - nameLabel.FontSize = Enum.FontSize.Size14 - nameLabel.TextColor3 = Color3.new(1,1,1) - nameLabel.BackgroundTransparency = 1 - nameLabel.BackgroundColor3 = Color3.new(0,0,0) - nameLabel.TextXAlignment = Enum.TextXAlignment.Left - nameLabel, changeNameFunction = RbxGui.AutoTruncateTextObject(nameLabel) - nameLabel.Parent = frame - - updatePlayerName(frame, membershipStatus, teamColor) - if supportFriends then - updatePlayerFriendStatus(frame, friendStatus) - else - updatePlayerFriendStatus(frame, Enum.FriendStatus.NotFriend) - end - return frame, changeNameFunction - end - - local function createStatColumn(i, numColumns, isTeam, color3, isHeader) - local textLabel = Instance.new("TextLabel") - textLabel.Name = "Stat" .. i - textLabel.TextColor3 = Color3.new(1,1,1) - textLabel.TextXAlignment = Enum.TextXAlignment.Right - textLabel.TextYAlignment = Enum.TextYAlignment.Center - textLabel.FontSize = Enum.FontSize.Size14 - if isHeader then - textLabel.FontSize = Enum.FontSize.Size18 - else - textLabel.FontSize = Enum.FontSize.Size14 - end - if isHeader or isTeam then - textLabel.Font = Enum.Font.ArialBold - else - textLabel.Font = Enum.Font.Arial - end - - if isTeam then - textLabel.BackgroundColor3 = color3 - textLabel.Text = 0 - else - textLabel.BackgroundColor3 = Color3.new(0,0,0) - textLabel.Text = "" - end - textLabel.BackgroundTransparency = 1 - if i == numColumns then - textLabel.Size = UDim2.new(1/numColumns, -6, 1, 0) - else - textLabel.Size = UDim2.new(1/numColumns, -4, 1, 0) - end - - textLabel.Position = UDim2.new((i-1) * (1/numColumns), 0, 0, 0) - return RbxGui.AutoTruncateTextObject(textLabel) - end - - local function createStatHeaders(stats, numColumns, isBig) - local frame = Instance.new("Frame") - frame.Name = "Headers" - frame.BorderSizePixel = 0 - frame.BackgroundColor3 = Color3.new(0,0,0) - frame.BackgroundTransparency = 1 - - local nameSize - if isBig then - nameSize = 0.5 - elseif numColumns == 1 then - nameSize = 0.7 - elseif numColumns == 2 then - nameSize = 0.6 - else - nameSize = 0.45 - end - frame.Size = UDim2.new(1-nameSize, 0, 1,0) - if isBig then - frame.Position = UDim2.new(nameSize,-25, 0,0) - else - frame.Position = UDim2.new(nameSize,0, 0,0) - end - - local i = 1 - while i <= numColumns do - local headerColumn, changeText = createStatColumn(i, numColumns, false, nil, true) - changeText(stats[i]) - headerColumn.Parent = frame - i = i + 1 - end - return frame, textChangers - end - - local function createStatColumns(nameObject, numColumns, isTeam, isBig) - local frame = Instance.new("Frame") - frame.Name = nameObject.Name .. "_WithStats" - frame.BorderSizePixel = 0 - frame.BackgroundColor3 = nameObject.BackgroundColor3 - frame.BackgroundTransparency = nameObject.BackgroundTransparency - frame.Size = nameObject.Size - frame.Position = nameObject.Position - - nameObject.BackgroundTransparency = 1 - - if numColumns == 0 then - nameObject.Size = UDim2.new(1,0,1,0) - nameObject.Position = UDim2.new(0,0,0,0) - nameObject.Parent = frame - return frame - end - - local statFrame = Instance.new("Frame") - statFrame.Name = "Stats" - if isTeam then - statFrame.BorderSizePixel = 0 - statFrame.BackgroundColor3 = nameObject.NameLabel.BackgroundColor3 - statFrame.BackgroundTransparency = nameObject.NameLabel.BackgroundTransparency - else - statFrame.BackgroundTransparency = 1 - end - - local nameSize - if isBig then - nameSize = 0.5 - elseif numColumns == 1 then - nameSize = 0.7 - elseif numColumns == 2 then - nameSize = 0.6 - else - nameSize = 0.45 - end - nameObject.Size = UDim2.new(nameSize, 0, 1, 0) - nameObject.Position = UDim2.new(0, 0, 0, 0) - statFrame.Size = UDim2.new(1-nameSize,0, 1,0) - statFrame.Position = UDim2.new(nameSize,0, 0,0) - - nameObject.Parent = frame - statFrame.Parent = frame - - local textChangers = {} - local i = 1 - while i <= numColumns do - local statColumn, changeText = createStatColumn(i, numColumns, isTeam, statFrame.BackgroundColor3) - statColumn.Parent = statFrame - table.insert(textChangers, changeText) - - i = i + 1 - end - - return frame, statFrame, textChangers - end - - local function createAlternatingRows(objects) - for i, line in ipairs(objects) do - if i % 2 == 0 then - line.BackgroundTransparency = 1 - else - line.BackgroundTransparency = 0.95 - end - end - end - local removeFromTeam = nil - - local function clearTableEntry(obj, tableInfo) - if tableInfo.MainObjectSmall then - tableInfo.MainObjectSmall.Parent = nil - tableInfo.MainObjectSmall = nil - end - if tableInfo.MainObjectBig then - tableInfo.MainObjectBig.Parent = nil - tableInfo.MainObjectBig = nil - end - if tableInfo.Connections then - for i, connection in ipairs(tableInfo.Connections) do - connection:disconnect() - end - tableInfo.Connections = nil - end - if tableInfo.LeaderStatConnections then - for i, connection in ipairs(tableInfo.LeaderStatConnections) do - connection:disconnect() - end - tableInfo.LeaderStatConnections = nil - end - if tableInfo.CurrentTeam then - removeFromTeam(obj) - tableInfo.CurrentTeam = nil - end - if tableInfo.Players then - for i, player in ipairs(tableInfo.Players) do - playerTable[player].CurrentTeam = nil - end - tableInfo.Players = {} - end - if tableInfo.StatValues then - tableInfo.StatValues = nil - end - end - - local function resetPlayerTable() - for player, info in pairs(playerTable) do - clearTableEntry(player, info) - playerTable[player] = nil - end - playerTable = {} - end - - local function resetTeamTable() - for team, info in pairs(teamTable) do - clearTableEntry(team, info) - teamTable[team] = nil - end - teamTable = {} - teamColorTable = {} - end - - local function getBoardTypeInfo() - local isTeam = (currentBoardType == "TeamScore" or currentBoardType == "TeamList") - local isScore = (currentBoardType == "TeamScore" or currentBoardType == "PlayerScore") - return isTeam, isScore - end - - - local function recomputeTeamScore(team, column) - if not team or team == "Neutral" then - return - end - - local function recomputeScoreHelper(statChangers) - if statChangers and column <= #statChangers then - local sum = 0 - for i, p in ipairs(teamTable[team].Players) do - if playerTable[p].StatValues and column <= #playerTable[p].StatValues then - sum = sum + playerTable[p].StatValues[column].Value - end - end - statChangers[column](sum) - end - end - - recomputeScoreHelper(teamTable[team].StatChangersSmall) - recomputeScoreHelper(teamTable[team].StatChangersBig) - end - local function recomputeCompleteTeamScore(team) - local col = 1 - while col <= currentStatCount do - recomputeTeamScore(team, col) - col = col + 1 - end - end - removeFromTeam = function(player) - if playerTable[player].CurrentTeam ~= nil then - ArrayRemove(teamTable[playerTable[player].CurrentTeam].Players, player) - recomputeCompleteTeamScore(playerTable[player].CurrentTeam) - playerTable[player].CurrentTeam = nil - end - end - - local function assignToTeam(player) - local isTeam, isScore = getBoardTypeInfo() - - if isTeam then - local newTeam = nil - - if player.Neutral or teamColorTable[player.TeamColor.Name] == nil then - newTeam = "Neutral" - else - newTeam = teamColorTable[player.TeamColor.Name] - end - - if playerTable[player].CurrentTeam == newTeam then - return - end - - removeFromTeam(player) - - playerTable[player].CurrentTeam = newTeam - table.insert(teamTable[newTeam].Players, player) - - if newTeam == "Neutral" then - updatePlayerNameColor(player, nil) - else - updatePlayerNameColor(player, player.TeamColor) - end - - recomputeCompleteTeamScore(newTeam) - - --Relayout - if sortPlayerListsFunction then - sortPlayerListsFunction() - end - end - end - - local function buildTeamObject(team, numStatColumns, suffix) - local isTeam, isScore = getBoardTypeInfo() - local teamObject = createTeamName(team.Name, team.TeamColor) - if not teamTable[team] then - teamTable[team] = {} - end - teamTable[team]["NameObject" .. suffix] = teamObject - if isScore then - local statObject - local textChangers - teamObject, statObject, textChangers = createStatColumns(teamObject, numStatColumns, true, suffix == "Big") - teamTable[team]["StatObject" .. suffix] = statObject - teamTable[team]["StatChangers" .. suffix] = textChangers - end - teamTable[team]["MainObject" .. suffix] = teamObject - if not teamTable[team].Players then - teamTable[team].Players = {} - end - return teamObject - end - - local currentContextMenuPlayer = nil - local function updatePlayerContextMenu(player) - currentContextMenuPlayer = player - local elementHeight = 20 - local function highlight(button) - button.TextColor3 = Color3.new(0,0,0) - button.BackgroundColor3 = Color3.new(0.8,0.8,0.8) - end - local function clearHighlight(button) - button.TextColor3 = Color3.new(1,1,1) - button.BackgroundColor3 = Color3.new(0,0,0) - end - if playerContextMenu == nil then - playerContextMenu = Instance.new("Frame") - playerContextMenu.Name = "PlayerListContextMenu" - playerContextMenu.BackgroundTransparency = 1 - playerContextMenu.Visible = false - - local playerContextMenuButton = Instance.new("TextButton") - playerContextMenuButton.Name = "PlayerListContextMenuButton" - playerContextMenuButton.Text = "" - playerContextMenuButton.Style = Enum.ButtonStyle.RobloxButtonDefault - playerContextMenuButton.ZIndex = 4 - playerContextMenuButton.Size = UDim2.new(1, 0, 1, -20) - playerContextMenuButton.Visible = true - playerContextMenuButton.Parent = playerContextMenu - - for i, contextElement in ipairs(contextMenuElements) do - local element = contextElement - if element.Type == "Button" then - local button = Instance.new("TextButton") - button.Name = "ContextButton" .. i - button.BackgroundColor3 = Color3.new(0,0,0) - button.BorderSizePixel = 0 - button.TextXAlignment = Enum.TextXAlignment.Left - button.Text = " " .. contextElement.Text - button.Font = Enum.Font.Arial - button.FontSize = Enum.FontSize.Size14 - button.Size = UDim2.new(1, 8, 0, elementHeight) - button.TextColor3 = Color3.new(1,1,1) - button.ZIndex = 4 - button.Parent = playerContextMenuButton - button.MouseButton1Click:connect(function() - if button.Active then - local success, result = pcall(function() element.DoIt(currentContextMenuPlayer) end) - playerContextMenu.Visible = false - end - end) - - button.MouseEnter:connect(function() - if button.Active then - highlight(button) - end - end) - button.MouseLeave:connect(function() - if button.Active then - clearHighlight(button) - end - end) - - contextElement.Button = button - contextElement.Element = button - elseif element.Type == "Label" then - local frame = Instance.new("Frame") - frame.Name = "ContextLabel" .. i - frame.BackgroundTransparency = 1 - frame.Size = UDim2.new(1, 8, 0, elementHeight) - - local label = Instance.new("TextLabel") - label.Name = "Text1" - label.BackgroundTransparency = 1 - label.BackgroundColor3 = Color3.new(1,1,1) - label.BorderSizePixel = 0 - label.TextXAlignment = Enum.TextXAlignment.Left - label.Font = Enum.Font.ArialBold - label.FontSize = Enum.FontSize.Size14 - label.Position = UDim2.new(0.0, 0, 0, 0) - label.Size = UDim2.new(0.5, 0, 1, 0) - label.TextColor3 = Color3.new(1,1,1) - label.ZIndex = 4 - label.Parent = frame - element.Label1 = label - - if element.GetText2 then - label = Instance.new("TextLabel") - label.Name = "Text2" - label.BackgroundTransparency = 1 - label.BackgroundColor3 = Color3.new(1,1,1) - label.BorderSizePixel = 0 - label.TextXAlignment = Enum.TextXAlignment.Right - label.Font = Enum.Font.Arial - label.FontSize = Enum.FontSize.Size14 - label.Position = UDim2.new(0.5, 0, 0, 0) - label.Size = UDim2.new(0.5, 0, 1, 0) - label.TextColor3 = Color3.new(1,1,1) - label.ZIndex = 4 - label.Parent = frame - element.Label2 = label - end - frame.Parent = playerContextMenuButton - element.Label = frame - element.Element = frame - end - end - - playerContextMenu.ZIndex = 4 - playerContextMenu.MouseLeave:connect(function() playerContextMenu.Visible = false end) - robloxLock(playerContextMenu) - playerContextMenu.Parent = NewPlayerListGui - - end - - local elementPos = 0 - for i, contextElement in ipairs(contextMenuElements) do - local isVisible = false - - if contextElement.IsVisible then - local success, visible = pcall(function() return contextElement.IsVisible(currentContextMenuPlayer) end) - if success then - isVisible = visible - else - print("Error in IsVisible call: " .. visible) - end - end - - if contextElement.Type == "Button" then - contextElement.Button.Visible = isVisible - if contextElement.Button.Visible then - isVisible = true - clearHighlight(contextElement.Button) - if contextElement.IsActive then - local success, active = pcall(function() return contextElement.IsActive(currentContextMenuPlayer) end) - if success then - contextElement.Button.Active = active - else - print("Error in IsActive call: " .. active) - end - end - if contextElement.Button.Active then - contextElement.Button.TextColor3 = Color3.new(1,1,1) - else - contextElement.Button.TextColor3 = Color3.new(0.7,0.7,0.7) - end - end - elseif contextElement.Type == "Label" then - contextElement.Label.Visible = isVisible - if contextElement.Label.Visible then - local success, text = pcall(function() return contextElement.GetText1(currentContextMenuPlayer) end) - if success then - contextElement.Label1.Text = " " .. text - else - print("Error in GetText1 call: " .. text) - end - - if contextElement.GetText2 then - local success, text = pcall(function() return contextElement.GetText2(currentContextMenuPlayer) end) - if success then - contextElement.Label2.Text = " " .. text - else - print("Error in GetText2 call: " .. text) - end - end - end - end - if isVisible then - contextElement.Element.Position = UDim2.new(0,-4, 0, elementPos * elementHeight - 4) - elementPos = elementPos + 1 - end - end - playerContextMenu.Size = UDim2.new(0, 150, 0, elementPos*elementHeight + 13 + 20) - end - local function showPlayerMenu(player, x, y) - updatePlayerContextMenu(player) - x = x - (playerContextMenu.AbsoluteSize.X/2) - if x + playerContextMenu.AbsoluteSize.X >= NewPlayerListGui.AbsoluteSize.X then - x = NewPlayerListGui.AbsoluteSize.X - playerContextMenu.AbsoluteSize.X - end - playerContextMenu.Visible = true - playerContextMenu.Position = UDim2.new(0, x, 0, y-playerContextMenu.AbsoluteSize.Y) - end - - local function buildPlayerObject(player, numStatColumns, suffix) - local isTeam, isScore = getBoardTypeInfo() - - local playerObject = nil - local changePlayerNameFunction = nil - local currentColor = nil - if isTeam and not player.Neutral then - currentColor = player.TeamColor.Color - else - currentColor = Color3.new(1,1,1) - end - playerObject, changePlayerNameFunction = createPlayerName(player.Name, player.MembershipType, currentColor, getFriendStatus(player)) - - if not playerTable[player] then - playerTable[player] = {} - end - if not playerTable[player].Connections then - playerTable[player].Connections = {} - end - if not playerTable[player].CurrentTeam then - playerTable[player].CurrentTeam = nil - end - playerTable[player]["NameObject" .. suffix] = playerObject - playerTable[player]["ChangeName" .. suffix] = changePlayerNameFunction - - if isScore then - local statObject = nil - local textChangers = nil - playerObject, statObject, textChangers = createStatColumns(playerObject, numStatColumns, false, suffix == "Big") - playerTable[player]["StatObject" .. suffix]= statObject - playerTable[player]["StatChangers" .. suffix] = textChangers - - local statValues, leaderstats = getStatValuesForPlayer(player) - if not statValues or #statValues < numStatColumns then - if not playerTable[player].LeaderStatConnections then - playerTable[player].LeaderStatConnections = {} - end - --Setup a listener to see when this data gets filled in - if not leaderstats then - --print("No leaderstats for ", player) - --We don't even have a leaderstats child, wait for one - table.insert(playerTable[player].LeaderStatConnections, - player.ChildAdded:connect( - function(child) - if child.Name == "leaderstats" then - --print("Got a leaderstats for ", player) - - --Connections will be torn down - recreatePlayerFunction(player) - else - --print("Unknown child, listening for connection") - table.insert(playerTable[player].LeaderStatConnections, - child.Changed:connect( - function(prop) - if prop == "Name" and child.Name == "leaderstats" then - --Connections will be torn down - recreatePlayerFunction(player) - end - end)) - end - end)) - else - --print("Need more children") - --We have a leaderstats, but not enough children, recreate if we get them - table.insert(playerTable[player].LeaderStatConnections, - leaderstats.ChildAdded:connect( - function(child) - --TODO only look for IntValue - recreatePlayerFunction(player) - end) - ) - table.insert(playerTable[player].LeaderStatConnections, - leaderstats.AncestryChanged:connect( - function(child) - --We got deleted, try again - recreatePlayerFunction(player) - end) - ) - end - end - if statValues then - if not playerTable[player].StatValues then - playerTable[player].StatValues = {} - end - local pos = 1 - while pos <= numStatColumns and pos <= #statValues do - local currentColumn = pos - local statValue = statValues[pos] - local statChanger = textChangers[pos] - - local updateStat = function(val) - statChanger(val) - recomputeTeamScore(playerTable[player].CurrentTeam, currentColumn) - end - if pos > #playerTable[player].StatValues then - table.insert(playerTable[player].StatValues, statValue) - end - - table.insert(playerTable[player].Connections, - statValue.Changed:connect(updateStat) - ) - table.insert(playerTable[player].Connections, - statValue.AncestryChanged:connect( - function() - recreatePlayerFunction(player) - end) - ) - updateStat(statValue.Value) - pos = pos + 1 - end - end - end - - if supportFriends and player ~= game.Players.LocalPlayer and player.userId > 0 and game.Players.LocalPlayer.userId > 0 then - local button = Instance.new("TextButton") - button.Name = playerObject.Name .. "Button" - button.Text = "" - button.Active = false - button.Size = playerObject.Size - button.Position = playerObject.Position - button.BackgroundColor3 = playerObject.BackgroundColor3 - - local secondButton = Instance.new("TextButton") - secondButton.Name = playerObject.Name .. "RealButton" - secondButton.Text = "" - secondButton.BackgroundTransparency = 1 - secondButton.BackgroundColor3 = playerObject.BackgroundColor3 - secondButton.Parent.BackgroundTransparency = 1 - secondButton.Parent.Visible = true - secondButton.ZIndex = 2 - secondButton.Size = UDim2.new(1,0,1,0) - - local previousTransparency = nil - table.insert(playerTable[player].Connections, - secondButton.MouseEnter:connect(--button.MouseEnter:connect( - function() - if previousTransparency == nil then - previousTransparency = secondButton--[[button]].BackgroundTransparency - end - - if lightBackground then - --button.BackgroundColor3 = Color3.new(0,0,0) - --button.BackgroundTransparency = 0 - secondButton.Parent.BackgroundTransparency = 0 - else - --button.BackgroundColor3 = Color3.new(1,1,1) - --secondButton.button.BackgroundTransparency = 1--0.80 - secondButton.Parent.BackgroundTransparency = 1 - end - end)) - table.insert(playerTable[player].Connections, - secondButton.MouseLeave:connect(--button.MouseLeave:connect( - function() - if previousTransparency ~= nil then - if lightBackground then - --button.BackgroundColor3 = Color3.new(1,1,1) - --button.BackgroundTransparency = previousTransparency - else - --secondButtonbutton.BackgroundColor3 = Color3.new(1,1,1) - --nbutton.BackgroundTransparency = previousTransparency - end - - previousTransparency = nil - end - secondButton.Parent.BackgroundTransparency = 1 - end)) - - local mouseDownX, mouseDownY - table.insert(playerTable[player].Connections, - secondButton.MouseButton1Down:connect(function(x,y) - mouseDownX = x - mouseDownY = y - end)) - table.insert(playerTable[player].Connections, - secondButton.MouseButton1Click:connect(function() - showPlayerMenu(player, mouseDownX, secondButton.AbsolutePosition.Y + secondButton.AbsoluteSize.Y ) - end)) - playerObject.BackgroundTransparency = 1 - playerObject.Size = UDim2.new(1,0,1,0) - playerObject.Position = UDim2.new(0,0,0,0) - playerObject.Parent = button - - playerTable[player]["MainObject" .. suffix] = button - - playerObject = button - else - playerTable[player]["MainObject" .. suffix] = playerObject - - if player == game.Players.LocalPlayer and supportFriends then - table.insert(playerTable[player].Connections, - player.FriendStatusChanged:connect( - function(otherPlayer, friendStatus) - if playerTable[otherPlayer] then - updatePlayerFriendStatus(playerTable[otherPlayer]["NameObject" .. suffix], friendStatus) - end - end) - ) - end - end - table.insert(playerTable[player].Connections, - player.Changed:connect( - function(prop) - if prop == "MembershipType" then - updatePlayerName(playerTable[player]["NameObject" .. suffix], player.MembershipType, currentColor) - elseif prop == "Name" then - playerTable[player]["ChangeName" .. suffix](player.Name) - elseif prop == "Neutral" or prop == "TeamColor" then - assignToTeam(player) - end - end) - ) - return playerObject - end - - local function orderScrollList(scrollOrder, objectName, scrollFrame) - local pos = 0 - local order = {} - local isTeam, isScore = getBoardTypeInfo() - for i, obj in ipairs(scrollOrder) do - order[obj] = 0 - end - - if isTeam then - local teams = getTeams() - for i, team in ipairs(teams) do - --print(team, objectName, teamTable[team][objectName]) - order[teamTable[team][objectName]] = pos - pos = pos + 1 - for i, player in ipairs(teamTable[team].Players) do - if playerTable[player] then - order[playerTable[player][objectName]] = pos - pos = pos + 1 - end - end - end - - if #teamTable["Neutral"].Players > 0 then - teamTable["Neutral"][objectName].Parent = scrollFrame - order[teamTable["Neutral"][objectName]] = pos - pos = pos + 1 - for i, player in ipairs(teamTable["Neutral"].Players) do - order[playerTable[player][objectName]] = pos - pos = pos + 1 - end - else - teamTable["Neutral"][objectName].Parent = nil - end - else - local players = getPlayers() - for i, player in ipairs(players) do - order[playerTable[player][objectName]] = pos - pos = pos + 1 - end - end - - table.sort(scrollOrder, - function(a,b) - return order[a] < order[b] - end) - end - - local function createPlayerListBasics(frame, isBig) - local headerFrame = Instance.new("Frame") - headerFrame.Name = "Header" - headerFrame.BackgroundTransparency = 1 - headerFrame.Size = UDim2.new(1,-13,0,26) - headerFrame.Position = UDim2.new(0,0,0,0) --UDim2.new(0,-6,0,-6) - headerFrame.Parent = frame - - local lowerPaneFrame = Instance.new("Frame") - lowerPaneFrame.Name = "ScrollingArea" - lowerPaneFrame.BackgroundTransparency = 1 - lowerPaneFrame.Size = UDim2.new(1,-3,1,-26) - lowerPaneFrame.Position = UDim2.new(0,0,0,26) - lowerPaneFrame.Parent = frame - - local scrollOrder = {} - local scrollFrame, scrollUp, scrollDown, recalculateScroll = RbxGui.CreateScrollingFrame(scrollOrder) - - local scrollBar = Instance.new("Frame") - scrollBar.Name = "ScrollBar" - scrollBar.BackgroundTransparency = 0.9 - scrollBar.BackgroundColor3 = Color3.new(1,1,1) - scrollBar.BorderSizePixel = 0 - scrollBar.Size = UDim2.new(0, 17, 1, -36) - if isBig then scrollBar.Size = UDim2.new(0, 17, 1, -61) end - scrollBar.Parent = lowerPaneFrame - - scrollFrame.Parent = lowerPaneFrame - scrollUp.Parent = lowerPaneFrame - scrollDown.Parent = lowerPaneFrame - - if isBig then - scrollFrame.Position = UDim2.new(0,0,0,0) --UDim2.new(0,-7,0,0) - scrollUp.Position = UDim2.new(1,-41,0,5) --UDim2.new(1,-19,0,0) - scrollDown.Position = UDim2.new(1,-41,1,-35) -- UDim2.new(1,-19,1,-15) - scrollBar.Position = UDim2.new(1, -41, 0, 24) -- UDim2.new(1, -19, 0, 19) - - scrollFrame.Size = UDim2.new(1,-48,1,0) - headerFrame.Size = UDim2.new(1,-20,0,32) - - else - scrollBar.Position = UDim2.new(1, -19, 0, 14) --UDim2.new(1, -17, 0, 19) - scrollFrame.Position = UDim2.new(0,1,0,0) -- UDim2.new(0,-5,0,0) - scrollUp.Position = UDim2.new(1,-19,0,-5) --UDim2.new(1,-17,0,0) - scrollDown.Position = UDim2.new(1,-19,1,-20) --UDim2.new(1,-17,1,-15) - - lowerPaneFrame.Position = UDim2.new(0,0,0,30) - - local toggleScrollBar = function(visible) - if visible then - scrollFrame.Size = UDim2.new(1,-16,1,0) - headerFrame.Size = UDim2.new(1,-16,0,32) - else - scrollFrame.Size = UDim2.new(1,0,1,0)--UDim2.new(1,5,1,0) - headerFrame.Size = UDim2.new(1,5,0,32) - end - scrollUp.Visible = visible - scrollDown.Visible = visible - scrollBar.Visible = visible - end - scrollUp.Changed:connect(function(prop) - if prop == "Active" then - toggleScrollBar(scrollUp.Active or scrollDown.Active) - end - end) - - scrollDown.Changed:connect(function(prop) - if prop == "Active" then - toggleScrollBar(scrollUp.Active or scrollDown.Active) - end - end) - - toggleScrollBar(scrollUp.Active or scrollDown.Active) - end - return headerFrame, scrollFrame, recalculateScroll, scrollOrder - end - - createBoardsFunction = function (boardType, numStatColumns) - print("Create Boards") - local smallFrame = Instance.new("Frame") - smallFrame.Name = "SmallPlayerlist" - smallFrame.Position = smallWindowPosition - smallFrame.Active = false - smallFrame.Size = smallWindowSize - --smallFrame.Style = Enum.FrameStyle.RobloxRound - smallFrame.BackgroundColor3 = Color3.new(0,0,0) - smallFrame.BackgroundTransparency = 0.7 - smallFrame.BorderSizePixel = 0 - - local bigFrame = Instance.new("Frame") - bigFrame.Name = "BigPlayerlist" - bigFrame.Size = bigWindowSize - bigFrame.Position = bigWindowPosition - --bigFrame.Style = Enum.FrameStyle.RobloxRound - bigFrame.BackgroundColor3 = Color3.new(0,0,0) - bigFrame.BackgroundTransparency = 0.7 - bigFrame.BorderSizePixel = 0 - bigFrame.Visible = false - - local bigFrameWrapper = Instance.new("Frame") - bigFrameWrapper.Name = "Expander" - --bigFrameWrapper.Size = UDim2.new(1,5,1,0) - bigFrameWrapper.Size = UDim2.new(1,21,1,16) - bigFrameWrapper.Position = UDim2.new(0, 0, 0,0) - bigFrameWrapper.BackgroundTransparency = 1 - bigFrameWrapper.Parent = bigFrame - - local smallHeaderFrame, scrollFrameSmall, recalculateScrollSmall, scrollOrderSmall = createPlayerListBasics(smallFrame, false) - local bigHeaderFrame, scrollFrameBig, recalculateScrollBig, scrollOrderBig = createPlayerListBasics(bigFrameWrapper, true) - - local playerListButton = Instance.new("ImageButton") - playerListButton.Name = "GoBigButton" - playerListButton.BackgroundTransparency = 1 - playerListButton.Image = "rbxasset://textures/ui/playerlist_small_maximize.png" - playerListButton.Size = UDim2.new(0.0, 35, 0, 29) - playerListButton.Position = UDim2.new(0, 0, 0, 0) - playerListButton.MouseButton1Click:connect( - function() - toggleBigWindow() - end) - playerListButton.Parent = smallHeaderFrame - - playerListButton = Instance.new("ImageButton") - playerListButton.Name = "CloseButton" - playerListButton.BackgroundTransparency = 1 - playerListButton.Image = "rbxasset://textures/ui/playerlist_small_hide.png" - playerListButton.Size = UDim2.new(0.0, 38, 0, 29) - playerListButton.Position = UDim2.new(0, 35, 0, 0) - playerListButton.MouseButton1Click:connect( - function() - transitionWindowsFunction("None") - end) - playerListButton.Parent = smallHeaderFrame - - playerListButton = Instance.new("ImageButton") - playerListButton.Name = "CloseButton" - playerListButton.Image = "rbxasset://textures/ui/playerlist_big_hide.png" - playerListButton.BackgroundTransparency = 1 - playerListButton.Size = UDim2.new(0.0, 29, 0, 29) - playerListButton.Position = UDim2.new(1, -30, 0.5, -15) - playerListButton.MouseButton1Click:connect( - function() - toggleBigWindow() - end) - playerListButton.Parent = bigHeaderFrame - - local placeName = Instance.new("TextLabel") - placeName.Name = "PlaceName" - placeName.Text = " Player List" - placeName.FontSize = Enum.FontSize.Size24 - placeName.TextXAlignment = Enum.TextXAlignment.Left - placeName.Font = Enum.Font.ArialBold - placeName.BackgroundTransparency = 1 - placeName.TextColor3 = Color3.new(1,1,1) - placeName.Size = UDim2.new(0.5, 0, 1, 0) - placeName.Position = UDim2.new(0, 0, 0.0, 0) - placeName = RbxGui.AutoTruncateTextObject(placeName) - placeName.Parent = bigHeaderFrame - - - currentBoardType = boardType - currentStatCount = numStatColumns - local isTeam, isScore = getBoardTypeInfo() - local players = getPlayers() - - if isScore then - local statColumns = getStatColumns(players) - numStatColumns = #statColumns - if numStatColumns > 3 then - numStatColumns = 3 - end - createStatHeaders(statColumns, numStatColumns, false).Parent = smallHeaderFrame - createStatHeaders(statColumns, currentStatCount, true).Parent = bigHeaderFrame - end - - --Clean up all old stuff - resetPlayerTable() - - for i, player in ipairs(players) do - local playerObject = buildPlayerObject(player, numStatColumns, "Small") - table.insert(scrollOrderSmall, playerObject) - playerObject.Parent = scrollFrameSmall - - playerObject = buildPlayerObject(player, currentStatCount, "Big") - table.insert(scrollOrderBig, playerObject) - playerObject.Parent = scrollFrameBig - end - - --Clean up old stuff - resetTeamTable() - - local teamStatObjects = {} - if isTeam then - local teams = getTeams() - local i = #teams - while i >= 1 do - --We go backwards so the "first" team color gets the team - local team = teams[i] - teamColorTable[team.TeamColor.Name] = team - i = i - 1 - end - - --Adding/Removing a Team causes a full invalidation of the board - for i, team in ipairs(teams) do - local teamObject = buildTeamObject(team, numStatColumns, "Small") - table.insert(scrollOrderSmall, teamObject) - teamObject.Parent = scrollFrameSmall - - teamObject = buildTeamObject(team, currentStatCount, "Big") - table.insert(scrollOrderBig, teamObject) - teamObject.Parent = scrollFrameBig - end - - teamTable["Neutral"] = {} - teamTable["Neutral"].Players = {} - - local neutralTeamObject = createTeamName("Neutral", BrickColor.palette(8)) - teamTable["Neutral"].NameObjectSmall = neutralTeamObject - teamTable["Neutral"].StatObjectSmall = nil - teamTable["Neutral"].MainObjectSmall = neutralTeamObject - table.insert(scrollOrderSmall, neutralTeamObject) - - neutralTeamObject = createTeamName("Neutral", BrickColor.palette(8)) - teamTable["Neutral"].NameObjectBig = neutralTeamObject - teamTable["Neutral"].StatObjectBig = nil - teamTable["Neutral"].MainObjectBig = neutralTeamObject - table.insert(scrollOrderBig, neutralTeamObject) - - local neutralPlayers = {} - for i, player in ipairs(players) do - assignToTeam(player) - end - end - - removePlayerFunction = function(player) - if playerTable[player] then - ArrayRemove(scrollOrderSmall, playerTable[player].MainObjectSmall) - ArrayRemove(scrollOrderBig, playerTable[player].MainObjectBig) - - clearTableEntry(player, playerTable[player]) - - playerTable[player] = nil - end - end - recreatePlayerFunction = function(player) - removePlayerFunction(player) - - local playerObject = buildPlayerObject(player, numStatColumns, "Small") - table.insert(scrollOrderSmall, playerObject) - robloxLock(playerObject) - playerObject.Parent = scrollFrameSmall - - playerObject = buildPlayerObject(player, currentStatCount, "Big") - table.insert(scrollOrderBig, playerObject) - robloxLock(playerObject) - playerObject.Parent = scrollFrameBig - - local isTeam, isScore = getBoardTypeInfo() - if isTeam then - assignToTeam(player) - end - - sortPlayerListsFunction() - end - - sortPlayerListsFunction = function() - orderScrollList(scrollOrderSmall, "MainObjectSmall", scrollFrameSmall) - recalculateScrollSmall() - createAlternatingRows(scrollOrderSmall) - - orderScrollList(scrollOrderBig, "MainObjectBig", scrollFrameBig) - recalculateScrollBig() - createAlternatingRows(scrollOrderBig) - end - - sortPlayerListsFunction() - - robloxLock(smallFrame) - robloxLock(bigFrame) - return smallFrame, bigFrame - end - - --Teams changing invalidates the whole board - local function teamsChanged() - if debounceTeamsChanged then - return - end - - debounceTeamsChanged = true - wait() - rebuildBoard(NewPlayerListGui, determineBoardType()) - debounceTeamsChanged = false - end - - - local checkIfBoardChanged = function() - local newBoardType, numStats = determineBoardType() - if newBoardType ~= currentBoardType or numStats ~= currentStatCount then - --print("BoardChanged to " .. newBoardType .. " with " .. numStats .. " stats") - rebuildBoard(NewPlayerListGui, newBoardType, numStats) - end - end - - local function buildPlayerList() - waitForChild(game, "Players") - waitForProperty(game.Players, "LocalPlayer") - - local playerListEnabled = testPlayerListPlaces[game.PlaceId] or enablePlayerListGlobally - if localTesting and (game.PlaceId == 0) or (game.PlaceId == -1) then - playerListEnabled = true - end - if not playerListEnabled then - --No playerlist - return - end - - supportFriends = testFriendingPlaces[game.PlaceId] or enableFriendingGlobally - if localTesting and (game.PlaceId == 0) or (game.PlaceId == -1) then - supportFriends = false - end - - local teams = game:GetService("Teams") - if teams then - local teamConnections = {} - - teams.ChildAdded:connect( - function(child) - if child:IsA("Team") then - teamsChanged() - teamConnections[child] = child.Changed:connect( - function(prop) - if prop == "TeamColor" or prop == "Name" then - --Rebuild when things change - teamsChanged() - end - end) - end - end) - teams.ChildRemoved:connect( - function(child) - if child:IsA("Team") then - if teamConnections[child] then - teamConnections[child]:disconnect() - teamConnections[child] = nil - end - teamsChanged() - end - end) - end - - game.Players.ChildAdded:connect( - function(player) - if player:IsA("Player") then - addPlayerFunction(player) - end - end) - - game.Players.ChildRemoved:connect( - function(player) - if player:IsA("Player") then - if removePlayerFunction then - removePlayerFunction(player) - end - end - end) - - rebuildBoard(NewPlayerListGui, determineBoardType()) - - delay(0, - function() - while true do - wait(5) - checkIfBoardChanged() - end - end) - end - - buildPlayerList() -end - true - - - - \ No newline at end of file diff --git a/CoreGui2012.rbxm b/CoreGui2012.rbxm deleted file mode 100644 index cbd6915..0000000 --- a/CoreGui2012.rbxm +++ /dev/null @@ -1,3601 +0,0 @@ - - null - nil - - - false - - GUI_Copy - script.PlayerList:clone().Parent = game.StarterGui; -script:remove(); - true - - - - false - - PlayerList - local t = {} - -local function ScopedConnect(parentInstance, instance, event, signalFunc, syncFunc, removeFunc) - local eventConnection = nil - - --Connection on parentInstance is scoped by parentInstance (when destroyed, it goes away) - local tryConnect = function() - if game:IsAncestorOf(parentInstance) then - --Entering the world, make sure we are connected/synced - if not eventConnection then - eventConnection = instance[event]:connect(signalFunc) - if syncFunc then syncFunc() end - end - else - --Probably leaving the world, so disconnect for now - if eventConnection then - eventConnection:disconnect() - if removeFunc then removeFunc() end - end - end - end - - --Hook it up to ancestryChanged signal - local connection = parentInstance.AncestryChanged:connect(tryConnect) - - --Now connect us if we're already in the world - tryConnect() - - return connection -end - -local function CreateButtons(frame, buttons, yPos, ySize) - local buttonNum = 1 - local buttonObjs = {} - for i, obj in ipairs(buttons) do - local button = Instance.new("TextButton") - button.Name = "Button" .. buttonNum - button.Font = Enum.Font.Arial - button.FontSize = Enum.FontSize.Size18 - button.AutoButtonColor = true - button.Style = Enum.ButtonStyle.RobloxButtonDefault - button.Text = obj.Text - button.TextColor3 = Color3.new(1,1,1) - button.MouseButton1Click:connect(obj.Function) - button.Parent = frame - buttonObjs[buttonNum] = button - - buttonNum = buttonNum + 1 - end - local numButtons = buttonNum-1 - - if numButtons == 1 then - frame.Button1.Position = UDim2.new(0.35, 0, yPos.Scale, yPos.Offset) - frame.Button1.Size = UDim2.new(.4,0,ySize.Scale, ySize.Offset) - elseif numButtons == 2 then - frame.Button1.Position = UDim2.new(0.1, 0, yPos.Scale, yPos.Offset) - frame.Button1.Size = UDim2.new(.8/3,0, ySize.Scale, ySize.Offset) - - frame.Button2.Position = UDim2.new(0.55, 0, yPos.Scale, yPos.Offset) - frame.Button2.Size = UDim2.new(.35,0, ySize.Scale, ySize.Offset) - elseif numButtons >= 3 then - local spacing = .1 / numButtons - local buttonSize = .9 / numButtons - - buttonNum = 1 - while buttonNum <= numButtons do - buttonObjs[buttonNum].Position = UDim2.new(spacing*buttonNum + (buttonNum-1) * buttonSize, 0, yPos.Scale, yPos.Offset) - buttonObjs[buttonNum].Size = UDim2.new(buttonSize, 0, ySize.Scale, ySize.Offset) - buttonNum = buttonNum + 1 - end - end -end - -local function setSliderPos(newAbsPosX,slider,sliderPosition,bar,steps) - - local newStep = steps - 1 --otherwise we really get one more step than we want - - local relativePosX = math.min(1, math.max(0, (newAbsPosX - bar.AbsolutePosition.X) / bar.AbsoluteSize.X ) ) - local wholeNum, remainder = math.modf(relativePosX * newStep) - if remainder > 0.5 then - wholeNum = wholeNum + 1 - end - relativePosX = wholeNum/newStep - - local result = math.ceil(relativePosX * newStep) - if sliderPosition.Value ~= (result + 1) then --onky update if we moved a step - sliderPosition.Value = result + 1 - - if relativePosX == 1 then - slider.Position = UDim2.new(1,-slider.AbsoluteSize.X,slider.Position.Y.Scale,slider.Position.Y.Offset) - else - slider.Position = UDim2.new(relativePosX,0,slider.Position.Y.Scale,slider.Position.Y.Offset) - end - end - -end - -local function cancelSlide(areaSoak) - areaSoak.Visible = false - if areaSoakMouseMoveCon then areaSoakMouseMoveCon:disconnect() end -end - -t.CreateStyledMessageDialog = function(title, message, style, buttons) - local frame = Instance.new("Frame") - frame.Size = UDim2.new(0.5, 0, 0, 165) - frame.Position = UDim2.new(0.25, 0, 0.5, -72.5) - frame.Name = "MessageDialog" - frame.Active = true - frame.Style = Enum.FrameStyle.RobloxRound - - local styleImage = Instance.new("ImageLabel") - styleImage.Name = "StyleImage" - styleImage.BackgroundTransparency = 1 - styleImage.Position = UDim2.new(0,5,0,15) - if style == "error" or style == "Error" then - styleImage.Size = UDim2.new(0, 71, 0, 71) - styleImage.Image = "http://www.roblox.com/asset?id=42565285" - elseif style == "notify" or style == "Notify" then - styleImage.Size = UDim2.new(0, 71, 0, 71) - styleImage.Image = "http://www.roblox.com/asset?id=42604978" - elseif style == "confirm" or style == "Confirm" then - styleImage.Size = UDim2.new(0, 74, 0, 76) - styleImage.Image = "http://www.roblox.com/asset?id=42557901" - else - return t.CreateMessageDialog(title,message,buttons) - end - styleImage.Parent = frame - - local titleLabel = Instance.new("TextLabel") - titleLabel.Name = "Title" - titleLabel.Text = title - titleLabel.BackgroundTransparency = 1 - titleLabel.TextColor3 = Color3.new(221/255,221/255,221/255) - titleLabel.Position = UDim2.new(0, 80, 0, 0) - titleLabel.Size = UDim2.new(1, -80, 0, 40) - titleLabel.Font = Enum.Font.ArialBold - titleLabel.FontSize = Enum.FontSize.Size36 - titleLabel.TextXAlignment = Enum.TextXAlignment.Center - titleLabel.TextYAlignment = Enum.TextYAlignment.Center - titleLabel.Parent = frame - - local messageLabel = Instance.new("TextLabel") - messageLabel.Name = "Message" - messageLabel.Text = message - messageLabel.TextColor3 = Color3.new(221/255,221/255,221/255) - messageLabel.Position = UDim2.new(0.025, 80, 0, 45) - messageLabel.Size = UDim2.new(0.95, -80, 0, 55) - messageLabel.BackgroundTransparency = 1 - messageLabel.Font = Enum.Font.Arial - messageLabel.FontSize = Enum.FontSize.Size18 - messageLabel.TextWrap = true - messageLabel.TextXAlignment = Enum.TextXAlignment.Left - messageLabel.TextYAlignment = Enum.TextYAlignment.Top - messageLabel.Parent = frame - - CreateButtons(frame, buttons, UDim.new(0, 105), UDim.new(0, 40) ) - - return frame -end - -t.CreateMessageDialog = function(title, message, buttons) - local frame = Instance.new("Frame") - frame.Size = UDim2.new(0.5, 0, 0.5, 0) - frame.Position = UDim2.new(0.25, 0, 0.25, 0) - frame.Name = "MessageDialog" - frame.Active = true - frame.Style = Enum.FrameStyle.RobloxRound - - local titleLabel = Instance.new("TextLabel") - titleLabel.Name = "Title" - titleLabel.Text = title - titleLabel.BackgroundTransparency = 1 - titleLabel.TextColor3 = Color3.new(221/255,221/255,221/255) - titleLabel.Position = UDim2.new(0, 0, 0, 0) - titleLabel.Size = UDim2.new(1, 0, 0.15, 0) - titleLabel.Font = Enum.Font.ArialBold - titleLabel.FontSize = Enum.FontSize.Size36 - titleLabel.TextXAlignment = Enum.TextXAlignment.Center - titleLabel.TextYAlignment = Enum.TextYAlignment.Center - titleLabel.Parent = frame - - local messageLabel = Instance.new("TextLabel") - messageLabel.Name = "Message" - messageLabel.Text = message - messageLabel.TextColor3 = Color3.new(221/255,221/255,221/255) - messageLabel.Position = UDim2.new(0.025, 0, 0.175, 0) - messageLabel.Size = UDim2.new(0.95, 0, .55, 0) - messageLabel.BackgroundTransparency = 1 - messageLabel.Font = Enum.Font.Arial - messageLabel.FontSize = Enum.FontSize.Size18 - messageLabel.TextWrap = true - messageLabel.TextXAlignment = Enum.TextXAlignment.Left - messageLabel.TextYAlignment = Enum.TextYAlignment.Top - messageLabel.Parent = frame - - CreateButtons(frame, buttons, UDim.new(0.8,0), UDim.new(0.15, 0)) - - return frame -end - -t.CreateDropDownMenu = function(items, onSelect, forRoblox) - local width = UDim.new(0, 100) - local height = UDim.new(0, 32) - - local xPos = 0.055 - local frame = Instance.new("Frame") - frame.Name = "DropDownMenu" - frame.BackgroundTransparency = 1 - frame.Size = UDim2.new(width, height) - - local dropDownMenu = Instance.new("TextButton") - dropDownMenu.Name = "DropDownMenuButton" - dropDownMenu.TextWrap = true - dropDownMenu.TextColor3 = Color3.new(1,1,1) - dropDownMenu.Text = "Choose One" - dropDownMenu.Font = Enum.Font.ArialBold - dropDownMenu.FontSize = Enum.FontSize.Size18 - dropDownMenu.TextXAlignment = Enum.TextXAlignment.Left - dropDownMenu.TextYAlignment = Enum.TextYAlignment.Center - dropDownMenu.BackgroundTransparency = 1 - dropDownMenu.AutoButtonColor = true - dropDownMenu.Style = Enum.ButtonStyle.RobloxButton - dropDownMenu.Size = UDim2.new(1,0,1,0) - dropDownMenu.Parent = frame - dropDownMenu.ZIndex = 2 - - local dropDownIcon = Instance.new("ImageLabel") - dropDownIcon.Name = "Icon" - dropDownIcon.Active = false - dropDownIcon.Image = "http://www.roblox.com/asset/?id=45732894" - dropDownIcon.BackgroundTransparency = 1 - dropDownIcon.Size = UDim2.new(0,11,0,6) - dropDownIcon.Position = UDim2.new(1,-11,0.5, -2) - dropDownIcon.Parent = dropDownMenu - dropDownIcon.ZIndex = 2 - - local itemCount = #items - local dropDownItemCount = #items - local useScrollButtons = false - if dropDownItemCount > 6 then - useScrollButtons = true - dropDownItemCount = 6 - end - - local droppedDownMenu = Instance.new("TextButton") - droppedDownMenu.Name = "List" - droppedDownMenu.Text = "" - droppedDownMenu.BackgroundTransparency = 1 - --droppedDownMenu.AutoButtonColor = true - droppedDownMenu.Style = Enum.ButtonStyle.RobloxButton - droppedDownMenu.Visible = false - droppedDownMenu.Active = true --Blocks clicks - droppedDownMenu.Position = UDim2.new(0,0,0,0) - droppedDownMenu.Size = UDim2.new(1,0, (1 + dropDownItemCount)*.8, 0) - droppedDownMenu.Parent = frame - droppedDownMenu.ZIndex = 2 - - local choiceButton = Instance.new("TextButton") - choiceButton.Name = "ChoiceButton" - choiceButton.BackgroundTransparency = 1 - choiceButton.BorderSizePixel = 0 - choiceButton.Text = "ReplaceMe" - choiceButton.TextColor3 = Color3.new(1,1,1) - choiceButton.TextXAlignment = Enum.TextXAlignment.Left - choiceButton.TextYAlignment = Enum.TextYAlignment.Center - choiceButton.BackgroundColor3 = Color3.new(1, 1, 1) - choiceButton.Font = Enum.Font.Arial - choiceButton.FontSize = Enum.FontSize.Size18 - if useScrollButtons then - choiceButton.Size = UDim2.new(1,-13, .8/((dropDownItemCount + 1)*.8),0) - else - choiceButton.Size = UDim2.new(1, 0, .8/((dropDownItemCount + 1)*.8),0) - end - choiceButton.TextWrap = true - choiceButton.ZIndex = 2 - - local dropDownSelected = false - - local scrollUpButton - local scrollDownButton - local scrollMouseCount = 0 - - local setZIndex = function(baseZIndex) - droppedDownMenu.ZIndex = baseZIndex +1 - if scrollUpButton then - scrollUpButton.ZIndex = baseZIndex + 3 - end - if scrollDownButton then - scrollDownButton.ZIndex = baseZIndex + 3 - end - - local children = droppedDownMenu:GetChildren() - if children then - for i, child in ipairs(children) do - if child.Name == "ChoiceButton" then - child.ZIndex = baseZIndex + 2 - elseif child.Name == "ClickCaptureButton" then - child.ZIndex = baseZIndex - end - end - end - end - - local scrollBarPosition = 1 - local updateScroll = function() - if scrollUpButton then - scrollUpButton.Active = scrollBarPosition > 1 - end - if scrollDownButton then - scrollDownButton.Active = scrollBarPosition + dropDownItemCount <= itemCount - end - - local children = droppedDownMenu:GetChildren() - if not children then return end - - local childNum = 1 - for i, obj in ipairs(children) do - if obj.Name == "ChoiceButton" then - if childNum < scrollBarPosition or childNum >= scrollBarPosition + dropDownItemCount then - obj.Visible = false - else - obj.Position = UDim2.new(0,0,((childNum-scrollBarPosition+1)*.8)/((dropDownItemCount+1)*.8),0) - obj.Visible = true - end - obj.TextColor3 = Color3.new(1,1,1) - obj.BackgroundTransparency = 1 - - childNum = childNum + 1 - end - end - end - local toggleVisibility = function() - dropDownSelected = not dropDownSelected - - dropDownMenu.Visible = not dropDownSelected - droppedDownMenu.Visible = dropDownSelected - if dropDownSelected then - setZIndex(4) - else - setZIndex(2) - end - if useScrollButtons then - updateScroll() - end - end - droppedDownMenu.MouseButton1Click:connect(toggleVisibility) - - local updateSelection = function(text) - local foundItem = false - local children = droppedDownMenu:GetChildren() - local childNum = 1 - if children then - for i, obj in ipairs(children) do - if obj.Name == "ChoiceButton" then - if obj.Text == text then - obj.Font = Enum.Font.ArialBold - foundItem = true - scrollBarPosition = childNum - else - obj.Font = Enum.Font.Arial - end - childNum = childNum + 1 - end - end - end - if not text then - dropDownMenu.Text = "Choose One" - scrollBarPosition = 1 - else - if not foundItem then - error("Invalid Selection Update -- " .. text) - end - - if scrollBarPosition + dropDownItemCount > itemCount + 1 then - scrollBarPosition = itemCount - dropDownItemCount + 1 - end - - dropDownMenu.Text = text - end - end - - local function scrollDown() - if scrollBarPosition + dropDownItemCount <= itemCount then - scrollBarPosition = scrollBarPosition + 1 - updateScroll() - return true - end - return false - end - local function scrollUp() - if scrollBarPosition > 1 then - scrollBarPosition = scrollBarPosition - 1 - updateScroll() - return true - end - return false - end - - if useScrollButtons then - --Make some scroll buttons - scrollUpButton = Instance.new("ImageButton") - scrollUpButton.Name = "ScrollUpButton" - scrollUpButton.BackgroundTransparency = 1 - scrollUpButton.Image = "rbxasset://textures/ui/scrollbuttonUp.png" - scrollUpButton.Size = UDim2.new(0,17,0,17) - scrollUpButton.Position = UDim2.new(1,-11,(1*.8)/((dropDownItemCount+1)*.8),0) - scrollUpButton.MouseButton1Click:connect( - function() - scrollMouseCount = scrollMouseCount + 1 - end) - scrollUpButton.MouseLeave:connect( - function() - scrollMouseCount = scrollMouseCount + 1 - end) - scrollUpButton.MouseButton1Down:connect( - function() - scrollMouseCount = scrollMouseCount + 1 - - scrollUp() - local val = scrollMouseCount - wait(0.5) - while val == scrollMouseCount do - if scrollUp() == false then - break - end - wait(0.1) - end - end) - - scrollUpButton.Parent = droppedDownMenu - - scrollDownButton = Instance.new("ImageButton") - scrollDownButton.Name = "ScrollDownButton" - scrollDownButton.BackgroundTransparency = 1 - scrollDownButton.Image = "rbxasset://textures/ui/scrollbuttonDown.png" - scrollDownButton.Size = UDim2.new(0,17,0,17) - scrollDownButton.Position = UDim2.new(1,-11,1,-11) - scrollDownButton.Parent = droppedDownMenu - scrollDownButton.MouseButton1Click:connect( - function() - scrollMouseCount = scrollMouseCount + 1 - end) - scrollDownButton.MouseLeave:connect( - function() - scrollMouseCount = scrollMouseCount + 1 - end) - scrollDownButton.MouseButton1Down:connect( - function() - scrollMouseCount = scrollMouseCount + 1 - - scrollDown() - local val = scrollMouseCount - wait(0.5) - while val == scrollMouseCount do - if scrollDown() == false then - break - end - wait(0.1) - end - end) - - local scrollbar = Instance.new("ImageLabel") - scrollbar.Name = "ScrollBar" - scrollbar.Image = "rbxasset://textures/ui/scrollbar.png" - scrollbar.BackgroundTransparency = 1 - scrollbar.Size = UDim2.new(0, 18, (dropDownItemCount*.8)/((dropDownItemCount+1)*.8), -(17) - 11 - 4) - scrollbar.Position = UDim2.new(1,-11,(1*.8)/((dropDownItemCount+1)*.8),17+2) - scrollbar.Parent = droppedDownMenu - end - - for i,item in ipairs(items) do - -- needed to maintain local scope for items in event listeners below - local button = choiceButton:clone() - if forRoblox then - button.RobloxLocked = true - end - button.Text = item - button.Parent = droppedDownMenu - button.MouseButton1Click:connect(function() - --Remove Highlight - button.TextColor3 = Color3.new(1,1,1) - button.BackgroundTransparency = 1 - - updateSelection(item) - onSelect(item) - - toggleVisibility() - end) - button.MouseEnter:connect(function() - --Add Highlight - button.TextColor3 = Color3.new(0,0,0) - button.BackgroundTransparency = 0 - end) - - button.MouseLeave:connect(function() - --Remove Highlight - button.TextColor3 = Color3.new(1,1,1) - button.BackgroundTransparency = 1 - end) - end - - --This does the initial layout of the buttons - updateScroll() - - local bigFakeButton = Instance.new("TextButton") - bigFakeButton.BackgroundTransparency = 1 - bigFakeButton.Name = "ClickCaptureButton" - bigFakeButton.Size = UDim2.new(0, 4000, 0, 3000) - bigFakeButton.Position = UDim2.new(0, -2000, 0, -1500) - bigFakeButton.ZIndex = 1 - bigFakeButton.Text = "" - bigFakeButton.Parent = droppedDownMenu - bigFakeButton.MouseButton1Click:connect(toggleVisibility) - - dropDownMenu.MouseButton1Click:connect(toggleVisibility) - return frame, updateSelection -end - -t.CreatePropertyDropDownMenu = function(instance, property, enum) - - local items = enum:GetEnumItems() - local names = {} - local nameToItem = {} - for i,obj in ipairs(items) do - names[i] = obj.Name - nameToItem[obj.Name] = obj - end - - local frame - local updateSelection - frame, updateSelection = t.CreateDropDownMenu(names, function(text) instance[property] = nameToItem[text] end) - - ScopedConnect(frame, instance, "Changed", - function(prop) - if prop == property then - updateSelection(instance[property].Name) - end - end, - function() - updateSelection(instance[property].Name) - end) - - return frame -end - -t.GetFontHeight = function(font, fontSize) - if font == nil or fontSize == nil then - error("Font and FontSize must be non-nil") - end - - if font == Enum.Font.Legacy then - if fontSize == Enum.FontSize.Size8 then - return 12 - elseif fontSize == Enum.FontSize.Size9 then - return 14 - elseif fontSize == Enum.FontSize.Size10 then - return 15 - elseif fontSize == Enum.FontSize.Size11 then - return 17 - elseif fontSize == Enum.FontSize.Size12 then - return 18 - elseif fontSize == Enum.FontSize.Size14 then - return 21 - elseif fontSize == Enum.FontSize.Size18 then - return 27 - elseif fontSize == Enum.FontSize.Size24 then - return 36 - elseif fontSize == Enum.FontSize.Size36 then - return 54 - elseif fontSize == Enum.FontSize.Size48 then - return 72 - else - error("Unknown FontSize") - end - elseif font == Enum.Font.Arial or font == Enum.Font.ArialBold then - if fontSize == Enum.FontSize.Size8 then - return 8 - elseif fontSize == Enum.FontSize.Size9 then - return 9 - elseif fontSize == Enum.FontSize.Size10 then - return 10 - elseif fontSize == Enum.FontSize.Size11 then - return 11 - elseif fontSize == Enum.FontSize.Size12 then - return 12 - elseif fontSize == Enum.FontSize.Size14 then - return 14 - elseif fontSize == Enum.FontSize.Size18 then - return 18 - elseif fontSize == Enum.FontSize.Size24 then - return 24 - elseif fontSize == Enum.FontSize.Size36 then - return 36 - elseif fontSize == Enum.FontSize.Size48 then - return 48 - else - error("Unknown FontSize") - end - else - error("Unknown Font " .. font) - end -end - -local function layoutGuiObjectsHelper(frame, guiObjects, settingsTable) - local totalPixels = frame.AbsoluteSize.Y - local pixelsRemaining = frame.AbsoluteSize.Y - for i, child in ipairs(guiObjects) do - if child:IsA("TextLabel") or child:IsA("TextButton") then - local isLabel = child:IsA("TextLabel") - if isLabel then - pixelsRemaining = pixelsRemaining - settingsTable["TextLabelPositionPadY"] - else - pixelsRemaining = pixelsRemaining - settingsTable["TextButtonPositionPadY"] - end - child.Position = UDim2.new(child.Position.X.Scale, child.Position.X.Offset, 0, totalPixels - pixelsRemaining) - child.Size = UDim2.new(child.Size.X.Scale, child.Size.X.Offset, 0, pixelsRemaining) - - if child.TextFits and child.TextBounds.Y < pixelsRemaining then - child.Visible = true - if isLabel then - child.Size = UDim2.new(child.Size.X.Scale, child.Size.X.Offset, 0, child.TextBounds.Y + settingsTable["TextLabelSizePadY"]) - else - child.Size = UDim2.new(child.Size.X.Scale, child.Size.X.Offset, 0, child.TextBounds.Y + settingsTable["TextButtonSizePadY"]) - end - - while not child.TextFits do - child.Size = UDim2.new(child.Size.X.Scale, child.Size.X.Offset, 0, child.AbsoluteSize.Y + 1) - end - pixelsRemaining = pixelsRemaining - child.AbsoluteSize.Y - - if isLabel then - pixelsRemaining = pixelsRemaining - settingsTable["TextLabelPositionPadY"] - else - pixelsRemaining = pixelsRemaining - settingsTable["TextButtonPositionPadY"] - end - else - child.Visible = false - pixelsRemaining = -1 - end - - else - --GuiObject - child.Position = UDim2.new(child.Position.X.Scale, child.Position.X.Offset, 0, totalPixels - pixelsRemaining) - pixelsRemaining = pixelsRemaining - child.AbsoluteSize.Y - child.Visible = (pixelsRemaining >= 0) - end - end -end - -t.LayoutGuiObjects = function(frame, guiObjects, settingsTable) - if not frame:IsA("GuiObject") then - error("Frame must be a GuiObject") - end - for i, child in ipairs(guiObjects) do - if not child:IsA("GuiObject") then - error("All elements that are layed out must be of type GuiObject") - end - end - - if not settingsTable then - settingsTable = {} - end - - if not settingsTable["TextLabelSizePadY"] then - settingsTable["TextLabelSizePadY"] = 0 - end - if not settingsTable["TextLabelPositionPadY"] then - settingsTable["TextLabelPositionPadY"] = 0 - end - if not settingsTable["TextButtonSizePadY"] then - settingsTable["TextButtonSizePadY"] = 12 - end - if not settingsTable["TextButtonPositionPadY"] then - settingsTable["TextButtonPositionPadY"] = 2 - end - - --Wrapper frame takes care of styled objects - local wrapperFrame = Instance.new("Frame") - wrapperFrame.Name = "WrapperFrame" - wrapperFrame.BackgroundTransparency = 1 - wrapperFrame.Size = UDim2.new(1,0,1,0) - wrapperFrame.Parent = frame - - for i, child in ipairs(guiObjects) do - child.Parent = wrapperFrame - end - - local recalculate = function() - wait() - layoutGuiObjectsHelper(wrapperFrame, guiObjects, settingsTable) - end - - frame.Changed:connect( - function(prop) - if prop == "AbsoluteSize" then - --Wait a heartbeat for it to sync in - recalculate() - end - end) - frame.AncestryChanged:connect(recalculate) - - layoutGuiObjectsHelper(wrapperFrame, guiObjects, settingsTable) -end - - -t.CreateSlider = function(steps,width,position) - local sliderGui = Instance.new("Frame") - sliderGui.Size = UDim2.new(1,0,1,0) - sliderGui.BackgroundTransparency = 1 - sliderGui.Name = "SliderGui" - - local areaSoak = Instance.new("TextButton") - areaSoak.Name = "AreaSoak" - areaSoak.Text = "" - areaSoak.BackgroundTransparency = 1 - areaSoak.Active = false - areaSoak.Size = UDim2.new(1,0,1,0) - areaSoak.Visible = false - areaSoak.ZIndex = 4 - areaSoak.Parent = sliderGui - - local sliderPosition = Instance.new("IntValue") - sliderPosition.Name = "SliderPosition" - sliderPosition.Value = 0 - sliderPosition.Parent = sliderGui - - local id = math.random(1,100) - - local bar = Instance.new("Frame") - bar.Name = "Bar" - bar.BackgroundColor3 = Color3.new(0,0,0) - if type(width) == "number" then - bar.Size = UDim2.new(0,width,0,5) - else - bar.Size = UDim2.new(0,200,0,5) - end - bar.BorderColor3 = Color3.new(95/255,95/255,95/255) - bar.ZIndex = 2 - bar.Parent = sliderGui - - if position["X"] and position["X"]["Scale"] and position["X"]["Offset"] and position["Y"] and position["Y"]["Scale"] and position["Y"]["Offset"] then - bar.Position = position - end - - local slider = Instance.new("ImageButton") - slider.Name = "Slider" - slider.BackgroundTransparency = 1 - slider.Image = "rbxasset://textures/ui/Slider.png" - slider.Position = UDim2.new(0,0,0.5,-10) - slider.Size = UDim2.new(0,20,0,20) - slider.ZIndex = 3 - slider.Parent = bar - - local areaSoakMouseMoveCon = nil - - areaSoak.MouseLeave:connect(function() - if areaSoak.Visible then - cancelSlide(areaSoak) - end - end) - areaSoak.MouseButton1Up:connect(function() - if areaSoak.Visible then - cancelSlide(areaSoak) - end - end) - - slider.MouseButton1Down:connect(function() - areaSoak.Visible = true - if areaSoakMouseMoveCon then areaSoakMouseMoveCon:disconnect() end - areaSoakMouseMoveCon = areaSoak.MouseMoved:connect(function(x,y) - setSliderPos(x,slider,sliderPosition,bar,steps) - end) - end) - - slider.MouseButton1Up:connect(function() cancelSlide(areaSoak) end) - - sliderPosition.Changed:connect(function(prop) - local relativePosX = (sliderPosition.Value - 1) / steps - slider.Position = UDim2.new(relativePosX,0,slider.Position.Y.Scale,slider.Position.Y.Offset) - end) - - return sliderGui, sliderPosition - -end - - -t.CreateScrollingFrame = function(orderList,scrollStyle) - local frame = Instance.new("Frame") - frame.Name = "ScrollingFrame" - frame.BackgroundTransparency = 1 - frame.Size = UDim2.new(1,0,1,0) - - local scrollUpButton = Instance.new("ImageButton") - scrollUpButton.Name = "ScrollUpButton" - scrollUpButton.BackgroundTransparency = 1 - scrollUpButton.Image = "rbxasset://textures/ui/scrollbuttonUp.png" - scrollUpButton.Size = UDim2.new(0,17,0,17) - - - local scrollDownButton = Instance.new("ImageButton") - scrollDownButton.Name = "ScrollDownButton" - scrollDownButton.BackgroundTransparency = 1 - scrollDownButton.Image = "rbxasset://textures/ui/scrollbuttonDown.png" - scrollDownButton.Size = UDim2.new(0,17,0,17) - - local style = "simple" - if scrollStyle and tostring(scrollStyle) then - style = scrollStyle - end - - local scrollPosition = 1 - local rowSize = 1 - - local layoutGridScrollBar = function() - local guiObjects = {} - if orderList then - for i, child in ipairs(orderList) do - if child.Parent == frame then - table.insert(guiObjects, child) - end - end - else - local children = frame:GetChildren() - if children then - for i, child in ipairs(children) do - if child:IsA("GuiObject") then - table.insert(guiObjects, child) - end - end - end - end - if #guiObjects == 0 then - scrollUpButton.Active = false - scrollDownButton.Active = false - scrollPosition = 1 - return - end - - if scrollPosition > #guiObjects then - scrollPosition = #guiObjects - end - - local totalPixelsY = frame.AbsoluteSize.Y - local pixelsRemainingY = frame.AbsoluteSize.Y - - local totalPixelsX = frame.AbsoluteSize.X - - local xCounter = 0 - local rowSizeCounter = 0 - local setRowSize = true - - local pixelsBelowScrollbar = 0 - local pos = #guiObjects - while pixelsBelowScrollbar < totalPixelsY and pos >= 1 do - if pos >= scrollPosition then - pixelsBelowScrollbar = pixelsBelowScrollbar + guiObjects[pos].AbsoluteSize.Y - else - xCounter = xCounter + guiObjects[pos].AbsoluteSize.X - rowSizeCounter = rowSizeCounter + 1 - if xCounter >= totalPixelsX then - if setRowSize then - rowSize = rowSizeCounter - 1 - setRowSize = false - end - - rowSizeCounter = 0 - xCounter = 0 - if pixelsBelowScrollbar + guiObjects[pos].AbsoluteSize.Y <= totalPixelsY then - --It fits, so back up our scroll position - pixelsBelowScrollbar = pixelsBelowScrollbar + guiObjects[pos].AbsoluteSize.Y - if scrollPosition <= rowSize then - scrollPosition = rowSize - break - else - --print("Backing up ScrollPosition from -- " ..scrollPosition) - scrollPosition = scrollPosition - rowSize - end - else - break - end - end - end - pos = pos - 1 - end - - xCounter = 0 - --print("ScrollPosition = " .. scrollPosition) - pos = scrollPosition - rowSizeCounter = 0 - setRowSize = true - local lastChildSize = 0 - - local xOffset,yOffset = 0 - if guiObjects[1] then - yOffset = math.ceil(math.floor(math.fmod(totalPixelsY,guiObjects[1].AbsoluteSize.X))/2) - xOffset = math.ceil(math.floor(math.fmod(totalPixelsX,guiObjects[1].AbsoluteSize.Y))/2) - end - - for i, child in ipairs(guiObjects) do - if i < scrollPosition then - --print("Hiding " .. child.Name) - child.Visible = false - else - if pixelsRemainingY < 0 then - --print("Out of Space " .. child.Name) - child.Visible = false - else - --print("Laying out " .. child.Name) - --GuiObject - if setRowSize then rowSizeCounter = rowSizeCounter + 1 end - if xCounter + child.AbsoluteSize.X >= totalPixelsX then - if setRowSize then - rowSize = rowSizeCounter - 1 - setRowSize = false - end - xCounter = 0 - pixelsRemainingY = pixelsRemainingY - child.AbsoluteSize.Y - end - child.Position = UDim2.new(child.Position.X.Scale,xCounter + xOffset, 0, totalPixelsY - pixelsRemainingY + yOffset) - xCounter = xCounter + child.AbsoluteSize.X - child.Visible = ((pixelsRemainingY - child.AbsoluteSize.Y) >= 0) - lastChildSize = child.AbsoluteSize - end - end - end - - scrollUpButton.Active = (scrollPosition > 1) - if lastChildSize == 0 then - scrollDownButton.Active = false - else - scrollDownButton.Active = ((pixelsRemainingY - lastChildSize.Y) < 0) - end - end - - - local layoutSimpleScrollBar = function() - local guiObjects = {} - - if orderList then - for i, child in ipairs(orderList) do - if child.Parent == frame then - table.insert(guiObjects, child) - end - end - else - local children = frame:GetChildren() - if children then - for i, child in ipairs(children) do - if child:IsA("GuiObject") then - table.insert(guiObjects, child) - end - end - end - end - if #guiObjects == 0 then - scrollUpButton.Active = false - scrollDownButton.Active = false - scrollPosition = 1 - return - end - - if scrollPosition > #guiObjects then - scrollPosition = #guiObjects - end - - local totalPixels = frame.AbsoluteSize.Y - local pixelsRemaining = frame.AbsoluteSize.Y - - local pixelsBelowScrollbar = 0 - local pos = #guiObjects - while pixelsBelowScrollbar < totalPixels and pos >= 1 do - if pos >= scrollPosition then - pixelsBelowScrollbar = pixelsBelowScrollbar + guiObjects[pos].AbsoluteSize.Y - else - if pixelsBelowScrollbar + guiObjects[pos].AbsoluteSize.Y <= totalPixels then - --It fits, so back up our scroll position - pixelsBelowScrollbar = pixelsBelowScrollbar + guiObjects[pos].AbsoluteSize.Y - if scrollPosition <= 1 then - scrollPosition = 1 - break - else - --print("Backing up ScrollPosition from -- " ..scrollPosition) - scrollPosition = scrollPosition - 1 - end - else - break - end - end - pos = pos - 1 - end - - --print("ScrollPosition = " .. scrollPosition) - pos = scrollPosition - for i, child in ipairs(guiObjects) do - if i < scrollPosition then - --print("Hiding " .. child.Name) - child.Visible = false - else - if pixelsRemaining < 0 then - --print("Out of Space " .. child.Name) - child.Visible = false - else - --print("Laying out " .. child.Name) - --GuiObject - child.Position = UDim2.new(child.Position.X.Scale, child.Position.X.Offset, 0, totalPixels - pixelsRemaining) - pixelsRemaining = pixelsRemaining - child.AbsoluteSize.Y - child.Visible = (pixelsRemaining >= 0) - end - end - end - scrollUpButton.Active = (scrollPosition > 1) - scrollDownButton.Active = (pixelsRemaining < 0) - end - - local reentrancyGuard = false - local recalculate = function() - if reentrancyGuard then - return - end - reentrancyGuard = true - wait() - local success, err = nil - if style == "grid" then - success, err = pcall(function() layoutGridScrollBar(frame) end) - elseif style == "simple" then - success, err = pcall(function() layoutSimpleScrollBar(frame) end) - end - if not success then print(err) end - - reentrancyGuard = false - end - - local scrollUp = function() - if scrollUpButton.Active then - scrollPosition = scrollPosition - rowSize - recalculate() - end - end - - local scrollDown = function() - if scrollDownButton.Active then - scrollPosition = scrollPosition + rowSize - recalculate() - end - end - - local scrollMouseCount = 0 - scrollUpButton.MouseButton1Click:connect( - function() - --print("Up-MouseButton1Click") - scrollMouseCount = scrollMouseCount + 1 - end) - scrollUpButton.MouseLeave:connect( - function() - --print("Up-Leave") - scrollMouseCount = scrollMouseCount + 1 - end) - - scrollUpButton.MouseButton1Down:connect( - function() - --print("Up-Down") - scrollMouseCount = scrollMouseCount + 1 - - scrollUp() - local val = scrollMouseCount - wait(0.5) - while val == scrollMouseCount do - if scrollUp() == false then - break - end - wait(0.1) - end - end) - - scrollDownButton.MouseButton1Click:connect( - function() - --print("Down-Click") - scrollMouseCount = scrollMouseCount + 1 - end) - scrollDownButton.MouseLeave:connect( - function() - --print("Down-Leave") - scrollMouseCount = scrollMouseCount + 1 - end) - scrollDownButton.MouseButton1Down:connect( - function() - --print("Down-Down") - scrollMouseCount = scrollMouseCount + 1 - - scrollDown() - local val = scrollMouseCount - wait(0.5) - while val == scrollMouseCount do - if scrollDown() == false then - break - end - wait(0.1) - end - end) - - - frame.ChildAdded:connect(function() - recalculate() - end) - - frame.ChildRemoved:connect(function() - recalculate() - end) - - frame.Changed:connect( - function(prop) - if prop == "AbsoluteSize" then - --Wait a heartbeat for it to sync in - recalculate() - end - end) - frame.AncestryChanged:connect(recalculate) - - return frame, scrollUpButton, scrollDownButton, recalculate -end -local function binaryGrow(min, max, fits) - if min > max then - return min - end - local biggestLegal = min - - while min <= max do - local mid = min + math.floor((max - min) / 2) - if fits(mid) and (biggestLegal == nil or biggestLegal < mid) then - biggestLegal = mid - - --Try growing - min = mid + 1 - else - --Doesn't fit, shrink - max = mid - 1 - end - end - return biggestLegal -end - - -local function binaryShrink(min, max, fits) - if min > max then - return min - end - local smallestLegal = max - - while min <= max do - local mid = min + math.floor((max - min) / 2) - if fits(mid) and (smallestLegal == nil or smallestLegal > mid) then - smallestLegal = mid - - --It fits, shrink - max = mid - 1 - else - --Doesn't fit, grow - min = mid + 1 - end - end - return smallestLegal -end - - -local function getGuiOwner(instance) - while instance ~= nil do - if instance:IsA("ScreenGui") or instance:IsA("BillboardGui") then - return instance - end - instance = instance.Parent - end - return nil -end - -t.AutoTruncateTextObject = function(textLabel) - local text = textLabel.Text - - local fullLabel = textLabel:Clone() - fullLabel.Name = "Full" .. textLabel.Name - fullLabel.BorderSizePixel = 0 - fullLabel.BackgroundTransparency = 0 - fullLabel.Text = text - fullLabel.TextXAlignment = Enum.TextXAlignment.Center - fullLabel.Position = UDim2.new(0,-3,0,0) - fullLabel.Size = UDim2.new(0,100,1,0) - fullLabel.Visible = false - fullLabel.Parent = textLabel - - local shortText = nil - local mouseEnterConnection = nil - local mouseLeaveConnection= nil - - local checkForResize = function() - if getGuiOwner(textLabel) == nil then - return - end - textLabel.Text = text - if textLabel.TextFits then - --Tear down the rollover if it is active - if mouseEnterConnection then - mouseEnterConnection:disconnect() - mouseEnterConnection = nil - end - if mouseLeaveConnection then - mouseLeaveConnection:disconnect() - mouseLeaveConnection = nil - end - else - local len = string.len(text) - textLabel.Text = text .. "~" - - --Shrink the text - local textSize = binaryGrow(0, len, - function(pos) - if pos == 0 then - textLabel.Text = "~" - else - textLabel.Text = string.sub(text, 1, pos) .. "~" - end - return textLabel.TextFits - end) - shortText = string.sub(text, 1, textSize) .. "~" - textLabel.Text = shortText - - --Make sure the fullLabel fits - if not fullLabel.TextFits then - --Already too small, grow it really bit to start - fullLabel.Size = UDim2.new(0, 10000, 1, 0) - end - - --Okay, now try to binary shrink it back down - local fullLabelSize = binaryShrink(textLabel.AbsoluteSize.X,fullLabel.AbsoluteSize.X, - function(size) - fullLabel.Size = UDim2.new(0, size, 1, 0) - return fullLabel.TextFits - end) - fullLabel.Size = UDim2.new(0,fullLabelSize+6,1,0) - - --Now setup the rollover effects, if they are currently off - if mouseEnterConnection == nil then - mouseEnterConnection = textLabel.MouseEnter:connect( - function() - fullLabel.ZIndex = textLabel.ZIndex + 1 - fullLabel.Visible = true - --textLabel.Text = "" - end) - end - if mouseLeaveConnection == nil then - mouseLeaveConnection = textLabel.MouseLeave:connect( - function() - fullLabel.Visible = false - --textLabel.Text = shortText - end) - end - end - end - textLabel.AncestryChanged:connect(checkForResize) - textLabel.Changed:connect( - function(prop) - if prop == "AbsoluteSize" then - checkForResize() - end - end) - - checkForResize() - - local function changeText(newText) - text = newText - fullLabel.Text = text - checkForResize() - end - - return textLabel, changeText -end - -local function TransitionTutorialPages(fromPage, toPage, transitionFrame, currentPageValue) - if fromPage then - fromPage.Visible = false - if transitionFrame.Visible == false then - transitionFrame.Size = fromPage.Size - transitionFrame.Position = fromPage.Position - end - else - if transitionFrame.Visible == false then - transitionFrame.Size = UDim2.new(0.0,50,0.0,50) - transitionFrame.Position = UDim2.new(0.5,-25,0.5,-25) - end - end - transitionFrame.Visible = true - currentPageValue.Value = nil - - local newsize, newPosition - if toPage then - --Make it visible so it resizes - toPage.Visible = true - - newSize = toPage.Size - newPosition = toPage.Position - - toPage.Visible = false - else - newSize = UDim2.new(0.0,50,0.0,50) - newPosition = UDim2.new(0.5,-25,0.5,-25) - end - transitionFrame:TweenSizeAndPosition(newSize, newPosition, Enum.EasingDirection.InOut, Enum.EasingStyle.Quad, 0.3, true, - function(state) - if state == Enum.TweenStatus.Completed then - transitionFrame.Visible = false - if toPage then - toPage.Visible = true - currentPageValue.Value = toPage - end - end - end) -end - -t.CreateTutorial = function(name, tutorialKey, createButtons) - local frame = Instance.new("Frame") - frame.Name = "Tutorial-" .. name - frame.BackgroundTransparency = 1 - frame.Size = UDim2.new(0.6, 0, 0.6, 0) - frame.Position = UDim2.new(0.2, 0, 0.2, 0) - - local transitionFrame = Instance.new("Frame") - transitionFrame.Name = "TransitionFrame" - transitionFrame.Style = Enum.FrameStyle.RobloxRound - transitionFrame.Size = UDim2.new(0.6, 0, 0.6, 0) - transitionFrame.Position = UDim2.new(0.2, 0, 0.2, 0) - transitionFrame.Visible = false - transitionFrame.Parent = frame - - local currentPageValue = Instance.new("ObjectValue") - currentPageValue.Name = "CurrentTutorialPage" - currentPageValue.Value = nil - currentPageValue.Parent = frame - - local boolValue = Instance.new("BoolValue") - boolValue.Name = "Buttons" - boolValue.Value = createButtons - boolValue.Parent = frame - - local pages = Instance.new("Frame") - pages.Name = "Pages" - pages.BackgroundTransparency = 1 - pages.Size = UDim2.new(1,0,1,0) - pages.Parent = frame - - local function getVisiblePageAndHideOthers() - local visiblePage = nil - local children = pages:GetChildren() - if children then - for i,child in ipairs(children) do - if child.Visible then - if visiblePage then - child.Visible = false - else - visiblePage = child - end - end - end - end - return visiblePage - end - - local showTutorial = function(alwaysShow) - if alwaysShow or UserSettings().GameSettings:GetTutorialState(tutorialKey) == false then - print("Showing tutorial-",tutorialKey) - local currentTutorialPage = getVisiblePageAndHideOthers() - - local firstPage = pages:FindFirstChild("TutorialPage1") - if firstPage then - TransitionTutorialPages(currentTutorialPage, firstPage, transitionFrame, currentPageValue) - else - error("Could not find TutorialPage1") - end - end - end - - local dismissTutorial = function() - local currentTutorialPage = getVisiblePageAndHideOthers() - - if currentTutorialPage then - TransitionTutorialPages(currentTutorialPage, nil, transitionFrame, currentPageValue) - end - - UserSettings().GameSettings:SetTutorialState(tutorialKey, true) - end - - local gotoPage = function(pageNum) - local page = pages:FindFirstChild("TutorialPage" .. pageNum) - local currentTutorialPage = getVisiblePageAndHideOthers() - TransitionTutorialPages(currentTutorialPage, page, transitionFrame, currentPageValue) - end - - return frame, showTutorial, dismissTutorial, gotoPage -end - -local function CreateBasicTutorialPage(name, handleResize, skipTutorial) - local frame = Instance.new("Frame") - frame.Name = "TutorialPage" - frame.Style = Enum.FrameStyle.RobloxRound - frame.Size = UDim2.new(0.6, 0, 0.6, 0) - frame.Position = UDim2.new(0.2, 0, 0.2, 0) - frame.Visible = false - - local frameHeader = Instance.new("TextLabel") - frameHeader.Name = "Header" - frameHeader.Text = name - frameHeader.BackgroundTransparency = 1 - frameHeader.FontSize = Enum.FontSize.Size24 - frameHeader.Font = Enum.Font.ArialBold - frameHeader.TextColor3 = Color3.new(1,1,1) - frameHeader.TextXAlignment = Enum.TextXAlignment.Center - frameHeader.TextWrap = true - frameHeader.Size = UDim2.new(1,-55, 0, 22) - frameHeader.Position = UDim2.new(0,0,0,0) - frameHeader.Parent = frame - - local skipButton = Instance.new("ImageButton") - skipButton.Name = "SkipButton" - skipButton.AutoButtonColor = false - skipButton.BackgroundTransparency = 1 - skipButton.Image = "http://www.roblox.com/asset/?id=37813546" - skipButton.MouseButton1Click:connect(function() - skipButton.Image = "http://www.roblox.com/asset/?id=37813546" - skipTutorial() - end) - skipButton.MouseEnter:connect(function() - skipButton.Image = "http://www.roblox.com/asset/?id=37813556" - end) - skipButton.MouseLeave:connect(function() - skipButton.Image = "http://www.roblox.com/asset/?id=37813546" - end) - skipButton.Size = UDim2.new(0, 55, 0, 22) - skipButton.Position = UDim2.new(1, -55, 0, 0) - skipButton.Parent = frame - - local innerFrame = Instance.new("Frame") - innerFrame.Name = "ContentFrame" - innerFrame.BackgroundTransparency = 1 - innerFrame.Position = UDim2.new(0,0,0,22) - innerFrame.Parent = frame - - local nextButton = Instance.new("TextButton") - nextButton.Name = "NextButton" - nextButton.Text = "Next" - nextButton.TextColor3 = Color3.new(1,1,1) - nextButton.Font = Enum.Font.Arial - nextButton.FontSize = Enum.FontSize.Size18 - nextButton.Style = Enum.ButtonStyle.RobloxButtonDefault - nextButton.Size = UDim2.new(0,80, 0, 32) - nextButton.Position = UDim2.new(0.5, 5, 1, -32) - nextButton.Active = false - nextButton.Visible = false - nextButton.Parent = frame - - local prevButton = Instance.new("TextButton") - prevButton.Name = "PrevButton" - prevButton.Text = "Previous" - prevButton.TextColor3 = Color3.new(1,1,1) - prevButton.Font = Enum.Font.Arial - prevButton.FontSize = Enum.FontSize.Size18 - prevButton.Style = Enum.ButtonStyle.RobloxButton - prevButton.Size = UDim2.new(0,80, 0, 32) - prevButton.Position = UDim2.new(0.5, -85, 1, -32) - prevButton.Active = false - prevButton.Visible = false - prevButton.Parent = frame - - innerFrame.Size = UDim2.new(1,0,1,-22-35) - - local parentConnection = nil - - local function basicHandleResize() - if frame.Visible and frame.Parent then - local maxSize = math.min(frame.Parent.AbsoluteSize.X, frame.Parent.AbsoluteSize.Y) - handleResize(200,maxSize) - end - end - - frame.Changed:connect( - function(prop) - if prop == "Parent" then - if parentConnection ~= nil then - parentConnection:disconnect() - parentConnection = nil - end - if frame.Parent and frame.Parent:IsA("GuiObject") then - parentConnection = frame.Parent.Changed:connect( - function(parentProp) - if parentProp == "AbsoluteSize" then - wait() - basicHandleResize() - end - end) - basicHandleResize() - end - end - - if prop == "Visible" then - basicHandleResize() - end - end) - - return frame, innerFrame -end - -t.CreateTextTutorialPage = function(name, text, skipTutorialFunc) - local frame = nil - local contentFrame = nil - - local textLabel = Instance.new("TextLabel") - textLabel.BackgroundTransparency = 1 - textLabel.TextColor3 = Color3.new(1,1,1) - textLabel.Text = text - textLabel.TextWrap = true - textLabel.TextXAlignment = Enum.TextXAlignment.Left - textLabel.TextYAlignment = Enum.TextYAlignment.Center - textLabel.Font = Enum.Font.Arial - textLabel.FontSize = Enum.FontSize.Size14 - textLabel.Size = UDim2.new(1,0,1,0) - - local function handleResize(minSize, maxSize) - size = binaryShrink(minSize, maxSize, - function(size) - frame.Size = UDim2.new(0, size, 0, size) - return textLabel.TextFits - end) - frame.Size = UDim2.new(0, size, 0, size) - frame.Position = UDim2.new(0.5, -size/2, 0.5, -size/2) - end - - frame, contentFrame = CreateBasicTutorialPage(name, handleResize, skipTutorialFunc) - textLabel.Parent = contentFrame - - return frame -end - -t.CreateImageTutorialPage = function(name, imageAsset, x, y, skipTutorialFunc) - local frame = nil - local contentFrame = nil - - local imageLabel = Instance.new("ImageLabel") - imageLabel.BackgroundTransparency = 1 - imageLabel.Image = imageAsset - imageLabel.Size = UDim2.new(0,x,0,y) - imageLabel.Position = UDim2.new(0.5,-x/2,0.5,-y/2) - - local function handleResize(minSize, maxSize) - size = binaryShrink(minSize, maxSize, - function(size) - return size >= x and size >= y - end) - if size >= x and size >= y then - imageLabel.Size = UDim2.new(0,x, 0,y) - imageLabel.Position = UDim2.new(0.5,-x/2, 0.5, -y/2) - else - if x > y then - --X is limiter, so - imageLabel.Size = UDim2.new(1,0,y/x,0) - imageLabel.Position = UDim2.new(0,0, 0.5 - (y/x)/2, 0) - else - --Y is limiter - imageLabel.Size = UDim2.new(x/y,0,1, 0) - imageLabel.Position = UDim2.new(0.5-(x/y)/2, 0, 0, 0) - end - end - frame.Size = UDim2.new(0, size, 0, size) - frame.Position = UDim2.new(0.5, -size/2, 0.5, -size/2) - end - - frame, contentFrame = CreateBasicTutorialPage(name, handleResize, skipTutorialFunc) - imageLabel.Parent = contentFrame - - return frame -end - -t.AddTutorialPage = function(tutorial, tutorialPage) - local transitionFrame = tutorial.TransitionFrame - local currentPageValue = tutorial.CurrentTutorialPage - - if not tutorial.Buttons.Value then - tutorialPage.ContentFrame.Size = UDim2.new(1,0,1,-22) - tutorialPage.NextButton.Parent = nil - tutorialPage.PrevButton.Parent = nil - end - - local children = tutorial.Pages:GetChildren() - if children and #children > 0 then - tutorialPage.Name = "TutorialPage" .. (#children+1) - local previousPage = children[#children] - if not previousPage:IsA("GuiObject") then - error("All elements under Pages must be GuiObjects") - end - - if tutorial.Buttons.Value then - if previousPage.NextButton.Active then - error("NextButton already Active on previousPage, please only add pages with RbxGui.AddTutorialPage function") - end - previousPage.NextButton.MouseButton1Click:connect( - function() - TransitionTutorialPages(previousPage, tutorialPage, transitionFrame, currentPageValue) - end) - previousPage.NextButton.Active = true - previousPage.NextButton.Visible = true - - if tutorialPage.PrevButton.Active then - error("PrevButton already Active on tutorialPage, please only add pages with RbxGui.AddTutorialPage function") - end - tutorialPage.PrevButton.MouseButton1Click:connect( - function() - TransitionTutorialPages(tutorialPage, previousPage, transitionFrame, currentPageValue) - end) - tutorialPage.PrevButton.Active = true - tutorialPage.PrevButton.Visible = true - end - - tutorialPage.Parent = tutorial.Pages - else - --First child - tutorialPage.Name = "TutorialPage1" - tutorialPage.Parent = tutorial.Pages - end -end - -t.Help = - function(funcNameOrFunc) - --input argument can be a string or a function. Should return a description (of arguments and expected side effects) - if funcNameOrFunc == "CreatePropertyDropDownMenu" or funcNameOrFunc == t.CreatePropertyDropDownMenu then - return "Function CreatePropertyDropDownMenu. " .. - "Arguments: (instance, propertyName, enumType). " .. - "Side effect: returns a container with a drop-down-box that is linked to the 'property' field of 'instance' which is of type 'enumType'" - end - if funcNameOrFunc == "CreateDropDownMenu" or funcNameOrFunc == t.CreateDropDownMenu then - return "Function CreateDropDownMenu. " .. - "Arguments: (items, onItemSelected). " .. - "Side effect: Returns 2 results, a container to the gui object and a 'updateSelection' function for external updating. The container is a drop-down-box created around a list of items" - end - if funcNameOrFunc == "CreateMessageDialog" or funcNameOrFunc == t.CreateMessageDialog then - return "Function CreateMessageDialog. " .. - "Arguments: (title, message, buttons). " .. - "Side effect: Returns a gui object of a message box with 'title' and 'message' as passed in. 'buttons' input is an array of Tables contains a 'Text' and 'Function' field for the text/callback of each button" - end - if funcNameOrFunc == "CreateStyledMessageDialog" or funcNameOrFunc == t.CreateStyledMessageDialog then - return "Function CreateStyledMessageDialog. " .. - "Arguments: (title, message, style, buttons). " .. - "Side effect: Returns a gui object of a message box with 'title' and 'message' as passed in. 'buttons' input is an array of Tables contains a 'Text' and 'Function' field for the text/callback of each button, 'style' is a string, either Error, Notify or Confirm" - end - if funcNameOrFunc == "GetFontHeight" or funcNameOrFunc == t.GetFontHeight then - return "Function GetFontHeight. " .. - "Arguments: (font, fontSize). " .. - "Side effect: returns the size in pixels of the given font + fontSize" - end - if funcNameOrFunc == "LayoutGuiObjects" or funcNameOrFunc == t.LayoutGuiObjects then - - end - if funcNameOrFunc == "CreateScrollingFrame" or funcNameOrFunc == t.CreateScrollingFrame then - return "Function CreateScrollingFrame. " .. - "Arguments: (orderList, style) " .. - "Side effect: returns 4 objects, (scrollFrame, scrollUpButton, scrollDownButton, recalculateFunction). 'scrollFrame' can be filled with GuiObjects. It will lay them out and allow scrollUpButton/scrollDownButton to interact with them. Orderlist is optional (and specifies the order to layout the children. Without orderlist, it uses the children order. style is also optional, and allows for a 'grid' styling if style is passed 'grid' as a string. recalculateFunction can be called when a relayout is needed (when orderList changes)" - end - if funcNameOrFunc == "AutoTruncateTextObject" or funcNameOrFunc == t.AutoTruncateTextObject then - return "Function AutoTruncateTextObject. " .. - "Arguments: (textLabel) " .. - "Side effect: returns 2 objects, (textLabel, changeText). The 'textLabel' input is modified to automatically truncate text (with ellipsis), if it gets too small to fit. 'changeText' is a function that can be used to change the text, it takes 1 string as an argument" - end - if funcNameOrFunc == "CreateSlider" or funcNameOrFunc == t.CreateSlider then - return "Function CreateSlider. " .. - "Arguments: (steps, width, position) " .. - "Side effect: returns 2 objects, (sliderGui, sliderPosition). The 'steps' argument specifies how many different positions the slider can hold along the bar. 'width' specifies in pixels how wide the bar should be (modifiable afterwards if desired). 'position' argument should be a UDim2 for slider positioning. 'sliderPosition' is an IntValue whose current .Value specifies the specific step the slider is currently on." - end - end - -local NewPlayerListGui = Instance.new("ScreenGui",script.Parent) -NewPlayerListGui.Name = "NewPlayerList" - -coroutine.resume(coroutine.create(function() -NewPlayerListGui.Parent = game.CoreGui -if game.CoreGui:FindFirstChild("NewPlayerList") then -game.CoreGui["NewPlayerList"].Parent = nil -end end)) - -local localTesting = true - -local friendWord = "Friend" -local friendWordLowercase = "friend" - -local testFriendingPlaces = {} -testFriendingPlaces[41324860] = true -local enableFriendingGlobally = false - -local testPlayerListPlaces = {} -testPlayerListPlaces[41324860] = true -testPlayerListPlaces[10042455] = true -local enablePlayerListGlobally = false - -local bigEasingStyle = Enum.EasingStyle.Back -local smallEasingStyle = Enum.EasingStyle.Quart -local lightBackground = true - -local function waitForChild(instance, name) - while not instance:FindFirstChild(name) do - instance.ChildAdded:wait() - end -end - -local function waitForProperty(instance, prop) - while not instance[prop] do - instance.Changed:wait() - end -end - -local function Color3I(r,g,b) - return Color3.new(r/255,g/255,b/255) -end - -function robloxLock(instance) -end - -function ArrayRemove(t, obj) - for i, obj2 in ipairs(t) do - if obj == obj2 then - table.remove(t, i) - return true - end - end - return false -end - -local function getPlayers() - local result = {} - local players = game:GetService("Players"):GetChildren() - if players then - for i, player in ipairs(players) do - if player:IsA("Player") then - table.insert(result, player) - end - end - end - return result -end - -local brickColorTable = {} -for i = 0, 63 do - brickColorTable[BrickColor.palette(i).Name] = BrickColor.palette(i).Color -end - -local function remapColor(i, j) - brickColorTable[BrickColor.palette(i).Name] = BrickColor.palette(j).Color -end - -remapColor(13, 12) -remapColor(14, 12) -remapColor(15, 12) -remapColor(61, 29) -remapColor(63, 62) -remapColor(56, 50) -remapColor(45, 53) -remapColor(51, 20) -remapColor(4, 20) -remapColor(59, 35) -remapColor(60, 29) - -local function getColor(brickColor) - if brickColorTable[brickColor.Name] then - return brickColorTable[brickColor.Name] - else - return brickColor.Color; - end -end - - - -local function getTeams() - local result = {} - local teams = game:GetService("Teams"):GetChildren() - for i, team in ipairs(teams) do - if team:IsA("Team") then - table.insert(result, team) - end - end - return result -end - -local supportFriends = false -local currentBoardType = "PlayerList" -local currentStatCount = 0 - -local createBoardsFunction = nil - - -local playerTable = {} -local teamTable = {} -local teamColorTable = {} - -local removePlayerFunction = nil -local recreatePlayerFunction = nil -local addPlayerFunction = function(player) - if recreatePlayerFunction then - recreatePlayerFunction(player) - end -end -local sortPlayerListsFunction = nil - -local minimizedState = nil -local bigWindowImposter = nil -local smallWindowPosition = UDim2.new(0, -20, 0,5)--UDim2.new(0, 0, 0,0) -local smallWindowSize = UDim2.new(1,0,1,0)--UDim2.new(1,5,1,0) -local bigWindowSize = UDim2.new(0.6,0,0.6,0) -local bigWindowPosition = UDim2.new(.2, 0, .2,0) - -local debounceTeamsChanged = false - -local currentWindowState = "Small" -local previousWindowState = nil -local transitionWindowsFunction = nil - -local container = nil -local topRightTrayContainer = nil - -local playerContextMenu = nil -local contextMenuElements = {} - -local function addContextMenuLabel(getText1, getText2, isVisible) - local t = {} - t.Type = "Label" - t.GetText1 = getText1 - t.GetText2 = getText2 - t.IsVisible = isVisible - table.insert(contextMenuElements, t) -end -local function addContextMenuButton(text, isVisible, isActive, doIt) - local t = {} - t.Text = text - t.Type = "Button" - t.IsVisible = isVisible - t.IsActive = isActive - t.DoIt = doIt - table.insert(contextMenuElements, t) -end - -local function getFriendStatus(player) - if player == game.Players.LocalPlayer then - return Enum.FriendStatus.NotFriend - else - return game.Players.LocalPlayer:GetFriendStatus(player) - end -end ---Populate the ContextMenus -addContextMenuLabel( - --GetText1 - function(player) - return "Loading..." - end, - --GetText2 - nil, - --IsVisible - function(player) - return getFriendStatus(player) == Enum.FriendStatus.Unknown - end) - ---[[ -addContextMenuLabel( - --GetText1 - function(player) - return player.Name - end, - --GetText2 - nil, - --IsVisible - function(player) - return true - end)]]-- -addContextMenuButton("Send " .. friendWord .. " Request", - --IsVisible - function(player) - return getFriendStatus(player) == Enum.FriendStatus.NotFriend - end, - --IsActive - function(player) - return true - end, - --DoIt - function(player) - return game.Players.LocalPlayer:RequestFriendship(player) - end -) -addContextMenuButton("Un" .. friendWordLowercase, - --IsVisible - function(player) - return getFriendStatus(player) == Enum.FriendStatus.Friend - end, - --IsActive - function(player) - return true - end, - --DoIt - function(player) - return game.Players.LocalPlayer:RevokeFriendship(player) - end -) -addContextMenuButton("Accept " .. friendWord .. " Request", - --IsVisible - function(player) - return getFriendStatus(player) == Enum.FriendStatus.FriendRequestReceived - end, - --IsActive - function(player) - return true - end, - --DoIt - function(player) - return game.Players.LocalPlayer:RequestFriendship(player) - end -) - -addContextMenuButton("Deny " .. friendWord .. " Request", - --IsVisible - function(player) - return getFriendStatus(player) == Enum.FriendStatus.FriendRequestReceived - end, - --IsActive - function(player) - return true - end, - --DoIt - function(player) - return game.Players.LocalPlayer:RevokeFriendship(player) - end -) - -addContextMenuButton("Cancel " .. friendWord .. " Request", - --IsVisible - function(player) - return getFriendStatus(player) == Enum.FriendStatus.FriendRequestSent - end, - --IsActive - function(player) - return true - end, - --DoIt - function(player) - return game.Players.LocalPlayer:RevokeFriendship(player) - end -) - - -local function getStatColumns(players) - for i, player in ipairs(players) do - local leaderstats = player:FindFirstChild("leaderstats") - if leaderstats then - --print(player, " is King of the List") - local stats = {} - local children = leaderstats:GetChildren() - if children then - for i, stat in ipairs(children) do - if stat:IsA("IntValue") then - table.insert(stats, stat.Name) - else - --TODO: This should check for IntValue only but current ScoreHud does not - table.insert(stats, stat.Name) - end - end - end - return stats - end - end - return nil -end - -local function determineBoardType() - local players = getPlayers() - - local foundLeaderstats = false - local numStats = 0 - local foundTeam = false - - local stats = getStatColumns(players) - if stats then - foundLeaderstats = true - numStats = #stats - end - - for i, player in ipairs(players) do - if not foundTeam then - if not player.Neutral then - foundTeam = true - break - end - end - end - - if foundLeaderstats and foundTeam then - return "TeamScore", numStats - elseif foundLeaderstats then - return "PlayerScore", numStats - elseif foundTeam then - return "TeamList", numStats - else - return "PlayerList", numStats - end -end - -local function toggleBigWindow() - if container == nil then - return - end - - if currentWindowState == "Big" then - --Hide it - if previousWindowState == nil or previousWindowState == "Big" or previousWindowState == "None" then - transitionWindowsFunction("None") - else - transitionWindowsFunction("Small") - end - else - previousWindowState = currentWindowState - transitionWindowsFunction("Big") - end -end -local previousBigPlayerList = nil -local function rebuildBoard(owner, boardType, numStats) - print("RebuildBoard") - if topRightTrayContainer == nil then - topRightTrayContainer = owner:FindFirstChild("PlayerListTopRightFrame") - if topRightTrayContainer == nil then - topRightTrayContainer = Instance.new("Frame") - topRightTrayContainer.Name = "PlayerListTopRightFrame" - topRightTrayContainer.BackgroundTransparency = 1 - topRightTrayContainer.Size = UDim2.new(0.2, 16, 0.42, 16)--UDim2.new(0.2, 0, 0.42, 0) - topRightTrayContainer.Position = UDim2.new(0.8, 0, 0, 0)--UDim2.new(0.8, 0, 0, 0) - topRightTrayContainer.Parent = container - end - end - if minimizedState == nil then - minimizedState = Instance.new("Frame") - minimizedState.Name = "MinimizedPlayerlist" - minimizedState.BackgroundTransparency = 1 - minimizedState.Position = UDim2.new(1, -166, 0,0) --UDim2.new(1, -153, 0,0) - minimizedState.Size = UDim2.new(0, 151, 0, 30) - - --[[local playerListButton = Instance.new("ImageButton") - playerListButton.Name = "GoBigButton" - playerListButton.Image = "rbxasset://textures/ui/playerlist_hidden_maximize.png" - playerListButton.BackgroundTransparency = 1 - playerListButton.Size = UDim2.new(0.0, 116, 0, 30) - playerListButton.Position = UDim2.new(0, 35, 0, 0) - playerListButton.MouseButton1Click:connect( - function() - toggleBigWindow() - end) - playerListButton.Parent = minimizedState]] - - playerListButton = Instance.new("ImageButton") - playerListButton.Name = "GoSmallButton" - playerListButton.Image = "rbxasset://textures/ui/playerlist_hidden_small.png" - playerListButton.BackgroundTransparency = 1 - playerListButton.Size = UDim2.new(0.0, 35, 0, 30) - playerListButton.Position = UDim2.new(1, -35, 0, 0) - playerListButton.MouseButton1Click:connect( - function() - transitionWindowsFunction("Small") - end) - playerListButton.Parent = minimizedState - - minimizedState.Visible = false - robloxLock(minimizedState) - minimizedState.Parent = topRightTrayContainer - end - if bigWindowImposter == nil then - bigWindowImposter = owner:FindFirstChild("BigPlayerListWindowImposter") - if bigWindowImposter == nil then - bigWindowImposter = Instance.new("Frame") - bigWindowImposter.Name = "BigPlayerListWindowImposter" - bigWindowImposter.Visible = false - --bigWindowImposter.Style = Enum.FrameStyle.RobloxRound - bigWindowImposter.BackgroundColor3 = Color3.new(0,0,0) - bigWindowImposter.BackgroundTransparency = 0.7 - bigWindowImposter.BorderSizePixel = 0 - --bigWindowImposter.Size = UDim2.new(0.4, 0, 0.4, 0) - bigWindowImposter.Size = UDim2.new(0.4, 7, 0.4, 7) - bigWindowImposter.Position = UDim2.new(0.3, 0, 0.3, 0) - robloxLock(bigWindowImposter) - bigWindowImposter.Parent = container - end - end - if container == nil or container ~= owner then - container = owner - - topRightTrayContainer.Parent = container - bigWindowImposter.Parent = container - end - - local smallVisible = true - local bigVisible = false - if container then - if topRightTrayContainer then - --Delete the old boards - if topRightTrayContainer:FindFirstChild("SmallPlayerlist") then - smallVisible = topRightTrayContainer.SmallPlayerlist.Visible - topRightTrayContainer.SmallPlayerlist.Parent = nil - print("Removed small playerlist") - else - print("Did not remove small playerlist") - end - end - if container:FindFirstChild("BigPlayerlist") then - bigVisible = container.BigPlayerlist.Visible or (previousBigPlayerList ~= nil) - container.BigPlayerlist.Parent = nil - if previousBigPlayerList ~= nil then - pcall(function() game.GuiService:RemoveCenterDialog(previousBigPlayerList) end) - previousBigPlayerList = nil - end - end - end - - local smallBoard, bigBoard = createBoardsFunction(boardType, numStats) - if smallBoard then - smallBoard.Visible = smallVisible - smallBoard.Parent = topRightTrayContainer - end - if bigBoard then - if bigVisible then - previousBigPlayerList = bigBoard - local centerDialogSupported, msg = pcall(function() game.GuiService:AddCenterDialog(previousBigPlayerList, Enum.CenterDialogType.PlayerInitiatedDialog, - function() - previousBigPlayerList.Visible = true - end) - end) - bigBoard.Visible = bigVisible - else - bigBoard.Visible = false - end - bigBoard.Parent = container - end - return container -end - - -local function showBigPlayerWindow() - if container:FindFirstChild("BigPlayerlist") then - if container.BigPlayerlist.Visible then - return - end - end - - bigWindowImposter.Visible = true - bigWindowImposter:TweenSizeAndPosition(bigWindowSize, bigWindowPosition, Enum.EasingDirection.Out, bigEasingStyle, 0.3, true, - function(state) - if state == Enum.TweenStatus.Completed then - bigWindowImposter.Visible = false - if container:FindFirstChild("BigPlayerlist") then - container.BigPlayerlist.Visible = true - end - end - end) -end - -local function hideBigPlayerWindow(completed) - if playerContextMenu then - playerContextMenu.Visible = false - end - - if container:FindFirstChild("BigPlayerlist") then - if container.BigPlayerlist.Visible == false and bigWindowImposter.Visible == false then - if completed then - completed() - end - --Already completely hidden - return - end - container.BigPlayerlist.Visible = false - end - - local completedFunction = completed - bigWindowImposter.Visible = true - bigWindowImposter:TweenSizeAndPosition(UDim2.new(0.4, 0, 0.4, 0), UDim2.new(0.3, 0, 0.3, 0), Enum.EasingDirection.In, Enum.EasingStyle.Quart, 0.15, true, - function(state) - if state == Enum.TweenStatus.Completed then - bigWindowImposter.Visible = false - if completedFunction then - completedFunction() - end - end - end) -end -local function hideSmallPlayerWindow(completed) - if playerContextMenu then - playerContextMenu.Visible = false - end - if topRightTrayContainer:FindFirstChild("SmallPlayerlist") then - local completedFunction = completed - if topRightTrayContainer.SmallPlayerlist.Visible then - topRightTrayContainer.SmallPlayerlist:TweenPosition(UDim2.new(1,0,smallWindowPosition.Y.Scale, smallWindowPosition.Y.Offset), Enum.EasingDirection.Out, smallEasingStyle, 0.3, true, - function(state) - --print(state) - if state == Enum.TweenStatus.Completed then - if topRightTrayContainer:FindFirstChild("SmallPlayerlist") then - topRightTrayContainer.SmallPlayerlist.Visible = false - end - if completedFunction then - completedFunction() - end - end - end) - return - end - end - if completed then - completed() - end -end - - -transitionWindowsFunction = function(desiredState) - if desiredState == "Big" then - minimizedState.Visible = false - hideSmallPlayerWindow() - - if previousBigPlayerList ~= nil then - if previousBigPlayerList ~= container:FindFirstChild("BigPlayerlist") then - pcall(function() game.GuiService:RemoveCenterDialog(previousBigPlayerList) end) - previousBigPlayerList = nil - previousBigPlayerList = container:FindFirstChild("BigPlayerlist") - end - else - previousBigPlayerList = container:FindFirstChild("BigPlayerlist") - end - - if previousBigPlayerList then - local firstShow = false - local centerDialogSupported, msg = pcall(function() game.GuiService:AddCenterDialog(previousBigPlayerList, Enum.CenterDialogType.PlayerInitiatedDialog, - function() - if not firstShow then - showBigPlayerWindow() - firstShow = true - else - previousBigPlayerList.Visible = true - end - end) - end) - if centerDialogSupported == false then - print("Exception", msg) - showBigPlayerWindow() - end - else - showBigPlayerWindow() - end - currentWindowState = "Big" - elseif desiredState == "Small" then - minimizedState.Visible = false - if previousBigPlayerList ~= nil then - pcall(function() game.GuiService:RemoveCenterDialog(previousBigPlayerList) end) - previousBigPlayerList = nil - end - - hideBigPlayerWindow() - if topRightTrayContainer:FindFirstChild("SmallPlayerlist") then - if not topRightTrayContainer.SmallPlayerlist.Visible or topRightTrayContainer.SmallPlayerlist.Position ~= smallWindowPosition then - topRightTrayContainer.SmallPlayerlist.Visible = true - topRightTrayContainer.SmallPlayerlist:TweenPosition(smallWindowPosition, Enum.EasingDirection.Out, smallEasingStyle, 0.3, true) - end - end - currentWindowState = "Small" - elseif desiredState == "None" then - if previousBigPlayerList ~= nil then - pcall(function() game.GuiService:RemoveCenterDialog(previousBigPlayerList) end) - previousBigPlayerList = nil - end - - local smallDone = false - local bigDone = false - hideSmallPlayerWindow( - function() - smallDone = true - if bigDone and smallDone then - minimizedState.Visible = true - end - end) - hideBigPlayerWindow( - function() - bigDone = true - if bigDone and smallDone then - minimizedState.Visible = true - end - end) - currentWindowState = "None" - end -end - -local function getStatValuesForPlayer(player) - local leaderstats = player:FindFirstChild("leaderstats") - if leaderstats then - local children = leaderstats:GetChildren() - if children then - local result = {} - --Just go based on position - for i, stat in ipairs(children) do - if stat:IsA("IntValue") then - table.insert(result, stat) - else - table.insert(result, 0) - end - end - - return result, leaderstats - end - end - return nil -end - ---ChildAdded on Player (if it's name is "leaderstats") - -if UserSettings and LoadLibrary then - - RbxGui,msg = t - print("Libraries loaded") - - local function createTeamName(name, color) - local fontHeight = 20 --RbxGui.GetFontHeight(Enum.Font.ArialBold, Enum.FontSize.Size18) - local frame = Instance.new("Frame") - frame.Name = "Team-" .. name - frame.BorderSizePixel = 0 - frame.BackgroundTransparency = 0.5 - frame.BackgroundColor3 = Color3.new(1,1,1) - frame.Size = UDim2.new(1, 0, 0, fontHeight) - frame.Position = UDim2.new(0,0,0,0) - - local label = Instance.new("TextLabel") - label.Name = "NameLabel" - label.Text = " " .. name - label.Font = Enum.Font.ArialBold - label.FontSize = Enum.FontSize.Size18 - label.Position = UDim2.new(0,0,0,0) - label.Size = UDim2.new(1,0,1,0) - label.TextColor3 = Color3.new(1,1,1) - label.BackgroundTransparency = 0.5 - label.BackgroundColor3 = getColor(color) - label.BorderSizePixel = 0 - label.TextXAlignment = Enum.TextXAlignment.Left - label = RbxGui.AutoTruncateTextObject(label) - label.Parent = frame - - return frame - end - - local function getFriendStatusIcon(friendStatus) - if friendStatus == Enum.FriendStatus.Unknown or friendStatus == Enum.FriendStatus.NotFriend then - return nil - elseif friendStatus == Enum.FriendStatus.Friend then - return "rbxasset://textures/ui/PlayerlistFriendIcon.png" - elseif friendStatus == Enum.FriendStatus.FriendRequestSent then - return "rbxasset://textures/ui/PlayerlistFriendRequestSentIcon.png" - elseif friendStatus == Enum.FriendStatus.FriendRequestReceived then - return "rbxasset://textures/ui/PlayerlistFriendRequestReceivedIcon.png" - else - error("Unknown FriendStatus: " .. friendStatus) - end - end - - local function getMembershipTypeIcon(membershipType) - --TODO: replace with proper icons - if membershipType == Enum.MembershipType.None then - return "" - elseif membershipType == Enum.MembershipType.BuildersClub then - return "rbxasset://textures/ui/TinyBcIcon.png" - elseif membershipType == Enum.MembershipType.TurboBuildersClub then - return "rbxasset://textures/ui/TinyTbcIcon.png" - elseif membershipType == Enum.MembershipType.OutrageousBuildersClub then - return "rbxasset://textures/ui/TinyObcIcon.png" - else - error("Uknown membershipType" .. membershipType) - end - end - - - local function updatePlayerFriendStatus(nameObject, friendStatus) - local fontHeight = 20 --RbxGui.GetFontHeight(Enum.Font.ArialBold, Enum.FontSize.Size14) - - local friendIconImage = getFriendStatusIcon(friendStatus) - nameObject.MembershipTypeLabel.FriendStatusLabel.Visible = (friendIconImage ~= nil) - - if friendIconImage ~= nil then - --Show friend icon - nameObject.MembershipTypeLabel.FriendStatusLabel.Image = friendIconImage - nameObject.NameLabel.Position =UDim2.new(0,2*fontHeight,0,1) - nameObject.NameLabel.Size = UDim2.new(1,-2*fontHeight,1,-2) - else - --Hide the friend icon - nameObject.NameLabel.Position = UDim2.new(0,fontHeight+1,0,1) - nameObject.NameLabel.Size = UDim2.new(1,-(fontHeight+1),1,-2) - end - end - local function updatePlayerName(nameObject, membershipStatus, teamColor) - local fontHeight = 20 --RbxGui.GetFontHeight(Enum.Font.ArialBold, Enum.FontSize.Size14) - - nameObject.Size = UDim2.new(1,0,0,fontHeight) - nameObject.MembershipTypeLabel.Image = getMembershipTypeIcon(membershipStatus) - end - - - local function updatePlayerNameColor(player, teamColor) - local function updatePlayerNameColorHelper(nameObject) - if teamColor ~= nil then - nameObject.NameLabel.TextColor3 = getColor(teamColor) - nameObject.NameLabel.FullNameLabel.TextColor3 = getColor(teamColor) - else - nameObject.NameLabel.TextColor3 = Color3.new(1,1,1) - nameObject.NameLabel.FullNameLabel.TextColor3 = Color3.new(1,1,1) - end - end - - updatePlayerNameColorHelper(playerTable[player].NameObjectSmall) - updatePlayerNameColorHelper(playerTable[player].NameObjectBig) - end - - - local function createPlayerName(name, membershipStatus, teamColor, friendStatus) - local frame = Instance.new("Frame") - frame.Name = "Player_" .. name - if lightBackground then - frame.BackgroundColor3 = Color3.new(1,1,1) - else - frame.BackgroundColor3 = Color3.new(1,1,1) - end - frame.BackgroundTransparency = 0.5 - frame.BorderSizePixel = 0 - - local membershipStatusLabel = Instance.new("ImageLabel") - membershipStatusLabel.Name = "MembershipTypeLabel" - membershipStatusLabel.BackgroundTransparency = 1 - membershipStatusLabel.Size = UDim2.new(1,0,1,0) - membershipStatusLabel.Position = UDim2.new(0,0,0,0) - membershipStatusLabel.SizeConstraint = Enum.SizeConstraint.RelativeYY - membershipStatusLabel.Parent = frame - - local friendStatusLabel = Instance.new("ImageLabel") - friendStatusLabel.Name = "FriendStatusLabel" - friendStatusLabel.Visible = false - friendStatusLabel.BackgroundTransparency = 1 - friendStatusLabel.Size = UDim2.new(1,0,1,0) - friendStatusLabel.Position = UDim2.new(1,0,0,0) - friendStatusLabel.Parent = membershipStatusLabel - - local changeNameFunction - local nameLabel = Instance.new("TextLabel") - nameLabel.Name = "NameLabel" - nameLabel.Text = name - nameLabel.Font = Enum.Font.ArialBold - nameLabel.FontSize = Enum.FontSize.Size14 - nameLabel.TextColor3 = Color3.new(1,1,1) - nameLabel.BackgroundTransparency = 1 - nameLabel.BackgroundColor3 = Color3.new(0,0,0) - nameLabel.TextXAlignment = Enum.TextXAlignment.Left - nameLabel, changeNameFunction = RbxGui.AutoTruncateTextObject(nameLabel) - nameLabel.Parent = frame - - updatePlayerName(frame, membershipStatus, teamColor) - if supportFriends then - updatePlayerFriendStatus(frame, friendStatus) - else - updatePlayerFriendStatus(frame, Enum.FriendStatus.NotFriend) - end - return frame, changeNameFunction - end - - local function createStatColumn(i, numColumns, isTeam, color3, isHeader) - local textLabel = Instance.new("TextLabel") - textLabel.Name = "Stat" .. i - textLabel.TextColor3 = Color3.new(1,1,1) - textLabel.TextXAlignment = Enum.TextXAlignment.Right - textLabel.TextYAlignment = Enum.TextYAlignment.Center - textLabel.FontSize = Enum.FontSize.Size14 - if isHeader then - textLabel.FontSize = Enum.FontSize.Size18 - else - textLabel.FontSize = Enum.FontSize.Size14 - end - if isHeader or isTeam then - textLabel.Font = Enum.Font.ArialBold - else - textLabel.Font = Enum.Font.Arial - end - - if isTeam then - textLabel.BackgroundColor3 = color3 - textLabel.Text = 0 - else - textLabel.BackgroundColor3 = Color3.new(0,0,0) - textLabel.Text = "" - end - textLabel.BackgroundTransparency = 1 - if i == numColumns then - textLabel.Size = UDim2.new(1/numColumns, -6, 1, 0) - else - textLabel.Size = UDim2.new(1/numColumns, -4, 1, 0) - end - - textLabel.Position = UDim2.new((i-1) * (1/numColumns), 0, 0, 0) - return RbxGui.AutoTruncateTextObject(textLabel) - end - - local function createStatHeaders(stats, numColumns, isBig) - local frame = Instance.new("Frame") - frame.Name = "Headers" - frame.BorderSizePixel = 0 - frame.BackgroundColor3 = Color3.new(0,0,0) - frame.BackgroundTransparency = 1 - - local nameSize - if isBig then - nameSize = 0.5 - elseif numColumns == 1 then - nameSize = 0.7 - elseif numColumns == 2 then - nameSize = 0.6 - else - nameSize = 0.45 - end - frame.Size = UDim2.new(1-nameSize, 0, 1,0) - if isBig then - frame.Position = UDim2.new(nameSize,-25, 0,0) - else - frame.Position = UDim2.new(nameSize,0, 0,0) - end - - local i = 1 - while i <= numColumns do - local headerColumn, changeText = createStatColumn(i, numColumns, false, nil, true) - changeText(stats[i]) - headerColumn.Parent = frame - i = i + 1 - end - return frame, textChangers - end - - local function createStatColumns(nameObject, numColumns, isTeam, isBig) - local frame = Instance.new("Frame") - frame.Name = nameObject.Name .. "_WithStats" - frame.BorderSizePixel = 0 - frame.BackgroundColor3 = nameObject.BackgroundColor3 - frame.BackgroundTransparency = nameObject.BackgroundTransparency - frame.Size = nameObject.Size - frame.Position = nameObject.Position - - nameObject.BackgroundTransparency = 1 - - if numColumns == 0 then - nameObject.Size = UDim2.new(1,0,1,0) - nameObject.Position = UDim2.new(0,0,0,0) - nameObject.Parent = frame - return frame - end - - local statFrame = Instance.new("Frame") - statFrame.Name = "Stats" - if isTeam then - statFrame.BorderSizePixel = 0 - statFrame.BackgroundColor3 = nameObject.NameLabel.BackgroundColor3 - statFrame.BackgroundTransparency = nameObject.NameLabel.BackgroundTransparency - else - statFrame.BackgroundTransparency = 1 - end - - local nameSize - if isBig then - nameSize = 0.5 - elseif numColumns == 1 then - nameSize = 0.7 - elseif numColumns == 2 then - nameSize = 0.6 - else - nameSize = 0.45 - end - nameObject.Size = UDim2.new(nameSize, 0, 1, 0) - nameObject.Position = UDim2.new(0, 0, 0, 0) - statFrame.Size = UDim2.new(1-nameSize,0, 1,0) - statFrame.Position = UDim2.new(nameSize,0, 0,0) - - nameObject.Parent = frame - statFrame.Parent = frame - - local textChangers = {} - local i = 1 - while i <= numColumns do - local statColumn, changeText = createStatColumn(i, numColumns, isTeam, statFrame.BackgroundColor3) - statColumn.Parent = statFrame - table.insert(textChangers, changeText) - - i = i + 1 - end - - return frame, statFrame, textChangers - end - - local function createAlternatingRows(objects) - for i, line in ipairs(objects) do - if i % 2 == 0 then - line.BackgroundTransparency = 1 - else - line.BackgroundTransparency = 0.95 - end - end - end - local removeFromTeam = nil - - local function clearTableEntry(obj, tableInfo) - if tableInfo.MainObjectSmall then - tableInfo.MainObjectSmall.Parent = nil - tableInfo.MainObjectSmall = nil - end - if tableInfo.MainObjectBig then - tableInfo.MainObjectBig.Parent = nil - tableInfo.MainObjectBig = nil - end - if tableInfo.Connections then - for i, connection in ipairs(tableInfo.Connections) do - connection:disconnect() - end - tableInfo.Connections = nil - end - if tableInfo.LeaderStatConnections then - for i, connection in ipairs(tableInfo.LeaderStatConnections) do - connection:disconnect() - end - tableInfo.LeaderStatConnections = nil - end - if tableInfo.CurrentTeam then - removeFromTeam(obj) - tableInfo.CurrentTeam = nil - end - if tableInfo.Players then - for i, player in ipairs(tableInfo.Players) do - playerTable[player].CurrentTeam = nil - end - tableInfo.Players = {} - end - if tableInfo.StatValues then - tableInfo.StatValues = nil - end - end - - local function resetPlayerTable() - for player, info in pairs(playerTable) do - clearTableEntry(player, info) - playerTable[player] = nil - end - playerTable = {} - end - - local function resetTeamTable() - for team, info in pairs(teamTable) do - clearTableEntry(team, info) - teamTable[team] = nil - end - teamTable = {} - teamColorTable = {} - end - - local function getBoardTypeInfo() - local isTeam = (currentBoardType == "TeamScore" or currentBoardType == "TeamList") - local isScore = (currentBoardType == "TeamScore" or currentBoardType == "PlayerScore") - return isTeam, isScore - end - - - local function recomputeTeamScore(team, column) - if not team or team == "Neutral" then - return - end - - local function recomputeScoreHelper(statChangers) - if statChangers and column <= #statChangers then - local sum = 0 - for i, p in ipairs(teamTable[team].Players) do - if playerTable[p].StatValues and column <= #playerTable[p].StatValues then - sum = sum + playerTable[p].StatValues[column].Value - end - end - statChangers[column](sum) - end - end - - recomputeScoreHelper(teamTable[team].StatChangersSmall) - recomputeScoreHelper(teamTable[team].StatChangersBig) - end - local function recomputeCompleteTeamScore(team) - local col = 1 - while col <= currentStatCount do - recomputeTeamScore(team, col) - col = col + 1 - end - end - removeFromTeam = function(player) - if playerTable[player].CurrentTeam ~= nil then - ArrayRemove(teamTable[playerTable[player].CurrentTeam].Players, player) - recomputeCompleteTeamScore(playerTable[player].CurrentTeam) - playerTable[player].CurrentTeam = nil - end - end - - local function assignToTeam(player) - local isTeam, isScore = getBoardTypeInfo() - - if isTeam then - local newTeam = nil - - if player.Neutral or teamColorTable[player.TeamColor.Name] == nil then - newTeam = "Neutral" - else - newTeam = teamColorTable[player.TeamColor.Name] - end - - if playerTable[player].CurrentTeam == newTeam then - return - end - - removeFromTeam(player) - - playerTable[player].CurrentTeam = newTeam - table.insert(teamTable[newTeam].Players, player) - - if newTeam == "Neutral" then - updatePlayerNameColor(player, nil) - else - updatePlayerNameColor(player, player.TeamColor) - end - - recomputeCompleteTeamScore(newTeam) - - --Relayout - if sortPlayerListsFunction then - sortPlayerListsFunction() - end - end - end - - local function buildTeamObject(team, numStatColumns, suffix) - local isTeam, isScore = getBoardTypeInfo() - local teamObject = createTeamName(team.Name, team.TeamColor) - if not teamTable[team] then - teamTable[team] = {} - end - teamTable[team]["NameObject" .. suffix] = teamObject - if isScore then - local statObject - local textChangers - teamObject, statObject, textChangers = createStatColumns(teamObject, numStatColumns, true, suffix == "Big") - teamTable[team]["StatObject" .. suffix] = statObject - teamTable[team]["StatChangers" .. suffix] = textChangers - end - teamTable[team]["MainObject" .. suffix] = teamObject - if not teamTable[team].Players then - teamTable[team].Players = {} - end - return teamObject - end - - local currentContextMenuPlayer = nil - local function updatePlayerContextMenu(player) - currentContextMenuPlayer = player - local elementHeight = 20 - local function highlight(button) - button.TextColor3 = Color3.new(0,0,0) - button.BackgroundColor3 = Color3.new(0.8,0.8,0.8) - end - local function clearHighlight(button) - button.TextColor3 = Color3.new(1,1,1) - button.BackgroundColor3 = Color3.new(0,0,0) - end - if playerContextMenu == nil then - playerContextMenu = Instance.new("Frame") - playerContextMenu.Name = "PlayerListContextMenu" - playerContextMenu.BackgroundTransparency = 1 - playerContextMenu.Visible = false - - local playerContextMenuButton = Instance.new("TextButton") - playerContextMenuButton.Name = "PlayerListContextMenuButton" - playerContextMenuButton.Text = "" - playerContextMenuButton.Style = Enum.ButtonStyle.RobloxButtonDefault - playerContextMenuButton.ZIndex = 4 - playerContextMenuButton.Size = UDim2.new(1, 0, 1, -20) - playerContextMenuButton.Visible = true - playerContextMenuButton.Parent = playerContextMenu - - for i, contextElement in ipairs(contextMenuElements) do - local element = contextElement - if element.Type == "Button" then - local button = Instance.new("TextButton") - button.Name = "ContextButton" .. i - button.BackgroundColor3 = Color3.new(0,0,0) - button.BorderSizePixel = 0 - button.TextXAlignment = Enum.TextXAlignment.Left - button.Text = " " .. contextElement.Text - button.Font = Enum.Font.Arial - button.FontSize = Enum.FontSize.Size14 - button.Size = UDim2.new(1, 8, 0, elementHeight) - button.TextColor3 = Color3.new(1,1,1) - button.ZIndex = 4 - button.Parent = playerContextMenuButton - button.MouseButton1Click:connect(function() - if button.Active then - local success, result = pcall(function() element.DoIt(currentContextMenuPlayer) end) - playerContextMenu.Visible = false - end - end) - - button.MouseEnter:connect(function() - if button.Active then - highlight(button) - end - end) - button.MouseLeave:connect(function() - if button.Active then - clearHighlight(button) - end - end) - - contextElement.Button = button - contextElement.Element = button - elseif element.Type == "Label" then - local frame = Instance.new("Frame") - frame.Name = "ContextLabel" .. i - frame.BackgroundTransparency = 1 - frame.Size = UDim2.new(1, 8, 0, elementHeight) - - local label = Instance.new("TextLabel") - label.Name = "Text1" - label.BackgroundTransparency = 1 - label.BackgroundColor3 = Color3.new(1,1,1) - label.BorderSizePixel = 0 - label.TextXAlignment = Enum.TextXAlignment.Left - label.Font = Enum.Font.ArialBold - label.FontSize = Enum.FontSize.Size14 - label.Position = UDim2.new(0.0, 0, 0, 0) - label.Size = UDim2.new(0.5, 0, 1, 0) - label.TextColor3 = Color3.new(1,1,1) - label.ZIndex = 4 - label.Parent = frame - element.Label1 = label - - if element.GetText2 then - label = Instance.new("TextLabel") - label.Name = "Text2" - label.BackgroundTransparency = 1 - label.BackgroundColor3 = Color3.new(1,1,1) - label.BorderSizePixel = 0 - label.TextXAlignment = Enum.TextXAlignment.Right - label.Font = Enum.Font.Arial - label.FontSize = Enum.FontSize.Size14 - label.Position = UDim2.new(0.5, 0, 0, 0) - label.Size = UDim2.new(0.5, 0, 1, 0) - label.TextColor3 = Color3.new(1,1,1) - label.ZIndex = 4 - label.Parent = frame - element.Label2 = label - end - frame.Parent = playerContextMenuButton - element.Label = frame - element.Element = frame - end - end - - playerContextMenu.ZIndex = 4 - playerContextMenu.MouseLeave:connect(function() playerContextMenu.Visible = false end) - robloxLock(playerContextMenu) - playerContextMenu.Parent = NewPlayerListGui - - end - - local elementPos = 0 - for i, contextElement in ipairs(contextMenuElements) do - local isVisible = false - - if contextElement.IsVisible then - local success, visible = pcall(function() return contextElement.IsVisible(currentContextMenuPlayer) end) - if success then - isVisible = visible - else - print("Error in IsVisible call: " .. visible) - end - end - - if contextElement.Type == "Button" then - contextElement.Button.Visible = isVisible - if contextElement.Button.Visible then - isVisible = true - clearHighlight(contextElement.Button) - if contextElement.IsActive then - local success, active = pcall(function() return contextElement.IsActive(currentContextMenuPlayer) end) - if success then - contextElement.Button.Active = active - else - print("Error in IsActive call: " .. active) - end - end - if contextElement.Button.Active then - contextElement.Button.TextColor3 = Color3.new(1,1,1) - else - contextElement.Button.TextColor3 = Color3.new(0.7,0.7,0.7) - end - end - elseif contextElement.Type == "Label" then - contextElement.Label.Visible = isVisible - if contextElement.Label.Visible then - local success, text = pcall(function() return contextElement.GetText1(currentContextMenuPlayer) end) - if success then - contextElement.Label1.Text = " " .. text - else - print("Error in GetText1 call: " .. text) - end - - if contextElement.GetText2 then - local success, text = pcall(function() return contextElement.GetText2(currentContextMenuPlayer) end) - if success then - contextElement.Label2.Text = " " .. text - else - print("Error in GetText2 call: " .. text) - end - end - end - end - if isVisible then - contextElement.Element.Position = UDim2.new(0,-4, 0, elementPos * elementHeight - 4) - elementPos = elementPos + 1 - end - end - playerContextMenu.Size = UDim2.new(0, 150, 0, elementPos*elementHeight + 13 + 20) - end - local function showPlayerMenu(player, x, y) - updatePlayerContextMenu(player) - x = x - (playerContextMenu.AbsoluteSize.X/2) - if x + playerContextMenu.AbsoluteSize.X >= NewPlayerListGui.AbsoluteSize.X then - x = NewPlayerListGui.AbsoluteSize.X - playerContextMenu.AbsoluteSize.X - end - playerContextMenu.Visible = true - playerContextMenu.Position = UDim2.new(0, x, 0, y-playerContextMenu.AbsoluteSize.Y) - end - - local function buildPlayerObject(player, numStatColumns, suffix) - local isTeam, isScore = getBoardTypeInfo() - - local playerObject = nil - local changePlayerNameFunction = nil - local currentColor = nil - if isTeam and not player.Neutral then - currentColor = player.TeamColor.Color - else - currentColor = Color3.new(1,1,1) - end - playerObject, changePlayerNameFunction = createPlayerName(player.Name, player.MembershipType, currentColor, getFriendStatus(player)) - - if not playerTable[player] then - playerTable[player] = {} - end - if not playerTable[player].Connections then - playerTable[player].Connections = {} - end - if not playerTable[player].CurrentTeam then - playerTable[player].CurrentTeam = nil - end - playerTable[player]["NameObject" .. suffix] = playerObject - playerTable[player]["ChangeName" .. suffix] = changePlayerNameFunction - - if isScore then - local statObject = nil - local textChangers = nil - playerObject, statObject, textChangers = createStatColumns(playerObject, numStatColumns, false, suffix == "Big") - playerTable[player]["StatObject" .. suffix]= statObject - playerTable[player]["StatChangers" .. suffix] = textChangers - - local statValues, leaderstats = getStatValuesForPlayer(player) - if not statValues or #statValues < numStatColumns then - if not playerTable[player].LeaderStatConnections then - playerTable[player].LeaderStatConnections = {} - end - --Setup a listener to see when this data gets filled in - if not leaderstats then - --print("No leaderstats for ", player) - --We don't even have a leaderstats child, wait for one - table.insert(playerTable[player].LeaderStatConnections, - player.ChildAdded:connect( - function(child) - if child.Name == "leaderstats" then - --print("Got a leaderstats for ", player) - - --Connections will be torn down - recreatePlayerFunction(player) - else - --print("Unknown child, listening for connection") - table.insert(playerTable[player].LeaderStatConnections, - child.Changed:connect( - function(prop) - if prop == "Name" and child.Name == "leaderstats" then - --Connections will be torn down - recreatePlayerFunction(player) - end - end)) - end - end)) - else - --print("Need more children") - --We have a leaderstats, but not enough children, recreate if we get them - table.insert(playerTable[player].LeaderStatConnections, - leaderstats.ChildAdded:connect( - function(child) - --TODO only look for IntValue - recreatePlayerFunction(player) - end) - ) - table.insert(playerTable[player].LeaderStatConnections, - leaderstats.AncestryChanged:connect( - function(child) - --We got deleted, try again - recreatePlayerFunction(player) - end) - ) - end - end - if statValues then - if not playerTable[player].StatValues then - playerTable[player].StatValues = {} - end - local pos = 1 - while pos <= numStatColumns and pos <= #statValues do - local currentColumn = pos - local statValue = statValues[pos] - local statChanger = textChangers[pos] - - local updateStat = function(val) - statChanger(val) - recomputeTeamScore(playerTable[player].CurrentTeam, currentColumn) - end - if pos > #playerTable[player].StatValues then - table.insert(playerTable[player].StatValues, statValue) - end - - table.insert(playerTable[player].Connections, - statValue.Changed:connect(updateStat) - ) - table.insert(playerTable[player].Connections, - statValue.AncestryChanged:connect( - function() - recreatePlayerFunction(player) - end) - ) - updateStat(statValue.Value) - pos = pos + 1 - end - end - end - - if supportFriends and player ~= game.Players.LocalPlayer and player.userId > 0 and game.Players.LocalPlayer.userId > 0 then - local button = Instance.new("TextButton") - button.Name = playerObject.Name .. "Button" - button.Text = "" - button.Active = false - button.Size = playerObject.Size - button.Position = playerObject.Position - button.BackgroundColor3 = playerObject.BackgroundColor3 - - local secondButton = Instance.new("TextButton") - secondButton.Name = playerObject.Name .. "RealButton" - secondButton.Text = "" - secondButton.BackgroundTransparency = 1 - secondButton.BackgroundColor3 = playerObject.BackgroundColor3 - secondButton.Parent.BackgroundTransparency = 1 - secondButton.Parent.Visible = true - secondButton.ZIndex = 2 - secondButton.Size = UDim2.new(1,0,1,0) - - local previousTransparency = nil - table.insert(playerTable[player].Connections, - secondButton.MouseEnter:connect(--button.MouseEnter:connect( - function() - if previousTransparency == nil then - previousTransparency = secondButton--[[button]].BackgroundTransparency - end - - if lightBackground then - --button.BackgroundColor3 = Color3.new(0,0,0) - --button.BackgroundTransparency = 0 - secondButton.Parent.BackgroundTransparency = 0 - else - --button.BackgroundColor3 = Color3.new(1,1,1) - --secondButton.button.BackgroundTransparency = 1--0.80 - secondButton.Parent.BackgroundTransparency = 1 - end - end)) - table.insert(playerTable[player].Connections, - secondButton.MouseLeave:connect(--button.MouseLeave:connect( - function() - if previousTransparency ~= nil then - if lightBackground then - --button.BackgroundColor3 = Color3.new(1,1,1) - --button.BackgroundTransparency = previousTransparency - else - --secondButtonbutton.BackgroundColor3 = Color3.new(1,1,1) - --nbutton.BackgroundTransparency = previousTransparency - end - - previousTransparency = nil - end - secondButton.Parent.BackgroundTransparency = 1 - end)) - - local mouseDownX, mouseDownY - table.insert(playerTable[player].Connections, - secondButton.MouseButton1Down:connect(function(x,y) - mouseDownX = x - mouseDownY = y - end)) - table.insert(playerTable[player].Connections, - secondButton.MouseButton1Click:connect(function() - showPlayerMenu(player, mouseDownX, secondButton.AbsolutePosition.Y + secondButton.AbsoluteSize.Y ) - end)) - playerObject.BackgroundTransparency = 1 - playerObject.Size = UDim2.new(1,0,1,0) - playerObject.Position = UDim2.new(0,0,0,0) - playerObject.Parent = button - - playerTable[player]["MainObject" .. suffix] = button - - playerObject = button - else - playerTable[player]["MainObject" .. suffix] = playerObject - - if player == game.Players.LocalPlayer and supportFriends then - table.insert(playerTable[player].Connections, - player.FriendStatusChanged:connect( - function(otherPlayer, friendStatus) - if playerTable[otherPlayer] then - updatePlayerFriendStatus(playerTable[otherPlayer]["NameObject" .. suffix], friendStatus) - end - end) - ) - end - end - table.insert(playerTable[player].Connections, - player.Changed:connect( - function(prop) - if prop == "MembershipType" then - updatePlayerName(playerTable[player]["NameObject" .. suffix], player.MembershipType, currentColor) - elseif prop == "Name" then - playerTable[player]["ChangeName" .. suffix](player.Name) - elseif prop == "Neutral" or prop == "TeamColor" then - assignToTeam(player) - end - end) - ) - return playerObject - end - - local function orderScrollList(scrollOrder, objectName, scrollFrame) - local pos = 0 - local order = {} - local isTeam, isScore = getBoardTypeInfo() - for i, obj in ipairs(scrollOrder) do - order[obj] = 0 - end - - if isTeam then - local teams = getTeams() - for i, team in ipairs(teams) do - --print(team, objectName, teamTable[team][objectName]) - order[teamTable[team][objectName]] = pos - pos = pos + 1 - for i, player in ipairs(teamTable[team].Players) do - if playerTable[player] then - order[playerTable[player][objectName]] = pos - pos = pos + 1 - end - end - end - - if #teamTable["Neutral"].Players > 0 then - teamTable["Neutral"][objectName].Parent = scrollFrame - order[teamTable["Neutral"][objectName]] = pos - pos = pos + 1 - for i, player in ipairs(teamTable["Neutral"].Players) do - order[playerTable[player][objectName]] = pos - pos = pos + 1 - end - else - teamTable["Neutral"][objectName].Parent = nil - end - else - local players = getPlayers() - for i, player in ipairs(players) do - order[playerTable[player][objectName]] = pos - pos = pos + 1 - end - end - - table.sort(scrollOrder, - function(a,b) - return order[a] < order[b] - end) - end - - local function createPlayerListBasics(frame, isBig) - local headerFrame = Instance.new("Frame") - headerFrame.Name = "Header" - headerFrame.BackgroundTransparency = 1 - headerFrame.Size = UDim2.new(1,-13,0,26) - headerFrame.Position = UDim2.new(0,0,0,0) --UDim2.new(0,-6,0,-6) - headerFrame.Parent = frame - - local lowerPaneFrame = Instance.new("Frame") - lowerPaneFrame.Name = "ScrollingArea" - lowerPaneFrame.BackgroundTransparency = 1 - lowerPaneFrame.Size = UDim2.new(1,-3,1,-26) - lowerPaneFrame.Position = UDim2.new(0,0,0,26) - lowerPaneFrame.Parent = frame - - local scrollOrder = {} - local scrollFrame, scrollUp, scrollDown, recalculateScroll = RbxGui.CreateScrollingFrame(scrollOrder) - - local scrollBar = Instance.new("Frame") - scrollBar.Name = "ScrollBar" - scrollBar.BackgroundTransparency = 0.9 - scrollBar.BackgroundColor3 = Color3.new(1,1,1) - scrollBar.BorderSizePixel = 0 - scrollBar.Size = UDim2.new(0, 17, 1, -36) - if isBig then scrollBar.Size = UDim2.new(0, 17, 1, -61) end - scrollBar.Parent = lowerPaneFrame - - scrollFrame.Parent = lowerPaneFrame - scrollUp.Parent = lowerPaneFrame - scrollDown.Parent = lowerPaneFrame - - if isBig then - scrollFrame.Position = UDim2.new(0,0,0,0) --UDim2.new(0,-7,0,0) - scrollUp.Position = UDim2.new(1,-41,0,5) --UDim2.new(1,-19,0,0) - scrollDown.Position = UDim2.new(1,-41,1,-35) -- UDim2.new(1,-19,1,-15) - scrollBar.Position = UDim2.new(1, -41, 0, 24) -- UDim2.new(1, -19, 0, 19) - - scrollFrame.Size = UDim2.new(1,-48,1,0) - headerFrame.Size = UDim2.new(1,-20,0,32) - - else - scrollBar.Position = UDim2.new(1, -19, 0, 14) --UDim2.new(1, -17, 0, 19) - scrollFrame.Position = UDim2.new(0,1,0,0) -- UDim2.new(0,-5,0,0) - scrollUp.Position = UDim2.new(1,-19,0,-5) --UDim2.new(1,-17,0,0) - scrollDown.Position = UDim2.new(1,-19,1,-20) --UDim2.new(1,-17,1,-15) - - lowerPaneFrame.Position = UDim2.new(0,0,0,30) - - local toggleScrollBar = function(visible) - if visible then - scrollFrame.Size = UDim2.new(1,-16,1,0) - headerFrame.Size = UDim2.new(1,-16,0,32) - else - scrollFrame.Size = UDim2.new(1,0,1,0)--UDim2.new(1,5,1,0) - headerFrame.Size = UDim2.new(1,5,0,32) - end - scrollUp.Visible = visible - scrollDown.Visible = visible - scrollBar.Visible = visible - end - scrollUp.Changed:connect(function(prop) - if prop == "Active" then - toggleScrollBar(scrollUp.Active or scrollDown.Active) - end - end) - - scrollDown.Changed:connect(function(prop) - if prop == "Active" then - toggleScrollBar(scrollUp.Active or scrollDown.Active) - end - end) - - toggleScrollBar(scrollUp.Active or scrollDown.Active) - end - return headerFrame, scrollFrame, recalculateScroll, scrollOrder - end - - createBoardsFunction = function (boardType, numStatColumns) - print("Create Boards") - local smallFrame = Instance.new("Frame") - smallFrame.Name = "SmallPlayerlist" - smallFrame.Position = smallWindowPosition - smallFrame.Active = false - smallFrame.Size = smallWindowSize - --smallFrame.Style = Enum.FrameStyle.RobloxRound - smallFrame.BackgroundColor3 = Color3.new(0,0,0) - smallFrame.BackgroundTransparency = 0.7 - smallFrame.BorderSizePixel = 0 - - local bigFrame = Instance.new("Frame") - bigFrame.Name = "BigPlayerlist" - bigFrame.Size = bigWindowSize - bigFrame.Position = bigWindowPosition - --bigFrame.Style = Enum.FrameStyle.RobloxRound - bigFrame.BackgroundColor3 = Color3.new(0,0,0) - bigFrame.BackgroundTransparency = 0.7 - bigFrame.BorderSizePixel = 0 - bigFrame.Visible = false - - local bigFrameWrapper = Instance.new("Frame") - bigFrameWrapper.Name = "Expander" - --bigFrameWrapper.Size = UDim2.new(1,5,1,0) - bigFrameWrapper.Size = UDim2.new(1,21,1,16) - bigFrameWrapper.Position = UDim2.new(0, 0, 0,0) - bigFrameWrapper.BackgroundTransparency = 1 - bigFrameWrapper.Parent = bigFrame - - local smallHeaderFrame, scrollFrameSmall, recalculateScrollSmall, scrollOrderSmall = createPlayerListBasics(smallFrame, false) - local bigHeaderFrame, scrollFrameBig, recalculateScrollBig, scrollOrderBig = createPlayerListBasics(bigFrameWrapper, true) - - local playerListButton = Instance.new("ImageButton") - playerListButton.Name = "GoBigButton" - playerListButton.BackgroundTransparency = 1 - playerListButton.Image = "rbxasset://textures/ui/playerlist_small_maximize.png" - playerListButton.Size = UDim2.new(0.0, 35, 0, 29) - playerListButton.Position = UDim2.new(0, 0, 0, 0) - playerListButton.MouseButton1Click:connect( - function() - toggleBigWindow() - end) - playerListButton.Parent = smallHeaderFrame - - playerListButton = Instance.new("ImageButton") - playerListButton.Name = "CloseButton" - playerListButton.BackgroundTransparency = 1 - playerListButton.Image = "rbxasset://textures/ui/playerlist_small_hide.png" - playerListButton.Size = UDim2.new(0.0, 38, 0, 29) - playerListButton.Position = UDim2.new(0, 35, 0, 0) - playerListButton.MouseButton1Click:connect( - function() - transitionWindowsFunction("None") - end) - playerListButton.Parent = smallHeaderFrame - - playerListButton = Instance.new("ImageButton") - playerListButton.Name = "CloseButton" - playerListButton.Image = "rbxasset://textures/ui/playerlist_big_hide.png" - playerListButton.BackgroundTransparency = 1 - playerListButton.Size = UDim2.new(0.0, 29, 0, 29) - playerListButton.Position = UDim2.new(1, -30, 0.5, -15) - playerListButton.MouseButton1Click:connect( - function() - toggleBigWindow() - end) - playerListButton.Parent = bigHeaderFrame - - local placeName = Instance.new("TextLabel") - placeName.Name = "PlaceName" - placeName.Text = " Player List" - placeName.FontSize = Enum.FontSize.Size24 - placeName.TextXAlignment = Enum.TextXAlignment.Left - placeName.Font = Enum.Font.ArialBold - placeName.BackgroundTransparency = 1 - placeName.TextColor3 = Color3.new(1,1,1) - placeName.Size = UDim2.new(0.5, 0, 1, 0) - placeName.Position = UDim2.new(0, 0, 0.0, 0) - placeName = RbxGui.AutoTruncateTextObject(placeName) - placeName.Parent = bigHeaderFrame - - - currentBoardType = boardType - currentStatCount = numStatColumns - local isTeam, isScore = getBoardTypeInfo() - local players = getPlayers() - - if isScore then - local statColumns = getStatColumns(players) - numStatColumns = #statColumns - if numStatColumns > 3 then - numStatColumns = 3 - end - createStatHeaders(statColumns, numStatColumns, false).Parent = smallHeaderFrame - createStatHeaders(statColumns, currentStatCount, true).Parent = bigHeaderFrame - end - - --Clean up all old stuff - resetPlayerTable() - - for i, player in ipairs(players) do - local playerObject = buildPlayerObject(player, numStatColumns, "Small") - table.insert(scrollOrderSmall, playerObject) - playerObject.Parent = scrollFrameSmall - - playerObject = buildPlayerObject(player, currentStatCount, "Big") - table.insert(scrollOrderBig, playerObject) - playerObject.Parent = scrollFrameBig - end - - --Clean up old stuff - resetTeamTable() - - local teamStatObjects = {} - if isTeam then - local teams = getTeams() - local i = #teams - while i >= 1 do - --We go backwards so the "first" team color gets the team - local team = teams[i] - teamColorTable[team.TeamColor.Name] = team - i = i - 1 - end - - --Adding/Removing a Team causes a full invalidation of the board - for i, team in ipairs(teams) do - local teamObject = buildTeamObject(team, numStatColumns, "Small") - table.insert(scrollOrderSmall, teamObject) - teamObject.Parent = scrollFrameSmall - - teamObject = buildTeamObject(team, currentStatCount, "Big") - table.insert(scrollOrderBig, teamObject) - teamObject.Parent = scrollFrameBig - end - - teamTable["Neutral"] = {} - teamTable["Neutral"].Players = {} - - local neutralTeamObject = createTeamName("Neutral", BrickColor.palette(8)) - teamTable["Neutral"].NameObjectSmall = neutralTeamObject - teamTable["Neutral"].StatObjectSmall = nil - teamTable["Neutral"].MainObjectSmall = neutralTeamObject - table.insert(scrollOrderSmall, neutralTeamObject) - - neutralTeamObject = createTeamName("Neutral", BrickColor.palette(8)) - teamTable["Neutral"].NameObjectBig = neutralTeamObject - teamTable["Neutral"].StatObjectBig = nil - teamTable["Neutral"].MainObjectBig = neutralTeamObject - table.insert(scrollOrderBig, neutralTeamObject) - - local neutralPlayers = {} - for i, player in ipairs(players) do - assignToTeam(player) - end - end - - removePlayerFunction = function(player) - if playerTable[player] then - ArrayRemove(scrollOrderSmall, playerTable[player].MainObjectSmall) - ArrayRemove(scrollOrderBig, playerTable[player].MainObjectBig) - - clearTableEntry(player, playerTable[player]) - - playerTable[player] = nil - end - end - recreatePlayerFunction = function(player) - removePlayerFunction(player) - - local playerObject = buildPlayerObject(player, numStatColumns, "Small") - table.insert(scrollOrderSmall, playerObject) - robloxLock(playerObject) - playerObject.Parent = scrollFrameSmall - - playerObject = buildPlayerObject(player, currentStatCount, "Big") - table.insert(scrollOrderBig, playerObject) - robloxLock(playerObject) - playerObject.Parent = scrollFrameBig - - local isTeam, isScore = getBoardTypeInfo() - if isTeam then - assignToTeam(player) - end - - sortPlayerListsFunction() - end - - sortPlayerListsFunction = function() - orderScrollList(scrollOrderSmall, "MainObjectSmall", scrollFrameSmall) - recalculateScrollSmall() - createAlternatingRows(scrollOrderSmall) - - orderScrollList(scrollOrderBig, "MainObjectBig", scrollFrameBig) - recalculateScrollBig() - createAlternatingRows(scrollOrderBig) - end - - sortPlayerListsFunction() - - robloxLock(smallFrame) - robloxLock(bigFrame) - return smallFrame, bigFrame - end - - --Teams changing invalidates the whole board - local function teamsChanged() - if debounceTeamsChanged then - return - end - - debounceTeamsChanged = true - wait() - rebuildBoard(NewPlayerListGui, determineBoardType()) - debounceTeamsChanged = false - end - - - local checkIfBoardChanged = function() - local newBoardType, numStats = determineBoardType() - if newBoardType ~= currentBoardType or numStats ~= currentStatCount then - --print("BoardChanged to " .. newBoardType .. " with " .. numStats .. " stats") - rebuildBoard(NewPlayerListGui, newBoardType, numStats) - end - end - - local function buildPlayerList() - waitForChild(game, "Players") - waitForProperty(game.Players, "LocalPlayer") - - local playerListEnabled = testPlayerListPlaces[game.PlaceId] or enablePlayerListGlobally - if localTesting and (game.PlaceId == 0) or (game.PlaceId == -1) then - playerListEnabled = true - end - if not playerListEnabled then - --No playerlist - return - end - - supportFriends = testFriendingPlaces[game.PlaceId] or enableFriendingGlobally - if localTesting and (game.PlaceId == 0) or (game.PlaceId == -1) then - supportFriends = false - end - - local teams = game:GetService("Teams") - if teams then - local teamConnections = {} - - teams.ChildAdded:connect( - function(child) - if child:IsA("Team") then - teamsChanged() - teamConnections[child] = child.Changed:connect( - function(prop) - if prop == "TeamColor" or prop == "Name" then - --Rebuild when things change - teamsChanged() - end - end) - end - end) - teams.ChildRemoved:connect( - function(child) - if child:IsA("Team") then - if teamConnections[child] then - teamConnections[child]:disconnect() - teamConnections[child] = nil - end - teamsChanged() - end - end) - end - - game.Players.ChildAdded:connect( - function(player) - if player:IsA("Player") then - addPlayerFunction(player) - end - end) - - game.Players.ChildRemoved:connect( - function(player) - if player:IsA("Player") then - if removePlayerFunction then - removePlayerFunction(player) - end - end - end) - - rebuildBoard(NewPlayerListGui, determineBoardType()) - - delay(0, - function() - while true do - wait(5) - checkIfBoardChanged() - end - end) - end - - buildPlayerList() -end - true - - - - \ No newline at end of file diff --git a/RBXLegacyLauncher/RBXLegacyLauncher/CharacterCustomization.Designer.cs b/RBXLegacyLauncher/RBXLegacyLauncher/CharacterCustomization.Designer.cs index 6dc6719..4b6b99b 100644 --- a/RBXLegacyLauncher/RBXLegacyLauncher/CharacterCustomization.Designer.cs +++ b/RBXLegacyLauncher/RBXLegacyLauncher/CharacterCustomization.Designer.cs @@ -39,46 +39,189 @@ namespace RBXLegacyLauncher System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CharacterCustomization)); this.button1 = new System.Windows.Forms.Button(); this.button2 = new System.Windows.Forms.Button(); - this.button3 = new System.Windows.Forms.Button(); + this.radioButton1 = new System.Windows.Forms.RadioButton(); + this.radioButton2 = new System.Windows.Forms.RadioButton(); + this.radioButton3 = new System.Windows.Forms.RadioButton(); + this.radioButton4 = new System.Windows.Forms.RadioButton(); + this.label1 = new System.Windows.Forms.Label(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.textBox3 = new System.Windows.Forms.TextBox(); + this.textBox4 = new System.Windows.Forms.TextBox(); + this.label4 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.label5 = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); this.SuspendLayout(); // // button1 // this.button1.Location = new System.Drawing.Point(9, 12); this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(243, 54); + this.button1.Size = new System.Drawing.Size(116, 36); this.button1.TabIndex = 31; - this.button1.Text = "Character Colors"; + this.button1.Text = "Body Colors"; this.button1.UseVisualStyleBackColor = true; this.button1.Click += new System.EventHandler(this.Button1Click); // // button2 // - this.button2.Location = new System.Drawing.Point(9, 72); + this.button2.Location = new System.Drawing.Point(135, 12); this.button2.Name = "button2"; - this.button2.Size = new System.Drawing.Size(243, 54); + this.button2.Size = new System.Drawing.Size(116, 36); this.button2.TabIndex = 32; - this.button2.Text = "Hats"; + this.button2.Text = "Accessories"; this.button2.UseVisualStyleBackColor = true; this.button2.Click += new System.EventHandler(this.Button2Click); // - // button3 + // radioButton1 // - this.button3.Location = new System.Drawing.Point(9, 132); - this.button3.Name = "button3"; - this.button3.Size = new System.Drawing.Size(242, 54); - this.button3.TabIndex = 33; - this.button3.Text = "Clothing"; - this.button3.UseVisualStyleBackColor = true; - this.button3.Click += new System.EventHandler(this.Button3Click); + this.radioButton1.Location = new System.Drawing.Point(29, 190); + this.radioButton1.Name = "radioButton1"; + this.radioButton1.Size = new System.Drawing.Size(40, 16); + this.radioButton1.TabIndex = 34; + this.radioButton1.Text = "BC"; + this.radioButton1.UseVisualStyleBackColor = true; + this.radioButton1.CheckedChanged += new System.EventHandler(this.RadioButton1CheckedChanged); + // + // radioButton2 + // + this.radioButton2.Location = new System.Drawing.Point(75, 190); + this.radioButton2.Name = "radioButton2"; + this.radioButton2.Size = new System.Drawing.Size(50, 16); + this.radioButton2.TabIndex = 35; + this.radioButton2.Text = "TBC"; + this.radioButton2.UseVisualStyleBackColor = true; + this.radioButton2.CheckedChanged += new System.EventHandler(this.RadioButton2CheckedChanged); + // + // radioButton3 + // + this.radioButton3.Location = new System.Drawing.Point(124, 190); + this.radioButton3.Name = "radioButton3"; + this.radioButton3.Size = new System.Drawing.Size(50, 16); + this.radioButton3.TabIndex = 36; + this.radioButton3.Text = "OBC"; + this.radioButton3.UseVisualStyleBackColor = true; + this.radioButton3.CheckedChanged += new System.EventHandler(this.RadioButton3CheckedChanged); + // + // radioButton4 + // + this.radioButton4.Checked = true; + this.radioButton4.Location = new System.Drawing.Point(180, 190); + this.radioButton4.Name = "radioButton4"; + this.radioButton4.Size = new System.Drawing.Size(53, 16); + this.radioButton4.TabIndex = 37; + this.radioButton4.TabStop = true; + this.radioButton4.Text = "None"; + this.radioButton4.UseVisualStyleBackColor = true; + this.radioButton4.CheckedChanged += new System.EventHandler(this.RadioButton4CheckedChanged); + // + // label1 + // + this.label1.Location = new System.Drawing.Point(94, 170); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(60, 17); + this.label1.TabIndex = 38; + this.label1.Text = "Icon Type"; + // + // textBox1 + // + this.textBox1.Location = new System.Drawing.Point(71, 69); + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(180, 20); + this.textBox1.TabIndex = 39; + this.textBox1.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + this.textBox1.TextChanged += new System.EventHandler(this.TextBox1TextChanged); + // + // textBox2 + // + this.textBox2.Location = new System.Drawing.Point(71, 95); + this.textBox2.Name = "textBox2"; + this.textBox2.Size = new System.Drawing.Size(180, 20); + this.textBox2.TabIndex = 40; + this.textBox2.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + this.textBox2.TextChanged += new System.EventHandler(this.TextBox2TextChanged); + // + // textBox3 + // + this.textBox3.Location = new System.Drawing.Point(71, 121); + this.textBox3.Name = "textBox3"; + this.textBox3.Size = new System.Drawing.Size(180, 20); + this.textBox3.TabIndex = 41; + this.textBox3.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + this.textBox3.TextChanged += new System.EventHandler(this.TextBox3TextChanged); + // + // textBox4 + // + this.textBox4.Location = new System.Drawing.Point(71, 147); + this.textBox4.Name = "textBox4"; + this.textBox4.Size = new System.Drawing.Size(180, 20); + this.textBox4.TabIndex = 42; + this.textBox4.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + this.textBox4.TextChanged += new System.EventHandler(this.TextBox4TextChanged); + // + // label4 + // + this.label4.Location = new System.Drawing.Point(12, 147); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(49, 15); + this.label4.TabIndex = 46; + this.label4.Text = "Face ID"; + // + // label3 + // + this.label3.Location = new System.Drawing.Point(12, 124); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(49, 15); + this.label3.TabIndex = 45; + this.label3.Text = "Pants ID"; + // + // label2 + // + this.label2.Location = new System.Drawing.Point(12, 98); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(42, 15); + this.label2.TabIndex = 44; + this.label2.Text = "Shirt ID"; + // + // label5 + // + this.label5.Location = new System.Drawing.Point(12, 72); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(53, 15); + this.label5.TabIndex = 43; + this.label5.Text = "T-Shirt ID"; + // + // label6 + // + this.label6.Location = new System.Drawing.Point(9, 51); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(242, 15); + this.label6.TabIndex = 47; + this.label6.Text = "Clothing"; + this.label6.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; // // CharacterCustomization // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.BackColor = System.Drawing.SystemColors.ControlLightLight; - this.ClientSize = new System.Drawing.Size(263, 198); - this.Controls.Add(this.button3); + this.ClientSize = new System.Drawing.Size(263, 218); + this.Controls.Add(this.label6); + this.Controls.Add(this.label4); + this.Controls.Add(this.label3); + this.Controls.Add(this.label2); + this.Controls.Add(this.label5); + this.Controls.Add(this.textBox4); + this.Controls.Add(this.textBox3); + this.Controls.Add(this.textBox2); + this.Controls.Add(this.textBox1); + this.Controls.Add(this.label1); + this.Controls.Add(this.radioButton4); + this.Controls.Add(this.radioButton3); + this.Controls.Add(this.radioButton2); + this.Controls.Add(this.radioButton1); this.Controls.Add(this.button2); this.Controls.Add(this.button1); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; @@ -88,8 +231,22 @@ namespace RBXLegacyLauncher this.Text = "Character Customization"; this.Load += new System.EventHandler(this.CharacterCustomizationLoad); this.ResumeLayout(false); + this.PerformLayout(); } - private System.Windows.Forms.Button button3; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.TextBox textBox4; + private System.Windows.Forms.TextBox textBox3; + private System.Windows.Forms.TextBox textBox2; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.RadioButton radioButton4; + private System.Windows.Forms.RadioButton radioButton3; + private System.Windows.Forms.RadioButton radioButton2; + private System.Windows.Forms.RadioButton radioButton1; private System.Windows.Forms.Button button2; private System.Windows.Forms.Button button1; } diff --git a/RBXLegacyLauncher/RBXLegacyLauncher/CharacterCustomization.cs b/RBXLegacyLauncher/RBXLegacyLauncher/CharacterCustomization.cs index b8c5e41..c4fe919 100644 --- a/RBXLegacyLauncher/RBXLegacyLauncher/CharacterCustomization.cs +++ b/RBXLegacyLauncher/RBXLegacyLauncher/CharacterCustomization.cs @@ -36,6 +36,26 @@ namespace RBXLegacyLauncher void CharacterCustomizationLoad(object sender, EventArgs e) { + textBox1.Text = GlobalVars.Custom_TShirt.ToString(); + textBox2.Text = GlobalVars.Custom_Shirt.ToString(); + textBox3.Text = GlobalVars.Custom_Pants.ToString(); + textBox4.Text = GlobalVars.Custom_Face.ToString(); + if (GlobalVars.Custom_IconType.Equals("BC")) + { + radioButton1.Checked = true; + } + else if (GlobalVars.Custom_IconType.Equals("TBC")) + { + radioButton2.Checked = true; + } + else if (GlobalVars.Custom_IconType.Equals("OBC")) + { + radioButton3.Checked = true; + } + else if (GlobalVars.Custom_IconType.Equals("NBC")) + { + radioButton4.Checked = true; + } string hatdir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\charcustom\\hats"; if (Directory.Exists(hatdir)) { @@ -59,10 +79,104 @@ namespace RBXLegacyLauncher chats.Show(); } - void Button3Click(object sender, EventArgs e) + void TextBox1TextChanged(object sender, EventArgs e) { - CharacterCustomization_ClothingMenu clothes = new CharacterCustomization_ClothingMenu(); - clothes.Show(); + int parsedValue; + if (int.TryParse(textBox1.Text, out parsedValue)) + { + if (textBox1.Text.Equals("")) + { + GlobalVars.Custom_TShirt = 0; + } + else + { + GlobalVars.Custom_TShirt = Convert.ToInt32(textBox1.Text); + } + } + else + { + GlobalVars.Custom_TShirt = 0; + } + } + + void TextBox2TextChanged(object sender, EventArgs e) + { + int parsedValue; + if (int.TryParse(textBox2.Text, out parsedValue)) + { + if (textBox2.Text.Equals("")) + { + GlobalVars.Custom_Shirt = 0; + } + else + { + GlobalVars.Custom_Shirt = Convert.ToInt32(textBox2.Text); + } + } + else + { + GlobalVars.Custom_Shirt = 0; + } + } + + void TextBox3TextChanged(object sender, EventArgs e) + { + int parsedValue; + if (int.TryParse(textBox3.Text, out parsedValue)) + { + if (textBox3.Text.Equals("")) + { + GlobalVars.Custom_Pants = 0; + } + else + { + GlobalVars.Custom_Pants = Convert.ToInt32(textBox3.Text); + } + } + else + { + GlobalVars.Custom_Pants = 0; + } + } + + void TextBox4TextChanged(object sender, EventArgs e) + { + int parsedValue; + if (int.TryParse(textBox4.Text, out parsedValue)) + { + if (textBox4.Text.Equals("")) + { + GlobalVars.Custom_Face = 0; + } + else + { + GlobalVars.Custom_Face = Convert.ToInt32(textBox4.Text); + } + } + else + { + GlobalVars.Custom_Face = 0; + } + } + + void RadioButton1CheckedChanged(object sender, EventArgs e) + { + GlobalVars.Custom_IconType = "BC"; + } + + void RadioButton2CheckedChanged(object sender, EventArgs e) + { + GlobalVars.Custom_IconType = "TBC"; + } + + void RadioButton3CheckedChanged(object sender, EventArgs e) + { + GlobalVars.Custom_IconType = "OBC"; + } + + void RadioButton4CheckedChanged(object sender, EventArgs e) + { + GlobalVars.Custom_IconType = "NBC"; } } } diff --git a/RBXLegacyLauncher/RBXLegacyLauncher/CharacterCustomization_ClothingMenu.cs b/RBXLegacyLauncher/RBXLegacyLauncher/CharacterCustomization_ClothingMenu.cs deleted file mode 100644 index 8b575ff..0000000 --- a/RBXLegacyLauncher/RBXLegacyLauncher/CharacterCustomization_ClothingMenu.cs +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Created by SharpDevelop. - * User: BITL - * Date: 6/17/2017 - * Time: 8:41 AM - * - * To change this template use Tools | Options | Coding | Edit Standard Headers. - */ -using System; -using System.Drawing; -using System.Windows.Forms; - -namespace RBXLegacyLauncher -{ - /// - /// Description of CharacterCustomization_ClothingMenu. - /// - public partial class CharacterCustomization_ClothingMenu : Form - { - public CharacterCustomization_ClothingMenu() - { - // - // The InitializeComponent() call is required for Windows Forms designer support. - // - InitializeComponent(); - - // - // TODO: Add constructor code after the InitializeComponent() call. - // - } - - void TextBox1TextChanged(object sender, EventArgs e) - { - int parsedValue; - if (int.TryParse(textBox1.Text, out parsedValue)) - { - if (textBox1.Text.Equals("")) - { - GlobalVars.Custom_TShirt = 0; - } - else - { - GlobalVars.Custom_TShirt = Convert.ToInt32(textBox1.Text); - } - } - else - { - GlobalVars.Custom_TShirt = 0; - } - } - - void TextBox2TextChanged(object sender, EventArgs e) - { - int parsedValue; - if (int.TryParse(textBox2.Text, out parsedValue)) - { - if (textBox2.Text.Equals("")) - { - GlobalVars.Custom_Shirt = 0; - } - else - { - GlobalVars.Custom_Shirt = Convert.ToInt32(textBox2.Text); - } - } - else - { - GlobalVars.Custom_Shirt = 0; - } - } - - void TextBox3TextChanged(object sender, EventArgs e) - { - int parsedValue; - if (int.TryParse(textBox3.Text, out parsedValue)) - { - if (textBox3.Text.Equals("")) - { - GlobalVars.Custom_Pants = 0; - } - else - { - GlobalVars.Custom_Pants = Convert.ToInt32(textBox3.Text); - } - } - else - { - GlobalVars.Custom_Pants = 0; - } - } - - void TextBox4TextChanged(object sender, EventArgs e) - { - int parsedValue; - if (int.TryParse(textBox4.Text, out parsedValue)) - { - if (textBox4.Text.Equals("")) - { - GlobalVars.Custom_Face = 0; - } - else - { - GlobalVars.Custom_Face = Convert.ToInt32(textBox4.Text); - } - } - else - { - GlobalVars.Custom_Face = 0; - } - } - - void CharacterCustomization_ClothingMenuLoad(object sender, EventArgs e) - { - textBox1.Text = GlobalVars.Custom_TShirt.ToString(); - textBox2.Text = GlobalVars.Custom_Shirt.ToString(); - textBox3.Text = GlobalVars.Custom_Pants.ToString(); - textBox4.Text = GlobalVars.Custom_Face.ToString(); - } - } -} diff --git a/RBXLegacyLauncher/RBXLegacyLauncher/GlobalVars.cs b/RBXLegacyLauncher/RBXLegacyLauncher/GlobalVars.cs index ee3cf9b..5498ff6 100644 --- a/RBXLegacyLauncher/RBXLegacyLauncher/GlobalVars.cs +++ b/RBXLegacyLauncher/RBXLegacyLauncher/GlobalVars.cs @@ -10,11 +10,13 @@ public static string SharedArgs = ""; public static string DefaultScript = ""; public static string DefaultScriptMD5 = ""; + public static bool AdminMode = false; //vars for loader public static bool ReadyToLaunch = false; //server settings. public static string Map = "Baseplate.rbxl"; public static int RobloxPort = 53640; + public static int ServerPort = 53640; public static int DefaultRobloxPort = 53640; public static int PlayerLimit = 12; //player settings @@ -40,6 +42,11 @@ public static bool ClientCreator_LegacyMode = false; public static string ClientCreator_SelectedClientMD5 = ""; public static string ClientCreator_SelectedClientVersion = ""; + //infoeditor + public static string InfoEditor_Version = ""; + public static string InfoEditor_DefaultClient = ""; + public static string InfoEditor_ScriptPath = ""; + public static string InfoEditor_ScriptMD5 = ""; //charcustom public static string Custom_Hat1ID_Offline = "NoHat.rbxm"; public static string Custom_Hat2ID_Offline = "NoHat.rbxm"; @@ -48,18 +55,17 @@ public static int Custom_Shirt = 0; public static int Custom_Pants = 0; public static int Custom_Face = 0; + public static string Custom_IconType = "NBC"; public static int HeadColorID = 24; public static int TorsoColorID = 23; public static int LeftArmColorID = 24; public static int RightArmColorID = 24; public static int LeftLegColorID = 119; public static int RightLegColorID = 119; - //color menu. public static string ColorMenu_HeadColor = "Color [A=255, R=245, G=205, B=47]"; public static string ColorMenu_TorsoColor = "Color [A=255, R=13, G=105, B=172]"; public static string ColorMenu_LeftArmColor = "Color [A=255, R=245, G=205, B=47]"; public static string ColorMenu_RightArmColor = "Color [A=255, R=245, G=205, B=47]"; public static string ColorMenu_LeftLegColor = "Color [A=255, R=164, G=189, B=71]"; public static string ColorMenu_RightLegColor = "Color [A=255, R=164, G=189, B=71]"; - public static bool AdminMode = false; } \ No newline at end of file diff --git a/RBXLegacyLauncher/RBXLegacyLauncher/CharacterCustomization_ClothingMenu.Designer.cs b/RBXLegacyLauncher/RBXLegacyLauncher/InfoEditor.Designer.cs similarity index 51% rename from RBXLegacyLauncher/RBXLegacyLauncher/CharacterCustomization_ClothingMenu.Designer.cs rename to RBXLegacyLauncher/RBXLegacyLauncher/InfoEditor.Designer.cs index e17b9f5..30c2c57 100644 --- a/RBXLegacyLauncher/RBXLegacyLauncher/CharacterCustomization_ClothingMenu.Designer.cs +++ b/RBXLegacyLauncher/RBXLegacyLauncher/InfoEditor.Designer.cs @@ -1,14 +1,14 @@ /* * Created by SharpDevelop. - * User: BITL - * Date: 6/17/2017 - * Time: 8:41 AM + * User: BITL-Gaming + * Date: 11/28/2016 + * Time: 7:55 AM * * To change this template use Tools | Options | Coding | Edit Standard Headers. */ namespace RBXLegacyLauncher { - partial class CharacterCustomization_ClothingMenu + partial class InfoEditor { /// /// Designer variable used to keep track of non-visual components. @@ -36,110 +36,149 @@ namespace RBXLegacyLauncher /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CharacterCustomization_ClothingMenu)); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(InfoEditor)); + this.button1 = new System.Windows.Forms.Button(); + this.button2 = new System.Windows.Forms.Button(); + this.button3 = new System.Windows.Forms.Button(); this.label1 = new System.Windows.Forms.Label(); this.label2 = new System.Windows.Forms.Label(); this.label3 = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); this.textBox1 = new System.Windows.Forms.TextBox(); this.textBox2 = new System.Windows.Forms.TextBox(); this.textBox3 = new System.Windows.Forms.TextBox(); this.textBox4 = new System.Windows.Forms.TextBox(); - this.label4 = new System.Windows.Forms.Label(); this.SuspendLayout(); // + // button1 + // + this.button1.Location = new System.Drawing.Point(166, 204); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(154, 30); + this.button1.TabIndex = 7; + this.button1.Text = "Save"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.Button1Click); + // + // button2 + // + this.button2.Location = new System.Drawing.Point(7, 204); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(150, 30); + this.button2.TabIndex = 10; + this.button2.Text = "Load"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(this.Button2Click); + // + // button3 + // + this.button3.Location = new System.Drawing.Point(8, 175); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(312, 23); + this.button3.TabIndex = 12; + this.button3.Text = "New info.txt"; + this.button3.UseVisualStyleBackColor = true; + this.button3.Click += new System.EventHandler(this.Button3Click); + // // label1 // - this.label1.Location = new System.Drawing.Point(12, 9); + this.label1.Location = new System.Drawing.Point(7, 2); this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(53, 15); - this.label1.TabIndex = 0; - this.label1.Text = "T-Shirt ID"; + this.label1.Size = new System.Drawing.Size(44, 15); + this.label1.TabIndex = 13; + this.label1.Text = "Version"; // // label2 // - this.label2.Location = new System.Drawing.Point(12, 37); + this.label2.Location = new System.Drawing.Point(7, 43); this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(42, 15); - this.label2.TabIndex = 2; - this.label2.Text = "Shirt ID"; + this.label2.Size = new System.Drawing.Size(76, 17); + this.label2.TabIndex = 14; + this.label2.Text = "Default Client"; // // label3 // - this.label3.Location = new System.Drawing.Point(12, 62); + this.label3.Location = new System.Drawing.Point(7, 86); this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(49, 15); - this.label3.TabIndex = 3; - this.label3.Text = "Pants ID"; + this.label3.Size = new System.Drawing.Size(76, 18); + this.label3.TabIndex = 15; + this.label3.Text = "Script Path"; + // + // label4 + // + this.label4.Location = new System.Drawing.Point(7, 130); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(71, 16); + this.label4.TabIndex = 16; + this.label4.Text = "Script MD5"; // // textBox1 // - this.textBox1.Location = new System.Drawing.Point(71, 6); + this.textBox1.Location = new System.Drawing.Point(8, 20); this.textBox1.Name = "textBox1"; - this.textBox1.Size = new System.Drawing.Size(100, 20); - this.textBox1.TabIndex = 4; + this.textBox1.Size = new System.Drawing.Size(311, 20); + this.textBox1.TabIndex = 17; this.textBox1.TextChanged += new System.EventHandler(this.TextBox1TextChanged); // // textBox2 // - this.textBox2.Location = new System.Drawing.Point(71, 32); + this.textBox2.Location = new System.Drawing.Point(7, 63); this.textBox2.Name = "textBox2"; - this.textBox2.Size = new System.Drawing.Size(100, 20); - this.textBox2.TabIndex = 5; + this.textBox2.Size = new System.Drawing.Size(313, 20); + this.textBox2.TabIndex = 18; this.textBox2.TextChanged += new System.EventHandler(this.TextBox2TextChanged); // // textBox3 // - this.textBox3.Location = new System.Drawing.Point(71, 59); + this.textBox3.Location = new System.Drawing.Point(8, 107); this.textBox3.Name = "textBox3"; - this.textBox3.Size = new System.Drawing.Size(100, 20); - this.textBox3.TabIndex = 6; + this.textBox3.Size = new System.Drawing.Size(312, 20); + this.textBox3.TabIndex = 19; this.textBox3.TextChanged += new System.EventHandler(this.TextBox3TextChanged); // // textBox4 // - this.textBox4.Location = new System.Drawing.Point(71, 86); + this.textBox4.Location = new System.Drawing.Point(8, 149); this.textBox4.Name = "textBox4"; - this.textBox4.Size = new System.Drawing.Size(100, 20); - this.textBox4.TabIndex = 7; + this.textBox4.Size = new System.Drawing.Size(311, 20); + this.textBox4.TabIndex = 20; this.textBox4.TextChanged += new System.EventHandler(this.TextBox4TextChanged); // - // label4 - // - this.label4.Location = new System.Drawing.Point(12, 89); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(49, 15); - this.label4.TabIndex = 8; - this.label4.Text = "Face ID"; - // - // CharacterCustomization_ClothingMenu + // InfoEditor // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.BackColor = System.Drawing.SystemColors.ControlLightLight; - this.ClientSize = new System.Drawing.Size(179, 113); - this.Controls.Add(this.label4); + this.ClientSize = new System.Drawing.Size(332, 247); this.Controls.Add(this.textBox4); this.Controls.Add(this.textBox3); this.Controls.Add(this.textBox2); this.Controls.Add(this.textBox1); + this.Controls.Add(this.label4); this.Controls.Add(this.label3); this.Controls.Add(this.label2); this.Controls.Add(this.label1); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.Controls.Add(this.button3); + this.Controls.Add(this.button2); + this.Controls.Add(this.button1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.Name = "CharacterCustomization_ClothingMenu"; - this.Text = "Clothing"; - this.Load += new System.EventHandler(this.CharacterCustomization_ClothingMenuLoad); + this.Name = "InfoEditor"; + this.Text = "Info Editor"; + this.Load += new System.EventHandler(this.ClientinfoCreatorLoad); this.ResumeLayout(false); this.PerformLayout(); } - private System.Windows.Forms.Label label4; private System.Windows.Forms.TextBox textBox4; private System.Windows.Forms.TextBox textBox3; + private System.Windows.Forms.Label label4; private System.Windows.Forms.TextBox textBox2; - private System.Windows.Forms.TextBox textBox1; private System.Windows.Forms.Label label3; + private System.Windows.Forms.Button button3; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.Button button1; private System.Windows.Forms.Label label2; private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox textBox1; } } diff --git a/RBXLegacyLauncher/RBXLegacyLauncher/InfoEditor.cs b/RBXLegacyLauncher/RBXLegacyLauncher/InfoEditor.cs new file mode 100644 index 0000000..2c24bb1 --- /dev/null +++ b/RBXLegacyLauncher/RBXLegacyLauncher/InfoEditor.cs @@ -0,0 +1,142 @@ +/* + * Created by SharpDevelop. + * User: BITL-Gaming + * Date: 11/28/2016 + * Time: 7:55 AM + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ +using System; +using System.Drawing; +using System.Windows.Forms; +using System.IO; +using System.Diagnostics; +using System.Threading; + +namespace RBXLegacyLauncher +{ + /// + /// Description of ClientinfoCreator. + /// + public partial class InfoEditor : Form + { + public InfoEditor() + { + // + // The InitializeComponent() call is required for Windows Forms designer support. + // + InitializeComponent(); + + // + // TODO: Add constructor code after the InitializeComponent() call. + // + } + + void Button2Click(object sender, EventArgs e) + { + using (var ofd = new OpenFileDialog()) + { + ofd.Filter = "Text files (*.txt)|*.txt"; + ofd.FilterIndex = 2; + ofd.FileName = "info.txt"; + ofd.Title = "Load info.txt"; + if (ofd.ShowDialog() == DialogResult.OK) + { + string line1; + string Decryptline1, Decryptline2, Decryptline3, Decryptline4; + + using(StreamReader reader = new StreamReader(ofd.FileName)) + { + line1 = reader.ReadLine(); + } + + if (!SecurityFuncs.IsBase64String(line1)) + return; + + string ConvertedLine = SecurityFuncs.Base64Decode(line1); + string[] result = ConvertedLine.Split('|'); + Decryptline1 = SecurityFuncs.Base64Decode(result[0]); + Decryptline2 = SecurityFuncs.Base64Decode(result[1]); + Decryptline3 = SecurityFuncs.Base64Decode(result[2]); + Decryptline4 = SecurityFuncs.Base64Decode(result[3]); + + GlobalVars.InfoEditor_Version = Decryptline1; + GlobalVars.InfoEditor_DefaultClient = Decryptline2; + GlobalVars.InfoEditor_ScriptPath = Decryptline3; + GlobalVars.InfoEditor_ScriptMD5 = Decryptline4; + + textBox1.Text = GlobalVars.InfoEditor_Version; + textBox2.Text = GlobalVars.InfoEditor_DefaultClient; + textBox3.Text = GlobalVars.InfoEditor_ScriptPath; + textBox4.Text = GlobalVars.InfoEditor_ScriptMD5.ToUpper(); + } + } + } + + void Button1Click(object sender, EventArgs e) + { + using (var sfd = new SaveFileDialog()) + { + sfd.Filter = "Text files (*.txt)|*.txt"; + sfd.FilterIndex = 2; + sfd.FileName = "info.txt"; + sfd.Title = "Save info.txt"; + + if (sfd.ShowDialog() == DialogResult.OK) + { + string[] lines = { + SecurityFuncs.Base64Encode(GlobalVars.InfoEditor_Version.ToString()), + SecurityFuncs.Base64Encode(GlobalVars.InfoEditor_DefaultClient.ToString()), + SecurityFuncs.Base64Encode(GlobalVars.InfoEditor_ScriptPath.ToString()), + SecurityFuncs.Base64Encode(GlobalVars.InfoEditor_ScriptMD5.ToString()) + }; + File.WriteAllText(sfd.FileName, SecurityFuncs.Base64Encode(string.Join("|",lines))); + } + } + } + + void ClientinfoCreatorLoad(object sender, EventArgs e) + { + + } + + void Button3Click(object sender, EventArgs e) + { + GlobalVars.InfoEditor_Version = ""; + GlobalVars.InfoEditor_DefaultClient = ""; + GlobalVars.InfoEditor_ScriptPath = ""; + GlobalVars.InfoEditor_ScriptMD5 = ""; + textBox1.Text = GlobalVars.InfoEditor_Version; + textBox2.Text = GlobalVars.InfoEditor_DefaultClient; + textBox3.Text = GlobalVars.InfoEditor_ScriptPath; + textBox4.Text = GlobalVars.InfoEditor_ScriptMD5.ToUpper(); + } + + void TextBox1TextChanged(object sender, EventArgs e) + { + GlobalVars.InfoEditor_Version = textBox1.Text; + } + + void TextBox2TextChanged(object sender, EventArgs e) + { + GlobalVars.InfoEditor_DefaultClient = textBox2.Text; + } + + void TextBox3TextChanged(object sender, EventArgs e) + { + GlobalVars.InfoEditor_ScriptPath = textBox3.Text; + } + + void TextBox4TextChanged(object sender, EventArgs e) + { + textBox4.Text = textBox4.Text.ToUpper(); + GlobalVars.InfoEditor_ScriptMD5 = textBox4.Text.ToUpper(); + } + + void Button4Click(object sender, EventArgs e) + { + DocForm doc = new DocForm(); + doc.Show(); + } + } +} diff --git a/RBXLegacyLauncher/RBXLegacyLauncher/CharacterCustomization_ClothingMenu.resx b/RBXLegacyLauncher/RBXLegacyLauncher/InfoEditor.resx similarity index 100% rename from RBXLegacyLauncher/RBXLegacyLauncher/CharacterCustomization_ClothingMenu.resx rename to RBXLegacyLauncher/RBXLegacyLauncher/InfoEditor.resx diff --git a/RBXLegacyLauncher/RBXLegacyLauncher/LauncherFuncs.cs b/RBXLegacyLauncher/RBXLegacyLauncher/LauncherFuncs.cs index 2164b1e..e5ee1c9 100644 --- a/RBXLegacyLauncher/RBXLegacyLauncher/LauncherFuncs.cs +++ b/RBXLegacyLauncher/RBXLegacyLauncher/LauncherFuncs.cs @@ -31,7 +31,7 @@ namespace RBXLegacyLauncher public static void ReadConfigValues(string cfgpath) { string line1; - string Decryptline1, Decryptline2, Decryptline3, Decryptline4, Decryptline5, Decryptline6, Decryptline7, Decryptline8, Decryptline9, Decryptline10, Decryptline11, Decryptline12, Decryptline13, Decryptline14, Decryptline15, Decryptline16, Decryptline17, Decryptline18, Decryptline19, Decryptline20, Decryptline21, Decryptline22, Decryptline23, Decryptline24, Decryptline25, Decryptline26; + string Decryptline1, Decryptline2, Decryptline3, Decryptline4, Decryptline5, Decryptline6, Decryptline7, Decryptline8, Decryptline9, Decryptline10, Decryptline11, Decryptline12, Decryptline13, Decryptline14, Decryptline15, Decryptline16, Decryptline17, Decryptline18, Decryptline19, Decryptline20, Decryptline21, Decryptline22, Decryptline23, Decryptline24, Decryptline25, Decryptline26, Decryptline27; using(StreamReader reader = new StreamReader(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\config.txt")) { @@ -69,6 +69,7 @@ namespace RBXLegacyLauncher Decryptline24 = SecurityFuncs.Base64Decode(result[23]); Decryptline25 = SecurityFuncs.Base64Decode(result[24]); Decryptline26 = SecurityFuncs.Base64Decode(result[25]); + Decryptline27 = SecurityFuncs.Base64Decode(result[26]); bool bline1 = Convert.ToBoolean(Decryptline1); GlobalVars.CloseOnLaunch = bline1; @@ -83,7 +84,7 @@ namespace RBXLegacyLauncher GlobalVars.Map = Decryptline5; int iline6 = Convert.ToInt32(Decryptline6); - GlobalVars.RobloxPort = iline6; + GlobalVars.ServerPort = iline6; GlobalVars.Custom_Hat1ID_Offline = Decryptline7; GlobalVars.Custom_Hat2ID_Offline = Decryptline8; @@ -116,7 +117,7 @@ namespace RBXLegacyLauncher int iline22 = Convert.ToInt32(Decryptline22); GlobalVars.PlayerLimit = iline22; - + int iline23 = Convert.ToInt32(Decryptline23); GlobalVars.Custom_TShirt = iline23; int iline24 = Convert.ToInt32(Decryptline24); @@ -125,6 +126,7 @@ namespace RBXLegacyLauncher GlobalVars.Custom_Pants = iline25; int iline26 = Convert.ToInt32(Decryptline26); GlobalVars.Custom_Face = iline26; + GlobalVars.Custom_IconType = Decryptline27; } public static void WriteConfigValues(string cfgpath) @@ -135,7 +137,7 @@ namespace RBXLegacyLauncher SecurityFuncs.Base64Encode(GlobalVars.PlayerName.ToString()), SecurityFuncs.Base64Encode(GlobalVars.SelectedClient.ToString()), SecurityFuncs.Base64Encode(GlobalVars.Map.ToString()), - SecurityFuncs.Base64Encode(GlobalVars.RobloxPort.ToString()), + SecurityFuncs.Base64Encode(GlobalVars.ServerPort.ToString()), SecurityFuncs.Base64Encode(GlobalVars.Custom_Hat1ID_Offline.ToString()), SecurityFuncs.Base64Encode(GlobalVars.Custom_Hat2ID_Offline.ToString()), SecurityFuncs.Base64Encode(GlobalVars.Custom_Hat3ID_Offline.ToString()), @@ -155,19 +157,33 @@ namespace RBXLegacyLauncher SecurityFuncs.Base64Encode(GlobalVars.Custom_TShirt.ToString()), SecurityFuncs.Base64Encode(GlobalVars.Custom_Shirt.ToString()), SecurityFuncs.Base64Encode(GlobalVars.Custom_Pants.ToString()), - SecurityFuncs.Base64Encode(GlobalVars.Custom_Face.ToString()) + SecurityFuncs.Base64Encode(GlobalVars.Custom_Face.ToString()), + SecurityFuncs.Base64Encode(GlobalVars.Custom_IconType.ToString()) }; File.WriteAllText(cfgpath, SecurityFuncs.Base64Encode(string.Join("|",lines))); } public static void ResetConfigValues() { + string line1; + string Decryptline2; + using(StreamReader reader = new StreamReader(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\info.txt")) + { + line1 = reader.ReadLine(); + } + + if (!SecurityFuncs.IsBase64String(line1)) + return; + string ConvertedLine = SecurityFuncs.Base64Decode(line1); + string[] result = ConvertedLine.Split('|'); + Decryptline2 = SecurityFuncs.Base64Decode(result[1]); + GlobalVars.CloseOnLaunch = false; GlobalVars.UserID = 0; GlobalVars.PlayerName = "Player"; - GlobalVars.SelectedClient = "Mid-2008"; + GlobalVars.SelectedClient = Decryptline2; GlobalVars.Map = "Baseplate.rbxl"; - GlobalVars.RobloxPort = 53640; + GlobalVars.ServerPort = 53640; GlobalVars.Custom_Hat1ID_Offline = "NoHat.rbxm"; GlobalVars.Custom_Hat2ID_Offline = "NoHat.rbxm"; GlobalVars.Custom_Hat3ID_Offline = "NoHat.rbxm"; @@ -188,6 +204,7 @@ namespace RBXLegacyLauncher GlobalVars.Custom_Shirt = 0; GlobalVars.Custom_Pants = 0; GlobalVars.Custom_Face = 0; + GlobalVars.Custom_IconType = "NBC"; } public static void ReadClientValues(string clientpath) @@ -274,18 +291,5 @@ namespace RBXLegacyLauncher //2147483647 is max id. GlobalVars.UserID = randomID; } - - public static bool IsProcessOpen(string name) - { - foreach (Process clsProcess in Process.GetProcesses()) - { - if (clsProcess.ProcessName.Contains(name)) - { - return true; - } - } - - return false; - } } } diff --git a/RBXLegacyLauncher/RBXLegacyLauncher/LoaderForm.cs b/RBXLegacyLauncher/RBXLegacyLauncher/LoaderForm.cs index 51eea62..72cae20 100644 --- a/RBXLegacyLauncher/RBXLegacyLauncher/LoaderForm.cs +++ b/RBXLegacyLauncher/RBXLegacyLauncher/LoaderForm.cs @@ -85,26 +85,32 @@ namespace RBXLegacyLauncher string HatIDOffline3 = GlobalVars.Custom_Hat3ID_Offline; if (GlobalVars.UsesPlayerName == true && GlobalVars.UsesID == true) { - args = "-script " + quote + "dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSConnect(" + GlobalVars.UserID + ",'" + GlobalVars.IP + "'," + GlobalVars.RobloxPort + ",'" + GlobalVars.PlayerName + "','" + HatIDOffline1 + "','" + HatIDOffline2 + "','" + HatIDOffline3 + "'," + GlobalVars.HeadColorID + "," + GlobalVars.TorsoColorID + "," + GlobalVars.LeftArmColorID + "," + GlobalVars.RightArmColorID + "," + GlobalVars.LeftLegColorID + "," + GlobalVars.RightLegColorID + ",'" + GlobalVars.Custom_TShirt + "','" + GlobalVars.Custom_Shirt + "','" + GlobalVars.Custom_Pants + "','" + GlobalVars.Custom_Face + "');" + quote; + args = "-script " + quote + "dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSConnect(" + GlobalVars.UserID + ",'" + GlobalVars.IP + "'," + GlobalVars.RobloxPort + ",'" + GlobalVars.PlayerName + "','" + HatIDOffline1 + "','" + HatIDOffline2 + "','" + HatIDOffline3 + "'," + GlobalVars.HeadColorID + "," + GlobalVars.TorsoColorID + "," + GlobalVars.LeftArmColorID + "," + GlobalVars.RightArmColorID + "," + GlobalVars.LeftLegColorID + "," + GlobalVars.RightLegColorID + ",'" + GlobalVars.Custom_TShirt + "','" + GlobalVars.Custom_Shirt + "','" + GlobalVars.Custom_Pants + "','" + GlobalVars.Custom_Face + "','" + GlobalVars.Custom_IconType + "');" + quote; } else if (GlobalVars.UsesPlayerName == false && GlobalVars.UsesID == true) { - args = "-script " + quote + "dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSConnect(" + GlobalVars.UserID + ",'" + GlobalVars.IP + "'," + GlobalVars.RobloxPort + ",'Player','" + HatIDOffline1 + "','" + HatIDOffline2 + "','" + HatIDOffline3 + "'," + GlobalVars.HeadColorID + "," + GlobalVars.TorsoColorID + "," + GlobalVars.LeftArmColorID + "," + GlobalVars.RightArmColorID + "," + GlobalVars.LeftLegColorID + "," + GlobalVars.RightLegColorID + ",'" + GlobalVars.Custom_TShirt + "','" + GlobalVars.Custom_Shirt + "','" + GlobalVars.Custom_Pants + "','" + GlobalVars.Custom_Face + "');" + quote; + args = "-script " + quote + "dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSConnect(" + GlobalVars.UserID + ",'" + GlobalVars.IP + "'," + GlobalVars.RobloxPort + ",'Player','" + HatIDOffline1 + "','" + HatIDOffline2 + "','" + HatIDOffline3 + "'," + GlobalVars.HeadColorID + "," + GlobalVars.TorsoColorID + "," + GlobalVars.LeftArmColorID + "," + GlobalVars.RightArmColorID + "," + GlobalVars.LeftLegColorID + "," + GlobalVars.RightLegColorID + ",'" + GlobalVars.Custom_TShirt + "','" + GlobalVars.Custom_Shirt + "','" + GlobalVars.Custom_Pants + "','" + GlobalVars.Custom_Face + "','" + GlobalVars.Custom_IconType + "');" + quote; } else if (GlobalVars.UsesPlayerName == true && GlobalVars.UsesID == false) { - args = "-script " + quote + "dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSConnect(0,'" + GlobalVars.IP + "'," + GlobalVars.RobloxPort + ",'" + GlobalVars.PlayerName + "','" + HatIDOffline1 + "','" + HatIDOffline2 + "','" + HatIDOffline3 + "'," + GlobalVars.HeadColorID + "," + GlobalVars.TorsoColorID + "," + GlobalVars.LeftArmColorID + "," + GlobalVars.RightArmColorID + "," + GlobalVars.LeftLegColorID + "," + GlobalVars.RightLegColorID + ",'" + GlobalVars.Custom_TShirt + "','" + GlobalVars.Custom_Shirt + "','" + GlobalVars.Custom_Pants + "','" + GlobalVars.Custom_Face + "');" + quote; + args = "-script " + quote + "dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSConnect(0,'" + GlobalVars.IP + "'," + GlobalVars.RobloxPort + ",'" + GlobalVars.PlayerName + "','" + HatIDOffline1 + "','" + HatIDOffline2 + "','" + HatIDOffline3 + "'," + GlobalVars.HeadColorID + "," + GlobalVars.TorsoColorID + "," + GlobalVars.LeftArmColorID + "," + GlobalVars.RightArmColorID + "," + GlobalVars.LeftLegColorID + "," + GlobalVars.RightLegColorID + ",'" + GlobalVars.Custom_TShirt + "','" + GlobalVars.Custom_Shirt + "','" + GlobalVars.Custom_Pants + "','" + GlobalVars.Custom_Face + "','" + GlobalVars.Custom_IconType + "');" + quote; } else if (GlobalVars.UsesPlayerName == false && GlobalVars.UsesID == false) { - args = "-script " + quote + "dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSConnect(0,'" + GlobalVars.IP + "'," + GlobalVars.RobloxPort + ",'Player','" + HatIDOffline1 + "','" + HatIDOffline2 + "','" + HatIDOffline3 + "'," + GlobalVars.HeadColorID + "," + GlobalVars.TorsoColorID + "," + GlobalVars.LeftArmColorID + "," + GlobalVars.RightArmColorID + "," + GlobalVars.LeftLegColorID + "," + GlobalVars.RightLegColorID + ",'" + GlobalVars.Custom_TShirt + "','" + GlobalVars.Custom_Shirt + "','" + GlobalVars.Custom_Pants + "','" + GlobalVars.Custom_Face + "');" + quote; + args = "-script " + quote + "dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSConnect(0,'" + GlobalVars.IP + "'," + GlobalVars.RobloxPort + ",'Player','" + HatIDOffline1 + "','" + HatIDOffline2 + "','" + HatIDOffline3 + "'," + GlobalVars.HeadColorID + "," + GlobalVars.TorsoColorID + "," + GlobalVars.LeftArmColorID + "," + GlobalVars.RightArmColorID + "," + GlobalVars.LeftLegColorID + "," + GlobalVars.RightLegColorID + ",'" + GlobalVars.Custom_TShirt + "','" + GlobalVars.Custom_Shirt + "','" + GlobalVars.Custom_Pants + "','" + GlobalVars.Custom_Face + "','" + GlobalVars.Custom_IconType + "');" + quote; } try { if (SecurityFuncs.checkClientMD5(client) == true) { - Process.Start(rbxexe, args); - this.Close(); + Process pclient = new Process(); + pclient.StartInfo.FileName = rbxexe; + pclient.StartInfo.Arguments = args; + pclient.EnableRaisingEvents = true; + pclient.Exited += new EventHandler(ClientExited); + pclient.Start(); + this.ShowInTaskbar = false; + this.WindowState = FormWindowState.Minimized; } else { @@ -122,6 +128,27 @@ namespace RBXLegacyLauncher } } + void ClientExited(object sender, EventArgs e) + { + Process[] sudp = Process.GetProcessesByName("sudppipe"); + if (sudp != null) + { + foreach (var process in sudp) + { + process.Kill(); + } + } + + Process[] self = Process.GetProcessesByName("RBXLegacyLauncher"); + if (self != null) + { + foreach (var process in self) + { + process.Kill(); + } + } + } + private void CheckIfFinished(object state) { if (GlobalVars.ReadyToLaunch == false) @@ -137,7 +164,12 @@ namespace RBXLegacyLauncher string port = SecurityFuncs.Base64Decode(SplitArg[1]); string client = SecurityFuncs.Base64Decode(SplitArg[2]); label1.Text = "Launching " + client + " Game..."; - Process.Start("sudppipe.exe", "-p " + ip + " " + port + " " + port); + Process sudp = new Process(); + sudp.StartInfo.FileName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\sudppipe.exe"; + sudp.StartInfo.Arguments = "-p " + ip + " " + port + " " + port; + sudp.StartInfo.UseShellExecute = false; + sudp.StartInfo.CreateNoWindow = true; + sudp.Start(); StartGame(); } } diff --git a/RBXLegacyLauncher/RBXLegacyLauncher/MainForm.Designer.cs b/RBXLegacyLauncher/RBXLegacyLauncher/MainForm.Designer.cs index bafa5ca..87ed9e6 100644 --- a/RBXLegacyLauncher/RBXLegacyLauncher/MainForm.Designer.cs +++ b/RBXLegacyLauncher/RBXLegacyLauncher/MainForm.Designer.cs @@ -40,6 +40,9 @@ namespace RBXLegacyLauncher this.pictureBox1 = new System.Windows.Forms.PictureBox(); this.tabControl1 = new System.Windows.Forms.TabControl(); this.tabPage1 = new System.Windows.Forms.TabPage(); + this.button11 = new System.Windows.Forms.Button(); + this.label35 = new System.Windows.Forms.Label(); + this.textBox4 = new System.Windows.Forms.TextBox(); this.label42 = new System.Windows.Forms.Label(); this.button19 = new System.Windows.Forms.Button(); this.button10 = new System.Windows.Forms.Button(); @@ -50,6 +53,10 @@ namespace RBXLegacyLauncher this.label3 = new System.Windows.Forms.Label(); this.textBox1 = new System.Windows.Forms.TextBox(); this.tabPage2 = new System.Windows.Forms.TabPage(); + this.label45 = new System.Windows.Forms.Label(); + this.textBox7 = new System.Windows.Forms.TextBox(); + this.textBox3 = new System.Windows.Forms.TextBox(); + this.label29 = new System.Windows.Forms.Label(); this.label40 = new System.Windows.Forms.Label(); this.button20 = new System.Windows.Forms.Button(); this.button18 = new System.Windows.Forms.Button(); @@ -80,21 +87,6 @@ namespace RBXLegacyLauncher this.listBox3 = new System.Windows.Forms.ListBox(); this.label21 = new System.Windows.Forms.Label(); this.label14 = new System.Windows.Forms.Label(); - this.tabPage5 = new System.Windows.Forms.TabPage(); - this.textBox3 = new System.Windows.Forms.TextBox(); - this.label29 = new System.Windows.Forms.Label(); - this.button11 = new System.Windows.Forms.Button(); - this.button9 = new System.Windows.Forms.Button(); - this.button8 = new System.Windows.Forms.Button(); - this.button7 = new System.Windows.Forms.Button(); - this.label35 = new System.Windows.Forms.Label(); - this.textBox4 = new System.Windows.Forms.TextBox(); - this.label34 = new System.Windows.Forms.Label(); - this.label12 = new System.Windows.Forms.Label(); - this.label33 = new System.Windows.Forms.Label(); - this.label31 = new System.Windows.Forms.Label(); - this.label2 = new System.Windows.Forms.Label(); - this.checkBox3 = new System.Windows.Forms.CheckBox(); this.tabPage7 = new System.Windows.Forms.TabPage(); this.richTextBox1 = new System.Windows.Forms.RichTextBox(); this.tabPage8 = new System.Windows.Forms.TabPage(); @@ -107,6 +99,10 @@ namespace RBXLegacyLauncher this.label7 = new System.Windows.Forms.Label(); this.label6 = new System.Windows.Forms.Label(); this.label5 = new System.Windows.Forms.Label(); + this.button21 = new System.Windows.Forms.Button(); + this.button9 = new System.Windows.Forms.Button(); + this.button8 = new System.Windows.Forms.Button(); + this.checkBox3 = new System.Windows.Forms.CheckBox(); this.checkBox1 = new System.Windows.Forms.CheckBox(); this.button3 = new System.Windows.Forms.Button(); this.label13 = new System.Windows.Forms.Label(); @@ -121,18 +117,13 @@ namespace RBXLegacyLauncher this.label26 = new System.Windows.Forms.Label(); this.label27 = new System.Windows.Forms.Label(); this.label28 = new System.Windows.Forms.Label(); - this.button6 = new System.Windows.Forms.Button(); this.textBox5 = new System.Windows.Forms.TextBox(); - this.label43 = new System.Windows.Forms.Label(); - this.label44 = new System.Windows.Forms.Label(); - this.button21 = new System.Windows.Forms.Button(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); this.tabControl1.SuspendLayout(); this.tabPage1.SuspendLayout(); this.tabPage2.SuspendLayout(); this.tabPage3.SuspendLayout(); this.tabPage6.SuspendLayout(); - this.tabPage5.SuspendLayout(); this.tabPage7.SuspendLayout(); this.tabPage8.SuspendLayout(); this.tabPage4.SuspendLayout(); @@ -159,7 +150,6 @@ namespace RBXLegacyLauncher this.tabControl1.Controls.Add(this.tabPage2); this.tabControl1.Controls.Add(this.tabPage3); this.tabControl1.Controls.Add(this.tabPage6); - this.tabControl1.Controls.Add(this.tabPage5); this.tabControl1.Controls.Add(this.tabPage7); this.tabControl1.Controls.Add(this.tabPage8); this.tabControl1.Controls.Add(this.tabPage4); @@ -175,6 +165,9 @@ namespace RBXLegacyLauncher // // tabPage1 // + this.tabPage1.Controls.Add(this.button11); + this.tabPage1.Controls.Add(this.label35); + this.tabPage1.Controls.Add(this.textBox4); this.tabPage1.Controls.Add(this.label42); this.tabPage1.Controls.Add(this.button19); this.tabPage1.Controls.Add(this.button10); @@ -194,6 +187,35 @@ namespace RBXLegacyLauncher this.tabPage1.ToolTipText = "Join a server via IP Address"; this.tabPage1.UseVisualStyleBackColor = true; // + // button11 + // + this.button11.Location = new System.Drawing.Point(213, 47); + this.button11.Name = "button11"; + this.button11.Size = new System.Drawing.Size(177, 20); + this.button11.TabIndex = 41; + this.button11.Text = "SAVE PORT"; + this.button11.UseVisualStyleBackColor = true; + this.button11.Click += new System.EventHandler(this.Button11Click); + // + // label35 + // + this.label35.Location = new System.Drawing.Point(268, 5); + this.label35.Name = "label35"; + this.label35.Size = new System.Drawing.Size(72, 16); + this.label35.TabIndex = 40; + this.label35.Text = "Server Port"; + this.label35.TextAlign = System.Drawing.ContentAlignment.TopCenter; + // + // textBox4 + // + this.textBox4.Location = new System.Drawing.Point(214, 24); + this.textBox4.Name = "textBox4"; + this.textBox4.Size = new System.Drawing.Size(176, 20); + this.textBox4.TabIndex = 39; + this.textBox4.Text = "53640"; + this.textBox4.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + this.textBox4.TextChanged += new System.EventHandler(this.TextBox4TextChanged); + // // label42 // this.label42.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; @@ -206,7 +228,7 @@ namespace RBXLegacyLauncher // this.button19.Location = new System.Drawing.Point(213, 217); this.button19.Name = "button19"; - this.button19.Size = new System.Drawing.Size(88, 54); + this.button19.Size = new System.Drawing.Size(174, 54); this.button19.TabIndex = 16; this.button19.Text = "PLAY SOLO"; this.button19.UseVisualStyleBackColor = true; @@ -214,11 +236,11 @@ namespace RBXLegacyLauncher // // button10 // - this.button10.Location = new System.Drawing.Point(86, 47); + this.button10.Location = new System.Drawing.Point(16, 47); this.button10.Name = "button10"; - this.button10.Size = new System.Drawing.Size(241, 20); + this.button10.Size = new System.Drawing.Size(177, 20); this.button10.TabIndex = 15; - this.button10.Text = "ADD SERVER TO SAVED SERVERS LIST"; + this.button10.Text = "SAVE SERVER"; this.button10.UseVisualStyleBackColor = true; this.button10.Click += new System.EventHandler(this.Button10Click); // @@ -258,9 +280,9 @@ namespace RBXLegacyLauncher // this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.button1.Location = new System.Drawing.Point(111, 217); + this.button1.Location = new System.Drawing.Point(13, 217); this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(88, 54); + this.button1.Size = new System.Drawing.Size(186, 54); this.button1.TabIndex = 3; this.button1.Text = "JOIN SERVER"; this.button1.UseVisualStyleBackColor = true; @@ -270,9 +292,9 @@ namespace RBXLegacyLauncher // this.label3.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.label3.Location = new System.Drawing.Point(131, 5); + this.label3.Location = new System.Drawing.Point(43, 5); this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(148, 13); + this.label3.Size = new System.Drawing.Size(128, 13); this.label3.TabIndex = 1; this.label3.Text = "Server IP Address"; this.label3.TextAlign = System.Drawing.ContentAlignment.TopCenter; @@ -281,9 +303,9 @@ namespace RBXLegacyLauncher // this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.textBox1.Location = new System.Drawing.Point(86, 21); + this.textBox1.Location = new System.Drawing.Point(16, 24); this.textBox1.Name = "textBox1"; - this.textBox1.Size = new System.Drawing.Size(241, 20); + this.textBox1.Size = new System.Drawing.Size(177, 20); this.textBox1.TabIndex = 0; this.textBox1.Text = "localhost"; this.textBox1.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; @@ -291,6 +313,10 @@ namespace RBXLegacyLauncher // // tabPage2 // + this.tabPage2.Controls.Add(this.label45); + this.tabPage2.Controls.Add(this.textBox7); + this.tabPage2.Controls.Add(this.textBox3); + this.tabPage2.Controls.Add(this.label29); this.tabPage2.Controls.Add(this.label40); this.tabPage2.Controls.Add(this.button20); this.tabPage2.Controls.Add(this.button18); @@ -309,6 +335,44 @@ namespace RBXLegacyLauncher this.tabPage2.ToolTipText = "Start a server for other players to play"; this.tabPage2.UseVisualStyleBackColor = true; // + // label45 + // + this.label45.Location = new System.Drawing.Point(208, 131); + this.label45.Name = "label45"; + this.label45.Size = new System.Drawing.Size(191, 18); + this.label45.TabIndex = 45; + this.label45.Text = "Port"; + this.label45.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // textBox7 + // + this.textBox7.Location = new System.Drawing.Point(203, 152); + this.textBox7.Name = "textBox7"; + this.textBox7.Size = new System.Drawing.Size(196, 20); + this.textBox7.TabIndex = 44; + this.textBox7.Text = "53640"; + this.textBox7.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + this.textBox7.TextChanged += new System.EventHandler(this.TextBox7TextChanged); + // + // textBox3 + // + this.textBox3.Location = new System.Drawing.Point(6, 152); + this.textBox3.Name = "textBox3"; + this.textBox3.Size = new System.Drawing.Size(191, 20); + this.textBox3.TabIndex = 43; + this.textBox3.Text = "12"; + this.textBox3.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + this.textBox3.TextChanged += new System.EventHandler(this.TextBox3TextChanged); + // + // label29 + // + this.label29.Location = new System.Drawing.Point(6, 131); + this.label29.Name = "label29"; + this.label29.Size = new System.Drawing.Size(196, 18); + this.label29.TabIndex = 42; + this.label29.Text = "Player Limit"; + this.label29.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // // label40 // this.label40.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; @@ -341,9 +405,9 @@ namespace RBXLegacyLauncher // this.label32.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.label32.ForeColor = System.Drawing.Color.Red; - this.label32.Location = new System.Drawing.Point(12, 171); + this.label32.Location = new System.Drawing.Point(12, 177); this.label32.Name = "label32"; - this.label32.Size = new System.Drawing.Size(378, 53); + this.label32.Size = new System.Drawing.Size(378, 47); this.label32.TabIndex = 19; this.label32.Text = "NOTE: Be sure you have port forwarded the server\'s port before you start a public" + " server. This port can be found and changed in the OPTIONS tab."; @@ -362,7 +426,7 @@ namespace RBXLegacyLauncher // this.label19.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); this.label19.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; - this.label19.Location = new System.Drawing.Point(6, 165); + this.label19.Location = new System.Drawing.Point(6, 175); this.label19.Name = "label19"; this.label19.Size = new System.Drawing.Size(393, 2); this.label19.TabIndex = 13; @@ -383,7 +447,7 @@ namespace RBXLegacyLauncher // this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.label1.Location = new System.Drawing.Point(152, 3); + this.label1.Location = new System.Drawing.Point(162, 3); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(87, 16); this.label1.TabIndex = 1; @@ -398,7 +462,7 @@ namespace RBXLegacyLauncher this.listBox1.FormattingEnabled = true; this.listBox1.Location = new System.Drawing.Point(6, 22); this.listBox1.Name = "listBox1"; - this.listBox1.Size = new System.Drawing.Size(393, 134); + this.listBox1.Size = new System.Drawing.Size(393, 108); this.listBox1.TabIndex = 0; this.listBox1.SelectedIndexChanged += new System.EventHandler(this.ListBox1SelectedIndexChanged); // @@ -556,31 +620,35 @@ namespace RBXLegacyLauncher // this.label38.Location = new System.Drawing.Point(213, 261); this.label38.Name = "label38"; - this.label38.Size = new System.Drawing.Size(120, 20); + this.label38.Size = new System.Drawing.Size(177, 20); this.label38.TabIndex = 7; + this.label38.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; // // label39 // this.label39.Location = new System.Drawing.Point(213, 249); this.label39.Name = "label39"; - this.label39.Size = new System.Drawing.Size(149, 12); + this.label39.Size = new System.Drawing.Size(186, 12); this.label39.TabIndex = 6; this.label39.Text = "CURRENT SERVER PORT:"; + this.label39.TextAlign = System.Drawing.ContentAlignment.TopCenter; // // label37 // this.label37.Location = new System.Drawing.Point(6, 261); this.label37.Name = "label37"; - this.label37.Size = new System.Drawing.Size(120, 20); + this.label37.Size = new System.Drawing.Size(186, 20); this.label37.TabIndex = 5; + this.label37.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; // // label36 // this.label36.Location = new System.Drawing.Point(6, 249); this.label36.Name = "label36"; - this.label36.Size = new System.Drawing.Size(136, 12); + this.label36.Size = new System.Drawing.Size(186, 12); this.label36.TabIndex = 4; this.label36.Text = "CURRENT SERVER IP:"; + this.label36.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; // // listBox4 // @@ -616,160 +684,6 @@ namespace RBXLegacyLauncher this.label14.TabIndex = 0; this.label14.Text = "SERVERS"; // - // tabPage5 - // - this.tabPage5.Controls.Add(this.button21); - this.tabPage5.Controls.Add(this.label44); - this.tabPage5.Controls.Add(this.label43); - this.tabPage5.Controls.Add(this.textBox3); - this.tabPage5.Controls.Add(this.label29); - this.tabPage5.Controls.Add(this.button11); - this.tabPage5.Controls.Add(this.button9); - this.tabPage5.Controls.Add(this.button8); - this.tabPage5.Controls.Add(this.button7); - this.tabPage5.Controls.Add(this.label35); - this.tabPage5.Controls.Add(this.textBox4); - this.tabPage5.Controls.Add(this.label34); - this.tabPage5.Controls.Add(this.label12); - this.tabPage5.Controls.Add(this.label33); - this.tabPage5.Controls.Add(this.label31); - this.tabPage5.Controls.Add(this.label2); - this.tabPage5.Controls.Add(this.checkBox3); - this.tabPage5.Location = new System.Drawing.Point(4, 22); - this.tabPage5.Name = "tabPage5"; - this.tabPage5.Padding = new System.Windows.Forms.Padding(3); - this.tabPage5.Size = new System.Drawing.Size(405, 284); - this.tabPage5.TabIndex = 5; - this.tabPage5.Text = "OPTIONS"; - this.tabPage5.ToolTipText = "Configure specific aspects of your server, launcher, and player appearance"; - this.tabPage5.UseVisualStyleBackColor = true; - // - // textBox3 - // - this.textBox3.Location = new System.Drawing.Point(201, 167); - this.textBox3.Name = "textBox3"; - this.textBox3.Size = new System.Drawing.Size(100, 20); - this.textBox3.TabIndex = 41; - this.textBox3.TextChanged += new System.EventHandler(this.TextBox3TextChanged); - // - // label29 - // - this.label29.Location = new System.Drawing.Point(134, 170); - this.label29.Name = "label29"; - this.label29.Size = new System.Drawing.Size(61, 18); - this.label29.TabIndex = 40; - this.label29.Text = "Player Limit"; - // - // button11 - // - this.button11.Location = new System.Drawing.Point(95, 143); - this.button11.Name = "button11"; - this.button11.Size = new System.Drawing.Size(212, 20); - this.button11.TabIndex = 38; - this.button11.Text = "SAVE PORT TO SAVED PORTS LIST"; - this.button11.UseVisualStyleBackColor = true; - this.button11.Click += new System.EventHandler(this.Button11Click); - // - // button9 - // - this.button9.Location = new System.Drawing.Point(54, 212); - this.button9.Name = "button9"; - this.button9.Size = new System.Drawing.Size(100, 33); - this.button9.TabIndex = 37; - this.button9.Text = "Reset Config"; - this.button9.UseVisualStyleBackColor = true; - this.button9.Click += new System.EventHandler(this.Button9Click); - // - // button8 - // - this.button8.Location = new System.Drawing.Point(96, 19); - this.button8.Name = "button8"; - this.button8.Size = new System.Drawing.Size(212, 52); - this.button8.TabIndex = 35; - this.button8.Text = "Customize Character"; - this.button8.UseVisualStyleBackColor = true; - this.button8.Click += new System.EventHandler(this.Button8Click); - // - // button7 - // - this.button7.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.button7.Location = new System.Drawing.Point(54, 248); - this.button7.Name = "button7"; - this.button7.Size = new System.Drawing.Size(100, 33); - this.button7.TabIndex = 34; - this.button7.Text = "Save Config"; - this.button7.UseVisualStyleBackColor = true; - this.button7.Click += new System.EventHandler(this.Button7Click); - // - // label35 - // - this.label35.Location = new System.Drawing.Point(83, 103); - this.label35.Name = "label35"; - this.label35.Size = new System.Drawing.Size(234, 16); - this.label35.TabIndex = 33; - this.label35.Text = "PORT (Used for starting and joining servers)"; - this.label35.TextAlign = System.Drawing.ContentAlignment.TopCenter; - // - // textBox4 - // - this.textBox4.Location = new System.Drawing.Point(96, 122); - this.textBox4.Name = "textBox4"; - this.textBox4.Size = new System.Drawing.Size(211, 20); - this.textBox4.TabIndex = 32; - this.textBox4.Text = "53640"; - this.textBox4.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; - this.textBox4.TextChanged += new System.EventHandler(this.TextBox4TextChanged); - // - // label34 - // - this.label34.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; - this.label34.Location = new System.Drawing.Point(14, 194); - this.label34.Name = "label34"; - this.label34.Size = new System.Drawing.Size(378, 2); - this.label34.TabIndex = 31; - // - // label12 - // - this.label12.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; - this.label12.Location = new System.Drawing.Point(14, 80); - this.label12.Name = "label12"; - this.label12.Size = new System.Drawing.Size(378, 2); - this.label12.TabIndex = 30; - // - // label33 - // - this.label33.Location = new System.Drawing.Point(293, 196); - this.label33.Name = "label33"; - this.label33.Size = new System.Drawing.Size(79, 13); - this.label33.TabIndex = 29; - this.label33.Text = "LAN OPTIONS"; - // - // label31 - // - this.label31.Location = new System.Drawing.Point(150, 86); - this.label31.Name = "label31"; - this.label31.Size = new System.Drawing.Size(110, 14); - this.label31.TabIndex = 28; - this.label31.Text = "SERVER SETTINGS"; - // - // label2 - // - this.label2.Location = new System.Drawing.Point(95, 3); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(222, 13); - this.label2.TabIndex = 27; - this.label2.Text = "PLAYER OPTIONS AND CUSTOMIZATION"; - // - // checkBox3 - // - this.checkBox3.Location = new System.Drawing.Point(282, 212); - this.checkBox3.Name = "checkBox3"; - this.checkBox3.Size = new System.Drawing.Size(108, 18); - this.checkBox3.TabIndex = 22; - this.checkBox3.Text = "Local Play Mode"; - this.checkBox3.UseVisualStyleBackColor = true; - this.checkBox3.CheckedChanged += new System.EventHandler(this.CheckBox3CheckedChanged); - // // tabPage7 // this.tabPage7.BackColor = System.Drawing.SystemColors.ControlText; @@ -779,7 +693,7 @@ namespace RBXLegacyLauncher this.tabPage7.Padding = new System.Windows.Forms.Padding(3); this.tabPage7.Size = new System.Drawing.Size(405, 284); this.tabPage7.TabIndex = 7; - this.tabPage7.Text = "CMD"; + this.tabPage7.Text = "CONSOLE"; // // richTextBox1 // @@ -896,15 +810,58 @@ namespace RBXLegacyLauncher this.label5.Text = "label5"; this.label5.TextAlign = System.Drawing.ContentAlignment.TopCenter; // + // button21 + // + this.button21.Font = new System.Drawing.Font("Microsoft Sans Serif", 6.75F); + this.button21.Location = new System.Drawing.Point(338, 89); + this.button21.Name = "button21"; + this.button21.Size = new System.Drawing.Size(87, 20); + this.button21.TabIndex = 44; + this.button21.Text = "Install URI"; + this.button21.UseVisualStyleBackColor = true; + this.button21.Click += new System.EventHandler(this.Button21Click); + // + // button9 + // + this.button9.Font = new System.Drawing.Font("Microsoft Sans Serif", 6.75F); + this.button9.Location = new System.Drawing.Point(248, 111); + this.button9.Name = "button9"; + this.button9.Size = new System.Drawing.Size(85, 20); + this.button9.TabIndex = 37; + this.button9.Text = "Reset Config"; + this.button9.UseVisualStyleBackColor = true; + this.button9.Click += new System.EventHandler(this.Button9Click); + // + // button8 + // + this.button8.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F); + this.button8.Location = new System.Drawing.Point(127, 107); + this.button8.Name = "button8"; + this.button8.Size = new System.Drawing.Size(109, 24); + this.button8.TabIndex = 35; + this.button8.Text = "Customization"; + this.button8.UseVisualStyleBackColor = true; + this.button8.Click += new System.EventHandler(this.Button8Click); + // + // checkBox3 + // + this.checkBox3.Location = new System.Drawing.Point(248, 68); + this.checkBox3.Name = "checkBox3"; + this.checkBox3.Size = new System.Drawing.Size(177, 18); + this.checkBox3.TabIndex = 22; + this.checkBox3.Text = "Local Play Mode"; + this.checkBox3.UseVisualStyleBackColor = true; + this.checkBox3.CheckedChanged += new System.EventHandler(this.CheckBox3CheckedChanged); + // // checkBox1 // this.checkBox1.Checked = true; this.checkBox1.CheckState = System.Windows.Forms.CheckState.Checked; this.checkBox1.Location = new System.Drawing.Point(248, 48); this.checkBox1.Name = "checkBox1"; - this.checkBox1.Size = new System.Drawing.Size(158, 19); + this.checkBox1.Size = new System.Drawing.Size(177, 19); this.checkBox1.TabIndex = 5; - this.checkBox1.Text = "Close Launcher on Launch"; + this.checkBox1.Text = "Minimize Launcher on Launch"; this.checkBox1.UseCompatibleTextRendering = true; this.checkBox1.UseVisualStyleBackColor = true; this.checkBox1.CheckedChanged += new System.EventHandler(this.CheckBox1CheckedChanged); @@ -913,11 +870,11 @@ namespace RBXLegacyLauncher // this.button3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.button3.Font = new System.Drawing.Font("Microsoft Sans Serif", 6.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.button3.Location = new System.Drawing.Point(250, 65); + this.button3.Location = new System.Drawing.Point(248, 89); this.button3.Name = "button3"; - this.button3.Size = new System.Drawing.Size(171, 20); + this.button3.Size = new System.Drawing.Size(87, 20); this.button3.TabIndex = 6; - this.button3.Text = "Launch ROBLOX Studio"; + this.button3.Text = "Open Studio"; this.button3.UseVisualStyleBackColor = true; this.button3.Click += new System.EventHandler(this.Button3Click); // @@ -931,20 +888,20 @@ namespace RBXLegacyLauncher // // button4 // - this.button4.Location = new System.Drawing.Point(12, 105); + this.button4.Location = new System.Drawing.Point(12, 107); this.button4.Name = "button4"; - this.button4.Size = new System.Drawing.Size(224, 26); + this.button4.Size = new System.Drawing.Size(109, 24); this.button4.TabIndex = 9; - this.button4.Text = "Regenerate Player ID"; + this.button4.Text = "Generate New ID"; this.button4.UseVisualStyleBackColor = true; this.button4.Click += new System.EventHandler(this.Button4Click); // // button5 // this.button5.Font = new System.Drawing.Font("Microsoft Sans Serif", 6.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.button5.Location = new System.Drawing.Point(250, 111); + this.button5.Location = new System.Drawing.Point(338, 111); this.button5.Name = "button5"; - this.button5.Size = new System.Drawing.Size(171, 20); + this.button5.Size = new System.Drawing.Size(87, 20); this.button5.TabIndex = 10; this.button5.Text = "Save Config"; this.button5.UseVisualStyleBackColor = true; @@ -1026,17 +983,6 @@ namespace RBXLegacyLauncher this.label28.TabIndex = 19; this.label28.Text = "Baseplate.rbxl"; // - // button6 - // - this.button6.Font = new System.Drawing.Font("Microsoft Sans Serif", 6.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.button6.Location = new System.Drawing.Point(250, 89); - this.button6.Name = "button6"; - this.button6.Size = new System.Drawing.Size(171, 20); - this.button6.TabIndex = 3; - this.button6.Text = "Clientinfo Editor"; - this.button6.UseVisualStyleBackColor = true; - this.button6.Click += new System.EventHandler(this.Button6Click); - // // textBox5 // this.textBox5.Location = new System.Drawing.Point(59, 86); @@ -1048,32 +994,6 @@ namespace RBXLegacyLauncher this.textBox5.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; this.textBox5.TextChanged += new System.EventHandler(this.TextBox5TextChanged); // - // label43 - // - this.label43.Location = new System.Drawing.Point(54, 196); - this.label43.Name = "label43"; - this.label43.Size = new System.Drawing.Size(100, 13); - this.label43.TabIndex = 42; - this.label43.Text = "CONFIG OPTIONS"; - // - // label44 - // - this.label44.Location = new System.Drawing.Point(183, 196); - this.label44.Name = "label44"; - this.label44.Size = new System.Drawing.Size(77, 13); - this.label44.TabIndex = 43; - this.label44.Text = "URI OPTIONS"; - // - // button21 - // - this.button21.Location = new System.Drawing.Point(183, 224); - this.button21.Name = "button21"; - this.button21.Size = new System.Drawing.Size(75, 39); - this.button21.TabIndex = 44; - this.button21.Text = "Install URI"; - this.button21.UseVisualStyleBackColor = true; - this.button21.Click += new System.EventHandler(this.Button21Click); - // // MainForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -1081,18 +1001,21 @@ namespace RBXLegacyLauncher this.BackColor = System.Drawing.SystemColors.ControlLightLight; this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None; this.ClientSize = new System.Drawing.Size(427, 459); + this.Controls.Add(this.button21); this.Controls.Add(this.textBox5); - this.Controls.Add(this.button6); this.Controls.Add(this.label28); this.Controls.Add(this.label27); this.Controls.Add(this.label26); this.Controls.Add(this.label25); this.Controls.Add(this.label24); + this.Controls.Add(this.button9); this.Controls.Add(this.label23); + this.Controls.Add(this.button8); this.Controls.Add(this.label22); this.Controls.Add(this.label15); this.Controls.Add(this.textBox2); this.Controls.Add(this.button5); + this.Controls.Add(this.checkBox3); this.Controls.Add(this.button4); this.Controls.Add(this.label13); this.Controls.Add(this.button3); @@ -1111,19 +1034,18 @@ namespace RBXLegacyLauncher this.tabPage1.ResumeLayout(false); this.tabPage1.PerformLayout(); this.tabPage2.ResumeLayout(false); + this.tabPage2.PerformLayout(); this.tabPage3.ResumeLayout(false); this.tabPage3.PerformLayout(); this.tabPage6.ResumeLayout(false); - this.tabPage5.ResumeLayout(false); - this.tabPage5.PerformLayout(); this.tabPage7.ResumeLayout(false); this.tabPage8.ResumeLayout(false); this.tabPage4.ResumeLayout(false); this.ResumeLayout(false); this.PerformLayout(); } - private System.Windows.Forms.Label label43; - private System.Windows.Forms.Label label44; + private System.Windows.Forms.TextBox textBox7; + private System.Windows.Forms.Label label45; private System.Windows.Forms.Button button21; private System.Windows.Forms.Label label41; private System.Windows.Forms.Label label40; @@ -1158,17 +1080,10 @@ namespace RBXLegacyLauncher private System.Windows.Forms.TextBox textBox6; private System.Windows.Forms.Button button8; private System.Windows.Forms.TextBox textBox5; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.Label label31; - private System.Windows.Forms.Label label33; - private System.Windows.Forms.Label label34; private System.Windows.Forms.TextBox textBox4; private System.Windows.Forms.Label label35; - private System.Windows.Forms.Button button7; - private System.Windows.Forms.TabPage tabPage5; private System.Windows.Forms.Label label32; private System.Windows.Forms.Label label30; - private System.Windows.Forms.Button button6; private System.Windows.Forms.Label label28; private System.Windows.Forms.Label label27; private System.Windows.Forms.CheckBox checkBox3; @@ -1185,7 +1100,6 @@ namespace RBXLegacyLauncher private System.Windows.Forms.Button button5; private System.Windows.Forms.Button button4; private System.Windows.Forms.Label label13; - private System.Windows.Forms.Label label12; private System.Windows.Forms.Label label19; private System.Windows.Forms.Label label20; private System.Windows.Forms.Label label16; diff --git a/RBXLegacyLauncher/RBXLegacyLauncher/MainForm.cs b/RBXLegacyLauncher/RBXLegacyLauncher/MainForm.cs index 706f341..0d18165 100644 --- a/RBXLegacyLauncher/RBXLegacyLauncher/MainForm.cs +++ b/RBXLegacyLauncher/RBXLegacyLauncher/MainForm.cs @@ -91,12 +91,17 @@ namespace RBXLegacyLauncher } WriteConfigValues(); - Process.Start("sudppipe.exe", "-p " + GlobalVars.IP + " " + GlobalVars.RobloxPort + " " + GlobalVars.RobloxPort); + Process sudp = new Process(); + sudp.StartInfo.FileName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\sudppipe.exe"; + sudp.StartInfo.Arguments = "-p " + GlobalVars.IP + " " + GlobalVars.RobloxPort + " " + GlobalVars.RobloxPort; + sudp.StartInfo.UseShellExecute = false; + sudp.StartInfo.CreateNoWindow = true; + sudp.Start(); StartClient(); if (GlobalVars.CloseOnLaunch == true) { - this.Close(); + this.WindowState = FormWindowState.Minimized; } } @@ -107,7 +112,7 @@ namespace RBXLegacyLauncher if (GlobalVars.CloseOnLaunch == true) { - this.Close(); + this.WindowState = FormWindowState.Minimized; } } @@ -121,7 +126,7 @@ namespace RBXLegacyLauncher StartStudio(); if (GlobalVars.CloseOnLaunch == true) { - this.Close(); + this.WindowState = FormWindowState.Minimized; } } @@ -357,12 +362,6 @@ namespace RBXLegacyLauncher } } - void Button6Click(object sender, EventArgs e) - { - ClientinfoEditor cie = new ClientinfoEditor(); - cie.Show(); - } - void Button7Click(object sender, EventArgs e) { WriteConfigValues(); @@ -425,18 +424,30 @@ namespace RBXLegacyLauncher void ListBox3SelectedIndexChanged(object sender, EventArgs e) { + try + { GlobalVars.IP = listBox3.SelectedItem.ToString(); textBox1.Text = GlobalVars.IP; checkBox3.Enabled = false; GlobalVars.LocalPlayMode = false; label37.Text = GlobalVars.IP; + } + catch (Exception) + { + } } void ListBox4SelectedIndexChanged(object sender, EventArgs e) { + try + { GlobalVars.RobloxPort = Convert.ToInt32(listBox4.SelectedItem.ToString()); textBox4.Text = GlobalVars.RobloxPort.ToString(); label38.Text = GlobalVars.RobloxPort.ToString(); + } + catch (Exception) + { + } } void Button10Click(object sender, EventArgs e) @@ -510,7 +521,7 @@ namespace RBXLegacyLauncher if (GlobalVars.CloseOnLaunch == true) { - this.Close(); + this.WindowState = FormWindowState.Minimized; } } @@ -522,7 +533,7 @@ namespace RBXLegacyLauncher if (GlobalVars.CloseOnLaunch == true) { - this.Close(); + this.WindowState = FormWindowState.Minimized; } } @@ -585,6 +596,27 @@ namespace RBXLegacyLauncher } } + void TextBox7TextChanged(object sender, EventArgs e) + { + int parsedValue; + if (int.TryParse(textBox7.Text, out parsedValue)) + { + if (textBox7.Text.Equals("")) + { + //set it to the normal port, 53640. it wouldn't make any sense if we set it to 0. + GlobalVars.ServerPort = GlobalVars.DefaultRobloxPort; + } + else + { + GlobalVars.ServerPort = Convert.ToInt32(textBox7.Text); + } + } + else + { + GlobalVars.ServerPort = GlobalVars.DefaultRobloxPort; + } + } + void ResetConfigValues() { LauncherFuncs.ResetConfigValues(); @@ -640,26 +672,31 @@ namespace RBXLegacyLauncher string HatIDOffline3 = GlobalVars.Custom_Hat3ID_Offline; if (GlobalVars.UsesPlayerName == true && GlobalVars.UsesID == true) { - args = "-script " + quote + "dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSConnect(" + GlobalVars.UserID + ",'localhost'," + GlobalVars.RobloxPort + ",'" + GlobalVars.PlayerName + "','" + HatIDOffline1 + "','" + HatIDOffline2 + "','" + HatIDOffline3 + "'," + GlobalVars.HeadColorID + "," + GlobalVars.TorsoColorID + "," + GlobalVars.LeftArmColorID + "," + GlobalVars.RightArmColorID + "," + GlobalVars.LeftLegColorID + "," + GlobalVars.RightLegColorID + ",'" + GlobalVars.Custom_TShirt + "','" + GlobalVars.Custom_Shirt + "','" + GlobalVars.Custom_Pants + "','" + GlobalVars.Custom_Face + "');" + quote; + args = "-script " + quote + "dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSConnect(" + GlobalVars.UserID + ",'localhost'," + GlobalVars.RobloxPort + ",'" + GlobalVars.PlayerName + "','" + HatIDOffline1 + "','" + HatIDOffline2 + "','" + HatIDOffline3 + "'," + GlobalVars.HeadColorID + "," + GlobalVars.TorsoColorID + "," + GlobalVars.LeftArmColorID + "," + GlobalVars.RightArmColorID + "," + GlobalVars.LeftLegColorID + "," + GlobalVars.RightLegColorID + ",'" + GlobalVars.Custom_TShirt + "','" + GlobalVars.Custom_Shirt + "','" + GlobalVars.Custom_Pants + "','" + GlobalVars.Custom_Face + "','" + GlobalVars.Custom_IconType + "');" + quote; } else if (GlobalVars.UsesPlayerName == false && GlobalVars.UsesID == true) { - args = "-script " + quote + "dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSConnect(" + GlobalVars.UserID + ",'localhost'," + GlobalVars.RobloxPort + ",'Player','" + HatIDOffline1 + "','" + HatIDOffline2 + "','" + HatIDOffline3 + "'," + GlobalVars.HeadColorID + "," + GlobalVars.TorsoColorID + "," + GlobalVars.LeftArmColorID + "," + GlobalVars.RightArmColorID + "," + GlobalVars.LeftLegColorID + "," + GlobalVars.RightLegColorID + ",'" + GlobalVars.Custom_TShirt + "','" + GlobalVars.Custom_Shirt + "','" + GlobalVars.Custom_Pants + "','" + GlobalVars.Custom_Face + "');" + quote; + args = "-script " + quote + "dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSConnect(" + GlobalVars.UserID + ",'localhost'," + GlobalVars.RobloxPort + ",'Player','" + HatIDOffline1 + "','" + HatIDOffline2 + "','" + HatIDOffline3 + "'," + GlobalVars.HeadColorID + "," + GlobalVars.TorsoColorID + "," + GlobalVars.LeftArmColorID + "," + GlobalVars.RightArmColorID + "," + GlobalVars.LeftLegColorID + "," + GlobalVars.RightLegColorID + ",'" + GlobalVars.Custom_TShirt + "','" + GlobalVars.Custom_Shirt + "','" + GlobalVars.Custom_Pants + "','" + GlobalVars.Custom_Face + "','" + GlobalVars.Custom_IconType + "');" + quote; } else if (GlobalVars.UsesPlayerName == true && GlobalVars.UsesID == false) { - args = "-script " + quote + "dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSConnect(0,'localhost'," + GlobalVars.RobloxPort + ",'" + GlobalVars.PlayerName + "','" + HatIDOffline1 + "','" + HatIDOffline2 + "','" + HatIDOffline3 + "'," + GlobalVars.HeadColorID + "," + GlobalVars.TorsoColorID + "," + GlobalVars.LeftArmColorID + "," + GlobalVars.RightArmColorID + "," + GlobalVars.LeftLegColorID + "," + GlobalVars.RightLegColorID + ",'" + GlobalVars.Custom_TShirt + "','" + GlobalVars.Custom_Shirt + "','" + GlobalVars.Custom_Pants + "','" + GlobalVars.Custom_Face + "');" + quote; + args = "-script " + quote + "dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSConnect(0,'localhost'," + GlobalVars.RobloxPort + ",'" + GlobalVars.PlayerName + "','" + HatIDOffline1 + "','" + HatIDOffline2 + "','" + HatIDOffline3 + "'," + GlobalVars.HeadColorID + "," + GlobalVars.TorsoColorID + "," + GlobalVars.LeftArmColorID + "," + GlobalVars.RightArmColorID + "," + GlobalVars.LeftLegColorID + "," + GlobalVars.RightLegColorID + ",'" + GlobalVars.Custom_TShirt + "','" + GlobalVars.Custom_Shirt + "','" + GlobalVars.Custom_Pants + "','" + GlobalVars.Custom_Face + "','" + GlobalVars.Custom_IconType + "');" + quote; } else if (GlobalVars.UsesPlayerName == false && GlobalVars.UsesID == false) { - args = "-script " + quote + "dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSConnect(0,'localhost'," + GlobalVars.RobloxPort + ",'Player','" + HatIDOffline1 + "','" + HatIDOffline2 + "','" + HatIDOffline3 + "'," + GlobalVars.HeadColorID + "," + GlobalVars.TorsoColorID + "," + GlobalVars.LeftArmColorID + "," + GlobalVars.RightArmColorID + "," + GlobalVars.LeftLegColorID + "," + GlobalVars.RightLegColorID + ",'" + GlobalVars.Custom_TShirt + "','" + GlobalVars.Custom_Shirt + "','" + GlobalVars.Custom_Pants + "','" + GlobalVars.Custom_Face + "');" + quote; + args = "-script " + quote + "dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSConnect(0,'localhost'," + GlobalVars.RobloxPort + ",'Player','" + HatIDOffline1 + "','" + HatIDOffline2 + "','" + HatIDOffline3 + "'," + GlobalVars.HeadColorID + "," + GlobalVars.TorsoColorID + "," + GlobalVars.LeftArmColorID + "," + GlobalVars.RightArmColorID + "," + GlobalVars.LeftLegColorID + "," + GlobalVars.RightLegColorID + ",'" + GlobalVars.Custom_TShirt + "','" + GlobalVars.Custom_Shirt + "','" + GlobalVars.Custom_Pants + "','" + GlobalVars.Custom_Face + "','" + GlobalVars.Custom_IconType + "');" + quote; } try { ConsolePrint("Client Loaded.", 4); if (SecurityFuncs.checkClientMD5(GlobalVars.SelectedClient) == true) { - Process.Start(rbxexe, args); + Process client = new Process(); + client.StartInfo.FileName = rbxexe; + client.StartInfo.Arguments = args; + client.EnableRaisingEvents = true; + client.Exited += new EventHandler(ClientExited); + client.Start(); } } catch (Exception) @@ -675,6 +712,23 @@ namespace RBXLegacyLauncher } } + void ClientExited(object sender, EventArgs e) + { + Process[] sudp = Process.GetProcessesByName("sudppipe"); + if (sudp != null) + { + foreach (var process in sudp) + { + process.Kill(); + } + + if (this.WindowState == FormWindowState.Minimized) + { + this.WindowState = FormWindowState.Normal; + } + } + } + void StartSolo() { string mapfile = GlobalVars.MapsDir + @"\\" + GlobalVars.Map; @@ -686,19 +740,19 @@ namespace RBXLegacyLauncher string HatIDOffline3 = GlobalVars.Custom_Hat3ID_Offline; if (GlobalVars.UsesPlayerName == true && GlobalVars.UsesID == true) { - args = quote + mapfile + "\" -script \"dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSSolo(" + GlobalVars.UserID + ",'" + GlobalVars.PlayerName + "','" + HatIDOffline1 + "','" + HatIDOffline2 + "','" + HatIDOffline3 + "'," + GlobalVars.HeadColorID + "," + GlobalVars.TorsoColorID + "," + GlobalVars.LeftArmColorID + "," + GlobalVars.RightArmColorID + "," + GlobalVars.LeftLegColorID + "," + GlobalVars.RightLegColorID + ",'" + GlobalVars.Custom_TShirt + "','" + GlobalVars.Custom_Shirt + "','" + GlobalVars.Custom_Pants + "','" + GlobalVars.Custom_Face + "');" + quote; + args = quote + mapfile + "\" -script \"dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSSolo(" + GlobalVars.UserID + ",'" + GlobalVars.PlayerName + "','" + HatIDOffline1 + "','" + HatIDOffline2 + "','" + HatIDOffline3 + "'," + GlobalVars.HeadColorID + "," + GlobalVars.TorsoColorID + "," + GlobalVars.LeftArmColorID + "," + GlobalVars.RightArmColorID + "," + GlobalVars.LeftLegColorID + "," + GlobalVars.RightLegColorID + ",'" + GlobalVars.Custom_TShirt + "','" + GlobalVars.Custom_Shirt + "','" + GlobalVars.Custom_Pants + "','" + GlobalVars.Custom_Face + "','" + GlobalVars.Custom_IconType + "');" + quote; } else if (GlobalVars.UsesPlayerName == false && GlobalVars.UsesID == true) { - args = quote + mapfile + "\" -script \"dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSSolo(" + GlobalVars.UserID + ",'Player','" + HatIDOffline1 + "','" + HatIDOffline2 + "','" + HatIDOffline3 + "'," + GlobalVars.HeadColorID + "," + GlobalVars.TorsoColorID + "," + GlobalVars.LeftArmColorID + "," + GlobalVars.RightArmColorID + "," + GlobalVars.LeftLegColorID + "," + GlobalVars.RightLegColorID + ",'" + GlobalVars.Custom_TShirt + "','" + GlobalVars.Custom_Shirt + "','" + GlobalVars.Custom_Pants + "','" + GlobalVars.Custom_Face + "');" + quote; + args = quote + mapfile + "\" -script \"dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSSolo(" + GlobalVars.UserID + ",'Player','" + HatIDOffline1 + "','" + HatIDOffline2 + "','" + HatIDOffline3 + "'," + GlobalVars.HeadColorID + "," + GlobalVars.TorsoColorID + "," + GlobalVars.LeftArmColorID + "," + GlobalVars.RightArmColorID + "," + GlobalVars.LeftLegColorID + "," + GlobalVars.RightLegColorID + ",'" + GlobalVars.Custom_TShirt + "','" + GlobalVars.Custom_Shirt + "','" + GlobalVars.Custom_Pants + "','" + GlobalVars.Custom_Face + "','" + GlobalVars.Custom_IconType + "');" + quote; } else if (GlobalVars.UsesPlayerName == true && GlobalVars.UsesID == false) { - args = quote + mapfile + "\" -script \"dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSSolo(0,'" + GlobalVars.PlayerName + "','" + HatIDOffline1 + "','" + HatIDOffline2 + "','" + HatIDOffline3 + "'," + GlobalVars.HeadColorID + "," + GlobalVars.TorsoColorID + "," + GlobalVars.LeftArmColorID + "," + GlobalVars.RightArmColorID + "," + GlobalVars.LeftLegColorID + "," + GlobalVars.RightLegColorID + ",'" + GlobalVars.Custom_TShirt + "','" + GlobalVars.Custom_Shirt + "','" + GlobalVars.Custom_Pants + "','" + GlobalVars.Custom_Face + "');" + quote; + args = quote + mapfile + "\" -script \"dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSSolo(0,'" + GlobalVars.PlayerName + "','" + HatIDOffline1 + "','" + HatIDOffline2 + "','" + HatIDOffline3 + "'," + GlobalVars.HeadColorID + "," + GlobalVars.TorsoColorID + "," + GlobalVars.LeftArmColorID + "," + GlobalVars.RightArmColorID + "," + GlobalVars.LeftLegColorID + "," + GlobalVars.RightLegColorID + ",'" + GlobalVars.Custom_TShirt + "','" + GlobalVars.Custom_Shirt + "','" + GlobalVars.Custom_Pants + "','" + GlobalVars.Custom_Face + "','" + GlobalVars.Custom_IconType + "');" + quote; } else if (GlobalVars.UsesPlayerName == false && GlobalVars.UsesID == false ) { - args = quote + mapfile + "\" -script \"dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSSolo(0,'Player','" + HatIDOffline1 + "','" + HatIDOffline2 + "','" + HatIDOffline3 + "'," + GlobalVars.HeadColorID + "," + GlobalVars.TorsoColorID + "," + GlobalVars.LeftArmColorID + "," + GlobalVars.RightArmColorID + "," + GlobalVars.LeftLegColorID + "," + GlobalVars.RightLegColorID + ",'" + GlobalVars.Custom_TShirt + "','" + GlobalVars.Custom_Shirt + "','" + GlobalVars.Custom_Pants + "','" + GlobalVars.Custom_Face + "');" + quote; + args = quote + mapfile + "\" -script \"dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSSolo(0,'Player','" + HatIDOffline1 + "','" + HatIDOffline2 + "','" + HatIDOffline3 + "'," + GlobalVars.HeadColorID + "," + GlobalVars.TorsoColorID + "," + GlobalVars.LeftArmColorID + "," + GlobalVars.RightArmColorID + "," + GlobalVars.LeftLegColorID + "," + GlobalVars.RightLegColorID + ",'" + GlobalVars.Custom_TShirt + "','" + GlobalVars.Custom_Shirt + "','" + GlobalVars.Custom_Pants + "','" + GlobalVars.Custom_Face + "','" + GlobalVars.Custom_IconType + "');" + quote; } try { @@ -718,7 +772,7 @@ namespace RBXLegacyLauncher string rbxexe = GlobalVars.ClientDir + @"\\" + GlobalVars.SelectedClient + @"\\RobloxApp.exe"; string quote = "\""; string args = ""; - args = quote + mapfile + "\" -script \"dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSServer(" + GlobalVars.RobloxPort + "," + GlobalVars.PlayerLimit + "); " + quote; + args = quote + mapfile + "\" -script \"dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSServer(" + GlobalVars.ServerPort + "," + GlobalVars.PlayerLimit + "); " + quote; try { ConsolePrint("Server Loaded.", 4); @@ -737,7 +791,7 @@ namespace RBXLegacyLauncher string rbxexe = GlobalVars.ClientDir + @"\\" + GlobalVars.SelectedClient + @"\\RobloxApp.exe"; string quote = "\""; string args = ""; - args = quote + mapfile + "\" -script \"dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSServer(" + GlobalVars.RobloxPort + "," + GlobalVars.PlayerLimit + "); " + quote + " -no3d"; + args = quote + mapfile + "\" -script \"dofile('" + GlobalVars.DefaultScript + "'); _G.SetRBXLegacyVersion('" + GlobalVars.SelectedClientVersion + "'); _G.CSServer(" + GlobalVars.ServerPort + "," + GlobalVars.PlayerLimit + "); " + quote + " -no3d"; try { ConsolePrint("Server Loaded in No3d.", 4); @@ -786,7 +840,12 @@ namespace RBXLegacyLauncher } else if (command.Equals("rbxlegacy client")) { - Process.Start("sudppipe.exe", "-p " + GlobalVars.IP + " " + GlobalVars.RobloxPort + " " + GlobalVars.RobloxPort); + Process sudp = new Process(); + sudp.StartInfo.FileName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\sudppipe.exe"; + sudp.StartInfo.Arguments = "-p " + GlobalVars.IP + " " + GlobalVars.RobloxPort + " " + GlobalVars.RobloxPort; + sudp.StartInfo.UseShellExecute = false; + sudp.StartInfo.CreateNoWindow = true; + sudp.Start(); StartClient(); } else if (command.Equals("rbxlegacy client solo")) @@ -813,6 +872,18 @@ namespace RBXLegacyLauncher { ResetConfigValues(); } + else if (command.Equals("rbxlegacy sdk")) + { + SDKForm sdk = new SDKForm(); + sdk.Show(); + ConsolePrint("Launched SDK.", 4); + } + else if (command.Equals("sdk")) + { + SDKForm sdk = new SDKForm(); + sdk.Show(); + ConsolePrint("Launched SDK.", 4); + } else if (command.Equals("rbxlegacy help")) { ConsoleRBXLegacyHelp(0); @@ -865,6 +936,7 @@ namespace RBXLegacyLauncher ConsolePrint("= server | Loads server with launcher settings", 3); ConsolePrint("-- no3d | Loads server in NoGraphics mode with launcher settings", 4); ConsolePrint("= studio | Loads Roblox Studio with launcher settings", 3); + ConsolePrint("= sdk | Loads the RBXLegacy SDK", 3); ConsolePrint("= config", 3); ConsolePrint("-- save | Saves the config file", 4); ConsolePrint("-- load | Reloads the config file", 4); diff --git a/RBXLegacyLauncher/RBXLegacyLauncher/MainForm.resx b/RBXLegacyLauncher/RBXLegacyLauncher/MainForm.resx index 52e7305..ac14fe9 100644 --- a/RBXLegacyLauncher/RBXLegacyLauncher/MainForm.resx +++ b/RBXLegacyLauncher/RBXLegacyLauncher/MainForm.resx @@ -203,7 +203,8 @@ - NOTE: Make sure the server you join is in the region of the world you live in! (i.e West US, East US, Europe, etc). If you have a problem where you can't see your character, REGENERATE YOUR PLAYER ID THEN REJOIN THE SERVER. If you tried to connect to the server and you get an error, REJOIN THE SERVER. If the server requires a different port than the normal ROBLOX port (53640), change it in the OPTIONS tab. + NOTE: Make sure the server you join is in the region of the world you live in! (i.e West US, East US, Europe, etc). If you have a problem where you can't see your character, REGENERATE YOUR PLAYER ID THEN REJOIN THE SERVER. If you tried to connect to the server and you get an error, REJOIN THE SERVER. + WARNING: This client loads assets directly from a server. This means that you may not be able to play it over a LAN or local connection without internet access. This may also mean that some things won't load (i.e the healthbar) diff --git a/RBXLegacyLauncher/RBXLegacyLauncher/RBXLegacyLauncher.csproj b/RBXLegacyLauncher/RBXLegacyLauncher/RBXLegacyLauncher.csproj index 38804cf..c36ac36 100644 --- a/RBXLegacyLauncher/RBXLegacyLauncher/RBXLegacyLauncher.csproj +++ b/RBXLegacyLauncher/RBXLegacyLauncher/RBXLegacyLauncher.csproj @@ -18,6 +18,9 @@ False obj\$(Configuration)\ 4 + False + False + OnBuildSuccess x86 @@ -42,6 +45,8 @@ False TRACE obj\ + Program + ..\..\..\RBXLegacy\release\RBXLegacy\RBXLegacyLauncher.exe @@ -59,10 +64,6 @@ CharacterCustomization.cs - - - CharacterCustomization_ClothingMenu.cs - CharacterCustomization_HatMenu.cs @@ -76,6 +77,10 @@ DocForm.cs + + + InfoEditor.cs + @@ -86,6 +91,10 @@ QuickConfigure.cs + + + SDKForm.cs + @@ -107,9 +116,6 @@ CharacterCustomization.cs - - CharacterCustomization_ClothingMenu.cs - CharacterCustomization_HatMenu.cs @@ -119,6 +125,9 @@ DocForm.Designer.cs + + InfoEditor.Designer.cs + LoaderForm.cs @@ -128,6 +137,9 @@ QuickConfigure.cs + + SDKForm.cs + ServerInfo.cs diff --git a/RBXLegacyLauncher/RBXLegacyLauncher/SDKForm.Designer.cs b/RBXLegacyLauncher/RBXLegacyLauncher/SDKForm.Designer.cs new file mode 100644 index 0000000..cc6df5b --- /dev/null +++ b/RBXLegacyLauncher/RBXLegacyLauncher/SDKForm.Designer.cs @@ -0,0 +1,80 @@ +/* + * Created by SharpDevelop. + * User: BITL + * Date: 6/23/2017 + * Time: 2:33 PM + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ +namespace RBXLegacyLauncher +{ + partial class SDKForm + { + /// + /// Designer variable used to keep track of non-visual components. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Disposes resources used by the form. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing) { + if (components != null) { + components.Dispose(); + } + } + base.Dispose(disposing); + } + + /// + /// This method is required for Windows Forms designer support. + /// Do not change the method contents inside the source code editor. The Forms designer might + /// not be able to load this method if it was changed manually. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SDKForm)); + this.button1 = new System.Windows.Forms.Button(); + this.button2 = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // button1 + // + this.button1.Location = new System.Drawing.Point(12, 12); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(260, 63); + this.button1.TabIndex = 0; + this.button1.Text = "Clientinfo Editor"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.Button1Click); + // + // button2 + // + this.button2.Location = new System.Drawing.Point(12, 81); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(260, 63); + this.button2.TabIndex = 1; + this.button2.Text = "Info Editor"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(this.Button2Click); + // + // SDKForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.SystemColors.ControlLightLight; + this.ClientSize = new System.Drawing.Size(284, 157); + this.Controls.Add(this.button2); + this.Controls.Add(this.button1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "SDKForm"; + this.Text = "RBXLegacy SDK"; + this.ResumeLayout(false); + } + private System.Windows.Forms.Button button2; + private System.Windows.Forms.Button button1; + } +} diff --git a/RBXLegacyLauncher/RBXLegacyLauncher/SDKForm.cs b/RBXLegacyLauncher/RBXLegacyLauncher/SDKForm.cs new file mode 100644 index 0000000..807891b --- /dev/null +++ b/RBXLegacyLauncher/RBXLegacyLauncher/SDKForm.cs @@ -0,0 +1,44 @@ +/* + * Created by SharpDevelop. + * User: BITL + * Date: 6/23/2017 + * Time: 2:33 PM + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ +using System; +using System.Drawing; +using System.Windows.Forms; + +namespace RBXLegacyLauncher +{ + /// + /// Description of SDKForm. + /// + public partial class SDKForm : Form + { + public SDKForm() + { + // + // The InitializeComponent() call is required for Windows Forms designer support. + // + InitializeComponent(); + + // + // TODO: Add constructor code after the InitializeComponent() call. + // + } + + void Button1Click(object sender, EventArgs e) + { + ClientinfoEditor cie = new ClientinfoEditor(); + cie.Show(); + } + + void Button2Click(object sender, EventArgs e) + { + InfoEditor ie = new InfoEditor(); + ie.Show(); + } + } +} diff --git a/RBXLegacyLauncher/RBXLegacyLauncher/SDKForm.resx b/RBXLegacyLauncher/RBXLegacyLauncher/SDKForm.resx new file mode 100644 index 0000000..8fcf2e5 --- /dev/null +++ b/RBXLegacyLauncher/RBXLegacyLauncher/SDKForm.resx @@ -0,0 +1,6293 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAYAEBAAAAAAIABoBAAAZgAAACAgAAAAACAAqBAAAM4EAAAwMAAAAAAgAKglAAB2FQAAQEAAAAAA + IAAoQgAAHjsAAICAAAAAACAAKAgBAEZ9AAAAAAAAAAAgACggBABuhQEAKAAAABAAAAAgAAAAAQAgAAAA + AABABAAAAAAAAAAAAAAAAAAAAAAAAP////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////95eXn/1dXV/25ubv/Q0ND/iYmJ/6Wl + pf+hoaH/hYWF/4mJif/V1dX/srKy/9zc3P//////////////////////f39///////9ubm7/0NDQ/4mJ + if/FxcX/sbGx/5WVlf+JiYn/1dXV/5SUlP/Kysr//////////////////////8/Pz///////+vr///Ly + ///X1///zs7//+Li///39///////////////////6+v/////////////xsb//5mZ//+MjP//+Pj//4mJ + //9hYf//q6v//9DQ//+8vP//dnb//4GB///l5f//2Nj//5CQ//+Rkf//5ub//66u///x8f//mZn//4mJ + ///y8v//mpr//29v//96ev//k5P//0pK///x8f//nZ3//5iY////////l5f//+rq//+rq///9PT//8vL + ///19f//ra3//1BQ///9/f//lpb//9vb//+Njf//h4f///39////////t7f//8vL////////qKj///f3 + //+dnf//kZH//+bm//9jY///+vr//4eH//++vv//iIj//4mJ///5+f///////8zM//+fn////v7//6Wl + ///6+v//np7//6ys///V1f//jY3///j4//+MjP//zs7//2Ji///t7f///v7//5yc///7+///4+P//4uL + //+iov///Pz//83N///Pz///2Nj//21t//+hof//oaH//4uL//+YmP//tLT//7Gx///Hx///ior//5iY + ///c3P//w8P//6Cg//+goP//nJz//7+////9/f///////////////////////9TU//+srP////////Dw + ///a2v////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//KAAAACAAAABAAAAAAQAgAAAAAACAEAAAAAAAAAAA + AAAAAAAAAAAAAP////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////3t7 + e/9ra2v/f39//9fX1/97e3v/a2tr/39/f//X19f/u7u7/2tra/9zc3P/w8PD/5+fn///////e3t7/8PD + w/+7u7v/a2tr/4uLi//r6+v//////3t7e//Dw8P///////////////////////////////////////// + ////////T09P/6+vr////////////09PT/+Dg4P/6+vr//////9PT0//r6+v/6+vr/+vr6//Z2dn/39/ + f/8nJyf/r6+v/09PT/+vr6//8/Pz/+vr6///////T09P/6+vr/////////////////////////////// + //////////////////9PT0//r6+v////////////T09P/4ODg//r6+v//////09PT/+vr6//x8fH/9fX + 1/9/f3///////09PT/+vr6//T09P/6+vr//z8/P/6+vr/7u7u/9XV1f/n5+f/+vr6/////////////// + /////////////////////////////09PT/+vr6////////////97e3v/a2tr/39/f//X19f/u7u7/2tr + a/+Li4v/6+vr/8fHx/9/f3//a2tr/+vr6/+7u7v/a2tr/4uLi//r6+v/e3t7/8PDw//b29v/w8PD//// + ////////////////////////////////////////e3t7/8PDw/////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////+zs + ///Nzf///////9XV//+Li///lJT//6io//+8vP//z8///+Pj///6+v////////////////////////// + ////////9fX//7m5/////////////////////////////7u7//+Pj///j4///4+P//+ysv////////// + ///o6P//Ojr//zo6//83N///YGD//6+v//+srP//mJj//4OD//9vb///Q0P//5SU//+lpf//vb3///// + //////////////z8//9TU///V1f//1ZW///k5P//////////////////YGD//5mZ//+vr///qqr//0ZG + ////////5eX//zk5///IyP//8/P//yIi//+env/////////////////////////////i4v//Hx///1ZW + //9MTP//l5f////////+/v//aWn//5iY////////ysr//z8///+dnf////////////9eXv//4+P///// + ///+/v//PT3//+Hh//84OP//zs7/////////////Pz///1JS//93d///b2///0ZG//8zM////v7//4yM + //8MDP//+vr///v7//9ubv//bW3//4KC//97e//////////////+/v//WVn//62t/////////////1tb + ///m5v////////////8sLP//ODj//9TU//////////////39//8tLf//Ojr//7m5//8+Pv//9fX//0lJ + ///U1P//i4v//wQE///Q0P////////////+Zmf//ZGT///7+/////////////5CQ//93d/////////// + ////////WFj//+jo/////////////z4+///Z2f/////////////W1v//Q0P//x0d///5+f///////y4u + //81Nf//dHT///v7////////fHz//1ZW///7+//////////////////////////////Cwv//SEj///v7 + //////////////////9WVv//6+v/////////////8PD/////////////0tL//w4O//+env//QkL///// + //////////////b2/////////v7//4iI//8yMv//dHT//1dX///6+v//////////////////5ub//zQ0 + ///q6v///////////////////////1NT///u7v////////j4//8/P///bm7///Dw////////3t7//1pa + //8XF///+fn///////+6uv//x8f///b2////////0dH//yQk///k5P//MjL//+fn//////////////// + ///u7v//S0v//6Cg////////////////////////T0////Dw/////////Pz//z8///+wsP//Njb//7u7 + /////////////xwc///39///+/v//yUl//91df//JSX//97e///k5P//Rkb//z4+///Q0P////////// + ///////////////////6+v//aGj//3d3///9/f////////////9NTf//8/P/////////////Pj7///// + //+zs///goL/////////////Ghr///7+///n5///Hx///3Jy//9TU////////5ub//8LC///uLj///// + /////////////+jo///09P/////////////+/v//j4///1FR///y8v///////0pK///39/////////// + //89Pf//xsb//zc3///W1v////////////8fH/////////39///g4P//vr7//+np///+/v//R0f//5qa + ///////////////////+/v//UFD//0RE///x8f/////////////+/v//UVH//5aW////////SEj///n5 + /////////////zc3//9WVv//6en//////////////////x0d///R0f//6ur///39/////////v7//3Jy + //9PT///R0f//+Tk/////////////6am//9wcP//urr//0BA///t7f///////319//90dP///v7///// + //9ERP///Pz/////////////////////////////3t7//4SE//86Ov//YGD//3Jy//9YWP//RUX//0ND + //83N///hIT////////MzP//OTn//7Ky///p6f//ODj///T0////////v7///zw8//95ef//bGz///7+ + /////////////0JC//9+fv//e3v//3h4//90dP//cHD//0JC//9UVP//rKz///f3//////////////// + ///////////////////////////////////z8///YWH//yUl//+/v///////////////////xcX//3Bw + ///9/f//////////////////z8///8PD///Gxv//yMj//8vL///Nzf//8PD///////////////////// + ////////////////////////////////////////////////////////zc3///////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAwAAAAYAAAAAEAIAAAAAAAgCUAAAAA + AAAAAAAAAAAAAAAAAAD//////v7+/////////////v7+///////+/v7////////////+/v7///////// + ///+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+ + /v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+ + /v/+/v7///////7+/v/+/v7///////7+/v////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////+/v7//v7+//7+/v/+/v7//v7+//7+ + /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ + /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ + /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v///////v7+//// + /////////v7+///////+/v7////////////+/v7////////////+/v7///////7+/v/+/v7///////7+ + /v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+ + /v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+ + /v////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ + /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ + /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ + /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v///////v7+/////////////v7+//////+qqqr/X19f/19f + X/9fX1//ZGRk//////+qqqr/X19f/19fX/9fX1//ZGRk//7+/v/+/v7/goKC/19fX/9fX1//ZGRk//7+ + /v+qqqr/3Nzc//7+/v+qqqr/ZGRk//7+/v/+/v7/goKC/19fX/9fX1//3Nzc//7+/v/+/v7/+vr6/19f + X/+0tLT///////7+/v/+/v7///////7+/v/+/v7///////7+/v////////////////////////////// + //93d3f/BgYG/9/f3//f39//4ODg//////93d3f/BgYG/9/f3//f39//4ODg//////+IiIj/DQ0N/9/f + 3//f39//ODg4//////93d3f/rq6u/9/f3/9oaGj/BwcH//////+IiIj/DQ0N/9/f3//f39//aGho//// + ////////9/f3/wAAAP+Hh4f////////////////////////////////////////////+/v7//v7+//7+ + /v/+/v7//v7+//7+/v93d3f/BwcH//7+/v/+/v7//v7+//7+/v93d3f/BAQE/5+fn//S0tL//v7+//7+ + /v93d3f/BwcH//7+/v/MzMz/Kioq//7+/v93d3f/SkpK/19fX/8sLCz/BwcH//7+/v93d3f/BwcH//7+ + /v/+/v7//v7+//7+/v/+/v7/9/f3/wAAAP+Hh4f//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ + /v///////v7+/////////////v7+//////93d3f/BwcH///////+/v7///////////93d3f/BAQE/5+f + n//S0tL///////7+/v93d3f/BwcH//7+/v/MzMz/oqKi//7+/v93d3f/x8fH//7+/v93d3f/BwcH//7+ + /v93d3f/BwcH//7+/v/+/v7///////7+/v/+/v7/f39//ywsLP99fX3/3Nzc//7+/v/+/v7///////7+ + /v/+/v7///////7+/v////////////////////////////////93d3f/BwcH//////////////////// + //93d3f/BgYG/9/f3//f39//4ODg//////+IiIj/DQ0N/9/f3//f39//aGho//////+IiIj/tbW1/9/f + 3/9oaGj/Hx8f//////+IiIj/DQ0N/9/f3//f39//aGho//////+IiIj/DQ0N/+jo6P/u7u7/UFBQ//// + ///////////////////////////////////+/v7//v7+//7+/v/+/v7//v7+//7+/v93d3f/BwcH//7+ + /v/+/v7//v7+//7+/v+qqqr/X19f/19fX/9fX1//ZGRk//7+/v/+/v7/goKC/19fX/9fX1//3Nzc//7+ + /v/+/v7/goKC/19fX/9fX1//3Nzc//7+/v/+/v7/goKC/19fX/9fX1//3Nzc//7+/v+qqqr/ZGRk//7+ + /v/+/v7/h4eH//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v///////v7+/////////////v7+//// + //93d3f/BwcH///////+/v7////////////+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+ + /v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+ + /v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v////////////// + ///////////////////u7u7/4ODg//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+/9XV + /v+Pj/7//v7+//7+/v/Y2P7/fHz+/0hI/v9aWv7/bm7+/4GB/v+Wlv7/qan+/729/v/R0f7/5ub+//7+ + /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7/mZn+/7Oz/v/+/v7//v7+//7+ + /v/+/v7//v7+//7+/v///////v7+/9ra///X1///19f+/9fX///X1/7/19f//+rq///+/v7///////// + ///+/v7/zs7//xQU/v8MDP7/XV3//zU1/v8JCf7/VVX//5aW/v+Hh/7/c3P//19f/v9LS/7/Nzf//yMj + /v8PD/7/AwP//+vr/v/19f7/oaH///39/v/+/v7///////7+/v/+/v7///////7+/v+pqf7/Dg7//xQU + /v9VVf7/5eX///7+/v/+/v7///////7+/v///////////xUV//8GBv//Bwf//wcH//8HB///AwP//3R0 + ///////////////////Jyf//EhL//35+///c3P//JSX//wYG///n5/////////////////////////// + ///////////////////9/f//IyP//6Cg//9AQP//BAT//1pa///29v///////////////////////8DA + //8MDP//trb//+rq//9dXf//ERH//5aW///8/P/////////////+/v7//v7+/w8P/v/Pz/7//v7+//7+ + /v/+/v7/dXX+/2Zm/v/+/v7//v7+/8TE/v8PD/7/iIj+//7+/v/+/v7/yMj+/wAA/v8+Pv7/7u7+//7+ + /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7/ZGT+/wUF/v9FRf7/29v+/zg4/v83N/7/5ub+//7+ + /v/+/v7/09P+/xER/v+dnf7//v7+//7+/v/+/v7/urr+/yMj/v86Ov7/6+v+//7+/v///////v7+/w8P + ///V1f///v7+///////+/v7/g4P//1hY///+/v7/vr7//w0N//+Rkf7///////7+/v/+/v7/zc3//xER + /v9HR/7/Kyv//9bW/v+xsf7/hob//1tb/v8wMP7/tbX///7+/v/o6P7/LS3//xYW/v/39/7///////f3 + /v9cXP7/HR3//83N/v/j4/7/HR3//4CA/v/+/v7///////7+/v/+/v7/+fn//zw8/v9UVP7//v7///7+ + /v///////f3//wwM///V1f//////////////////kZH//0lJ//+4uP//DAz//5mZ//////////////// + ////////x8f//xgY//+Skv//AQH//0xM//8AAP//UVH//35+//9ERP//b2////////9OTv//DQ3//wEB + ///o6P/////////////+/v//hob//w0N//8lJf//ZGT///7+///////////////////+/v//b2///ykp + ///y8v/////////////+/v7//f3+/wwM/v/b2/7//v7+//7+/v/+/v7/n5/+/xcX/v8LC/7/o6P+//7+ + /v/+/v7//v7+//7+/v/+/v7/sbH+/wAA/v8dHf7/srL+//Ly/v8AAP7/6Oj+//7+/v9sbP7/MDD+//7+ + /v/n5/7/Kyv+/wAA/v+pqf7//v7+//7+/v/+/v7//v7+/6+v/v9WVv7/+vr+//7+/v/+/v7//v7+//7+ + /v+lpf7/Dg7+/9bW/v/+/v7//v7+//7+/v//////+/v+/wkJ///c3P///v7+///////+/v7/rKz//wYG + //+qqv7////////////+/v7///////j4/v+AgP7/Bwf//xkZ/v/x8f7///////7+/v8PD/7/RUX//0lJ + /v8YGP7/wcH///7+/v/+/v7/6ur//y4u/v9DQ/7/9/f///7+/v/+/v7///////7+/v/+/v7///////7+ + /v/+/v7//////9LS/v8MDP7/rKz///7+/v/+/v7///////7+/v//////+/v//wgI///g4P////////// + ////////w8P//7Ky////////////////////////w8P//yoq//8qKv//goL//ygo//////////////// + //+2tv//iYn//21t///j4///////////////////2Nj//0BA//8AAP//SEj///X1//////////////// + ////////////////////////7+///yYm//92dv///v7////////////////////////+/v7/+fn+/wUF + /v/h4f7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/v7/7/RET+/wAA/v+Dg/7/rq7+/ysr + /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//39/v9zc/7/BQX+/1BQ/v/R0f7/Nzf+/0ND + /v/09P7//v7+//7+/v/+/v7//v7+//7+/v/9/f7/T0/+/z4+/v/7+/7//v7+//7+/v/+/v7//v7+//7+ + /v//////+fn+/wQE///l5f///v7+///////+/v7/paX//19f/v+Bgf7/9fX///7+/v/+/v7//v7//7W1 + /v8tLf7/CQn//ykp/v/9/f7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/d3f7/SUn//xgY + /v/8/P7/rKz//wcH/v/Jyf7///////7+/v/+/v7///////7+/v/+/v7/gYH//xER/v+4uP7///////7+ + /v/+/v7///////7+/v//////9/f//wEB///n5///////////////////dnb//zIy//81Nf//IyP//7i4 + ///+/v/////////////7+///e3v//wAA///s7P////////////8cHP//Hx///zAw//92dv//5eX///// + ////////kZH//0RE///Pz///Dw///6Sk/////////////////////////////////////////v7//6io + //8NDf//kpL///7+///////////////////+/v7/9/f+/wAA/v/q6v7//v7+//7+/v/+/v7/fX3+/11d + /v/7+/7/jo7+/wwM/v9oaP7//v7+//7+/v/+/v7/qan+/wAA/v/29v7//v7+//b2/v8AAP7/ra3+/6qq + /v8iIv7/ODj+//7+/v/+/v7/R0f+/3Fx/v8bG/7/hYX+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ + /v/+/v7//v7+//7+/v/Hx/7/GBj+/2ho/v/6+v7//v7+//7+/v//////9PT+/wAA///t7f///v7+//// + ///+/v7/hob//1ZW/v/+/v7//////5mZ/v87O/7///////7+/v/+/v7/paX//wAA/v/9/f7//////+Dg + /v8AAP7/nJz//6ys/v8KCv7/y8v///7+/v/z8/7/CAj//w4O/v9mZv7//v7///7+/v/+/v7///////7+ + /v/+/v7//Pz///7+/v/+/v7///////7+/v/+/v7/4eH//y8v/v9CQv7/7Oz///7+/v//////8fH//wAA + ///w8P//////////////////jo7//09P////////7u7//z8///9hYf//////////////////oqL//wkJ + /////////////+Tk//9aWv//ODj//xUV//91df////////////+ysv//AAD//0hI///6+v////////// + ///////////////////j4///OTn//+Tk//////////////////////////////Ly//9NTf//JSX//9jY + ///+/v7/7+/+/wAA/v/z8/7//v7+//7+/v/+/v7/lJT+/0ZG/v/Z2f7/KCj+/0VF/v/t7f7//v7+//7+ + /v/+/v7/np7+/xER/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/9/f7//v7+//7+/v9RUf7/Kyv+//Hx + /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v9MTP7/Fhb+/yMj/v/g4P7//v7+//7+/v/+/v7//v7+//7+ + /v9xcf7/Gxv+/9zc/v//////6+v+/wAA///29v///v7+///////+/v7/nJz//wUF/v8DA/7/cHD///v7 + /v/+/v7///////7+/v/+/v7/l5f//xoa/v/+/v7///////7+/v/+/v7///////7+/v/+/v7//f3//2xs + /v8XF/7/Cgr//42N/v/9/f7///////7+/v/+/v7//////6Oj/v8UFP7/5+f//2dn/v8eHv7/2tr///7+ + /v/+/v7//v7//3l5/v8YGP7/19f///7+/v//////6ur//wAA///5+f//////////////////3t7//7u7 + ///g4P///v7///////////////////7+///V1f//VFT//wQE//80NP//TU3//2dn//+AgP//mZn//7Ky + ///Ly///a2v//yMj///g4P//wsL//x8f//9JSf//6Oj/////////////5+f//xMT//+np/////////39 + //9tbf//Ghr//9XV///+/v//gYH//xQU///T0//////////////+/v7/5eX+/wAA/v/7+/7//v7+//7+ + /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/j4/7/i4v+/zEx/v8HB/7/T0/+/6am/v+xsf7/mJj+/35+ + /v9lZf7/S0v+/zIy/v8YGP7/Jyf+/+Pj/v/+/v7//v7+/+7u/v9UVP7/GRn+/7q6/v/+/v7/VFT+/1BQ + /v/+/v7//v7+//7+/v/9/f7/dXX+/xUV/v9ubv7/ERH+/83N/v/+/v7//v7+//7+/v//////5OT+/wAA + //++vv//ubn+/7i4//+0tP7/sbH//66u/v+qqv7/lJT//0BA/v8FBf7/QED//5qa/v/t7f7///////7+ + /v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7/m5v//w0N + /v9QUP7/EhL//+bm/v/+/v7///////7+/v/+/v7//v7//319/v8ODv7/yMj///7+/v/+/v7///////7+ + /v//////4+P//yAg//8mJv//Jib//ysr//8sLP//MDD//zIy//80NP//QED//4uL///i4v////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////9bW//8wMP//oaH///////////////////////////////////7+///h4f////////// + ///////////////////+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ + /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ + /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/5+f7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ + /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v///////v7+/////////////v7+///////+/v7///////7+ + /v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+ + /v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+ + /v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////+/v7//v7+//7+ + /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ + /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ + /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ + /v///////v7+/////////////v7+///////+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+ + /v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+ + /v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+ + /v/+/v7///////7+/v////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ + /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ + /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ + /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v///////v7+/////////////v7+//// + ///+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+ + /v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+ + /v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7//v7+//7+ + /v/+/v7//v7+//7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+ + /v/+/v7///////7+/v/+/v7///////7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ + /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ + /v///////////////////////v7+//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////v7+/////////////v7+///////+/v7///////7+/v/+/v7///////7+ + /v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+ + /v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+ + /v/+/v7///////7+/v/+/v7///////7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7///////7+ + /v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+ + /v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+ + /v/+/v7///////7+/v/+/v7///////7+/v/+/v7///////7+/v///////////////////////v7+//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8oAAAAQAAAAIAAAAABACAAAAAAAABCAAAAAAAAAAAAAAAAAAAAAAAA//////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////8/Pz/9/f3//f39//39/f/9/f3//f39//6+v + r///////z8/P/39/f/9/f3//f39//39/f/9/f3//r6+v////////////z8/P/39/f/9/f3//f39//39/ + f/+vr6///////8/Pz/+vr6/////////////Pz8//f39//6+vr////////////8/Pz/9/f3//f39//39/ + f/+vr6///////////////////////8/Pz/9/f3//r6+v//////////////////////////////////// + //////////////////////////////////////////////////////////////////+fn5//AAAA/y8v + L/9/f3//f39//39/f/+vr6///////5+fn/8AAAD/Ly8v/39/f/9/f3//f39//6+vr///////z8/P/09P + T/8vLy//f39//39/f/9PT0//X19f//////+fn5//X19f////////////n5+f/wAAAP9fX1///////8/P + z/9PT0//Ly8v/39/f/9/f3//f39//6+vr/////////////////+fn5//AAAA/19fX/////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////n5+f/wAAAP9fX1////////////////////////////+fn5//AAAA/19fX/////////////// + /////////////5+fn/8AAAD/X19f////////////n5+f/19fX///////n5+f/y8vL/9/f3//f39//09P + T/8AAAD/X19f//////+fn5//AAAA/19fX////////////8/Pz/+vr6//////////////////n5+f/wAA + AP9fX1////////////////////////////////////////////////////////////////////////// + /////////////////////////////5+fn/8AAAD/X19f////////////////////////////n5+f/wAA + AP8vLy//f39//6+vr/////////////////+fn5//AAAA/19fX///////z8/P/09PT/9fX1///////5+f + n/8vLy//f39//39/f/9PT0//AAAA/19fX///////n5+f/wAAAP9fX1////////////////////////// + /////////////5+fn/8AAAD/X19f//////////////////////////////////////////////////// + //////////////////////////////////////////////////+fn5//AAAA/19fX/////////////// + /////////////5+fn/8AAAD/Ly8v/39/f/+vr6//////////////////n5+f/wAAAP9fX1///////8/P + z/9/f3//r6+v//////+fn5//X19f////////////n5+f/wAAAP9fX1///////5+fn/8AAAD/X19f//// + /////////////////////////////8/Pz/9PT0//Ly8v/39/f/+vr6////////////////////////// + ////////////////////////////////////////////////////////////////////////n5+f/wAA + AP9fX1////////////////////////////+fn5//AAAA/19fX////////////////////////////5+f + n/8AAAD/X19f////////////z8/P/6+vr///////n5+f/19fX////////////5+fn/8AAAD/X19f//// + //+fn5//AAAA/19fX////////////8/Pz/+vr6///////8/Pz/9PT0//Ly8v/6+vr//Pz8//f39//6+v + r/////////////////////////////////////////////////////////////////////////////// + /////////////5+fn/8AAAD/X19f////////////////////////////n5+f/wAAAP8vLy//f39//39/ + f/9/f3//r6+v///////Pz8//T09P/y8vL/9/f3//f39//39/f/+vr6///////8/Pz/9/f3//f39//39/ + f/9PT0//Ly8v/6+vr///////z8/P/09PT/8vLy//f39//39/f/9/f3//r6+v//////+fn5//AAAA/19f + X////////////5+fn/9fX1////////////////////////////////////////////////////////// + //////////////////////////////////+fn5//AAAA/19fX////////////////////////////8/P + z/9/f3//f39//39/f/9/f3//f39//6+vr////////////8/Pz/9/f3//f39//39/f/+vr6////////// + ////////z8/P/39/f/9/f3//f39//6+vr//////////////////Pz8//f39//39/f/9/f3//r6+v//// + ////////z8/P/39/f/+vr6/////////////Pz8//r6+v//////////////////////////////////// + ////////////////////////////////////////////////////////n5+f/wAAAP9fX1////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////8/P + z/9/f3//r6+v//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////+0tP//R0f//+/v/////////////9ra//9+fv//IyP//w0N//8gIP//NDT//0hI + //9bW///cHD//4OD//+Xl///qqr//76+///S0v//7u7///////////////////////////////////// + ////////////////////////////////////////2dn//zQ0//+1tf////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////+srP//BQX//wAA//8uLv//oKD//zg4//8AAP//BAT//0pK + //93d///Y2P//09P//86Ov//Jyf//xIS//8BAf//AAD//wAA//8AAP//AAD//0lJ/////////////87O + ///w8P//////////////////////////////////////////////////5+f//yIi//8CAv//AAD//1ZW + ///m5v/////////////////////////////////////////////Ozv//Hx///x8f//8fH///Hx///x8f + //8fH///Hx///x8f//+trf////////////////////////////+lpf//AwP//zU1//+urv//Dg7//wAA + //8GBv//k5P//+np////////////////////////////////////////+/v//+np///V1f//wMD//01N + //8MDP//+vr//729//8MDP//KSn//9zc////////////////////////////////////////8/P//zQ0 + //8ODv//zc3//4+P//8MDP//EBD//5iY///9/f//////////////////////////////////w8P//wAA + //9HR///X1///19f//9fX///X1///1dX//8AAP//lJT///////////////////////+fn///AgL//zw8 + ///x8f///////8/P//8YGP//BQX//8PD//////////////////////////////////////////////// + //////////////////+lpf//AAD//35+//8JCf//LCz//xQU//8TE///v7////////////////////// + ////////+vr//0lJ//8FBf//u7v/////////////4OD//0xM//8AAP//Ozv//9TU//////////////// + /////////////7+///8AAP//v7/////////////////////////z8///AAD//4aG//////////////// + //+Xl///AQH//0ND///z8///////////////////a2v//wAA//8ICP//rq7///////////////////// + ////////////////////////////////////////5eX//wAA//8AAP//Nzf//+3t///d3f//Kyv//wUF + //+amv///////////////////v7//2Fh//8AAP//oqL/////////////////////////////qan//xgY + //8FBf//np7///////////////////////+/v///AAD//8fH/////////////////////////v7//wMD + //93d/////////////+Pj///AAD//0tL///29v///////////////////////2ho//8VFf//NTX//wIC + //+Wlv////////Ly///Jyf//np7//3Jy//9HR///Y2P//////////////////5+f//8BAf//Hx////Hx + //////////////Hx//9KSv//AAD//3Bw///7+////////35+//8AAP//hob///////////////////// + /////////////+/v//8lJf//FRX//+Li////////////////////////urr//wAA///IyP////////// + //////////////////8QEP//aWn///////+Hh///AAD//1JS///5+f////////////////////////// + //9hYf//Hx////Hx//8gIP//AAD//0hI//8BAf//AAD//wAA//8ICP//ExP//w8P///7+////////5KS + //8BAf//CQn//woK///5+f///////////////////Pz//3R0//8AAP//SUn//46O//8AAP//aWn///7+ + //////////////////////////////39//9PT///AwP//729/////////////////////////////7e3 + //8AAP//ycn/////////////////////////////HR3//1tb//9/f///AAD//1pa///7+/////////// + ////////////////////////X1///xcX//89Pf//AAD//0JC//+zs///AAD//3Fx///a2v///Pz//6Sk + //8AAP//yMj///////+Skv//AQH//w8P//8AAP//wsL/////////////////////////////np7//wYG + //8AAP//Tk7///v7//////////////////////////////////+Fhf//AAD//4qK//////////////// + //////////////////+3t///AAD//9DQ/////////////////////////////yws//8LC///AAD//2Nj + ///8/P//////////////////////////////////+Pj//z8///8AAP//ERH//52d///+/v//8vL//wAA + //+Hh/////////7+//+Cgv//AAD//4uL/////////////5qa//8BAf//AAD//4KC//////////////// + ///////////////////Cwv//TU3///X1//////////////////////////////////+5uf//AgL//1RU + ///+/v//////////////////////////////////sbH//wAA///Q0P////////////////////////// + //86Ov//AAD//2tr///9/f//////////////////////////////////xMT//yoq//8AAP//HR3//+fn + //////////////////8PD///Kyv//319//9UVP//AAD//1BQ///x8f//////////////////oKD//wIC + //8tLf//8/P///////////////////////////////////////////////////////////////////// + ///g4P//FBT//ykp///x8f///////////////////////////////////////7Cw//8AAP//09P///// + ////////////////////////SEj//3V1///+/v/////////////////////////////w8P//aWn//wEB + //8bG///Jib//zIy////////////////////////Xl7//yAg//8BAf//AgL//4OD///9/f////////// + //////////////7+//9PT///AAD//zo6///x8f////////////////////////////////////////// + ///////////////////39///NDT//w0N///W1v////////////////////////////////////////// + //+wsP//AAD//9fX/////////////////////////////8PD//////////////////////////////// + //+vr///Gxv//wEB//9paf//8PD//09P//84OP//////////////////////////////////9/f//+Pj + /////////////////////////////8PD//84OP//AAD//yIi//8FBf//Njb//+7u//////////////// + ////////////////////////////////////////ZGT//wAA//+srP////////////////////////// + ////////////////////////qKj//wAA///X1/////////////////////////////////////////// + ///////////////////9/f//nJz//xsb//8AAP//S0v//9TU//9ISP//Ozv///////////////////// + /////////////////////////////////////////Pz//2Bg//8AAP//AQH//46O///6+v//rq7//wcH + //8xMf//7Oz/////////////////////////////////////////////nJz//wAA//9ubv////////// + /////////////////////////////////////////////6io//8AAP//3Nz///////////////////// + ///z8///f3///39///+Wlv//+fn////////////////////////19f//hYX//w4O//8DA///Dg7//z8/ + ///////////////////////////////////////////////////////////////////o6P//YGD//wEB + //8gIP//+vr///////9ZWf//AAD//5+f/////////////////////////////////////////////729 + //8REf//HBz//83N//////////////////////////////////////////////////+mpv//AAD//9/f + ////////////////////////8PD//wAA//8AAP//AAD//yws///ExP////////////////////////// + ///q6v//bm7//wYG//8JCf//6en//////////////////3Z2//93d///h4f//5iY///b2/////////// + //////////////////84OP//Nzf///////+Xl///AAD//29v//////////////////////////////// + ////////////////////////2dn//yUl//8KCv//rKz///////////////////////////////////// + ////////n5///wAA///f3/////////////////////////f3//8AAP//g4P//7Oz//8dHf//AQH//2ho + ///v7/////////////////////////////87O///AAD//+vr//////////////////8HB///AgL//wAA + //8AAP//AwP//1ZW///Q0P/////////////u7v//AwP//4CA//+0tP//AwP//1BQ///8/P////////// + ///////////////////////////////////////////////////t7f//QUH//wEB//+EhP///v7///// + /////////////////////////////5+f//8AAP//5ub////////////////////////+/v//AAD//3t7 + ////////8vL//21t//8CAv//GRn//+fn////////////////////////ODj//wAA///09P////////// + ///w8P//AAD//4yM///4+P//3t7//z09//8AAP//qan/////////////p6f//wAA//+Xl///Cwv//zc3 + ///19f////////////////////////////////////////////////////////////////////////n5 + //9kZP//AAD//1pa///39/////////////////////////////+cnP//AAD//+jo//////////////// + /////////////wcH//90dP//////////////////enr//wAA///z8////////////////////////zMz + //8AAP///Pz/////////////2tr//wAA//9/f///6en//9zc//8LC///T0///////////////////11d + //8DA///Fhb//yIi///p6f////////////////////////////////////////////////////////// + /////////////////////////v7//4yM//8CAv//Nzf//+bm////////////////////////l5f//wAA + ///o6P////////////////////////////8PD///bW3//////////////v7//1VV//8XF/////////// + //////////////////8xMf//Bgb//////////////////8TE//8AAP//AAD//wAA//8DA///Dw///+Tk + //////////////z8//8VFf//AAD//xMT///Y2P////////////////////////////////////////// + //+mpv//1NT/////////////////////////////////////////////sbH//wwM//8cHP//zs7///// + /////////////5eX//8AAP//8PD/////////////////////////////Fhb//2Rk////////+Pj//2Bg + //8AAP//YGD/////////////////////////////Kir//xAQ///////////////////5+f//1NT//7Gx + //+Ojv//a2v//6io///////////////////IyP//AAD//wgI///Cwv////////////////////////// + ///////////////////i4v//Dg7//xQU///Ozv////////////////////////////////////////// + ///Ozv//CQn//woK///Y2P////////////+Tk///AAD///Dw/////////////////////////////x4e + //9cXP//6Oj//zo6//8AAP//e3v///39/////////////////////////////ygo//8ZGf////////// + ///////////////////////////////////////////////////9/f//VVX//wAA//+goP////////// + ///////////////////////////////////+/v//SUn//wkJ//8eHv//EBD//8jI//////////////// + ///////////////////+/v//bm7//wAA//91df//////////////////kJD//wAA///x8f////////// + //////////////////8mJv//CAj//wUF//8KCv//qKj///////////////////////////////////// + //8gIP//IiL////////////////////////////////////////////////////////9/f//ZWX//wAA + //8BAf//Kyv//9LS////////////////////////////////////////oaH//wAA//+MjP//4eH//yMj + //8NDf//wMD/////////////////////////////dnb//wAA//9tbf///v7//////////////////5CQ + //8AAP//9/f/////////////////////////////Wlr//1ZW//95ef//0ND///////////////////// + ////////////////////////Hh7//xUV//+Wlv//sLD//8nJ///i4v//+fn///////////////////// + ///9/f//ZWX//wAA//+EhP//ubn//xgY//8ICP//lpb///7+////////////////////////5+f//xER + //84OP///Pz////////k5P//Jyf//woK//+6uv//////////////////f3///wAA//9lZf///v7///// + //////////////////+Kiv//AAD///f3//////////////////////////////////////////////// + /////////////////////////////9zc//+Cgv//KCj//wAA//8AAP//AAD//wAA//8AAP//AAD//wEB + //8VFf//Li7//0hI//9hYf//TU3//wAA//+IiP/////////////p6f//Skr//wAA//9RUf//7e3///// + /////////////1FR//8HB///1tb//////////////////+jo//8sLP//Bwf//7Oz////////hob//wAA + //9eXv///Pz/////////////////////////////iIj//wAA///6+v////////////////////////// + ///////////////////////////////////o6P//kpL//zc3//8AAP//AQH//zw8//+Wlv//6+v///Hx + ///X1///vb3//6Sk//+Li///cnL//1hY//8+Pv//JSX//wwM//+Li/////////////////////////7+ + //+Pj///Bwf//x0d///Cwv///////6mp//8AAP//hob/////////////////////////////7Oz//zEx + //8FBf//Xl7//wAA//9WVv//+/v//////////////////////////////////4iI//8AAP////////n5 + ///39///9fX///Dw///w8P//6en//+jo///k5P//3d3//6Gh//9HR///AwP//wAA//8tLf//h4f//+Dg + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////8/P//8oKP//AwP//3l5//8WFv//NDT///v7//////////////// + ///////////////////u7v//Njb//wAA//9PT///+fn///////////////////////////////////// + //+AgP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//ICD//3l5 + ///T0/////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////9PT//2Rk//8AAP//Bgb//9HR + //////////////////////////////////////////////Hx//94eP//+Pj///////////////////// + ////////////////////////v7///4CA//+IiP//iIj//4mJ//+QkP//kJD//5KS//+Xl///l5f//5qa + //+fn///xcX///39//////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////qqr//42N//////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAIAAAAAAAQAAAQAgAAAAAAAACAEAAAAAAAAA + AAAAAAAAAAAAAP////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////z8/P/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/7+/v/////////////////8/Pz//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP+/v7////////////////////////////8/Pz//AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/v7+//////////////////z8/P/8AAAD/v7+///////////////////// + ////////Pz8//wAAAP8AAAD/AAAA/7+/v////////////////////////////z8/P/8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/v7+//////////////////////////////////////////////////z8/ + P/8AAAD/AAAA/wAAAP+/v7////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////Pz8//wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/v7+//////////////////z8/ + P/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/7+/v/////////////// + /////////////z8/P/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP+/v7////////// + ////////Pz8//wAAAP+/v7////////////////////////////8/Pz//AAAA/wAAAP8AAAD/v7+///// + ////////////////////////Pz8//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP+/v7////////// + ////////////////////////////////////////Pz8//wAAAP8AAAD/AAAA/7+/v/////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////8/Pz//AAAA/wAAAP8AAAD/v7+///////////////////// + ////////////////////////////////////////Pz8//wAAAP8AAAD/AAAA/7+/v/////////////// + /////////////////////////////////////////////z8/P/8AAAD/AAAA/wAAAP+/v7////////// + //////////////////8/Pz//AAAA/7+/v/////////////////8/Pz//AAAA/7+/v/////////////// + /////////////z8/P/8AAAD/AAAA/wAAAP+/v7//////////////////Pz8//wAAAP8AAAD/AAAA/7+/ + v////////////////////////////z8/P/8AAAD/v7+///////////////////////////////////// + //8/Pz//AAAA/wAAAP8AAAD/v7+///////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////z8/ + P/8AAAD/AAAA/wAAAP+/v7////////////////////////////////////////////////////////// + //8/Pz//AAAA/wAAAP8AAAD/v7+///////////////////////////////////////////////////// + ////////Pz8//wAAAP8AAAD/AAAA/7+/v////////////////////////////z8/P/8AAAD/v7+///// + /////////////z8/P/8AAAD/v7+/////////////////////////////Pz8//wAAAP8AAAD/AAAA/7+/ + v/////////////////8/Pz//AAAA/wAAAP8AAAD/v7+/////////////////////////////Pz8//wAA + AP+/v7///////////////////////////////////////z8/P/8AAAD/AAAA/wAAAP+/v7////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////Pz8//wAAAP8AAAD/AAAA/7+/v/////////////// + /////////////////////////////////////////////z8/P/8AAAD/AAAA/wAAAP+/v7////////// + //////////////////////////////////////////////////8/Pz//AAAA/wAAAP8AAAD/v7+///// + ////////////////////////Pz8//wAAAP+/v7//////////////////Pz8//wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/v7+//////////////////z8/P/8AAAD/AAAA/wAA + AP+/v7////////////////////////////////////////////////////////////////////////// + ////////Pz8//wAAAP8AAAD/AAAA/7+/v/////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //8/Pz//AAAA/wAAAP8AAAD/v7+///////////////////////////////////////////////////// + ////////Pz8//wAAAP8AAAD/AAAA/7+/v/////////////////////////////////////////////// + /////////////z8/P/8AAAD/AAAA/wAAAP+/v7////////////////////////////8/Pz//AAAA/7+/ + v/////////////////8/Pz//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP+/v7//////////////////Pz8//wAAAP8AAAD/AAAA/7+/v/////////////////////////////// + //////////////////////////////////////////////////8/Pz//AAAA/wAAAP8AAAD/v7+///// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////z8/P/8AAAD/AAAA/wAAAP+/v7////////// + //////////////////////////////////////////////////8/Pz//AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/7+/v///////////////////////////////////////Pz8//wAAAP8AAAD/AAAA/7+/ + v/////////////////8/Pz//AAAA/wAAAP8AAAD/v7+//////////////////z8/P/8AAAD/v7+///// + ////////////////////////Pz8//wAAAP8AAAD/AAAA/7+/v/////////////////8/Pz//AAAA/wAA + AP8AAAD/v7+///////////////////////////////////////////////////////////////////// + /////////////z8/P/8AAAD/AAAA/wAAAP+/v7////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////Pz8//wAAAP8AAAD/AAAA/7+/v/////////////////////////////////////////////// + /////////////z8/P/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/v7+///////////////////// + //////////////////8/Pz//AAAA/wAAAP8AAAD/v7+//////////////////z8/P/8AAAD/AAAA/wAA + AP+/v7//////////////////Pz8//wAAAP+/v7////////////////////////////8/Pz//AAAA/wAA + AP8AAAD/v7+//////////////////z8/P/8AAAD/AAAA/wAAAP+/v7////////////////////////// + ////////////////////////////////////////////////////////Pz8//wAAAP8AAAD/AAAA/7+/ + v/////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////8/Pz//AAAA/wAAAP8AAAD/v7+///// + ////////////////////////////////////////////////////////Pz8//wAAAP8AAAD/AAAA/7+/ + v////////////////////////////////////////////////////////////z8/P/8AAAD/AAAA/wAA + AP+/v7////////////////////////////////////////////////////////////8/Pz//AAAA/7+/ + v////////////////////////////z8/P/8AAAD/AAAA/wAAAP+/v7//////////////////Pz8//wAA + AP8AAAD/AAAA/7+/v/////////////////////////////////////////////////////////////// + ////////Pz8//wAAAP8AAAD/AAAA/7+/v///////Pz8//wAAAP+/v7////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////z8/P/8AAAD/AAAA/wAAAP+/v7////////////////////////////////////////// + //////////////////8/Pz//AAAA/wAAAP8AAAD/v7+///////////////////////////////////// + ////////////////////////Pz8//wAAAP8AAAD/AAAA/7+/v/////////////////////////////// + /////////////////////////////z8/P/8AAAD/v7+/////////////////////////////Pz8//wAA + AP8AAAD/AAAA/7+/v/////////////////8/Pz//AAAA/wAAAP8AAAD/v7+///////////////////// + //////////////////////////////////////////////////8/Pz//AAAA/wAAAP8AAAD/v7+///// + //8/Pz//AAAA/7+/v/////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////Pz8//wAAAP8AAAD/AAAA/7+/ + v////////////////////////////////////////////////////////////z8/P/8AAAD/AAAA/wAA + AP+/v7////////////////////////////////////////////////////////////8/Pz//AAAA/wAA + AP8AAAD/v7+/////////////////////////////Pz8//wAAAP+/v7//////////////////Pz8//wAA + AP+/v7////////////////////////////8/Pz//AAAA/wAAAP8AAAD/v7+//////////////////z8/ + P/8AAAD/AAAA/wAAAP+/v7////////////////////////////8/Pz//AAAA/7+/v/////////////// + //8/Pz//AAAA/wAAAP8AAAD/v7+/////////////////////////////Pz8//wAAAP+/v7////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////8/Pz//AAAA/wAAAP8AAAD/v7+///////////////////////////////////// + ////////////////////////Pz8//wAAAP8AAAD/AAAA/7+/v/////////////////////////////// + /////////////////////////////z8/P/8AAAD/AAAA/wAAAP+/v7////////////////////////// + //8/Pz//AAAA/7+/v/////////////////8/Pz//AAAA/7+/v////////////////////////////z8/ + P/8AAAD/AAAA/wAAAP+/v7//////////////////Pz8//wAAAP8AAAD/AAAA/7+/v/////////////// + /////////////z8/P/8AAAD/v7+//////////////////z8/P/8AAAD/AAAA/wAAAP+/v7////////// + //////////////////8/Pz//AAAA/7+/v/////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////z8/P/8AAAD/AAAA/wAA + AP+/v7////////////////////////////////////////////////////////////8/Pz//AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP+/v7////////////////////////// + //8/Pz//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/7+/v/////////////////////////////// + ////////Pz8//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP+/v7////////////////////////// + /////////////z8/P/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/v7+///////////////////// + ////////Pz8//wAAAP8AAAD/AAAA/7+/v////////////////////////////z8/P/8AAAD/v7+///// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////Pz8//wAAAP8AAAD/AAAA/7+/v/////////////////////////////// + /////////////////////////////z8/P/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/7+/v////////////////////////////z8/P/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/v7+///////////////////////////////////////8/Pz//AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/7+/v///////////////////////////////////////Pz8//wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP+/v7////////////////////////////8/Pz//AAAA/wAAAP8AAAD/v7+///// + ////////////////////////Pz8//wAAAP+/v7////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////8/Pz//AAAA/wAA + AP8AAAD/v7+///////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////z8/P/8AAAD/AAAA/wAAAP+/v7////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////Pz8//wAA + AP8AAAD/AAAA/7+/v/////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////8/Pz//AAAA/wAAAP8AAAD/v7+///////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///c3P//Ojr//9PT///////////////////////////////////////////////////Q0P//dHT//xoa + //8QEP//JSX//zc3//9KSv//Xl7//3Nz//+Ghv//mpr//6ys///AwP//19f//+np///7+/////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////z8//9YWP//eHj///b2//////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////2dn//x0d//8AAP//EBD//8LC//////////////// + /////////////+Pj//+Jif//Kyv//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8SEv//Jib//zg4//9LS///YGD//3R0//+Hh///m5v//6+v + ///Dw///+Pj///////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////a2v//wAA//8AAP//IyP//7u7//////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////9LS + //8VFf//AAD//wAA//8AAP//CAj//6ys////////8fH//56e//9CQv//AgL//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//+0tP////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////4iI//8AAP//AAD//wAA//8AAP//AAD//11d + ///p6f////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////Nzf//FRX//wAA//8AAP//AAD//wAA//8AAP//AwP//4aG + //8JCf//AAD//wAA//8AAP//AAD//wAA//8REf//Zmb//8HB///29v//5+f//9PT//+7u///qan//5aW + //9/f///bGz//1hY//9ERP//Li7//xwc//8HB///AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//3Fx////////////////////////7+///0xM///ExP////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //+iov//AQH//wAA//8AAP//Cgr//wAA//8AAP//AAD//xMT//+fn////f3///////////////////// + ////////////////////////////////////////////////////////////////////////rKz//z8/ + //8/P///Pz///z8///8/P///Pz///z8///8/P///Pz///z8///8/P///Pz///z8///8/P///Pz///z8/ + //95ef//////////////////////////////////////////////////////////////////yMj//w8P + //8AAP//AAD//woK//+lpf//KSn//wAA//8AAP//AAD//wAA//8AAP//AAD//wgI//9VVf//sLD///j4 + //////////////////////////////////////////////////////////////////////////////// + ///y8v//3d3//8nJ//+1tf//oqL//4uL//94eP//TEz//wAA//8AAP//MDD//////////////////+rq + //8wMP//AAD//wYG//+goP////////////////////////////////////////////////////////// + ////////////////////////////////////////u7v//wYG//8AAP//AAD//1BQ///w8P//cHD//wMD + //8AAP//AAD//wAA//9AQP//2dn///////////////////////////////////////////////////// + //////////////////////////////////+Rkf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//z4+//////////////////////////////// + /////////////////////////////8HB//8PD///AAD//wAA//8ODv//vr7////////s7P//OTn//wAA + //8AAP//AAD//wAA//8aGv//8fH///////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///o6P//AAD//wAA//8CAv//7u7////////k5P//Kir//wAA//8AAP//AAD//wAA//93d////Pz///// + /////////////////////////////////////////////////////////////////////////////8/P + //8PD///AAD//wAA//85Of//9fX/////////////y8v//zAw//8AAP//AAD//wAA//8HB///gYH///j4 + /////////////////////////////////////////////////////////////////////////////5GR + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//MDD///////////////////////////////////////////////////////++vv//Cgr//wAA + //8AAP//Dw///8jI///////////////////19f//TEz//wAA//8AAP//AAD//xYW///y8v////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////8qKv//AAD//wAA//+wsP//3d3//yQk + //8AAP//AAD//wAA//8AAP//AAD//wAA//9OTv//8vL///////////////////////////////////// + ///////////////////////////////////h4f//Ghr//wAA//8AAP//JSX//+rq//////////////// + ////////+/v//4qK//8KCv//AAD//wAA//8AAP//KSn//8HB//////////////////////////////// + ////////////////////////////////////////gID//wAA//8AAP//X1///7+///+/v///v7///7+/ + //+/v///v7///7+///+/v///v7///7+///+fn///AAD//wAA//8jI/////////////////////////// + ////////////////////////tbX//woK//8AAP//AAD//xUV///Nzf////////////////////////// + ///8/P//YmL//wAA//8AAP//AAD//zMz///o6P////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////2xs//8AAP//AAD//01N//8dHf//AAD//wAA//8GBv//qan//1FR//8AAP//AAD//wAA + //8tLf//4OD/////////////////////////////////////////////////////////////7e3//ykp + //8AAP//AAD//xYW///d3f///////////////////////////////////////93d//9HR///AAD//wAA + //8AAP//AQH//2Vl///t7f////////////////////////////////////////////////////////// + //9/f///AAD//wAA//9/f////////////////////////////////////////////////////////+Hh + //8AAP//AAD//xQU/////////////////////////////////////////////7Oz//8GBv//AAD//wAA + //8WFv//0tL////////////////////////////////////////d3f//AAD//wAA//8AAP//AAD//yMj + ///b2/////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////rKz//wAA//8AAP//AAD//wAA + //8AAP//Cgr//7q6/////////f3//3t7//8BAf//AAD//wAA//8WFv//xMT///////////////////// + //////////////////////////////b2//88PP//AAD//wAA//8KCv//y8v///////////////////// + //////////////////////////////////+lpf//FRX//wAA//8AAP//AAD//xcX//+mpv////////// + /////////////////////////////////////////////39///8AAP//AAD//39///////////////// + ////////////////////////////////////////8PD//wAA//8AAP//BQX///////////////////// + //////////////////+kpP//Bgb//wAA//8AAP//HR3//9zc//////////////////////////////// + /////////////9HR//8AAP//AAD//wAA//8AAP//AAD//xUV///Kyv////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////r6///AQH//wAA//8AAP//AAD//w8P///Dw////////////////////////6Sk + //8ICP//AAD//wAA//8GBv//oKD////////////////////////////////////////8/P//U1P//wAA + //8AAP//AwP//7a2//////////////////////////////////////////////////////////////// + ///s7P//YmL//wAA//8AAP//AAD//wQE///R0f////////////////////////////////////////// + ////////f3///wAA//8AAP//kJD///////////////////////////////////////////////////// + ///8/P//AAD//wAA//8AAP//9fX/////////////////////////////pKT//wMD//8AAP//AAD//yQk + ///c3P//////////////////////////////////////////////////0dH//wAA//8AAP//FBT//wYG + //8AAP//AAD//woK//+2tv//////////////////////////////////////////////////9/f//9DQ + //+lpf//eXn//05O///Dw////////////////////////////////////////76+//8EBP//AAD//wAA + //8VFf//ycn//////////////////////////////////8fH//8YGP//AAD//wAA//8AAP//d3f///z8 + /////////////////////////////25u//8AAP//AAD//wAA//+amv////////////////////////// + //////////////////////////////////////////////////+Pj///AAD//wAA//8AAP//jo7///// + //////////////////////////////////////////////////9/f///AAD//wAA//+Rkf////////// + //////////////////////////////////////////////////8NDf//AAD//wAA///o6P////////// + /////////////5aW//8CAv//AAD//wAA//8kJP//5OT///////////////////////////////////// + ///////////////////R0f//AAD//wAA//8/P///wMD//w8P//8AAP//AAD//wQE//+dnf////////// + ///6+v//09P//6io//9+fv//U1P//ycn//8DA///AAD//wAA//8AAP//AAD//3l5//////////////// + //////////////////+0tP//Cgr//wAA//8AAP//AAD//2dn//////////////////////////////// + /////////////+Li//8xMf//AAD//wAA//8AAP//Tk7///Ly//////////////////+MjP//AAD//wAA + //8AAP//f3////////////////////////////////////////////////////////////////////// + ////////wsL//wUF//8AAP//AAD//1ZW///9/f////////////////////////////////////////// + /////////////3p6//8AAP//AAD//5GR//////////////////////////////////////////////// + /////////////xsb//8AAP//AAD//9vb//////////////////+Vlf//AQH//wAA//8AAP//LS3//+jo + /////////////////////////////////////////////////////////////8bG//8AAP//AAD//z8/ + ////////z8///xkZ//8AAP//AAD//wEB//+EhP//f3///wUF//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//OTn/////////////////////////////qqr//wYG//8AAP//AAD//wAA + //8AAP//KSn///////////////////////////////////////////////////T0//9TU///AAD//wAA + //8AAP//LS3//+Dg////////pqb//wEB//8AAP//AAD//2Fh///9/f////////////////////////// + /////////////////////////////////////////////+bm//8YGP//AAD//wAA//8rK///8/P///// + ////////////////////////////////////////////////////////cHD//wAA//8AAP//kZH///// + ////////////////////////////////////////////////////////KCj//wAA//8AAP//zMz///// + ////////iYn//wAA//8AAP//AAD//zEx///q6v////////////////////////////////////////// + ////////////////////////v7///wAA//8AAP//Pz/////////5+f//Z2f//wAA//8AAP//AAD//wAA + //8cHP//AAD//wAA//8AAP//AAD//wAA//8AAP//AQH//yIi//9MTP//AAD//wAA//8DA///8PD///// + /////////////5+f//8DA///AAD//wAA//8iIv//AgL//wAA//8AAP//6Oj///////////////////// + //////////////////////////////39//9+fv//AQH//wAA//8AAP//Fhb//4yM//8GBv//AAD//wAA + //9ISP//+vr///////////////////////////////////////////////////////////////////// + ///6+v//PDz//wAA//8AAP//Dg7//9jY//////////////////////////////////////////////// + //////////////////9wcP//AAD//wAA//+Rkf////////////////////////////////////////// + //////////////////81Nf//AAD//wAA//+9vf///////4WF//8AAP//AAD//wAA//83N///7+////// + //////////////////////////////////////////////////////////////////+/v///AAD//wAA + //9LS///xsb//ysr//8AAP//AAD//wAA//8EBP//eXn//5qa//8AAP//AAD//xwc//9ycv//oaH//8vL + ///z8/////////////8pKf//AAD//wAA//+zs///////////////////pKT//wMD//8AAP//AAD//yQk + //8ZGf//AAD//wAA//+lpf////////////////////////////////////////////////////////// + //+np///CQn//wAA//8AAP//AAD//wAA//8AAP//MjL///Ly//////////////////////////////// + /////////////////////////////////////////////29v//8AAP//AAD//wEB//+vr/////////// + /////////////////////////////////////////////////////////////3Bw//8AAP//AAD//5eX + /////////////////////////////////////////////////////////////0FB//8AAP//AAD//7Cw + //95ef//AAD//wAA//8AAP//Q0P//+/v//////////////////////////////////////////////// + /////////////////////////////7+///8AAP//AAD//xAQ//8CAv//AAD//wAA//8AAP//NDT//8/P + ////////urr//wAA//8AAP//OTn//////////////////////////////////2xs//8AAP//AAD//3Bw + ////////////////////////pKT//wYG//8AAP//AAD//wAA//8AAP//AAD//2Rk//////////////// + ///////////////////////////////////////////////////Jyf//GRn//wAA//8AAP//AAD//yAg + ///n5/////////////////////////////////////////////////////////////////////////// + //+mpv//AAD//wAA//8AAP//eXn///////////////////////////////////////////////////// + ////////////////////////cHD//wAA//8AAP//oaH///////////////////////////////////// + ////////////////////////UVH//wAA//8AAP//Ly///wAA//8AAP//AAD//0RE///19f////////// + ////////////////////////////////////////////////////////////////////////sbH//wAA + //8AAP//AAD//wAA//8AAP//Cgr//42N///8/P/////////////Z2f//AAD//wAA//8fH/////////// + ////////////////////////iIj//wAA//8AAP//Ly//////////////////////////////s7P//wYG + //8AAP//AAD//wAA//8AAP//JCT///////////////////////////////////////////////////// + ///////////////////k5P//MjL//wAA//8TE///19f///////////////////////////////////// + ////////////////////////////////////////0tL//wsL//8AAP//AAD//0VF///8/P////////// + //////////////////////////////////////////////////////////////////9wcP//AAD//wAA + //+hof////////////////////////////////////////////////////////////9iYv//AAD//wAA + //8AAP//AAD//wAA//9PT///+fn///////////////////////////////////////////////////// + /////////////////////////////+bm//9LS///AAD//wAA//8AAP//AAD//0VF///e3v////////// + //////////////T0//8AAP//AAD//wQE///8/P///////////////////f3//4CA//8CAv//AAD//wAA + //8ICP//9vb/////////////////////////////s7P//wYG//8AAP//AAD//wAA//8AAP//5OT///// + ///////////////////////////////////////////////////////////////////19f//XV3//8TE + /////////////////////////////////////////////////////////////////////////////+/v + //8lJf//AAD//wAA//8gIP//6+v///////////////////////////////////////////////////// + /////////////////////////////2dn//8AAP//AAD//6Gh//////////////////////////////// + /////////////////////////////25u//8AAP//AAD//wAA//8AAP//Vlb///n5//////////////// + //////////////////////////////////////////////////////////////39//+Zmf//EBD//wAA + //8AAP//AAD//xIS//+hof///f3//////////////////////////////////xER//8AAP//AAD//6+v + ///m5v///////+/v//9OTv//AAD//wAA//8AAP//HBz//8jI//////////////////////////////// + ////////urr//woK//8AAP//AAD//wAA//+fn/////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////9/f//UFD//wAA//8AAP//Bwf//8rK//////////////// + ////////////////////////////////////////////////////////////////////////YmL//wAA + //8AAP//oaH/////////////////////////////////////////////////////////////enr//wAA + //8AAP//AAD//1tb///8/P////////////////////////////////////////////////////////// + ///////////////////Y2P//Pj7//wAA//8AAP//AAD//wAA//8AAP//YmL///////////////////// + ////////////////////////LCz//wAA//8AAP//AAD//wAA//8PD///FRX//wAA//8AAP//AAD//zw8 + ///n5///////////////////////////////////////////////////vr7//woK//8AAP//AAD//xUV + ///S0v////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////4aG + //8AAP//AAD//wAA//+cnP////////////////////////////////////////////////////////// + //////////////////////////////////9iYv//AAD//wAA//+hof////////////////////////// + //////////////////////////////////+Jif//AAD//wAA//9paf///Pz///////////////////// + ///////////////////////////////////////////////////5+f//goL//wcH//8AAP//AAD//wAA + //8EBP//AAD//wAA//9iYv////////////////////////////////////////////9ISP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//9tbf//+vr///////////////////////////////////// + ////////////////////////p6f//wAA//8AAP//AAD//xMT///IyP////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////+7u///AwP//wAA//8AAP//ZGT///////////////////// + /////////////////////////////////////////////////////////////////////////////2Ji + //8AAP//AAD//6ys/////////////////////////////////////////////////////////////5iY + //8AAP//bm7///39//////////////////////////////////////////////////////////////// + ////////xsb//ysr//8AAP//AAD//wAA//8CAv//bW3//5WV//8AAP//AAD//2lp//////////////// + /////////////////////////////729//91df//UlL//y0t//8HB///AAD//wAA//8ICP//oKD///// + //////////////////////////////////////////////////////////////z8//+UlP//AAD//wAA + //8AAP//AAD//w8P///IyP////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////4eH//xMT + //8AAP//AAD//zU1///4+P////////////////////////////////////////////////////////// + ////////////////////////////////////////YmL//wAA//8AAP//sLD///////////////////// + ////////////////////////////////////////paX//3l5//////////////////////////////// + ////////////////////////////////////////8fH//2tr//8CAv//AAD//wAA//8AAP//Kyv//8bG + ////////oaH//wAA//8AAP//cHD///////////////////////////////////////////////////// + //////////////z8///h4f//vLz//9LS//////////////////////////////////////////////// + //////////////////+1tf//LS3//wAA//8AAP//AAD//wAA//8AAP//AAD//w8P//++vv////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////f3//81Nf//AAD//wAA//8UFP//4eH///////////////////// + //////////////////////////////////////////////////////////////////////////////// + //9iYv//AAD//wAA//+wsP////////////////////////////////////////////////////////// + ///w8P///////////////////////////////////////////////////////////////////////7Gx + //8cHP//AAD//wAA//8AAP//BQX//4GB///4+P////////////+amv//AAD//wAA//9wcP////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////Nzf//QkL//wAA//8AAP//AAD//wAA + //8QEP//enr//xUV//8AAP//AAD//woK//++vv////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////ZGT//wAA + //8AAP//AwP//7y8//////////////////////////////////////////////////////////////// + /////////////////////////////////////////////1FR//8AAP//AAD//7Cw//////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////5+f//gID//wwM//8AAP//AAD//wAA//8AAP//UlL//9nZ + /////////////5GR//8AAP//AAD//3Bw//////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///f3///XFz//wEB//8AAP//AAD//wAA//8JCf//dXX//+3t////////0tL//xUV//8AAP//AAD//woK + //+2tv////////////////////////////////////////////////////////////////////////// + /////////////////////////////52d//8AAP//AAD//wAA//+Hh/////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////UVH//wAA//8AAP//sLD///////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////5+f//2lp//8EBP//AAD//wAA//8AAP//BAT//2pq///o6P//kZH//wAA//8AAP//fX3///// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////9vb//0dH//8AAP//AAD//wAA//8AAP//BQX//7u7 + ////////////////////////09P//x0d//8AAP//AAD//wYG//+zs/////////////////////////// + ///////////////////////////////////////////////////////////////////Ly///CAj//wAA + //8AAP//NDT///39//////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////9RUf//AAD//wAA//+ysv////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////9nZ//9SUv//AAD//wAA + //8AAP//AAD//w0N//85Of//AAD//wAA//9/f/////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////f3//6Wl//8aGv//AAD//wAA//8AAP//BQX//3V1///29v//////////////////29v//wkJ + //8AAP//AAD//wkJ///m5v////////////////////////////////////////////////////////// + /////////////////////////////9/f//8pKf//AAD//wAA//8AAP//cHD///z8//////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////1FR//8AAP//AAD//7+///////////////////////////////////////////////// + ////////0dH//wAA//8AAP//AAD//wAA//8AAP//Wlr//+np//////////////////////////////// + ///////////////////////////////////Fxf//Ozv//wAA//8AAP//AAD//wAA//8AAP//AAD//39/ + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////Ly//91df//BQX//wAA + //8AAP//CAj///X1//////////////////+Bgf//AAD//wAA//8AAP//j4////////////////////// + /////////////////////////////////////////////////////////////////////////////+/v + //9HR///AAD//wAA//8AAP//Skr//+/v//////////////////////////////////////////////// + ////////////////////////////////////////////////////////UVH//wAA//8AAP//v7////// + ///////////////////////////////////////////////////g4P//AAD//wAA//8AAP//AAD//wAA + //8AAP//EhL//56e///9/f////////////////////////////////////////////////////////// + ////////rq7//ycn//8AAP//AAD//wAA//8AAP//Jib//9/f//////////////////////////////// + ////////09P//9bW///n5///9fX///////////////////////////////////////////////////// + //////////////////////////////////+Ojv//AAD//wAA//9KSv//////////////////np7//wEB + //8AAP//AAD//25u//////////////////////////////////////////////////////////////// + //////////////////////////////////////////////z8//9qav//AAD//wAA//8AAP//KSn//93d + //////////////////////////////////////////////////////////////////////////////// + //////////////////9KSv//AAD//wAA//+/v/////////////////////////////////////////// + /////////////+Hh//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//z8////X1/////////// + ////////////////////////////////////////////////////////+/v//5eX//8YGP//AAD//wAA + //8AAP//ycn///////////////////////////////////////8vL///AAD//wAA//8AAP//Bwf//xkZ + //8pKf//OTn//4OD///u7v///////////////////////////////////////////////////////1NT + //8AAP//AAD//5KS/////////////7q6//8GBv//AAD//wAA//9RUf///Pz///////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////+UlP//AwP//wAA//8AAP//FBT//8LC//////////////////////////////// + /////////////////////////////////////////////////////////////z8///8AAP//AAD//7+/ + ////////////////////////////////////////////////////////7u7//wAA//8AAP//ERH///// + //+4uP//ICD//wAA//8AAP//AAD//wcH//+AgP//+Pj///////////////////////////////////// + /////////////////////////////35+//8AAP//AAD//wAA///R0f////////////////////////// + /////////////xsb//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wwM//9ycv//4uL///// + ///////////////////////////////////6+v//Dg7//wAA//8AAP//3Nz////////Q0P//Dw///wAA + //8AAP//Njb///X1//////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////+3t///Dw///wAA + //8AAP//Bgb//52d//////////////////////////////////////////////////////////////// + ////////////////////////Pz///wAA//8AAP//v7////////////////////////////////////// + ///////////////////w8P//AAD//wAA//8AAP/////////////09P//cnL//wMD//8AAP//AAD//wAA + //8oKP//wMD/////////////////////////////////////////////////////////////cHD//wAA + //8AAP//AAD//97e////////////////////////////////////////BAT//wAA//8AAP//CAj//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8GBv//YWH//+Li/////////////////////////////7+/ + //8AAP//AAD//yYm////////5OT//x0d//8AAP//AAD//yIi///p6f////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////U1P//IiL//wAA//8AAP//AAD//3Nz///8/P////////// + //////////////////////////////////////////////////////////////////8/P///AAD//wAA + ///Jyf////////////////////////////////////////////////////////z8//8AAP//AAD//wAA + ////////////////////////zMz//zEx//8AAP//AAD//wAA//8BAf//ZGT//+7u//////////////// + //////////////////////////////////9wcP//AAD//wAA//8AAP//4uL///////////////////// + /////////////+vr//8AAP//AAD//wwM////////+Pj//+np///b2///n5///ykp//8AAP//AAD//wAA + //8VFf//6+v/////////////////////////////dHT//wAA//8AAP//cHD//+/v//8vL///AAD//wAA + //8SEv//2dn///////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///p6f//Ozv//wAA//8AAP//AAD//0xM///x8f////////////////////////////////////////// + /////////////////////////////z8///8AAP//AAD//9HR//////////////////////////////// + /////////////////////////////wAA//8AAP//AAD///Dw////////////////////////+/v//4mJ + //8KCv//AAD//wAA//8AAP//srL//////////////////////////////////////////////////3Bw + //8AAP//AAD//wAA///w8P//////////////////////////////////2Nj//wAA//8AAP//JSX///// + ////////////////////////ysr//wEB//8AAP//AAD//6en//////////////////////////////// + //8qKv//AAD//wAA//+0tP//R0f//wAA//8AAP//Bwf//8PD//////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////4+P//XFz//wAA//8AAP//AAD//ysr + ///f3///////////////////////////////////////////////////////////////////Pz///wAA + //8AAP//0dH/////////////////////////////////////////////////////////////DQ3//wAA + //8AAP//8PD//////////////////////////////////9zc//8ODv//AAD//wAA///X1/////////// + ////////////////////////////////////////bGz//wAA//8AAP//AAD///Pz//////////////// + ///////////////////AwP//AAD//wAA//85Of////////////////////////j4//8sLP//AAD//wAA + //9NTf//////////////////////////////////4OD//wAA//8AAP//CQn//1lZ//8AAP//AAD//wEB + //+pqf////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////9/f//hob//wEB//8AAP//AAD//xQU///Cwv////////////////////////// + //////////////////////////////////80NP//AAD//wAA///R0f////////////////////////// + //////////////////////////////////8REf//AAD//wAA///j4/////////////////////////// + ////////+vr//wMD//8AAP//AQH///f3//////////////////////////////////////////////// + //9iYv//AAD//wAA//8AAP///////////////////////////////////////6qq//8AAP//AAD//ycn + //+env//wcH//+Xl////////e3v//wAA//8AAP//Dg7//+Hh//////////////////////////////// + //+Wlv//AAD//wAA//8DA///AAD//wAA//8AAP//ior///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////qqr//woK + //8AAP//AAD//wYG//+dnf///////////////////////////////////////////////////////zAw + //8AAP//AAD//9HR/////////////////////////////////////////////////////////////xwc + //8AAP//AAD//+Hh///////////////////////////////////d3f//AAD//wAA//8eHv////////// + /////////////////////////////////////////////2Ji//8AAP//AAD//wgI//////////////// + ////////////////////////lpb//wAA//8AAP//AAD//wAA//8AAP//AAD//wwM//8DA///AAD//wAA + //+Wlv///////////////////////////////////////0xM//8AAP//AAD//wAA//8AAP//AAD//2ho + //////////////////////////////////////////////////////////////////////////////// + //////////////////+6uv///Pz///////////////////////////////////////////////////// + ////////////////////////////////////////ysr//xkZ//8AAP//AAD//wAA//9zc////Pz///// + ////////////////////////////////////////MDD//wAA//8AAP//0dH///////////////////// + ////////////////////////////////////////IiL//wAA//8AAP//09P///////////////////// + /////////f3//3l5//8AAP//AAD//z4+//////////////////////////////////////////////// + ////////YmL//wAA//8AAP//ERH///////////////////////////////////////98fP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//PDz///z8//////////////////////////////// + ///29v//Cgr//wAA//8AAP//AAD//wAA//9MTP///Pz///////////////////////////////////// + ////////////////////////////////////////////////////////19f//wcH//9bW////Pz///// + //////////////////////////////////////////////////////////////////////////////// + ////////4+P//zEx//8AAP//AAD//wAA//9MTP//8fH///////////////////////////////////// + //8wMP//AAD//wAA///h4f////////////////////////////////////////////////////////// + //8qKv//AAD//wAA///R0f////////////////////////X1//9ZWf//AAD//wAA//8AAP//Y2P///// + //////////////////////////////////////////////////9XV///AAD//wAA//8eHv////////// + /////////////////////////////+np//+6uv//mZn//3R0//9SUv//MDD//w0N//8AAP//AAD//wgI + ///Y2P///////////////////////////////////////7e3//8AAP//AAD//wAA//8AAP//MjL///Pz + //////////////////////////////////////////////////////////////////////////////// + //////////////z8//84OP//AAD//wAA//9QUP//+fn///////////////////////////////////// + ////////////////////////////////////////////////////////8/P//09P//8AAP//AAD//wAA + //8rK///39///////////////////////////////////zAw//8AAP//AAD//+Hh//////////////// + /////////////////////////////////////////////zAw//8AAP//AAD//8LC//////////////// + ///k5P//NDT//wAA//8AAP//AAD//zg4///m5v////////////////////////////////////////// + /////////////1FR//8AAP//AAD//yIi//////////////////////////////////////////////// + /////////////////////////////+jo///ExP//w8P///////////////////////////////////// + ////////bW3//wAA//8AAP//AAD//yAg///m5v////////////////////////////////////////// + ////////////////////////////////////////////////////////j4///wAA//8AAP//AAD//wAA + //9NTf//9fX///////////////////////////////////////////////////////////////////// + ////////////////////////+fn//yQk//8AAP//AAD//wAA//+Fhf////////////////////////// + ////////Ly///wAA//8AAP//4eH///////////////////////////////////////////////////// + ////////ODj//wAA//8AAP//v7//////////////yMj//xkZ//8AAP//AAD//wAA//9fX///+Pj///// + ////////////////////////////////////////////////////////UVH//wAA//8AAP//MDD///// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////+/v//8dHf//AAD//wAA//8PD///1dX///// + //////////////////////////////////////////////////////////////////////////////// + /////////////9vb//8KCv//AAD//wAA//8AAP//AAD//wAA//9DQ///9fX///////////////////// + //////////////////////////////////////////////////////////////z8//9bW///AAD//wAA + //8AAP//cHD///////////////////////////////////////8iIv//AAD//wAA///h4f////////// + //////////////////////////////////////////////////8/P///AAD//wAA//+0tP///////6Sk + //8ICP//AAD//wAA//8DA///jo7///////////////////////////////////////////////////// + //////////////////9RUf//AAD//wAA//80NP////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///5+f//R0f//wAA//8AAP//AAD//5yc//////////////////////////////////////////////// + ///////////////////////////////////////////////////9/f//QUH//wAA//8AAP//JSX//3p6 + //8AAP//AAD//wAA//87O///7+////////////////////////////////////////////////////// + ///////////////////9/f//YmL//wAA//8AAP//AAD//2lp///9/f////////////////////////// + /////////////yIi//8AAP//AAD//+Hh//////////////////////////////////////////////// + /////////////0dH//8AAP//AAD//yMj//8UFP//AAD//wAA//8AAP//ERH//7m5//////////////// + /////////////////////////////////////////////////////////////0BA//8AAP//AAD//z8/ + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////+fn//09P//8AAP//AAD//wAA//8AAP//DAz//6Cg + //////////////////////////////////////////////////////////////////////////////// + /////////////5WV//8AAP//AAD//wIC///Cwv///////4mJ//8AAP//AAD//wAA//83N///7e3///// + /////////////////////////////////////////////////////////f3//2lp//8AAP//AAD//wAA + //9eXv///f3/////////////////////////////////////////////IiL//wAA//8AAP//5+f///// + ////////////////////////////////////////////////////////UVH//wAA//8AAP//AAD//wAA + //8AAP//AAD//ygo///a2v////////////////////////////////////////////////////////// + ////////////////////////Pz///wAA//8AAP//SEj///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////n5 + //9PT///AAD//wAA//8AAP//BAT//wAA//8AAP//AAD//1pa///x8f////////////////////////// + ///////////////////////////////////////////////////h4f//Dg7//wAA//8AAP//b2////// + /////////////42N//8BAf//AAD//wAA//8tLf//6ur///////////////////////////////////// + //////////////////9zc///AAD//wAA//8AAP//W1v///z8//////////////////////////////// + //////////////////8iIv//AAD//wAA///w8P////////////////////////////////////////// + //////////////////9XV///AAD//wAA//8AAP//AAD//wYG//9SUv//7+////////////////////// + //////////////////////////////////////////////////////////////////8/P///AAD//wAA + //9RUf////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////5+f//T0///wAA//8AAP//AAD//4mJ///MzP//Jib//wAA + //8AAP//AAD//yMj///Ly/////////////////////////////////////////////////////////// + /////////////0ZG//8AAP//AAD//yEh///z8////////////////////////5aW//8BAf//AAD//wAA + //8rK///5OT/////////////////////////////////////////////eXn//wAA//8AAP//AAD//09P + ///8/P///////////////////////////////////////////////////////yIi//8AAP//AAD///Dw + /////////////////////////////////////////////////////////////5qa//93d///nJz//7y8 + ///h4f///Pz///////////////////////////////////////////////////////////////////// + /////////////////////////////zg4//8AAP//AAD//wUF//8jI///OTn//1VV//9sbP//h4f//6Gh + //+4uP//0tL//+rq////////////////////////////////////////////////////////+fn//09P + //8AAP//AAD//wAA//+Jif/////////////z8///YmL//wAA//8AAP//AAD//wUF//+Kiv///f3///// + //////////////////////////////////////////////////+goP//AAD//wAA//8BAf//vr7///// + /////////////////////////////5mZ//8DA///AAD//wAA//8kJP//5OT///////////////////// + /////////////4SE//8AAP//AAD//wAA//9PT///+fn///////////////////////////////////// + ////////////////////////Gxv//wAA//8AAP//8PD///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////19f//35+//8jI///AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wYG//8gIP//Nzf//1FR + //9qav//g4P//52d//+1tf//zs7//+bm//9PT///AAD//wAA//8BAf//jY3///////////////////// + ////////p6f//w8P//8AAP//AAD//wAA//9HR///5+f///////////////////////////////////// + ////////5eX//xAQ//8AAP//AAD//2ho/////////////////////////////////////////////6Sk + //8DA///AAD//wAA//8eHv//3Nz///////////////////////+Jif//AAD//wAA//8AAP//Q0P///b2 + //////////////////////////////////////////////////////////////////8REf//AAD//wAA + ///w8P////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///m5v//jY3//zMz//8AAP//AAD//wAA//8AAP//AAD//wAA//8CAv//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AQH//5aW////////////////////////////////////////39///zo6//8AAP//AAD//wAA + //8WFv//uLj///////////////////////////////////////9RUf//AAD//wAA//8eHv//8fH///// + /////////////////////////////////////////////6am//8GBv//AAD//wAA//8dHf//1dX///// + ////////k5P//wAA//8AAP//AAD//0FB///19f////////////////////////////////////////// + /////////////////////////////xER//8AAP//AAD///Dw//////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////+/v//+cnP//Q0P//wIC//8AAP//AAD//wAA//8AAP//AAD//wwM + //9aWv//tLT///r6///v7///2Nj//7u7//+lpf//iYn//3Bw//9YWP//Ozv//yUl//8JCf//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wEB//+Wlv////////////////////////// + ////////////////////////+/v//3t7//8DA///AAD//wAA//8BAf//c3P///n5//////////////// + ////////p6f//wAA//8AAP//AQH//7q6//////////////////////////////////////////////// + /////////////7Oz//8GBv//AAD//wAA//8VFf//0tL//5aW//8BAf//AAD//wAA//83N///7+////// + ////////////////////////////////////////////////////////////////////////ERH//wAA + //8AAP///Pz///////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////9/f//6ys//9SUv//Bwf//wAA + //8AAP//AAD//wAA//8AAP//BQX//0xM//+mpv//8/P///////////////////////////////////// + ///////////////////////////////////v7///2Nj//7u7//+lpf//iYn//3Bw//9YWP//Ozv//yUl + //8LC///lpb//////////////////////////////////////////////////////////////////8DA + //8cHP//AAD//wAA//8AAP//NDT//9vb/////////////+rq//8VFf//AAD//wAA//9hYf////////// + /////////////////////////////////////////////////////////////7S0//8KCv//AAD//wAA + //8PD///AQH//wAA//8AAP//MzP//+/v//////////////////////////////////////////////// + //////////////////////////////////8REf//AAD//wAA//////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///8/P//u7v//2Fh//8PD///AAD//wAA//8AAP//AAD//wAA//8BAf//PT3//5eX///r6/////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////+3t//9RUf//AAD//wAA//8AAP//DQ3//6Oj + ////////WVn//wAA//8AAP//Gxv//+/v//////////////////////////////////////////////// + /////////////////////////////76+//8KCv//AAD//wAA//8AAP//AAD//y0t///q6v////////// + /////////////////////////////////////////////////////////////////////////////xER + //8AAP//AAD/////////////9vb///Dw///w8P//8PD///Dw///n5///4eH//+Hh///h4f//4eH//9XV + ///R0f//0dH//9HR///R0f//wsL//7+///+4uP//cXH//xoa//8AAP//AAD//wAA//8AAP//AAD//wAA + //8uLv//iIj//+Li//////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////+Xl///CQn//wAA//8AAP//AAD//0JC//8AAP//AAD//wAA//+0tP////////// + /////////////////////////////////////////////////////////////////////////////76+ + //8PD///AAD//wAA//8nJ///6ur///////////////////////////////////////////////////// + ////////////////////////////////////////AwP//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//yAg//96ev//09P///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////U1P//LS3//wAA + //8AAP//AAD//wAA//8AAP//XFz///////////////////////////////////////////////////// + /////////////////////////////////////////////8jI//8PD///JCT//+Tk//////////////// + //////////////////////////////////////////////////////////////////////////////// + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//Fhb//2tr///Fxf///f3///// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////39///a2v//wEB//8AAP//AAD//xgY///s7P////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////8nJ///j4/////////////////////////////////////////////////////////// + /////////////////////////////////////////////wAA//8AAP//AgL//xER//8REf//ERH//xER + //8REf//Fhb//yIi//8iIv//IiL//yIi//8iIv//KSn//zAw//8wMP//MDD//zAw//8wMP//Ojr//z8/ + //8/P///Xl7//7e3///6+v////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////srL//xQU//8AAP//ra3///////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////5OT//4eH//////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAQAAAAIAAAEAIAAAAAAAACAEAAAA + AAAAAAAAAAAAAAAAAAD///////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////39/f/8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f///////////////////////////////////////f39//wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39///////////////////////////////////// + ////////////////////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3////////////////////////// + /////////////39/f/8AAAD/AAAA/wAAAP9/f3////////////////////////////////////////// + //////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f/////////////// + /////////////////////////////////////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3////////////////////////// + /////////////////////////////////////////////////////////////////////////////39/ + f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////9/f3//AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3///////////////////////////////////////39/ + f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f/////////////////////////////// + /////////////////////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39///////////////////// + //////////////////9/f3//AAAA/wAAAP8AAAD/f39///////////////////////////////////// + ////////////////////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3////////// + //////////////////////////////////////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39///////////////////// + //////////////////////////////////////////////////////////////////////////////// + //9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f/////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////f39//wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39///////////////////////////////////// + //9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3////////////////////////// + //////////////////////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f/////////////// + ////////////////////////f39//wAAAP8AAAD/AAAA/39/f/////////////////////////////// + /////////////////////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39///// + ////////////////////////////////////////////////////////f39//wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f/////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////39/ + f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f/////////////////////////////// + ////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39///////////////////// + ////////////////////////////////////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3////////// + /////////////////////////////39/f/8AAAD/AAAA/wAAAP9/f3////////////////////////// + //////////////////////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/ + f////////////////////////////////////////////////////////////39/f/8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39///////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f/////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39///////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3////////// + //////////////////////////////////////////////////9/f3//AAAA/wAAAP8AAAD/f39///// + //////////////////////////////////9/f3//AAAA/wAAAP8AAAD/f39///////////////////// + ////////////////////////////////////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP9/f3///////////////////////////////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/f39/////////////////////////////////////////////////////////////f39//wAA + AP8AAAD/AAAA/39/f/////////////////////////////////////////////////////////////// + //////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f/////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f/////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39///// + ////////////////////////////////////////////////////////f39//wAAAP8AAAD/AAAA/39/ + f///////////////////////////////////////f39//wAAAP8AAAD/AAAA/39/f/////////////// + /////////////////////////////////////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/f39///////////////////////////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/39/f////////////////////////////////////////////////////////////39/ + f/8AAAD/AAAA/wAAAP9/f3////////////////////////////////////////////////////////// + ////////////////////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39///////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/ + f////////////////////////////////////////////////////////////39/f/8AAAD/AAAA/wAA + AP9/f3///////////////////////////////////////39/f/8AAAD/AAAA/wAAAP9/f3////////// + //////////////////////////////////////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/39/f///////////////////////////////////////f39//wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP9/f3////////////////////////////////////////////////////////// + //9/f3//AAAA/wAAAP8AAAD/f39///////////////////////////////////////////////////// + /////////////////////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39///// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f/////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39///// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP9/f3////////////////////////////////////////////////////////////9/f3//AAAA/wAA + AP8AAAD/f39///////////////////////////////////////9/f3//AAAA/wAAAP8AAAD/f39///// + ////////////////////////////////////////////////////////f39//wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP9/f3///////////////////////////////////////39/f/8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/f39///////////////////////////////////////////////////// + ////////f39//wAAAP8AAAD/AAAA/39/f/////////////////////////////////////////////// + //////////////////////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/ + f/////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/ + f/////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/f39/////////////////////////////////////////////////////////////f39//wAA + AP8AAAD/AAAA/39/f///////////////////////////////////////f39//wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/f39///////////////////////////////////////9/f3//AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f/////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP9/f3////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39///// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP9/f3////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/39/f////////////////////////////////////////////////////////////39/ + f/8AAAD/AAAA/wAAAP9/f3///////////////////////////////////////39/f/8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f///////////////////////////////////////f39//wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/f39///////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/ + f/////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/f39///////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////f39//wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP9/f3////////////////////////////////////////////////////////// + //9/f3//AAAA/wAAAP8AAAD/f39///////////////////////////////////////9/f3//AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3///////////////////////////////////////39/ + f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/39/f/////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP9/f3////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/39/f/////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////39/f/8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/f39///////////////////////////////////////////////////// + ////////f39//wAAAP8AAAD/AAAA/39/f///////////////////////////////////////f39//wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39///////////////////////////////////// + //9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f/////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////f39//wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP9/f3////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/f39///////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////f39//wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f/////////////// + //////////////////////////////////////////////////////////////////9/f3//AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f///////////////////////////////////////f39//wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3///////////////////////////////////////39/ + f/8AAAD/AAAA/wAAAP9/f3////////////////////////////////////////////////////////// + //9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f/////////////////////////////// + ////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////39/f/8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/f39///////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/39/f/////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////39/f/8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3////////// + ////////////////////////////////////////////////////////////////////////f39//wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3///////////////////////////////////////39/ + f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39///////////////////////////////////// + //9/f3//AAAA/wAAAP8AAAD/f39///////////////////////////////////////////////////// + ////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3////////////////////////// + /////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39///////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////9/f3//AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f/////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////f39//wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP9/f3////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////9/f3//AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39///// + /////////////////////////////////////////////////////////////////////////////39/ + f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39///////////////////////////////////// + //9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f/////////////////////////////// + ////////f39//wAAAP8AAAD/AAAA/39/f/////////////////////////////////////////////// + /////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39///////////////////// + //////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f/////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////f39//wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////39/f/8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/f39///////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////f39//wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/ + f/////////////////////////////////////////////////////////////////////////////// + //9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f/////////////////////////////// + ////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3////////////////////////// + /////////////39/f/8AAAD/AAAA/wAAAP9/f3////////////////////////////////////////// + //////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f/////////////// + ////////////////////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////39/ + f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////9/f3//AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f/////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////39/ + f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////9/f3//AAAA/wAAAP8AAAD/f39///////////////////////////////////// + ////////////////////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3////////// + /////////////////////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39///// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////39/f/8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/f39//////////////////39/f/8AAAD/AAAA/wAAAP9/f3////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////f39//wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f/////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39///////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////f39//wAAAP8AAAD/AAAA/39/f/////////////////////////////// + /////////////////////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39///// + //////////////////////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/ + f/////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////9/f3//AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f/////////////////9/f3//AAAA/wAAAP8AAAD/f39///// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////39/ + f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f/////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////39/f/8AAAD/AAAA/wAAAP9/f3////////////////////////// + //////////////////////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/ + f///////////////////////////////////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP9/f3////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////f39//wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3//////////////////f39//wAAAP8AAAD/AAAA/39/ + f/////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f/////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39///////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////9/f3//AAAA/wAAAP8AAAD/f39///////////////////// + ////////////////////////////////////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP9/f3///////////////////////////////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/f39///////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////39/ + f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39//////////////////39/f/8AAAD/AAAA/wAA + AP9/f3////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f/////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39///// + ////////////////////////////////////////////////////////f39//wAAAP8AAAD/AAAA/39/ + f///////////////////////////////////////f39//wAAAP8AAAD/AAAA/39/f/////////////// + /////////////////////////////////////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/f39///////////////////////////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/39/f////////////////////////////////////////////////////////////39/ + f/8AAAD/AAAA/wAAAP9/f3///////////////////////////////////////39/f/8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/f39///////////////////////////////////////////////////// + ////////f39//wAAAP8AAAD/AAAA/39/f/////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39///////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/ + f////////////////////////////////////////////////////////////39/f/8AAAD/AAAA/wAA + AP9/f3///////////////////////////////////////39/f/8AAAD/AAAA/wAAAP9/f3////////// + //////////////////////////////////////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/39/f///////////////////////////////////////f39//wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP9/f3////////////////////////////////////////////////////////// + //9/f3//AAAA/wAAAP8AAAD/f39///////////////////////////////////////9/f3//AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f/////////////////////////////////////////////// + /////////////39/f/8AAAD/AAAA/wAAAP9/f3////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f/////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39///// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP9/f3////////////////////////////////////////////////////////////9/f3//AAAA/wAA + AP8AAAD/f39///////////////////////////////////////9/f3//AAAA/wAAAP8AAAD/f39///// + ////////////////////////////////////////////////////////f39//wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP9/f3///////////////////////////////////////39/f/8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/f39///////////////////////////////////////////////////// + ////////f39//wAAAP8AAAD/AAAA/39/f///////////////////////////////////////f39//wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3////////////////////////////////////////// + //////////////////9/f3//AAAA/wAAAP8AAAD/f39///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/ + f/////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/f39/////////////////////////////////////////////////////////////f39//wAA + AP8AAAD/AAAA/39/f///////////////////////////////////////f39//wAAAP8AAAD/AAAA/39/ + f////////////////////////////////////////////////////////////39/f/8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/f39///////////////////////////////////////9/f3//AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f/////////////////////////////////////////////// + /////////////39/f/8AAAD/AAAA/wAAAP9/f3///////////////////////////////////////39/ + f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39///////////////////////////////////// + ////////////////////////f39//wAAAP8AAAD/AAAA/39/f/////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39///// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/f39/////////////////////////////////////////////////////////////f39//wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/ + f/////////////////////////////////////////////////////////////////////////////// + //9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/f39///////////////////////////////////////////////////////////////////// + /////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP9/f3////////////////////////////////////////////////////////// + //9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f/////////////////////////////// + /////////////////////////////39/f/8AAAD/AAAA/wAAAP9/f3////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/ + f/////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/39/f////////////////////////////////////////////////////////////39/ + f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP9/f3////////////////////////////////////////////////////////////////////////// + ////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/39/f/////////////////////////////////////////////////////////////// + //////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/f39///////////////////////////////////////////////////// + ////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3////////////////////////// + //////////////////////////////////9/f3//AAAA/wAAAP8AAAD/f39///////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP9/f3////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP9/f3////////////////////////////////////////////////////////// + //9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/f39///////////////////////////////////////////////////////////////////// + /////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP9/f3////////////////////////////////////////////////////////// + ////////////////////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f/////////////////////////////////////////////// + /////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39///////////////////// + ////////////////////////////////////////f39//wAAAP8AAAD/AAAA/39/f/////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/f39///////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////f39//wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/f39///////////////////////////////////////////////////// + ////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/39/f/////////////////////////////////////////////////////////////// + //////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/f39///////////////////////////////////////////////////// + /////////////////////////////39/f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3////////////////////////////////////////// + //////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f/////////////// + /////////////////////////////////////////////39/f/8AAAD/AAAA/wAAAP9/f3////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////9/f3//AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/39/f/////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////f39//wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP9/f3////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////39/f/8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/f39///////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////9/f3//AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f/////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////f39//wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////39/ + f/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/f39///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //9/f3//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/39/f/////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////f39//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9/f3////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////90dP//dHT///////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////6+v//v7///11d//8NDf//Ghr//ycn//9ERP//U1P//2Fh//96ev//iIj//6Oj + //+3t///xMT//+Hh///r6/////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////6en//z8///+hof////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////90dP//AAD//wAA//9VVf//+vr///// + //////////////////////////////////////////////////////////////////////////////// + /////////////9LS//9xcf//Ghr//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8aGv//Jyf//0RE//9TU///YWH//3p6//+IiP//o6P//7y8 + ///Hx///4eH///Dw//////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////8/P//zg4//8AAP//AAD//0FB + ///c3P////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////90dP//AAD//wAA//8AAP//AAD//0FB + ///z8/////////////////////////////////////////////////////////////////////////// + ///k5P//hIT//ysr//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//x4e//8sLP//RET//1ZW//9hYf//f3///4yM//+jo///vLz//8fH + ///h4f//8PD///////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////+vr//0xM//8AAP//AAD//wAA + //8AAP//CAj//4aG///6+v////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////r6//9ra///AAD//wAA//8AAP//AAD//wAA + //8AAP//Li7//+np////////////////////////////////////////////////////////8PD//56e + //9DQ///AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//Hh7//yws//9ERP//Wlr//2Rk//9/f///kZH//+Xl//////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////2dn//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//Kir//8jI//////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////r6//9VVf//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8iIv//2dn///////////////////////////////////r6//+ysv//VVX//wgI + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//+Hh/////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////4OD//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//amr///Dw//////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////r6//9VVf//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//xUV///Cwv//////////////////x8f//2lp//8VFf//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//S0v///// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////52d//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8aGv//qKj///////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////r6//9VVf//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//DQ3//6+v///r6///Jyf//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//CAj//1VV//+ysv//9vb//+Tk + ///a2v//xMT//6+v//+env//f3///3Bw//9hYf//RET//zg4//8jI///CAj//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w0N + ///29v///////////////////////////////////////////////////////8LC//9iYv//8/P///// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////7Oz//8EBP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//9NTf//4eH///// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////Pz//9ISP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8EBP//e3v//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//9HR///np7///Pz//////////////// + ///////////////////////////////////////////////////////////////////29v//4eH//8/P + ///AwP//o6P//5GR//9/f///ZGT//1ZW//9ERP//LCz//x4e//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//w8P//////////////////////////////////////////////////8LC//8NDf//AAD//zU1 + ///p6f////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////8zM//8NDf//AAD//wAA + //8AAP//AAD//wAA//8AAP//Jib//wQE//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w0N + //+Pj///+vr///////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////5GR//9/f///f3///39///9/f///f3///39/ + //9/f///f3///39///9/f///f3///39///9/f///f3///39///9/f///f3///39///9/f///f3///39/ + //9/f///f3///39///9/f///f3///39///9/f///f3///39///9/f///f3///39////R0f////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////Pz//88PP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//ykp//+Dg///AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//MzP//5CQ///k5P////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////+vr///h4f//xMT//7Oz + //+jo///g4P//3d3//9hYf//TEz//0BA//8jI///DQ3//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//39//////////////////////////////////////////////6+v//8NDf//AAD//wAA + //8AAP//Ghr//8zM//////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////93d//8aGv//AAD//wAA + //8AAP//AAD//wAA//8AAP//NTX///Pz///Q0P//Njb//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//zEx///MzP////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////8jI///AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//lZX///// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////Pz//88PP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//ykp///p6f///////6Gh//8EBP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//yIi//98fP//2dn///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////4eH//9bW//9aWv//AAD//wAA + //8AAP//AAD//wAA//9ERP///////////////////////////////////////6ys//8EBP//AAD//wAA + //8AAP//AAD//wAA//8NDf//qKj///////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////+np//8pKf//AAD//wAA + //8AAP//AAD//wAA//8AAP//IiL//+np//////////////r6//+Skv//DQ3//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//BAT//3Jy///z8/////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////IyP//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//39/ + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////Pz//88PP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//ykp///p6f//////////////////s7P//w0N//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//Jib//8fH//////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////s7P//wAA + //8AAP//AAD//wAA//8AAP//CAj///b2/////////////////////////////6Wl//8EBP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//+Dg/////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////Pz//88PP//AAD//wAA + //8AAP//AAD//wAA//8AAP//FRX//9nZ/////////////////////////////+Hh//9NTf//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//Hh7//7Cw//////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////yMj//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //96ev////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////+np//8pKf//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//zg4///p6f/////////////////////////////Cwv//FRX//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//0RE//////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////Dw + //8AAP//AAD//wAA//8AAP//AAD//wAA///Dw////////////////////////5OT//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//1lZ///z8/////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////r6//9QUP//AAD//wAA + //8AAP//AAD//wAA//8AAP//DQ3//8LC/////////////////////////////////////////////6io + //8aGv//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//VVX//+Xl//////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////8jI///AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//YWH///////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////+np//8pKf//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//zw8///z8////////////////////////////////////////9nZ//8eHv//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//9ERP////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////NDT//wAA//8AAP//AAD//wAA//8AAP//f3///////////////////5OT//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//NTX//+np//////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////9ra///AAD//wAA + //8AAP//AAD//wAA//8AAP//BAT//6ys//////////////////////////////////////////////// + ////////8PD//2Zm//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8REf//lpb///r6 + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////IyP//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//2Fh//////////////////////////////////////////////////////////////// + /////////////////////////////////////////////+np//8pKf//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//zw8///z8///////////////////////////////////////////////////6en//ykp + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//FRX//8zM//////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////3R0//8AAP//AAD//wAA//8AAP//AAD//0RE/////////////3h4//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8aGv//zMz///// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////+IiP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//5OT//////////////////////////////////////////////// + ////////////////////////xcX//yoq//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //85Of//1NT///////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////wQE + //8AAP//AAD//wAA//8AAP//AAD//39///9/f///f3///39///9/f///f3///39///9/f///f3///39/ + //9/f///f3///39///9/f///f3///39///9/f///f3///39///9/f///f3///39///9RUf//AAD//wAA + //8AAP//AAD//wAA//9ISP////////////////////////////////////////////////////////// + /////////////////////////////////////////////+Hh//8pKf//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//0hI///z8/////////////////////////////////////////////////////////// + ///z8///PDz//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8NDf//u7v///////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////+7u///AAD//wAA//8AAP//AAD//wAA//8EBP//8/P//3R0//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//Ghr//7S0//8iIv//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w0N + //+oqP////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////+hof//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//3h4//////////////////////////////////////////////// + ///////////////////////////////////29v//goL//wgI//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wQE//97e///9vb///////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //8AAP//AAD//wAA//8AAP//AAD//wAA//////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////r6///wAA + //8AAP//AAD//wAA//8AAP//RET///////////////////////////////////////////////////// + /////////////////////////////////////////////9nZ//8aGv//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//1VV///6+v////////////////////////////////////////////////////////// + //////////////b2//9VVf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wQE//+lpf////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////8/P//wQE//8AAP//AAD//wAA//8AAP//AAD//0BA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//Ghr//9nZ////////6en//zw8//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//4OD//////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////+3t///BAT//wAA + //8AAP//AAD//wAA//8AAP//AAD//1lZ//////////////////////////////////////////////// + ///////////////////////////////////////////////////Z2f//PT3//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//yIi//+5uf////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////AAD//wAA//8AAP//AAD//wAA//8AAP////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////8TE + //8AAP//AAD//wAA//8AAP//AAD//zAw//////////////////////////////////////////////// + /////////////////////////////////////////////9nZ//8aGv//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//1VV///6+v////////////////////////////////////////////////////////// + ////////////////////////xMT//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//4+P + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////87O///AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//KSn//9nZ///////////////////6+v//YmL//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//WVn///Pz//////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////MzP//DQ3//wAA + //8AAP//AAD//wAA//8AAP//AAD//0FB///6+v////////////////////////////////////////// + //////////////////////////////////////////////////////////////////+dnf//ERH//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//11d///s7P////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////wAA//8AAP//AAD//wAA//8AAP//AAD///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///ExP//AAD//wAA//8AAP//AAD//wAA//8jI/////////////////////////////////////////// + /////////////////////////////////////////////9nZ//8aGv//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//1lZ///6+v////////////////////////////////////////////////////////// + /////////////////////////////7Oz//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//dHT///r6//////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////eHj//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//KSn//+np//////////////////////////////////+Li///BAT//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//81Nf//6en///////////////////////////////////// + ///////////////////////////////////////////////////////////////////d3f//Ghr//wAA + //8AAP//AAD//wAA//8AAP//AAD//ykp///z8/////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////+np + //9VVf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//ERH//52d//////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////8AAP//AAD//wAA//8AAP//AAD//wAA//////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////4eH//wAA//8AAP//AAD//wAA//8AAP//Fhb///////////////////////////////////// + /////////////////////////////////////////////8LC//8aGv//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//3R0//////////////////////////////////////////////////////////////// + //////////////////////////////////+jo///AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//9VVf//+vr///////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////7u7//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//MTH//+np/////////////////////////////////////////////7Oz + //8NDf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//xoa///MzP////////////////////////// + ///////////////////////////////////////////////////////////////////p6f//KSn//wAA + //8AAP//AAD//wAA//8AAP//AAD//xoa///p6f////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////7S0//8iIv//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//a2v///// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////AAD//wAA//8AAP//AAD//wAA//8AAP////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////+Hh//8AAP//AAD//wAA//8AAP//AAD//wAA//////////////////////////////// + /////////////////////////////////////////////8LC//8NDf//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//3R0//////////////////////////////////////////////////////////////// + ////////////////////////////////////////o6P//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//zw8///z8/////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////z8///BAT//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//PDz///Pz//////////////////////////////////////////////// + ////////1NT//yIi//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//DQ3//6io//////////////// + ///////////////////////////////////////////////////////////////////z8///PDz//wAA + //8AAP//AAD//wAA//8AAP//AAD//w0N///Z2f////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////8/P//3Jy//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//ERH//93d + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////wAA//8AAP//AAD//wAA//8AAP//Hh7///////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////29v//AAD//wAA//8AAP//AAD//wAA//8AAP//9vb///////////////////// + /////////////////////////////////////////////8LC//8NDf//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//3R0//////////////////////////////////////////////////////////////// + /////////////////////////////////////////////6Oj//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//KSn//+np//////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////9ra//+zs///iIj//7e3//////////////////////////////// + ////////////////////////////////////////////////////////6en//xER//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//PDz///Pz//////////////////////////////////////////////// + ///////////////////p6f//PDz//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//g4P///// + ///////////////////////////////////////////////////////////////////6+v//UFD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wQE//+/v/////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////+Dg///AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//7e3 + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////8AAP//AAD//wAA//8AAP//AAD//yMj//////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////wAA//8AAP//AAD//wAA//8AAP//AAD//+Hh//////////////// + /////////////////////////////////////////////8LC//8NDf//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//5OT//////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////+jo///AAD//wAA//8AAP//AAD//wAA + //9RUf//Ghr//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8aGv//2dn///////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///g4P//t7f//4yM//9hYf//ODj//w0N//8AAP//AAD//wAA//9aWv////////////////////////// + ////////////////////////////////////////////////////////6en//ykp//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//VVX///b2//////////////////////////////////////////////// + //////////////////////////////r6//9iYv//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //9ZWf//8/P/////////////////////////////////////////////////////////////b2///wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//+oqP////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////+3t///BAT//wAA//8AAP//AAD//wAA//8AAP//AAD//4OD + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////AAD//wAA//8AAP//AAD//wAA//8jI/////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////8REf//AAD//wAA//8AAP//AAD//wAA///h4f////////// + /////////////////////////////////////////////6ys//8ICP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//5OT//////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////o6P//wAA//8AAP//AAD//wAA + //8AAP//f3///+np//8pKf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//xER///Cwv////////// + ////////////////////////////////////////////////////////5+f//7y8//+Rkf//ZGT//zg4 + //8NDf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//FRX///////////////////// + ////////////////////////////////////////////////////////3d3//ykp//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//+vr//////////////////////////////////////////////// + /////////////////////////////////////////////4uL//8EBP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//zU1///p6f//////////////////////////////////////////////////i4v//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//+Pj/////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////h4f//FRX//wAA//8AAP//AAD//wAA//8AAP//AAD//0hI + ///6+v////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////wAA//8AAP//AAD//wAA//8AAP//IyP///// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////IyP//wAA//8AAP//AAD//wAA//8AAP//xMT///// + /////////////////////////////////////////////6ys//8EBP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//5OT//////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////6Oj//8AAP//AAD//wAA + //8AAP//AAD//39/////////8PD//zw8//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//CAj//6ys + /////////////////////////////+vr//+/v///kZH//2ho//88PP//ERH//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA///S0v////////// + ////////////////////////////////////////////////////////2dn//xoa//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//+zs/////////////////////////////////////////// + ////////////////////////////////////////////////////////s7P//w0N//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//Ghr//8zM////////////////////////////////////////paX//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//9vb/////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////29v//MTH//wAA//8AAP//AAD//wAA//8AAP//AAD//yIi + ///w8P////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////8AAP//AAD//wAA//8AAP//AAD//yMj + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////ycn//8AAP//AAD//wAA//8AAP//AAD//8TE + /////////////////////////////////////////////6ys//8EBP//AAD//wAA//8AAP//AAD//wAA + //8AAP//BAT//6Wl//////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////+env//AAD//wAA + //8AAP//AAD//wAA//9/f//////////////z8///UFD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8EBP//lpb////////Z2f//RET//xYW//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//kZH///// + ////////////////////////////////////////////////////////2dn//xoa//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//cHD///////////////////////////////////// + ///////////////////////////////////////////////////////////////////U1P//IiL//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8NDf//qKj/////////////////////////////u7v//wQE + //8AAP//AAD//wAA//8AAP//AAD//wAA//9VVf//+vr///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////YmL//wAA//8AAP//AAD//wAA//8AAP//AAD//w0N + ///Q0P////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////r6///AAD//wAA//8AAP//AAD//wAA + //8jI/////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////9ERP//AAD//wAA//8AAP//AAD//wAA + //+rq////////////////////////////////////////6Wl//8EBP//AAD//wAA//8AAP//AAD//wAA + //8AAP//BAT//6ys//////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////f3///wAA + //8AAP//AAD//wAA//8AAP//f3////////////////////r6//9nZ///AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//98fP//4eH//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//1NT + ////////////////////////////////////////////////////////wsL//w0N//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//zQ0//////////////////////////////// + /////////////////////////////////////////////////////////////////////////////+zs + //9BQf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//+Dg///////////////////0ND//w0N + //8AAP//AAD//wAA//8AAP//AAD//wAA//88PP//8/P///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////nZ3//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //+hof////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////4eH//wAA//8AAP//AAD//wAA + //8AAP//IyP///////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////RET//wAA//8AAP//AAD//wAA + //8AAP//o6P//////////////////////////////////5OT//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//BAT//6ys//////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////39/ + //8AAP//AAD//wAA//8AAP//AAD//39//////////////////////////////0tL//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//15e//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8NDf//+vr/////////////////////////////////////////////wsL//w0N//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//8PD///////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////+vr//2dn//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//1lZ///z8///4eH//xoa + //8AAP//AAD//wAA//8AAP//AAD//wAA//8pKf//7Oz///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////zMz//wgI//8AAP//AAD//wAA//8AAP//AAD//wAA + //9ra/////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////+Hh//8AAP//AAD//wAA + //8AAP//AAD//yMj//////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////15e//8AAP//AAD//wAA + //8AAP//AAD//5GR/////////////////////////////5OT//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//DQ3//7Oz//////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //9/f///AAD//wAA//8AAP//AAD//wAA//9/f///////////////////6en//1VV//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8ICP//CAj//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8EBP//MDD//1pa//+IiP//q6v//wAA//8AAP//AAD//wAA + //8AAP//AAD//8vL////////////////////////////////////////r6///w0N//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//i4v//wgI//8AAP//AAD//wAA//8AAP//AAD//7Oz//////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////k5P//wQE//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//NTX//ykp + //8AAP//AAD//wAA//8AAP//AAD//wAA//8aGv//3d3///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////7Oz//x4e//8AAP//AAD//wAA//8AAP//AAD//wAA + //84OP//+vr///////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////h4f//AAD//wAA + //8AAP//AAD//wAA//8jI/////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////9hYf//AAD//wAA + //8AAP//AAD//wAA//9/f////////////////////////5OT//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//DQ3//8LC//////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////f3///wAA//8AAP//AAD//wAA//8AAP//jIz/////////////nZ3//xER//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//9FRf//4eH//zg4//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//zAw//9WVv//f3///6+v///W1v//+vr///////////////////////80NP//AAD//wAA + //8AAP//AAD//wAA//+Hh////////////////////////////////////////8LC//8NDf//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//5OT//9ERP//AAD//wAA//8AAP//AAD//wAA//9tbf////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////+3t///DQ3//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8NDf//zMz///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////+vr//0VF//8AAP//AAD//wAA//8AAP//AAD//wAA + //8aGv//5eX///////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////4eH//wAA + //8AAP//AAD//wAA//8AAP//IyP///////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////c3P//wAA + //8AAP//AAD//wAA//8AAP//d3f//////////////////4OD//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//DQ3//8LC//////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////39///8AAP//AAD//wAA//8AAP//AAD//6Oj///Z2f//QUH//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//xER//+hof////////////9TU///AAD//wAA//8AAP//AAD//wAA + //9wcP//0tL///b2////////////////////////////////////////////////////////cHD//wAA + //8AAP//AAD//wAA//8AAP//R0f/////////////////////////////////////////////wsL//w0N + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//IiL//wAA//8AAP//AAD//wAA//8AAP//Kyv///// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////9nZ//8mJv//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8EBP//t7f///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////4CA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8EBP//v7////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////+Hh + //8AAP//AAD//wAA//8AAP//AAD//yMj//////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////39/ + //8AAP//AAD//wAA//8AAP//AAD//2Fh/////////////3R0//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//Ghr//8LC//////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////9/f///AAD//wAA//8AAP//AAD//wAA//9CQv//CAj//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//1VV///s7P//////////////////aGj//wAA//8AAP//AAD//wAA + //8AAP//f3///////////////////////////////////////////////////////////////////7u7 + //8AAP//AAD//wAA//8AAP//AAD//wgI///29v////////////////////////////////////////// + ///Cwv//DQ3//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + ///n5/////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////7Oz//0FB//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//oaH///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////6+v//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//j4////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///h4f//AAD//wAA//8AAP//AAD//wAA//88PP////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //+IiP//AAD//wAA//8AAP//AAD//wAA//9hYf///////3R0//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//Ghr//9nZ//////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////f3///wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//Hh7//7S0/////////////////////////////4OD//8AAP//AAD//wAA + //8AAP//AAD//2Rk//////////////////////////////////////////////////////////////// + ///z8///BAT//wAA//8AAP//AAD//wAA//8AAP//w8P///////////////////////////////////// + /////////////8LC//8aGv//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//q6v///////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////6+v//Z2f//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//g4P///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////93d//8NDf//AAD//wAA//8AAP//AAD//wAA + //8AAP//WVn///////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////4eH//wAA//8AAP//AAD//wAA//8AAP//RET///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////o6P//wAA//8AAP//AAD//wAA//8AAP//RET//3R0//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//Ghr//9nZ//////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////2ho//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//b2////Pz//////////////////////////////////+jo///AAD//wAA + //8AAP//AAD//wAA//9MTP////////////////////////////////////////////////////////// + /////////////zs7//8AAP//AAD//wAA//8AAP//AAD//39///////////////////////////////// + ////////////////////////2dn//xoa//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//2ho//////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //+Tk///BAT//wAA//8AAP//AAD//wAA//8AAP//Z2f///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////Pz//8uLv//AAD//wAA//8AAP//AAD//wAA + //8AAP//Li7///Pz//////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////+Hh//8AAP//AAD//wAA//8AAP//AAD//0RE//////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////6Oj//8AAP//AAD//wAA//8AAP//AAD//wQE//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//Hh7//9nZ//////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////9hYf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8qKv//yMj/////////////////////////////////////////////xMT//wAA + //8AAP//AAD//wAA//8AAP//MDD///////////////////////////////////////////////////// + /////////////8zM//8aGv//AAD//wAA//8AAP//AAD//wAA//8/P/////////////////////////// + ///////////////////////////////////Z2f//Ghr//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8rK/////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////7e3//8NDf//AAD//wAA//8AAP//TEz///r6//////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////9ZWf//AAD//wAA//8AAP//AAD//wAA + //8AAP//DQ3//9nZ//////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////h4f//AAD//wAA//8AAP//AAD//wAA//9ERP////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////ExP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//KSn//+np//////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////p6f//NTX//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wQE//+Cgv//+vr//////////////////////////////////////////////////93d + //8AAP//AAD//wAA//8AAP//AAD//xER//////////////////////////////////////////////// + /////////////52d//8ICP//AAD//wAA//8AAP//AAD//wAA//8AAP//BAT///Pz//////////////// + /////////////////////////////////////////////9nZ//8aGv//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//+fn//////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////2dn//yYm//8AAP//NTX///Pz//////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////+Skv//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//6+v//////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////4eH//wAA//8AAP//AAD//wAA//8AAP//RET///////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////xMT//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//KSn//+np//////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////+dnf//ERH//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//zk5///Z2f////////////////////////////////////////////////////////// + ///29v//AAD//wAA//8AAP//AAD//wAA//8AAP//8/P///////////////////////////////////// + ////////+vr//2dn//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//x4e///p6f////////// + ////////////////////////////////////////////////////////2dn//xoa//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//+rq/////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////s7P//YmL//+np//////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////+/v///BAT//wAA//8AAP//AAD//wAA + //8AAP//AAD//4CA//////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////9ra//8AAP//AAD//wAA//8AAP//AAD//0RE//////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////9ra//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//KSn//+np//////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////9nZ//9BQf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//DQ3//5aW///6+v////////////////////////////////////////////////////////// + /////////////xYW//8AAP//AAD//wAA//8AAP//AAD//9ra//////////////////////////////// + ////////6en//zg4//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//0FB///p6f////////// + ///////////////////////////////////////////////////////////////////Z2f//KSn//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//YWH///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////p6f//Ghr//wAA//8AAP//AAD//wAA + //8AAP//AAD//0VF///6+v////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////ExP//AAD//wAA//8AAP//AAD//wAA//9ERP////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////h4f//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//PDz///Pz//////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////+vr//4aG//8ICP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//SEj//+Xl//////////////////////////////////////////////////////////////// + //////////////////8wMP//AAD//wAA//8AAP//AAD//wAA//9VVf//kZH//7y8///g4P////////// + ////////v7///xoa//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//3Bw///6+v////////// + /////////////////////////////////////////////////////////////////////////////+np + //8pKf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//yMj///6+v////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////6+v//PDz//wAA//8AAP//AAD//wAA + //8AAP//AAD//x4e///s7P////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////xMT//wAA//8AAP//AAD//wAA//8AAP//RET///// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////6+v//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//PDz///Pz//////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////yMj//y4u//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//8TE//////////////////////////////////////////////////////////////// + ////////////////////////TEz//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wgI + //80NP//U1P//wQE//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//CAj//6Gh//////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////6en//ykp//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//VVX///r6//////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////c3P//wAA//8AAP//AAD//wAA + //8AAP//AAD//wgI///MzP////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////8TE//8AAP//AAD//wAA//8AAP//AAD//0RE + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//PDz///Pz//////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////z8///b2///wQE//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA///ExP////////////////////////////////////////////////////////// + /////////////////////////////2Rk//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//Hh7//8zM//////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////p6f//KSn//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//9VVf//+vr///// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////paX//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//+dnf////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////ExP//AAD//wAA//8AAP//AAD//wAA + //9ERP////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////BAT//wAA//8AAP//AAD//wAA + //8AAP//VVX///Pz//////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////+0tP//Hh7//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//xMT///////////////////////////////////////////////////// + //////////////////////////////////9/f///AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//RUX//+zs//////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////+np//8mJv//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//0xM + ///z8/////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////1NT//w0N//8AAP//AAD//wAA + //8AAP//AAD//wAA//9nZ/////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////xMT//wAA//8AAP//AAD//wAA + //8AAP//RET///////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////yMj//8AAP//AAD//wAA + //8AAP//VVX///r6//////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////+np//9VVf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//BAT//w0N + //8AAP//AAD//wAA//8AAP//AAD//8TE//////////////////////////////////////////////// + ////////////////////////////////////////o6P//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//d3f///r6//////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////kZH//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//PDz///Pz//////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////8/P//yYm//8AAP//AAD//wAA + //8AAP//AAD//wAA//81Nf//9vb///////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////8TE//8AAP//AAD//wAA + //8AAP//AAD//1NT//////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////8jI///AAD//wAA + //8AAP//VVX///r6//////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////52d//8REf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//MTH//8zM + //9ERP//AAD//wAA//8AAP//AAD//wAA///ExP////////////////////////////////////////// + /////////////////////////////////////////////87O//8nJ///AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8NDf//paX///////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////8TE//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//88PP//8/P///////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////0xM//8AAP//AAD//wAA + //8AAP//AAD//wAA//8VFf//5eX///////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////ExP//AAD//wAA + //8AAP//AAD//wAA//9hYf////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////QED//wAA + //8AAP//a2v///r6//////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////2dn//0FB//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8ICP//ior///r6 + ////////RET//wAA//8AAP//AAD//wAA//8AAP//4eH///////////////////////////////////// + //////////////////////////////////////////////////////////////r6///a2v//t7f//5GR + //9ra///TEz//x4e//8AAP//AAD//wAA//8AAP//AAD//wAA//8iIv//0ND///////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////8/P//4KC//8NDf//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//zw8///z8/////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////4iI//8AAP//AAD//wAA + //8AAP//AAD//wAA//8EBP//u7v///////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////xMT//wAA + //8AAP//AAD//wAA//8AAP//YWH///////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////0RE + //8AAP//dHT///////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///6+v//hob//wgI//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//9BQf//3Nz///// + /////////////0RE//8AAP//AAD//wAA//8AAP//AAD//+Hh//////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////9vb//9bW//+zs///jIz//2ho//9eXv//7Oz///////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////6+v//nZ3//xoa//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//PDz//+np//////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////7u7//8EBP//AAD//wAA + //8AAP//AAD//wAA//8AAP//iIj///////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////8TE + //8AAP//AAD//wAA//8AAP//AAD//2Fh//////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //9TU///dHT///////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///IyP//Li7//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//xER//+dnf////////// + //////////////////9ERP//AAD//wAA//8AAP//AAD//wAA///h4f////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////+ysv//Kir//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8pKf//6en///////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////+Hh//8VFf//AAD//wAA + //8AAP//AAD//wAA//8AAP//UVH///////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///ExP//AAD//wAA//8AAP//AAD//wAA//9hYf////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////xcX///////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////Pz + //9vb///BAT//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//1VV///l5f////////// + ////////////////////////RET//wAA//8AAP//AAD//wAA//8AAP//4eH///////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////8jI//9CQv//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8nJ///AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//ykp///p6f////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////b2//81Nf//AAD//wAA + //8AAP//AAD//wAA//8AAP//KSn///Pz//////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////xMT//wAA//8AAP//AAD//wAA//8AAP//YWH///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////7S0 + //8eHv//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//FRX//7Cw//////////////// + /////////////////////////////ycn//8AAP//AAD//wAA//8AAP//AAD//+Hh//////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////3Nz//1lZ//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//0JC///IyP//+vr//1VV//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//KSn//+np + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////9nZ///AAD//wAA + //8AAP//AAD//wAA//8AAP//DQ3//9TU//////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////6Oj//8AAP//AAD//wAA//8AAP//AAD//2Fh//////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////+np + //9FRf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//9dXf//4eH///// + //////////////////////////////////8jI///AAD//wAA//8AAP//AAD//wAA///h4f////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////s7P//cnL//wQE//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//MjL//7m5///////////////////6+v//VVX//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8pKf//5eX///////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////+hof//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//6io//////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////+jo///AAD//wAA//8AAP//AAD//wAA//9hYf////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////729//8yMv//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wgI + //92dv//8PD/////////////////////////////IyP//wAA//8AAP//AAD//wAA//8AAP//4eH///// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////b2//+Kiv//ERH//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8mJv//paX///////////////////////////////////r6//9VVf//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//xoa///Z2f////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////MzP//CAj//wAA + //8AAP//AAD//wAA//8AAP//AAD//3d3//////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////o6P//wAA//8AAP//AAD//wAA//8AAP//YWH///////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////6Gh//8iIv//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//xER//+Ojv//9vb//////////////////yMj//8AAP//AAD//wAA//8AAP//AAD///b2 + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////9zc//8eHv//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//xER + //+Zmf//+vr/////////////////////////////////////////////+vr//1VV//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//Ghr//9nZ//////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////s7P//IiL//wAA + //8AAP//AAD//wAA//8AAP//AAD//0FB///6+v////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////6Oj//8AAP//AAD//wAA//8AAP//AAD//2Fh//////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////9vb//46O//8REf//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//yYm//+lpf////////////8jI///AAD//wAA//8AAP//AAD//wAA + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////yMj//zY2//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8EBP//amr///Dw////////////////////////////////////////////////////////dHT//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8aGv//2dn///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////6+v//SEj//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//+QkP////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////+jo///AAD//wAA//8AAP//AAD//wAA//9hYf////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////8PD//3Z2//8ICP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//zY2///Cwv//IyP//wAA//8AAP//AAD//wAA + //8AAP////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////6+v//mZn//xER//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8VFf//nZ3///////////////////////////////////////////////////// + //90dP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//xoa///Z2f////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////4CA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//3x8///6+v////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////o6P//wAA//8AAP//AAD//wAA//8AAP//a2v///// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////4eH//2Fh + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD///////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////s7P//Zmb//wQE//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//85Of//3d3///////////////////////////////////// + ////////+vr//ycn//8AAP//AAD//wAA//8AAP//AAD//wAA//8NDf//wsL///////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////oaH//wQE//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//TEz///Pz//////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////6Oj//8AAP//AAD//wAA//8AAP//AAD//39/ + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////o6P//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//9mZv//8PD///////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////0dH//0VF//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////MzP//OTn//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//9nZ//////////////////////////////// + /////////////3R0//8AAP//AAD//wAA//8AAP//AAD//wAA//8EBP//rKz///////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////Cwv//FRX//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8uLv//4eH///// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////+jo///AAD//wAA//8AAP//AAD//wAA + //9/f/////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////6Oj//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//xUV//+oqP////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////vb3//zIy//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //+dnf//FRX//wAA//8AAP//AAD//wAA//8AAP//AAD//yMj//////////////////////////////// + /////////////5OT//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//j4////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////93d//8pKf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//xoa + ///Cwv////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////o6P//wAA//8AAP//AAD//wAA + //8AAP//f3////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////AwP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//0lJ///h4f////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////oaH//yIi//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//5mZ///6+v////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////Dw//8yMv//AAD//wAA//8AAP//AAD//wAA//9tbf////////////////////////// + /////////////6ys//8EBP//AAD//wAA//8AAP//AAD//wAA//8AAP//b2////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////8/P//0VF//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//BAT//6Gh//////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////6Oj//8AAP//AAD//wAA + //8AAP//AAD//39///////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////xMT//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//CAj//4+P///6+v////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////29v//jo7//xER//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//g4P///////////////////////////////////// + /////////////////////////////////////////////7+///+Rkf//o6P//7e3///ExP//2tr//+Hh + ///29v////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////Ghr//wAA//8AAP//AAD//wAA//8AAP//u7v///////////////////// + /////////////8LC//8NDf//AAD//wAA//8AAP//AAD//wAA//8AAP//UFD///r6//////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////6+v//a2v//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//fHz///r6//////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////+jo///AAD//wAA + //8AAP//AAD//wAA//9/f/////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////8TE//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//MTH//8jI + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////w8P//dnb//wgI + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//4OD//////////////////////////////// + //////////////////////////////////////////////////9oaP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8eHv//IyP//0BA//9ERP//YWH//2Rk//9/f///zc3///////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////zs7//wAA//8AAP//AAD//wAA//8AAP//CAj///b2//////////////// + /////////////9nZ//8aGv//AAD//wAA//8AAP//AAD//wAA//8AAP//ODj///Pz//////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////+Wlv//BAT//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//9QUP//8/P///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////iIj//wAA + //8AAP//AAD//wAA//8AAP//f3////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////ExP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8EBP//b2////Dw//////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///h4f//YWH//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//+jo/////////////////////////// + ////////////////////////////////////////////////////////Vlb//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//9CQv//u7v///// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////39///8AAP//AAD//wAA//8AAP//AAD//0tL//////////////// + /////////////+np//8pKf//AAD//wAA//8AAP//AAD//wAA//8AAP//Jib//+np//////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////7e3 + //8NDf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//zEx///l5f////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////39/ + //8AAP//AAD//wAA//8AAP//AAD//39///////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////2tr//wAA + //8AAP//AAD//wAA//8AAP//IyP/////////////wMD//yoq//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8eHv//sLD///////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//o6P///////////////////// + /////////////////////////////////////////////////////////////0RE//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8yMv//qqr///r6//////////////////////////////////////////////////////////////// + //////////////////////////////////87O///AAD//wAA//8AAP//AAD//wAA//+Vlf////////// + //////////////Pz//88PP//AAD//wAA//8AAP//AAD//wAA//8AAP//ERH//9nZ//////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////1NT//yIi//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//Ghr//8fH//////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //9/f///AAD//wAA//8AAP//AAD//wAA//9/f/////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////+Hh + //8AAP//AAD//wAA//8AAP//AAD//yMj///////////////////29v//fn7//wQE//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//9RUf//5eX///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////6+v//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//6Oj//////////////// + //////////////////////////////////////////////////////////////////8nJ///AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8mJv//lZX///b2//////////////////////////////////////////////// + ///////////////////////////////////s7P//AAD//wAA//8AAP//AAD//wAA//8AAP//3Nz///// + //////////////r6//9VVf//AAD//wAA//8AAP//AAD//wAA//8AAP//BAT//8LC//////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////p6f//PDz//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8ICP//paX///// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////f3///wAA//8AAP//AAD//wAA//8AAP//f3////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///h4f//AAD//wAA//8AAP//AAD//wAA//8AAP/////////////////////////////U1P//OTn//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w0N//+Wlv//+vr///////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////4eH//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//+3t/////////// + ////////////////////////////////////////////////////////////////////////ERH//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8aGv//hYX///Dw//////////////////////////////// + ////////////////////////////////////////pqb//wAA//8AAP//AAD//wAA//8AAP//Jyf///// + //////////////////90dP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//6io//////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////b2//9dXf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //+AgP////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////39///8AAP//AAD//wAA//8AAP//AAD//39///////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////4eH//wAA//8AAP//AAD//wAA//8AAP//AAD///////////////////////////////////r6 + //+Wlv//DQ3//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//zk5///Q0P////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////+Hh//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//xMT///// + /////////////////////////////////////////////////////////////////////////////wAA + //8AAP//AAD//wAA//8AAP//AAD//yMj//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8REf//i4v///////////////////// + /////////////////////////////////////////////1pa//8AAP//AAD//wAA//8AAP//AAD//3Fx + //////////////////+Tk///AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//4uL//////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////4iI//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//1BQ///z8/////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////9/f///AAD//wAA//8AAP//AAD//wAA//+Dg/////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////Pz//8AAP//AAD//wAA//8AAP//AAD//wAA//////////////////////////////// + /////////////+Xl//9NTf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//BAT//3d3 + ///29v////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////h4f//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//8TE + /////////////////////////////////////////////////////////////////////////////+Hh + //8AAP//AAD//wAA//8AAP//AAD//w0N///////////////////k5P//4eH//8fH///ExP//q6v//319 + //8REf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//7Cw//////////////// + //////////////////////////////////////////////r6//8REf//AAD//wAA//8AAP//AAD//wAA + //+/v/////////////+srP//BAT//wAA//8AAP//AAD//wAA//8AAP//AAD//2tr//////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////qKj//w0N//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//MTH//+Xl//////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////f3///wAA//8AAP//AAD//wAA//8AAP//o6P///////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////AAD//wAA//8AAP//AAD//wAA//8AAP////////////////////////// + /////////////////////////////6ys//8aGv//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//IiL//7y8//////////////////////////////////////////////////////////////// + ////////////////////////////////////////4eH//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + ///Hx/////////////////////////////////////////////////////////////////////////// + ///Pz///AAD//wAA//8AAP//AAD//wAA//8jI/////////////////////////////////////////// + ////////8PD//4yM//8aGv//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//1VV//////////////// + ///////////////////////////////////////////////////Hx///AAD//wAA//8AAP//AAD//wAA + //8NDf//9vb////////Cwv//DQ3//wAA//8AAP//AAD//wAA//8AAP//AAD//0hI///6+v////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////Hx///Ghr//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8aGv//x8f///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////39///8AAP//AAD//wAA//8AAP//AAD//6Oj//////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////wAA//8AAP//AAD//wAA//8AAP//AAD//+Tk//////////////// + ////////////////////////////////////////8PD//2Zm//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//9WVv////////////////////////////////////////////////////////// + /////////////////////////////////////////////+Hh//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//4eH///////////////////////////////////////////////////////////////////// + ////////wMD//wAA//8AAP//AAD//wAA//8AAP//RET///////////////////////////////////// + ////////////////////////3Nz//wQE//8AAP//AAD//wAA//8AAP//AAD//xER///s7P////////// + ////////////////////////////////////////////////////////fHz//wAA//8AAP//AAD//wAA + //8AAP//T0/////////Z2f//Ghr//wAA//8AAP//AAD//wAA//8AAP//AAD//zEx///z8/////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////+Xl + //8xMf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wgI//+lpf////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////9/f///AAD//wAA//8AAP//AAD//wAA//+jo/////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////8AAP//AAD//wAA//8AAP//AAD//wAA///h4f////////// + ////////////////////////////////////////////////////////wMD//yoq//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//d3f///////////////////////////////////////////////////// + ///////////////////////////////////////////////////h4f//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//+Hh//////////////////////////////////////////////////////////////// + /////////////6Oj//8AAP//AAD//wAA//8AAP//AAD//1NT//////////////////////////////// + /////////////////////////////01N//8AAP//AAD//wAA//8AAP//AAD//wAA//+hof////////// + /////////////////////////////////////////////////////////////y8v//8AAP//AAD//wAA + //8AAP//AAD//5mZ///p6f//KSn//wAA//8AAP//AAD//wAA//8AAP//AAD//x4e///p6f////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////8/P//0xM//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//4CA//////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////f3///wAA//8AAP//AAD//wAA//8AAP//o6P///// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////ERH//wAA//8AAP//AAD//wAA//8AAP//4eH///// + ///////////////////////////////////////////////////////////////////29v//fn7//wQE + //8AAP//AAD//wAA//8AAP//AAD//56e//////////////////////////////////////////////// + ////////////////////////////////////////////////////////4eH//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA///h4f////////////////////////////////////////////////////////// + //////////////////+MjP//AAD//wAA//8AAP//AAD//wAA//9kZP////////////////////////// + /////////////////////////////6Gh//8AAP//AAD//wAA//8AAP//AAD//wAA//9FRf////////// + /////////////////////////////////////////////////////////////+Tk//8AAP//AAD//wAA + //8AAP//AAD//wAA///U1P//PDz//wAA//8AAP//AAD//wAA//8AAP//AAD//w0N///Z2f////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////6+v//fHz//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//UFD///Pz + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////39///8AAP//AAD//wAA//8AAP//AAD//6Oj + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////yMj//8AAP//AAD//wAA//8AAP//AAD//+Hh + //////////////////////////////////////////////////////////////////////////////// + //80NP//AAD//wAA//8AAP//AAD//wAA///AwP////////////////////////////////////////// + /////////////////////////////////////////////////////////////8/P//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//8PD///////////////////////////////////////////////////// + ////////////////////////d3f//wAA//8AAP//AAD//wAA//8AAP//f3////////////////////// + /////////////////////////////+Xl//8REf//AAD//wAA//8AAP//AAD//wAA//8NDf//4eH///// + //////////////////////////////////////////////////////////////////+env//AAD//wAA + //8AAP//AAD//wAA//8nJ///VVX//wAA//8AAP//AAD//wAA//8AAP//AAD//wQE//+/v/////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////+dnf//BAT//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8xMf//5eX///////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////9wcP//AAD//wAA//8AAP//AAD//wAA + //+jo/////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////8jI///AAD//wAA//8AAP//AAD//wAA + ///Ly/////////////////////////////////////////////////////////////////////////// + ////////DQ3//wAA//8AAP//AAD//wAA//8AAP//4eH///////////////////////////////////// + ///////////////////////////////////////////////////////////////////ExP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD///////////////////////////////////////////////////// + /////////////////////////////2Fh//8AAP//AAD//wAA//8AAP//AAD//5qa//////////////// + //////////////////////////////////9NTf//AAD//wAA//8AAP//AAD//wAA//8AAP//j4////// + ////////////////////////////////////////////////////////////////////////Vlb//wAA + //8AAP//AAD//wAA//8AAP//DQ3//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//+lpf////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////7+///8REf//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//xoa///Hx/////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////YWH//wAA//8AAP//AAD//wAA + //8AAP//o6P///////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////IyP//wAA//8AAP//AAD//wAA + //8AAP//xMT///////////////////////////////////////////////////////////////////// + ////////6+v//wAA//8AAP//AAD//wAA//8AAP//BAT///////////////////////////////////// + ////////////////////////////////////////////////////////////////////////xMT//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//////////////////////////////////////////////// + //////////////////////////////////9MTP//AAD//wAA//8AAP//AAD//wAA//8EBP//LCz//09P + //9wcP//lZX//7y8///d3f////////////+hof//AAD//wAA//8AAP//AAD//wAA//8AAP//OTn///r6 + ////////////////////////////////////////////////////////////////////////9vb//w0N + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//+Dg/////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////2dn//ykp//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//CAj//6Wl//////////////////////////////////////////////// + /////////////////////////////////////////////////////////////2Fh//8AAP//AAD//wAA + //8AAP//AAD//6Oj//////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////yws//8AAP//AAD//wAA + //8AAP//AAD//8TE//////////////////////////////////////////////////////////////// + /////////////8vL//8AAP//AAD//wAA//8AAP//AAD//yws//////////////////////////////// + /////////////////////////////////////////////////////////////////////////////8TE + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP////////////////////////////////////////// + ////////////////////////////////////////ODj//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wQE//8sLP//DQ3//wAA//8AAP//AAD//wAA//8AAP//BAT//9TU + /////////////////////////////////////////////////////////////////////////////7+/ + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//9iYv////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////r6//////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////w8P//QUH//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//gID///////////////////////////////////// + //////////////////////////////////////////////////////////////////9hYf//AAD//wAA + //8AAP//AAD//wAA//+jo/////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////9ERP//AAD//wAA + //8AAP//AAD//wAA///ExP////////////////////////////////////////////////////////// + //////////////////+rq///AAD//wAA//8AAP//AAD//wAA//9MTP////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///ExP//AAD//wAA//8AAP//AAD//wAA//8AAP//IyP///////////////////////////////////// + /////////////////////////////////////////////yMj//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//4KC + //////////////////////////////////////////////////////////////////////////////// + //90dP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//9FRf//+vr///// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////7S0//88PP//8/P///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////r6 + //9nZ///AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//9QUP//8/P///////////////////// + ////////////////////////////////////////////////////////////////////////YWH//wAA + //8AAP//AAD//wAA//8AAP//o6P///////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////RET//wAA + //8AAP//AAD//wAA//8AAP//q6v///////////////////////////////////////////////////// + ////////////////////////bW3//wAA//8AAP//AAD//wAA//8AAP//a2v///////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////xMT//wAA//8AAP//AAD//wAA//8AAP//AAD//yMj//////////////////////////////// + //////////////////////////////////////////////////8EBP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//yoq + ///29v////////////////////////////////////////////////////////////////////////// + ////////Kyv//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8uLv//8/P///// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////Dw//8eHv//AAD//zw8///z8/////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////4+P//8EBP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//zEx///l5f////////// + /////////////////////////////////////////////////////////////////////////////2Fh + //8AAP//AAD//wAA//8AAP//AAD//6Oj//////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////0RE + //8AAP//AAD//wAA//8AAP//AAD//6Oj//////////////////////////////////////////////// + ///////////////////6+v//d3f//wAA//8AAP//AAD//wAA//8AAP//AAD//4yM//////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////8TE//8AAP//AAD//wAA//8AAP//AAD//wAA//8jI/////////////////////////// + ///////////////////////////////////////////////////w8P//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + ///IyP////////////////////////////////////////////////////////////////////////// + ////////3Nz//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8aGv//6en///// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////9vb///AAD//wAA//8AAP//PDz///Pz//////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////s7P//w0N//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//Ghr//8fH + //////////////////////////////////////////////////////////////////////////////// + //9hYf//AAD//wAA//8AAP//AAD//wAA///ExP////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //9ISP//AAD//wAA//8AAP//AAD//wAA//+jo/////////////////////////////////////////// + ///////////////////z8///SEj//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//+zs/////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////+8vP//AAD//wAA//8AAP//AAD//wAA//8AAP//NDT///////////////////// + ////////////////////////////////////////////////////////9vb//6+v//+IiP//ZGT//0hI + //8eHv//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //9vb/////////////////////////////////////////////////////////////////////////// + /////////////5WV//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8NDf//0ND///// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////AwP//AAD//wAA//8AAP//AAD//wAA//8uLv//6en///// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////Q0P//Hh7//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8ICP//paX///////////////////////////////////////////////////////////////////// + ////////YWH//wAA//8AAP//AAD//wAA//8AAP//xMT///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////YWH//wAA//8AAP//AAD//wAA//8AAP//o6P///////////////////////////////////// + ///////////////////Z2f//KSn//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//2dn///// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////o6P//wAA//8AAP//AAD//wAA//8AAP//AAD//0RE//////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////b2///a2v//t7f//5GR//9wcP//T0///yws//8ICP//AAD//wAA//8AAP//AAD//wAA + //8iIv//8/P///////////////////////////////////////////////////////////////////// + //////////////////9LS///AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8EBP//t7f///// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////z8///IiL//wAA//8AAP//AAD//wAA//8AAP//AAD//ykp + ///p6f////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////+np//84OP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//+AgP////////////////////////////////////////////////////////// + /////////////2Fh//8AAP//AAD//wAA//8AAP//AAD//8TE//////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////2Fh//8AAP//AAD//wAA//8AAP//AAD//4yM//////////////////////////////// + //////////////////+7u///ERH//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8EBP//nZ3///// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////6Oj//8AAP//AAD//wAA//8AAP//AAD//wAA//9ERP////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////+Tk///AwP//np7//3d3 + //9WVv//t7f///////////////////////////////////////////////////////////////////// + ///////////////////29v//CAj//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//nZ3///// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////cnL//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//KSn//+np//////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////8/P//1VV//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//6Ki//////////////////////////////////////////////// + //////////////////9hYf//AAD//wAA//8AAP//AAD//wAA///ExP////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////9hYf//AAD//wAA//8AAP//AAD//wAA//9/f/////////////////////////// + //////////////////+Tk///BAT//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8aGv//wsL///// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////+jo///AAD//wAA//8AAP//AAD//wAA//8AAP//RET///// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////t7f//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//gID///// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////yMj//wQE//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8iIv//2dn///////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////Pz//88PP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//3R0//////////////////////////////////////////////// + ////////////////////////YWH//wAA//8AAP//AAD//wAA//8AAP//xMT///////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////YWH//wAA//8AAP//AAD//wAA//8AAP//f3////////////////////// + //////////////r6//9nZ///AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8xMf//5eX///// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////o6P//wAA//8AAP//AAD//wAA//8AAP//AAD//2Fh + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////2ho//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//XV3///// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////9vb//yoq//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//xoa///Z2f////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////Pz//88PP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//3R0//////////////////////////////////////////////// + /////////////////////////////1pa//8AAP//AAD//wAA//8AAP//AAD//8TE//////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////39///8AAP//AAD//wAA//8AAP//AAD//39///////////////// + /////////////+np//9BQf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//9ZWf//8/P///// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////6Oj//8AAP//AAD//wAA//8AAP//AAD//wAA + //9hYf////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////8LC//8NDf//AAD//wAA//8AAP//AAD//wAA//8AAP//PDz///r6 + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////3d3//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//Ghr//9nZ//////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////Pz//88PP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//1VV///6+v////////////////////////////////////////// + //////////////////////////////////9ERP//AAD//wAA//8AAP//AAD//wAA///ExP////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////9/f///AAD//wAA//8AAP//AAD//wAA//9wcP////////// + /////////////9TU//8iIv//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//+IiP////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////+jo///AAD//wAA//8AAP//AAD//wAA + //8AAP//YWH///////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////9nZ//8aGv//AAD//wAA//8AAP//AAD//wAA//8AAP//KSn///Dw + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////9DQ//8EBP//AAD//wAA//8AAP//AAD//wAA + //8ICP//Xl7//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8aGv//x8f///////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////r6//88PP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//1VV///6+v////////////////////////////////////////// + ////////////////////////////////////////RET//wAA//8AAP//AAD//wAA//8AAP//xMT///// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////f3///wAA//8AAP//AAD//wAA//8AAP//YWH///// + /////////////6+v//8NDf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w0N//+zs/////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////o6P//wAA//8AAP//AAD//wAA + //8AAP//AAD//3Bw//////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////+np//8pKf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//2Nj + ///29v////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////r6//8xMf//AAD//wAA//8AAP//AAD//wAA + //8AAP//j4////////+Li///AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w0N///Cwv////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////r6//9VVf//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//1VV///6+v////////////////////////////////////////// + /////////////////////////////////////////////0RE//8AAP//AAD//wAA//8AAP//AAD//8TE + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////39///8AAP//AAD//wAA//8AAP//AAD//zAw + //9eXv//PDz//xYW//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//yYm///U1P////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////4OD//8AAP//AAD//wAA + //8AAP//AAD//wAA//9/f/////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////+np//8pKf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//MTH//9nZ//////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////+Cgv//AAD//wAA//8AAP//AAD//wAA + //8AAP//OTn///r6/////////////5OT//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//DQ3//8LC + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////r6//9VVf//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//0hI///6+v////////////////////////////////////////// + //////////////////////////////////////////////////9ERP//AAD//wAA//8AAP//AAD//wAA + ///ExP////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////+env//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//0VF///s7P////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////9/f///AAD//wAA + //8AAP//AAD//wAA//8AAP//f3////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////+np//8pKf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8NDf//np7///////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////Q0P//BAT//wAA//8AAP//AAD//wAA + //8AAP//CAj//9nZ////////////////////////k5P//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8NDf//t7f///////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////r6//9VVf//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//zw8///z8/////////////////////////////////////////// + ////////////////////////////////////////////////////////RET//wAA//8AAP//AAD//wAA + //8AAP//xMT///////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////o6P//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//3Bw///6+v////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////f3///wAA + //8AAP//AAD//wAA//8AAP//AAD//39///////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////+np//8pKf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//9ZWf//8PD///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////6+v//OTn//wAA//8AAP//AAD//wAA + //8AAP//AAD//4+P//////////////////////////////////+Tk///AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wQE//+srP////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////9ZWf//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//zw8///z8/////////////////////////////////////////// + /////////////////////////////////////////////////////////////0RE//8AAP//AAD//wAA + //8AAP//AAD//9ra//////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////6Oj//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//BAT//52d//////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////39/ + //8AAP//AAD//wAA//8AAP//AAD//wAA//+jo/////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////+np//8pKf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//xER + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//yIi///IyP////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////j4///wAA//8AAP//AAD//wAA + //8AAP//AAD//zY2///6+v///////////////////////////////////////6Wl//8EBP//AAD//wAA + //8AAP//AAD//wAA//8AAP//BAT//6ys//////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////90dP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//zw8///z8/////////////////////////////////////////// + //////////////////////////////////////////////////////////////////9ERP//AAD//wAA + //8AAP//AAD//wAA///h4f////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////+jo///AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//Ghr//8LC//////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //9/f///AAD//wAA//8AAP//AAD//wAA//8AAP//o6P///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////+np//8pKf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//5OT + ///s7P//SEj//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//BAT//4uL//////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////2dn//wgI//8AAP//AAD//wAA + //8AAP//AAD//wQE///Q0P//////////////////////////////////////////////////rKz//wQE + //8AAP//AAD//wAA//8AAP//AAD//wAA//8EBP//qKj///////////////////////////////////// + //////////////////////////////////////////////////////////////////90dP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//ykp///z8/////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////RET//wAA + //8AAP//AAD//wAA//8AAP//4eH///////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////vLz//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8aGv//S0v//+Xl//////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////f3///wAA//8AAP//AAD//wAA//8AAP//AAD//6Oj//////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////+np//8pKf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//5OT + //////////////////+Skv//CAj//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//RUX//+np + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////zk5//8AAP//AAD//wAA + //8AAP//AAD//wAA//+Cgv////////////////////////////////////////////////////////// + //+srP//BAT//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//+Tk/////////////////////////// + //////////////////////////////////////////////////////////////////90dP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//ykp///p6f////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////0RE + //8AAP//AAD//wAA//8AAP//AAD//+Hh//////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////8TE + //8AAP//AAD//wAA//8nJ///TEz//2ho//+MjP//s7P//9bW///z8/////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////39///8AAP//AAD//wAA//8AAP//AAD//wAA//8WFv//PDz//1NT//9oaP//f3///56e + //+3t///z8///+Tk//////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////+np//8pKf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//5OT + /////////////////////////////9DQ//8qKv//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8VFf//t7f///////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////5aW//8AAP//AAD//wAA + //8AAP//AAD//wAA//8xMf//+vr///////////////////////////////////////////////////// + /////////////6ys//8EBP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//5OT//////////////// + //////////////////////////////////////////////////////////////////+AgP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//ykp///p6f////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //9ERP//AAD//wAA//8AAP//AAD//wAA///h4f////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///p6f//vLz//93d//////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////9iYv//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//x4e//84OP//T0///2Rk//9/f///mpr//7Oz///Ly///4eH///// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////+np//8pKf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//5OT + ////////////////////////////////////////8/P//2tr//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//9zc///+vr///////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////+Hh//8NDf//AAD//wAA + //8AAP//AAD//wAA//8EBP//0ND///////////////////////////////////////////////////// + ////////////////////////t7f//w0N//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//k5P///// + //////////////////////////////////////////////////////////////////+Tk///AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//ykp///p6f////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////RET//wAA//8AAP//AAD//wAA//8AAP//4eH///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////0tL//3Fx//8eHv//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//Ghr//zQ0//9MTP//YWH//3p6//+Vlf//r6///8fH///h4f//+vr///////////////////// + /////////////////////////////+np//8pKf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//5OT + ////////////////////////////////////////////////////////rKz//xER//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//zEx///d3f////////////////////////////////////////// + //////////////////////////////////////////////////////////////////9BQf//AAD//wAA + //8AAP//AAD//wAA//8AAP//goL///////////////////////////////////////////////////// + ///////////////////////////////////Cwv//DQ3//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //94eP////////////////////////////////////////////////////////////+Tk///AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//xoa///d3f////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////ycn//8AAP//AAD//wAA//8AAP//AAD//+Hh//////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////9zc + //+EhP//Jyf//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8WFv//MDD//0hI + //9hYf//d3f//5GR//+rq///xMT//9bW//8pKf//AAD//wAA//8AAP//AAD//wAA//8AAP//BAT//6Gh + ///////////////////////////////////////////////////////////////////h4f//PDz//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//DQ3//6Gh//////////////////////////////// + //////////////////////////////////////////////////////////////////+Zmf//AAD//wAA + //8AAP//AAD//wAA//8AAP//Kir///b2//////////////////////////////////////////////// + /////////////////////////////////////////////8LC//8NDf//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//3R0//////////////////////////////////////////////////+Tk///AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//xoa///Z2f////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////8jI///AAD//wAA//8AAP//AAD//wAA///h4f////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////s7P//kJD//zs7 + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//BAT//6ys + //////////////////////////////////////////////////////////////////////////////r6 + //+Dg///BAT//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//WVn///Pz//////////////// + ///////////////////////////////////////////////////////////////////l5f//ERH//wAA + //8AAP//AAD//wAA//8AAP//BAT//8jI//////////////////////////////////////////////// + ////////////////////////////////////////////////////////wsL//w0N//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//dHT///////////////////////////////////////+dnf//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//xoa///Z2f////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////IyP//wAA//8AAP//AAD//wAA//8AAP//4eH///////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////8/P//6am//9HR///BAT//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//BAT//wQE + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//BAT//6ys + //////////////////////////////////////////////////////////////////////////////// + /////////////8PD//8iIv//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8iIv//zMz///// + ////////////////////////////////////////////////////////////////////////TU3//wAA + //8AAP//AAD//wAA//8AAP//AAD//3d3//////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////MzP//Ghr//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//9dXf//+vr///////////////////////+srP//BAT//wAA + //8AAP//AAD//wAA//8AAP//AAD//xER///Z2f////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////yMj//8AAP//AAD//wAA//8AAP//AAD//+Hh//////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////b2//+ysv//WVn//wgI//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8/P///lZX//+zs + ////////6+v//9bW///AwP//o6P//4OD//9ra///Vlb//0BA//8jI///BAT//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//BAT//6ys + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////8PD//1VV//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wQE + //+Li///////////////////////////////////////////////////////////////////oaH//wAA + //8AAP//AAD//wAA//8AAP//AAD//yoq///29v////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////9nZ + //8aGv//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//1VV///6+v////////////+srP//BAT//wAA + //8AAP//AAD//wAA//8AAP//AAD//w0N///Cwv////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////8jI///AAD//wAA//8AAP//AAD//wAA///h4f////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////wsL//2Rk//8VFf//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//MzP//4SE///k5P////////// + ///////////////////////////////////////////////////////////////////r6///1tb//8DA + //+jo///g4P//2tr//9WVv//QED//yMj//8EBP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//BAT//6ys + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////mZn//w0N//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//0VF///p6f//////////////////////////////////////////////////7Oz//xER + //8AAP//AAD//wAA//8AAP//AAD//wQE///IyP////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////2dn//xoa//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//VVX///r6//+srP//BAT//wAA + //8AAP//AAD//wAA//8AAP//AAD//w0N///Cwv////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////IyP//wAA//8AAP//AAD//wAA//8AAP//8/P///// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////9LS//95ef//Hh7//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//x4e//98fP//0tL///////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////+vr///W1v//wMD//6Oj//+Dg///a2v//1ZW + //9AQP//IyP//wQE//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//BAT//6ys + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////Z2f//MTH//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//Ghr//7e3/////////////////////////////////////////////1VV + //8AAP//AAD//wAA//8AAP//AAD//wAA//9vb/////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////Z2f//Ghr//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//89Pf//BAT//wAA + //8AAP//AAD//wAA//8AAP//AAD//w0N///Cwv////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////yMj//8AAP//AAD//wAA//8AAP//AAD///// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////g4P//hIT//y4u//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8VFf//aWn//8fH//////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////6+v//9bW///AwP//o6P//4OD//9ra///Vlb//0BA//8jI///CAj//6ys + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////b2//9zc///AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//d3f///r6/////////////////////////////6ys + //8AAP//AAD//wAA//8AAP//AAD//wAA//8iIv//8/P///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////93d//8pKf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wQE//+7u/////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////8jI///AAD//wAA//8AAP//AAD//wAA + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////7Oz//5WV//8/P///AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//DQ3//11d//+2tv//+vr///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////7e3 + //8VFf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//81Nf//3d3//////////////////+zs + //8VFf//AAD//wAA//8AAP//AAD//wAA//8AAP//wMD///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////6en//ykp//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wQE//+srP////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////IyP//wAA//8AAP//AAD//wAA + //8AAP////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////Pz + //+mpv//S0v//wQE//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wQE//9OTv//pqb///Pz//////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////6en//0VF//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w0N//+lpf////////// + //9iYv//AAD//wAA//8AAP//AAD//wAA//8AAP//b2////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////p6f//KSn//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wQE//+srP////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////yMj//8AAP//AAD//wAA + //8AAP//AAD///////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////6+v//trb//11d + //8NDf//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//Pz///56e///s7P////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////j4///wQE//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//15e + //+qqv//AAD//wAA//8AAP//AAD//wAA//8AAP//IiL///Pz//////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////+np//8pKf//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wQE//+srP////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////8jI///AAD//wAA + //8AAP//AAD//wAA////////////////////////+vr//+Hh///h4f//4eH//+Hh///h4f//4eH//+Hh + ///h4f//4eH//9ra///ExP//xMT//8TE///ExP//xMT//8TE///ExP//xMT//8TE//+zs///o6P//6Oj + //+jo///o6P//6Oj//+jo///o6P//6Oj//+jo///jIz//39///9/f///f3///39///9kZP//FRX//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//zMz + //+IiP//5OT///////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////MzP//Jib//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//729//////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////6en//zw8 + //8AAP//AAD//wAA//8AAP//AAD//wAA//+amv////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////DQ3//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8iIv//fHz//9XV + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////Pz//9iYv//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//2Ji//////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///z8///PDz//wAA//8AAP//AAD//wAA//+Tk/////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//FRX//21t///Hx/////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////6io//8NDf//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//x4e///w8P////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////Pz//88PP//AAD//wAA//+Tk/////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w0N//9dXf//u7v///r6//////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////4eH//zk5 + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//+0tP////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////8/P//zw8//+Pj/////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8ICP//UlL//6qq///29v////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///6+v//e3v//wQE//8AAP//AAD//wAA//8AAP//AAD//wAA//9iYv////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////29v////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//0ND//+env//7Oz///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////AwP//Hh7//wAA//8AAP//AAD//wAA//8aGv//8PD///////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////8AAP//AAD//wAA//8AAP//AAD//wgI//8jI///IyP//yMj//8jI///IyP//yMj + //8jI///IyP//yMj//8jI///IyP//zg4//9ERP//RET//0RE//9ERP//RET//0RE//9ERP//RET//0RE + //9ERP//RET//2Fh//9hYf//YWH//2Fh//9hYf//YWH//2Fh//9hYf//YWH//2Fh//9hYf//a2v//39/ + //9/f///f3///39///9/f///lZX//+Tk//////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////+zs//9RUf//AAD//wAA//8AAP//rKz///////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////5aW//8ICP//VVX///////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////1NT//+zs//////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + + + \ No newline at end of file diff --git a/sudppipe_modified/acpdump2.h b/sudppipe_modified/acpdump2.h new file mode 100644 index 0000000..24a8ada --- /dev/null +++ b/sudppipe_modified/acpdump2.h @@ -0,0 +1,363 @@ +/* + Copyright 2008,2009 Luigi Auriemma + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + http://www.gnu.org/licenses/gpl-2.0.txt +*/ + +#include +#include +#include +#include +#include "ip2.h" + +#if defined ACPDUMP_LOCK && WIN32 + #include + #define ACPDUMP_LOCK_VAR static LONG is_writing = 0; + #define ACPDUMP_LOCK_START while(InterlockedExchange(&is_writing, 1)) Sleep(0); + #define ACPDUMP_LOCK_END InterlockedExchange(&is_writing, 0); +#else + #define ACPDUMP_LOCK_VAR + #define ACPDUMP_LOCK_START + #define ACPDUMP_LOCK_END +#endif + + + +#define ACPDUMP_VER "0.2c" + + + +#ifdef ACPDUMP_ADDR_STRUCT // define this one if you don't have the following struct + +struct in_addr { + union { + struct { uint8_t s_b1,s_b2,s_b3,s_b4; } S_un_b; + struct { uint16_t s_w1,s_w2; } S_un_w; + uint32_t S_addr; + } S_un; +#define s_addr S_un.S_addr +#define s_host S_un.S_un_b.s_b2 +#define s_net S_un.S_un_b.s_b1 +#define s_imp S_un.S_un_w.s_w2 +#define s_impno S_un.S_un_b.s_b4 +#define s_lh S_un.S_un_b.s_b3 +}; + +struct sockaddr_in { + int16_t sin_family; + uint16_t sin_port; + struct in_addr sin_addr; + char sin_zero[8]; +}; + +struct sockaddr { + uint16_t sa_family; + char sa_data[14]; +}; + +#endif + +struct timevalx { + int32_t tv_sec; + int32_t tv_usec; +}; + + + +uint32_t str2ip(uint8_t *data) { + unsigned a, b, c, d; + + if(!data[0]) return(0); + sscanf((char *)data, "%u.%u.%u.%u", &a, &b, &c, &d); + return((a & 0xff) | ((b & 0xff) << 8) | ((c & 0xff) << 16) | ((d & 0xff) << 24)); +} + + + +uint8_t *ip2str(uint32_t ip) { + static uint8_t data[16]; + + sprintf((char *)data, "%u.%u.%u.%u", + (ip & 0xff), ((ip >> 8) & 0xff), ((ip >> 16) & 0xff), ((ip >> 24) & 0xff)); + return(data); +} + + +uint16_t net16(uint16_t num) { + int endian = 1; // big endian + + if(!*(char *)&endian) return(num); + return((num << 8) | (num >> 8)); +} + + + +uint32_t net32(uint32_t num) { + int endian = 1; // big endian + + if(!*(char *)&endian) return(num); + return(((num & 0xff000000) >> 24) | + ((num & 0x00ff0000) >> 8) | + ((num & 0x0000ff00) << 8) | + ((num & 0x000000ff) << 24)); +} + + + +uint16_t in_cksum(void *data, int len, uint32_t *ret_sum) { + uint32_t sum = 0; + int i = len >> 1, + endian = 1; // big endian + uint16_t crc, + *p = (uint16_t *)data; + + if(*(char *)&endian) endian = 0; + if(ret_sum) sum = *ret_sum; + while(i--) sum += *p++; + if(len & 1) sum += *p & (endian ? 0xff00 : 0xff); + if(ret_sum) *ret_sum = sum; + crc = sum = (sum >> 16) + (sum & 0xffff); + if(sum >>= 16) crc += sum; + if(!endian) crc = (crc >> 8) | (crc << 8); + return(~crc); +} + + + +void putxx(FILE *fd, uint32_t num, int bits) { + int i, + bytes; + + bytes = bits >> 3; + for(i = 0; i < bytes; i++) { + fputc(num >> (i << 3), fd); + } +} + + + +void create_acp(FILE *fd) { + if(!fd) return; + putxx(fd, 0xa1b2c3d4, 32); + putxx(fd, 2, 16); + putxx(fd, 4, 16); + putxx(fd, 0, 32); + putxx(fd, 0, 32); + putxx(fd, 65535, 32); + putxx(fd, 1, 32); + fflush(fd); +} + + + +void acp_dump(FILE *fd, int type, int protocol, uint32_t src_ip, uint16_t src_port, uint32_t dst_ip, uint16_t dst_port, uint8_t *data, int len, uint32_t *seq1, uint32_t *ack1, uint32_t *seq2, uint32_t *ack2) { + ACPDUMP_LOCK_VAR + struct { + struct timevalx ts; + uint32_t caplen; + uint32_t len; + } acp_pck; + static const uint8_t ethdata[14] = + "\x00\x00\x00\x00\x00\x00" /* dest */ + "\x00\x00\x00\x00\x00\x00" /* source */ + "\x08\x00"; /* type */ + udph_pseudo udp_ps; + uint32_t crc; + iph ip; + udph udp; + tcph tcp; + icmph icmp; + igmph igmp; + int size, + tpsize, + close_tcp; + uint8_t *tp; + + if(!fd) return; + if(!type && !protocol) { + protocol = 6; + } else if((type == 1) && !protocol) { + protocol = 6; + } else if((type == 2) && !protocol) { + protocol = 17; + } else if((type == 3) && !protocol) { + protocol = 255; + } + tp = NULL; + tpsize = 0; + if(type == 3) { + // SOCK_RAW + } else if(protocol == 6) { + tp = (uint8_t *)&tcp; + tpsize = sizeof(tcph); + } else if(protocol == 17) { + tp = (uint8_t *)&udp; + tpsize = sizeof(udph); + } else if(protocol == 1) { + tp = (uint8_t *)&icmp; + tpsize = sizeof(icmph); + } else if(protocol == 2) { + tp = (uint8_t *)&igmp; + tpsize = sizeof(igmph); + } + + close_tcp = 0; + if(len < 0) { + close_tcp = 1; + len = 0; + } + + if((type == 3) && (protocol == 255)) { + // SOCK_RAW, IPPROTO_RAW + size = len; + } else { + size = sizeof(iph) + tpsize + len; + } + + if((sizeof(acp_pck) + sizeof(ethdata) + size) > 0xffff) { // divides the packet if it's too big + size = len; // use size as new "len" so acp_dump can be called with the same arguments + if((type == 3) && (protocol == 255)) { + len = 0xffff - (sizeof(acp_pck) + sizeof(ethdata)); + } else { + len = 0xffff - (sizeof(acp_pck) + sizeof(ethdata) + sizeof(iph) + tpsize); + } + while(size > 0) { + if(size < len) len = size; + acp_dump(fd, type, protocol, src_ip, src_port, dst_ip, dst_port, data, len, seq1, ack1, seq2, ack2); + size -= len; + data += len; + } + return; + } + + // use the following if gettimeofday doesn't exist on Windows + acp_pck.ts.tv_sec = time(NULL); + //acp_pck.ts.tv_usec = GetTickCount(); + + acp_pck.caplen = sizeof(ethdata) + size; + acp_pck.len = sizeof(ethdata) + size; + + ip.ihl_ver = 0x45; + ip.tos = 0; + ip.tot_len = net16(size); + ip.id = net16(1); + ip.frag_off = net16(0); + ip.ttl = 128; + ip.protocol = protocol; + ip.check = net16(0); + ip.saddr = src_ip; + ip.daddr = dst_ip; + ip.check = net16(in_cksum((uint8_t *)&ip, sizeof(iph), NULL)); + + if(!tp) { + // SOCK_RAW + } else if(protocol == 6) { + tcp.source = src_port; + tcp.dest = dst_port; + tcp.seq = net32(*seq1); + tcp.ack_seq = net32(*ack1); + tcp.doff = sizeof(tcph) << 2; + if(close_tcp) { + tcp.flags = TH_RST | TH_FIN | TH_ACK; + } else if((*seq1 == 1) && (*ack1 == 0)) { + tcp.flags = TH_SYN; + } else if((*seq1 == 1) && (*ack1 == 2)) { + tcp.flags = TH_SYN | TH_ACK; + } else if((*seq1 == 2) && (*ack1 == 2) && !data) { + tcp.flags = TH_ACK; + } else { + tcp.flags = TH_PSH | TH_ACK; + *ack2 = *seq1; + (*seq1) += len; + } + tcp.window = net16(65535); + tcp.check = net16(0); + tcp.urg_ptr = net16(0); + + } else if(protocol == 17) { + udp.source = src_port; + udp.dest = dst_port; + udp.check = net16(0); + udp.len = net16(sizeof(udph) + len); + + udp_ps.saddr = ip.saddr; + udp_ps.daddr = ip.daddr; + udp_ps.zero = 0; + udp_ps.protocol = 17; + udp_ps.length = udp.len; + crc = 0; in_cksum(&udp_ps, sizeof(udph_pseudo), &crc); + in_cksum(&udp, sizeof(udph), &crc); + udp.check = net16(in_cksum(data, len, &crc)); + + } else if(protocol == 1) { + memset(&icmp, 0, sizeof(icmph)); + icmp.icmp_type = 8; + icmp.icmp_code = 0; + crc = 0; in_cksum(&icmp, sizeof(udph_pseudo), &crc); + icmp.icmp_cksum = net16(in_cksum(data, len, &crc)); + + } else if(protocol == 2) { + igmp.igmp_type = 0x11; + igmp.igmp_code = 0; + igmp.igmp_cksum = net16(0); + igmp.igmp_group = net32(0); + crc = 0; in_cksum(&igmp, sizeof(udph_pseudo), &crc); + igmp.igmp_cksum = net16(in_cksum(data, len, &crc)); + } + + ACPDUMP_LOCK_START + fwrite(&acp_pck, sizeof(acp_pck), 1, fd); + fwrite(ethdata, sizeof(ethdata), 1, fd); + if(!((type == 3) && (protocol == 255))) { + fwrite(&ip, sizeof(iph), 1, fd); + } + if(tp) fwrite(tp, tpsize, 1, fd); + fwrite(data, len, 1, fd); + fflush(fd); + ACPDUMP_LOCK_END +} + + + +void acp_dump_handshake(FILE *fd, int type, int protocol, uint32_t src_ip, uint16_t src_port, uint32_t dst_ip, uint16_t dst_port, uint8_t *data, int len, uint32_t *seq1, uint32_t *ack1, uint32_t *seq2, uint32_t *ack2) { + if(!fd) return; + if(!seq1 || !ack1 || !seq2 || !ack2) return; + + *seq1 = 0; // useless initialization + *ack1 = 0; + *seq2 = 0; + *ack2 = 0; + if(!((!type && !protocol) || ((type == 1) && !protocol) || (protocol == 6))) { + return; // if it's not tcp don't make handshake + } + + *seq1 = 1; + *ack1 = 0; + acp_dump(fd, type, protocol, src_ip, src_port, dst_ip, dst_port, NULL, 0, seq1, ack1, seq2, ack2); + + *ack2 = *seq1 + 1; + *seq2 = 1; + acp_dump(fd, type, protocol, dst_ip, dst_port, src_ip, src_port, NULL, 0, seq2, ack2, seq1, ack1); + + *ack1 = *seq2 + 1; + (*seq1)++; + acp_dump(fd, type, protocol, src_ip, src_port, dst_ip, dst_port, data, len, seq1, ack1, seq2, ack2); + + (*seq2)++; +} + + diff --git a/sudppipe_modified/ip2.h b/sudppipe_modified/ip2.h new file mode 100644 index 0000000..00e048f --- /dev/null +++ b/sudppipe_modified/ip2.h @@ -0,0 +1,138 @@ +/* + Copyright 2008,2009 Luigi Auriemma + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + http://www.gnu.org/licenses/gpl-2.0.txt +*/ + +#define TH_FIN 0x01 +#define TH_SYN 0x02 +#define TH_RST 0x04 +#define TH_PSH 0x08 +#define TH_ACK 0x10 +#define TH_URG 0x20 +#define TH_ECN 0x40 +#define TH_CWR 0x80 + + + +#pragma pack(1) + +typedef struct { + uint8_t ihl_ver; + uint8_t tos; + uint16_t tot_len; + uint16_t id; + uint16_t frag_off; + uint8_t ttl; + uint8_t protocol; + uint16_t check; + uint32_t saddr; + uint32_t daddr; +} iph; + +typedef struct { + uint16_t source; + uint16_t dest; + uint16_t len; + uint16_t check; +} udph; + +typedef struct { + uint32_t saddr; + uint32_t daddr; + uint8_t zero; + uint8_t protocol; + uint16_t length; +} udph_pseudo; + +typedef struct { + uint16_t source; + uint16_t dest; + uint32_t seq; + uint32_t ack_seq; + uint8_t doff; + uint8_t flags; + uint16_t window; + uint16_t check; + uint16_t urg_ptr; +} tcph; + +typedef struct { + uint8_t icmp_type; + uint8_t icmp_code; + uint16_t icmp_cksum; + union { + uint8_t ih_pptr; + uint32_t ih_gwaddr; + struct { + uint16_t icd_id; + uint16_t icd_seq; + } ih_idseq; + uint32_t ih_void; + struct { + uint16_t ipm_void; + uint16_t ipm_nextmtu; + } ih_pmtu; + struct { + uint8_t irt_num_addrs; + uint8_t irt_wpa; + uint16_t irt_lifetime; + } ih_rtradv; + } icmp_hun; + #define icmp_pptr icmp_hun.ih_pptr + #define icmp_gwaddr icmp_hun.ih_gwaddr + #define icmp_id icmp_hun.ih_idseq.icd_id + #define icmp_seq icmp_hun.ih_idseq.icd_seq + #define icmp_void icmp_hun.ih_void + #define icmp_pmvoid icmp_hun.ih_pmtu.ipm_void + #define icmp_nextmtu icmp_hun.ih_pmtu.ipm_nextmtu + #define icmp_num_addrs icmp_hun.ih_rtradv.irt_num_addrs + #define icmp_wpa icmp_hun.ih_rtradv.irt_wpa + #define icmp_lifetime icmp_hun.ih_rtradv.irt_lifetime + union { + struct { + uint32_t its_otime; + uint32_t its_rtime; + uint32_t its_ttime; + } id_ts; + struct { + iph idi_ip; + } id_ip; + struct { + uint32_t ira_addr; + uint32_t ira_preference; + } id_radv; + uint32_t id_mask; + uint8_t id_data[1]; + } icmp_dun; + #define icmp_otime icmp_dun.id_ts.its_otime + #define icmp_rtime icmp_dun.id_ts.its_rtime + #define icmp_ttime icmp_dun.id_ts.its_ttime + #define icmp_ip icmp_dun.id_ip.idi_ip + #define icmp_radv icmp_dun.id_radv + #define icmp_mask icmp_dun.id_mask + #define icmp_data icmp_dun.id_data +} icmph; + +typedef struct { + uint8_t igmp_type; + uint8_t igmp_code; + uint16_t igmp_cksum; + uint32_t igmp_group; +} igmph; + +#pragma pack() diff --git a/sudppipe_modified/show_dump.h b/sudppipe_modified/show_dump.h new file mode 100644 index 0000000..7548eaf --- /dev/null +++ b/sudppipe_modified/show_dump.h @@ -0,0 +1,68 @@ +/* + +Show_dump 0.1.1a + + Copyright 2004,2005,2006 Luigi Auriemma + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + http://www.gnu.org/licenses/gpl.txt + +This function, optimized for performace, shows the hex dump of a buffer and +places it in a stream + +Usage: + show_dump(buffer, buffer_length, stdout); + show_dump(buffer, buffer_length, fd); +*/ + +#include + + + +void show_dump(unsigned char *data, unsigned int len, FILE *stream) { + const static char hex[] = "0123456789abcdef"; + static unsigned char buff[67]; /* HEX CHAR\n */ + unsigned char chr, + *bytes, + *p, + *limit, + *glimit = data + len; + + memset(buff + 2, ' ', 48); + + while(data < glimit) { + limit = data + 16; + if(limit > glimit) { + limit = glimit; + memset(buff, ' ', 48); + } + + p = buff; + bytes = p + 50; + while(data < limit) { + chr = *data; + *p++ = hex[chr >> 4]; + *p++ = hex[chr & 15]; + p++; + *bytes++ = ((chr < ' ') || (chr >= 0x7f)) ? '.' : chr; + data++; + } + *bytes++ = '\n'; + + fwrite(buff, bytes - buff, 1, stream); + } +} + diff --git a/sudppipe_modified/sudppipe.c b/sudppipe_modified/sudppipe.c new file mode 100644 index 0000000..8d81e64 --- /dev/null +++ b/sudppipe_modified/sudppipe.c @@ -0,0 +1,741 @@ +/* + Copyright 2005,2006,2007,2008,2009 Luigi Auriemma + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + http://www.gnu.org/licenses/gpl-2.0.txt +*/ + +#include +#include +#include +#include +#include +#include +#include "acpdump2.h" +#include "show_dump.h" + +#ifdef WIN32 + #include + #include "winerr.h" + + #define close closesocket + #define in_addr_t uint32_t + #define LOADDLL hLib = LoadLibrary(fname); \ + if(!hLib) winerr(); + #define GETFUNC(x,y) x = (void *)GetProcAddress(hLib, y); \ + if(!quiet) printf(" %-10s %p\n", y, x); + //if(!x) winerr(); + #define CLOSEDLL FreeLibrary(hLib); + #define set_priority SetPriorityClass(GetCurrentProcess(), HIGH_PRIORITY_CLASS) + HINSTANCE hLib = NULL; + + void winerr(void); +#else + #include + #include + #include + #include + #include + #include + #include + #include // -ldl + + #define LOADDLL hLib = dlopen(fname, RTLD_LAZY); \ + if(!hLib) { \ + fprintf(stderr, "\nError: %s\n\n", dlerror()); \ + exit(1); \ + } + #define GETFUNC(x,y) x = (void *)dlsym(hLib, y); \ + if(!quiet) printf(" %-10s %08x\n", y, (uint32_t)x); + //error = dlerror(); + //if(error || !x) { + //fprintf(stderr, "\nError: %s\n\n", error); + //exit(1); + #define CLOSEDLL dlclose(hLib); + #define set_priority nice(-10) + void *hLib = NULL; + #define SOCKET int + #define SOCKET_ERROR (-1) +#endif + +typedef uint8_t u8; +typedef uint16_t u16; +typedef uint32_t u32; + + + +#define VER "0.4.1" +#define BUFFSZ 0xffff +#define RECVFROMF(X) \ + psz = sizeof(struct sockaddr_in); \ + len = recvfrom(X, buff, BUFFSZ, 0, (struct sockaddr *)&peerl, &psz); \ + if(len < 0) continue; +#define SENDTOFC(X,Y) \ + if(sendtof(sdl, buff, len, &c->peer, X) != len) { \ + c = check_sd(&c->peer, 1); /* it's ever c->peer */ \ + Y; \ + if(!c) break; \ + } + +#ifndef IP_TOS + #define IP_TOS 3 +#endif + + + +// default: __cdecl +static int (* sudp_init)(u8 *) = NULL; // initialization +static int (* sudp_pck)(u8 *, int) = NULL; // modification of the packet +static int (* sudp_vis)(u8 *, int) = NULL; // modification for visualization only + +//static SOCKET (*mysocket)(int af, int type, int protocol) = NULL; +//static int (*myconnect)(SOCKET s, const struct sockaddr *name, int namelen) = NULL; +//static SOCKET (*myaccept)(SOCKET s, const struct sockaddr *name, int *namelen) = NULL; +//static int (*mybind)(SOCKET s, const struct sockaddr *name, int namelen) = NULL; +//static int (*myclose)(SOCKET s) = NULL; +//static int (*myrecv)(SOCKET s, char *buf, int len, int flags) = NULL; +static int (*myrecvfrom)(SOCKET s, char *buf, int len, int flags, struct sockaddr *from, int *fromlen) = NULL; +//static int (*mysend)(SOCKET s, char **retbuf, int len, int flags) = NULL; +static int (*mysendto)(SOCKET s, char **retbuf, int len, int flags, const struct sockaddr *to, int tolen) = NULL; + + + +struct clients_struct { + int sd; // it's needed to use a different source port for each packet + struct sockaddr_in peer; + time_t timez; + struct clients_struct *next; +} *clients = NULL; + +struct sockaddr_in *dhost = NULL; +in_addr_t lhost = INADDR_ANY, + Lhost = INADDR_ANY; +int multisock = 0, + samesock = 0, + quiet = 0, + timeout = 60; // NAT uses a timeout of 5 minutes (300 seconds) + + + +int sendtof(int s, char *buf, int len, struct sockaddr_in *to, int do_mysendto); +int bind_udp_socket(struct sockaddr_in *peer, in_addr_t iface, u16 port); +struct clients_struct *check_sd(struct sockaddr_in *peer, int force_remove); +struct sockaddr_in *create_peer_array(u8 *list, u16 default_port); +void show_peer_array(u8 *str, struct sockaddr_in *peer); +void loaddll(u8 *fname, u8 *par); +in_addr_t resolv(char *host); +void std_err(void); + + + +int main(int argc, char *argv[]) { + struct clients_struct *c = NULL, + *tmpc; + struct sockaddr_in peerl, + peer0, + *psrc = NULL, + *pdst = NULL; + struct timeval tout; + FILE *fdcap = NULL; + fd_set readset; + int sdl = 0, + sdi = 0, + sd0 = 0, + selsock = 0, + i, + len = 0, + psz = 0, + hexdump = 0, + t, + everyone = 0, + priority = 0; + u16 port, + lport, + inject = 0; + u8 tmp[16], + *buff = NULL, + *acpfile = NULL, + *dllname = NULL, + *dllpar = NULL; + +#ifdef WIN32 + WSADATA wsadata; + WSAStartup(MAKEWORD(1,0), &wsadata); +#endif + + setbuf(stdout, NULL); + setbuf(stderr, NULL); + if(argc < 4) { + fputs("\n" + "Simple UDP proxy/pipe "VER"\n" + "by Luigi Auriemma\n" + "e-mail: aluigi@autistici.org\n" + "web: aluigi.org\n" + "\n", stderr); + + + printf("\n" + "Usage: %s [options] \n" + "\n" + "Options:\n" + "-x show the hex dump of each packet\n" + "-a FILE create a CAP (tcpdump) file in which storing all the packets\n" + "-b IP bind only the input interface identified with IP\n" + "-B IP as above but works only for the outgoing socket, this means you can\n" + " decide to use a secondary interface for connecting to the host (for\n" + " example using a wireless connection instead of the main one)\n" + "-l LIB load a dll/so file which will be used to process all the incoming\n" + " packets. The library must contain the following __cdecl functions:\n" + " int sudp_init(char *data); // if you need initialization\n" + " int sudp_pck(char *data, int len); // each packet goes here\n" + " int sudp_vis(char *data, int len); // for visualization only\n" + " int myrecvfrom(...cut...); // proxocket plugin\n" + " int mysendto(...cut...); // proxocket plugin\n" + "-L PAR parameter for the initialization of the above function,\n" + " if the plugin library supports parameters use -L \"\" for help/list\n" + "-e forward each packet to anyone (clients and server) except the sender,\n" + " it works just like a chat or a broadcaster\n" + "-i PORT injection option, listen on the port PORT and each packet received\n" + " here is sent to the server from all the connected clients\n" + "-X in case of multiple hosts assigns a new socket to each client, this\n" + " is useful if the hosts are the same for using multiple source ports\n" + "-Y just the opposite of the above one, ANY client has the same port\n" + "-t SECS seconds of inactivity after which closing the client socket (%d)\n" + "-p increase process priority\n" + "-q quiet output\n" + "\n" + "* can be also a sequence of hostnames and IP addresses separated by\n" + " comma to which will be sent and received all the packets at the same time.\n" + " can also contain the port using the syntax IP:PORT, such port will\n" + " override the default one set by .\n" + " if is 0 the tool will consider as a local port and\n" + " will act just like a double binding mode (experimental!)\n" + "\n", argv[0], timeout); + exit(1); + } + + argc -= 3; + for(i = 1; i < argc; i++) { + if(((argv[i][0] != '-') && (argv[i][0] != '/')) || (strlen(argv[i]) != 2)) { + printf("\nError: wrong argument (%s)\n", argv[i]); + exit(1); + } + switch(argv[i][1]) { + case 'x': hexdump = 1; break; + case 'a': acpfile = argv[++i]; break; + case 'b': lhost = resolv(argv[++i]); break; + case 'B': Lhost = resolv(argv[++i]); break; + case 'l': dllname = argv[++i]; break; + case 'L': dllpar = argv[++i]; break; + case 'e': everyone = 1; break; + case 'i': inject = atoi(argv[++i]); break; + case 'p': priority = 1; break; + case 'q': quiet = 1; break; + case 'X': multisock = 1; break; + case 'Y': samesock = 1; break; + case 't': timeout = atoi(argv[++i]); break; + default: { + fprintf(stderr, "\nError: wrong command-line argument (%s)\n\n", argv[i]); + exit(1); + } break; + } + } + + port = atoi(argv[argc + 1]); + lport = atoi(argv[argc + 2]); + dhost = create_peer_array(argv[argc], port); + + if(lhost == INADDR_NONE) std_err(); + if(Lhost == INADDR_NONE) std_err(); + + sdl = bind_udp_socket(NULL, lhost, lport); + + if(inject) sdi = bind_udp_socket(NULL, lhost, inject); + + if(samesock) { + if(!quiet) fprintf(stderr, "- same socket/port mode\n"); + samesock = bind_udp_socket(NULL, Lhost, 0); + } + if(multisock) { + if(!quiet) fprintf(stderr, "- multi socket/port mode\n"); + } + + if(!quiet) { + if(dhost[0].sin_addr.s_addr) { + show_peer_array("- remote hosts: ", dhost); + } else { + fprintf(stderr, "- double binding\n"); + fprintf(stderr, "- dest_port %hu\n", port); + } + } + + if(dllname) loaddll(dllname, dllpar); + + if(acpfile) { + if(!quiet) printf("- create ACP file %s\n", acpfile); + fdcap = fopen(acpfile, "rb"); + if(fdcap) { + fclose(fdcap); + fprintf(stderr, "- do you want to overwrite (Y) or append (A) the file? (y/a/N)\n "); + fgets(tmp, sizeof(tmp), stdin); + t = tmp[0]; + if(t == 'a') { + } else if(t == 'y') { + } else return(0); + } else { + t = 0; + } + fdcap = fopen(acpfile, (t == 'a') ? "ab" : "wb"); + if(!fdcap) std_err(); + if(t != 'a') create_acp(fdcap); + } + + if(priority) set_priority; + + if(!dhost[0].sin_addr.s_addr) { + sd0 = bind_udp_socket(&peer0, Lhost, port); + printf("- wait first packet from the server (double-binding mode)\n"); + FD_ZERO(&readset); // wait first client's packet, this is NEEDED! + FD_SET(sd0, &readset); + if(select(sd0 + 1, &readset, NULL, NULL, NULL) + < 0) std_err(); + } + + printf("- ready\n"); + FD_ZERO(&readset); // wait first client's packet, this is NEEDED! + FD_SET(sdl, &readset); + if(select(sdl + 1, &readset, NULL, NULL, NULL) + < 0) std_err(); + + buff = malloc(BUFFSZ); + if(!buff) std_err(); + clients = NULL; + + for(;;) { + FD_ZERO(&readset); + FD_SET(sdl, &readset); + selsock = sdl; + if(sd0) { + FD_SET(sd0, &readset); + if(sd0 > selsock) selsock = sd0; + } + if(sdi) { + FD_SET(sdi, &readset); + if(sdi > selsock) selsock = sdi; + } + for(c = clients; c; c = c->next) { + FD_SET(c->sd, &readset); + if(c->sd > selsock) selsock = c->sd; + } + + tout.tv_sec = timeout; // this is useful if we want to free memory + tout.tv_usec = 0; // ...rarely used but I think it's good here + t = select(selsock + 1, &readset, NULL, NULL, &tout); + if(t < 0) std_err(); + if(!t) { // timeout reached, call check_sd for removing the old clients + memset(&peerl, 0, sizeof(struct sockaddr_in)); + check_sd(&peerl, 0); + continue; + } + + if(sdi && (FD_ISSET(sdi, &readset))) { + RECVFROMF(sdi) + + if(!quiet) printf("- packet injection from %s:%hu (%d bytes)\n", + inet_ntoa(peerl.sin_addr), ntohs(peerl.sin_port), len); + + psrc = &peerl; + pdst = &dhost[0]; // the first one is enough, it's used only for the CAP file + + if(sudp_pck) len = sudp_pck(buff, len); // packets modification + + for(c = clients; c; c = c->next) { + if(sd0) sendtof(sd0, buff, len, &peer0, 1); + for(i = 0; dhost[i].sin_addr.s_addr; i++) { + sendtof(c->sd, buff, len, &dhost[i], 1); + } + } + + if(everyone) { + for(c = clients; c; c = c->next) { + SENDTOFC(1,) + } + } + + } else if(sd0 && FD_ISSET(sd0, &readset)) { // experimental and useless + RECVFROMF(sd0) + + psrc = &peerl; + pdst = &peer0; // yes it's wrong but it's not necessary + + if(sudp_pck) len = sudp_pck(buff, len); // packets modification + + for(c = clients; c; c = c->next) { + SENDTOFC(1,) + } + + if(everyone) { + // nothing to do here + } + } else if(FD_ISSET(sdl, &readset)) { + RECVFROMF(sdl) + + c = check_sd(&peerl, 0); // check if this is a new or existent client + if(!c) continue; + + psrc = &c->peer; + pdst = &dhost[0]; // the first one is enough, it's used only for the CAP file + + if(sudp_pck) len = sudp_pck(buff, len); // packets modification + + if(sd0) sendtof(sd0, buff, len, &peer0, 1); + if(multisock) { + i = 0; + for(c = clients; c; c = c->next) { + if(!dhost[i].sin_addr.s_addr) break; + if(memcmp(&c->peer, &peerl, sizeof(struct sockaddr_in))) continue; + sendtof(c->sd, buff, len, &dhost[i], 1); + i++; + } + } else { + for(i = 0; dhost[i].sin_addr.s_addr; i++) { + sendtof(c->sd, buff, len, &dhost[i], 1); + } + } + + if(everyone) { + tmpc = c; + for(c = clients; c; c = c->next) { + if(c == tmpc) continue; + SENDTOFC(1,) + } + } + } else { + for(c = clients; c; c = c->next) { + if(!FD_ISSET(c->sd, &readset)) continue; + RECVFROMF(c->sd) + + psrc = &peerl; + pdst = &c->peer; + + if(sudp_pck) len = sudp_pck(buff, len); // packets modification + if(myrecvfrom) len = myrecvfrom(c->sd, buff, len, 0, (struct sockaddr *)psrc, &psz); + + SENDTOFC(0, pdst = NULL) // like SENDTOFC but without the handling of mysendto + + if(everyone || samesock) { + tmpc = c; + for(c = clients; c; c = c->next) { + if(c == tmpc) continue; + SENDTOFC(1,) + } + } + break; + } + } + + if(!psrc || !pdst) continue; // the following is only for visualization + + if(fdcap) acp_dump( + fdcap, SOCK_DGRAM, IPPROTO_UDP, + psrc->sin_addr.s_addr, psrc->sin_port, pdst->sin_addr.s_addr, pdst->sin_port, + buff, len, + NULL, NULL, NULL, NULL); + + if(sudp_vis) len = sudp_vis(buff, len); + + if(hexdump) { + if(!quiet) { + printf("\n%s:%hu -> ", inet_ntoa(psrc->sin_addr), ntohs(psrc->sin_port)); + printf("%s:%hu\n", inet_ntoa(pdst->sin_addr), ntohs(pdst->sin_port)); + } + show_dump(buff, len, stdout); + } + } + + close(sdl); + if(sdi) close(sdi); + if(sd0) close(sd0); + if(fdcap) fclose(fdcap); + if(hLib) CLOSEDLL + free(buff); + return(0); +} + + + +int sendtof(int s, char *buf, int len, struct sockaddr_in *to, int do_mysendto) { + int oldlen = 0, + ret; + char *oldbuf = NULL; + + if(!do_mysendto) { + return(sendto(s, buf, len, 0, (struct sockaddr *)to, sizeof(struct sockaddr_in))); + } + + if(mysendto) { + oldbuf = buf; + oldlen = len; + ret = mysendto(s, &buf, len, 0, (struct sockaddr *)to, sizeof(struct sockaddr_in)); + if(ret >= 0) { + // call real function + } else if(ret == SOCKET_ERROR) { + goto quit_and_free; + } else { + ret = oldlen; + goto quit_and_free; + } + len = ret; + } + ret = sendto(s, buf, len, 0, (struct sockaddr *)to, sizeof(struct sockaddr_in)); +quit_and_free: + if(mysendto) { + if(oldbuf != buf) free(buf); + if(ret == len) ret = oldlen; + } + return(ret); +} + + + +struct clients_struct *check_sd(struct sockaddr_in *peer, int force_remove) { + struct clients_struct *c, + *tmp, + *prev, + *ret; + time_t curr; + int multi = 0; + + curr = time(NULL); + prev = NULL; + ret = NULL; + + for(c = clients; c; ) { + if((c->peer.sin_addr.s_addr == peer->sin_addr.s_addr) && (c->peer.sin_port == peer->sin_port)) { + c->timez = curr; + ret = c; + if(force_remove) { + c->timez = (curr - timeout) - 1; + ret = prev; + } + } + if((curr - c->timez) >= timeout) { + if(!quiet) printf("- remove %s:%hu\n", + inet_ntoa(c->peer.sin_addr), ntohs(c->peer.sin_port)); + + tmp = c->next; + if(samesock) { + // do NOT close c->sd! + } else { + close(c->sd); + } + free(c); + if(prev) { // second, third and so on + prev->next = tmp; + } else { // the first only + clients = tmp; + } + c = tmp; // already the next + } else { + prev = c; + c = c->next; // get the next + } + } + + if(force_remove) return(ret); + if(ret) return(ret); + if((peer->sin_addr.s_addr == INADDR_ANY) || (peer->sin_addr.s_addr == INADDR_NONE) || !peer->sin_port) return(NULL); + +multisock_doit: + c = malloc(sizeof(struct clients_struct)); + if(!c) return(NULL); + if(prev) { + prev->next = c; + } else { + clients = c; + } + + if(samesock) { + c->sd = samesock; + } else { + c->sd = bind_udp_socket(NULL, Lhost, 0); + } + memcpy(&c->peer, peer, sizeof(struct sockaddr_in)); + c->timez = curr; + c->next = NULL; + + if(!quiet) printf("- add %s:%hu\n", + inet_ntoa(c->peer.sin_addr), ntohs(c->peer.sin_port)); + + if(multisock) { + prev = c; + multi++; + if(dhost[multi].sin_addr.s_addr) goto multisock_doit; + } + + return(c); +} + + + +struct sockaddr_in *create_peer_array(u8 *list, u16 default_port) { + struct sockaddr_in *ret; + int i, + size = 1; + u16 port; + u8 *p1, + *p2; + + for(p2 = list; (p1 = strchr(p2, ',')); size++, p2 = p1 + 1); + + ret = calloc(size + 1, sizeof(struct sockaddr_in)); + if(!ret) std_err(); + + for(i = 0;;) { + p1 = strchr(list, ','); + if(p1) *p1 = 0; + + port = default_port; + p2 = strchr(list, ':'); + if(p2) { + *p2 = 0; + port = atoi(p2 + 1); + } + + while(*list == ' ') list++; + ret[i].sin_addr.s_addr = resolv(list); + ret[i].sin_port = htons(port); + ret[i].sin_family = AF_INET; + + i++; + if(!p1) break; + list = p1 + 1; + } + return(ret); +} + + + +void show_peer_array(u8 *str, struct sockaddr_in *peer) { + int i; + + fputs(str, stderr); + for(i = 0; peer[i].sin_addr.s_addr; i++) { + if(i) fprintf(stderr, ", "); + fprintf(stderr, "%s:%hu", inet_ntoa(peer[i].sin_addr), ntohs(peer[i].sin_port)); + } + fputc('\n', stderr); +} + + + +int bind_udp_socket(struct sockaddr_in *peer, in_addr_t iface, u16 port) { + struct sockaddr_in peer_tmp; + int sd; + static const int + on = 1, + tos = 0x10; + static const struct + linger ling = {1,1}; + + if(!peer) peer = &peer_tmp; + peer->sin_addr.s_addr = iface; + peer->sin_port = htons(port); + peer->sin_family = AF_INET; + + if((iface != INADDR_ANY) || port) { + if(!quiet) printf("- bind UDP port %hu on interface %s\n", + ntohs(peer->sin_port), inet_ntoa(peer->sin_addr)); + } + + sd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); + if(sd < 0) std_err(); + setsockopt(sd, SOL_SOCKET, SO_REUSEADDR, (char *)&on, sizeof(on)); + if(bind(sd, (struct sockaddr *)peer, sizeof(struct sockaddr_in)) + < 0) std_err(); + + setsockopt(sd, SOL_SOCKET, SO_LINGER, (char *)&ling, sizeof(ling)); + setsockopt(sd, SOL_SOCKET, SO_BROADCAST, (char *)&on, sizeof(on)); + setsockopt(sd, IPPROTO_IP, IP_TOS, (char *)&tos, sizeof(tos)); + return(sd); +} + + + +void loaddll(u8 *fname, u8 *par) { + if(!fname) return; + + printf("- load library %s\n", fname); + + LOADDLL; + GETFUNC(sudp_init, "sudp_init"); + GETFUNC(sudp_pck, "sudp_pck"); + GETFUNC(sudp_vis, "sudp_vis"); + GETFUNC(myrecvfrom, "myrecvfrom"); + GETFUNC(mysendto, "mysendto"); + + if(sudp_init && sudp_init(par)) { + fprintf(stderr, "\nError: plugin initialization failed\n\n"); + CLOSEDLL + exit(1); + } +} + + + +in_addr_t resolv(char *host) { + struct hostent *hp; + in_addr_t host_ip; + + host_ip = inet_addr(host); + if(host_ip == INADDR_NONE) { + hp = gethostbyname(host); + if(!hp) { + fprintf(stderr, "\nError: unable to resolv hostname (%s)\n", host); + exit(1); + } else host_ip = *(in_addr_t *)hp->h_addr; + } + return(host_ip); +} + + + +#ifndef WIN32 + void std_err(void) { + perror("\nError"); + exit(1); + } +#else +void winerr(void) { + char *error; + + if(!FormatMessage( + FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, + NULL, + GetLastError(), + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + (LPTSTR)&error, + 0, + NULL)) { + error = strerror(errno); + } + printf("\nError: %s\n", error); + //LocalFree(error); + exit(1); +} +#endif + + diff --git a/sudppipe_modified/winerr.h b/sudppipe_modified/winerr.h new file mode 100644 index 0000000..edfc525 --- /dev/null +++ b/sudppipe_modified/winerr.h @@ -0,0 +1,71 @@ +/* + Header file used for manage errors in Windows + It support socket and errno too + (this header replace the previous sock_errX.h) +*/ + +#include +#include + + + +void std_err(void) { + char *error; + + switch(WSAGetLastError()) { + case 10004: error = "Interrupted system call"; break; + case 10009: error = "Bad file number"; break; + case 10013: error = "Permission denied"; break; + case 10014: error = "Bad address"; break; + case 10022: error = "Invalid argument (not bind)"; break; + case 10024: error = "Too many open files"; break; + case 10035: error = "Operation would block"; break; + case 10036: error = "Operation now in progress"; break; + case 10037: error = "Operation already in progress"; break; + case 10038: error = "Socket operation on non-socket"; break; + case 10039: error = "Destination address required"; break; + case 10040: error = "Message too long"; break; + case 10041: error = "Protocol wrong type for socket"; break; + case 10042: error = "Bad protocol option"; break; + case 10043: error = "Protocol not supported"; break; + case 10044: error = "Socket type not supported"; break; + case 10045: error = "Operation not supported on socket"; break; + case 10046: error = "Protocol family not supported"; break; + case 10047: error = "Address family not supported by protocol family"; break; + case 10048: error = "Address already in use"; break; + case 10049: error = "Can't assign requested address"; break; + case 10050: error = "Network is down"; break; + case 10051: error = "Network is unreachable"; break; + case 10052: error = "Net dropped connection or reset"; break; + case 10053: error = "Software caused connection abort"; break; + case 10054: error = "Connection reset by peer"; break; + case 10055: error = "No buffer space available"; break; + case 10056: error = "Socket is already connected"; break; + case 10057: error = "Socket is not connected"; break; + case 10058: error = "Can't send after socket shutdown"; break; + case 10059: error = "Too many references, can't splice"; break; + case 10060: error = "Connection timed out"; break; + case 10061: error = "Connection refused"; break; + case 10062: error = "Too many levels of symbolic links"; break; + case 10063: error = "File name too long"; break; + case 10064: error = "Host is down"; break; + case 10065: error = "No Route to Host"; break; + case 10066: error = "Directory not empty"; break; + case 10067: error = "Too many processes"; break; + case 10068: error = "Too many users"; break; + case 10069: error = "Disc Quota Exceeded"; break; + case 10070: error = "Stale NFS file handle"; break; + case 10091: error = "Network SubSystem is unavailable"; break; + case 10092: error = "WINSOCK DLL Version out of range"; break; + case 10093: error = "Successful WSASTARTUP not yet performed"; break; + case 10071: error = "Too many levels of remote in path"; break; + case 11001: error = "Host not found"; break; + case 11002: error = "Non-Authoritative Host not found"; break; + case 11003: error = "Non-Recoverable errors: FORMERR, REFUSED, NOTIMP"; break; + case 11004: error = "Valid name, no data record of requested type"; break; + default: error = strerror(errno); break; + } + fprintf(stderr, "\nError: %s\n", error); + exit(1); +} +