private static IEnumerator UpdateEyeTrackerState()
        {
            while (true)
            {
                // Start or stop eye tracker from avatar quick menu
                var useEyeTracker      = ExpressionParameterManager.GetBoolParameter("UseEyeTracker");
                var isEyeTrackerActive = eyeTracker?.Active ?? false;

                if (isEyeTrackerActive && needsExpressionUpdate)
                {
                    needsExpressionUpdate = false;
                    UpdateExpressionParameters();
                }

                if (!isChangingActiveStatus)
                {
                    if (isEyeTrackerActive && !useEyeTracker)
                    {
                        MelonLogger.Msg("Eye Tracker Stopping");
                        isChangingActiveStatus = true;
                        changeActiveStateTimer = DateTime.Now;
                        eyeTracker.Stop();
                    }
                    else if (!isEyeTrackerActive && useEyeTracker)
                    {
                        MelonLogger.Msg("Eye Tracker Starting");
                        isChangingActiveStatus = eyeTracker.Start();
                        changeActiveStateTimer = DateTime.Now;
                    }
                }
                else
                {
                    if ((DateTime.Now - changeActiveStateTimer).TotalSeconds >= TIMER_CHANGE_ACTIVE_STATE)
                    {
                        MelonLogger.Msg("Eye Tracker State Change Timed Out");
                        isChangingActiveStatus = false;
                        ExpressionParameterManager.SetParameter("UseEyeTracker", isEyeTrackerActive, true);
                    }
                }

                yield return(new WaitForSeconds(isEyeTrackerActive ? 0.01f : 0.5f));
            }
        }
        private static void UpdateExpressionParameters()
        {
            if (eyeTracker?.Active ?? false)
            {
                ExpressionParameterManager.SetParameter("LeftEyeBlink", eyeTracker.LeftEye.Expression.Blink, true);
                ExpressionParameterManager.SetParameter("RightEyeBlink", eyeTracker.RightEye.Expression.Blink, true);

                ExpressionParameterManager.SetParameter("LeftEyeLid", eyeTracker.LeftEye.Expression.Openness, true);
                ExpressionParameterManager.SetParameter("RightEyeLid", eyeTracker.RightEye.Expression.Openness, true);

                ExpressionParameterManager.SetParameter("LeftEyeX", eyeTracker.LeftEye.Expression.PupilCenter.x);
                ExpressionParameterManager.SetParameter("RightEyeX", eyeTracker.RightEye.Expression.PupilCenter.x);
                ExpressionParameterManager.SetParameter("EyesX", eyeTracker.RightEye.Expression.Blink ? eyeTracker.LeftEye.Expression.PupilCenter.x : eyeTracker.RightEye.Expression.PupilCenter.x);

                ExpressionParameterManager.SetParameter("LeftEyeY", eyeTracker.LeftEye.Expression.PupilCenter.y);
                ExpressionParameterManager.SetParameter("RightEyeY", eyeTracker.RightEye.Expression.PupilCenter.y);
                ExpressionParameterManager.SetParameter("EyesY", eyeTracker.RightEye.Expression.Blink ? eyeTracker.LeftEye.Expression.PupilCenter.y : eyeTracker.RightEye.Expression.PupilCenter.y);
            }
        }