--DISPLAY EVERY FRAME SMH
function()
    --- CPU benchmarking ---
    local start
    local aura_env = aura_env
    local Debug = aura_env.Debug
    if Debug then
        aura_env.count = aura_env.count or 1
        aura_env.count = (aura_env.count + 1) % 600
        start = debugprofilestop()
    end

    -- Setting some aura_env to local variables to improve performance --
    local ClassID = aura_env.ClassID
    local SpecID = aura_env.SpecID
    local AoE = aura_env.AoE
    local Mode = aura_env.Mode
    local ColorFunction = aura_env.Color
    local Threshold = aura_env.Threshold
    local BasicReductions = aura_env.BasicReductions

    -- Armor calulation // Armor scales differently depending on the enemy level, this makes sure is stays accurate --
    local Armor = select(2, UnitArmor("player"))
    Armor = 1 - C_PaperDollInfo.GetArmorEffectiveness(Armor, aura_env.TargetLevel) -- Gets the reduction percentage and makes it usable

    -- All Classes
    local CurrentHealth = UnitHealth("player")
    local MaxHealth = UnitHealthMax("player")
    local Vers = 1 - (GetCombatRatingBonus(31) / 100)
    local Avoid = 1
    local ScanTarget = false
    if AoE then
        Avoid = 1 - (GetAvoidance() / 100)
    end
    local Elusive = 1
    local StaggerP, StaggerM = 1, 1
    local Absorbs = UnitGetTotalAbsorbs("player")
    local AbsorbsP, AbsorbsM = Absorbs, Absorbs

    -- Initialize some variables --
    local ClassDRP, ClassDRM = 1, 1
    local PImmunity, MImmunity = 0, 0

    ----- General damage reduction buffs -----
    local n = 1
    local BuffID = select(10, UnitBuff("player", n))
    while BuffID do
        local Reduction = 1
        local PhysicalReduction = 1
        local MagicReduction = 1

        if BasicReductions[BuffID] then
            ClassDRP = ClassDRP * BasicReductions[BuffID][1]
            ClassDRM = ClassDRM * BasicReductions[BuffID][2]
        end

        ---- More complex tracking ----

        local AMS, BloodS = 0, 0

        --- Death Knight ---
        if BuffID == 48792 then
            Reduction = 1 + (tonumber(select(18, UnitBuff("player", n)) or 0)) / 100 -- Icebound Fortitude // using plus since the tooltip returns a negative value

        elseif BuffID == 48707 then
            AMS = (select(16, UnitBuff("player", n)) or 0) -- Anti-Magic Shell

        elseif BuffID == 77535 then
            BloodS = (select(16, UnitBuff("player", n)) or 0) -- Blood Shield

            --- Demon Hunter ---
        elseif BuffID == 212800 then
            if IsPlayerSpell(205411) then Reduction = 0.50 -- Blur
            else Reduction = 0.65 end

        elseif BuffID == 196555 then PImmunity = 1 -- Netherwalk

            --- Druid ---
        elseif BuffID == 102342 then
            Reduction = 1 + (tonumber(select(16, UnitBuff("player", n)) or 0)) / 100 -- Ironbark // using plus since the tooltip returns a negative value

            --- Hunter ---
        elseif BuffID == 186265 then -- Aspect of the Turtle
            PImmunity = 1
            MImmunity = 1

            --- Mage ---
        elseif BuffID == 45438 then -- Ice Block
            PImmunity = 1
            MImmunity = 1

            --- Monk ---
        elseif BuffID == 261769 then
            Reduction = 1 + (select(16, UnitBuff("player", n)) or 0) / 100 -- Inner Strength // using plus since the tooltip returns a negative value

        elseif BuffID == 115295 then
            Absorbs = Absorbs - select(16, UnitBuff("player", n)) -- Guard // prevents Guard from counting as a normal absorb

            --- Paladin ---
        elseif BuffID == 210320 then
            Reduction = 1 + (tonumber(select(16, UnitBuff("player", n)) or 0)) / 100 -- Devotion Aura // using plus since the tooltip returns a negative value

        elseif BuffID == 1022 then PImmunity = 1 -- Blessing of Protection
        elseif BuffID == 204018 then MImmunity = 1 -- Blessing of Spellwarding

        elseif BuffID == 188370 then
            Reduction = 1 - (GetMasteryEffect() / 2.85) / 100 -- Consecration // May not be 100% accurate, but it's good enough for now
            if IsEquippedItem(137047) then Reduction = Reduction * 0.96 end -- Consecration (Legendary Ring)

        elseif BuffID == 642 then -- Divine Shield
            PImmunity = 1
            MImmunity = 1

            --- Priest ---
        elseif BuffID == 45242 then
            Reduction = 1 - (select(3, UnitBuff("player", n)) or 0) * 15 / 100 -- Focused Will

        elseif BuffID == 139 then
            if IsPlayerSpell(235189) and UnitBuff("player", n, nil, "player") then
                Reduction = 0.90 -- Perseverance - Talent
            end

            --- Rogue ---
        elseif BuffID == 1966 then
            if not AoE and IsPlayerSpell(79008)
                then Elusive = 0.70 -- Elusiveness
            else -- Feint
                if AoE then Avoid = Avoid * 0.50 end
            end
        elseif BuffID == 31224 then MImmunity = 1 -- Cloak of Shadows

            --- Shaman ---
        elseif BuffID == 260881 then
            Reduction = 1 - (tonumber(select(3, UnitBuff("player", n)) or 0)) * 5 / 100 -- Ghost in the Mist - Talent

            --- Warlock ---

            --- Warrior ---
        elseif BuffID == 184362 and IsPlayerSpell(208154) then -- Enrage
            Reduction = 0.90 -- War Paint - Talent

        end

        AbsorbsP = Absorbs - AMS
        AbsorbsM = Absorbs - BloodS

        ClassDRP = ClassDRP * Reduction * PhysicalReduction
        ClassDRM = ClassDRM * Reduction * MagicReduction
        n = n + 1
        BuffID = select(10, UnitBuff("player", n))
    end

    ----- Damage reductions with special calculations -----

    --- Death Knight ---
    if ClassID == 6 then
        local Necropolis = 1
        if IsPlayerSpell(206967) then -- Will of the Necropolis - Talent
            if CurrentHealth / MaxHealth < 0.35 then Necropolis = 0.65
            end
        end
        ClassDRP = ClassDRP * Necropolis
        ClassDRM = ClassDRM * Necropolis
    end

    --- Demon Hunter ---
    if ClassID == 12 then
        local HavocDemWards = 1
        local VengDemWards = 1
        if SpecID == 1 then
            HavocDemWards = 0.90 -- Demonic Wards - Passive
        elseif SpecID == 2 then
            VengDemWards = 0.90 -- Demonic Wards - Passive
            ScanTarget = true
        end

        ClassDRP = ClassDRP * VengDemWards
        ClassDRM = ClassDRM * VengDemWards * HavocDemWards
    end

    --- Druid ---
    if ClassID == 11 then
        local GuardA = 1
        if IsEquippedItem(137015) and IsPlayerSpell(16931) then
            GuardA = 0.895 -- Legendary chest
        elseif IsPlayerSpell(16931) then
            GuardA = 0.94 -- Thick Hide (Guardian Affinity)
        end
        if SpecID == 3 then
            if IsPlayerSpell(204053) then
                ScanTarget = true
            end
        end

        ClassDRP = ClassDRP * GuardA
        ClassDRM = ClassDRM * GuardA
    end

    --- Hunter ---
    if ClassID == 3 then
    end

    --- Mage ---
    if ClassID == 8 then
    end

    --- Monk ---
    if ClassID == 10 then
        if SpecID == 1 then
            ScanTarget = true
            -- Gets stagger agaist current target, if no target is found use base --
            local StaggerBase, StaggerTarget = C_PaperDollInfo.GetStaggerPercentage("player")
            if not StaggerTarget then StaggerTarget = StaggerBase end
            StaggerM = StaggerTarget * 0.35
            StaggerP = 1 - StaggerTarget / 100
            StaggerM = 1 - StaggerM / 100

            -- Stagger cap --
            local Stagger = UnitStagger("player") or 0 -- Calculate MaxHealth effective reduction for Stagger
            local StaggerCapP = (CurrentHealth + AbsorbsP) / (CurrentHealth + AbsorbsP + 100 * MaxHealth - Stagger * 10)
            local StaggerCapM = (CurrentHealth + AbsorbsM) / (CurrentHealth + AbsorbsM + 100 * MaxHealth - Stagger * 10)
            if StaggerCapP < 0.01 then StaggerCapP = 0.01 end -- Stagger caps at 99%
            if StaggerCapM < 0.01 then StaggerCapM = 0.01 end
            if StaggerP < StaggerCapP then StaggerP = StaggerCapP end
            if StaggerM < StaggerCapM then StaggerM = StaggerCapM end
        end
        if SpecID == 3 then
            local Karma = 0
            aura_env.GoodKarma = IsPlayerSpell(280195) -- Talent
            Karma = aura_env.TouchOfKarma
            Absorbs = Absorbs + Karma
            AbsorbsP = AbsorbsP + Karma
            AbsorbsM = AbsorbsM + Karma
        end

        ClassDRP = ClassDRP * StaggerP
        ClassDRM = ClassDRM * StaggerM
    end

    --- Paladin ---
    if ClassID == 2 then
        local LastDefender = 1
        if SpecID == 2 then -- Protection
            LastDefender = 1 - (1 - 0.97 ^ aura_env.NameplateCounter)
        end
        ClassDRP = ClassDRP * LastDefender
        ClassDRM = ClassDRM * LastDefender
    end

    --- Priest ---
    if ClassID == 5 then
    end

    --- Rogue ---
    if ClassID == 4 then
    end

    --- Shaman ---
    if ClassID == 7 then
    end

    --- Warlock ---
    if ClassID == 9 then
        local SoulLink = 1
        local DestructionMastery = 1
        if SpecID == 2 then -- Soul Link passive for Demonology Warlocks
            if UnitExists("pet") then
                SoulLink = 0.80
            end
        elseif SpecID == 3 then
            DestructionMastery = 1 - ((GetMasteryEffect() / 9) / 100) -- Destruction mastery effect
        end

        ClassDRP = ClassDRP * SoulLink * DestructionMastery
        ClassDRM = ClassDRM * SoulLink * DestructionMastery
    end

    --- Warrior ---
    if ClassID == 1 then
        if SpecID == 3 then
            ScanTarget = true
        end

        ClassDRP = ClassDRP
        ClassDRM = ClassDRM
    end

    --- Miscellaneous ---
    if aura_env.HighmountainTauren then
        local Stamina = UnitStat("player", 3)
        local RuggedTenacity = floor((Stamina * 0.0003 * 20) + 0.5)
        Absorbs = Absorbs + RuggedTenacity
    end

    --- Checking debuffs on target if needed ---
    if ScanTarget then
        local TD = 1
        local DebuffID = select(10, UnitDebuff("target", TD))
        while DebuffID do
            local DebuffTarget = 1
            local DebuffTargetP = 1
            local DebuffTargetM = 1

            --- Demon Hunter ---
            if DebuffID == 207744 and select(3, UnitDebuff("target", TD, nil, "player")) then
                DebuffTarget = 0.60 -- Fiery Brand

            elseif DebuffID == 268178 and select(3, UnitDebuff("target", TD, nil, "player")) then
                DebuffTarget = 0.94 -- Void Reaver -- Talent

                --- Druid ---
            elseif DebuffID == 192090 and select(3, UnitDebuff("target", TD, nil, "player")) then
                DebuffTarget = 1 - 0.02 * (select(3, UnitDebuff("target", TD, nil, "player")) or 0) -- Rend and Tear - Talent

                --- Monk ---
            elseif DebuffID == 123725 then
                DebuffTarget = 1 + 0.01 * (select(17, UnitDebuff("target", TD, nil, "player")) or 0) -- Breath of Fire // using plus since the tooltip returns a negative value

                --- Warrior ---
            elseif DebuffID == 1160 and select(7, UnitDebuff("target", TD)) == "player" then
                DebuffTarget = 0.80 -- Demoralizing Shout
            end

            ClassDRP = ClassDRP * DebuffTarget * DebuffTargetP
            ClassDRM = ClassDRM * DebuffTarget * DebuffTargetM
            TD = TD + 1
            DebuffID = select(10, UnitDebuff("target", TD))
        end
    end

    -- Damage taken modifiers --
    local ReductionP = Vers * Avoid * ClassDRP * Armor * Elusive
    local ReductionM = Vers * Avoid * ClassDRM * Elusive
    -- CurrentHealth health and shields --
    local EHP = (CurrentHealth + AbsorbsP) / ReductionP
    local EHM = (CurrentHealth + AbsorbsM) / ReductionM

    -- Export pre-avoidance EHP, EHM and immunity status as global variables --
    if aura_env.GlobalExport then
        -- Calculate max effective health (no absorbs) --
        local EHPMaxHealth = (MaxHealth + AbsorbsP) / ReductionP
        local EHMMaxHealth = (MaxHealth + AbsorbsM) / ReductionM
        -- Export to globals --
        local Export = WA_ZELER_EH
        Export.EHPMAX, Export.EHMMAX = EHPMaxHealth * Avoid * Elusive, EHMMaxHealth * Avoid * Elusive
        Export.EHP, Export.EHM = EHP * Avoid * Elusive, EHM * Avoid * Elusive

        Export.REDP, Export.REDM = ReductionP / Avoid / Elusive, ReductionM / Avoid / Elusive
        Export.ABS, Export.ABSP, Export.ABSM = Absorbs, AbsorbsP, AbsorbsM
        Export.EHPIMMUNITY, Export.EHMIMMUNITY = PImmunity, MImmunity
        Export.EHARMOR = Armor
        Export.STAGGERP, Export.STAGGERM = StaggerP, StaggerM
    end

    -- Formatting numbers --
    local DivideP, DivideM = 1, 1
    local ImportDecimal = aura_env.DisplayDecimals
    local EHPdecimal, EHMdecimal = ImportDecimal, ImportDecimal
    local letterP, letterM = "", ""
    if EHP > 10 ^ 9 then
        EHP = EHP / 10 ^ 9
        DivideP = 10 ^ 9
        letterP = "b"
        EHPdecimal = 2
    elseif EHP > 10 ^ 8 then
        EHP = EHP / 10 ^ 6
        DivideP = 10 ^ 6
        letterP = "m"
        EHPdecimal = 0
    elseif EHP > 10 ^ 7 then
        EHP = EHP / 10 ^ 6
        DivideP = 10 ^ 6
        letterP = "m"
    elseif EHP > 10 ^ 6 then
        EHP = EHP / 10 ^ 6
        DivideP = 10 ^ 6
        letterP = "m"
        EHPdecimal = 2
    elseif EHP > 10 ^ 5 then
        EHP = EHP / 10 ^ 3
        DivideP = 10 ^ 3
        letterP = "k"
        EHPdecimal = 0
    elseif EHP > 10 ^ 4 then
        EHP = EHP / 10 ^ 3
        DivideP = 10 ^ 3
        letterP = "k"
    elseif EHP > 10 ^ 3 then
        EHP = EHP / 10 ^ 3
        DivideP = 10 ^ 3
        letterP = "k"
        EHPdecimal = 2
    elseif EHP > -1 then
        EHP = EHP / 1
        DivideP = 1
        EHPdecimal = 0
    end

    if EHM > 10 ^ 9 then
        EHM = EHM / 10 ^ 9
        DivideM = 10 ^ 9
        letterM = "b"
        EHMdecimal = 2
    elseif EHM > 10 ^ 8 then
        EHM = EHM / 10 ^ 6
        DivideM = 10 ^ 6
        letterM = "m"
        EHMdecimal = 0
    elseif EHM > 10 ^ 7 then
        EHM = EHM / 10 ^ 6
        DivideM = 10 ^ 6
        letterM = "m"
    elseif EHM > 10 ^ 6 then
        EHM = EHM / 10 ^ 6
        DivideM = 10 ^ 6
        letterM = "m"
        EHMdecimal = 2
    elseif EHM > 10 ^ 5 then
        EHM = EHM / 10 ^ 3
        DivideM = 10 ^ 3
        letterM = "k"
        EHMdecimal = 0
    elseif EHM > 10 ^ 4 then
        EHM = EHM / 10 ^ 3
        DivideM = 10 ^ 3
        letterM = "k"
    elseif EHM > 10 ^ 3 then
        EHM = EHM / 10 ^ 3
        DivideM = 10 ^ 3
        letterM = "k"
        EHMdecimal = 2
    elseif EHM > -1 then
        EHM = EHM / 1
        DivideM = 1
        EHMdecimal = 0
    end

    -- Format displayed text with appropriate colors --
    local Color = ""
    if Mode ~= "magic" then
        for i = 1, 6 do
            if EHP >= Threshold[1][i] / DivideP then Color = ColorFunction[i] end
        end
        if PImmunity == 1 then Color = ColorFunction[7] end
        EHP = string.format("P:|c%s%." .. EHPdecimal .. "f" .. letterP .. "|r", Color, EHP)
    else EHP = ""
    end

    if Mode ~= "physical" then
        for i = 1, 6 do
            if EHM >= Threshold[2][i] / DivideM then Color = ColorFunction[i] end
        end
        if MImmunity == 1 then Color = ColorFunction[7] end
        EHM = string.format("M:|c%s%." .. EHMdecimal .. "f" .. letterM .. "|r", Color, EHM)
    else EHM = ""
    end

    local separator = ""
    if Mode == "both" and aura_env.Align == "horizontal" then separator = " | "
    elseif Mode == "both" and aura_env.Align == "vertical" then separator = "\n" end

    --- CPU Benchmarking ---
    if Debug then
        aura_env.time = (aura_env.time or 0) + debugprofilestop() - start
        if aura_env.count == 0 then
            print(aura_env.time)
            aura_env.time = 0
        end
        return "P: " .. ReductionP .. "\n" .. "M: " .. ReductionM
    end

    return EHP .. separator .. EHM
end

--CUSTOM TRIGGER
function(t)
    return t[1]
end

--TRIGGER 1 - ALIVE

--ACTIVE_TALENT_GROUP_CHANGED
function()
    aura_env.SpecID = GetSpecialization()
end

--COMBAT_LOG_EVENT_UNFILTERED
function(event)
    -- Original code from https://wago.io/B1M5OqeFb
    if aura_env.ClassID == 10 and aura_env.SpecID == 3 then
        local CLEU = {CombatLogGetCurrentEventInfo()}
        local message = CLEU[2]
        local destName = CLEU[9]
        local Multiplier = 0.5
        if aura_env.GoodKarma then
            Multiplier = 1
        end
        if destName and UnitIsUnit("player", destName) then
            if message == "SPELL_ABSORBED" then
                local chk = CLEU[9]
                local spellID, absorbed = 0, 0
                if type(chk) == "number" then -- Spell
                    spellID = CLEU[19]
                    absorbed = CLEU[22]
                else -- Swing
                    spellID = CLEU[16]
                    absorbed = CLEU[19]
                end
                if spellID == 122470 then
                    aura_env.TouchOfKarma = math.max(aura_env.TouchOfKarma - absorbed, 0)
                end
            elseif message == "SPELL_AURA_APPLIED" then
                local spellID = CLEU[12]
                if spellID == 122470 then
                    aura_env.maxValue = UnitHealthMax("player") * Multiplier
                    aura_env.TouchOfKarma = aura_env.maxValue
                end
            elseif message == "SPELL_AURA_REMOVED" then
                local spellID = CLEU[12]
                if spellID == 122470 then
                    aura_env.TouchOfKarma = 0
                end
            end
        end
    end
end

--PLAYER_TARGET_CHANGED,ENCOUNTER_START,INSTANCE_ENCOUNTER_ENGAGE_UNIT
function()
    local PlayerLevel = aura_env.PlayerLevel
    local TargetLevel = PlayerLevel
    if UnitExists("boss1") then
        TargetLevel = UnitLevel("boss1")
    elseif UnitExists("target") then
        TargetLevel = UnitLevel("target")
    end
    if TargetLevel == -1 then -- Raid boss
        TargetLevel = PlayerLevel + 3
        -- elseif TargetLevel < aura_env.PlayerLevel then
        --     TargetLevel = PlayerLevel -- Prevents the armor scaling from looking too strange. Currently disabled
    end
    aura_env.TargetLevel = TargetLevel
end

--PLAYER_LEVEL_UP
function(event, NewLevel)
    aura_env.PlayerLevel = NewLevel
end

--EVERY FRAME?? (For last defender - delet?)
function()
    if aura_env.ClassID == 2 and aura_env.SpecID == 2 then -- Enable for Protection Paladins only
        if IsPlayerSpell(203791) then -- Last Defender - talent
            local now = GetTime()
            if now - aura_env.NameplateCheck >= 0.1 then -- Throttle
                aura_env.NameplateCheck = now
                local counter = 0
                local i
                for i = 1, 40 do
                    local unit = "nameplate" .. i
                    if UnitExists(unit) and not UnitIsFriend("player", unit) then
                        if WeakAuras.GetRange(unit) < 8 then -- 8y range check
                            counter = counter + 1
                        end
                    end
                end
                aura_env.NameplateCounter = counter
            end
        else aura_env.NameplateCounter = 0 -- Reset counter if the talent is not selected
        end
    end
end

--INIT-- Made by Zeler-Ravencrest EU, with great help from Stryer-Ravencrest EU
aura_env.Mode = "both" -- Choose from "physical", "magic", "both" to change the value(s) displayed
aura_env.Align = "vertical" -- Choose which alignment you want. "vertical" for vertical alignment, "horizontal" for horizontal alignment
aura_env.AoE = true -- Enable avoidance with true and disable it with false
aura_env.GlobalExport = true -- Enable export of certain variables as global variables for use in other weakauras
aura_env.Debug = false -- Enable debug with true. It will then return the damage reduction multipliers
local text = true -- Disable the 'P:' and the 'M:' with false
aura_env.DisplayDecimals = 1 -- The number of decimals displayed

aura_env.PlayerLevel = UnitLevel("player")
aura_env.TargetLevel = aura_env.PlayerLevel
aura_env.TouchOfKarma = 0
aura_env.GoodKarma = IsPlayerSpell(280195) -- Wind Walker Monk - Talent
aura_env.HighmountainTauren = IsPlayerSpell(255659) -- Rugged Tenacity - Passive
aura_env.NameplateCheck = 0 -- Protection Paladin - Last Defender - talent
aura_env.NameplateCounter = 0 -- Protection Paladin - Last Defender - talent

-- Color values, the accepted values are from 0 to 255
-- {red, green, blue}
aura_env.Color = {
    {0, 255, 0}, -- Lowest HP
    {0, 255, 0},
    {0, 255, 0},
    {0, 255, 0},
    {0, 255, 0},
    {0, 255, 0}, -- Highest HP
    {0, 255, 0}, -- Immunity color
}

-- Thresholds at which the color changes (leave the first 0)
aura_env.Threshold = {
    {0, 1, 2, 3, 4, 5}, -- Physical EH
    {0, 1, 2, 3, 4, 5}, -- Magic EH
}

local function RGBtoHex(rgb)
    return string.format("ff%02x%02x%02x", rgb[1], rgb[2], rgb[3])
end

for i = 1, #aura_env.Color do
    aura_env.Color[i] = RGBtoHex(aura_env.Color[i])
end

-- Check player class and spec
aura_env.ClassID = select(3, UnitClass("player"))
aura_env.SpecID = GetSpecialization()

-- Class self-buffs: [Spell ID] = {Phys Reduction, Magic Reduction}
aura_env.BasicReductions = {

    --- Death Knight ---
    [194679] = {0.70, 0.70}, -- Rune Tap

    --- Demon Hunter ---

    --- Druid ---
    [158792] = {0.91, 0.91}, -- Pulverize
    [22812] = {0.80, 0.80}, -- Barkskin
    [61336] = {0.50, 0.50}, -- Survival Instincts

    --- Hunter ---
    [186265] = {0.70, 0.70}, -- Aspect of the Turtle
    [264735] = {0.80, 0.80}, -- Survival of the Fittest

    --- Mage ---
    [113862] = {0.40, 0.40}, -- Greater Invisibility
    [235450] = {1, 0.85}, -- Prismatic Barrier

    --- Monk ---
    [120954] = {0.80, 0.80}, -- Fortifying Brew (BrM)
    [243435] = {0.80, 0.80}, -- Fortifying Brew (MW)
    [122278] = {0.80, 0.80}, -- Dampen Harm, assumed at minimum reduction
    [122783] = {1, 0.40}, -- Diffuse Magic
    [115176] = {0.40, 0.40}, -- Zen Meditation

    --- Paladin ---
    [498] = {0.80, 0.80}, -- Divine Protection
    [31850] = {0.80, 0.80}, -- Ardent Defender
    [205191] = {0.65, 1}, -- Eye for an Eye - talent
    [86659] = {0.50, 0.50}, -- Guardian of Ancient Kings
    [212641] = {0.50, 0.50}, -- Guardian of Ancient Kings - Glyph of the Queen
    [183436] = {0.70, 0.70}, -- Retribution - passive
    [6940] = {0.70, 0.70}, -- Blessing of Sacrifice
    [204335] = {0.80, 0.80}, -- Aegis of Light - talent

    --- Priest ---
    [47585] = {0.40, 0.40}, -- Dispersion
    [193065] = {0.90, 0.90}, -- Masochism - talent
    [232698] = {0.90, 1}, -- Shadowform
    [33206] = {0.60, 0.60}, -- Pain Suppression
    -- [194384] = {0.97, 0.97}, -- Leniece - talent -- Currently disabled due to being unable to track if the casting priest has the talent or not
    [81782] = {0.75, 0.75}, -- Power Word: Barrier

    --- Rogue ---
    [45182] = {0.15, 0.15}, -- Cheating Death - Cheat Death talent

    --- Shaman ---
    [108271] = {0.60, 0.60}, -- Astral Shift
    [98007] = {0.90, 0.90}, -- Spirit Link Totem

    --- Warlock ---
    [104773] = {0.60, 0.60}, -- Unending Resolve

    --- Warrior ---
    [197690] = {0.80, 0.80}, -- Defensive Stance
    [118038] = {0.70, 0.70}, -- Die by the Sword
    [184364] = {0.70, 0.70}, -- Enraged Regeneration
    [871] = {0.60, 0.60}, -- Shield Wall
    [23920] = {1, 0.80}, -- Spell Reflection
    [223658] = {0.70, 0.70}, -- Safeguard

    --- Miscellaneous ---
    [241836] = {0.95, 0.95}, -- Shadow of Celumbra
    [65116] = {0.90, 1}, -- Stoneform
    [211080] = {0.90, 0.90}, -- Comforting light (Court of Stars)
    [273809] = {1.30, 1.30} -- Idol of Rage
}

if aura_env.GlobalExport then
    WA_ZELER_EH = {}
end
