context: using System;
  using System.Linq;
  
  using Server.Mobiles;
  
  namespace Server.Items
  {
      public class HelmOfVirtuousEpiphany : PlateHelm, IEpiphanyArmor
  	{
  		public Alignment Alignment { get { return Alignment.Good; } }
  		public SurgeType Type { get { return SurgeType.Mana; } }
  		public int Frequency { get { return EpiphanyHelper.GetFrequency(Parent as Mobile, this); } }
  		public int Bonus { get { return EpiphanyHelper.GetBonus(Parent as Mobile, this); } }
  		
  		public override int LabelNumber { get { return 1150233; } } // Helm of Virtuous Epiphany
  		
  		[Constructable]
  		public HelmOfVirtuousEpiphany()
  		{
  			Hue = 2076;
  			ArmorAttributes.MageArmor = 1;
  		}
  
          public override void AddWeightProperty(ObjectPropertyList list)
          {
              base.AddWeightProperty(list);
  
              EpiphanyHelper.AddProperties(this, list);
          }
  
          public override bool OnEquip(Mobile from)
          {
              bool canEquip = base.OnEquip(from);
  
              if (canEquip)
              {
                  foreach (var armor in from.Items.Where(i => i is IEpiphanyArmor))
                  {
                      armor.InvalidateProperties();
                  }
              }
  
              return canEquip;
          }
  
          public override void OnRemoved(object parent)
          {
              base.OnRemoved(parent);
  
              if (parent is Mobile)
              {
                  var m = (Mobile)parent;
  
                  foreach (var armor in m.Items.Where(i => i is IEpiphanyArmor))
                  {
                      armor.InvalidateProperties();   
                  }
              }
          }
  
  		public HelmOfVirtuousEpiphany(Serial serial) : base(serial)
  		{
  		}
  		
  		public override void Serialize(GenericWriter writer)
  		{
  			base.Serialize(writer);
  			writer.Write(0);
  		}
  		
  		public override void Deserialize(GenericReader reader)
  		{
  			base.Deserialize(reader);
  			int version = reader.ReadInt();
  		}
  	}
  	
  	public class GorgetOfVirtuousEpiphany : PlateGorget, IEpiphanyArmor
  	{
  		public Alignment Alignment { get { return Alignment.Good; } }
  		public SurgeType Type { get { return SurgeType.Mana; } }
  		public int Frequency { get { return EpiphanyHelper.GetFrequency(Parent as Mobile, this); } }
  		public int Bonus { get { return EpiphanyHelper.GetBonus(Parent as Mobile, this); } }
  		
  		public override int LabelNumber { get { return 1150234; } } // Gorget of Virtuous Epiphany
  		
  		[Constructable]
  		public GorgetOfVirtuousEpiphany()
  		{
  			Hue = 2076;
  			ArmorAttributes.MageArmor = 1;
  		}
  
          public override void AddWeightProperty(ObjectPropertyList list)
          {
              base.AddWeightProperty(list);
  
              EpiphanyHelper.AddProperties(this, list);
          }
  
          public override bool OnEquip(Mobile from)
          {
              bool canEquip = base.OnEquip(from);
  
              if (canEquip)
              {
                  foreach (var armor in from.Items.Where(i => i is IEpiphanyArmor))
                  {
                      armor.InvalidateProperties();
                  }
              }
  
              return canEquip;
          }
  
          public override void OnRemoved(object parent)
          {
              base.OnRemoved(parent);
  
              if (parent is Mobile)
              {
                  var m = (Mobile)parent;
  
                  foreach (var armor in m.Items.Where(i => i is IEpiphanyArmor))
                  {
                      armor.InvalidateProperties();
                  }
              }
          }
  
  		public GorgetOfVirtuousEpiphany(Serial serial) : base(serial)
  		{
  		}
  		
  		public override void Serialize(GenericWriter writer)
  		{
  			base.Serialize(writer);
  			writer.Write(0);
  		}
  		
  		public override void Deserialize(GenericReader reader)
  		{
  			base.Deserialize(reader);
  			int version = reader.ReadInt();
  		}
  	}
  	
  	public class BreastplateOfVirtuousEpiphany : PlateChest, IEpiphanyArmor
  	{
  		public Alignment Alignment { get { return Alignment.Good; } }
  		public SurgeType Type { get { return SurgeType.Mana; } }
  		public int Frequency { get { return EpiphanyHelper.GetFrequency(Parent as Mobile, this); } }
  		public int Bonus { get { return EpiphanyHelper.GetBonus(Parent as Mobile, this); } }
  		
  		public override int LabelNumber { get { return 1150235; } } // Breastplate of Virtuous Epiphany
  		
  		[Constructable]
  		public BreastplateOfVirtuousEpiphany()
  		{
  			Hue = 2076;
  			ArmorAttributes.MageArmor = 1;
  		}
  
          public override void AddWeightProperty(ObjectPropertyList list)
          {
              base.AddWeightProperty(list);
  
              EpiphanyHelper.AddProperties(this, list);
          }
  
          public override bool OnEquip(Mobile from)
          {
              bool canEquip = base.OnEquip(from);
  
              if (canEquip)
              {
                  foreach (var armor in from.Items.Where(i => i is IEpiphanyArmor))
                  {
                      armor.InvalidateProperties();
                  }
              }
  
              return canEquip;
          }
  
          public override void OnRemoved(object parent)
          {
              base.OnRemoved(parent);
  
              if (parent is Mobile)
              {
                  var m = (Mobile)parent;
  
                  foreach (var armor in m.Items.Where(i => i is IEpiphanyArmor))
                  {
                      armor.InvalidateProperties();
                  }
              }
          }
  
  		public BreastplateOfVirtuousEpiphany(Serial serial) : base(serial)
  		{
  		}
  		
  		public override void Serialize(GenericWriter writer)
  		{
  			base.Serialize(writer);
  			writer.Write(0);
  		}
  		
  		public override void Deserialize(GenericReader reader)
  		{
  			base.Deserialize(reader);
  			int version = reader.ReadInt();
  		}
  	}
  	
  	public class ArmsOfVirtuousEpiphany : PlateArms, IEpiphanyArmor
  	{
  		public Alignment Alignment { get { return Alignment.Good; } }
  		public SurgeType Type { get { return SurgeType.Mana; } }
  		public int Frequency { get { return EpiphanyHelper.GetFrequency(Parent as Mobile, this); } }
  		public int Bonus { get { return EpiphanyHelper.GetBonus(Parent as Mobile, this); } }
  		
  		public override int LabelNumber { get { return 1150236; } } // Arms of Virtuous Epiphany
  		
  		[Constructable]
  		public ArmsOfVirtuousEpiphany()
  		{
  			Hue = 2076;
  			ArmorAttributes.MageArmor = 1;
  		}
  
          public override void AddWeightProperty(ObjectPropertyList list)
          {
              base.AddWeightProperty(list);
  
              EpiphanyHelper.AddProperties(this, list);
          }
  
          public override bool OnEquip(Mobile from)
          {
              bool canEquip = base.OnEquip(from);
  
              if (canEquip)
              {
                  foreach (var armor in from.Items.Where(i => i is IEpiphanyArmor))
                  {
                      armor.InvalidateProperties();
                  }
              }
  
              return canEquip;
          }
  
          public override void OnRemoved(object parent)
          {
              base.OnRemoved(parent);
  
              if (parent is Mobile)
              {
                  var m = (Mobile)parent;
  
                  foreach (var armor in m.Items.Where(i => i is IEpiphanyArmor))
                  {
                      armor.InvalidateProperties();
                  }
              }
          }
  
  		public ArmsOfVirtuousEpiphany(Serial serial) : base(serial)
  		{
  		}
  		
  		public override void Serialize(GenericWriter writer)
  		{
  			base.Serialize(writer);
  			writer.Write(0);
  		}
  		
  		public override void Deserialize(GenericReader reader)
  		{
  			base.Deserialize(reader);
  			int version = reader.ReadInt();
  		}
  	}
  	
  	public class GauntletsOfVirtuousEpiphany : PlateGloves, IEpiphanyArmor
  	{
  		public Alignment Alignment { get { return Alignment.Good; } }
  		public SurgeType Type { get { return SurgeType.Mana; } }
  		public int Frequency { get { return EpiphanyHelper.GetFrequency(Parent as Mobile, this); } }
  		public int Bonus { get { return EpiphanyHelper.GetBonus(Parent as Mobile, this); } }
  		
  		public override int LabelNumber { get { return 1150237; } } // Gauntlets of Virtuous Epiphany
  		
  		[Constructable]
  		public GauntletsOfVirtuousEpiphany()
  		{
  			Hue = 2076;
  			ArmorAttributes.MageArmor = 1;
  		}
  
          public override void AddWeightProperty(ObjectPropertyList list)
          {
              base.AddWeightProperty(list);
  
              EpiphanyHelper.AddProperties(this, list);
          }
  
          public override bool OnEquip(Mobile from)
          {
              bool canEquip = base.OnEquip(from);
  
              if (canEquip)
              {
                  foreach (var armor in from.Items.Where(i => i is IEpiphanyArmor))
                  {
                      armor.InvalidateProperties();
                  }
              }
  
              return canEquip;
          }
  
          public override void OnRemoved(object parent)
          {
              base.OnRemoved(parent);
  
              if (parent is Mobile)
              {
                  var m = (Mobile)parent;
  
                  foreach (var armor in m.Items.Where(i => i is IEpiphanyArmor))
                  {
                      armor.InvalidateProperties();
                  }
              }
          }
  
  		public GauntletsOfVirtuousEpiphany(Serial serial) : base(serial)
  		{
  		}
  		
  		public override void Serialize(GenericWriter writer)
  		{
  			base.Serialize(writer);
  			writer.Write(0);
  		}
  		
  		public override void Deserialize(GenericReader reader)
  		{
  			base.Deserialize(reader);
  			int version = reader.ReadInt();
  		}
  	}
  	
  	public class LegsOfVirtuousEpiphany : PlateLegs, IEpiphanyArmor
  	{
  		public Alignment Alignment { get { return Alignment.Good; } }
  		public SurgeType Type { get { return SurgeType.Mana; } }
  		public int Frequency { get { return EpiphanyHelper.GetFrequency(Parent as Mobile, this); } }
  		public int Bonus { get { return EpiphanyHelper.GetBonus(Parent as Mobile, this); } }
  		
  		public override int LabelNumber { get { return 1150238; } } // Leggings of Virtuous Epiphany
  		
  		[Constructable]
  		public LegsOfVirtuousEpiphany()
  		{
  			Hue = 2076;
  			ArmorAttributes.MageArmor = 1;
  		}
  
          public override void AddWeightProperty(ObjectPropertyList list)
          {
              base.AddWeightProperty(list);
  
              EpiphanyHelper.AddProperties(this, list);
          }
  
          public override bool OnEquip(Mobile from)
          {
              bool canEquip = base.OnEquip(from);
  
              if (canEquip)
              {
                  foreach (var armor in from.Items.Where(i => i is IEpiphanyArmor))
                  {
                      armor.InvalidateProperties();
                  }
              }
  
              return canEquip;
          }
  
          public override void OnRemoved(object parent)
          {
              base.OnRemoved(parent);
  
              if (parent is Mobile)
              {
                  var m = (Mobile)parent;
  
                  foreach (var armor in m.Items.Where(i => i is IEpiphanyArmor))
                  {
                      armor.InvalidateProperties();
                  }
              }
          }
  
  		public LegsOfVirtuousEpiphany(Serial serial) : base(serial)
  		{
  		}
  		
  		public override void Serialize(GenericWriter writer)
  		{
  			base.Serialize(writer);
  			writer.Write(0);
  		}
  		
  		public override void Deserialize(GenericReader reader)
  		{
  			base.Deserialize(reader);
  			int version = reader.ReadInt();
  		}
  	}
  	
  	public class KiltOfVirtuousEpiphany : GargishPlateKilt, IEpiphanyArmor
  	{
  		public Alignment Alignment { get { return Alignment.Good; } }
  		public SurgeType Type { get { return SurgeType.Mana; } }
  		public int Frequency { get { return EpiphanyHelper.GetFrequency(Parent as Mobile, this); } }
  		public int Bonus { get { return EpiphanyHelper.GetBonus(Parent as Mobile, this); } }
  		
  		public override int LabelNumber { get { return 1150262; } } // Kilt of Virtuous Epiphany
  		
  		[Constructable]
  		public KiltOfVirtuousEpiphany()
  		{
  			Hue = 2076;
  			ArmorAttributes.MageArmor = 1;
  		}
  
          public override void AddWeightProperty(ObjectPropertyList list)
          {
              base.AddWeightProperty(list);
  
              EpiphanyHelper.AddProperties(this, list);
          }
  
          public override bool OnEquip(Mobile from)
          {
              bool canEquip = base.OnEquip(from);
  
              if (canEquip)
              {
                  foreach (var armor in from.Items.Where(i => i is IEpiphanyArmor))
                  {
                      armor.InvalidateProperties();
                  }
              }
  
              return canEquip;
          }
  
          public override void OnRemoved(object parent)
          {
              base.OnRemoved(parent);
  
              if (parent is Mobile)
              {
                  var m = (Mobile)parent;
  
                  foreach (var armor in m.Items.Where(i => i is IEpiphanyArmor))
                  {
                      armor.InvalidateProperties();
                  }
              }
          }
  
  		public KiltOfVirtuousEpiphany(Serial serial) : base(serial)
  		{
  		}
  		
  		public override void Serialize(GenericWriter writer)
  		{
  			base.Serialize(writer);
  			writer.Write(0);
  		}
  		
  		public override void Deserialize(GenericReader reader)
  		{
  			base.Deserialize(reader);
  			int version = reader.ReadInt();
  		}
  	}
  	
  	public class EarringsOfVirtuousEpiphany : GargishEarrings, IEpiphanyArmor
  	{
  		public Alignment Alignment { get { return Alignment.Good; } }
  		public SurgeType Type { get { return SurgeType.Mana; } }
  		public int Frequency { get { return EpiphanyHelper.GetFrequency(Parent as Mobile, this); } }
  		public int Bonus { get { return EpiphanyHelper.GetBonus(Parent as Mobile, this); } }
  		
  		public override int LabelNumber { get { return 1150262; } } // Earrings of Virtuous Epiphany
  		
  		[Constructable]
  		public EarringsOfVirtuousEpiphany()
  		{
  			Hue = 2076;
  			ArmorAttributes.MageArmor = 1;
  		}
  
          public override void AddWeightProperty(ObjectPropertyList list)
          {
              base.AddWeightProperty(list);
  
              EpiphanyHelper.AddProperties(this, list);
          }
  
          public override bool OnEquip(Mobile from)
          {
              bool canEquip = base.OnEquip(from);
  
              if (canEquip)
              {
                  foreach (var armor in from.Items.Where(i => i is IEpiphanyArmor))
                  {
                      armor.InvalidateProperties();
                  }
              }
  
              return canEquip;
          }
  
          public override void OnRemoved(object parent)
          {
              base.OnRemoved(parent);
  
              if (parent is Mobile)
              {
                  var m = (Mobile)parent;
  
                  foreach (var armor in m.Items.Where(i => i is IEpiphanyArmor))
                  {
                      armor.InvalidateProperties();
                  }
              }
          }
  
  		public EarringsOfVirtuousEpiphany(Serial serial) : base(serial)
  		{
  		}
  		
  		public override void Serialize(GenericWriter writer)
  		{
  			base.Serialize(writer);
  			writer.Write(0);
  		}
  		
  		public override void Deserialize(GenericReader reader)
  		{
  			base.Deserialize(reader);
  			int version = reader.ReadInt();
  		}
  	}
  	
  	public class GargishBreastplateOfVirtuousEpiphany : GargishPlateChest, IEpiphanyArmor
  	{
  		public Alignment Alignment { get { return Alignment.Good; } }
  		public SurgeType Type { get { return SurgeType.Mana; } }
  		public int Frequency { get { return EpiphanyHelper.GetFrequency(Parent as Mobile, this); } }
  		public int Bonus { get { return EpiphanyHelper.GetBonus(Parent as Mobile, this); } }
  		
  		public override int LabelNumber { get { return 1150235; } } // Breastplate of Virtuous Epiphany
  		
  		[Constructable]
  		public GargishBreastplateOfVirtuousEpiphany()
  		{
  			Hue = 2076;
  		}
  
          public override void AddWeightProperty(ObjectPropertyList list)
          {
              base.AddWeightProperty(list);
  
              EpiphanyHelper.AddProperties(this, list);
          }
  
          public override bool OnEquip(Mobile from)
          {
              bool canEquip = base.OnEquip(from);
  
              if (canEquip)
              {
                  foreach (var armor in from.Items.Where(i => i is IEpiphanyArmor))
                  {
                      armor.InvalidateProperties();
                  }
              }
  
              return canEquip;
          }
  
          public override void OnRemoved(object parent)
          {
              base.OnRemoved(parent);
  
              if (parent is Mobile)
              {
                  var m = (Mobile)parent;
  
                  foreach (var armor in m.Items.Where(i => i is IEpiphanyArmor))
                  {
                      armor.InvalidateProperties();
                  }
              }
          }
  
  		public GargishBreastplateOfVirtuousEpiphany(Serial serial) : base(serial)
  		{
  		}
  		
  		public override void Serialize(GenericWriter writer)
  		{
  			base.Serialize(writer);
  			writer.Write(0);
  		}
  		
  		public override void Deserialize(GenericReader reader)
  		{
  			base.Deserialize(reader);
  			int version = reader.ReadInt();
  		}
  	}
  	
  	public class GargishArmsOfVirtuousEpiphany : GargishPlateArms, IEpiphanyArmor
  	{
  		public Alignment Alignment { get { return Alignment.Good; } }
  		public SurgeType Type { get { return SurgeType.Mana; } }
  		public int Frequency { get { return EpiphanyHelper.GetFrequency(Parent as Mobile, this); } }
  		public int Bonus { get { return EpiphanyHelper.GetBonus(Parent as Mobile, this); } }
  		
  		public override int LabelNumber { get { return 1150236; } } // Arms of Virtuous Epiphany
  		
  		[Constructable]
  		public GargishArmsOfVirtuousEpiphany()
  		{
  			Hue = 2076;
  		}
  
          public override void AddWeightProperty(ObjectPropertyList list)
          {
              base.AddWeightProperty(list);
  
              EpiphanyHelper.AddProperties(this, list);
          }
  
          public override bool OnEquip(Mobile from)
          {
              bool canEquip = base.OnEquip(from);
  
              if (canEquip)
              {
                  foreach (var armor in from.Items.Where(i => i is IEpiphanyArmor))
                  {
                      armor.InvalidateProperties();
                  }
              }
  
              return canEquip;
          }
  
          public override void OnRemoved(object parent)
          {
              base.OnRemoved(parent);
  
              if (parent is Mobile)
              {
                  var m = (Mobile)parent;
  
                  foreach (var armor in m.Items.Where(i => i is IEpiphanyArmor))
                  {
                      armor.InvalidateProperties();
                  }
              }
          }
  
  		public GargishArmsOfVirtuousEpiphany(Serial serial) : base(serial)
  		{
  		}
  		
  		public override void Serialize(GenericWriter writer)
  		{
  			base.Serialize(writer);
  			writer.Write(0);
  		}
  		
  		public override void Deserialize(GenericReader reader)
  		{
  			base.Deserialize(reader);
  			int version = reader.ReadInt();
  		}
  	}
  	
  	public class NecklaceOfVirtuousEpiphany : GargishNecklace, IEpiphanyArmor
  	{
  		public Alignment Alignment { get { return Alignment.Good; } }
  		public SurgeType Type { get { return SurgeType.Mana; } }
  		public int Frequency { get { return EpiphanyHelper.GetFrequency(Parent as Mobile, this); } }
  		public int Bonus { get { return EpiphanyHelper.GetBonus(Parent as Mobile, this); } }
  		
  		public override int LabelNumber { get { return 1150261; } } // Necklace of Virtuous Epiphany
  		
  		[Constructable]
  		public NecklaceOfVirtuousEpiphany()
  		{
  			Hue = 2076;
  		}
  
          public override void AddWeightProperty(ObjectPropertyList list)
          {
              base.AddWeightProperty(list);
  
              EpiphanyHelper.AddProperties(this, list);
          }
  
          public override bool OnEquip(Mobile from)
          {
  
gt:             bool canEquip = base.OnEquip(from);