local ____exports = {}
--- From: https://easings.net/#easeInOutSine
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeOutBounce(self, time)
    local n1 = 7.5625
    local d1 = 2.75
    if time < 1 / d1 then
        return n1 * time * time
    end
    if time < 2 / d1 then
        time = time - 1.5 / d1
        return n1 * time * time + 0.75
    end
    if time < 2.5 / d1 then
        time = time - 2.25 / d1
        return n1 * time * time + 0.9375
    end
    time = time - 2.625 / d1
    return n1 * time * time + 0.984375
end
--- From: https://easings.net/#easeInSine
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeInSine(self, time)
    return 1 - math.cos(time * math.pi / 2)
end
--- From: https://easings.net/#easeOutSine
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeOutSine(self, time)
    return math.sin(time * math.pi / 2)
end
--- From: https://easings.net/#easeInOutSine
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeInOutSine(self, time)
    return -(math.cos(math.pi * time) - 1) / 2
end
--- From: https://easings.net/#easeInCubic
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeInCubic(self, time)
    return time * time * time
end
--- From: https://easings.net/#easeOutCubic
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeOutCubic(self, time)
    return 1 - (1 - time) ^ 3
end
--- From: https://easings.net/#easeInOutCubic
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeInOutCubic(self, time)
    return time < 0.5 and 4 * time * time * time or 1 - (-2 * time + 2) ^ 3 / 2
end
--- From: https://easings.net/#easeInQuint
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeInQuint(self, time)
    return time * time * time * time * time
end
--- From: https://easings.net/#easeOutQuint
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeOutQuint(self, time)
    return 1 - (1 - time) ^ 5
end
--- From: https://easings.net/#easeInOutQuint
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeInOutQuint(self, time)
    return time < 0.5 and 16 * time * time * time * time * time or 1 - (-2 * time + 2) ^ 5 / 2
end
--- From: https://easings.net/#easeInCirc
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeInCirc(self, time)
    return 1 - math.sqrt(1 - time ^ 2)
end
--- From: https://easings.net/#easeOutCirc
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeOutCirc(self, time)
    return math.sqrt(1 - (time - 1) ^ 2)
end
--- From: https://easings.net/#easeInOutCirc
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeInOutCirc(self, time)
    return time < 0.5 and (1 - math.sqrt(1 - (2 * time) ^ 2)) / 2 or (math.sqrt(1 - (-2 * time + 2) ^ 2) + 1) / 2
end
--- From: https://easings.net/#easeInElastic
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeInElastic(self, time)
    local c4 = 2 * math.pi / 3
    return time == 0 and 0 or (time == 1 and 1 or -2 ^ (10 * time - 10) * math.sin((time * 10 - 10.75) * c4))
end
--- From: https://easings.net/#easeOutElastic
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeOutElastic(self, time)
    local c4 = 2 * math.pi / 3
    return time == 0 and 0 or (time == 1 and 1 or 2 ^ (-10 * time) * math.sin((time * 10 - 0.75) * c4) + 1)
end
--- From: https://easings.net/#easeInOutElastic
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeInOutElastic(self, time)
    local c5 = 2 * math.pi / 4.5
    return time == 0 and 0 or (time == 1 and 1 or (time < 0.5 and -(2 ^ (20 * time - 10) * math.sin((20 * time - 11.125) * c5)) / 2 or 2 ^ (-20 * time + 10) * math.sin((20 * time - 11.125) * c5) / 2 + 1))
end
--- From: https://easings.net/#easeInQuad
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeInQuad(self, time)
    return time * time
end
--- From: https://easings.net/#easeOutQuad
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeOutQuad(self, time)
    return 1 - (1 - time) * (1 - time)
end
--- From: https://easings.net/#easeInOutQuad
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeInOutQuad(self, time)
    return time < 0.5 and 2 * time * time or 1 - (-2 * time + 2) ^ 2 / 2
end
--- From: https://easings.net/#easeInQuart
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeInQuart(self, time)
    return time * time * time * time
end
--- From: https://easings.net/#easeOutQuart
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeOutQuart(self, time)
    return 1 - (1 - time) ^ 4
end
--- From: https://easings.net/#easeInOutQuart
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeInOutQuart(self, time)
    return time < 0.5 and 8 * time * time * time * time or 1 - (-2 * time + 2) ^ 4 / 2
end
--- From: https://easings.net/#easeInExpo
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeInExpo(self, time)
    return time == 0 and 0 or 2 ^ (10 * time - 10)
end
--- From: https://easings.net/#easeOutExpo
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeOutExpo(self, time)
    return time == 1 and 1 or 1 - 2 ^ (-10 * time)
end
--- From: https://easings.net/#easeInOutExpo
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeInOutExpo(self, time)
    return time == 0 and 0 or (time == 1 and 1 or (time < 0.5 and 2 ^ (20 * time - 10) / 2 or (2 - 2 ^ (-20 * time + 10)) / 2))
end
--- From: https://easings.net/#easeInBack
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeInBack(self, time)
    local c1 = 1.70158
    local c3 = c1 + 1
    return c3 * time * time * time - c1 * time * time
end
--- From: https://easings.net/#easeOutBack
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeOutBack(self, time)
    local c1 = 1.70158
    local c3 = c1 + 1
    return 1 + c3 * (time - 1) ^ 3 + c1 * (time - 1) ^ 2
end
--- From: https://easings.net/#easeInOutBack
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeInOutBack(self, time)
    local c1 = 1.70158
    local c2 = c1 * 1.525
    return time < 0.5 and (2 * time) ^ 2 * ((c2 + 1) * 2 * time - c2) / 2 or ((2 * time - 2) ^ 2 * ((c2 + 1) * (time * 2 - 2) + c2) + 2) / 2
end
--- From: https://easings.net/#easeInBounce
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeInBounce(self, time)
    return 1 - ____exports.easeOutBounce(nil, 1 - time)
end
--- From: https://easings.net/#easeInOutBounce
-- 
-- @param time A value between 0 and 1 that represents how far along you are in the transition.
function ____exports.easeInOutBounce(self, time)
    return time < 0.5 and (1 - ____exports.easeOutBounce(nil, 1 - 2 * time)) / 2 or (1 + ____exports.easeOutBounce(nil, 2 * time - 1)) / 2
end
return ____exports
