public CalculationOptionsDPSWarr(Character character) : this()
        {
            #region DPSWarr Talents Import
            try
            {
                WebRequestWrapper wrw = new WebRequestWrapper();

                if (character.Class == Character.CharacterClass.Warrior && character.Name != null && character.Realm != null)
                {
                    XmlDocument docTalents = wrw.DownloadCharacterTalentTree(character.Name, character.Region, character.Realm);

                    //<talentTab>
                    //  <talentTree value="2550050300230151333125100000000000000000000002030302010000000000000"/>
                    //</talentTab>
                    if (docTalents != null)
                    {
                        string talentCode = docTalents.SelectSingleNode("page/characterInfo/talentTab/talentTree").Attributes["value"].Value;
                        TalentsSaved  = true;
                        DeepWounds    = int.Parse(talentCode.Substring(8, 1));
                        TwoHandedSpec = int.Parse(talentCode.Substring(9, 1));
                        Impale        = int.Parse(talentCode.Substring(10, 1));
                        DeathWish     = int.Parse(talentCode.Substring(12, 1));
                        MortalStrike  = int.Parse(talentCode.Substring(19, 1));
                        Cruelty       = int.Parse(talentCode.Substring(24, 1));
                        ImpSlam       = int.Parse(talentCode.Substring(34, 1));
                        WeaponMastery = int.Parse(talentCode.Substring(36, 1));
                        Flurry        = int.Parse(talentCode.Substring(38, 1));
                        Precision     = int.Parse(talentCode.Substring(39, 1));
                    }
                }
            }
            catch (Exception)
            {
            }
            #endregion
        }
Example #2
0
        public CalculationOptionsTree(Character character)
        {
            #region Druid Talents Import
            try
            {
                WebRequestWrapper wrw = new WebRequestWrapper();
                if (character.Class == Character.CharacterClass.Druid && character.Name != null && character.Realm != null)
                {
                    XmlDocument docTalents = wrw.DownloadCharacterTalentTree(character.Name, character.Region, character.Realm);

                    //<talentTab>
                    //  <talentTree value="50002201050313523105100000000000000530000000000300001000030300"/>
                    //</talentTab>
                    string talentCode = docTalents.SelectSingleNode("page/characterInfo/talentTab/talentTree").Attributes["value"].Value;
                    StarlightWrath    = int.Parse(talentCode.Substring(0, 1));
                    NaturesGrasp      = int.Parse(talentCode.Substring(1, 1));
                    ImpNaturesGrasp   = int.Parse(talentCode.Substring(2, 1));
                    ControlofNature   = int.Parse(talentCode.Substring(3, 1));
                    FocusedStarlight  = int.Parse(talentCode.Substring(4, 1));
                    ImpMoonfire       = int.Parse(talentCode.Substring(5, 1));
                    Brambles          = int.Parse(talentCode.Substring(6, 1));
                    InsectSwarm       = int.Parse(talentCode.Substring(7, 1));
                    NaturesReach      = int.Parse(talentCode.Substring(8, 1));
                    Vengeance         = int.Parse(talentCode.Substring(9, 1));
                    CelestialFocus    = int.Parse(talentCode.Substring(10, 1));
                    LunarGuidance     = int.Parse(talentCode.Substring(11, 1));
                    NaturesGrace      = int.Parse(talentCode.Substring(12, 1));
                    Moonglow          = int.Parse(talentCode.Substring(13, 1));
                    Moonfury          = int.Parse(talentCode.Substring(14, 1));
                    BalanceofPower    = int.Parse(talentCode.Substring(15, 1));
                    Dreamstate        = int.Parse(talentCode.Substring(16, 1));
                    MoonkinForm       = int.Parse(talentCode.Substring(17, 1));
                    ImprovedFF        = int.Parse(talentCode.Substring(18, 1));
                    WrathofCenarius   = int.Parse(talentCode.Substring(19, 1));
                    ForceofNature     = int.Parse(talentCode.Substring(20, 1));
                    Ferocity          = int.Parse(talentCode.Substring(21, 1));
                    FeralAggression   = int.Parse(talentCode.Substring(22, 1));
                    FeralInstinct     = int.Parse(talentCode.Substring(23, 1));
                    BrutalImpact      = int.Parse(talentCode.Substring(24, 1));
                    ThickHide         = int.Parse(talentCode.Substring(25, 1));
                    FeralSwiftness    = int.Parse(talentCode.Substring(26, 1));
                    FeralCharge       = int.Parse(talentCode.Substring(27, 1));
                    SharpenedClaws    = int.Parse(talentCode.Substring(28, 1));
                    ShreddingAttacks  = int.Parse(talentCode.Substring(29, 1));
                    PredatoryStrikes  = int.Parse(talentCode.Substring(30, 1));
                    PrimalFury        = int.Parse(talentCode.Substring(31, 1));
                    SavageFury        = int.Parse(talentCode.Substring(32, 1));
                    FeralFaerieFire   = int.Parse(talentCode.Substring(33, 1));
                    NurturingInstinct = int.Parse(talentCode.Substring(34, 1));
                    HotW                  = int.Parse(talentCode.Substring(35, 1));
                    SotF                  = int.Parse(talentCode.Substring(36, 1));
                    PrimalTenacity        = int.Parse(talentCode.Substring(37, 1));
                    LotP                  = int.Parse(talentCode.Substring(38, 1));
                    ImprovedLotP          = int.Parse(talentCode.Substring(39, 1));
                    PredatoryInstincts    = int.Parse(talentCode.Substring(40, 1));
                    Mangle                = int.Parse(talentCode.Substring(41, 1));
                    ImprovedMotW          = int.Parse(talentCode.Substring(42, 1));
                    Furor                 = int.Parse(talentCode.Substring(43, 1));
                    Naturalist            = int.Parse(talentCode.Substring(44, 1));
                    NaturesFocus          = int.Parse(talentCode.Substring(45, 1));
                    NaturalShapeshifter   = int.Parse(talentCode.Substring(46, 1));
                    Intensity             = int.Parse(talentCode.Substring(47, 1));
                    Subtlety              = int.Parse(talentCode.Substring(48, 1));
                    OmenOfClarity         = int.Parse(talentCode.Substring(49, 1));
                    TranquilSpirit        = int.Parse(talentCode.Substring(50, 1));
                    ImprovedRejuvenation  = int.Parse(talentCode.Substring(51, 1));
                    NaturesSwiftness      = int.Parse(talentCode.Substring(52, 1));
                    GiftOfNature          = int.Parse(talentCode.Substring(53, 1));
                    ImpTranquility        = int.Parse(talentCode.Substring(54, 1));
                    EmpoweredTouch        = int.Parse(talentCode.Substring(55, 1));
                    ImprovedRegrowth      = int.Parse(talentCode.Substring(56, 1));
                    LivingSpirit          = int.Parse(talentCode.Substring(57, 1));
                    Swiftmend             = int.Parse(talentCode.Substring(58, 1));
                    NaturalPerfection     = int.Parse(talentCode.Substring(59, 1));
                    EmpoweredRejuvenation = int.Parse(talentCode.Substring(60, 1));
                    TreeOfLife            = int.Parse(talentCode.Substring(61, 1));
                }
            }
            catch
            {
            }
            #endregion
        }
Example #3
0
        public CalculationOptionsMage(Character character)
            : this()
        {
            character.ItemsChanged += new EventHandler(Character_ItemsChanged);
            // pull talents
            #region Mage Talents Import
            try
            {
                WebRequestWrapper wrw = new WebRequestWrapper();

                if (character.Class == Character.CharacterClass.Mage && character.Name != null && character.Realm != null)
                {
                    XmlDocument docTalents = wrw.DownloadCharacterTalentTree(character.Name, character.Region, character.Realm);

                    //<talentTab>
                    //  <talentTree value="2550050300230151333125100000000000000000000002030302010000000000000"/>
                    //</talentTab>
                    if (docTalents != null)
                    {
                        string talentCode = docTalents.SelectSingleNode("page/characterInfo/talentTab/talentTree").Attributes["value"].Value;
                        ArcaneSubtlety          = int.Parse(talentCode.Substring(0, 1));
                        ArcaneFocus             = int.Parse(talentCode.Substring(1, 1));
                        ImprovedArcaneMissiles  = int.Parse(talentCode.Substring(2, 1));
                        WandSpecialization      = int.Parse(talentCode.Substring(3, 1));
                        MagicAbsorption         = int.Parse(talentCode.Substring(4, 1));
                        ArcaneConcentration     = int.Parse(talentCode.Substring(5, 1));
                        MagicAttunement         = int.Parse(talentCode.Substring(6, 1));
                        ArcaneImpact            = int.Parse(talentCode.Substring(7, 1));
                        ArcaneFortitude         = int.Parse(talentCode.Substring(8, 1));
                        ImprovedManaShield      = int.Parse(talentCode.Substring(9, 1));
                        ImprovedCounterspell    = int.Parse(talentCode.Substring(10, 1));
                        ArcaneMeditation        = int.Parse(talentCode.Substring(11, 1));
                        ImprovedBlink           = int.Parse(talentCode.Substring(12, 1));
                        PresenceOfMind          = int.Parse(talentCode.Substring(13, 1));
                        ArcaneMind              = int.Parse(talentCode.Substring(14, 1));
                        PrismaticCloak          = int.Parse(talentCode.Substring(15, 1));
                        ArcaneInstability       = int.Parse(talentCode.Substring(16, 1));
                        ArcanePotency           = int.Parse(talentCode.Substring(17, 1));
                        EmpoweredArcaneMissiles = int.Parse(talentCode.Substring(18, 1));
                        ArcanePower             = int.Parse(talentCode.Substring(19, 1));
                        SpellPower              = int.Parse(talentCode.Substring(20, 1));
                        MindMastery             = int.Parse(talentCode.Substring(21, 1));
                        Slow                 = int.Parse(talentCode.Substring(22, 1));
                        ImprovedFireball     = int.Parse(talentCode.Substring(23, 1));
                        Impact               = int.Parse(talentCode.Substring(24, 1));
                        Ignite               = int.Parse(talentCode.Substring(25, 1));
                        FlameThrowing        = int.Parse(talentCode.Substring(26, 1));
                        ImprovedFireBlast    = int.Parse(talentCode.Substring(27, 1));
                        Incinerate           = int.Parse(talentCode.Substring(28, 1));
                        ImprovedFlamestrike  = int.Parse(talentCode.Substring(29, 1));
                        Pyroblast            = int.Parse(talentCode.Substring(30, 1));
                        BurningSoul          = int.Parse(talentCode.Substring(31, 1));
                        ImprovedScorch       = int.Parse(talentCode.Substring(32, 1));
                        ImprovedFireWard     = int.Parse(talentCode.Substring(33, 1));
                        MasterOfElements     = int.Parse(talentCode.Substring(34, 1));
                        PlayingWithFire      = int.Parse(talentCode.Substring(35, 1));
                        CriticalMass         = int.Parse(talentCode.Substring(36, 1));
                        BlastWave            = int.Parse(talentCode.Substring(37, 1));
                        BlazingSpeed         = int.Parse(talentCode.Substring(38, 1));
                        FirePower            = int.Parse(talentCode.Substring(39, 1));
                        Pyromaniac           = int.Parse(talentCode.Substring(40, 1));
                        Combustion           = int.Parse(talentCode.Substring(41, 1));
                        MoltenFury           = int.Parse(talentCode.Substring(42, 1));
                        EmpoweredFireball    = int.Parse(talentCode.Substring(43, 1));
                        DragonsBreath        = int.Parse(talentCode.Substring(44, 1));
                        FrostWarding         = int.Parse(talentCode.Substring(45, 1));
                        ImprovedFrostbolt    = int.Parse(talentCode.Substring(46, 1));
                        ElementalPrecision   = int.Parse(talentCode.Substring(47, 1));
                        IceShards            = int.Parse(talentCode.Substring(48, 1));
                        Frostbite            = int.Parse(talentCode.Substring(49, 1));
                        ImprovedFrostNova    = int.Parse(talentCode.Substring(50, 1));
                        Permafrost           = int.Parse(talentCode.Substring(51, 1));
                        PiercingIce          = int.Parse(talentCode.Substring(52, 1));
                        IcyVeins             = int.Parse(talentCode.Substring(53, 1));
                        ImprovedBlizzard     = int.Parse(talentCode.Substring(54, 1));
                        ArcticReach          = int.Parse(talentCode.Substring(55, 1));
                        FrostChanneling      = int.Parse(talentCode.Substring(56, 1));
                        Shatter              = int.Parse(talentCode.Substring(57, 1));
                        FrozenCore           = int.Parse(talentCode.Substring(58, 1));
                        ColdSnap             = int.Parse(talentCode.Substring(59, 1));
                        ImprovedConeOfCold   = int.Parse(talentCode.Substring(60, 1));
                        IceFloes             = int.Parse(talentCode.Substring(61, 1));
                        WintersChill         = int.Parse(talentCode.Substring(62, 1));
                        IceBarrier           = int.Parse(talentCode.Substring(63, 1));
                        ArcticWinds          = int.Parse(talentCode.Substring(64, 1));
                        EmpoweredFrostbolt   = int.Parse(talentCode.Substring(65, 1));
                        SummonWaterElemental = int.Parse(talentCode.Substring(66, 1));
                    }
                }
            }
            catch (Exception)
            {
            }
            #endregion
        }
        private void ImportTalents(Character character)
        {
            try
            {
                WebRequestWrapper wrw = new WebRequestWrapper();

                if (character.Class == Character.CharacterClass.Warlock && character.Name != null && character.Realm != null)
                {
                    XmlDocument docTalents = wrw.DownloadCharacterTalentTree(character.Name, character.Region, character.Realm);

                    if (docTalents != null)
                    {
                        string talentCode = docTalents.SelectSingleNode("page/characterInfo/talentTab/talentTree").Attributes["value"].Value;
                        Suppression             = int.Parse(talentCode.Substring(0, 1));
                        ImprovedCorruption      = int.Parse(talentCode.Substring(1, 1));
                        ImprovedCurseOfWeakness = int.Parse(talentCode.Substring(2, 1));
                        ImprovedDrainSoul       = int.Parse(talentCode.Substring(3, 1));
                        ImprovedLifeTap         = int.Parse(talentCode.Substring(4, 1));
                        SoulSiphon           = int.Parse(talentCode.Substring(5, 1));
                        ImprovedCurseOfAgony = int.Parse(talentCode.Substring(6, 1));
                        FelConcentration     = int.Parse(talentCode.Substring(7, 1));
                        AmplifyCurse         = int.Parse(talentCode.Substring(8, 1));
                        GrimReach            = int.Parse(talentCode.Substring(9, 1));
                        Nightfall            = int.Parse(talentCode.Substring(10, 1));
                        EmpoweredCorruption  = int.Parse(talentCode.Substring(11, 1));
                        ShadowEmbrace        = int.Parse(talentCode.Substring(12, 1));
                        SiphonLife           = int.Parse(talentCode.Substring(13, 1));
                        CurseOfExhaustion    = int.Parse(talentCode.Substring(14, 1));
                        ShadowMastery        = int.Parse(talentCode.Substring(15, 1));
                        Contagion            = int.Parse(talentCode.Substring(16, 1));
                        DarkPact             = int.Parse(talentCode.Substring(17, 1));
                        ImprovedHowlOfTerror = int.Parse(talentCode.Substring(18, 1));
                        Malediction          = int.Parse(talentCode.Substring(19, 1));
                        UnstableAffliction   = int.Parse(talentCode.Substring(20, 1));
                        ImprovedHealthstone  = int.Parse(talentCode.Substring(21, 1));
                        ImprovedImp          = int.Parse(talentCode.Substring(22, 1));
                        DemonicEmbrace       = int.Parse(talentCode.Substring(23, 1));
                        ImprovedHealthFunnel = int.Parse(talentCode.Substring(24, 1));
                        ImprovedVoidwalker   = int.Parse(talentCode.Substring(25, 1));
                        FelIntellect         = int.Parse(talentCode.Substring(26, 1));
                        ImprovedSuccubus     = int.Parse(talentCode.Substring(27, 1));
                        FelDomination        = int.Parse(talentCode.Substring(28, 1));
                        FelStamina           = int.Parse(talentCode.Substring(29, 1));
                        DemonicAegis         = int.Parse(talentCode.Substring(30, 1));
                        MasterSummoner       = int.Parse(talentCode.Substring(31, 1));
                        UnholyPower          = int.Parse(talentCode.Substring(32, 1));
                        ImprovedEnslaveDemon = int.Parse(talentCode.Substring(33, 1));
                        DemonicSacrifice     = int.Parse(talentCode.Substring(34, 1));
                        MasterConjuror       = int.Parse(talentCode.Substring(35, 1));
                        ManaFeed             = int.Parse(talentCode.Substring(36, 1));
                        MasterDemonologist   = int.Parse(talentCode.Substring(37, 1));
                        DemonicResilience    = int.Parse(talentCode.Substring(38, 1));
                        SoulLink             = int.Parse(talentCode.Substring(39, 1));
                        DemonicKnowledge     = int.Parse(talentCode.Substring(40, 1));
                        DemonicTactics       = int.Parse(talentCode.Substring(41, 1));
                        SummonFelguard       = int.Parse(talentCode.Substring(42, 1));
                        ImprovedShadowBolt   = int.Parse(talentCode.Substring(43, 1));
                        Cataclysm            = int.Parse(talentCode.Substring(44, 1));
                        Bane                = int.Parse(talentCode.Substring(45, 1));
                        Aftermath           = int.Parse(talentCode.Substring(46, 1));
                        ImprovedFirebolt    = int.Parse(talentCode.Substring(47, 1));
                        ImprovedLashOfPain  = int.Parse(talentCode.Substring(48, 1));
                        Devastation         = int.Parse(talentCode.Substring(49, 1));
                        Shadowburn          = int.Parse(talentCode.Substring(50, 1));
                        Intensity           = int.Parse(talentCode.Substring(51, 1));
                        DestructiveReach    = int.Parse(talentCode.Substring(52, 1));
                        ImprovedSearingPain = int.Parse(talentCode.Substring(53, 1));
                        Pyroclasm           = int.Parse(talentCode.Substring(54, 1));
                        ImprovedImmolate    = int.Parse(talentCode.Substring(55, 1));
                        Ruin                = int.Parse(talentCode.Substring(56, 1));
                        NetherProtection    = int.Parse(talentCode.Substring(57, 1));
                        Emberstorm          = int.Parse(talentCode.Substring(58, 1));
                        Backlash            = int.Parse(talentCode.Substring(59, 1));
                        Conflagrate         = int.Parse(talentCode.Substring(60, 1));
                        SoulLeech           = int.Parse(talentCode.Substring(61, 1));
                        ShadowAndFlame      = int.Parse(talentCode.Substring(62, 1));
                        Shadowfury          = int.Parse(talentCode.Substring(63, 1));
                    }
                }
            }
            catch (Exception)
            {
            }
        }
        public CalculationOptionsRogue(Character character) : this()
        {
            DPSCycle = new Cycle("4s5r");

            // talent import from DPSWarr module
            #region Rogue Talents Import
            try {
                WebRequestWrapper wrw = new WebRequestWrapper();

                if (character.Class == Character.CharacterClass.Rogue && character.Name != null && character.Realm != null)
                {
                    XmlDocument docTalents = wrw.DownloadCharacterTalentTree(character.Name, character.Region, character.Realm);

                    //<talentTab>
                    //  <talentTree value="2550050300230151333125100000000000000000000002030302010000000000000"/>
                    //</talentTab>
                    if (docTalents != null)
                    {
                        string talentCode = docTalents.SelectSingleNode("page/characterInfo/talentTab/talentTree").Attributes["value"].Value;
                        ImprovedEviscerate  = int.Parse(talentCode.Substring(0, 1));
                        RemorselessAttacks  = int.Parse(talentCode.Substring(1, 1));
                        Malice              = int.Parse(talentCode.Substring(2, 1));
                        Ruthlessness        = int.Parse(talentCode.Substring(3, 1));
                        Murder              = int.Parse(talentCode.Substring(4, 1));
                        PuncturingWounds    = int.Parse(talentCode.Substring(5, 1));
                        RelentlessStrikes   = int.Parse(talentCode.Substring(6, 1));
                        ImprovedExposeArmor = int.Parse(talentCode.Substring(7, 1));
                        Lethality           = int.Parse(talentCode.Substring(8, 1));
                        VilePoisons         = int.Parse(talentCode.Substring(9, 1));
                        ImprovedPoisons     = int.Parse(talentCode.Substring(10, 1));
                        FleetFooted         = int.Parse(talentCode.Substring(11, 1));
                        ColdBlood           = int.Parse(talentCode.Substring(12, 1));
                        ImprovedKidneyShot  = int.Parse(talentCode.Substring(13, 1));
                        QuickRecovery       = int.Parse(talentCode.Substring(14, 1));
                        SealFate            = int.Parse(talentCode.Substring(15, 1));
                        MasterPoisoner      = int.Parse(talentCode.Substring(16, 1));
                        Vigor          = int.Parse(talentCode.Substring(17, 1));
                        DeadenedNerves = int.Parse(talentCode.Substring(18, 1));
                        FindWeakness   = int.Parse(talentCode.Substring(19, 1));
                        Mutilate       = int.Parse(talentCode.Substring(20, 1));

                        ImprovedGouge          = int.Parse(talentCode.Substring(21, 1));
                        ImprovedSinisterStrike = int.Parse(talentCode.Substring(22, 1));
                        LightningReflexes      = int.Parse(talentCode.Substring(23, 1));
                        ImprovedSliceandDice   = int.Parse(talentCode.Substring(24, 1));
                        Deflection             = int.Parse(talentCode.Substring(25, 1));
                        Precision               = int.Parse(talentCode.Substring(26, 1));
                        Endurance               = int.Parse(talentCode.Substring(27, 1));
                        Riposte                 = int.Parse(talentCode.Substring(28, 1));
                        ImprovedSprint          = int.Parse(talentCode.Substring(29, 1));
                        ImprovedKick            = int.Parse(talentCode.Substring(30, 1));
                        DaggerSpecialization    = int.Parse(talentCode.Substring(31, 1));
                        DualWieldSpecialization = int.Parse(talentCode.Substring(32, 1));
                        MaceSpecialization      = int.Parse(talentCode.Substring(33, 1));
                        BladeFlurry             = int.Parse(talentCode.Substring(34, 1));
                        SwordSpecialization     = int.Parse(talentCode.Substring(35, 1));
                        FistSpecialization      = int.Parse(talentCode.Substring(36, 1));
                        BladeTwisting           = int.Parse(talentCode.Substring(37, 1));
                        WeaponExpertise         = int.Parse(talentCode.Substring(38, 1));
                        Aggression              = int.Parse(talentCode.Substring(39, 1));
                        Vitality                = int.Parse(talentCode.Substring(40, 1));
                        AdrenalineRush          = int.Parse(talentCode.Substring(41, 1));
                        NervesOfSteel           = int.Parse(talentCode.Substring(42, 1));
                        CombatPotency           = int.Parse(talentCode.Substring(43, 1));
                        SurpriseAttacks         = int.Parse(talentCode.Substring(44, 1));

                        MasterOfDeception = int.Parse(talentCode.Substring(45, 1));
                        Opportunity       = int.Parse(talentCode.Substring(46, 1));
                        SleightOfHand     = int.Parse(talentCode.Substring(47, 1));
                        DirtyTricks       = int.Parse(talentCode.Substring(48, 1));
                        Camouflage        = int.Parse(talentCode.Substring(49, 1));
                        Initiative        = int.Parse(talentCode.Substring(50, 1));
                        GhostlyStrike     = int.Parse(talentCode.Substring(51, 1));
                        ImprovedAmbush    = int.Parse(talentCode.Substring(52, 1));
                        Setup             = int.Parse(talentCode.Substring(53, 1));
                        Elusiveness       = int.Parse(talentCode.Substring(54, 1));
                        SerratedBlades    = int.Parse(talentCode.Substring(55, 1));
                        HeightenedSenses  = int.Parse(talentCode.Substring(56, 1));
                        Preparation       = int.Parse(talentCode.Substring(57, 1));
                        DirtyDeeds        = int.Parse(talentCode.Substring(58, 1));
                        Hemorrhage        = int.Parse(talentCode.Substring(59, 1));
                        MasterOfSubtlety  = int.Parse(talentCode.Substring(60, 1));
                        Deadliness        = int.Parse(talentCode.Substring(61, 1));
                        EnvelopingShadows = int.Parse(talentCode.Substring(62, 1));
                        Premeditation     = int.Parse(talentCode.Substring(63, 1));
                        CheatDeath        = int.Parse(talentCode.Substring(64, 1));
                        SinisterCalling   = int.Parse(talentCode.Substring(65, 1));
                        Shadowstep        = int.Parse(talentCode.Substring(66, 1));
                        TalentsSaved      = true;
                    }
                }
            }
            catch (Exception) {
            }
            #endregion
        }