docs.unity3d.com
Search Results for

    Show / Hide Table of Contents

    Class UniversalRpcTestsBase

    Inheritance
    object
    NetcodeIntegrationTest
    UniversalRpcTestsBase
    Inherited Members
    NetcodeIntegrationTest.s_GlobalTimeoutHelper
    NetcodeIntegrationTest.s_DefaultWaitForTick
    NetcodeIntegrationTest.NetcodeLogAssert
    NetcodeIntegrationTest.s_GlobalNetworkObjects
    NetcodeIntegrationTest.RegisterNetworkObject(NetworkObject)
    NetcodeIntegrationTest.DeregisterNetworkObject(NetworkObject)
    NetcodeIntegrationTest.DeregisterNetworkObject(ulong, ulong)
    NetcodeIntegrationTest.TotalClients
    NetcodeIntegrationTest.k_DefaultTickRate
    NetcodeIntegrationTest.m_CreateServerFirst
    NetcodeIntegrationTest.m_PlayerPrefab
    NetcodeIntegrationTest.m_ServerNetworkManager
    NetcodeIntegrationTest.m_ClientNetworkManagers
    NetcodeIntegrationTest.m_PlayerNetworkObjects
    NetcodeIntegrationTest.m_UseHost
    NetcodeIntegrationTest.m_TargetFrameRate
    NetcodeIntegrationTest.m_EnableVerboseDebug
    NetcodeIntegrationTest.m_BypassConnectionTimeout
    NetcodeIntegrationTest.VerboseDebug(string)
    NetcodeIntegrationTest.OnSetVerboseDebug()
    NetcodeIntegrationTest.OnOneTimeSetup()
    NetcodeIntegrationTest.OneTimeSetup()
    NetcodeIntegrationTest.OnSetup()
    NetcodeIntegrationTest.OnInlineSetup()
    NetcodeIntegrationTest.SetUp()
    NetcodeIntegrationTest.OnPlayerPrefabGameObjectCreated()
    NetcodeIntegrationTest.CreateServerAndClients()
    NetcodeIntegrationTest.OnNewClientCreated(NetworkManager)
    NetcodeIntegrationTest.OnNewClientStarted(NetworkManager)
    NetcodeIntegrationTest.OnNewClientStartedAndConnected(NetworkManager)
    NetcodeIntegrationTest.ShouldWaitForNewClientToConnect(NetworkManager)
    NetcodeIntegrationTest.CreateAndStartNewClient()
    NetcodeIntegrationTest.CreateAndStartNewClientWithTimeTravel()
    NetcodeIntegrationTest.StopOneClient(NetworkManager, bool)
    NetcodeIntegrationTest.StopOneClientWithTimeTravel(NetworkManager, bool)
    NetcodeIntegrationTest.SetTimeTravelSimulatedLatency(float)
    NetcodeIntegrationTest.SetTimeTravelSimulatedDropRate(float)
    NetcodeIntegrationTest.SetTimeTravelSimulatedLatencyJitter(float)
    NetcodeIntegrationTest.CreateServerAndClients(int)
    NetcodeIntegrationTest.CanStartServerAndClients()
    NetcodeIntegrationTest.OnStartedServerAndClients()
    NetcodeIntegrationTest.OnTimeTravelStartedServerAndClients()
    NetcodeIntegrationTest.OnServerAndClientsConnected()
    NetcodeIntegrationTest.ClientNetworkManagerPostStartInit()
    NetcodeIntegrationTest.LogAllMessages
    NetcodeIntegrationTest.StartServerAndClients()
    NetcodeIntegrationTest.StartServerAndClientsWithTimeTravel()
    NetcodeIntegrationTest.CanClientsLoad()
    NetcodeIntegrationTest.CanClientsUnload()
    NetcodeIntegrationTest.DeRegisterSceneManagerHandler()
    NetcodeIntegrationTest.RegisterSceneManagerHandler()
    NetcodeIntegrationTest.OnCanSceneCleanUpUnload(Scene)
    NetcodeIntegrationTest.ShutdownAndCleanUp()
    NetcodeIntegrationTest.OnTearDown()
    NetcodeIntegrationTest.TearDown()
    NetcodeIntegrationTest.OneTimeTearDown()
    NetcodeIntegrationTest.CanDestroyNetworkObject(NetworkObject)
    NetcodeIntegrationTest.DestroySceneNetworkObjects()
    NetcodeIntegrationTest.EnableMessageLogging()
    NetcodeIntegrationTest.WaitForConditionOrTimeOut(Func<bool>, TimeoutHelper)
    NetcodeIntegrationTest.WaitForConditionOrTimeOutWithTimeTravel(Func<bool>, int)
    NetcodeIntegrationTest.WaitForConditionOrTimeOut(IConditionalPredicate, TimeoutHelper)
    NetcodeIntegrationTest.WaitForConditionOrTimeOutWithTimeTravel(IConditionalPredicate, int)
    NetcodeIntegrationTest.WaitForClientsConnectedOrTimeOut(NetworkManager[])
    NetcodeIntegrationTest.WaitForClientsConnectedOrTimeOutWithTimeTravel(NetworkManager[])
    NetcodeIntegrationTest.WaitForClientsConnectedOrTimeOut()
    NetcodeIntegrationTest.WaitForClientsConnectedOrTimeOutWithTimeTravel()
    NetcodeIntegrationTest.CreateNetworkObjectPrefab(string)
    NetcodeIntegrationTest.SpawnObject(GameObject, NetworkManager, bool)
    NetcodeIntegrationTest.SpawnObjects(GameObject, NetworkManager, int, bool)
    NetcodeIntegrationTest.AssertOnTimeout(string, TimeoutHelper)
    NetcodeIntegrationTest.WaitForTicks(NetworkManager, int)
    NetcodeIntegrationTest.TimeTravel(double, int)
    NetcodeIntegrationTest.GetTickRate()
    NetcodeIntegrationTest.GetFrameRate()
    NetcodeIntegrationTest.ConfigureFramesPerTick()
    NetcodeIntegrationTest.TimeTravelAdvanceTick()
    NetcodeIntegrationTest.TimeTravelToNextTick()
    NetcodeIntegrationTest.SimulateOneFrame()
    object.Equals(object)
    object.Equals(object, object)
    object.GetHashCode()
    object.GetType()
    object.MemberwiseClone()
    object.ReferenceEquals(object, object)
    object.ToString()
    Namespace: Unity.Netcode.RuntimeTests.UniversalRpcTests
    Assembly: Unity.Netcode.RuntimeTests.dll
    Syntax
    public class UniversalRpcTestsBase : NetcodeIntegrationTest

    Constructors

    UniversalRpcTestsBase(HostOrServer)

    Declaration
    public UniversalRpcTestsBase(NetcodeIntegrationTest.HostOrServer hostOrServer)
    Parameters
    Type Name Description
    NetcodeIntegrationTest.HostOrServer hostOrServer

    Fields

    YieldCheck

    Declaration
    public static int YieldCheck
    Field Value
    Type Description
    int

    YieldCycleCount

    Declaration
    public const int YieldCycleCount = 10
    Field Value
    Type Description
    int

    m_ServerObject

    Declaration
    protected GameObject m_ServerObject
    Field Value
    Type Description
    GameObject

    s_ClientIds

    Declaration
    protected static ulong[] s_ClientIds
    Field Value
    Type Description
    ulong[]

    Properties

    NumberOfClients

    Declaration
    protected override int NumberOfClients { get; }
    Property Value
    Type Description
    int
    Overrides
    NetcodeIntegrationTest.NumberOfClients

    m_EnableTimeTravel

    Enables "Time Travel" within the test, which swaps the time provider for the SDK from Unity's Time class to MockTimeProvider, and also swaps the transport implementation from UnityTransport to MockTransport.

    This enables five important things that help with both performance and determinism of tests that involve a lot of time and waiting:

    1. It allows time to move in a completely deterministic way (testing that something happens after n seconds, the test will always move exactly n seconds with no chance of any variability in the timing),
    2. It allows skipping periods of time without actually waiting that amount of time, while still simulating SDK frames as if that time were passing,
    3. It dissociates the SDK's update loop from Unity's update loop, allowing us to simulate SDK frame updates without waiting for Unity to process things like physics, animation, and rendering that aren't relevant to the test,
    4. It dissociates the SDK's messaging system from the networking hardware, meaning there's no delay between a message being sent and it being received, allowing us to deterministically rely on the message being received within specific time frames for the test, and
    5. It allows tests to be written without the use of coroutines, which not only improves the test's runtime, but also results in easier-to-read callstacks and removes the possibility for an assertion to result in the test hanging.

    When time travel is enabled, the following methods become available:

    TimeTravel(double, int): Simulates a specific number of frames passing over a specific time period TimeTravelToNextTick(): Skips forward to the next tick, siumlating at the current application frame rate WaitForConditionOrTimeOutWithTimeTravel(Func<bool>, int): Simulates frames at the application frame rate until the given condition is true WaitForMessageReceivedWithTimeTravel<T>(List<NetworkManager>, ReceiptType): Simulates frames at the application frame rate until the required message is received WaitForMessagesReceivedWithTimeTravel(List<Type>, List<NetworkManager>, ReceiptType): Simulates frames at the application frame rate until the required messages are received StartServerAndClientsWithTimeTravel(): Starts a server and client and allows them to connect via simulated frames CreateAndStartNewClientWithTimeTravel(): Creates a client and waits for it to connect via simulated frames WaitForClientsConnectedOrTimeOutWithTimeTravel(NetworkManager[]) Simulates frames at the application frame rate until the given clients are connected StopOneClientWithTimeTravel(NetworkManager, bool): Stops a client and simulates frames until it's fully disconnected.

    When time travel is enabled, NetcodeIntegrationTest will automatically use these in its methods when doing things like automatically connecting clients during SetUp.

    Additionally, the following methods replace their non-time-travel equivalents with variants that are not coroutines: OnTimeTravelStartedServerAndClients() - called when server and clients are started OnTimeTravelServerAndClientsConnected() - called when server and clients are connected

    Note that all of the non-time travel functions can still be used even when time travel is enabled - this is sometimes needed for, e.g., testing NetworkAnimator, where the unity update loop needs to run to process animations. However, it's VERY important to note here that, because the SDK will not be operating based on real-world time but based on the frozen time that's locked in from MockTimeProvider, actions that pass 10 seconds apart by real-world clock time will be perceived by the SDK as having happened simultaneously if you don't call TimeTravel(double) to cover the equivalent time span in the mock time provider. (Calling TimeTravel(double) instead of TimeTravel(double, int) will move time forward without simulating any frames, which, in the case where real-world time has passed, is likely more desirable). In most cases, this desynch won't affect anything, but it is worth noting that it happens just in case a tested system depends on both the unity update loop happening and time moving forward.

    Declaration
    protected override bool m_EnableTimeTravel { get; }
    Property Value
    Type Description
    bool
    Overrides
    NetcodeIntegrationTest.m_EnableTimeTravel

    m_SetupIsACoroutine

    If this is false, SetUp will call OnInlineSetUp instead of OnSetUp. This is a performance advantage when not using the coroutine functionality, as a coroutine that has no yield instructions in it will nonetheless still result in delaying the continuation of the method that called it for a full frame after it returns.

    Declaration
    protected override bool m_SetupIsACoroutine { get; }
    Property Value
    Type Description
    bool
    Overrides
    NetcodeIntegrationTest.m_SetupIsACoroutine

    m_TearDownIsACoroutine

    If this is false, TearDown will call OnInlineTearDown instead of OnTearDown. This is a performance advantage when not using the coroutine functionality, as a coroutine that has no yield instructions in it will nonetheless still result in delaying the continuation of the method that called it for a full frame after it returns.

    Declaration
    protected override bool m_TearDownIsACoroutine { get; }
    Property Value
    Type Description
    bool
    Overrides
    NetcodeIntegrationTest.m_TearDownIsACoroutine

    Methods

    Clear()

    Declaration
    protected void Clear()

    GetPlayerObject(ulong, ulong)

    Declaration
    protected UniversalRpcNetworkBehaviour GetPlayerObject(ulong ownerClientId, ulong onClient)
    Parameters
    Type Name Description
    ulong ownerClientId
    ulong onClient
    Returns
    Type Description
    UniversalRpcNetworkBehaviour

    OnCreatePlayerPrefab()

    Override this to add components or adjustments to the default player prefab m_PlayerPrefab

    Declaration
    protected override void OnCreatePlayerPrefab()
    Overrides
    NetcodeIntegrationTest.OnCreatePlayerPrefab()

    OnInlineTearDown()

    Declaration
    protected override void OnInlineTearDown()
    Overrides
    NetcodeIntegrationTest.OnInlineTearDown()

    OnOneTimeTearDown()

    Override this method to do handle cleaning up once the test(s) within the child derived class have completed Note: For AllTests mode this is called before ShutdownAndCleanUp.

    Declaration
    protected override void OnOneTimeTearDown()
    Overrides
    NetcodeIntegrationTest.OnOneTimeTearDown()

    OnServerAndClientsCreated()

    This is invoked before the server and client(s) are started. Override this method if you want to make any adjustments to their NetworkManager instances.

    Declaration
    protected override void OnServerAndClientsCreated()
    Overrides
    NetcodeIntegrationTest.OnServerAndClientsCreated()

    OnSetIntegrationTestMode()

    The very first thing invoked during the OneTimeSetup() that determines how this integration test handles NetworkManager instantiation and destruction. NetcodeIntegrationTest.NetworkManagerInstatiationMode Override this method to change the default mode: AllTests

    Declaration
    protected override NetcodeIntegrationTest.NetworkManagerInstatiationMode OnSetIntegrationTestMode()
    Returns
    Type Description
    NetcodeIntegrationTest.NetworkManagerInstatiationMode
    Overrides
    NetcodeIntegrationTest.OnSetIntegrationTestMode()

    OnTimeTravelServerAndClientsConnected()

    Invoked after the server and clients have started and verified their connections with each other.

    Declaration
    protected override void OnTimeTravelServerAndClientsConnected()
    Overrides
    NetcodeIntegrationTest.OnTimeTravelServerAndClientsConnected()

    RethrowTargetInvocationException(Action)

    Declaration
    public void RethrowTargetInvocationException(Action action)
    Parameters
    Type Name Description
    Action action

    VerifyLocalReceived(ulong, ulong, string, bool, int)

    Declaration
    protected void VerifyLocalReceived(ulong objectOwner, ulong sender, string name, bool verifyReceivedFrom, int expectedReceived = 1)
    Parameters
    Type Name Description
    ulong objectOwner
    ulong sender
    string name
    bool verifyReceivedFrom
    int expectedReceived

    VerifyLocalReceivedWithParams(ulong, ulong, string, int, bool, float, string)

    Declaration
    protected void VerifyLocalReceivedWithParams(ulong objectOwner, ulong sender, string name, int i, bool b, float f, string s)
    Parameters
    Type Name Description
    ulong objectOwner
    ulong sender
    string name
    int i
    bool b
    float f
    string s

    VerifyNotReceived(ulong, ulong[])

    Declaration
    protected void VerifyNotReceived(ulong objectOwner, ulong[] receivedBy)
    Parameters
    Type Name Description
    ulong objectOwner
    ulong[] receivedBy

    VerifyRemoteReceived(ulong, ulong, string, ulong[], bool, bool, int)

    Declaration
    protected void VerifyRemoteReceived(ulong objectOwner, ulong sender, string message, ulong[] receivedBy, bool verifyReceivedFrom, bool waitForMessages = true, int expectedReceived = 1)
    Parameters
    Type Name Description
    ulong objectOwner
    ulong sender
    string message
    ulong[] receivedBy
    bool verifyReceivedFrom
    bool waitForMessages
    int expectedReceived

    VerifyRemoteReceivedWithParams(ulong, ulong, string, ulong[], int, bool, float, string)

    Declaration
    protected void VerifyRemoteReceivedWithParams(ulong objectOwner, ulong sender, string message, ulong[] receivedBy, int i, bool b, float f, string s)
    Parameters
    Type Name Description
    ulong objectOwner
    ulong sender
    string message
    ulong[] receivedBy
    int i
    bool b
    float f
    string s

    VerifySentToClientsAndHost(ulong, ulong, string)

    Declaration
    public void VerifySentToClientsAndHost(ulong objectOwner, ulong sender, string methodName)
    Parameters
    Type Name Description
    ulong objectOwner
    ulong sender
    string methodName

    VerifySentToClientsAndHostWithParams(ulong, ulong, string, int, bool, float, string)

    Declaration
    public void VerifySentToClientsAndHostWithParams(ulong objectOwner, ulong sender, string methodName, int i, bool b, float f, string s)
    Parameters
    Type Name Description
    ulong objectOwner
    ulong sender
    string methodName
    int i
    bool b
    float f
    string s

    VerifySentToClientsAndHostWithReceivedFrom(ulong, ulong, string)

    Declaration
    public void VerifySentToClientsAndHostWithReceivedFrom(ulong objectOwner, ulong sender, string methodName)
    Parameters
    Type Name Description
    ulong objectOwner
    ulong sender
    string methodName

    VerifySentToEveryone(ulong, ulong, string)

    Declaration
    public void VerifySentToEveryone(ulong objectOwner, ulong sender, string methodName)
    Parameters
    Type Name Description
    ulong objectOwner
    ulong sender
    string methodName

    VerifySentToEveryoneWithParams(ulong, ulong, string, int, bool, float, string)

    Declaration
    public void VerifySentToEveryoneWithParams(ulong objectOwner, ulong sender, string methodName, int i, bool b, float f, string s)
    Parameters
    Type Name Description
    ulong objectOwner
    ulong sender
    string methodName
    int i
    bool b
    float f
    string s

    VerifySentToEveryoneWithReceivedFrom(ulong, ulong, string)

    Declaration
    public void VerifySentToEveryoneWithReceivedFrom(ulong objectOwner, ulong sender, string methodName)
    Parameters
    Type Name Description
    ulong objectOwner
    ulong sender
    string methodName

    VerifySentToId(ulong, ulong, ulong, string, bool)

    Declaration
    public void VerifySentToId(ulong objectOwner, ulong sender, ulong receiver, string methodName, bool verifyReceivedFrom)
    Parameters
    Type Name Description
    ulong objectOwner
    ulong sender
    ulong receiver
    string methodName
    bool verifyReceivedFrom

    VerifySentToIdWithParams(ulong, ulong, ulong, string, int, bool, float, string)

    Declaration
    public void VerifySentToIdWithParams(ulong objectOwner, ulong sender, ulong receiver, string methodName, int i, bool b, float f, string s)
    Parameters
    Type Name Description
    ulong objectOwner
    ulong sender
    ulong receiver
    string methodName
    int i
    bool b
    float f
    string s

    VerifySentToMe(ulong, ulong, string)

    Declaration
    public void VerifySentToMe(ulong objectOwner, ulong sender, string methodName)
    Parameters
    Type Name Description
    ulong objectOwner
    ulong sender
    string methodName

    VerifySentToMeWithParams(ulong, ulong, string, int, bool, float, string)

    Declaration
    public void VerifySentToMeWithParams(ulong objectOwner, ulong sender, string methodName, int i, bool b, float f, string s)
    Parameters
    Type Name Description
    ulong objectOwner
    ulong sender
    string methodName
    int i
    bool b
    float f
    string s

    VerifySentToMeWithReceivedFrom(ulong, ulong, string)

    Declaration
    public void VerifySentToMeWithReceivedFrom(ulong objectOwner, ulong sender, string methodName)
    Parameters
    Type Name Description
    ulong objectOwner
    ulong sender
    string methodName

    VerifySentToNotId(ulong, ulong, ulong, string, bool)

    Declaration
    public void VerifySentToNotId(ulong objectOwner, ulong sender, ulong notReceiver, string methodName, bool verifyReceivedFrom)
    Parameters
    Type Name Description
    ulong objectOwner
    ulong sender
    ulong notReceiver
    string methodName
    bool verifyReceivedFrom

    VerifySentToNotIdWithParams(ulong, ulong, ulong, string, int, bool, float, string)

    Declaration
    public void VerifySentToNotIdWithParams(ulong objectOwner, ulong sender, ulong notReceiver, string methodName, int i, bool b, float f, string s)
    Parameters
    Type Name Description
    ulong objectOwner
    ulong sender
    ulong notReceiver
    string methodName
    int i
    bool b
    float f
    string s

    VerifySentToNotMe(ulong, ulong, string)

    Declaration
    public void VerifySentToNotMe(ulong objectOwner, ulong sender, string methodName)
    Parameters
    Type Name Description
    ulong objectOwner
    ulong sender
    string methodName

    VerifySentToNotMeWithParams(ulong, ulong, string, int, bool, float, string)

    Declaration
    public void VerifySentToNotMeWithParams(ulong objectOwner, ulong sender, string methodName, int i, bool b, float f, string s)
    Parameters
    Type Name Description
    ulong objectOwner
    ulong sender
    string methodName
    int i
    bool b
    float f
    string s

    VerifySentToNotMeWithReceivedFrom(ulong, ulong, string)

    Declaration
    public void VerifySentToNotMeWithReceivedFrom(ulong objectOwner, ulong sender, string methodName)
    Parameters
    Type Name Description
    ulong objectOwner
    ulong sender
    string methodName

    VerifySentToNotOwner(ulong, ulong, string)

    Declaration
    public void VerifySentToNotOwner(ulong objectOwner, ulong sender, string methodName)
    Parameters
    Type Name Description
    ulong objectOwner
    ulong sender
    string methodName

    VerifySentToNotOwnerWithParams(ulong, ulong, string, int, bool, float, string)

    Declaration
    public void VerifySentToNotOwnerWithParams(ulong objectOwner, ulong sender, string methodName, int i, bool b, float f, string s)
    Parameters
    Type Name Description
    ulong objectOwner
    ulong sender
    string methodName
    int i
    bool b
    float f
    string s

    VerifySentToNotOwnerWithReceivedFrom(ulong, ulong, string)

    Declaration
    public void VerifySentToNotOwnerWithReceivedFrom(ulong objectOwner, ulong sender, string methodName)
    Parameters
    Type Name Description
    ulong objectOwner
    ulong sender
    string methodName

    VerifySentToNotServer(ulong, ulong, string)

    Declaration
    public void VerifySentToNotServer(ulong objectOwner, ulong sender, string methodName)
    Parameters
    Type Name Description
    ulong objectOwner
    ulong sender
    string methodName

    VerifySentToNotServerWithParams(ulong, ulong, string, int, bool, float, string)

    Declaration
    public void VerifySentToNotServerWithParams(ulong objectOwner, ulong sender, string methodName, int i, bool b, float f, string s)
    Parameters
    Type Name Description
    ulong objectOwner
    ulong sender
    string methodName
    int i
    bool b
    float f
    string s

    VerifySentToNotServerWithReceivedFrom(ulong, ulong, string)

    Declaration
    public void VerifySentToNotServerWithReceivedFrom(ulong objectOwner, ulong sender, string methodName)
    Parameters
    Type Name Description
    ulong objectOwner
    ulong sender
    string methodName

    VerifySentToOwner(ulong, ulong, string)

    Declaration
    public void VerifySentToOwner(ulong objectOwner, ulong sender, string methodName)
    Parameters
    Type Name Description
    ulong objectOwner
    ulong sender
    string methodName

    VerifySentToOwnerWithParams(ulong, ulong, string, int, bool, float, string)

    Declaration
    public void VerifySentToOwnerWithParams(ulong objectOwner, ulong sender, string methodName, int i, bool b, float f, string s)
    Parameters
    Type Name Description
    ulong objectOwner
    ulong sender
    string methodName
    int i
    bool b
    float f
    string s

    VerifySentToOwnerWithReceivedFrom(ulong, ulong, string)

    Declaration
    public void VerifySentToOwnerWithReceivedFrom(ulong objectOwner, ulong sender, string methodName)
    Parameters
    Type Name Description
    ulong objectOwner
    ulong sender
    string methodName

    VerifySentToServer(ulong, ulong, string)

    Declaration
    public void VerifySentToServer(ulong objectOwner, ulong sender, string methodName)
    Parameters
    Type Name Description
    ulong objectOwner
    ulong sender
    string methodName

    VerifySentToServerWithParams(ulong, ulong, string, int, bool, float, string)

    Declaration
    public void VerifySentToServerWithParams(ulong objectOwner, ulong sender, string methodName, int i, bool b, float f, string s)
    Parameters
    Type Name Description
    ulong objectOwner
    ulong sender
    string methodName
    int i
    bool b
    float f
    string s

    VerifySentToServerWithReceivedFrom(ulong, ulong, string)

    Declaration
    public void VerifySentToServerWithReceivedFrom(ulong objectOwner, ulong sender, string methodName)
    Parameters
    Type Name Description
    ulong objectOwner
    ulong sender
    string methodName
    In This Article
    Back to top
    Copyright © 2024 Unity Technologies — Trademarks and terms of use
    • Legal
    • Privacy Policy
    • Cookie Policy
    • Do Not Sell or Share My Personal Information
    • Your Privacy Choices (Cookie Settings)