local l_RunService_0 = game:GetService("RunService");
local l_IXPService_0 = game:GetService("IXPService");
game:DefineFastFlag("IXPServiceWrapperWaitRefactor", false);
local function _()
    return game:GetFastFlag("IXPServiceWrapperWaitRefactor");
end;
return {
    InitializeAsync = function(v3, v4, v5)
        local l_status_0, l_result_0 = pcall(function()
            if l_RunService_0:IsStudio() then
                l_IXPService_0:ClearUserLayers();
            end;
            l_IXPService_0:RegisterUserLayers(v5);
            l_IXPService_0:InitializeUserLayers(v4);
            if not game:GetFastFlag("IXPServiceWrapperWaitRefactor") then
                local l_l_IXPService_0_UserLayerLoadingStatus_0 = l_IXPService_0:GetUserLayerLoadingStatus();
                while not (l_l_IXPService_0_UserLayerLoadingStatus_0 ~= Enum.IXPLoadingStatus.None) or l_l_IXPService_0_UserLayerLoadingStatus_0 == Enum.IXPLoadingStatus.Pending do
                    l_IXPService_0.OnUserLayerLoadingStatusChanged:Wait();
                    l_l_IXPService_0_UserLayerLoadingStatus_0 = l_IXPService_0:GetUserLayerLoadingStatus();
                end;
                return l_l_IXPService_0_UserLayerLoadingStatus_0;
            else
                return v3:WaitForInitialization();
            end;
        end);
        return l_status_0, l_result_0;
    end,
    WaitForInitialization = function(_)
        local l_l_IXPService_0_UserLayerLoadingStatus_1 = l_IXPService_0:GetUserLayerLoadingStatus();
        while not (l_l_IXPService_0_UserLayerLoadingStatus_1 ~= Enum.IXPLoadingStatus.None) or l_l_IXPService_0_UserLayerLoadingStatus_1 == Enum.IXPLoadingStatus.Pending do
            l_IXPService_0.OnUserLayerLoadingStatusChanged:Wait();
            l_l_IXPService_0_UserLayerLoadingStatus_1 = l_IXPService_0:GetUserLayerLoadingStatus();
        end;
        return l_l_IXPService_0_UserLayerLoadingStatus_1;
    end,
    GetLayerData = function(_, v12)
        local l_status_1, l_result_1 = pcall(function()
            return l_IXPService_0:GetUserLayerVariables(v12);
        end);
        return not not l_status_1 and l_result_1 or nil;
    end,
    LogUserLayerExposure = function(_, v16)
        pcall(function()
            l_IXPService_0:LogUserLayerExposure(v16);
        end);
    end,
    LogBrowserTrackerLayerExposure = function(_, v18)
        pcall(function()
            l_IXPService_0:LogBrowserTrackerLayerExposure(v18);
        end);
    end
};


local l_Parent_0 = script:FindFirstAncestor("ExpChat").Parent;
local v1 = require(l_Parent_0.Roact);
local l_Dictionary_0 = require(l_Parent_0.llama).Dictionary;
local _ = function(v3)
    return function(v4)
        local function v13(v5, v6)
            return l_Dictionary_0.map(v4(v6), function(v7, _)
                if type(v7) == "table" then
                    local l_status_0, l_result_0 = pcall(function()
                        return v5:FormatByKey(v7[1], v7[2]);
                    end);
                    if not l_status_0 then
                        return "";
                    else
                        return l_result_0;
                    end;
                elseif type(v7) == "string" then
                    local l_status_1, l_result_1 = pcall(function()
                        return v5:FormatByKey(v7);
                    end);
                    if not l_status_1 then
                        return "";
                    else
                        return l_result_1;
                    end;
                else
                    return "";
                end;
            end);
        end;
        return function(v14)
            local v15 = v1.Component:extend("Connected-" .. tostring(v14));
            v15.render = function(v16)
                return v1.createElement(v3.Consumer, {
                    render = function(v17)
                        return v1.createElement(v14, l_Dictionary_0.join(v16.props, v13(v17, v16.props)));
                    end
                });
            end;
            return v15;
        end;
    end;
end;
return function(v19)
    local v20 = v1.createContext(v19);
    return {
        Consumer = v20.Consumer,
        Provider = v20.Provider,
        connect = function(v21)
            local function v30(v22, v23)
                return l_Dictionary_0.map(v21(v23), function(v24, _)
                    if type(v24) == "table" then
                        local l_status_2, l_result_2 = pcall(function()
                            return v22:FormatByKey(v24[1], v24[2]);
                        end);
                        if not l_status_2 then
                            return "";
                        else
                            return l_result_2;
                        end;
                    elseif type(v24) == "string" then
                        local l_status_3, l_result_3 = pcall(function()
                            return v22:FormatByKey(v24);
                        end);
                        if not l_status_3 then
                            return "";
                        else
                            return l_result_3;
                        end;
                    else
                        return "";
                    end;
                end);
            end;
            return function(v31)
                local v32 = v1.Component:extend("Connected-" .. tostring(v31));
                v32.render = function(v33)
                    return v1.createElement(v20.Consumer, {
                        render = function(v34)
                            return v1.createElement(v31, l_Dictionary_0.join(v33.props, v30(v34, v33.props)));
                        end
                    });
                end;
                return v32;
            end;
        end
    };
end;


return require(script.Localization)({
    FormatByKey = function(_, v1)
        return v1;
    end
});


local v0 = require(script:FindFirstAncestor("ExpChat").Parent.Lumberyak).Logger.new(nil, "ExpChat");
local l_status_0, l_result_0 = pcall(function()
    return {
        level = game:DefineFastString("DebugLuaLogLevel", ""),
        pattern = game:DefineFastString("DebugLuaLogPattern", "")
    };
end);
if not l_status_0 then
    l_result_0 = {
        level = "debug",
        pattern = ""
    };
end;
v0:setContext({
    prefix = "[{loggerName} ({level})] - "
});
v0:addSink({
    maxLevel = v0.Levels.fromString(l_result_0.level),
    log = function(_, v4, _)
        if string.match(v4, l_result_0.pattern) then
            print(v4);
        end;
    end
});
return v0;


local v0 = require(script.Parent.ActionBindableEvent);
return function(v1, _)
    return function(v3)
        v0:Fire(v3);
        v1(v3);
    end;
end;


local l_UserInputService_0 = game:GetService("UserInputService");
return function(v1, v2, v3, v4)
    if l_UserInputService_0:GetPlatform() == Enum.Platform.Windows then
        v2(v3 .. " TODO: EXPCHAT-812 Test disabled on Windows", v4);
        return ;
    else
        v1(v3, v4);
        return ;
    end;
end;


local function _(v0, v1)
    local l_status_0, l_result_0 = pcall(function()
        return v0[v1];
    end);
    if l_status_0 == true then
        return l_result_0;
    else
        return nil;
    end;
end;
local function v11(v5, v6)
    for v7, v8 in pairs(v6) do
        local l_status_1, l_result_1 = pcall(function()
            return v5[v7];
        end);
        if if l_status_1 == true then l_result_1 else nil ~= v8 then
            return false;
        end;
    end;
    return true;
end;
return function(v12, v13)
    for _, v15 in ipairs(v12:GetDescendants()) do
        if v11(v15, v13) then
            return v15;
        end;
    end;
    return nil;
end;


local v0 = require(script:FindFirstAncestor("ExpChat").Parent.Promise);
local v1 = {};
v1.__index = v1;
v1.new = function(v2)
    return (setmetatable({
        goalTime = v2
    }, v1));
end;
v1.start = function(v3)
    v3.promise = v0.delay(v3.goalTime);
    return v3.promise;
end;
v1.stop = function(v4)
    if v4.promise then
        v4.promise:cancel();
    end;
end;
return v1;


local l_List_0 = require(script:FindFirstAncestor("ExpChat").Parent.llama).List;
return function(v1)
    return l_List_0.count(v1:GetChildren(), function(v2)
        return v2:IsA("TextSource");
    end);
end;


local v0 = require(script.Parent.DispatchBindableEvent);
return function(v1)
    v0.Event:Connect(function(v2)
        v1:dispatch(v2);
    end);
    v0:SetAttribute("isConnected", true);
    return v0;
end;


local l_RobloxReplicatedStorage_0 = game:GetService("RobloxReplicatedStorage");
local l_Chat_0 = game:GetService("Chat");
local l_TextChatService_0 = game:GetService("TextChatService");
local l_script_FirstAncestor_0 = script:FindFirstAncestor("ExpChat");
local l_List_0 = require(l_script_FirstAncestor_0.Parent.llama).List;
local v5 = require(l_script_FirstAncestor_0.Logger):new("ExpChat/" .. script.Name);
local function _(v6, v7)
    local l_status_0, l_result_0 = pcall(function()
        return l_Chat_0:CanUsersChatAsync(v6, v7) and l_Chat_0:CanUsersChatAsync(v7, v6);
    end);
    local v10 = l_status_0 and l_result_0;
    v5:debug("CanUsersChat: {}", (tostring(v10)));
    return v10;
end;
local function v18(v12, v13)
    local v14 = string.format("RBXWhisper:%d_%d", v12 < v13 and v12 or v13, v13 < v12 and v12 or v13);
    local l_TextChannel_0 = Instance.new("TextChannel");
    l_TextChannel_0.Name = v14;
    l_TextChannel_0.Parent = l_TextChatService_0:FindFirstChild("TextChannels") or l_TextChatService_0;
    l_TextChannel_0:AddUserAsync(v12);
    l_TextChannel_0:AddUserAsync(v13);
    l_TextChannel_0.ChildRemoved:Connect(function(_)
        if l_List_0.count(l_TextChannel_0:GetChildren(), function(v17)
            return v17:IsA("TextSource");
        end) < 2 then
            l_TextChannel_0:Destroy();
        end;
    end);
    return l_TextChannel_0;
end;
local function _(v19, v20, v21)
    local v22 = Instance.new(v19);
    v22.Name = v20;
    v22.Parent = v21;
    return v22;
end;
return function()
    local l_ExperienceChat_0 = l_RobloxReplicatedStorage_0:FindFirstChild("ExperienceChat");
    if not l_ExperienceChat_0 then
        local l_l_RobloxReplicatedStorage_0_0 = l_RobloxReplicatedStorage_0;
        local l_Folder_0 = Instance.new("Folder");
        l_Folder_0.Name = "ExperienceChat";
        l_Folder_0.Parent = l_l_RobloxReplicatedStorage_0_0;
        l_ExperienceChat_0 = l_Folder_0;
    end;
    local l_WhisperChat_0 = l_ExperienceChat_0:FindFirstChild("WhisperChat");
    if not l_WhisperChat_0 then
        local l_RemoteFunction_0 = Instance.new("RemoteFunction");
        l_RemoteFunction_0.Name = "WhisperChat";
        l_RemoteFunction_0.Parent = l_ExperienceChat_0;
        l_WhisperChat_0 = l_RemoteFunction_0;
    end;
    if l_WhisperChat_0:IsA("RemoteFunction") then
        l_WhisperChat_0.OnServerInvoke = function(v29, v30)
            v5:trace("WhisperChat remote invoked with: {}", (tostring(v30)));
            local v31 = tonumber(v30);
            local l_UserId_0 = v29.UserId;
            if v31 then
                local l_status_1, l_result_1 = pcall(function()
                    return l_Chat_0:CanUsersChatAsync(l_UserId_0, v31) and l_Chat_0:CanUsersChatAsync(v31, l_UserId_0);
                end);
                local v35 = l_status_1 and l_result_1;
                v5:debug("CanUsersChat: {}", (tostring(v35)));
                if v35 then
                    v5:trace("Creating whisper TextChannel");
                    return (v18(l_UserId_0, v31));
                end;
            end;
            return nil;
        end;
    end;
    return l_WhisperChat_0;
end;


local v0 = require(script:FindFirstAncestor("ExpChat").Parent.Rodux);
local v1 = require(script.Parent.RaiseActionAsEventMiddleware);
local v2 = require(script.Parent.installReducer);
return function(v3)
    return v0.Store.new(v2, v3, {
        v0.thunkMiddleware,
        v1
    });
end;


local l_List_0 = require(script:FindFirstAncestor("ExpChat").Parent.llama).List;
local v1 = require(script.Parent.Logger):new("ExpChat/" .. script.Name);
local v2 = require(script.Parent.sanitizeForRichText);
return function(v3, v4, v5, v6, v7, v8)
    v1:debug("Display system message: {}", v5);
    local v9 = nil;
    if type(v3) == "string" then
        if v3 ~= "" then
            local v10 = nil;
            local l_status_0, l_result_0 = pcall(function()
                return v6:FormatByKey(v3, v4);
            end);
            v10 = l_status_0;
            v9 = l_result_0;
            if not v10 then
                v9 = v8;
            end;
        end;
    else
        v9 = table.concat(l_List_0.map(v3, function(v13)
            return v6:FormatByKey(v13, v4);
        end), "\n");
    end;
    if not (not v7 or not v9) then
        v7:DisplaySystemMessage(v2(v9), v5);
    end;
end;


local l_Players_0 = game:GetService("Players");
return function(v1, v2)
    for _, v4 in ipairs(v1:GetChildren()) do
        if v4:IsA("TextSource") then
            local l_l_Players_0_PlayerByUserId_0 = l_Players_0:GetPlayerByUserId(v4.UserId);
            if l_l_Players_0_PlayerByUserId_0 and l_l_Players_0_PlayerByUserId_0 ~= v2 then
                return l_l_Players_0_PlayerByUserId_0.DisplayName;
            end;
        end;
    end;
    return nil;
end;


local l_script_FirstAncestor_0 = script:FindFirstAncestor("ExpChat");
local l_Set_0 = require(l_script_FirstAncestor_0.Parent.llama).Set;
local v2 = require(l_script_FirstAncestor_0.getOtherDisplayNameInWhisperChannel);
local v3 = {};
return function(v4, v5)
    if not ((not v4.TextChannel or not string.find(v4.TextChannel.Name, "^RBXWhisper")) or l_Set_0.has(v3, v4.TextChannel)) then
        local v6 = v2(v4.TextChannel, v5);
        if v6 then
            v3 = l_Set_0.add(v3, v4.TextChannel);
            return {
                key = "CoreScripts.TextChat.Notification.WhisperChat.Created",
                args = {
                    RBX_NAME = v6
                },
                metadata = "Roblox.Whisper.Welcome.Sent"
            };
        end;
    end;
    return nil;
end;


return {
    Events = require(script.Events),
    mountClientApp = require(script.mountClientApp),
    mountServerApp = require(script.mountServerApp),
    listenToDispatch = require(script.listenToDispatch)((require(script.ActionBindableEvent))),
    GlobalFlags = require(script.GlobalFlags)
};


local l_script_FirstAncestor_0 = script:FindFirstAncestor("ExpChat");
local l_Parent_0 = l_script_FirstAncestor_0.Parent;
local v2 = require(l_Parent_0.Rodux);
local l_Dictionary_0 = require(l_Parent_0.llama).Dictionary;
local l_Actions_0 = l_script_FirstAncestor_0.Actions;
local v5 = require(l_Actions_0.AdorneeAdded);
local v6 = require(l_Actions_0.PlayerRemoved);
local v7 = require(l_Actions_0.HumanoidDied);
local function v13(v8, v9, v10)
    for _, v12 in ipairs(v8:GetChildren()) do
        if not (not (v12.Name == v9) or not v12:IsA(v10)) then
            return v12;
        end;
    end;
    return nil;
end;
return v2.createReducer({}, {
    [v5.name] = function(v14, v15)
        return l_Dictionary_0.join(v14, {
            [v15.userId] = if v15.humanoid.Health == 0 then v13(v15.character, "Head", "BasePart") else v15.character
        });
    end,
    [v7.name] = function(v16, v17)
        local v18 = v16[v17.userId];
        local v19 = nil;
        if v18 then
            v19 = v13(v18, "Head", "BasePart") or v18;
        end;
        return l_Dictionary_0.join(v16, {
            [v17.userId] = v19
        });
    end,
    [v6.name] = function(v20, v21)
        return l_Dictionary_0.removeKey(v20, v21.userId);
    end
});


local l_script_FirstAncestor_0 = script:FindFirstAncestor("ExpChat");
local l_Parent_0 = l_script_FirstAncestor_0.Parent;
local v2 = require(l_Parent_0.Rodux);
local l_Dictionary_0 = require(l_Parent_0.llama).Dictionary;
local l_Commands_0 = l_script_FirstAncestor_0.Commands;
local v5 = require(l_Commands_0.Whisper.RBXWhisperCommand);
local v6 = require(l_Commands_0.RBXTeamCommand);
return v2.createReducer({
    RBXWhisperCommand = {
        primaryAlias = v5.alias[1],
        secondaryAlias = v5.alias[2]
    },
    RBXTeamCommand = {
        primaryAlias = v6.alias[1],
        secondaryAlias = v6.alias[2]
    }
}, {
    [require(l_script_FirstAncestor_0.Actions.CommandAliasChanged).name] = function(v7, v8)
        return l_Dictionary_0.join(v7, {
            [v8.name] = {
                primaryAlias = v8.primaryAlias,
                secondaryAlias = v8.secondaryAlias
            }
        });
    end
});


local l_script_FirstAncestor_0 = script:FindFirstAncestor("ExpChat");
local l_Parent_0 = l_script_FirstAncestor_0.Parent;
local v2 = require(l_Parent_0.Rodux);
local l_Dictionary_0 = require(l_Parent_0.llama).Dictionary;
local l_Actions_0 = l_script_FirstAncestor_0.Actions;
return v2.createReducer({
    activated = false,
    results = {},
    selectedIndex = 1,
    autocompleteType = "none"
}, {
    [require(l_Actions_0.AutocompleteDropdownActivated).name] = function(v5, v6)
        return l_Dictionary_0.join(v5, {
            activated = v6.activated
        });
    end,
    [require(l_Actions_0.AutocompleteDropdownResultsChanged).name] = function(v7, v8)
        return l_Dictionary_0.join(v7, {
            results = v8.results,
            selectedIndex = 1
        });
    end,
    [require(l_Actions_0.AutocompleteDropdownSelectionChanged).name] = function(v9, v10)
        return l_Dictionary_0.join(v9, {
            selectedIndex = v10.selectedIndex
        });
    end,
    [require(l_Actions_0.AutocompleteDropdownTypeChanged).name] = function(v11, v12)
        if v12.autocompleteType ~= v11.autocompleteType then
            return l_Dictionary_0.join(v11, {
                autocompleteType = v12.autocompleteType,
                activated = false,
                results = {},
                selectedIndex = 1
            });
        else
            return v11;
        end;
    end,
    [require(l_Actions_0.AutocompleteDropdownDeactivated).name] = function(v13, _)
        return l_Dictionary_0.join(v13, {
            autocompleteType = "none",
            activated = false,
            results = {},
            selectedIndex = 1
        });
    end
});


local l_script_FirstAncestor_0 = script:FindFirstAncestor("ExpChat");
local l_Parent_0 = l_script_FirstAncestor_0.Parent;
local v2 = require(l_Parent_0.Rodux);
local l_Dictionary_0 = require(l_Parent_0.llama).Dictionary;
local l_Actions_0 = l_script_FirstAncestor_0.Actions;
return v2.createReducer(require(script.Parent.DefaultSettings), {
    [require(l_Actions_0.ConfigurationObjectsLoaded).name] = function(v5, v6)
        return l_Dictionary_0.join(v5, v6.bubbleChatSettings);
    end,
    [require(l_Actions_0.BubbleChatSettingsChanged).name] = function(v7, v8)
        return l_Dictionary_0.join(v7, {
            [v8.property] = v8.value
        });
    end,
    [require(l_Actions_0.BubbleChatChildSettingChanged).name] = function(v9, v10)
        return l_Dictionary_0.join(v9, {
            [v10.childName] = l_Dictionary_0.join(v9[v10.childName], {
                [v10.property] = v10.value
            })
        });
    end,
    [require(l_Actions_0.BubbleChatChildRemoved).name] = function(v11, v12)
        return l_Dictionary_0.removeKey(v11, v12.childName);
    end
});


return {
    BackgroundColor3 = Color3.fromRGB(250, 250, 250),
    MaxBubbles = 3,
    BackgroundTransparency = if not require(script:FindFirstAncestor("ExpChat").Flags.getEnableChatInputBarConfigurationStyleCustomizations)() then nil else 0.1,
    Transparency = 0.1,
    TailVisible = true,
    Padding = 8,
    MaxWidth = 300,
    BubbleDuration = 15,
    AdorneeName = "HumanoidRootPart",
    MaxDistance = 100,
    MinimizeDistance = 50,
    FontFace = Font.new("rbxasset://fonts/families/SourceSansPro.json"),
    SizeAnimation = {
        Enabled = true,
        SpringDampingRatio = 1,
        SpringFrequency = 2
    },
    TransparencyAnimation = {
        Enabled = true,
        SpringDampingRatio = 1,
        SpringFrequency = 2
    },
    Voice = {
        ShowIndicator = true
    },
    UserSpecificSettings = {}
};


local l_script_FirstAncestor_0 = script:FindFirstAncestor("ExpChat");
local l_Parent_0 = l_script_FirstAncestor_0.Parent;
local v2 = require(l_Parent_0.Rodux);
local l_Dictionary_0 = require(l_Parent_0.llama).Dictionary;
local l_Actions_0 = l_script_FirstAncestor_0.Actions;
local v5 = require(l_Actions_0.LegacyBubbleChatEnabledChanged);
local v6 = require(l_Actions_0.LegacyBubbleChatSettingsChanged);
local v7 = require(script.Parent.LegacyDefaultSettings);
return v2.createReducer(v7, {
    [v5.name] = function(v8, v9)
        return l_Dictionary_0.join(v8, {
            Enabled = v9.value
        });
    end,
    [v6.name] = function(_, v11)
        local l_chatSettings_0 = v11.chatSettings;
        if l_chatSettings_0.Transparency then
            l_chatSettings_0.BackgroundTransparency = l_chatSettings_0.Transparency;
        end;
        local v13 = l_Dictionary_0.join(v7, l_chatSettings_0);
        if not (not l_chatSettings_0 or not l_chatSettings_0.UserSpecificSettings) then
            for v14, v15 in pairs(l_chatSettings_0.UserSpecificSettings) do
                local v16 = l_Dictionary_0.copyDeep(v7);
                if v15.Transparency then
                    v15.BackgroundTransparency = v15.Transparency;
                end;
                v16.UserSpecificSettings = nil;
                v13.UserSpecificSettings[v14] = l_Dictionary_0.join(v16, v15);
            end;
        end;
        return v13;
    end
});


return {
    BubbleDuration = 15,
    MaxBubbles = 3,
    BackgroundColor3 = Color3.fromRGB(250, 250, 250),
    TextColor3 = Color3.fromRGB(57, 59, 61),
    TextSize = 16,
    Font = if not require(script:FindFirstAncestor("ExpChat").Parent.UIBlox).Config.enableFontNameMapping then Enum.Font.GothamMedium else Enum.Font.BuilderSansMedium,
    Transparency = 0.1,
    BackgroundTransparency = 0.1,
    CornerEnabled = true,
    CornerRadius = UDim.new(0, 12),
    TailVisible = true,
    Padding = 8,
    MaxWidth = 300,
    BackgroundImage = {
        Image = "",
        ImageColor3 = Color3.new(1, 1, 1),
        ImageRectOffset = Vector2.new(),
        ImageRectSize = Vector2.new(),
        ScaleType = Enum.ScaleType.Stretch,
        SliceCenter = Rect.new(Vector2.new(), Vector2.new()),
        SliceScale = 1,
        TileSize = UDim2.fromScale(1, 1)
    },
    BackgroundGradient = {
        Enabled = false,
        Color = ColorSequence.new(Color3.fromRGB(150, 150, 150), Color3.fromRGB(250, 250, 250)),
        Offset = Vector2.new(),
        Rotation = 0,
        Transparency = NumberSequence.new(0)
    },
    SizeAnimation = {
        Enabled = true,
        SpringDampingRatio = 1,
        SpringFrequency = 2
    },
    TransparencyAnimation = {
        Enabled = true,
        SpringDampingRatio = 1,
        SpringFrequency = 2
    },
    VerticalStudsOffset = 0,
    LocalPlayerStudsOffset = Vector3.new(0, 0, 2),
    BubblesSpacing = 6,
    MinimizeDistance = 40,
    MaxDistance = 100,
    AdorneeName = "HumanoidRootPart",
    Voice = {
        ShowIndicator = true
    },
    UserSpecificSettings = {}
};


local l_script_FirstAncestor_0 = script:FindFirstAncestor("ExpChat");
local v1 = require(l_script_FirstAncestor_0.Parent.Rodux);
local l_Actions_0 = l_script_FirstAncestor_0.Actions;
return v1.createReducer(false, {
    [require(l_Actions_0.ChatPrivacySettingsReceived).name] = function(_, v4)
        return v4.canUserChat;
    end,
    [require(l_Actions_0.ChatPrivacySettingsFetchFailed).name] = function(_, _)
        return false;
    end
});


local l_GuiService_0 = game:GetService("GuiService");
local l_script_FirstAncestor_0 = script:FindFirstAncestor("ExpChat");
local l_Parent_0 = l_script_FirstAncestor_0.Parent;
local v3 = require(l_Parent_0.Rodux);
local l_Dictionary_0 = require(l_Parent_0.llama).Dictionary;
local l_Actions_0 = l_script_FirstAncestor_0.Actions;
local v6 = require(l_Actions_0.ChatLayoutHorizontalAlignmentChanged);
local v7 = require(l_Actions_0.ChatLayoutVerticalAlignmentChanged);
local l_Y_0 = l_GuiService_0:GetGuiInset().Y;
return v3.createReducer({
    Position = UDim2.new(0, 8, 0, 4),
    AnchorPoint = Vector2.new(0, 0),
    UIListLayoutVerticalAlignment = Enum.VerticalAlignment.Top
}, {
    [v6.name] = function(v9, v10)
        local l_Position_0 = v9.Position;
        local l_AnchorPoint_0 = v9.AnchorPoint;
        if v10.value == Enum.HorizontalAlignment.Left then
            l_Position_0 = UDim2.new(0, 8, l_Position_0.Y.Scale, l_Position_0.Y.Offset);
            l_AnchorPoint_0 = Vector2.new(0, l_AnchorPoint_0.Y);
        elseif v10.value == Enum.HorizontalAlignment.Center then
            l_Position_0 = UDim2.new(0.5, 0, l_Position_0.Y.Scale, l_Position_0.Y.Offset);
            l_AnchorPoint_0 = Vector2.new(0.5, l_AnchorPoint_0.Y);
        elseif v10.value == Enum.HorizontalAlignment.Right then
            l_Position_0 = UDim2.new(1, -8, l_Position_0.Y.Scale, l_Position_0.Y.Offset);
            l_AnchorPoint_0 = Vector2.new(1, l_AnchorPoint_0.Y);
        end;
        return l_Dictionary_0.join(v9, {
            Position = l_Position_0,
            AnchorPoint = l_AnchorPoint_0
        });
    end,
    [v7.name] = function(v13, v14)
        local l_Position_1 = v13.Position;
        local l_AnchorPoint_1 = v13.AnchorPoint;
        if v14.value == Enum.VerticalAlignment.Top then
            l_Position_1 = UDim2.new(l_Position_1.X.Scale, l_Position_1.X.Offset, 0, 4);
            l_AnchorPoint_1 = Vector2.new(l_AnchorPoint_1.X, 0);
        elseif v14.value == Enum.VerticalAlignment.Center then
            l_Position_1 = UDim2.new(l_Position_1.X.Scale, l_Position_1.X.Offset, 0.5, -l_Y_0);
            l_AnchorPoint_1 = Vector2.new(l_AnchorPoint_1.X, 0.5);
        elseif v14.value == Enum.VerticalAlignment.Bottom then
            l_Position_1 = UDim2.new(l_Position_1.X.Scale, l_Position_1.X.Offset, 1, -4);
            l_AnchorPoint_1 = Vector2.new(l_AnchorPoint_1.X, 1);
        end;
        return l_Dictionary_0.join(v13, {
            Position = l_Position_1,
            AnchorPoint = l_AnchorPoint_1,
            UIListLayoutVerticalAlignment = v14.value
        });
    end
});


local l_script_FirstAncestor_0 = script:FindFirstAncestor("ExpChat");
local l_Parent_0 = l_script_FirstAncestor_0.Parent;
local v2 = require(l_Parent_0.Rodux);
local l_Dictionary_0 = require(l_Parent_0.llama).Dictionary;
local v4 = require(l_script_FirstAncestor_0.Config);
local l_Actions_0 = l_script_FirstAncestor_0.Actions;
return v2.createReducer({
    BackgroundTransparency = v4.ChatInputBarBackgroundTransparency,
    BackgroundColor3 = v4.ChatInputBarBackgroundColor,
    TextSize = v4.ChatInputBarTextSize,
    TextColor3 = v4.ChatInputBarTextColor3,
    TextStrokeColor3 = v4.ChatInputBarTextStrokeColor,
    TextStrokeTransparency = v4.ChatInputBarTextStrokeTransparency,
    FontFace = v4.ChatInputBarFontFace,
    PlaceholderColor3 = v4.ChatInputBarPlaceholderColor,
    KeyboardKeyCode = v4.ChatInputBarDefaultFocusKeyCode,
    AutocompleteEnabled = v4.ChatInputBarDefaultAutocompleteEnabled
}, {
    [require(l_Actions_0.ConfigurationObjectsLoaded).name] = function(v6, v7)
        return l_Dictionary_0.join(v6, v7.chatInputBarSettings);
    end,
    [require(l_Actions_0.ChatInputBarSettingsChanged).name] = function(v8, v9)
        if v8[v9.property] == nil then
            return v8;
        else
            return l_Dictionary_0.join(v8, {
                [v9.property] = v9.value
            });
        end;
    end
});


return require(script:FindFirstAncestor("ExpChat").Parent.Rodux).combineReducers({
    Alignment = require(script.Parent.alignment),
    ChatWindowSettings = require(script.Parent.windowSettings),
    ChatInputBarSettings = require(script.Parent.inputBarSettings)
});


local l_script_FirstAncestor_0 = script:FindFirstAncestor("ExpChat");
local l_Parent_0 = l_script_FirstAncestor_0.Parent;
local v2 = require(l_Parent_0.Rodux);
local l_Dictionary_0 = require(l_Parent_0.llama).Dictionary;
local v4 = require(l_script_FirstAncestor_0.Config);
local l_Actions_0 = l_script_FirstAncestor_0.Actions;
return v2.createReducer({
    Font = v4.ChatWindowFont,
    TextColor3 = v4.ChatWindowTextColor3,
    TextSize = v4.ChatWindowTextSize,
    TextStrokeColor3 = v4.ChatWindowTextStrokeColor,
    TextStrokeTransparency = v4.ChatWindowTextStrokeTransparency,
    BackgroundColor3 = v4.ChatWindowBackgroundColor3,
    BackgroundTransparency = v4.ChatWindowBackgroundTransparency,
    HeightScale = 1,
    WidthScale = 1
}, {
    [require(l_Actions_0.ConfigurationObjectsLoaded).name] = function(v6, v7)
        return l_Dictionary_0.join(v6, v7.chatWindowSettings);
    end,
    [require(l_Actions_0.ChatWindowSettingsChanged).name] = function(v8, v9)
        if v8[v9.property] then
            return l_Dictionary_0.join(v8, {
                [v9.property] = v9.value
            });
        else
            return v8;
        end;
    end
});


return require(script:FindFirstAncestor("ExpChat").Parent.Rodux).combineReducers({
    isChatInputBarEnabled = require(script.isChatInputBarEnabled),
    isChatWindowEnabled = require(script.isChatWindowEnabled),
    isChatHotkeyEnabled = require(script.isChatHotkeyEnabled),
    transparency = require(script.transparency)
});


local l_script_FirstAncestor_0 = script:FindFirstAncestor("ExpChat");
local l_Parent_0 = l_script_FirstAncestor_0.Parent;
local v2 = require(l_Parent_0.Rodux);
local l_Dictionary_0 = require(l_Parent_0.llama).Dictionary;
local l_Actions_0 = l_script_FirstAncestor_0.Actions;
local v5 = require(l_Actions_0.ChatInputBarConfigurationEnabled);
local v6 = require(l_Actions_0.SetCoreGuiEnabledChanged);
local v7 = require(l_Actions_0.ClientAppLoaded);
local v8 = require(l_Actions_0.DevTextBoxEnabledChanged);
local v9 = require(l_script_FirstAncestor_0.Flags.getTextChatServicePropertyTextBox);
return v2.createReducer({
    _propertyEnabled = true,
    _coreGuiEnabled = true,
    _devTextBoxEnabled = false,
    value = true
}, {
    [v5.name] = function(v10, v11)
        local _ = nil;
        return l_Dictionary_0.join(v10, {
            _propertyEnabled = v11.enabled,
            value = if not v9() then v10._coreGuiEnabled and v11.enabled else (v10._coreGuiEnabled and not v10._devTextBoxEnabled) and v11.enabled
        });
    end,
    [v6.name] = function(v13, v14)
        local _ = nil;
        return l_Dictionary_0.join(v13, {
            _coreGuiEnabled = v14.enabled,
            value = if not v9() then v13._propertyEnabled and v14.enabled else (v13._propertyEnabled and not v13._devTextBoxEnabled) and v14.enabled
        });
    end,
    [v8.name] = function(v16, v17)
        if not v9() then
            return v16;
        else
            return l_Dictionary_0.join(v16, {
                _devTextBoxEnabled = v17.enabled,
                value = (v16._propertyEnabled and v16._coreGuiEnabled) and not v17.enabled
            });
        end;
    end,
    [v7.name] = function(v18, v19)
        local _ = nil;
        return l_Dictionary_0.join(v18, {
            _coreGuiEnabled = v19.isChatCoreGuiEnabled,
            value = if not v9() then v18._propertyEnabled and v19.isChatCoreGuiEnabled else (v18._propertyEnabled and not v18._devTextBoxEnabled) and v19.isChatCoreGuiEnabled
        });
    end
});


local l_script_FirstAncestor_0 = script:FindFirstAncestor("ExpChat");
local l_Parent_0 = l_script_FirstAncestor_0.Parent;
local v2 = require(l_Parent_0.Rodux);
local l_Dictionary_0 = require(l_Parent_0.llama).Dictionary;
local v4 = require(l_script_FirstAncestor_0.Flags.getTextChatServicePropertyTextBox);
local l_Actions_0 = l_script_FirstAncestor_0.Actions;
return v2.createReducer({
    _propertyEnabled = true,
    _coreGuiEnabled = true,
    _topBarVisibility = true,
    _devTextBoxEnabled = false,
    value = true
}, {
    [require(l_Actions_0.ChatInputBarConfigurationEnabled).name] = function(v6, v7)
        local _ = nil;
        return l_Dictionary_0.join(v6, {
            _propertyEnabled = v7.enabled,
            value = if not v4() then (v6._topBarVisibility and v6._coreGuiEnabled) and v7.enabled else ((v6._topBarVisibility and v6._coreGuiEnabled) and not v6._devTextBoxEnabled) and v7.enabled
        });
    end,
    [require(l_Actions_0.ChatTopBarButtonActivated).name] = function(v9, v10)
        local _ = nil;
        return l_Dictionary_0.join(v9, {
            _topBarVisibility = v10.isVisible,
            value = if not v4() then (v9._propertyEnabled and v9._coreGuiEnabled) and v10.isVisible else ((v9._propertyEnabled and v9._coreGuiEnabled) and not v9._devTextBoxEnabled) and v10.isVisible
        });
    end,
    [require(l_Actions_0.SetCoreGuiEnabledChanged).name] = function(v12, v13)
        local _ = nil;
        return l_Dictionary_0.join(v12, {
            _coreGuiEnabled = v13.enabled,
            value = if not v4() then (v12._propertyEnabled and v12._topBarVisibility) and v13.enabled else ((v12._propertyEnabled and v12._topBarVisibility) and not v12._devTextBoxEnabled) and v13.enabled
        });
    end,
    [require(l_Actions_0.DevTextBoxEnabledChanged).name] = function(v15, v16)
        if not v4() then
            return v15;
        else
            return l_Dictionary_0.join(v15, {
                _devTextBoxEnabled = v16.enabled,
                value = ((v15._propertyEnabled and v15._topBarVisibility) and v15._coreGuiEnabled) and not v16.enabled
            });
        end;
    end,
    [require(l_Actions_0.ClientAppLoaded).name] = function(v17, v18)
        local _ = nil;
        return l_Dictionary_0.join(v17, {
            _coreGuiEnabled = v18.isChatCoreGuiEnabled,
            value = if not v4() then (v17._propertyEnabled and v17._topBarVisibility) and v18.isChatCoreGuiEnabled else ((v17._propertyEnabled and v17._topBarVisibility) and not v17._devTextBoxEnabled) and v18.isChatCoreGuiEnabled
        });
    end
});


local l_script_FirstAncestor_0 = script:FindFirstAncestor("ExpChat");
local l_Parent_0 = l_script_FirstAncestor_0.Parent;
local v2 = require(l_Parent_0.Rodux);
local l_Dictionary_0 = require(l_Parent_0.llama).Dictionary;
local l_Actions_0 = l_script_FirstAncestor_0.Actions;
return v2.createReducer({
    _propertyEnabled = true,
    _coreGuiEnabled = true,
    _topBarVisibility = true,
    value = true
}, {
    [require(l_Actions_0.ChatWindowConfigurationEnabled).name] = function(v5, v6)
        return l_Dictionary_0.join(v5, {
            _propertyEnabled = v6.enabled,
            value = (v5._topBarVisibility and v5._coreGuiEnabled) and v6.enabled
        });
    end,
    [require(l_Actions_0.ChatTopBarButtonActivated).name] = function(v7, v8)
        return l_Dictionary_0.join(v7, {
            _topBarVisibility = v8.isVisible,
            value = (v7._propertyEnabled and v7._coreGuiEnabled) and v8.isVisible
        });
    end,
    [require(l_Actions_0.SetCoreGuiEnabledChanged).name] = function(v9, v10)
        return l_Dictionary_0.join(v9, {
            _coreGuiEnabled = v10.enabled,
            value = (v9._propertyEnabled and v9._topBarVisibility) and v10.enabled
        });
    end,
    [require(l_script_FirstAncestor_0.Actions.ClientAppLoaded).name] = function(v11, v12)
        return l_Dictionary_0.join(v11, {
            _coreGuiEnabled = v12.isChatCoreGuiEnabled,
            value = (v11._propertyEnabled and v11._topBarVisibility) and v12.isChatCoreGuiEnabled
        });
    end
});


local l_script_FirstAncestor_0 = script:FindFirstAncestor("ExpChat");
local l_Parent_0 = l_script_FirstAncestor_0.Parent;
local v2 = require(l_Parent_0.Rodux);
local l_Dictionary_0 = require(l_Parent_0.llama).Dictionary;
local l_Actions_0 = l_script_FirstAncestor_0.Actions;
local v5 = require(l_Actions_0.ChatInputBarConfigurationEnabled);
local v6 = require(l_Actions_0.ChatTopBarButtonActivated);
local v7 = require(l_Actions_0.SetCoreGuiEnabledChanged);
local v8 = require(l_script_FirstAncestor_0.Actions.ClientAppLoaded);
local v9 = require(l_script_FirstAncestor_0.Actions.UserInteraction);
local v10 = require(l_Actions_0.IncomingMessageReceived);
local v11 = {
    textDurationUntilFadeout = 30,
    backgroundDurationUntilFadeout = 3.5,
    lastGeneralActivityTimestamp = 0,
    lastMessageActivityTimestamp = 0,
    isTextBoxFocused = false
};
local function v14(v12)
    local v13 = os.clock();
    return l_Dictionary_0.join(v11, {
        isTextBoxFocused = v12.isTextBoxFocused,
        lastGeneralActivityTimestamp = v13,
        lastMessageActivityTimestamp = v13
    });
end;
local function v16(v15)
    return l_Dictionary_0.join(v15, {
        isTextBoxFocused = v15.isTextBoxFocused,
        lastMessageActivityTimestamp = os.clock()
    });
end;
return v2.createReducer(v11, {
    [v5.name] = function(v17, v18)
        if not v18.enabled then
            return v17;
        else
            return v14(v17);
        end;
    end,
    [v6.name] = function(v19, v20)
        if not v20.isVisible then
            return v19;
        else
            return v14(v19);
        end;
    end,
    [v7.name] = function(v21, v22)
        if not v22.enabled then
            return v21;
        else
            return v14(v21);
        end;
    end,
    [v8.name] = function(v23, _)
        return v14(v23);
    end,
    [v9.name] = function(v25, v26)
        if v26.interaction == "focus" then
            local l_join_0 = l_Dictionary_0.join;
            local v28 = os.clock();
            return l_join_0(l_Dictionary_0.join(v11, {
                isTextBoxFocused = v25.isTextBoxFocused,
                lastGeneralActivityTimestamp = v28,
                lastMessageActivityTimestamp = v28
            }), {
                isTextBoxFocused = true
            });
        elseif v26.interaction == "unfocus" then
            local l_join_1 = l_Dictionary_0.join;
            local v30 = os.clock();
            return l_join_1(l_Dictionary_0.join(v11, {
                isTextBoxFocused = v25.isTextBoxFocused,
                lastGeneralActivityTimestamp = v30,
                lastMessageActivityTimestamp = v30
            }), {
                isTextBoxFocused = false
            });
        else
            return v14(v25);
        end;
    end,
    [v10.name] = function(v31, _)
        return v16(v31);
    end
});


local l_script_FirstAncestor_0 = script:FindFirstAncestor("ExpChat");
local l_Parent_0 = l_script_FirstAncestor_0.Parent;
local v2 = require(l_Parent_0.Rodux);
local l_Dictionary_0 = require(l_Parent_0.llama).Dictionary;
local l_Actions_0 = l_script_FirstAncestor_0.Actions;
return v2.createReducer({
    preferredTransparency = 1
}, {
    [require(l_Actions_0.ClientSettingsLoaded).name] = function(v5, v6)
        return l_Dictionary_0.join(v5, v6.value);
    end,
    [require(l_Actions_0.ClientSettingsChanged).name] = function(v7, v8)
        return l_Dictionary_0.join(v7, {
            [v8.property] = v8.value
        });
    end
});


local l_script_FirstAncestor_0 = script:FindFirstAncestor("ExpChat");
return require(l_script_FirstAncestor_0.Parent.Rodux).createReducer(nil, {
    [require(l_script_FirstAncestor_0.Actions.LocalCharacterLoaded).name] = function(_, v2)
        return v2.character;
    end
});


local l_script_FirstAncestor_0 = script:FindFirstAncestor("ExpChat");
return require(l_script_FirstAncestor_0.Parent.Rodux).createReducer(nil, {
    [require(l_script_FirstAncestor_0.Actions.LocalTeamChanged).name] = function(_, v2)
        return v2.team;
    end,
    [require(l_script_FirstAncestor_0.Actions.ClientAppLoaded).name] = function(_, v4)
        return v4.team;
    end
});


local l_script_FirstAncestor_0 = script:FindFirstAncestor("ExpChat");
local l_Parent_0 = l_script_FirstAncestor_0.Parent;
local v2 = require(l_Parent_0.Rodux);
local l_Set_0 = require(l_Parent_0.llama).Set;
local l_Actions_0 = l_script_FirstAncestor_0.Actions;
return v2.createReducer({}, {
    [require(l_Actions_0.UserMuted).name] = function(v5, v6)
        return l_Set_0.add(v5, v6.userId);
    end,
    [require(l_Actions_0.UserUnmuted).name] = function(v7, v8)
        return l_Set_0.subtract(v7, v8.userId);
    end
});


local l_script_FirstAncestor_0 = script:FindFirstAncestor("ExpChat");
local l_Parent_0 = l_script_FirstAncestor_0.Parent;
local v2 = require(l_Parent_0.Rodux);
local l_Dictionary_0 = require(l_Parent_0.llama).Dictionary;
local l_List_0 = require(l_Parent_0.llama).List;
local l_Actions_0 = l_script_FirstAncestor_0.Actions;
return v2.createReducer({}, {
    [require(l_Actions_0.PlayerAdded).name] = function(v6, v7)
        local v8 = string.lower(v7.displayName);
        return l_Dictionary_0.join(v6, {
            [v8] = l_List_0.append(v6[v8] or {}, v7.userId)
        });
    end,
    [require(l_Actions_0.PlayerRemoved).name] = function(v9, v10)
        return l_Dictionary_0.map(v9, function(v11)
            return l_List_0.removeValue(v11, v10.userId);
        end);
    end
});


local l_script_FirstAncestor_0 = script:FindFirstAncestor("ExpChat");
local l_Parent_0 = l_script_FirstAncestor_0.Parent;
local v2 = require(l_Parent_0.Rodux);
local l_Dictionary_0 = require(l_Parent_0.llama).Dictionary;
local l_Actions_0 = l_script_FirstAncestor_0.Actions;
return v2.createReducer({}, {
    [require(l_Actions_0.PlayerAdded).name] = function(v5, v6)
        return l_Dictionary_0.join(v5, {
            [v6.userId] = {
                userId = v6.userId,
                username = v6.username,
                displayName = v6.displayName
            }
        });
    end,
    [require(l_Actions_0.PlayerRemoved).name] = function(v7, v8)
        return l_Dictionary_0.removeKey(v7, v8.userId);
    end
});


local l_script_FirstAncestor_0 = script:FindFirstAncestor("ExpChat");
local l_Parent_0 = l_script_FirstAncestor_0.Parent;
local v2 = require(l_Parent_0.Rodux);
local l_Dictionary_0 = require(l_Parent_0.llama).Dictionary;
local l_Actions_0 = l_script_FirstAncestor_0.Actions;
return v2.createReducer({}, {
    [require(l_Actions_0.PlayerAdded).name] = function(v5, v6)
        return l_Dictionary_0.join(v5, {
            [string.lower(v6.username)] = v6.userId
        });
    end,
    [require(l_Actions_0.PlayerRemoved).name] = function(v7, v8)
        return l_Dictionary_0.filter(v7, function(v9)
            return v9 ~= v8.userId;
        end);
    end
});


local l_script_FirstAncestor_0 = script:FindFirstAncestor("ExpChat");
local l_Parent_0 = l_script_FirstAncestor_0.Parent;
local v2 = require(l_Parent_0.Rodux);
local l_Dictionary_0 = require(l_Parent_0.llama).Dictionary;
local l_Actions_0 = l_script_FirstAncestor_0.Actions;
return v2.createReducer({}, {
    [require(l_Actions_0.CharacterAdded).name] = function(v5, v6)
        return l_Dictionary_0.join(v5, {
            [v6.userId] = v6.character
        });
    end,
    [require(l_Actions_0.PlayerRemoved).name] = function(v7, v8)
        return l_Dictionary_0.removeKey(v7, v8.userId);
    end
});


return require(script:FindFirstAncestor("ExpChat").Parent.Rodux).combineReducers({
    byUserId = require(script.Parent.byUserId),
    byDisplayName = require(script.Parent.byDisplayName),
    byUsername = require(script.Parent.byUsername),
    charactersByUserId = require(script.Parent.charactersByUserId)
});


local l_script_FirstAncestor_0 = script:FindFirstAncestor("ExpChat");
local l_Parent_0 = l_script_FirstAncestor_0.Parent;
local v2 = require(l_Parent_0.Rodux);
local l_Dictionary_0 = require(l_Parent_0.llama).Dictionary;
local l_None_0 = require(l_Parent_0.llama).None;
local v5 = require(l_script_FirstAncestor_0.Logger):new("ExpChat/Reducers/" .. script.Name);
local l_Actions_0 = l_script_FirstAncestor_0.Actions;
local v7 = require(l_Actions_0.ChatInputBarActivatedTeamMode);
local v8 = require(l_Actions_0.ChatInputBarActivatedWhisperMode);
local v9 = require(l_Actions_0.ChatInputBarResetTargetChannel);
local v10 = require(l_Actions_0.ClientAppLoaded);
local v11 = require(l_Actions_0.LocalTeamChanged);
local v12 = require(l_Actions_0.TargetTextChannelPropertyChanged);
local v13 = require(l_Actions_0.TextChannelCreated);
local v14 = require(l_Actions_0.TextChannelRemoved);
local v15 = require(l_Actions_0.PlayerRemoved);
local v16 = {
    allTextChannels = {},
    targetTextChannel = nil,
    currentTeam = nil
};
local function _(v17, v18)
    local v19 = "RBXTeam" .. v18.TeamColor.Name;
    for v20, v21 in pairs(v17) do
        if v20 == v19 then
            return v21;
        end;
    end;
    return nil;
end;
local function _(v23, v24)
    for v25, v26 in pairs(v23) do
        if v25 == v24 then
            return v26;
        end;
    end;
    return nil;
end;
return v2.createReducer(v16, {
    [v10.name] = function(v28, v29)
        return l_Dictionary_0.join(v28, {
            currentTeam = if v29.team == nil then l_None_0 else v29.team
        });
    end,
    [v13.name] = function(v30, v31)
        v5:trace("TextChannelCreated: {}", v31.textChannel.Name);
        return l_Dictionary_0.join(v30, {
            allTextChannels = l_Dictionary_0.join(v30.allTextChannels, {
                [v31.textChannel.Name] = v31.textChannel
            })
        });
    end,
    [v14.name] = function(v32, v33)
        return l_Dictionary_0.join(v32, {
            allTextChannels = l_Dictionary_0.removeKey(v32.allTextChannels, v33.textChannel.Name)
        });
    end,
    [v12.name] = function(v34, v35)
        v5:trace("TargetTextChannelPropertyChanged dispatched");
        return l_Dictionary_0.join(v34, {
            targetTextChannel = if v35.textChannel == nil then l_None_0 else v35.textChannel
        });
    end,
    [v11.name] = function(v36, v37)
        if not v37.team then
            v5:trace("LocalTeamChanged dispatched with no team");
            return l_Dictionary_0.join(v36, {
                currentTeam = l_None_0,
                targetTextChannel = v36.allTextChannels.RBXGeneral or l_None_0
            });
        else
            v5:trace("LocalTeamChanged dispatched with team: {}", v37.team.Name);
            if not v36.targetTextChannel or not string.find(v36.targetTextChannel.Name, "^RBXTeam") then
                return l_Dictionary_0.join(v36, {
                    currentTeam = v37.team
                });
            else
                local l_allTextChannels_0 = v36.allTextChannels;
                local v39 = "RBXTeam" .. v37.team.TeamColor.Name;
                local v40;
                for v41, v42 in pairs(l_allTextChannels_0) do
                    if v41 == v39 then
                        v40 = v42;
                        goto label0 --[[  true, false  ]];
                    end;
                end;
                v40 = nil;
                ::label0::;
                return l_Dictionary_0.join(v36, {
                    currentTeam = v37.team,
                    targetTextChannel = if v40 == nil then v36.allTextChannels.RBXGeneral else v40
                });
            end;
        end;
    end,
    [v7.name] = function(v43, _)
        if v43.currentTeam == nil then
            v5:trace("ChatInputBarActivatedTeamMode but not on a team");
            return v43;
        else
            assert(v43.currentTeam, "This should be unreachable");
            local l_allTextChannels_1 = v43.allTextChannels;
            local v46 = "RBXTeam" .. v43.currentTeam.TeamColor.Name;
            local v47;
            for v48, v49 in pairs(l_allTextChannels_1) do
                if v48 == v46 then
                    v47 = v49;
                    goto label1 --[[  true, false  ]];
                end;
            end;
            v47 = nil;
            ::label1::;
            v5:trace("ChatInputBarActivatedTeamMode - set targetTextChannel to {}", not not v47 and v47.Name or "nil");
            return l_Dictionary_0.join(v43, {
                targetTextChannel = if v47 == nil then l_None_0 else v47
            });
        end;
    end,
    [v9.name] = function(v50, _)
        return l_Dictionary_0.join(v50, {
            targetTextChannel = v50.allTextChannels.RBXGeneral or l_None_0
        });
    end,
    [v8.name] = function(v52, v53)
        local l_allTextChannels_2 = v52.allTextChannels;
        local l_channelName_0 = v53.channelName;
        local v56;
        for v57, v58 in pairs(l_allTextChannels_2) do
            if v57 == l_channelName_0 then
                v56 = v58;
                goto label2 --[[  true, false  ]];
            end;
        end;
        v56 = nil;
        ::label2::;
        v5:trace("ChatInputBarActivatedTeamMode - set targetTextChannel to {}", not not v56 and v56.Name or "nil");
        return l_Dictionary_0.join(v52, {
            targetTextChannel = if v56 == nil then l_None_0 else v56
        });
    end,
    [v15.name] = function(v59, v60)
        local function _(v61)
            return string.find(v61, "RBXWhisper:") and string.find(v61, v60.userId);
        end;
        local l_targetTextChannel_0 = v59.targetTextChannel;
        if l_targetTextChannel_0 then
            local l_Name_0 = l_targetTextChannel_0.Name;
            if string.find(l_Name_0, "RBXWhisper:") and string.find(l_Name_0, v60.userId) then
                l_targetTextChannel_0 = v59.allTextChannels.RBXGeneral;
            end;
        end;
        return l_Dictionary_0.join(v59, {
            targetTextChannel = l_targetTextChannel_0,
            allTextChannels = l_Dictionary_0.filter(v59.allTextChannels, function(_, v66)
                return not (string.find(v66, "RBXWhisper:") and string.find(v66, v60.userId));
            end)
        });
    end
});


local l_script_FirstAncestor_0 = script:FindFirstAncestor("ExpChat");
local l_Parent_0 = l_script_FirstAncestor_0.Parent;
local v2 = require(l_Parent_0.Rodux);
local l_Dictionary_0 = require(l_Parent_0.llama).Dictionary;
local l_Actions_0 = l_script_FirstAncestor_0.Actions;
return v2.createReducer({}, {
    [require(l_Actions_0.PlayerAdded).name] = function(v5, v6)
        return l_Dictionary_0.join(v5, {
            [v6.userId] = v6.hasVerifiedBadge
        });
    end,
    [require(l_Actions_0.PlayerRemoved).name] = function(v7, v8)
        return l_Dictionary_0.removeKey(v7, v8.userId);
    end
});


local l_script_FirstAncestor_0 = script:FindFirstAncestor("ExpChat");
return require(l_script_FirstAncestor_0.Parent.Rodux).createReducer(false, {
    [require(l_script_FirstAncestor_0.Actions.VoiceEnabledChanged).name] = function(_, v2)
        return v2.enabled;
    end
});


local l_script_FirstAncestor_0 = script:FindFirstAncestor("ExpChat");
local l_Parent_0 = l_script_FirstAncestor_0.Parent;
local l_Dictionary_0 = require(l_Parent_0.llama).Dictionary;
local l_None_0 = require(l_Parent_0.llama).None;
local v4 = require(l_Parent_0.Rodux);
local l_VOICE_STATE_0 = require(l_Parent_0.VoiceChat).Constants.VOICE_STATE;
local l_Actions_0 = l_script_FirstAncestor_0.Actions;
return v4.createReducer({}, {
    [require(l_Actions_0.VoiceParticipantAdded).name] = function(v7, v8)
        local l_userId_0 = v8.userId;
        return l_Dictionary_0.join(v7, {
            [l_userId_0] = v7[l_userId_0] or "Hidden"
        });
    end,
    [require(l_Actions_0.VoiceParticipantRemoved).name] = function(v10, v11)
        return l_Dictionary_0.join(v10, {
            [v11.userId] = l_None_0
        });
    end,
    [require(l_Actions_0.VoiceParticipantsChanged).name] = function(v12, v13)
        local l_newParticipants_0 = v13.newParticipants;
        local v15 = table.clone(v12);
        for v16, v17 in l_newParticipants_0, nil, nil do
            local l_INACTIVE_0 = l_VOICE_STATE_0.INACTIVE;
            if v17.subscriptionCompleted then
                if not v17.isMutedLocally then
                    if not v17.isMuted then
                        if v17.isSignalActive then
                            l_INACTIVE_0 = l_VOICE_STATE_0.TALKING;
                        end;
                    else
                        l_INACTIVE_0 = l_VOICE_STATE_0.MUTED;
                    end;
                else
                    l_INACTIVE_0 = l_VOICE_STATE_0.LOCAL_MUTED;
                end;
            else
                l_INACTIVE_0 = l_VOICE_STATE_0.CONNECTING;
            end;
            v15[tostring(v16)] = l_INACTIVE_0;
        end;
        return v15;
    end,
    [require(l_Actions_0.VoiceStateChanged).name] = function(v19, v20)
        if not v19[v20.userId] then
            return v19;
        else
            return l_Dictionary_0.join(v19, {
                [v20.userId] = v20.newState
            });
        end;
    end
});


local l_script_FirstAncestor_0 = script:FindFirstAncestor("ExpChat");
local l_Parent_0 = l_script_FirstAncestor_0.Parent;
local l_Dictionary_0 = require(l_Parent_0.llama).Dictionary;
local l_None_0 = require(l_Parent_0.llama).None;
local v4 = require(l_Parent_0.Rodux);
local l_Actions_0 = l_script_FirstAncestor_0.Actions;
return v4.createReducer({}, {
    [require(l_Actions_0.VoiceParticipantAdded).name] = function(v6, v7)
        local l_userId_0 = v7.userId;
        return l_Dictionary_0.set(v6, l_userId_0, v6[l_userId_0] or false);
    end,
    [require(l_Actions_0.VoiceParticipantRemoved).name] = function(v9, v10)
        return l_Dictionary_0.set(v9, v10.userId, l_None_0);
    end,
    [require(l_Actions_0.VoiceParticipantToggleMuted).name] = function(v11, v12)
        if v11[v12.userId] ~= nil then
            return l_Dictionary_0.join(v11, {
                [v12.userId] = v12.isMuted
            });
        else
            return v11;
        end;
    end
});


local v0 = require(script:FindFirstAncestor("ExpChat").Parent.Rodux);
return v0.combineReducers({
    participants = require(script.Parent.participants),
    participantsMuted = if not game:DefineFastFlag("EasierUnmutingVoiceParticipantsMutedReducer", false) then v0.createReducer({}, {}) else require(script.Parent.participantsMuted),
    isEnabled = require(script.Parent.isEnabled)
});


local l_script_FirstAncestor_0 = script:FindFirstAncestor("ExpChat");
return require(l_script_FirstAncestor_0.Parent.Rodux).combineReducers({
    Messages = require(script.Messages),
    MutedUsers = require(script.MutedUsers),
    VerifiedUsers = not not require(l_script_FirstAncestor_0.Flags.FFlagShowVerifiedBadgeInNewChat)() and require(script.VerifiedUsers) or nil,
    Players = require(script.Players),
    LocalCharacter = require(script.LocalCharacter),
    TextChannels = require(script.TextChannels),
    ChatVisibility = require(script.ChatVisibility),
    CanLocalUserChat = require(script.CanLocalUserChat),
    LocalTeam = require(script.LocalTeam),
    isUsingTouch = require(script.isUsingTouch),
    shouldFocusChatInputBar = require(script.shouldFocusChatInputBar),
    Voice = require(script.Voice),
    BubbleChatSettings = require(script.BubbleChat),
    LegacyBubbleChatSettings = require(script.BubbleChat.LegacyChatReducer),
    ChatLayout = require(script.ChatLayout),
    AutoCastCommands = require(script.AutoCastCommands),
    Adornees = require(script.Adornees),
    ClientSettings = require(script.ClientSettings),
    AutocompleteDropdown = not not require(l_script_FirstAncestor_0.Flags.getEnableChatInputBarConfigurationAutocompleteEnabled)() and require(script.AutocompleteDropdown) or nil
});


local l_script_FirstAncestor_0 = script:FindFirstAncestor("ExpChat");
return require(l_script_FirstAncestor_0.Parent.Rodux).createReducer(false, {
    [require(l_script_FirstAncestor_0.Actions.ClientAppLoaded).name] = function(_, v2)
        return v2.isTouchEnabled;
    end,
    [require(l_script_FirstAncestor_0.Actions.LastInputTypeChanged).name] = function(v3, v4)
        if v4.lastInputTypeUsed == Enum.UserInputType.Touch then
            return true;
        elseif v4.lastInputTypeUsed == Enum.UserInputType.Keyboard then
            return false;
        else
            return v3;
        end;
    end
});


local l_script_FirstAncestor_0 = script:FindFirstAncestor("ExpChat");
local v1 = require(l_script_FirstAncestor_0.Parent.Rodux);
local v2 = require(l_script_FirstAncestor_0.Logger):new("ExpChat/Reducers/" .. script.Name);
return v1.createReducer(1, {
    [require(l_script_FirstAncestor_0.Actions.AvatarContextMenuWhisperSelected).name] = function(v3, _)
        v2:trace("AvatarContextMenuWhisperSelected dispatched");
        return v3 * -1;
    end
});


local l_script_FirstAncestor_0 = script:FindFirstAncestor("ExpChat");
local v1 = require(l_script_FirstAncestor_0.Flags.getFFlagOverridePlayerVerifiedBadge);
local v2 = require(l_script_FirstAncestor_0.Flags.getFStringWhitelistVerifiedUserId);
return function(v3)
    if not v1() then
        if tostring(v3.UserId) == v2() then
            return true;
        else
            return v3.HasVerifiedBadge;
        end;
    else
        return true;
    end;
end;


local l_TextLabel_0 = Instance.new("TextLabel");
l_TextLabel_0.RichText = true;
local function _(v1)
    l_TextLabel_0.Text = v1;
    return l_TextLabel_0.ContentText;
end;
return function(v3)
    l_TextLabel_0.Text = v3;
    return string.find(l_TextLabel_0.ContentText, "%S") == nil;
end;


return function(v0)
    return function(v1)
        v0.Event:Connect(v1);
    end;
end;


local l_TextChatService_0 = game:GetService("TextChatService");
local l_script_FirstAncestor_0 = script:FindFirstAncestor("ExpChat");
local l_Actions_0 = l_script_FirstAncestor_0.Actions;
local v3 = require(l_Actions_0.BubbleChatSettingsChanged);
local v4 = require(l_Actions_0.BubbleChatChildSettingChanged);
local v5 = require(l_Actions_0.BubbleChatChildRemoved);
local v6 = require(l_script_FirstAncestor_0.Config);
local v7 = require(l_script_FirstAncestor_0.Flags.getSetUpBubbleChatConfigurationChildProperties);
local l_DefaultBubbleChatChildrenCustomizationProperties_0 = v6.DefaultBubbleChatChildrenCustomizationProperties;
local v9 = {
    "ImageLabel",
    "UIGradient",
    "UICorner",
    "UIPadding"
};
local function v15(v10)
    local v11 = l_DefaultBubbleChatChildrenCustomizationProperties_0[v10.ClassName];
    local v12 = {};
    for v13, _ in pairs(v11) do
        if v10[v13] ~= nil then
            v12[v13] = v10[v13];
        end;
    end;
    return v12;
end;
local function v22(v16, v17)
    local v18 = l_DefaultBubbleChatChildrenCustomizationProperties_0[v17.ClassName];
    local v19 = {};
    for v20, _ in pairs(v18) do
        if v17[v20] ~= nil then
            table.insert(v19, (v17:GetPropertyChangedSignal(v20):Connect(function()
                v16:dispatch(v4(v17.ClassName, v20, v17[v20]));
            end)));
        end;
    end;
    return v19;
end;
local _ = function(v23)
    if v23 then
        for _, v25 in ipairs(v23) do
            v25:Disconnect();
        end;
    end;
end;
local _ = function(v27)
    for _, v29 in ipairs(v9) do
        if v29 == v27.ClassName then
            return true;
        end;
    end;
    return false;
end;
return function(v31)
    local l_BubbleChatConfiguration_0 = l_TextChatService_0:FindFirstChildOfClass("BubbleChatConfiguration");
    if not (l_BubbleChatConfiguration_0 ~= nil) or v7() == false then
        return l_DefaultBubbleChatChildrenCustomizationProperties_0;
    else
        local v33 = {};
        local v34 = {};
        assert(l_BubbleChatConfiguration_0 ~= nil, "BubbleChatConfiguration cannot be nil.");
        for _, v36 in ipairs({
            l_BubbleChatConfiguration_0:FindFirstChildOfClass("ImageLabel"),
            l_BubbleChatConfiguration_0:FindFirstChildOfClass("UIGradient"),
            l_BubbleChatConfiguration_0:FindFirstChildOfClass("UICorner"),
            (l_BubbleChatConfiguration_0:FindFirstChildOfClass("UIPadding"))
        }) do
            if v36 then
                v33[v36.ClassName] = v15(v36);
                v34[v36.ClassName] = v22(v31, v36);
            end;
        end;
        l_BubbleChatConfiguration_0.ChildRemoved:Connect(function(v37)
            local v38;
            for _, v40 in ipairs(v9) do
                if v40 == v37.ClassName then
                    v38 = true;
                    goto label0 --[[  true, false  ]];
                end;
            end;
            v38 = false;
            ::label0::;
            if v38 then
                v38 = v34[v37.ClassName];
                if v38 then
                    for _, v42 in ipairs(v38) do
                        v42:Disconnect();
                    end;
                end;
                v34[v37.ClassName] = nil;
                v31:dispatch(v5(v37.ClassName));
                v38 = l_BubbleChatConfiguration_0:FindFirstChildOfClass(v37.ClassName);
                if v38 then
                    v31:dispatch(v3(v37.ClassName, (v15(v38))));
                    v34[v38.ClassName] = v22(v31, v38);
                end;
            end;
        end);
        l_BubbleChatConfiguration_0.ChildAdded:Connect(function(v43)
            local v44;
            for _, v46 in ipairs(v9) do
                if v46 == v43.ClassName then
                    v44 = true;
                    goto label1 --[[  true, false  ]];
                end;
            end;
            v44 = false;
            ::label1::;
            if v44 and v31:getState().BubbleChatSettings[v43.ClassName] == nil then
                v31:dispatch(v3(v43.ClassName, (v15(v43))));
                v34[v43.ClassName] = v22(v31, v43);
            end;
        end);
        return v33;
    end;
end;


local l_UserGameSettings_0 = UserSettings():GetService("UserGameSettings");
local l_Actions_0 = script:FindFirstAncestor("ExpChat").Actions;
local v2 = require(l_Actions_0.ClientSettingsLoaded);
local v3 = require(l_Actions_0.ClientSettingsChanged);
return function(v4)
    v4:dispatch(v2({
        preferredTransparency = l_UserGameSettings_0.PreferredTransparency
    }));
    l_UserGameSettings_0:GetPropertyChangedSignal("PreferredTransparency"):Connect(function()
        v4:dispatch(v3("preferredTransparency", l_UserGameSettings_0.PreferredTransparency));
    end);
end;


local l_TextChatService_0 = game:GetService("TextChatService");
local l_UserInputService_0 = game:GetService("UserInputService");
local l_script_FirstAncestor_0 = script:FindFirstAncestor("ExpChat");
local l_Flags_0 = l_script_FirstAncestor_0.Flags;
local v4 = require(l_Flags_0.getEnableChatInputBarConfigurationStyleCustomizations);
local v5 = require(l_Flags_0.getTextChatServicePropertyTextBox);
local v6 = require(l_script_FirstAncestor_0.Analytics);
local l_Actions_0 = l_script_FirstAncestor_0.Actions;
local v8 = require(l_Actions_0.ConfigurationObjectsLoaded);
local v9 = require(l_Actions_0.ChatInputBarConfigurationEnabled);
local v10 = require(l_Actions_0.ChatWindowConfigurationEnabled);
local v11 = require(l_Actions_0.TargetTextChannelPropertyChanged);
local v12 = require(l_Actions_0.BubbleChatSettingsChanged);
local v13 = require(l_Actions_0.ChatLayoutVerticalAlignmentChanged);
local v14 = require(l_Actions_0.ChatLayoutHorizontalAlignmentChanged);
local v15 = require(l_Actions_0.ChatWindowSettingsChanged);
local v16 = require(l_Actions_0.ChatInputBarSettingsChanged);
local v17 = require(l_Actions_0.DevTextBoxEnabledChanged);
local v18 = require(script.Parent.setUpBubbleChatConfigurationChildren);
local v19 = require(l_script_FirstAncestor_0.Flags.getEnableChatInputBarConfigurationPropertyKeyboardKeyCode);
local v20 = require(l_script_FirstAncestor_0.Flags.getEnableBubbleChatConfigurationMaxBubbles);
local v21 = require(l_script_FirstAncestor_0.Flags.getEnableBubbleChatConfigurationTailVisible);
local v22 = require(l_script_FirstAncestor_0.Flags.getEnableChatInputBarConfigurationAutocompleteEnabled);
local function _(v23)
    local l_l_UserInputService_0_StringForKeyCode_0 = l_UserInputService_0:GetStringForKeyCode(v23);
    if not (l_l_UserInputService_0_StringForKeyCode_0 ~= nil) or l_l_UserInputService_0_StringForKeyCode_0 == "" then
        warn("ChatInputBarConfiguration.KeyboardKeyCode has an unsupported keycode for rendering UI:" .. tostring(v23));
        return false;
    else
        return true;
    end;
end;
return function(v26, v27)
    if v27.analytics then
        v6.with(v27.analytics);
    end;
    local function v32(v28, v29, v30)
        local v31 = nil;
        if not (type(v30) ~= "number" and type(v30) ~= "boolean") or typeof(v30) == "EnumItem" then
            v31 = tostring(v30);
        elseif typeof(v30) == "Color3" then
            v31 = v30:ToHex();
        elseif typeof(v30) == "Font" then
            v31 = tostring((string.gsub(v30.Family, "rbxasset://fonts/families/", ""))) .. " " .. tostring(v30.Weight) .. " " .. tostring(v30.Style);
        else
            return ;
        end;
        assert(v31, "should exist");
        v6.FireClientAnalyticsWithEventName(v28, {
            [v29] = v31
        });
    end;
    v26:dispatch(v8({
        bubbleChatSettings = (function()
            local l_BubbleChatConfiguration_0 = l_TextChatService_0:FindFirstChildOfClass("BubbleChatConfiguration");
            local v34 = {};
            if not l_BubbleChatConfiguration_0 then
                return {};
            else
                local v35 = {
                    "Enabled",
                    "AdorneeName",
                    "BubbleDuration",
                    "BubblesSpacing",
                    "VerticalStudsOffset",
                    "LocalPlayerStudsOffset",
                    "MinimizeDistance",
                    "MaxDistance",
                    "BackgroundColor3",
                    "TextColor3",
                    "TextSize",
                    "FontFace"
                };
                if v4() then
                    table.insert(v35, "BackgroundTransparency");
                end;
                if v20() then
                    table.insert(v35, "MaxBubbles");
                end;
                if v21() then
                    table.insert(v35, "TailVisible");
                end;
                for _, v37 in ipairs(v35) do
                    if l_BubbleChatConfiguration_0[v37] then
                        local v38 = l_BubbleChatConfiguration_0[v37];
                        v34[v37] = v38;
                        v32("BubbleChatConfigurationLoaded", v37, v38);
                    end;
                end;
                l_BubbleChatConfiguration_0.Changed:Connect(function(v39)
                    local v40 = l_BubbleChatConfiguration_0[v39];
                    v26:dispatch(v12(v39, v40));
                    v32("BubbleChatConfigurationChanged", v39, v40);
                end);
                local v41 = v18(v26);
                for v42, v43 in pairs(v41) do
                    if v43 then
                        v34[v42] = v41[v42];
                    end;
                end;
                return v34;
            end;
        end)(),
        chatWindowSettings = (function()
            local l_ChatWindowConfiguration_0 = l_TextChatService_0:FindFirstChildOfClass("ChatWindowConfiguration");
            local v45 = {};
            if not l_ChatWindowConfiguration_0 then
                return {};
            else
                v26:dispatch(v10(l_ChatWindowConfiguration_0.Enabled));
                l_ChatWindowConfiguration_0:GetPropertyChangedSignal("Enabled"):Connect(function()
                    v26:dispatch(v10(l_ChatWindowConfiguration_0.Enabled));
                end);
                v26:dispatch(v14(l_ChatWindowConfiguration_0.HorizontalAlignment));
                l_ChatWindowConfiguration_0:GetPropertyChangedSignal("HorizontalAlignment"):Connect(function()
                    v26:dispatch(v14(l_ChatWindowConfiguration_0.HorizontalAlignment));
                end);
                v26:dispatch(v13(l_ChatWindowConfiguration_0.VerticalAlignment));
                l_ChatWindowConfiguration_0:GetPropertyChangedSignal("VerticalAlignment"):Connect(function()
                    v26:dispatch(v13(l_ChatWindowConfiguration_0.VerticalAlignment));
                end);
                for _, v47 in ipairs({
                    "BackgroundColor3",
                    "BackgroundTransparency",
                    "FontFace",
                    "TextColor3",
                    "TextSize",
                    "TextStrokeColor3",
                    "TextStrokeTransparency",
                    "HeightScale",
                    "WidthScale",
                    "HorizontalAlignment",
                    "VerticalAlignment"
                }) do
                    if l_ChatWindowConfiguration_0[v47] then
                        local v48 = l_ChatWindowConfiguration_0[v47];
                        v45[v47] = v48;
                        v32("ChatWindowConfigurationLoaded", v47, v48);
                    end;
                end;
                l_ChatWindowConfiguration_0.Changed:Connect(function(v49)
                    local v50 = l_ChatWindowConfiguration_0[v49];
                    v26:dispatch(v15(v49, v50));
                    v32("ChatWindowConfigurationChanged", v49, v50);
                end);
                return v45;
            end;
        end)(),
        chatInputBarSettings = (function()
            local l_ChatInputBarConfiguration_0 = l_TextChatService_0:FindFirstChildOfClass("ChatInputBarConfiguration");
            local v52 = {};
            if not l_ChatInputBarConfiguration_0 then
                return {};
            else
                v26:dispatch(v9(l_ChatInputBarConfiguration_0.Enabled));
                l_ChatInputBarConfiguration_0:GetPropertyChangedSignal("Enabled"):Connect(function()
                    v26:dispatch(v9(l_ChatInputBarConfiguration_0.Enabled));
                end);
                l_ChatInputBarConfiguration_0:GetPropertyChangedSignal("TargetTextChannel"):Connect(function()
                    v26:dispatch(v11(l_ChatInputBarConfiguration_0.TargetTextChannel));
                end);
                if v27.defaultTargetTextChannel then
                    l_ChatInputBarConfiguration_0.TargetTextChannel = v27.defaultTargetTextChannel;
                end;
                if v5() then
                    v26:dispatch(v17(l_ChatInputBarConfiguration_0.TextBox ~= nil));
                    l_ChatInputBarConfiguration_0:GetPropertyChangedSignal("TextBox"):Connect(function()
                        v26:dispatch(v17(l_ChatInputBarConfiguration_0.TextBox ~= nil));
                    end);
                end;
                v26.changed:connect(function(v53, v54)
                    if v53.TextChannels ~= v54.TextChannels and v53.TextChannels.targetTextChannel ~= v54.TextChannels.targetTextChannel then
                        l_ChatInputBarConfiguration_0.TargetTextChannel = v53.TextChannels.targetTextChannel;
                    end;
                end);
                if v4() then
                    local v55 = {
                        "BackgroundTransparency",
                        "BackgroundColor3",
                        "TextSize",
                        "TextColor3",
                        "TextStrokeColor3",
                        "TextStrokeTransparency",
                        "FontFace",
                        "PlaceholderColor3"
                    };
                    if v19() then
                        table.insert(v55, "KeyboardKeyCode");
                    end;
                    if v22() and l_ChatInputBarConfiguration_0.AutocompleteEnabled ~= nil then
                        table.insert(v55, "AutocompleteEnabled");
                    end;
                    for _, v57 in ipairs(v55) do
                        if l_ChatInputBarConfiguration_0[v57] then
                            local v58 = l_ChatInputBarConfiguration_0[v57];
                            if v19() and v57 == "KeyboardKeyCode" then
                                local l_l_UserInputService_0_StringForKeyCode_1 = l_UserInputService_0:GetStringForKeyCode(v58);
                                local v60;
                                if not (l_l_UserInputService_0_StringForKeyCode_1 ~= nil) or l_l_UserInputService_0_StringForKeyCode_1 == "" then
                                    warn("ChatInputBarConfiguration.KeyboardKeyCode has an unsupported keycode for rendering UI:" .. tostring(v58));
                                    v60 = false;
                                else
                                    v60 = true;
                                end;
                                if not v60 then
                                    l_ChatInputBarConfiguration_0.KeyboardKeyCode = Enum.KeyCode.Slash;
                                    v52[v57] = Enum.KeyCode.Slash;
                                    continue;
                                end;
                            end;
                            v52[v57] = v58;
                            v32("ChatInputBarConfigurationLoaded", v57, v58);
                        end;
                    end;
                    l_ChatInputBarConfiguration_0.Changed:Connect(function(v61)
                        local v62 = l_ChatInputBarConfiguration_0[v61];
                        if v19() and v61 == "KeyboardKeyCode" then
                            local l_l_UserInputService_0_StringForKeyCode_2 = l_UserInputService_0:GetStringForKeyCode(v62);
                            local v64;
                            if not (l_l_UserInputService_0_StringForKeyCode_2 ~= nil) or l_l_UserInputService_0_StringForKeyCode_2 == "" then
                                warn("ChatInputBarConfiguration.KeyboardKeyCode has an unsupported keycode for rendering UI:" .. tostring(v62));
                                v64 = false;
                            else
                                v64 = true;
                            end;
                            if not v64 then
                                l_ChatInputBarConfiguration_0.KeyboardKeyCode = v26:getState().ChatLayout.ChatInputBarSettings.KeyboardKeyCode;
                                return ;
                            end;
                        end;
                        v26:dispatch(v16(v61, v62));
                        v32("ChatInputBarConfigurationChanged", v61, v62);
                    end);
                end;
                return v52;
            end;
        end)()
    }));
end;


return function(...)
    local l_BindableEvent_0 = Instance.new("BindableEvent");
    local v1 = {
        ...
    };
    local function v3(...)
        for v2 = 1, #v1 do
            v1[v2]:Disconnect();
        end;
        return l_BindableEvent_0:Fire(...);
    end;
    for v4 = 1, #v1 do
        v1[v4] = v1[v4]:Connect(v3);
    end;
    return l_BindableEvent_0.Event:Wait();
end;


return function(v0, v1)
    v0.reportCounter(string.format("ExpChatV%sCount", (string.gsub(v1 or "0", "%p", {
        ["."] = "_"
    }))));
end;


local v0 = require(script:FindFirstAncestor("ExpChat").Parent.Rodux);
local v1 = require(script.Parent.installReducer);
return function()
    return v0.Store.new(v1, nil, {
        v0.thunkMiddleware
    });
end;


local l_Players_0 = game:GetService("Players");
local l_Teams_0 = game:GetService("Teams");
local l_TextChatService_0 = game:GetService("TextChatService");
local l_script_FirstAncestor_0 = script:FindFirstAncestor("ExpChat");
local l_List_0 = require(l_script_FirstAncestor_0.Parent.llama).List;
local v5 = require(l_script_FirstAncestor_0.createDispatchRemoteFunction);
local v6 = require(script.createStore);
local v7 = require(l_script_FirstAncestor_0.watchForErrors);
local v8 = require(l_script_FirstAncestor_0.countParticipantsInTextChannel);
local l_Actions_0 = l_script_FirstAncestor_0.Actions;
local v10 = require(l_Actions_0.PlayerAdded);
local v11 = require(l_Actions_0.PlayerRemoved);
local _ = require(l_script_FirstAncestor_0.Commands.types);
local v13 = require(l_script_FirstAncestor_0.Commands);
local v14 = require(l_script_FirstAncestor_0.Config);
local v15 = require(l_script_FirstAncestor_0.Analytics);
local v16 = require(l_script_FirstAncestor_0.Logger):new("ExpChat/" .. script.Name);
local v17 = game:DefineFastFlag("FixTeamChannelReferenceTextChat", false);
local function _()
    return #l_List_0.filter(l_TextChatService_0:GetDescendants(), function(v18)
        return v18:IsA("TextChannel");
    end);
end;
local function _()
    return #l_List_0.filter(l_TextChatService_0:GetDescendants(), function(v20)
        return v20:IsA("TextChatCommand");
    end);
end;
return function(v22)
    v16:trace("mountServerApp started");
    local v23 = v6();
    v5();
    if not (not v22 or not v22.analytics) then
        v15.with(v22.analytics);
    end;
    v7(game:GetService("ScriptContext"), v22.script, true);
    local v24 = {};
    if l_TextChatService_0.CreateDefaultTextChannels then
        v16:trace("Creating default TextChannels");
        local l_Folder_0 = Instance.new("Folder");
        l_Folder_0.Name = "TextChannels";
        l_Folder_0.Parent = l_TextChatService_0;
        local function v29(v26)
            for _, v28 in pairs(l_TextChatService_0:GetDescendants()) do
                if v28:IsA("TextChannel") and v28.Name == v26 then
                    return v28;
                end;
            end;
            return nil;
        end;
        local l_l_Folder_0_0 = l_Folder_0 --[[ copy: 3 -> 17 ]];
        local function _(v31)
            local v32 = v29(v31);
            if not v32 then
                v32 = Instance.new("TextChannel");
                v32.Name = v31;
                v32.Parent = l_l_Folder_0_0;
            end;
            return v32;
        end;
        local function v38(v34, v35)
            for _, v37 in pairs(v34:GetChildren()) do
                if v37:IsA("TextSource") and v37.UserId == v35 then
                    return v37;
                end;
            end;
            return nil;
        end;
        local function v52(v39)
            local v40 = "RBXTeam" .. tostring(v39.TeamColor.Name);
            local v41 = v29(v40);
            if not v41 then
                v41 = Instance.new("TextChannel");
                v41.Name = v40;
                v41.Parent = l_l_Folder_0_0;
            end;
            local l_v41_0 = v41;
            v16:debug("Creating team TextChannel: {}", l_v41_0.Name);
            v39.PlayerAdded:Connect(function(v43)
                if not v17 then
                    l_v41_0:AddUserAsync(v43.UserId).CanSend = true;
                    return ;
                else
                    local v44 = "RBXTeam" .. tostring(v39.TeamColor.Name);
                    local v45 = v29(v44);
                    if not v45 then
                        v45 = Instance.new("TextChannel");
                        v45.Name = v44;
                        v45.Parent = l_l_Folder_0_0;
                    end;
                    v45:AddUserAsync(v43.UserId).CanSend = true;
                    return ;
                end;
            end);
            v39.PlayerRemoved:Connect(function(v46)
                if not v17 then
                    local v47 = v38(l_v41_0, v46.UserId);
                    if v47 then
                        v47:Destroy();
                    end;
                else
                    local v48 = "RBXTeam" .. tostring(v39.TeamColor.Name);
                    local v49 = v29(v48);
                    if not v49 then
                        v49 = Instance.new("TextChannel");
                        v49.Name = v48;
                        v49.Parent = l_l_Folder_0_0;
                    end;
                    v48 = v38(v49, v46.UserId);
                    if v48 then
                        v48:Destroy();
                        return ;
                    end;
                end;
            end);
            v39:GetPropertyChangedSignal("TeamColor"):Connect(function()
                if not v17 then
                    l_v41_0.Name = "RBXTeam" .. tostring(v39.TeamColor.Name);
                    return ;
                else
                    local v50 = "RBXTeam" .. tostring(v39.TeamColor.Name);
                    local v51 = v29(v50);
                    if not v51 then
                        v51 = Instance.new("TextChannel");
                        v51.Name = v50;
                        v51.Parent = l_l_Folder_0_0;
                    end;
                    v51.Name = "RBXTeam" .. tostring(v39.TeamColor.Name);
                    return ;
                end;
            end);
        end;
        for _, v54 in pairs(l_Teams_0:GetTeams()) do
            if v54:IsA("Team") then
                v52(v54);
            end;
        end;
        local l_v52_0 = v52 --[[ copy: 7 -> 18 ]];
        l_Teams_0.ChildAdded:Connect(function(v56)
            if v56:IsA("Team") then
                l_v52_0(v56);
            end;
        end);
        l_Teams_0.ChildRemoved:Connect(function(v57)
            if v57:IsA("Team") then
                local v58 = v29("RBXTeam" .. tostring(v57.TeamColor.Name));
                if v58 then
                    v16:debug("Destroying team TextChannel: {}", v58.Name);
                    v58:Destroy();
                end;
            end;
        end);
        for v59, _ in pairs(v14.DefaultChannelNames) do
            v16:trace("Creating default channel: {}", v59);
            local v61 = v29(v59);
            if not v61 then
                v61 = Instance.new("TextChannel");
                v61.Name = v59;
                v61.Parent = l_Folder_0;
            end;
            table.insert(v24, v61);
        end;
        local function v66(v62)
            for _, v64 in ipairs(v24) do
                v16:trace("Adding user {} to TextChannel: {}", tostring(v62.UserId), v64.Name);
                local v65 = v64:AddUserAsync(v62.UserId);
                if v64.Name == "RBXGeneral" then
                    v65.CanSend = true;
                elseif v64.Name == "RBXSystem" then
                    v65.CanSend = false;
                end;
            end;
        end;
        for _, v68 in pairs(l_Players_0:GetPlayers()) do
            if v68:IsA("Player") then
                v66(v68);
            end;
        end;
        l_Players_0.PlayerAdded:Connect(v66);
        v15.FireRccAnalyticsWithEventName("DefaultChannelsCreated");
    end;
    if l_TextChatService_0.CreateDefaultCommands then
        v16:trace("Creating default TextChatCommands");
        local l_Folder_1 = Instance.new("Folder");
        l_Folder_1.Name = "TextChatCommands";
        l_Folder_1.Parent = l_TextChatService_0;
        for _, v71 in ipairs(v13) do
            local l_TextChatCommand_0 = Instance.new("TextChatCommand");
            l_TextChatCommand_0.Name = v71.name;
            l_TextChatCommand_0.PrimaryAlias = v71.alias[1];
            l_TextChatCommand_0.SecondaryAlias = v71.alias[2] or "";
            l_TextChatCommand_0.Parent = l_Folder_1;
        end;
        v15.FireRccAnalyticsWithEventName("DefaultCommandsCreated");
    end;
    v15.FireRccAnalyticsWithEventName("ExperienceChatLoaded", {
        loadedChannels = #l_List_0.filter(l_TextChatService_0:GetDescendants(), function(v73)
            return v73:IsA("TextChannel");
        end),
        loadedCommands = #l_List_0.filter(l_TextChatService_0:GetDescendants(), function(v74)
            return v74:IsA("TextChatCommand");
        end)
    });
    v16:debug("Start watching for new channels and commands");
    l_TextChatService_0.DescendantAdded:Connect(function(v75)
        if not v75:IsA("TextChannel") then
            if not v75:IsA("TextChatCommand") then
                if v75:IsA("TextSource") then
                    local l_Parent_0 = v75.Parent;
                    if not (not l_Parent_0 or not l_Parent_0:IsA("TextChannel")) then
                        v15.FireRccAnalyticsWithEventName("ChannelJoined", {
                            channelName = l_Parent_0.Name,
                            totalParticipants = v8(l_Parent_0)
                        });
                    end;
                end;
                return ;
            else
                v15.FireRccAnalyticsWithEventName("CommandCreated", {
                    commandName = v75.Name
                });
                return ;
            end;
        else
            v15.FireRccAnalyticsWithEventName("ChannelCreated", {
                channelName = v75.Name,
                totalChannels = #l_List_0.filter(l_TextChatService_0:GetDescendants(), function(v77)
                    return v77:IsA("TextChannel");
                end)
            });
            return ;
        end;
    end);
    l_TextChatService_0.DescendantRemoving:Connect(function(v78)
        if not v78:IsA("TextChannel") then
            if not v78:IsA("TextChatCommand") then
                if v78:IsA("TextSource") then
                    local l_Parent_1 = v78.Parent;
                    if not (not l_Parent_1 or not l_Parent_1:IsA("TextChannel")) then
                        v15.FireRccAnalyticsWithEventName("ChannelLeft", {
                            channelName = l_Parent_1.Name,
                            totalParticipants = v8(l_Parent_1)
                        });
                    end;
                end;
                return ;
            else
                v15.FireRccAnalyticsWithEventName("CommandRemoved", {
                    commandName = v78.Name
                });
                return ;
            end;
        else
            v15.FireRccAnalyticsWithEventName("ChannelRemoved", {
                channelName = v78.Name,
                totalChannels = #l_List_0.filter(l_TextChatService_0:GetDescendants(), function(v80)
                    return v80:IsA("TextChannel");
                end) - 1
            });
            return ;
        end;
    end);
    for _, v82 in pairs(l_Players_0:GetPlayers()) do
        v23:dispatch(v10(v82.UserId, v82.Name, v82.DisplayName));
    end;
    l_Players_0.PlayerAdded:Connect(function(v83)
        v23:dispatch(v10(v83.UserId, v83.Name, v83.DisplayName));
    end);
    l_Players_0.PlayerRemoving:Connect(function(v84)
        v23:dispatch(v11(v84.UserId));
    end);
end;


local l_script_FirstAncestor_0 = script:FindFirstAncestor("ExpChat");
return require(l_script_FirstAncestor_0.Parent.Rodux).combineReducers({
    Players = require(l_script_FirstAncestor_0.installReducer.Players)
});


local v0 = require(script:FindFirstAncestor("ExpChat").Analytics);
local function v4(v1)
    if v1.Status == Enum.TextChatMessageStatus.Success then
        local l_TextChannel_0 = v1.TextChannel;
        if l_TextChannel_0 then
            local l_Name_0 = l_TextChannel_0.Name;
            if string.find(l_Name_0, "^RBX") == nil then
                return "expChatMessageReceivedSuccessCustom";
            elseif l_Name_0 == "RBXGeneral" then
                return "expChatMessageReceivedSuccessGeneral";
            elseif l_Name_0 == "RBXSystem" then
                return "expChatMessageReceivedSuccessSystem";
            elseif not string.find(l_Name_0, "^RBXWhisper") then
                if not string.find(l_Name_0, "^RBXTeam") then
                    return "expChatMessageReceivedSuccessCustom";
                else
                    return "expChatMessageReceivedSuccessTeam";
                end;
            else
                return "expChatMessageReceivedSuccessWhisper";
            end;
        end;
    end;
    if v1.Status == Enum.TextChatMessageStatus.Unknown then
        return "expChatMessageReceivedUnknown";
    elseif v1.Status == Enum.TextChatMessageStatus.InvalidTextChannelPermissions then
        return "expChatMessageReceivedInvalidTextChannelPermissions";
    elseif v1.Status == Enum.TextChatMessageStatus.InvalidPrivacySettings then
        return "expChatMessageReceivedInvalidPrivacySettings";
    elseif v1.Status == Enum.TextChatMessageStatus.TextFilterFailed then
        return "expChatMessageReceivedTextFilterFailed";
    elseif v1.Status == Enum.TextChatMessageStatus.Floodchecked then
        return "expChatMessageReceivedFloodchecked";
    elseif v1.Status == Enum.TextChatMessageStatus.MessageTooLong then
        return "expChatMessageReceivedMessageTooLong";
    else
        return nil;
    end;
end;
return function(v5, v6)
    local l_TextSource_0 = v6.TextSource;
    if l_TextSource_0 and v5 == l_TextSource_0.UserId then
        local v8 = v4(v6);
        if v8 then
            v0.reportCounter(v8);
        end;
    end;
end;


local v0 = require(script:FindFirstAncestor("ExpChat").Analytics);
return function(v1, v2, v3)
    v1.Error:Connect(function(_, v5, v6)
        if not (v6 ~= v2 and (not v5 or not string.find(v5, "ExpChat"))) then
            v0.reportCounter(not v3 and "expChatErrorCountClient" or "expChatErrorCountServer");
        end;
    end);
end;


return {
    Context = {
        ExperienceTile = "ExperienceTile",
        SearchExperienceTile = "SearchExperienceTile",
        PeopleListInHomePage = "peopleListInHomePage",
        GamePlayIntentInPlacesList = "gamePlayIntentInPlacesList",
        PlayerContextualMenu = "PlayerContextualMenu"
    }
};


local l_Parent_0 = script:FindFirstAncestor("ExperienceAnalytics").Parent;
local v1 = require(l_Parent_0.t);
local l_mutedError_0 = require(l_Parent_0.Loggers).mutedError;
local v3 = v1.strictInterface({
    pg = v1.string,
    universeId = v1.union(v1.string, v1.number),
    navigationUniverseId = if not require(l_Parent_0.SharedFlags).FFlagLuaAppFixNavigationUidLogging then nil else v1.optional(v1.string),
    pos = v1.optional(v1.number),
    pid = v1.optional(v1.union(v1.number, v1.string)),
    sortPos = v1.optional(v1.number),
    ad = v1.optional(v1.string),
    gameSetTargetId = v1.optional(v1.number),
    gameSetTypeId = v1.optional(v1.string),
    tis = v1.optional(v1.number),
    refId = v1.optional(v1.string),
    src = v1.optional(v1.string),
    friendId = v1.optional(v1.string),
    position = v1.optional(v1.number),
    absolutePosition = v1.optional(v1.number),
    fromWhere = v1.optional(v1.string),
    locale = v1.optional(v1.string),
    conversationId = v1.optional(v1.number)
});
return function(v4, v5, v6)
    local v7, v8 = v3(v6);
    if not v7 then
        l_mutedError_0(v8);
    end;
    v4:sendEventDeferred(v5, "gameDetailReferral", v6);
end;


local l_script_FirstAncestor_0 = script:FindFirstAncestor("ExperienceAnalytics");
local l_Parent_0 = l_script_FirstAncestor_0.Parent;
local v2 = require(l_Parent_0.t);
local l_mutedError_0 = require(l_Parent_0.Loggers).mutedError;
local v4 = require(l_script_FirstAncestor_0.Constants);
local v5 = {
    PlayButton = v2.strictInterface({
        placeId = v2.union(v2.string, v2.number),
        rootPlaceId = v2.union(v2.number, v2.string),
        referralSource = v2.optional(v2.string)
    }),
    [v4.Context.ExperienceTile] = v2.strictInterface({
        placeId = v2.string,
        rootPlaceId = v2.number,
        referralSource = v2.optional(v2.string),
        sortIndex = v2.string,
        sortEntryIndex = v2.string,
        gameSetTypeId = v2.optional(v2.string),
        gameSetTargetId = v2.optional(v2.number)
    }),
    [v4.Context.SearchExperienceTile] = v2.strictInterface({
        placeId = v2.string,
        rootPlaceId = v2.number,
        sortEntryIndex = v2.string,
        gameSetTypeId = v2.string,
        sortIndex = v2.number
    }),
    [v4.Context.PeopleListInHomePage] = v2.strictInterface({
        placeId = v2.string,
        rootPlaceId = v2.number,
        joinAttemptId = v2.optional(v2.string)
    }),
    [v4.Context.GamePlayIntentInPlacesList] = v2.strictInterface({
        placeId = v2.string,
        rootPlaceId = v2.number,
        joinAttemptId = v2.optional(v2.string)
    }),
    shareLinks = v2.strictInterface({
        placeId = v2.union(v2.string, v2.number),
        rootPlaceId = v2.union(v2.number, v2.string),
        linkId = v2.string,
        linkType = v2.string,
        linkStatus = v2.string,
        joinAttemptId = v2.optional(v2.string)
    }),
    PlayGameFromPlayTogether = v2.strictInterface({
        placeId = v2.union(v2.string, v2.number),
        rootPlaceId = v2.union(v2.number, v2.string),
        referralSource = v2.optional(v2.string),
        sortIndex = v2.optional(v2.string),
        sortEntryIndex = v2.optional(v2.string),
        gameSetTypeId = v2.optional(v2.string),
        gameSetTargetId = v2.optional(v2.number),
        linkId = v2.optional(v2.union(v2.string, v2.number)),
        linkType = v2.optional(v2.string),
        linkStatus = v2.optional(v2.string),
        conversationId = v2.optional(v2.union(v2.number, v2.string)),
        joinAttemptId = v2.optional(v2.string),
        uid = v2.optional(v2.string)
    }),
    PlayGameFromLinkCard = v2.strictInterface({
        placeId = v2.string,
        rootPlaceId = v2.number,
        joinAttemptId = v2.optional(v2.string),
        conversationId = v2.optional(v2.string)
    }),
    [v4.Context.PlayerContextualMenu] = v2.strictInterface({
        friendId = v2.string,
        pageName = v2.string,
        placeId = v2.optional(v2.string),
        rootPlaceId = v2.optional(v2.string),
        joinAttemptId = v2.string
    })
};
return function(v6, v7, v8)
    if v5[v7] ~= nil then
        local v9, v10 = v5[v7](v8);
        if not v9 then
            l_mutedError_0(v10);
        end;
    else
        l_mutedError_0(string.format("Missing interface for eventContext %s to type check gamePlayIntent event parameters", v7));
    end;
    v6:sendEventDeferred(v7, "gamePlayIntent", {
        placeId = v8.placeId,
        rootPlaceId = v8.rootPlaceId,
        referralSource = v8.referralSource,
        sortIndex = v8.sortIndex,
        sortEntryIndex = v8.sortEntryIndex,
        gameSetTypeId = v8.gameSetTypeId,
        gameSetTargetId = v8.gameSetTargetId,
        linkId = v8.linkId,
        linkType = v8.linkType,
        linkStatus = v8.linkStatus,
        conversationId = v8.conversationId,
        joinAttemptId = v8.joinAttemptId,
        friendId = v8.friendId,
        pageName = v8.pageName
    });
end;


return {
    gameDetailReferral = require(script.gameDetailReferral),
    gamePlayIntent = require(script.gamePlayIntent)
};


local v0 = require(game:GetService("CorePackages").Workspace.Packages.ArgCheck);
local v1 = game:DefineFastInt("LuaAppJoinGameFailureInfluxHundredthsPercentage", 0);
return function(v2, v3, v4)
    v4 = v4 or {};
    v0.isType(v3, "string", "documentName");
    v2:reportSeries(v3, v4, v1);
end;


return {
    Constants = require(script.Constants),
    Events = require(script.Events),
    Points = require(script.Points),
    ["jest.config"] = script["jest.config"]
};


local v0 = require(script.Parent.Parent.Dev.JestConfigs);
return {
    displayName = "ExperienceAnalytics",
    setupFilesAfterEnv = {
        v0.setupFiles.LogHandler,
        v0.setupFiles.UIBloxInitializer,
        v0.setupFiles.createPromiseRejectionHandler()
    }
};


local l_LogService_0 = game:GetService("LogService");
local v1 = require(game:GetService("CorePackages").Packages.Dev.JestGlobals3);
local l_beforeAll_0 = v1.beforeAll;
local l_afterAll_0 = v1.afterAll;
local l_expect_0 = v1.expect;
local v5 = false;
l_beforeAll_0(function()
    l_LogService_0.MessageOut:Connect(function(_, v7)
        if v7 == Enum.MessageType.MessageError then
            v5 = true;
        end;
    end);
end);
l_afterAll_0(function()
    task.wait(0.2);
    l_expect_0(v5).toBe(false);
end);


return {
    ["jest.config"] = script["jest.config"],
    loadingScript = require(script.loadingScript)
};


local l_Parent_0 = script.Parent;
local v1 = require(l_Parent_0.Parent.Dev.JestConfigs);
return {
    displayName = "ExperienceLoadingScript",
    setupFilesAfterEnv = {
        l_Parent_0.LogHandler,
        v1.setupFiles.UIBloxInitializer,
        v1.setupFiles.createPromiseRejectionHandler()
    }
};


if not game:GetEngineFeature("ExperienceServiceEnabled") then
    return nil;
else
    local l_ExperienceService_0 = game:GetService("ExperienceService");
    return {
        LaunchExperience = function(_, v2, v3, v4)
            if v3 ~= nil then
                if v4 ~= nil then
                    l_ExperienceService_0:LaunchExperienceFromSourceWithCallback(v2, v3, v4);
                    return ;
                else
                    l_ExperienceService_0:LaunchExperienceFromSource(v2, v3);
                    return ;
                end;
            elseif v4 ~= nil then
                l_ExperienceService_0:LaunchExperienceFromSourceWithCallback(v2, "", v4);
                return ;
            else
                l_ExperienceService_0:LaunchExperience(v2);
                return ;
            end;
        end,
        RegisterForExperienceJoin = function(_, v6)
            l_ExperienceService_0:RegisterForExperienceJoin(v6);
        end,
        RegisterForExperienceLeave = function(_, v8)
            l_ExperienceService_0:RegisterForExperienceLeave(v8);
        end,
        GetPendingJoinAttempt = function(_)
            return l_ExperienceService_0:GetPendingJoinAttempt();
        end,
        OnNewJoinAttempt = function(_)
            return l_ExperienceService_0.OnNewJoinAttempt;
        end
    };
end;


game:DefineFastFlag("MoveLuaExpLaunchBegin", false);
return function()
    return game:GetFastFlag("MoveLuaExpLaunchBegin");
end;


game:DefineFastFlag("UseExperienceService", false);
return function()
    return game:GetFastFlag("UseExperienceService") and game:GetEngineFeature("ExperienceServiceEnabled");
end;


local l_EnableOptionalPlaceIdForUserIdGameJoins_0 = require(script:FindFirstAncestor("ExperienceService").Parent.SharedFlags).EnableOptionalPlaceIdForUserIdGameJoins;
local _ = require(script.Parent.GameProtocolTypes);
local v2 = {
    new = function()
        return {
            referralPage = "LuaChat"
        };
    end
};
v2.fromPlaceId = function(v3)
    local v4 = v2.new();
    v4.placeId = v3;
    return v4;
end;
v2.fromUserId = function(v5, v6)
    local v7 = v2.new();
    v7.userId = v5;
    if l_EnableOptionalPlaceIdForUserIdGameJoins_0() then
        v7.placeId = v6;
    end;
    return v7;
end;
v2.fromPlaceInstance = function(v8, v9)
    local v10 = v2.new();
    v10.placeId = v8;
    v10.gameInstanceId = v9;
    return v10;
end;
v2.fromConversationId = function(v11, v12)
    local v13 = v2.new();
    v13.placeId = v11;
    v13.conversationId = v12;
    return v13;
end;
v2.fromParams = function(v14)
    local v15 = v2.new();
    for v16, v17 in pairs(v14) do
        v15[v16] = v17;
    end;
    return v15;
end;
return v2;