diff --git a/Source/Framework/Constants/AchievementConst.cs b/Source/Framework/Constants/AchievementConst.cs index 2f9efd350..a2c302021 100644 --- a/Source/Framework/Constants/AchievementConst.cs +++ b/Source/Framework/Constants/AchievementConst.cs @@ -371,24 +371,50 @@ namespace Framework.Constants //Unk265 = 265, SelectedAzeriteEssenceRankLower = 266, SelectedAzeriteEssenceRankGreater = 267, - //Unk268 = 268, - //Unk269 = 269, + SourceLevelInRangeCt = 268, + TargetLevelInRangeCt = 269, //Unk270 = 270, //Unk271 = 271, - //Unk272 = 272, - //Unk273 = 273, + SourceLevelGreaterCt = 272, // Compare Levels Using Content Tuning + TargetLevelGreaterCt = 273, // Compare Levels Using Content Tuning //Unk274 = 274, //Unk275 = 275, //Unk276 = 276, - //Unk277 = 277, + RafRecruitInParty = 277, // NYI //Unk278 = 278, //Unk279 = 279, MapOrCosmeticMap = 280, //Unk281 = 281, - HasEntitlement = 282, - HasQuestSession = 283, + HasEntitlement = 282, // NYI + HasQuestSession = 283, // NYI //Unk284 = 284, //Unk285 = 285, + //Unk286 = 286, + //Unk287 = 287, + Covenant = 288, + //Unk289 = 289, // Related To Pvp Ranking + PermanentAnimaDiversionTalent = 290, // NYI + Soulbind = 291, + //Unk292 = 292, + SourceAreaOrZoneInGroup = 293, + //Unk294 = 294, + //Unk295 = 295, + //Unk296 = 296, + //Unk297 = 297, + //Unk298 = 298, + //Unk299 = 299, + SourceInSpecificChromieTime = 300, + SourceInAnyChromieTime = 301, + //Unk302 = 302, + SourceRuneforgeLegendaryKnown = 303, + //Unk304 = 304, + //Unk305 = 305, + //Unk306 = 306, + SoulbindConduitRank = 307, // NYI + ShapeshiftFormCustomizationDisplay = 308, + SoulbindMinConduitsAtRank = 309, // NYI + IsRestrictedAccount = 310, // NYI + SourceFlying = 311, } public enum CriteriaFlags @@ -628,7 +654,21 @@ namespace Framework.Constants ReachAccountHonorLevel = 213, HeartOfAzerothArtifactPowerEarned = 214, HeartOfAzerothLevelReached = 215, - TotalTypes = 219 + MythicKeystoneCompleted = 216, // NYI + // 217 - 0 Criterias + CompleteQuestAccumulate = 218, + BoughtItemFromVendor = 219, + SoldItemToVendor = 220, + // 221 - 0 Criterias + // 222 - 0 Criterias + // 223 - 0 Criterias + // 224 - 0 Criterias + TravelledToArea = 225, + // 226 - 0 Criterias + // 227 - 0 Criterias + ApplyConduit = 228, + ConvertItemsToCurrency = 229, + TotalTypes = 230 } public enum CriteriaDataType diff --git a/Source/Framework/Constants/ChatConst.cs b/Source/Framework/Constants/ChatConst.cs index 4465f731f..bd2460b4b 100644 --- a/Source/Framework/Constants/ChatConst.cs +++ b/Source/Framework/Constants/ChatConst.cs @@ -91,7 +91,8 @@ namespace Framework.Constants Defense = 0x10000, // Localdefense, Worlddefense GuildReq = 0x20000, // Guildrecruitment Lfg = 0x40000, // Lfg - Unk1 = 0x80000 // General + Unk1 = 0x80000, // General + NoClientJoin = 0x200000 } public enum ChannelMemberFlags diff --git a/Source/Framework/Constants/CliDBConst.cs b/Source/Framework/Constants/CliDBConst.cs index dff012dff..bab7f4d5f 100644 --- a/Source/Framework/Constants/CliDBConst.cs +++ b/Source/Framework/Constants/CliDBConst.cs @@ -938,7 +938,7 @@ namespace Framework.Constants public enum AzeriteTierUnlockSetFlags { - Default = 0x1 + Default = 0x01 } public enum BattlegroundBracketId // bracketId for level ranges @@ -948,26 +948,14 @@ namespace Framework.Constants Max } - public enum CharBaseSectionVariation : byte + public enum ChrCustomizationOptionFlag { - Skin = 0, - Face = 1, - FacialHair = 2, - Hair = 3, - Underwear = 4, - CustomDisplay1 = 5, - CustomDisplay2 = 6, - CustomDisplay3 = 7, - - Max + Disabled = 0x04 } - public enum CharSectionFlags + public enum ChrCustomizationReqFlag { - Player = 0x01, - DeathKnight = 0x04, - DemonHunter = 0x20, - Conditional = 0x400 + HasRequirements = 0x01 } public enum CharSectionType @@ -992,7 +980,7 @@ namespace Framework.Constants Max } - public enum BattlemasterListFlags : sbyte + public enum BattlemasterListFlags : int { Disabled = 0x01, SkipRoleCheck = 0x02, @@ -1014,6 +1002,20 @@ namespace Framework.Constants Recommended = 0x40, } + public enum ContentTuningCalcType + { + Base = 0, + PlusOne = 1, + PlusMaxLevelForExpansion = 2 + } + + public enum ContentTuningFlag + { + DisabledForItem = 0x04, + Horde = 0x8, + Alliance = 0x10 + } + public enum Curves { ArtifactRelicItemLevelBonus = 1718, @@ -1852,12 +1854,34 @@ namespace Framework.Constants CreatureSpellDamage = 9 } + public enum UiMapFlag + { + None = 0x00, + NoHighlight = 0x01, + ShowOverlays = 0x02, + ShowTaxiNodes = 0x04, + GarrisonMap = 0x08, + FallbackToParentMap = 0x10, + NoHighlightTexture = 0x20, + ShowTaskObjectives = 0x40, + NoWorldPositions = 0x80, + HideArchaeologyDigs = 0x100, + Deprecated = 0x200, + HideIcons = 0x400, + HideVignettes = 0x800, + ForceAllOverlayExplored = 0x1000, + FlightMapShowZoomOut = 0x2000, + FlightMapAutoZoom = 0x4000, + ForceOnNavbar = 0x8000 + } + public enum UiMapSystem : sbyte { World = 0, Taxi = 1, Adventure = 2, - Max = 3 + SystemMinimap = 3, + Max } public enum UiMapType diff --git a/Source/Framework/Constants/GameObjectConst.cs b/Source/Framework/Constants/GameObjectConst.cs index 742fa339b..db86f12c2 100644 --- a/Source/Framework/Constants/GameObjectConst.cs +++ b/Source/Framework/Constants/GameObjectConst.cs @@ -17,7 +17,7 @@ namespace Framework.Constants { - public enum GameObjectTypes : byte + public enum GameObjectTypes : int { Door = 0, Button = 1, diff --git a/Source/Framework/Constants/ItemConst.cs b/Source/Framework/Constants/ItemConst.cs index f0cdd4736..381e011e3 100644 --- a/Source/Framework/Constants/ItemConst.cs +++ b/Source/Framework/Constants/ItemConst.cs @@ -78,42 +78,27 @@ namespace Framework.Constants ItemModifier.TransmogAppearanceSpec1, ItemModifier.TransmogAppearanceSpec2, ItemModifier.TransmogAppearanceSpec3, - ItemModifier.TransmogAppearanceSpec4 + ItemModifier.TransmogAppearanceSpec4, + ItemModifier.TransmogAppearanceSpec5 }; - public const ulong AppearanceModifierMaskSpecSpecific = - (1ul << (int)ItemModifier.TransmogAppearanceSpec1) | - (1ul << (int)ItemModifier.TransmogAppearanceSpec2) | - (1ul << (int)ItemModifier.TransmogAppearanceSpec3) | - (1ul << (int)ItemModifier.TransmogAppearanceSpec4); - public static ItemModifier[] IllusionModifierSlotBySpec = - { + { ItemModifier.EnchantIllusionSpec1, ItemModifier.EnchantIllusionSpec2, ItemModifier.EnchantIllusionSpec3, - ItemModifier.EnchantIllusionSpec4 + ItemModifier.EnchantIllusionSpec4, + ItemModifier.EnchantIllusionSpec5 }; - public const ulong IllusionModifierMaskSpecSpecific = - (1ul << (int)ItemModifier.EnchantIllusionSpec1) | - (1ul << (int)ItemModifier.EnchantIllusionSpec2) | - (1ul << (int)ItemModifier.EnchantIllusionSpec3) | - (1ul << (int)ItemModifier.EnchantIllusionSpec4); - public static ItemModifier[] SecondaryAppearanceModifierSlotBySpec = { ItemModifier.TransmogSecondaryAppearanceSpec1, ItemModifier.TransmogSecondaryAppearanceSpec2, ItemModifier.TransmogSecondaryAppearanceSpec3, - ItemModifier.TransmogSecondaryAppearanceSpec4 + ItemModifier.TransmogSecondaryAppearanceSpec4, + ItemModifier.TransmogSecondaryAppearanceSpec5 }; - - public const ulong SecondaryAppearanceModifierMaskSpecSpecific = - (1ul << (int)ItemModifier.TransmogSecondaryAppearanceSpec1) | - (1ul << (int)ItemModifier.TransmogSecondaryAppearanceSpec2) | - (1ul << (int)ItemModifier.TransmogSecondaryAppearanceSpec3) | - (1ul << (int)ItemModifier.TransmogSecondaryAppearanceSpec4); } public struct InventorySlots @@ -219,8 +204,8 @@ namespace Framework.Constants CritSpellRating = 21, Corruption = 22, CorruptionResistance = 23, - HitTakenSpellRating = 24, - CritTakenMeleeRating = 25, + ModifiedCraftingStat1 = 24, + ModifiedCraftingStat2 = 25, CritTakenRangedRating = 26, CritTakenSpellRating = 27, HasteMeleeRating = 28, @@ -356,7 +341,7 @@ namespace Framework.Constants ItemLevel = 1, Stat = 2, Quality = 3, - Description = 4, + NameSubtitle = 4, // Text under name Suffix = 5, Socket = 6, Appearance = 7, @@ -376,6 +361,10 @@ namespace Framework.Constants OverrideCanDisenchant = 21, OverrideCanScrap = 22, ItemEffectId = 23, + ModifiedCraftingStat = 25, + RequiredLevelCurve = 27, + DescriptionText = 30, // Item Description + OverrideName = 31, // Itemnamedescription Id } public enum ItemContext : byte diff --git a/Source/Framework/Constants/Network/Opcodes.cs b/Source/Framework/Constants/Network/Opcodes.cs index 32f55e3b1..534e67c55 100644 --- a/Source/Framework/Constants/Network/Opcodes.cs +++ b/Source/Framework/Constants/Network/Opcodes.cs @@ -1141,7 +1141,7 @@ namespace Framework.Constants GameObjectPlaySpellVisualKit = 0x2c4a, GameObjectResetState = 0x2723, GameObjectSetStateLocal = 0x2806, - GameObjectUiLink = 0x271f, + GameObjectUILink = 0x271f, GameSpeedSet = 0x267f, GameTimeSet = 0x2711, GameTimeUpdate = 0x2710, diff --git a/Source/Framework/Constants/PlayerConst.cs b/Source/Framework/Constants/PlayerConst.cs index 3fb982759..05690d2ae 100644 --- a/Source/Framework/Constants/PlayerConst.cs +++ b/Source/Framework/Constants/PlayerConst.cs @@ -21,12 +21,15 @@ namespace Framework.Constants { public struct PlayerConst { + public const Expansion CurrentExpansion = Expansion.ShadowLands; + public const int MaxTalentTiers = 7; public const int MaxTalentColumns = 3; public const int MaxTalentRank = 5; public const int MaxPvpTalentSlots = 4; public const int MinSpecializationLevel = 10; - public const int MaxSpecializations = 4; + public const int MaxSpecializations = 5; + public const int InitialSpecializationIndex = 4; public const int MaxMasterySpells = 2; public const int ReqPrimaryTreeTalents = 31; @@ -42,7 +45,7 @@ namespace Framework.Constants public const uint infinityCooldownDelayCheck = Time.Month / 2; public const int MaxPlayerSummonDelay = 2 * Time.Minute; - public const int TaxiMaskSize = 319; + public const int TaxiMaskSize = 336; // corpse reclaim times public const int DeathExpireStep = (5 * Time.Minute); diff --git a/Source/Framework/Constants/SharedConst.cs b/Source/Framework/Constants/SharedConst.cs index 2bc953cd9..6f61081c9 100644 --- a/Source/Framework/Constants/SharedConst.cs +++ b/Source/Framework/Constants/SharedConst.cs @@ -34,8 +34,8 @@ namespace Framework.Constants public const int MaxHolidayDurations = 10; public const int MaxHolidayDates = 26; public const int MaxHolidayFlags = 10; - public const int DefaultMaxLevel = 120; - public const int MaxLevel = 120; + public const int DefaultMaxLevel = 60; + public const int MaxLevel = 123; public const int StrongMaxLevel = 255; public const int MaxOverrideSpell = 10; public const int MaxWorldMapOverlayArea = 4; @@ -48,7 +48,7 @@ namespace Framework.Constants /// /// BattlePets Const /// - public const int MaxBattlePetSpeciesId = 2873; + public const int MaxBattlePetSpeciesId = 3084; public const int MaxPetBattleSlots = 3; public const int MaxBattlePetsPerSpecies = 3; public const int BattlePetCageItemId = 82800; @@ -587,9 +587,8 @@ namespace Framework.Constants WarlordsOfDraenor = 5, Legion = 6, BattleForAzeroth = 7, - Max, - ShadowLands = 8, + Max, MaxAccountExpansions } @@ -1140,7 +1139,6 @@ namespace Framework.Constants DeathCorpseReclaimDelayPvp, DeathSicknessLevel, DeclinedNamesUsed, - DemonHuntersPerRealm, DetectPosCollision, DieCommandMode, DisableBreathing, diff --git a/Source/Framework/Constants/Spells/SpellAuraConst.cs b/Source/Framework/Constants/Spells/SpellAuraConst.cs index 53a6a4deb..8b3a31d1b 100644 --- a/Source/Framework/Constants/Spells/SpellAuraConst.cs +++ b/Source/Framework/Constants/Spells/SpellAuraConst.cs @@ -515,6 +515,16 @@ namespace Framework.Constants Unk491 = 491, Unk492 = 492, Unk493 = 493, + SetPowerPointCharge = 494, // NYI + TriggerSpellOnExpire = 495, // NYI + AllowChangingEquipmentInTorghast = 496, // NYI + ModAnimaGain = 497, // NYI + CurrencyLossPctOnDeath = 498, // NYI + ModRestedXpConsumption = 499, + IgnoreSpellChargeCooldown = 500, // NYI + ModCriticalDamageTakenFromCaster = 501, + ModVersatilityDamageDoneBenefit = 502, // NYI + ModVersatilityHealingDoneBenefit = 503, // NYI Total } diff --git a/Source/Framework/Constants/Spells/SpellConst.cs b/Source/Framework/Constants/Spells/SpellConst.cs index f124e8bf8..037cdc6a1 100644 --- a/Source/Framework/Constants/Spells/SpellConst.cs +++ b/Source/Framework/Constants/Spells/SpellConst.cs @@ -1852,6 +1852,10 @@ namespace Framework.Constants Unk21 = 0x200000, // 21 Unk22 = 0x400000, // 22 Unk23 = 0x800000 // 23 + } + public enum SpellAttr14 + { + } public enum SpellCustomAttributes { @@ -2156,6 +2160,18 @@ namespace Framework.Constants UpgradeItem = 269, Unk270 = 270, ApplyAreaAuraPartyNonrandom = 271, + SetCovenant = 272, + CraftRuneforgeLegendary = 273, + Unk274 = 274, + Unk275 = 275, + LearnTransmogIllusion = 276, + SetChromieTime = 277, + Unk278 = 278, + LearnGarrTalent = 279, + Unk280 = 280, + LearnSoulbindConduit = 281, + ConvertItemsToCurrency = 282, + Unk283 = 283, TotalSpellEffects } @@ -2463,6 +2479,7 @@ namespace Framework.Constants Unk148 = 148, Unk149 = 149, UnitOwnCritter = 150, // own battle pet from UNIT_FIELD_CRITTER + Unk151 = 151, TotalSpellTargets } public enum SpellTargetSelectionCategories diff --git a/Source/Framework/Database/Databases/CharacterDatabase.cs b/Source/Framework/Database/Databases/CharacterDatabase.cs index 33f132f3d..27831a759 100644 --- a/Source/Framework/Database/Databases/CharacterDatabase.cs +++ b/Source/Framework/Database/Databases/CharacterDatabase.cs @@ -47,24 +47,29 @@ namespace Framework.Database PrepareStatement(CharStatements.SEL_MAIL_LIST_INFO, "SELECT id, sender, (SELECT name FROM characters WHERE guid = sender) AS sendername, receiver, (SELECT name FROM characters WHERE guid = receiver) AS receivername, " + "subject, deliver_time, expire_time, money, has_items FROM mail WHERE receiver = ? "); PrepareStatement(CharStatements.SEL_MAIL_LIST_ITEMS, "SELECT itemEntry,count FROM item_instance WHERE guid = ?"); - PrepareStatement(CharStatements.SEL_ENUM, "SELECT c.guid, c.name, c.race, c.class, c.gender, c.skin, c.face, c.hairStyle, c.hairColor, c.facialStyle, c.customDisplay1, c.customDisplay2, c.customDisplay3, c.level, c.zone, c.map, c.position_x, c.position_y, c.position_z, " + + PrepareStatement(CharStatements.SEL_ENUM, "SELECT c.guid, c.name, c.race, c.class, c.gender, c.level, c.zone, c.map, c.position_x, c.position_y, c.position_z, " + "gm.guildid, c.playerFlags, c.at_login, cp.entry, cp.modelid, cp.level, c.equipmentCache, cb.guid, c.slot, c.logout_time, c.activeTalentGroup, c.lastLoginBuild " + "FROM characters AS c LEFT JOIN character_pet AS cp ON c.guid = cp.owner AND cp.slot = ? LEFT JOIN guild_member AS gm ON c.guid = gm.guid " + "LEFT JOIN character_banned AS cb ON c.guid = cb.guid AND cb.active = 1 WHERE c.account = ? AND c.deleteInfos_Name IS NULL"); - PrepareStatement(CharStatements.SEL_ENUM_DECLINED_NAME, "SELECT c.guid, c.name, c.race, c.class, c.gender, c.skin, c.face, c.hairStyle, c.hairColor, c.facialStyle, c.customDisplay1, c.customDisplay2, c.customDisplay3, c.level, c.zone, c.map, " + + PrepareStatement(CharStatements.SEL_ENUM_DECLINED_NAME, "SELECT c.guid, c.name, c.race, c.class, c.gender, c.level, c.zone, c.map, " + "c.position_x, c.position_y, c.position_z, gm.guildid, c.playerFlags, c.at_login, cp.entry, cp.modelid, cp.level, c.equipmentCache, " + "cb.guid, c.slot, c.logout_time, c.activeTalentGroup, c.lastLoginBuild, cd.genitive FROM characters AS c LEFT JOIN character_pet AS cp ON c.guid = cp.owner AND cp.slot = ? " + "LEFT JOIN character_declinedname AS cd ON c.guid = cd.guid LEFT JOIN guild_member AS gm ON c.guid = gm.guid " + "LEFT JOIN character_banned AS cb ON c.guid = cb.guid AND cb.active = 1 WHERE c.account = ? AND c.deleteInfos_Name IS NULL"); - PrepareStatement(CharStatements.SEL_UNDELETE_ENUM, "SELECT c.guid, c.deleteInfos_Name, c.race, c.class, c.gender, c.skin, c.face, c.hairStyle, c.hairColor, c.facialStyle, c.customDisplay1, c.customDisplay2, c.customDisplay3, c.level, c.zone, c.map, c.position_x, c.position_y, c.position_z, " + + PrepareStatement(CharStatements.SEL_ENUM_CUSTOMIZATIONS, "SELECT cc.guid, cc.chrCustomizationOptionID, cc.chrCustomizationChoiceID FROM character_customizations cc " + + "LEFT JOIN characters c ON cc.guid = c.guid WHERE c.account = ? AND c.deleteInfos_Name IS NULL ORDER BY cc.guid, cc.chrCustomizationOptionID"); + PrepareStatement(CharStatements.SEL_UNDELETE_ENUM, "SELECT c.guid, c.deleteInfos_Name, c.race, c.class, c.gender, c.level, c.zone, c.map, c.position_x, c.position_y, c.position_z, " + "gm.guildid, c.playerFlags, c.at_login, cp.entry, cp.modelid, cp.level, c.equipmentCache, cb.guid, c.slot, c.logout_time, c.activeTalentGroup, c.lastLoginBuild " + "FROM characters AS c LEFT JOIN character_pet AS cp ON c.guid = cp.owner AND cp.slot = ? LEFT JOIN guild_member AS gm ON c.guid = gm.guid " + "LEFT JOIN character_banned AS cb ON c.guid = cb.guid AND cb.active = 1 WHERE c.deleteInfos_Account = ? AND c.deleteInfos_Name IS NOT NULL"); - PrepareStatement(CharStatements.SEL_UNDELETE_ENUM_DECLINED_NAME, "SELECT c.guid, c.deleteInfos_Name, c.race, c.class, c.gender, c.skin, c.face, c.hairStyle, c.hairColor, c.facialStyle, c.customDisplay1, c.customDisplay2, c.customDisplay3, c.level, c.zone, c.map, " + + PrepareStatement(CharStatements.SEL_UNDELETE_ENUM_DECLINED_NAME, "SELECT c.guid, c.deleteInfos_Name, c.race, c.class, c.gender, c.level, c.zone, c.map, " + "c.position_x, c.position_y, c.position_z, gm.guildid, c.playerFlags, c.at_login, cp.entry, cp.modelid, cp.level, c.equipmentCache, " + "cb.guid, c.slot, c.logout_time, c.activeTalentGroup, c.lastLoginBuild, cd.genitive FROM characters AS c LEFT JOIN character_pet AS cp ON c.guid = cp.owner AND cp.slot = ? " + "LEFT JOIN character_declinedname AS cd ON c.guid = cd.guid LEFT JOIN guild_member AS gm ON c.guid = gm.guid " + "LEFT JOIN character_banned AS cb ON c.guid = cb.guid AND cb.active = 1 WHERE c.deleteInfos_Account = ? AND c.deleteInfos_Name IS NOT NULL"); + PrepareStatement(CharStatements.SEL_UNDELETE_ENUM_CUSTOMIZATIONS, "SELECT cc.guid, cc.chrCustomizationOptionID, cc.chrCustomizationChoiceID FROM character_customizations cc " + + "LEFT JOIN characters c ON cc.guid = c.guid WHERE c.deleteInfos_Account = ? AND c.deleteInfos_Name IS NOT NULL ORDER BY cc.guid, cc.chrCustomizationOptionID"); + PrepareStatement(CharStatements.SEL_FREE_NAME, "SELECT name, at_login FROM characters WHERE guid = ? AND NOT EXISTS (SELECT NULL FROM characters WHERE name = ?)"); PrepareStatement(CharStatements.SEL_CHAR_ZONE, "SELECT zone FROM characters WHERE guid = ?"); PrepareStatement(CharStatements.SEL_CHAR_POSITION_XYZ, "SELECT map, position_x, position_y, position_z FROM characters WHERE guid = ?"); @@ -74,13 +79,14 @@ namespace Framework.Database PrepareStatement(CharStatements.DEL_BATTLEGROUND_RANDOM, "DELETE FROM character_battleground_random WHERE guid = ?"); PrepareStatement(CharStatements.INS_BATTLEGROUND_RANDOM, "INSERT INTO character_battleground_random (guid) VALUES (?)"); - PrepareStatement(CharStatements.SEL_CHARACTER, "SELECT c.guid, account, name, race, class, gender, level, xp, money, skin, face, hairStyle, hairColor, facialStyle, customDisplay1, customDisplay2, customDisplay3, inventorySlots, bankSlots, restState, playerFlags, playerFlagsEx, " + + PrepareStatement(CharStatements.SEL_CHARACTER, "SELECT c.guid, account, name, race, class, gender, level, xp, money, inventorySlots, bankSlots, restState, playerFlags, playerFlagsEx, " + "position_x, position_y, position_z, map, orientation, taximask, cinematic, totaltime, leveltime, rest_bonus, logout_time, is_logout_resting, resettalents_cost, " + "resettalents_time, primarySpecialization, trans_x, trans_y, trans_z, trans_o, transguid, extra_flags, stable_slots, at_login, zone, online, death_expire_time, taxi_path, dungeonDifficulty, " + "totalKills, todayKills, yesterdayKills, chosenTitle, watchedFaction, drunk, health, power1, power2, power3, power4, power5, power6, instance_id, activeTalentGroup, lootSpecId, exploredZones, " + "knownTitles, actionBars, raidDifficulty, legacyRaidDifficulty, fishingSteps, honor, honorLevel, honorRestState, honorRestBonus, numRespecs " + "FROM characters c LEFT JOIN character_fishingsteps cfs ON c.guid = cfs.guid WHERE c.guid = ?"); + PrepareStatement(CharStatements.SEL_CHARACTER_CUSTOMIZATIONS, "SELECT chrCustomizationOptionID, chrCustomizationChoiceID FROM character_customizations WHERE guid = ? ORDER BY chrCustomizationOptionID"); PrepareStatement(CharStatements.SEL_GROUP_MEMBER, "SELECT guid FROM group_member WHERE memberGuid = ?"); PrepareStatement(CharStatements.SEL_CHARACTER_INSTANCE, "SELECT id, permanent, map, difficulty, extendState, resettime, entranceId FROM character_instance LEFT JOIN instance ON instance = id WHERE guid = ?"); PrepareStatement(CharStatements.SEL_CHARACTER_AURAS, "SELECT casterGuid, itemGuid, spell, effectMask, recalculateMask, difficulty, stackCount, maxDuration, remainTime, remainCharges, castItemId, castItemLevel FROM character_aura WHERE guid = ?"); @@ -411,13 +417,16 @@ namespace Framework.Database PrepareStatement(CharStatements.DEL_PLAYER_HOMEBIND, "DELETE FROM character_homebind WHERE guid = ?"); // Corpse - PrepareStatement(CharStatements.SEL_CORPSES, "SELECT posX, posY, posZ, orientation, mapId, displayId, itemCache, bytes1, bytes2, flags, dynFlags, time, corpseType, instanceId, guid FROM corpse WHERE mapId = ? AND instanceId = ?"); - PrepareStatement(CharStatements.INS_CORPSE, "INSERT INTO corpse (guid, posX, posY, posZ, orientation, mapId, displayId, itemCache, bytes1, bytes2, flags, dynFlags, time, corpseType, instanceId) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); + PrepareStatement(CharStatements.SEL_CORPSES, "SELECT posX, posY, posZ, orientation, mapId, displayId, itemCache, race, gender, flags, dynFlags, time, corpseType, instanceId, guid FROM corpse WHERE mapId = ? AND instanceId = ?"); + PrepareStatement(CharStatements.INS_CORPSE, "INSERT INTO corpse (guid, posX, posY, posZ, orientation, mapId, displayId, itemCache, race, gender, flags, dynFlags, time, corpseType, instanceId) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); PrepareStatement(CharStatements.DEL_CORPSE, "DELETE FROM corpse WHERE guid = ?"); PrepareStatement(CharStatements.DEL_CORPSES_FROM_MAP, "DELETE cp, c FROM corpse_phases cp INNER JOIN corpse c ON cp.OwnerGuid = c.guid WHERE c.mapId = ? AND c.instanceId = ?"); PrepareStatement(CharStatements.SEL_CORPSE_PHASES, "SELECT cp.OwnerGuid, cp.PhaseId FROM corpse_phases cp LEFT JOIN corpse c ON cp.OwnerGuid = c.guid WHERE c.mapId = ? AND c.instanceId = ?"); PrepareStatement(CharStatements.INS_CORPSE_PHASES, "INSERT INTO corpse_phases (OwnerGuid, PhaseId) VALUES (?, ?)"); PrepareStatement(CharStatements.DEL_CORPSE_PHASES, "DELETE FROM corpse_phases WHERE OwnerGuid = ?"); + PrepareStatement(CharStatements.SEL_CORPSE_CUSTOMIZATIONS, "SELECT cc.ownerGuid, cc.chrCustomizationOptionID, cc.chrCustomizationChoiceID FROM corpse_customizations cc LEFT JOIN corpse c ON cc.ownerGuid = c.guid WHERE c.mapId = ? AND c.instanceId = ? ORDER BY cc.ownerGuid, cc.chrCustomizationOptionID"); + PrepareStatement(CharStatements.INS_CORPSE_CUSTOMIZATIONS, "INSERT INTO corpse_customizations (ownerGuid, chrCustomizationOptionID, chrCustomizationChoiceID) VALUES (?, ?, ?)"); + PrepareStatement(CharStatements.DEL_CORPSE_CUSTOMIZATIONS, "DELETE FROM corpse_customizations WHERE ownerGuid = ?"); PrepareStatement(CharStatements.SEL_CORPSE_LOCATION, "SELECT mapId, posX, posY, posZ, orientation FROM corpse WHERE guid = ?"); // Creature respawn @@ -459,13 +468,13 @@ namespace Framework.Database PrepareStatement(CharStatements.DEL_LFG_DATA, "DELETE FROM lfg_data WHERE guid = ?"); // Player saving - PrepareStatement(CharStatements.INS_CHARACTER, "INSERT INTO characters (guid, account, name, race, class, gender, level, xp, money, skin, face, hairStyle, hairColor, facialStyle, customDisplay1, customDisplay2, customDisplay3, inventorySlots, bankSlots, restState, playerFlags, playerFlagsEx, " + + PrepareStatement(CharStatements.INS_CHARACTER, "INSERT INTO characters (guid, account, name, race, class, gender, level, xp, money, inventorySlots, bankSlots, restState, playerFlags, playerFlagsEx, " + "map, instance_id, dungeonDifficulty, raidDifficulty, legacyRaidDifficulty, position_x, position_y, position_z, orientation, trans_x, trans_y, trans_z, trans_o, transguid, " + "taximask, cinematic, totaltime, leveltime, rest_bonus, logout_time, is_logout_resting, resettalents_cost, resettalents_time, primarySpecialization, " + "extra_flags, stable_slots, at_login, zone, death_expire_time, taxi_path, totalKills, todayKills, yesterdayKills, chosenTitle, watchedFaction, drunk, health, power1, power2, power3, " + "power4, power5, power6, latency, activeTalentGroup, lootSpecId, exploredZones, equipmentCache, knownTitles, actionBars, lastLoginBuild) VALUES " + - "(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"); - PrepareStatement(CharStatements.UPD_CHARACTER, "UPDATE characters SET name=?,race=?,class=?,gender=?,level=?,xp=?,money=?,skin=?,face=?,hairStyle=?,hairColor=?,facialStyle=?,customDisplay1=?,customDisplay2=?,customDisplay3=?,inventorySlots=?,bankSlots=?,restState=?,playerFlags=?,playerFlagsEx=?," + + "(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"); + PrepareStatement(CharStatements.UPD_CHARACTER, "UPDATE characters SET name=?,race=?,class=?,gender=?,level=?,xp=?,money=?,inventorySlots=?,bankSlots=?,restState=?,playerFlags=?,playerFlagsEx=?," + "map=?,instance_id=?,dungeonDifficulty=?,raidDifficulty=?,legacyRaidDifficulty=?,position_x=?,position_y=?,position_z=?,orientation=?,trans_x=?,trans_y=?,trans_z=?,trans_o=?,transguid=?,taximask=?,cinematic=?,totaltime=?,leveltime=?,rest_bonus=?," + "logout_time=?,is_logout_resting=?,resettalents_cost=?,resettalents_time=?,numRespecs=?,primarySpecialization=?,extra_flags=?,stable_slots=?,at_login=?,zone=?,death_expire_time=?,taxi_path=?," + "totalKills=?,todayKills=?,yesterdayKills=?,chosenTitle=?," + @@ -479,6 +488,8 @@ namespace Framework.Database PrepareStatement(CharStatements.UPD_PETITION_NAME, "UPDATE petition SET name = ? WHERE petitionguid = ?"); PrepareStatement(CharStatements.INS_PETITION_SIGNATURE, "INSERT INTO petition_sign (ownerguid, petitionguid, playerguid, player_account) VALUES (?, ?, ?, ?)"); PrepareStatement(CharStatements.UPD_ACCOUNT_ONLINE, "UPDATE characters SET online = 0 WHERE account = ?"); + PrepareStatement(CharStatements.INS_CHARACTER_CUSTOMIZATION, "INSERT INTO character_customizations (guid, chrCustomizationOptionID, chrCustomizationChoiceID) VALUES (?, ?, ?)"); + PrepareStatement(CharStatements.DEL_CHARACTER_CUSTOMIZATIONS, "DELETE FROM character_customizations WHERE guid = ?"); PrepareStatement(CharStatements.INS_GROUP, "INSERT INTO groups (guid, leaderGuid, lootMethod, looterGuid, lootThreshold, icon1, icon2, icon3, icon4, icon5, icon6, icon7, icon8, groupType, difficulty, raidDifficulty, legacyRaidDifficulty, masterLooterGuid) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); PrepareStatement(CharStatements.INS_GROUP_MEMBER, "INSERT INTO group_member (guid, memberGuid, memberFlags, subgroup, roles) VALUES(?, ?, ?, ?, ?)"); PrepareStatement(CharStatements.DEL_GROUP_MEMBER, "DELETE FROM group_member WHERE memberGuid = ?"); @@ -513,7 +524,6 @@ namespace Framework.Database PrepareStatement(CharStatements.DEL_CHAR_INSTANCE_BY_INSTANCE_GUID, "DELETE FROM character_instance WHERE guid = ? AND instance = ?"); PrepareStatement(CharStatements.UPD_CHAR_INSTANCE, "UPDATE character_instance SET instance = ?, permanent = ?, extendState = ? WHERE guid = ? AND instance = ?"); PrepareStatement(CharStatements.INS_CHAR_INSTANCE, "INSERT INTO character_instance (guid, instance, permanent, extendState) VALUES (?, ?, ?, ?)"); - PrepareStatement(CharStatements.UPD_GENDER_AND_APPEARANCE, "UPDATE characters SET gender = ?, skin = ?, face = ?, hairStyle = ?, hairColor = ?, facialStyle = ?, customDisplay1 = ?, customDisplay2 = ?, customDisplay3 = ? WHERE guid = ?"); PrepareStatement(CharStatements.DEL_CHARACTER_SKILL, "DELETE FROM character_skills WHERE guid = ? AND skill = ?"); PrepareStatement(CharStatements.UPD_CHARACTER_SOCIAL_FLAGS, "UPDATE character_social SET flags = ? WHERE guid = ? AND friend = ?"); PrepareStatement(CharStatements.INS_CHARACTER_SOCIAL, "INSERT INTO character_social (guid, friend, flags) VALUES (?, ?, ?)"); @@ -808,8 +818,10 @@ namespace Framework.Database SEL_MAIL_LIST_ITEMS, SEL_ENUM, SEL_ENUM_DECLINED_NAME, + SEL_ENUM_CUSTOMIZATIONS, SEL_UNDELETE_ENUM, SEL_UNDELETE_ENUM_DECLINED_NAME, + SEL_UNDELETE_ENUM_CUSTOMIZATIONS, SEL_FREE_NAME, SEL_CHAR_ZONE, SEL_CHAR_POSITION_XYZ, @@ -820,6 +832,7 @@ namespace Framework.Database INS_BATTLEGROUND_RANDOM, SEL_CHARACTER, + SEL_CHARACTER_CUSTOMIZATIONS, SEL_GROUP_MEMBER, SEL_CHARACTER_INSTANCE, SEL_CHARACTER_AURAS, @@ -1094,6 +1107,9 @@ namespace Framework.Database SEL_CORPSE_PHASES, INS_CORPSE_PHASES, DEL_CORPSE_PHASES, + SEL_CORPSE_CUSTOMIZATIONS, + INS_CORPSE_CUSTOMIZATIONS, + DEL_CORPSE_CUSTOMIZATIONS, SEL_CORPSE_LOCATION, SEL_CREATURE_RESPAWNS, @@ -1135,6 +1151,8 @@ namespace Framework.Database UPD_PETITION_NAME, INS_PETITION_SIGNATURE, UPD_ACCOUNT_ONLINE, + INS_CHARACTER_CUSTOMIZATION, + DEL_CHARACTER_CUSTOMIZATIONS, INS_GROUP, INS_GROUP_MEMBER, DEL_GROUP_MEMBER, @@ -1169,7 +1187,6 @@ namespace Framework.Database DEL_CHAR_INSTANCE_BY_INSTANCE_GUID, UPD_CHAR_INSTANCE, INS_CHAR_INSTANCE, - UPD_GENDER_AND_APPEARANCE, DEL_CHARACTER_SKILL, UPD_CHARACTER_SOCIAL_FLAGS, INS_CHARACTER_SOCIAL, diff --git a/Source/Framework/Database/Databases/HotfixDatabase.cs b/Source/Framework/Database/Databases/HotfixDatabase.cs index a04f121f4..59e01b052 100644 --- a/Source/Framework/Database/Databases/HotfixDatabase.cs +++ b/Source/Framework/Database/Databases/HotfixDatabase.cs @@ -22,8 +22,8 @@ namespace Framework.Database public override void PreparedStatements() { // Achievement.db2 - PrepareStatement(HotfixStatements.SEL_ACHIEVEMENT, "SELECT Description, Title, Reward, ID, InstanceID, Faction, Supercedes, Category, MinimumCriteria, " + - "Points, Flags, UiOrder, IconFileID, RewardItemID, CriteriaTree, SharesCriteria FROM achievement"); + PrepareStatement(HotfixStatements.SEL_ACHIEVEMENT, "SELECT Description, Title, Reward, ID, InstanceID, Faction, Supercedes, Category, MinimumCriteria, " + + "Points, Flags, UiOrder, IconFileID, RewardItemID, CriteriaTree, SharesCriteria, CovenantID FROM achievement"); PrepareStatement(HotfixStatements.SEL_ACHIEVEMENT_LOCALE, "SELECT ID, Description_lang, Title_lang, Reward_lang FROM achievement_locale WHERE locale = ?"); // AnimationData.db2 @@ -36,9 +36,9 @@ namespace Framework.Database PrepareStatement(HotfixStatements.SEL_AREA_GROUP_MEMBER, "SELECT ID, AreaID, AreaGroupID FROM area_group_member"); // AreaTable.db2 - PrepareStatement(HotfixStatements.SEL_AREA_TABLE, "SELECT ID, ZoneName, AreaName, ContinentID, ParentAreaID, AreaBit, SoundProviderPref, " + - "SoundProviderPrefUnderwater, AmbienceID, UwAmbience, ZoneMusic, UwZoneMusic, ExplorationLevel, IntroSound, UwIntroSound, FactionGroupMask, " + - "AmbientMultiplier, MountFlags, PvpCombatWorldStateID, WildBattlePetLevelMin, WildBattlePetLevelMax, WindSettingsID, Flags1, Flags2, " + + PrepareStatement(HotfixStatements.SEL_AREA_TABLE, "SELECT ID, ZoneName, AreaName, ContinentID, ParentAreaID, AreaBit, SoundProviderPref, " + + "SoundProviderPrefUnderwater, AmbienceID, UwAmbience, ZoneMusic, UwZoneMusic, IntroSound, UwIntroSound, FactionGroupMask, AmbientMultiplier, " + + "MountFlags, PvpCombatWorldStateID, WildBattlePetLevelMin, WildBattlePetLevelMax, WindSettingsID, ContentTuningID, Flags1, Flags2, " + "LiquidTypeID1, LiquidTypeID2, LiquidTypeID3, LiquidTypeID4 FROM area_table"); PrepareStatement(HotfixStatements.SEL_AREA_TABLE_LOCALE, "SELECT ID, AreaName_lang FROM area_table_locale WHERE locale = ?"); @@ -47,8 +47,7 @@ namespace Framework.Database "BoxWidth, BoxHeight, BoxYaw, ShapeType, ShapeID, AreaTriggerActionSetID, Flags FROM area_trigger"); // ArmorLocation.db2 - PrepareStatement(HotfixStatements.SEL_ARMOR_LOCATION, "SELECT ID, Clothmodifier, Leathermodifier, Chainmodifier, Platemodifier, Modifier FROM armor_location" + - ""); + PrepareStatement(HotfixStatements.SEL_ARMOR_LOCATION, "SELECT ID, Clothmodifier, Leathermodifier, Chainmodifier, Platemodifier, Modifier FROM armor_location"); // Artifact.db2 PrepareStatement(HotfixStatements.SEL_ARTIFACT, "SELECT Name, ID, UiTextureKitID, UiNameColor, UiBarOverlayColor, UiBarBackgroundColor, " + @@ -93,8 +92,7 @@ namespace Framework.Database "MinimumEmpowerKnowledge FROM artifact_tier"); // ArtifactUnlock.db2 - PrepareStatement(HotfixStatements.SEL_ARTIFACT_UNLOCK, "SELECT ID, PowerID, PowerRank, ItemBonusListID, PlayerConditionID, ArtifactID FROM artifact_unlock" + - ""); + PrepareStatement(HotfixStatements.SEL_ARTIFACT_UNLOCK, "SELECT ID, PowerID, PowerRank, ItemBonusListID, PlayerConditionID, ArtifactID FROM artifact_unlock"); // AuctionHouse.db2 PrepareStatement(HotfixStatements.SEL_AUCTION_HOUSE, "SELECT ID, Name, FactionID, DepositRate, ConsignmentRate FROM auction_house"); @@ -147,25 +145,22 @@ namespace Framework.Database PrepareStatement(HotfixStatements.SEL_BANNED_ADDONS, "SELECT ID, Name, Version, Flags FROM banned_addons"); // BarberShopStyle.db2 - PrepareStatement(HotfixStatements.SEL_BARBER_SHOP_STYLE, "SELECT DisplayName, Description, ID, Type, CostModifier, Race, Sex, Data FROM barber_shop_style" + - ""); + PrepareStatement(HotfixStatements.SEL_BARBER_SHOP_STYLE, "SELECT DisplayName, Description, ID, Type, CostModifier, Race, Sex, Data FROM barber_shop_style"); PrepareStatement(HotfixStatements.SEL_BARBER_SHOP_STYLE_LOCALE, "SELECT ID, DisplayName_lang, Description_lang FROM barber_shop_style_locale WHERE locale = ?"); // BattlePetBreedQuality.db2 PrepareStatement(HotfixStatements.SEL_BATTLE_PET_BREED_QUALITY, "SELECT ID, StateMultiplier, QualityEnum FROM battle_pet_breed_quality"); // BattlePetBreedState.db2 - PrepareStatement(HotfixStatements.SEL_BATTLE_PET_BREED_STATE, "SELECT ID, BattlePetStateID, Value, BattlePetBreedID FROM battle_pet_breed_state" + - ""); + PrepareStatement(HotfixStatements.SEL_BATTLE_PET_BREED_STATE, "SELECT ID, BattlePetStateID, Value, BattlePetBreedID FROM battle_pet_breed_state"); // BattlePetSpecies.db2 - PrepareStatement(HotfixStatements.SEL_BATTLE_PET_SPECIES, "SELECT Description, SourceText, ID, CreatureID, SummonSpellID, IconFileDataID, PetTypeEnum, " + - "Flags, SourceTypeEnum, CardUIModelSceneID, LoadoutUIModelSceneID FROM battle_pet_species"); + PrepareStatement(HotfixStatements.SEL_BATTLE_PET_SPECIES, "SELECT Description, SourceText, ID, CreatureID, SummonSpellID, IconFileDataID, PetTypeEnum, " + + "Flags, SourceTypeEnum, CardUIModelSceneID, LoadoutUIModelSceneID, CovenantID FROM battle_pet_species"); PrepareStatement(HotfixStatements.SEL_BATTLE_PET_SPECIES_LOCALE, "SELECT ID, Description_lang, SourceText_lang FROM battle_pet_species_locale WHERE locale = ?"); // BattlePetSpeciesState.db2 - PrepareStatement(HotfixStatements.SEL_BATTLE_PET_SPECIES_STATE, "SELECT ID, BattlePetStateID, Value, BattlePetSpeciesID FROM battle_pet_species_state" + - ""); + PrepareStatement(HotfixStatements.SEL_BATTLE_PET_SPECIES_STATE, "SELECT ID, BattlePetStateID, Value, BattlePetSpeciesID FROM battle_pet_species_state"); // BattlemasterList.db2 PrepareStatement(HotfixStatements.SEL_BATTLEMASTER_LIST, "SELECT ID, Name, GameType, ShortDescription, LongDescription, InstanceType, MinLevel, MaxLevel, " + @@ -183,54 +178,82 @@ namespace Framework.Database // CfgRegions.db2 PrepareStatement(HotfixStatements.SEL_CFG_REGIONS, "SELECT ID, Tag, RegionID, Raidorigin, RegionGroupMask, ChallengeOrigin FROM cfg_regions"); - // CharacterFacialHairStyles.db2 - PrepareStatement(HotfixStatements.SEL_CHARACTER_FACIAL_HAIR_STYLES, "SELECT ID, Geoset1, Geoset2, Geoset3, Geoset4, Geoset5, RaceID, SexID, VariationID" + - " FROM character_facial_hair_styles"); - - // CharBaseSection.db2 - PrepareStatement(HotfixStatements.SEL_CHAR_BASE_SECTION, "SELECT ID, LayoutResType, VariationEnum, ResolutionVariationEnum FROM char_base_section" + - ""); - - // CharSections.db2 - PrepareStatement(HotfixStatements.SEL_CHAR_SECTIONS, "SELECT ID, RaceID, SexID, BaseSection, VariationIndex, ColorIndex, Flags, MaterialResourcesID1, " + - "MaterialResourcesID2, MaterialResourcesID3 FROM char_sections"); - - // CharStartOutfit.db2 - PrepareStatement(HotfixStatements.SEL_CHAR_START_OUTFIT, "SELECT ID, ClassID, SexID, OutfitID, PetDisplayID, PetFamilyID, ItemID1, ItemID2, ItemID3, " + - "ItemID4, ItemID5, ItemID6, ItemID7, ItemID8, ItemID9, ItemID10, ItemID11, ItemID12, ItemID13, ItemID14, ItemID15, ItemID16, ItemID17, " + - "ItemID18, ItemID19, ItemID20, ItemID21, ItemID22, ItemID23, ItemID24, RaceID FROM char_start_outfit"); - // CharTitles.db2 PrepareStatement(HotfixStatements.SEL_CHAR_TITLES, "SELECT ID, Name, Name1, MaskID, Flags FROM char_titles"); PrepareStatement(HotfixStatements.SEL_CHAR_TITLES_LOCALE, "SELECT ID, Name_lang, Name1_lang FROM char_titles_locale WHERE locale = ?"); + // CharacterLoadout.db2 + PrepareStatement(HotfixStatements.SEL_CHARACTER_LOADOUT, "SELECT RaceMask, ID, ChrClassID, Purpose FROM character_loadout"); + + // CharacterLoadoutItem.db2 + PrepareStatement(HotfixStatements.SEL_CHARACTER_LOADOUT_ITEM, "SELECT ID, CharacterLoadoutID, ItemID FROM character_loadout_item"); + // ChatChannels.db2 - PrepareStatement(HotfixStatements.SEL_CHAT_CHANNELS, "SELECT ID, Name, Shortcut, Flags, FactionGroup FROM chat_channels"); + PrepareStatement(HotfixStatements.SEL_CHAT_CHANNELS, "SELECT Name, Shortcut, ID, Flags, FactionGroup, Ruleset FROM chat_channels"); PrepareStatement(HotfixStatements.SEL_CHAT_CHANNELS_LOCALE, "SELECT ID, Name_lang, Shortcut_lang FROM chat_channels_locale WHERE locale = ?"); // ChrClasses.db2 - PrepareStatement(HotfixStatements.SEL_CHR_CLASSES, "SELECT Name, Filename, NameMale, NameFemale, PetNameToken, ID, CreateScreenFileDataID, " + - "SelectScreenFileDataID, IconFileDataID, LowResScreenFileDataID, StartingLevel, SpellTextureBlobFileDataID, Flags, CinematicSequenceID, " + - "DefaultSpec, PrimaryStatPriority, DisplayPower, RangedAttackPowerPerAgility, AttackPowerPerAgility, AttackPowerPerStrength, SpellClassSet" + - " FROM chr_classes"); - PrepareStatement(HotfixStatements.SEL_CHR_CLASSES_LOCALE, "SELECT ID, Name_lang, NameMale_lang, NameFemale_lang FROM chr_classes_locale WHERE locale = ?"); + PrepareStatement(HotfixStatements.SEL_CHR_CLASSES, "SELECT Name, Filename, NameMale, NameFemale, PetNameToken, Description, RoleInfoString, DisabledString, " + + "HyphenatedNameMale, HyphenatedNameFemale, ID, CreateScreenFileDataID, SelectScreenFileDataID, IconFileDataID, LowResScreenFileDataID, Flags, " + + "SpellTextureBlobFileDataID, RolesMask, ArmorTypeMask, CharStartKitUnknown901, MaleCharacterCreationVisualFallback, " + + "MaleCharacterCreationIdleVisualFallback, FemaleCharacterCreationVisualFallback, FemaleCharacterCreationIdleVisualFallback, " + + "CharacterCreationIdleGroundVisualFallback, CharacterCreationGroundVisualFallback, AlteredFormCharacterCreationIdleVisualFallback, " + + "CharacterCreationAnimLoopWaitTimeMsFallback, CinematicSequenceID, DefaultSpec, PrimaryStatPriority, DisplayPower, " + + "RangedAttackPowerPerAgility, AttackPowerPerAgility, AttackPowerPerStrength, SpellClassSet, ChatColorR, ChatColorG, ChatColorB FROM chr_classes"); + PrepareStatement(HotfixStatements.SEL_CHR_CLASSES_LOCALE, "SELECT ID, Name_lang, NameMale_lang, NameFemale_lang, Description_lang, RoleInfoString_lang, " + + "DisabledString_lang, HyphenatedNameMale_lang, HyphenatedNameFemale_lang FROM chr_classes_locale WHERE locale = ?"); // ChrClassesXPowerTypes.db2 PrepareStatement(HotfixStatements.SEL_CHR_CLASSES_X_POWER_TYPES, "SELECT ID, PowerType, ClassID FROM chr_classes_x_power_types"); + // ChrCustomizationChoice.db2 + PrepareStatement(HotfixStatements.SEL_CHR_CUSTOMIZATION_CHOICE, "SELECT Name, ID, ChrCustomizationOptionID, ChrCustomizationReqID, SortOrder, SwatchColor1, " + + "SwatchColor2, UiOrderIndex, Flags FROM chr_customization_choice"); + PrepareStatement(HotfixStatements.SEL_CHR_CUSTOMIZATION_CHOICE_LOCALE, "SELECT ID, Name_lang FROM chr_customization_choice_locale WHERE locale = ?"); + + // ChrCustomizationDisplayInfo.db2 + PrepareStatement(HotfixStatements.SEL_CHR_CUSTOMIZATION_DISPLAY_INFO, "SELECT ID, ShapeshiftFormID, DisplayID, BarberShopMinCameraDistance, " + + "BarberShopHeightOffset FROM chr_customization_display_info"); + + // ChrCustomizationElement.db2 + PrepareStatement(HotfixStatements.SEL_CHR_CUSTOMIZATION_ELEMENT, "SELECT ID, ChrCustomizationChoiceID, RelatedChrCustomizationChoiceID, " + + "ChrCustomizationGeosetID, ChrCustomizationSkinnedModelID, ChrCustomizationMaterialID, ChrCustomizationBoneSetID, " + + "ChrCustomizationCondModelID, ChrCustomizationDisplayInfoID FROM chr_customization_element"); + + // ChrCustomizationOption.db2 + PrepareStatement(HotfixStatements.SEL_CHR_CUSTOMIZATION_OPTION, "SELECT Name, ID, SecondaryID, Flags, ChrModelID, SortIndex, ChrCustomizationCategoryID, " + + "OptionType, BarberShopCostModifier, ChrCustomizationID, ChrCustomizationReqID, UiOrderIndex FROM chr_customization_option"); + PrepareStatement(HotfixStatements.SEL_CHR_CUSTOMIZATION_OPTION_LOCALE, "SELECT ID, Name_lang FROM chr_customization_option_locale WHERE locale = ?"); + + // ChrCustomizationReq.db2 + PrepareStatement(HotfixStatements.SEL_CHR_CUSTOMIZATION_REQ, "SELECT ID, Flags, ClassMask, AchievementID, OverrideArchive, ItemModifiedAppearanceID FROM chr_customization_req"); + + // ChrCustomizationReqChoice.db2 + PrepareStatement(HotfixStatements.SEL_CHR_CUSTOMIZATION_REQ_CHOICE, "SELECT ID, ChrCustomizationChoiceID, ChrCustomizationReqID FROM chr_customization_req_choice"); + + // ChrModel.db2 + PrepareStatement(HotfixStatements.SEL_CHR_MODEL, "SELECT FaceCustomizationOffset1, FaceCustomizationOffset2, FaceCustomizationOffset3, CustomizeOffset1, " + + "CustomizeOffset2, CustomizeOffset3, ID, Sex, DisplayID, CharComponentTextureLayoutID, Flags, SkeletonFileDataID, ModelFallbackChrModelID, " + + "TextureFallbackChrModelID, HelmVisFallbackChrModelID, CustomizeScale, CustomizeFacing, CameraDistanceOffset, BarberShopCameraOffsetScale, " + + "BarberShopCameraRotationOffset FROM chr_model"); + + // ChrRaceXChrModel.db2 + PrepareStatement(HotfixStatements.SEL_CHR_RACE_X_CHR_MODEL, "SELECT ID, ChrRacesID, ChrModelID FROM chr_race_x_chr_model"); + // ChrRaces.db2 - PrepareStatement(HotfixStatements.SEL_CHR_RACES, "SELECT ClientPrefix, ClientFileString, Name, NameFemale, NameLowercase, NameFemaleLowercase, ID, Flags, " + - "MaleDisplayId, FemaleDisplayId, HighResMaleDisplayId, HighResFemaleDisplayId, CreateScreenFileDataID, SelectScreenFileDataID, " + - "MaleCustomizeOffset1, MaleCustomizeOffset2, MaleCustomizeOffset3, FemaleCustomizeOffset1, FemaleCustomizeOffset2, FemaleCustomizeOffset3, " + - "LowResScreenFileDataID, AlteredFormStartVisualKitID1, AlteredFormStartVisualKitID2, AlteredFormStartVisualKitID3, " + - "AlteredFormFinishVisualKitID1, AlteredFormFinishVisualKitID2, AlteredFormFinishVisualKitID3, HeritageArmorAchievementID, StartingLevel, " + - "UiDisplayOrder, FemaleSkeletonFileDataID, MaleSkeletonFileDataID, HelmVisFallbackRaceID, TransmogrifyDisabledSlotMask, FactionID, " + - "CinematicSequenceID, ResSicknessSpellID, SplashSoundID, BaseLanguage, CreatureType, Alliance, RaceRelated, UnalteredVisualRaceID, " + - "CharComponentTextureLayoutID, CharComponentTexLayoutHiResID, DefaultClassID, NeutralRaceID, MaleModelFallbackRaceID, MaleModelFallbackSex, " + - "FemaleModelFallbackRaceID, FemaleModelFallbackSex, MaleTextureFallbackRaceID, MaleTextureFallbackSex, FemaleTextureFallbackRaceID, " + - "FemaleTextureFallbackSex FROM chr_races"); - PrepareStatement(HotfixStatements.SEL_CHR_RACES_LOCALE, "SELECT ID, Name_lang, NameFemale_lang, NameLowercase_lang, NameFemaleLowercase_lang" + - " FROM chr_races_locale WHERE locale = ?"); + PrepareStatement(HotfixStatements.SEL_CHR_RACES, "SELECT ClientPrefix, ClientFileString, Name, NameFemale, NameLowercase, NameFemaleLowercase, NameS, " + + "NameFemaleS, NameLowercaseS, NameFemaleLowercaseS, RaceFantasyDescription, NameL, NameFemaleL, NameLowercaseL, NameFemaleLowercaseL, ID, " + + "Flags, BaseLanguage, ResSicknessSpellID, SplashSoundID, CreateScreenFileDataID, SelectScreenFileDataID, LowResScreenFileDataID, " + + "AlteredFormStartVisualKitID1, AlteredFormStartVisualKitID2, AlteredFormStartVisualKitID3, AlteredFormFinishVisualKitID1, " + + "AlteredFormFinishVisualKitID2, AlteredFormFinishVisualKitID3, HeritageArmorAchievementID, StartingLevel, UiDisplayOrder, PlayableRaceBit, " + + "HelmetAnimScalingRaceID, TransmogrifyDisabledSlotMask, AlteredFormCustomizeOffsetFallback1, AlteredFormCustomizeOffsetFallback2, " + + "AlteredFormCustomizeOffsetFallback3, AlteredFormCustomizeRotationFallback, FactionID, CinematicSequenceID, CreatureType, Alliance, " + + "RaceRelated, UnalteredVisualRaceID, DefaultClassID, NeutralRaceID, MaleModelFallbackRaceID, MaleModelFallbackSex, FemaleModelFallbackRaceID, " + + "FemaleModelFallbackSex, MaleTextureFallbackRaceID, MaleTextureFallbackSex, FemaleTextureFallbackRaceID, FemaleTextureFallbackSex, " + + "UnalteredVisualCustomizationRaceID FROM chr_races"); + PrepareStatement(HotfixStatements.SEL_CHR_RACES_LOCALE, "SELECT ID, Name_lang, NameFemale_lang, NameLowercase_lang, NameFemaleLowercase_lang, NameS_lang, " + + "NameFemaleS_lang, NameLowercaseS_lang, NameFemaleLowercaseS_lang, RaceFantasyDescription_lang, NameL_lang, NameFemaleL_lang, " + + "NameLowercaseL_lang, NameFemaleLowercaseL_lang FROM chr_races_locale WHERE locale = ?"); // ChrSpecialization.db2 PrepareStatement(HotfixStatements.SEL_CHR_SPECIALIZATION, "SELECT Name, FemaleName, Description, ID, ClassID, OrderIndex, PetTalentType, Role, Flags, " + @@ -239,15 +262,14 @@ namespace Framework.Database " WHERE locale = ?"); // CinematicCamera.db2 - PrepareStatement(HotfixStatements.SEL_CINEMATIC_CAMERA, "SELECT ID, OriginX, OriginY, OriginZ, SoundID, OriginFacing, FileDataID FROM cinematic_camera" + - ""); + PrepareStatement(HotfixStatements.SEL_CINEMATIC_CAMERA, "SELECT ID, OriginX, OriginY, OriginZ, SoundID, OriginFacing, FileDataID FROM cinematic_camera"); // CinematicSequences.db2 - PrepareStatement(HotfixStatements.SEL_CINEMATIC_SEQUENCES, "SELECT ID, SoundID, Camera1, Camera2, Camera3, Camera4, Camera5, Camera6, Camera7, Camera8" + - " FROM cinematic_sequences"); + PrepareStatement(HotfixStatements.SEL_CINEMATIC_SEQUENCES, "SELECT ID, SoundID, Camera1, Camera2, Camera3, Camera4, Camera5, Camera6, Camera7, Camera8 FROM cinematic_sequences"); // ContentTuning.db2 - PrepareStatement(HotfixStatements.SEL_CONTENT_TUNING, "SELECT ID, MinLevel, MaxLevel, Flags, ExpansionID FROM content_tuning"); + PrepareStatement(HotfixStatements.SEL_CONTENT_TUNING, "SELECT ID, Flags, ExpansionID, MinLevel, MaxLevel, MinLevelType, MaxLevelType, TargetLevelDelta, " + + "TargetLevelMaxDelta, TargetLevelMin, TargetLevelMax, MinItemLevel FROM content_tuning"); // ContentTuningXExpected.db2 PrepareStatement(HotfixStatements.SEL_CONTENT_TUNING_X_EXPECTED, "SELECT ID, ExpectedStatModID, MythicPlusSeasonID, ContentTuningID" + @@ -268,9 +290,8 @@ namespace Framework.Database "TextureVariationFileDataID3 FROM creature_display_info"); // CreatureDisplayInfoExtra.db2 - PrepareStatement(HotfixStatements.SEL_CREATURE_DISPLAY_INFO_EXTRA, "SELECT ID, DisplayRaceID, DisplaySexID, DisplayClassID, SkinID, FaceID, HairStyleID, " + - "HairColorID, FacialHairID, Flags, BakeMaterialResourcesID, HDBakeMaterialResourcesID, CustomDisplayOption1, CustomDisplayOption2, " + - "CustomDisplayOption3 FROM creature_display_info_extra"); + PrepareStatement(HotfixStatements.SEL_CREATURE_DISPLAY_INFO_EXTRA, "SELECT ID, DisplayRaceID, DisplaySexID, DisplayClassID, Flags, BakeMaterialResourcesID, " + + "HDBakeMaterialResourcesID FROM creature_display_info_extra"); // CreatureFamily.db2 PrepareStatement(HotfixStatements.SEL_CREATURE_FAMILY, "SELECT ID, Name, MinScale, MinScaleLevel, MaxScale, MaxScaleLevel, PetFoodMask, PetTalentType, " + @@ -294,33 +315,29 @@ namespace Framework.Database "EligibilityWorldStateID, EligibilityWorldStateValue FROM criteria"); // CriteriaTree.db2 - PrepareStatement(HotfixStatements.SEL_CRITERIA_TREE, "SELECT ID, Description, Parent, Amount, Operator, CriteriaID, OrderIndex, Flags FROM criteria_tree" + - ""); + PrepareStatement(HotfixStatements.SEL_CRITERIA_TREE, "SELECT ID, Description, Parent, Amount, Operator, CriteriaID, OrderIndex, Flags FROM criteria_tree"); PrepareStatement(HotfixStatements.SEL_CRITERIA_TREE_LOCALE, "SELECT ID, Description_lang FROM criteria_tree_locale WHERE locale = ?"); // CurrencyTypes.db2 PrepareStatement(HotfixStatements.SEL_CURRENCY_TYPES, "SELECT ID, Name, Description, CategoryID, InventoryIconFileID, SpellWeight, SpellCategory, MaxQty, " + - "MaxEarnablePerWeek, Flags, Quality, FactionID, ItemGroupSoundsID, ConvertToPlayerExperience, PlayerConditionID FROM currency_types" + - ""); + "MaxEarnablePerWeek, Quality, FactionID, ItemGroupSoundsID, XpQuestDifficulty, AwardConditionID, MaxQtyWorldStateID, Flags1, Flags2 FROM currency_types"); PrepareStatement(HotfixStatements.SEL_CURRENCY_TYPES_LOCALE, "SELECT ID, Name_lang, Description_lang FROM currency_types_locale WHERE locale = ?"); // Curve.db2 PrepareStatement(HotfixStatements.SEL_CURVE, "SELECT ID, Type, Flags FROM curve"); // CurvePoint.db2 - PrepareStatement(HotfixStatements.SEL_CURVE_POINT, "SELECT ID, PosX, PosY, CurveID, OrderIndex FROM curve_point"); + PrepareStatement(HotfixStatements.SEL_CURVE_POINT, "SELECT ID, PosX, PosY, PosPreSquishX, PosPreSquishY, CurveID, OrderIndex FROM curve_point"); // DestructibleModelData.db2 - PrepareStatement(HotfixStatements.SEL_DESTRUCTIBLE_MODEL_DATA, "SELECT ID, State0ImpactEffectDoodadSet, State0AmbientDoodadSet, State1Wmo, " + - "State1DestructionDoodadSet, State1ImpactEffectDoodadSet, State1AmbientDoodadSet, State2Wmo, State2DestructionDoodadSet, " + - "State2ImpactEffectDoodadSet, State2AmbientDoodadSet, State3Wmo, State3InitDoodadSet, State3AmbientDoodadSet, EjectDirection, DoNotHighlight, " + - "State0Wmo, HealEffect, HealEffectSpeed, State0NameSet, State1NameSet, State2NameSet, State3NameSet FROM destructible_model_data" + - ""); + PrepareStatement(HotfixStatements.SEL_DESTRUCTIBLE_MODEL_DATA, "SELECT ID, State0ImpactEffectDoodadSet, State0AmbientDoodadSet, State1Wmo, " + + "State1DestructionDoodadSet, State1ImpactEffectDoodadSet, State1AmbientDoodadSet, State2Wmo, State2DestructionDoodadSet, " + + "State2ImpactEffectDoodadSet, State2AmbientDoodadSet, State3Wmo, State3InitDoodadSet, State3AmbientDoodadSet, EjectDirection, DoNotHighlight, " + + "State0Wmo, HealEffect, HealEffectSpeed, State0NameSet, State1NameSet, State2NameSet, State3NameSet FROM destructible_model_data"); // Difficulty.db2 PrepareStatement(HotfixStatements.SEL_DIFFICULTY, "SELECT ID, Name, InstanceType, OrderIndex, OldEnumValue, FallbackDifficultyID, MinPlayers, MaxPlayers, " + - "Flags, ItemContext, ToggleDifficultyID, GroupSizeHealthCurveID, GroupSizeDmgCurveID, GroupSizeSpellPointsCurveID FROM difficulty" + - ""); + "Flags, ItemContext, ToggleDifficultyID, GroupSizeHealthCurveID, GroupSizeDmgCurveID, GroupSizeSpellPointsCurveID FROM difficulty"); PrepareStatement(HotfixStatements.SEL_DIFFICULTY_LOCALE, "SELECT ID, Name_lang FROM difficulty_locale WHERE locale = ?"); // DungeonEncounter.db2 @@ -406,9 +423,8 @@ namespace Framework.Database PrepareStatement(HotfixStatements.SEL_GARR_FOLLOWER, "SELECT HordeSourceText, AllianceSourceText, TitleName, ID, GarrTypeID, GarrFollowerTypeID, " + "HordeCreatureID, AllianceCreatureID, HordeGarrFollRaceID, AllianceGarrFollRaceID, HordeGarrClassSpecID, AllianceGarrClassSpecID, Quality, " + "FollowerLevel, ItemLevelWeapon, ItemLevelArmor, HordeSourceTypeEnum, AllianceSourceTypeEnum, HordeIconFileDataID, AllianceIconFileDataID, " + - "HordeGarrFollItemSetID, AllianceGarrFollItemSetID, HordeUITextureKitID, AllianceUITextureKitID, Vitality, HordeFlavorGarrStringID, " + - "AllianceFlavorGarrStringID, HordeSlottingBroadcastTextID, AllySlottingBroadcastTextID, ChrClassID, Flags, Gender FROM garr_follower" + - ""); + "HordeGarrFollItemSetID, AllianceGarrFollItemSetID, HordeUITextureKitID, AllianceUITextureKitID, Vitality, HordeFlavorGarrStringID, " + + "AllianceFlavorGarrStringID, HordeSlottingBroadcastTextID, AllySlottingBroadcastTextID, ChrClassID, Flags, Gender, AutoCombatantID, CovenantID FROM garr_follower"); PrepareStatement(HotfixStatements.SEL_GARR_FOLLOWER_LOCALE, "SELECT ID, HordeSourceText_lang, AllianceSourceText_lang, TitleName_lang FROM garr_follower_locale" + " WHERE locale = ?"); @@ -435,14 +451,13 @@ namespace Framework.Database " FROM garr_site_level_plot_inst"); // GemProperties.db2 - PrepareStatement(HotfixStatements.SEL_GEM_PROPERTIES, "SELECT ID, EnchantId, Type, MinItemLevel FROM gem_properties"); + PrepareStatement(HotfixStatements.SEL_GEM_PROPERTIES, "SELECT ID, EnchantId, Type FROM gem_properties"); // GlyphBindableSpell.db2 PrepareStatement(HotfixStatements.SEL_GLYPH_BINDABLE_SPELL, "SELECT ID, SpellID, GlyphPropertiesID FROM glyph_bindable_spell"); // GlyphProperties.db2 - PrepareStatement(HotfixStatements.SEL_GLYPH_PROPERTIES, "SELECT ID, SpellID, GlyphType, GlyphExclusiveCategoryID, SpellIconFileDataID FROM glyph_properties" + - ""); + PrepareStatement(HotfixStatements.SEL_GLYPH_PROPERTIES, "SELECT ID, SpellID, GlyphType, GlyphExclusiveCategoryID, SpellIconFileDataID FROM glyph_properties"); // GlyphRequiredSpec.db2 PrepareStatement(HotfixStatements.SEL_GLYPH_REQUIRED_SPEC, "SELECT ID, ChrSpecializationID, GlyphPropertiesID FROM glyph_required_spec"); @@ -470,12 +485,10 @@ namespace Framework.Database "Duration1, Duration2, Duration3, Duration4, Duration5, Duration6, Duration7, Duration8, Duration9, Duration10, Date1, Date2, Date3, Date4, " + "Date5, Date6, Date7, Date8, Date9, Date10, Date11, Date12, Date13, Date14, Date15, Date16, Date17, Date18, Date19, Date20, Date21, Date22, " + "Date23, Date24, Date25, Date26, CalendarFlags1, CalendarFlags2, CalendarFlags3, CalendarFlags4, CalendarFlags5, CalendarFlags6, " + - "CalendarFlags7, CalendarFlags8, CalendarFlags9, CalendarFlags10, TextureFileDataID1, TextureFileDataID2, TextureFileDataID3 FROM holidays" + - ""); + "CalendarFlags7, CalendarFlags8, CalendarFlags9, CalendarFlags10, TextureFileDataID1, TextureFileDataID2, TextureFileDataID3 FROM holidays"); // ImportPriceArmor.db2 - PrepareStatement(HotfixStatements.SEL_IMPORT_PRICE_ARMOR, "SELECT ID, ClothModifier, LeatherModifier, ChainModifier, PlateModifier FROM import_price_armor" + - ""); + PrepareStatement(HotfixStatements.SEL_IMPORT_PRICE_ARMOR, "SELECT ID, ClothModifier, LeatherModifier, ChainModifier, PlateModifier FROM import_price_armor"); // ImportPriceQuality.db2 PrepareStatement(HotfixStatements.SEL_IMPORT_PRICE_QUALITY, "SELECT ID, Data FROM import_price_quality"); @@ -487,12 +500,11 @@ namespace Framework.Database PrepareStatement(HotfixStatements.SEL_IMPORT_PRICE_WEAPON, "SELECT ID, Data FROM import_price_weapon"); // Item.db2 - PrepareStatement(HotfixStatements.SEL_ITEM, "SELECT ID, ClassID, SubclassID, Material, InventoryType, SheatheType, SoundOverrideSubclassID, IconFileDataID, " + - "ItemGroupSoundsID FROM item"); + PrepareStatement(HotfixStatements.SEL_ITEM, "SELECT ID, ClassID, SubclassID, Material, InventoryType, SheatheType, SoundOverrideSubclassID, IconFileDataID, " + + "ItemGroupSoundsID, ModifiedCraftingReagentItemID FROM item"); // ItemAppearance.db2 - PrepareStatement(HotfixStatements.SEL_ITEM_APPEARANCE, "SELECT ID, DisplayType, ItemDisplayInfoID, DefaultIconFileDataID, UiOrder FROM item_appearance" + - ""); + PrepareStatement(HotfixStatements.SEL_ITEM_APPEARANCE, "SELECT ID, DisplayType, ItemDisplayInfoID, DefaultIconFileDataID, UiOrder, PlayerConditionID FROM item_appearance"); // ItemArmorQuality.db2 PrepareStatement(HotfixStatements.SEL_ITEM_ARMOR_QUALITY, "SELECT ID, Qualitymod1, Qualitymod2, Qualitymod3, Qualitymod4, Qualitymod5, Qualitymod6, " + @@ -510,8 +522,7 @@ namespace Framework.Database PrepareStatement(HotfixStatements.SEL_ITEM_BAG_FAMILY_LOCALE, "SELECT ID, Name_lang FROM item_bag_family_locale WHERE locale = ?"); // ItemBonus.db2 - PrepareStatement(HotfixStatements.SEL_ITEM_BONUS, "SELECT ID, Value1, Value2, Value3, ParentItemBonusListID, Type, OrderIndex FROM item_bonus" + - ""); + PrepareStatement(HotfixStatements.SEL_ITEM_BONUS, "SELECT ID, Value1, Value2, Value3, Value4, ParentItemBonusListID, Type, OrderIndex FROM item_bonus"); // ItemBonusListLevelDelta.db2 PrepareStatement(HotfixStatements.SEL_ITEM_BONUS_LIST_LEVEL_DELTA, "SELECT ItemLevelDelta, ID FROM item_bonus_list_level_delta"); @@ -521,8 +532,7 @@ namespace Framework.Database "ParentItemBonusTreeID FROM item_bonus_tree_node"); // ItemChildEquipment.db2 - PrepareStatement(HotfixStatements.SEL_ITEM_CHILD_EQUIPMENT, "SELECT ID, ParentItemID, ChildItemID, ChildItemEquipSlot FROM item_child_equipment" + - ""); + PrepareStatement(HotfixStatements.SEL_ITEM_CHILD_EQUIPMENT, "SELECT ID, ParentItemID, ChildItemID, ChildItemEquipSlot FROM item_child_equipment"); // ItemClass.db2 PrepareStatement(HotfixStatements.SEL_ITEM_CLASS, "SELECT ID, ClassName, ClassID, PriceModifier, Flags FROM item_class"); @@ -603,33 +613,32 @@ namespace Framework.Database // ItemSet.db2 PrepareStatement(HotfixStatements.SEL_ITEM_SET, "SELECT ID, Name, SetFlags, RequiredSkill, RequiredSkillRank, ItemID1, ItemID2, ItemID3, ItemID4, ItemID5, " + - "ItemID6, ItemID7, ItemID8, ItemID9, ItemID10, ItemID11, ItemID12, ItemID13, ItemID14, ItemID15, ItemID16, ItemID17 FROM item_set" + - ""); + "ItemID6, ItemID7, ItemID8, ItemID9, ItemID10, ItemID11, ItemID12, ItemID13, ItemID14, ItemID15, ItemID16, ItemID17 FROM item_set"); PrepareStatement(HotfixStatements.SEL_ITEM_SET_LOCALE, "SELECT ID, Name_lang FROM item_set_locale WHERE locale = ?"); // ItemSetSpell.db2 PrepareStatement(HotfixStatements.SEL_ITEM_SET_SPELL, "SELECT ID, ChrSpecID, SpellID, Threshold, ItemSetID FROM item_set_spell"); // ItemSparse.db2 - PrepareStatement(HotfixStatements.SEL_ITEM_SPARSE, "SELECT ID, AllowableRace, Description, Display3, Display2, Display1, Display, DmgVariance, " + - "DurationInInventory, QualityModifier, BagFamily, ItemRange, StatPercentageOfSocket1, StatPercentageOfSocket2, StatPercentageOfSocket3, " + - "StatPercentageOfSocket4, StatPercentageOfSocket5, StatPercentageOfSocket6, StatPercentageOfSocket7, StatPercentageOfSocket8, " + - "StatPercentageOfSocket9, StatPercentageOfSocket10, StatPercentEditor1, StatPercentEditor2, StatPercentEditor3, StatPercentEditor4, " + - "StatPercentEditor5, StatPercentEditor6, StatPercentEditor7, StatPercentEditor8, StatPercentEditor9, StatPercentEditor10, Stackable, " + - "MaxCount, RequiredAbility, SellPrice, BuyPrice, VendorStackCount, PriceVariance, PriceRandomValue, Flags1, Flags2, Flags3, Flags4, " + - "FactionRelated, ItemNameDescriptionID, RequiredTransmogHoliday, RequiredHoliday, LimitCategory, GemProperties, SocketMatchEnchantmentId, " + - "TotemCategoryID, InstanceBound, ZoneBound1, ZoneBound2, ItemSet, LockID, StartQuestID, PageID, ItemDelay, ScalingStatDistributionID, " + - "MinFactionID, RequiredSkillRank, RequiredSkill, ItemLevel, AllowableClass, ExpansionID, ArtifactID, SpellWeight, SpellWeightCategory, " + - "SocketType1, SocketType2, SocketType3, SheatheType, Material, PageMaterialID, LanguageID, Bonding, DamageDamageType, StatModifierBonusStat1, " + - "StatModifierBonusStat2, StatModifierBonusStat3, StatModifierBonusStat4, StatModifierBonusStat5, StatModifierBonusStat6, " + - "StatModifierBonusStat7, StatModifierBonusStat8, StatModifierBonusStat9, StatModifierBonusStat10, ContainerSlots, MinReputation, " + - "RequiredPVPMedal, RequiredPVPRank, RequiredLevel, InventoryType, OverallQualityID FROM item_sparse"); + PrepareStatement(HotfixStatements.SEL_ITEM_SPARSE, "SELECT ID, AllowableRace, Description, Display3, Display2, Display1, Display, DmgVariance, " + + "DurationInInventory, QualityModifier, BagFamily, ItemRange, StatPercentageOfSocket1, StatPercentageOfSocket2, StatPercentageOfSocket3, " + + "StatPercentageOfSocket4, StatPercentageOfSocket5, StatPercentageOfSocket6, StatPercentageOfSocket7, StatPercentageOfSocket8, " + + "StatPercentageOfSocket9, StatPercentageOfSocket10, StatPercentEditor1, StatPercentEditor2, StatPercentEditor3, StatPercentEditor4, " + + "StatPercentEditor5, StatPercentEditor6, StatPercentEditor7, StatPercentEditor8, StatPercentEditor9, StatPercentEditor10, Stackable, " + + "MaxCount, RequiredAbility, SellPrice, BuyPrice, VendorStackCount, PriceVariance, PriceRandomValue, Flags1, Flags2, Flags3, Flags4, " + + "FactionRelated, ModifiedCraftingReagentItemID, ContentTuningID, PlayerLevelToItemLevelCurveID, ItemNameDescriptionID, " + + "RequiredTransmogHoliday, RequiredHoliday, LimitCategory, GemProperties, SocketMatchEnchantmentId, TotemCategoryID, InstanceBound, " + + "ZoneBound1, ZoneBound2, ItemSet, LockID, StartQuestID, PageID, ItemDelay, MinFactionID, RequiredSkillRank, RequiredSkill, ItemLevel, " + + "AllowableClass, ExpansionID, ArtifactID, SpellWeight, SpellWeightCategory, SocketType1, SocketType2, SocketType3, SheatheType, Material, " + + "PageMaterialID, LanguageID, Bonding, DamageDamageType, StatModifierBonusStat1, StatModifierBonusStat2, StatModifierBonusStat3, " + + "StatModifierBonusStat4, StatModifierBonusStat5, StatModifierBonusStat6, StatModifierBonusStat7, StatModifierBonusStat8, " + + "StatModifierBonusStat9, StatModifierBonusStat10, ContainerSlots, MinReputation, RequiredPVPMedal, RequiredPVPRank, RequiredLevel, " + + "InventoryType, OverallQualityID FROM item_sparse"); PrepareStatement(HotfixStatements.SEL_ITEM_SPARSE_LOCALE, "SELECT ID, Description_lang, Display3_lang, Display2_lang, Display1_lang, Display_lang" + " FROM item_sparse_locale WHERE locale = ?"); // ItemSpec.db2 - PrepareStatement(HotfixStatements.SEL_ITEM_SPEC, "SELECT ID, MinLevel, MaxLevel, ItemType, PrimaryStat, SecondaryStat, SpecializationID FROM item_spec" + - ""); + PrepareStatement(HotfixStatements.SEL_ITEM_SPEC, "SELECT ID, MinLevel, MaxLevel, ItemType, PrimaryStat, SecondaryStat, SpecializationID FROM item_spec"); // ItemSpecOverride.db2 PrepareStatement(HotfixStatements.SEL_ITEM_SPEC_OVERRIDE, "SELECT ID, SpecID, ItemID FROM item_spec_override"); @@ -639,20 +648,18 @@ namespace Framework.Database // Keychain.db2 PrepareStatement(HotfixStatements.SEL_KEYCHAIN, "SELECT ID, Key1, Key2, Key3, Key4, Key5, Key6, Key7, Key8, Key9, Key10, Key11, Key12, Key13, Key14, Key15, " + - "Key16, Key17, Key18, Key19, Key20, Key21, Key22, Key23, Key24, Key25, Key26, Key27, Key28, Key29, Key30, Key31, Key32 FROM keychain" + - ""); + "Key16, Key17, Key18, Key19, Key20, Key21, Key22, Key23, Key24, Key25, Key26, Key27, Key28, Key29, Key30, Key31, Key32 FROM keychain"); // LfgDungeons.db2 - PrepareStatement(HotfixStatements.SEL_LFG_DUNGEONS, "SELECT ID, Name, Description, MinLevel, MaxLevel, TypeID, Subtype, Faction, IconTextureFileID, " + - "RewardsBgTextureFileID, PopupBgTextureFileID, ExpansionLevel, MapID, DifficultyID, MinGear, GroupID, OrderIndex, RequiredPlayerConditionId, " + - "TargetLevel, TargetLevelMin, TargetLevelMax, RandomID, ScenarioID, FinalEncounterID, CountTank, CountHealer, CountDamage, MinCountTank, " + - "MinCountHealer, MinCountDamage, BonusReputationAmount, MentorItemLevel, MentorCharLevel, Flags1, Flags2 FROM lfg_dungeons"); + PrepareStatement(HotfixStatements.SEL_LFG_DUNGEONS, "SELECT ID, Name, Description, TypeID, Subtype, Faction, IconTextureFileID, RewardsBgTextureFileID, " + + "PopupBgTextureFileID, ExpansionLevel, MapID, DifficultyID, MinGear, GroupID, OrderIndex, RequiredPlayerConditionId, RandomID, ScenarioID, " + + "FinalEncounterID, CountTank, CountHealer, CountDamage, MinCountTank, MinCountHealer, MinCountDamage, BonusReputationAmount, MentorItemLevel, " + + "MentorCharLevel, ContentTuningID, Flags1, Flags2 FROM lfg_dungeons"); PrepareStatement(HotfixStatements.SEL_LFG_DUNGEONS_LOCALE, "SELECT ID, Name_lang, Description_lang FROM lfg_dungeons_locale WHERE locale = ?"); // Light.db2 PrepareStatement(HotfixStatements.SEL_LIGHT, "SELECT ID, GameCoordsX, GameCoordsY, GameCoordsZ, GameFalloffStart, GameFalloffEnd, ContinentID, " + - "LightParamsID1, LightParamsID2, LightParamsID3, LightParamsID4, LightParamsID5, LightParamsID6, LightParamsID7, LightParamsID8 FROM light" + - ""); + "LightParamsID1, LightParamsID2, LightParamsID3, LightParamsID4, LightParamsID5, LightParamsID6, LightParamsID7, LightParamsID8 FROM light"); // LiquidType.db2 PrepareStatement(HotfixStatements.SEL_LIQUID_TYPE, "SELECT ID, Name, Texture1, Texture2, Texture3, Texture4, Texture5, Texture6, Flags, SoundBank, SoundID, " + @@ -663,7 +670,7 @@ namespace Framework.Database "Coefficient3, Coefficient4 FROM liquid_type"); // Lock.db2 - PrepareStatement(HotfixStatements.SEL_LOCK, "SELECT ID, Index1, Index2, Index3, Index4, Index5, Index6, Index7, Index8, Skill1, Skill2, Skill3, Skill4, " + + PrepareStatement(HotfixStatements.SEL_LOCK, "SELECT ID, Flags, Index1, Index2, Index3, Index4, Index5, Index6, Index7, Index8, Skill1, Skill2, Skill3, Skill4, " + "Skill5, Skill6, Skill7, Skill8, Type1, Type2, Type3, Type4, Type5, Type6, Type7, Type8, Action1, Action2, Action3, Action4, Action5, " + "Action6, Action7, Action8 FROM `lock`"); @@ -672,9 +679,9 @@ namespace Framework.Database PrepareStatement(HotfixStatements.SEL_MAIL_TEMPLATE_LOCALE, "SELECT ID, Body_lang FROM mail_template_locale WHERE locale = ?"); // Map.db2 - PrepareStatement(HotfixStatements.SEL_MAP, "SELECT ID, Directory, MapName, MapDescription0, MapDescription1, PvpShortDescription, PvpLongDescription, " + - "CorpseX, CorpseY, MapType, InstanceType, ExpansionID, AreaTableID, LoadingScreenID, TimeOfDayOverride, ParentMapID, CosmeticParentMapID, " + - "TimeOffset, MinimapIconScale, CorpseMapID, MaxPlayers, WindSettingsID, ZmpFileDataID, WdtFileDataID, Flags1, Flags2 FROM map"); + PrepareStatement(HotfixStatements.SEL_MAP, "SELECT ID, Directory, MapName, InternalName, MapDescription0, MapDescription1, PvpShortDescription, " + + "PvpLongDescription, CorpseX, CorpseY, MapType, InstanceType, ExpansionID, AreaTableID, LoadingScreenID, TimeOfDayOverride, ParentMapID, " + + "CosmeticParentMapID, TimeOffset, MinimapIconScale, CorpseMapID, MaxPlayers, WindSettingsID, ZmpFileDataID, WdtFileDataID, Flags1, Flags2 FROM map"); PrepareStatement(HotfixStatements.SEL_MAP_LOCALE, "SELECT ID, MapName_lang, MapDescription0_lang, MapDescription1_lang, PvpShortDescription_lang, " + "PvpLongDescription_lang FROM map_locale WHERE locale = ?"); @@ -684,8 +691,7 @@ namespace Framework.Database PrepareStatement(HotfixStatements.SEL_MAP_DIFFICULTY_LOCALE, "SELECT ID, Message_lang FROM map_difficulty_locale WHERE locale = ?"); // ModifierTree.db2 - PrepareStatement(HotfixStatements.SEL_MODIFIER_TREE, "SELECT ID, Parent, Operator, Amount, Type, Asset, SecondaryAsset, TertiaryAsset FROM modifier_tree" + - ""); + PrepareStatement(HotfixStatements.SEL_MODIFIER_TREE, "SELECT ID, Parent, Operator, Amount, Type, Asset, SecondaryAsset, TertiaryAsset FROM modifier_tree"); // Mount.db2 PrepareStatement(HotfixStatements.SEL_MOUNT, "SELECT Name, SourceText, Description, ID, MountTypeID, Flags, SourceTypeEnum, SourceSpellID, " + @@ -697,8 +703,7 @@ namespace Framework.Database "ReqMapID, PlayerConditionID FROM mount_capability"); // MountTypeXCapability.db2 - PrepareStatement(HotfixStatements.SEL_MOUNT_TYPE_X_CAPABILITY, "SELECT ID, MountTypeID, MountCapabilityID, OrderIndex FROM mount_type_x_capability" + - ""); + PrepareStatement(HotfixStatements.SEL_MOUNT_TYPE_X_CAPABILITY, "SELECT ID, MountTypeID, MountCapabilityID, OrderIndex FROM mount_type_x_capability"); // MountXDisplay.db2 PrepareStatement(HotfixStatements.SEL_MOUNT_X_DISPLAY, "SELECT ID, CreatureDisplayInfoID, PlayerConditionID, MountID FROM mount_x_display"); @@ -719,8 +724,7 @@ namespace Framework.Database PrepareStatement(HotfixStatements.SEL_NAMES_RESERVED_LOCALE, "SELECT ID, Name, LocaleMask FROM names_reserved_locale"); // NumTalentsAtLevel.db2 - PrepareStatement(HotfixStatements.SEL_NUM_TALENTS_AT_LEVEL, "SELECT ID, NumTalents, NumTalentsDeathKnight, NumTalentsDemonHunter FROM num_talents_at_level" + - ""); + PrepareStatement(HotfixStatements.SEL_NUM_TALENTS_AT_LEVEL, "SELECT ID, NumTalents, NumTalentsDeathKnight, NumTalentsDemonHunter FROM num_talents_at_level"); // OverrideSpellData.db2 PrepareStatement(HotfixStatements.SEL_OVERRIDE_SPELL_DATA, "SELECT ID, Spells1, Spells2, Spells3, Spells4, Spells5, Spells6, Spells7, Spells8, Spells9, " + @@ -733,23 +737,23 @@ namespace Framework.Database PrepareStatement(HotfixStatements.SEL_PHASE_X_PHASE_GROUP, "SELECT ID, PhaseID, PhaseGroupID FROM phase_x_phase_group"); // PlayerCondition.db2 - PrepareStatement(HotfixStatements.SEL_PLAYER_CONDITION, "SELECT RaceMask, FailureDescription, ID, MinLevel, MaxLevel, ClassMask, SkillLogic, LanguageID, " + - "MinLanguage, MaxLanguage, MaxFactionID, MaxReputation, ReputationLogic, CurrentPvpFaction, PvpMedal, PrevQuestLogic, CurrQuestLogic, " + - "CurrentCompletedQuestLogic, SpellLogic, ItemLogic, ItemFlags, AuraSpellLogic, WorldStateExpressionID, WeatherID, PartyStatus, " + - "LifetimeMaxPVPRank, AchievementLogic, Gender, NativeGender, AreaLogic, LfgLogic, CurrencyLogic, QuestKillID, QuestKillLogic, " + - "MinExpansionLevel, MaxExpansionLevel, MinAvgItemLevel, MaxAvgItemLevel, MinAvgEquippedItemLevel, MaxAvgEquippedItemLevel, PhaseUseFlags, " + - "PhaseID, PhaseGroupID, Flags, ChrSpecializationIndex, ChrSpecializationRole, ModifierTreeID, PowerType, PowerTypeComp, PowerTypeValue, " + - "WeaponSubclassMask, MaxGuildLevel, MinGuildLevel, MaxExpansionTier, MinExpansionTier, MinPVPRank, MaxPVPRank, SkillID1, SkillID2, SkillID3, " + - "SkillID4, MinSkill1, MinSkill2, MinSkill3, MinSkill4, MaxSkill1, MaxSkill2, MaxSkill3, MaxSkill4, MinFactionID1, MinFactionID2, " + - "MinFactionID3, MinReputation1, MinReputation2, MinReputation3, PrevQuestID1, PrevQuestID2, PrevQuestID3, PrevQuestID4, CurrQuestID1, " + - "CurrQuestID2, CurrQuestID3, CurrQuestID4, CurrentCompletedQuestID1, CurrentCompletedQuestID2, CurrentCompletedQuestID3, " + - "CurrentCompletedQuestID4, SpellID1, SpellID2, SpellID3, SpellID4, ItemID1, ItemID2, ItemID3, ItemID4, ItemCount1, ItemCount2, ItemCount3, " + - "ItemCount4, Explored1, Explored2, Time1, Time2, AuraSpellID1, AuraSpellID2, AuraSpellID3, AuraSpellID4, AuraStacks1, AuraStacks2, " + - "AuraStacks3, AuraStacks4, Achievement1, Achievement2, Achievement3, Achievement4, AreaID1, AreaID2, AreaID3, AreaID4, LfgStatus1, " + - "LfgStatus2, LfgStatus3, LfgStatus4, LfgCompare1, LfgCompare2, LfgCompare3, LfgCompare4, LfgValue1, LfgValue2, LfgValue3, LfgValue4, " + - "CurrencyID1, CurrencyID2, CurrencyID3, CurrencyID4, CurrencyCount1, CurrencyCount2, CurrencyCount3, CurrencyCount4, QuestKillMonster1, " + - "QuestKillMonster2, QuestKillMonster3, QuestKillMonster4, QuestKillMonster5, QuestKillMonster6, MovementFlags1, MovementFlags2" + - " FROM player_condition"); + PrepareStatement(HotfixStatements.SEL_PLAYER_CONDITION, "SELECT RaceMask, FailureDescription, ID, ClassMask, SkillLogic, LanguageID, MinLanguage, " + + "MaxLanguage, MaxFactionID, MaxReputation, ReputationLogic, CurrentPvpFaction, PvpMedal, PrevQuestLogic, CurrQuestLogic, " + + "CurrentCompletedQuestLogic, SpellLogic, ItemLogic, ItemFlags, AuraSpellLogic, WorldStateExpressionID, WeatherID, PartyStatus, " + + "LifetimeMaxPVPRank, AchievementLogic, Gender, NativeGender, AreaLogic, LfgLogic, CurrencyLogic, QuestKillID, QuestKillLogic, " + + "MinExpansionLevel, MaxExpansionLevel, MinAvgItemLevel, MaxAvgItemLevel, MinAvgEquippedItemLevel, MaxAvgEquippedItemLevel, PhaseUseFlags, " + + "PhaseID, PhaseGroupID, Flags, ChrSpecializationIndex, ChrSpecializationRole, ModifierTreeID, PowerType, PowerTypeComp, PowerTypeValue, " + + "WeaponSubclassMask, MaxGuildLevel, MinGuildLevel, MaxExpansionTier, MinExpansionTier, MinPVPRank, MaxPVPRank, ContentTuningID, CovenantID, " + + "SkillID1, SkillID2, SkillID3, SkillID4, MinSkill1, MinSkill2, MinSkill3, MinSkill4, MaxSkill1, MaxSkill2, MaxSkill3, MaxSkill4, " + + "MinFactionID1, MinFactionID2, MinFactionID3, MinReputation1, MinReputation2, MinReputation3, PrevQuestID1, PrevQuestID2, PrevQuestID3, " + + "PrevQuestID4, CurrQuestID1, CurrQuestID2, CurrQuestID3, CurrQuestID4, CurrentCompletedQuestID1, CurrentCompletedQuestID2, " + + "CurrentCompletedQuestID3, CurrentCompletedQuestID4, SpellID1, SpellID2, SpellID3, SpellID4, ItemID1, ItemID2, ItemID3, ItemID4, ItemCount1, " + + "ItemCount2, ItemCount3, ItemCount4, Explored1, Explored2, Time1, Time2, AuraSpellID1, AuraSpellID2, AuraSpellID3, AuraSpellID4, AuraStacks1, " + + "AuraStacks2, AuraStacks3, AuraStacks4, Achievement1, Achievement2, Achievement3, Achievement4, AreaID1, AreaID2, AreaID3, AreaID4, " + + "LfgStatus1, LfgStatus2, LfgStatus3, LfgStatus4, LfgCompare1, LfgCompare2, LfgCompare3, LfgCompare4, LfgValue1, LfgValue2, LfgValue3, " + + "LfgValue4, CurrencyID1, CurrencyID2, CurrencyID3, CurrencyID4, CurrencyCount1, CurrencyCount2, CurrencyCount3, CurrencyCount4, " + + "QuestKillMonster1, QuestKillMonster2, QuestKillMonster3, QuestKillMonster4, QuestKillMonster5, QuestKillMonster6, MovementFlags1, " + + "MovementFlags2 FROM player_condition"); PrepareStatement(HotfixStatements.SEL_PLAYER_CONDITION_LOCALE, "SELECT ID, FailureDescription_lang FROM player_condition_locale WHERE locale = ?"); // PowerDisplay.db2 @@ -813,16 +817,11 @@ namespace Framework.Database "TreasurePickerID FROM reward_pack"); // RewardPackXCurrencyType.db2 - PrepareStatement(HotfixStatements.SEL_REWARD_PACK_X_CURRENCY_TYPE, "SELECT ID, CurrencyTypeID, Quantity, RewardPackID FROM reward_pack_x_currency_type" + - ""); + PrepareStatement(HotfixStatements.SEL_REWARD_PACK_X_CURRENCY_TYPE, "SELECT ID, CurrencyTypeID, Quantity, RewardPackID FROM reward_pack_x_currency_type"); // RewardPackXItem.db2 PrepareStatement(HotfixStatements.SEL_REWARD_PACK_X_ITEM, "SELECT ID, ItemID, ItemQuantity, RewardPackID FROM reward_pack_x_item"); - // ScalingStatDistribution.db2 - PrepareStatement(HotfixStatements.SEL_SCALING_STAT_DISTRIBUTION, "SELECT ID, PlayerLevelToItemLevelCurveID, MinLevel, MaxLevel" + - " FROM scaling_stat_distribution"); - // Scenario.db2 PrepareStatement(HotfixStatements.SEL_SCENARIO, "SELECT ID, Name, AreaTableID, Type, Flags, UiTextureKitID FROM scenario"); PrepareStatement(HotfixStatements.SEL_SCENARIO_LOCALE, "SELECT ID, Name_lang FROM scenario_locale WHERE locale = ?"); @@ -882,7 +881,7 @@ namespace Framework.Database " FROM spell_aura_restrictions"); // SpellCastTimes.db2 - PrepareStatement(HotfixStatements.SEL_SPELL_CAST_TIMES, "SELECT ID, Base, PerLevel, Minimum FROM spell_cast_times"); + PrepareStatement(HotfixStatements.SEL_SPELL_CAST_TIMES, "SELECT ID, Base, Minimum FROM spell_cast_times"); // SpellCastingRequirements.db2 PrepareStatement(HotfixStatements.SEL_SPELL_CASTING_REQUIREMENTS, "SELECT ID, SpellID, FacingCasterFlags, MinFactionID, MinReputation, RequiredAreasID, " + @@ -893,8 +892,7 @@ namespace Framework.Database "StartRecoveryCategory, ChargeCategory, SpellID FROM spell_categories"); // SpellCategory.db2 - PrepareStatement(HotfixStatements.SEL_SPELL_CATEGORY, "SELECT ID, Name, Flags, UsesPerWeek, MaxCharges, ChargeRecoveryTime, TypeMask FROM spell_category" + - ""); + PrepareStatement(HotfixStatements.SEL_SPELL_CATEGORY, "SELECT ID, Name, Flags, UsesPerWeek, MaxCharges, ChargeRecoveryTime, TypeMask FROM spell_category"); PrepareStatement(HotfixStatements.SEL_SPELL_CATEGORY_LOCALE, "SELECT ID, Name_lang FROM spell_category_locale WHERE locale = ?"); // SpellClassOptions.db2 @@ -906,7 +904,7 @@ namespace Framework.Database " FROM spell_cooldowns"); // SpellDuration.db2 - PrepareStatement(HotfixStatements.SEL_SPELL_DURATION, "SELECT ID, Duration, DurationPerLevel, MaxDuration FROM spell_duration"); + PrepareStatement(HotfixStatements.SEL_SPELL_DURATION, "SELECT ID, Duration, MaxDuration FROM spell_duration"); // SpellEffect.db2 PrepareStatement(HotfixStatements.SEL_SPELL_EFFECT, "SELECT ID, EffectAura, DifficultyID, EffectIndex, Effect, EffectAmplitude, EffectAttributes, " + @@ -929,10 +927,10 @@ namespace Framework.Database "ChannelInterruptFlags1, ChannelInterruptFlags2, SpellID FROM spell_interrupts"); // SpellItemEnchantment.db2 - PrepareStatement(HotfixStatements.SEL_SPELL_ITEM_ENCHANTMENT, "SELECT ID, Name, HordeName, EffectArg1, EffectArg2, EffectArg3, EffectScalingPoints1, " + - "EffectScalingPoints2, EffectScalingPoints3, TransmogPlayerConditionID, TransmogCost, IconFileDataID, EffectPointsMin1, EffectPointsMin2, " + - "EffectPointsMin3, ItemVisual, Flags, RequiredSkillID, RequiredSkillRank, ItemLevel, Charges, Effect1, Effect2, Effect3, ScalingClass, " + - "ScalingClassRestricted, ConditionID, MinLevel, MaxLevel FROM spell_item_enchantment"); + PrepareStatement(HotfixStatements.SEL_SPELL_ITEM_ENCHANTMENT, "SELECT Name, HordeName, ID, EffectArg1, EffectArg2, EffectArg3, EffectScalingPoints1, " + + "EffectScalingPoints2, EffectScalingPoints3, IconFileDataID, MinItemLevel, MaxItemLevel, TransmogUseConditionID, TransmogCost, " + + "EffectPointsMin1, EffectPointsMin2, EffectPointsMin3, ItemVisual, Flags, RequiredSkillID, RequiredSkillRank, ItemLevel, Charges, Effect1, " + + "Effect2, Effect3, ScalingClass, ScalingClassRestricted, ConditionID, MinLevel, MaxLevel FROM spell_item_enchantment"); PrepareStatement(HotfixStatements.SEL_SPELL_ITEM_ENCHANTMENT_LOCALE, "SELECT ID, Name_lang, HordeName_lang FROM spell_item_enchantment_locale WHERE locale = ?"); // SpellItemEnchantmentCondition.db2 @@ -945,14 +943,13 @@ namespace Framework.Database PrepareStatement(HotfixStatements.SEL_SPELL_LEARN_SPELL, "SELECT ID, SpellID, LearnSpellID, OverridesSpellID FROM spell_learn_spell"); // SpellLevels.db2 - PrepareStatement(HotfixStatements.SEL_SPELL_LEVELS, "SELECT ID, DifficultyID, BaseLevel, MaxLevel, SpellLevel, MaxPassiveAuraLevel, SpellID" + - " FROM spell_levels"); + PrepareStatement(HotfixStatements.SEL_SPELL_LEVELS, "SELECT ID, DifficultyID, MaxLevel, MaxPassiveAuraLevel, BaseLevel, SpellLevel, SpellID FROM spell_levels"); // SpellMisc.db2 PrepareStatement(HotfixStatements.SEL_SPELL_MISC, "SELECT ID, Attributes1, Attributes2, Attributes3, Attributes4, Attributes5, Attributes6, Attributes7, " + - "Attributes8, Attributes9, Attributes10, Attributes11, Attributes12, Attributes13, Attributes14, DifficultyID, CastingTimeIndex, " + - "DurationIndex, RangeIndex, SchoolMask, Speed, LaunchDelay, MinDuration, SpellIconFileDataID, ActiveIconFileDataID, ContentTuningID, SpellID" + - " FROM spell_misc"); + "Attributes8, Attributes9, Attributes10, Attributes11, Attributes12, Attributes13, Attributes14, Attributes15, DifficultyID, " + + "CastingTimeIndex, DurationIndex, RangeIndex, SchoolMask, Speed, LaunchDelay, MinDuration, SpellIconFileDataID, ActiveIconFileDataID, " + + "ContentTuningID, ShowFutureSpellPlayerConditionID, SpellVisualScript, ActiveSpellVisualScript, SpellID FROM spell_misc"); // SpellName.db2 PrepareStatement(HotfixStatements.SEL_SPELL_NAME, "SELECT ID, Name FROM spell_name"); @@ -969,8 +966,7 @@ namespace Framework.Database PrepareStatement(HotfixStatements.SEL_SPELL_PROCS_PER_MINUTE, "SELECT ID, BaseProcRate, Flags FROM spell_procs_per_minute"); // SpellProcsPerMinuteMod.db2 - PrepareStatement(HotfixStatements.SEL_SPELL_PROCS_PER_MINUTE_MOD, "SELECT ID, Type, Param, Coeff, SpellProcsPerMinuteID FROM spell_procs_per_minute_mod" + - ""); + PrepareStatement(HotfixStatements.SEL_SPELL_PROCS_PER_MINUTE_MOD, "SELECT ID, Type, Param, Coeff, SpellProcsPerMinuteID FROM spell_procs_per_minute_mod"); // SpellRadius.db2 PrepareStatement(HotfixStatements.SEL_SPELL_RADIUS, "SELECT ID, Radius, RadiusPerLevel, RadiusMin, RadiusMax FROM spell_radius"); @@ -982,12 +978,10 @@ namespace Framework.Database // SpellReagents.db2 PrepareStatement(HotfixStatements.SEL_SPELL_REAGENTS, "SELECT ID, SpellID, Reagent1, Reagent2, Reagent3, Reagent4, Reagent5, Reagent6, Reagent7, Reagent8, " + - "ReagentCount1, ReagentCount2, ReagentCount3, ReagentCount4, ReagentCount5, ReagentCount6, ReagentCount7, ReagentCount8 FROM spell_reagents" + - ""); + "ReagentCount1, ReagentCount2, ReagentCount3, ReagentCount4, ReagentCount5, ReagentCount6, ReagentCount7, ReagentCount8 FROM spell_reagents"); // SpellScaling.db2 - PrepareStatement(HotfixStatements.SEL_SPELL_SCALING, "SELECT ID, SpellID, Class, MinScalingLevel, MaxScalingLevel, ScalesFromItemLevel FROM spell_scaling" + - ""); + PrepareStatement(HotfixStatements.SEL_SPELL_SCALING, "SELECT ID, SpellID, Class, MinScalingLevel, MaxScalingLevel, ScalesFromItemLevel FROM spell_scaling"); // SpellShapeshift.db2 PrepareStatement(HotfixStatements.SEL_SPELL_SHAPESHIFT, "SELECT ID, SpellID, StanceBarOrder, ShapeshiftExclude1, ShapeshiftExclude2, ShapeshiftMask1, " + @@ -1012,7 +1006,7 @@ namespace Framework.Database " FROM spell_visual_kit"); // SpellXSpellVisual.db2 - PrepareStatement(HotfixStatements.SEL_SPELL_X_SPELL_VISUAL, "SELECT ID, DifficultyID, SpellVisualID, Probability, Flags, Priority, SpellIconFileID, " + + PrepareStatement(HotfixStatements.SEL_SPELL_X_SPELL_VISUAL, "SELECT ID, DifficultyID, SpellVisualID, Probability, Priority, SpellIconFileID, " + "ActiveIconFileID, ViewerUnitConditionID, ViewerPlayerConditionID, CasterUnitConditionID, CasterPlayerConditionID, SpellID" + " FROM spell_x_spell_visual"); @@ -1052,6 +1046,9 @@ namespace Framework.Database // TransmogHoliday.db2 PrepareStatement(HotfixStatements.SEL_TRANSMOG_HOLIDAY, "SELECT ID, RequiredTransmogHoliday FROM transmog_holiday"); + // TransmogIllusion.db2 + PrepareStatement(HotfixStatements.SEL_TRANSMOG_ILLUSION, "SELECT ID, UnlockConditionID, TransmogCost, SpellItemEnchantmentID, Flags FROM transmog_illusion"); + // TransmogSet.db2 PrepareStatement(HotfixStatements.SEL_TRANSMOG_SET, "SELECT Name, ID, ClassMask, TrackingQuestID, Flags, TransmogSetGroupID, ItemNameDescriptionID, " + "ParentTransmogSetID, Unknown810, ExpansionID, PatchID, UiOrder, PlayerConditionID FROM transmog_set"); @@ -1065,16 +1062,14 @@ namespace Framework.Database PrepareStatement(HotfixStatements.SEL_TRANSMOG_SET_ITEM, "SELECT ID, TransmogSetID, ItemModifiedAppearanceID, Flags FROM transmog_set_item"); // TransportAnimation.db2 - PrepareStatement(HotfixStatements.SEL_TRANSPORT_ANIMATION, "SELECT ID, PosX, PosY, PosZ, SequenceID, TimeIndex, TransportID FROM transport_animation" + - ""); + PrepareStatement(HotfixStatements.SEL_TRANSPORT_ANIMATION, "SELECT ID, PosX, PosY, PosZ, SequenceID, TimeIndex, TransportID FROM transport_animation"); // TransportRotation.db2 - PrepareStatement(HotfixStatements.SEL_TRANSPORT_ROTATION, "SELECT ID, Rot1, Rot2, Rot3, Rot4, TimeIndex, GameObjectsID FROM transport_rotation" + - ""); + PrepareStatement(HotfixStatements.SEL_TRANSPORT_ROTATION, "SELECT ID, Rot1, Rot2, Rot3, Rot4, TimeIndex, GameObjectsID FROM transport_rotation"); // UiMap.db2 - PrepareStatement(HotfixStatements.SEL_UI_MAP, "SELECT Name, ID, ParentUiMapID, Flags, System, Type, LevelRangeMin, LevelRangeMax, BountySetID, " + - "BountyDisplayLocation, VisibilityPlayerConditionID, HelpTextPosition, BkgAtlasID, AlternateUiMapGroup FROM ui_map"); + PrepareStatement(HotfixStatements.SEL_UI_MAP, "SELECT Name, ID, ParentUiMapID, Flags, `System`, Type, BountySetID, BountyDisplayLocation, " + + "VisibilityPlayerConditionID, HelpTextPosition, BkgAtlasID, AlternateUiMapGroup, ContentTuningID FROM ui_map"); PrepareStatement(HotfixStatements.SEL_UI_MAP_LOCALE, "SELECT ID, Name_lang FROM ui_map_locale WHERE locale = ?"); // UiMapAssignment.db2 @@ -1083,7 +1078,7 @@ namespace Framework.Database // UiMapLink.db2 PrepareStatement(HotfixStatements.SEL_UI_MAP_LINK, "SELECT UiMinX, UiMinY, UiMaxX, UiMaxY, ID, ParentUiMapID, OrderIndex, ChildUiMapID, " + - "OverrideHighlightFileDataID, OverrideHighlightAtlasID FROM ui_map_link"); + "OverrideHighlightFileDataID, OverrideHighlightAtlasID, Flags FROM ui_map_link"); // UiMapXMapArt.db2 PrepareStatement(HotfixStatements.SEL_UI_MAP_X_MAP_ART, "SELECT ID, PhaseID, UiMapArtID, UiMapID FROM ui_map_x_map_art"); @@ -1096,10 +1091,10 @@ namespace Framework.Database " WHERE locale = ?"); // Vehicle.db2 - PrepareStatement(HotfixStatements.SEL_VEHICLE, "SELECT ID, Flags, FlagsB, TurnSpeed, PitchSpeed, PitchMin, PitchMax, MouseLookOffsetPitch, " + - "CameraFadeDistScalarMin, CameraFadeDistScalarMax, CameraPitchOffset, FacingLimitRight, FacingLimitLeft, CameraYawOffset, UiLocomotionType, " + - "VehicleUIIndicatorID, MissileTargetingID, SeatID1, SeatID2, SeatID3, SeatID4, SeatID5, SeatID6, SeatID7, SeatID8, PowerDisplayID1, " + - "PowerDisplayID2, PowerDisplayID3 FROM vehicle"); + PrepareStatement(HotfixStatements.SEL_VEHICLE, "SELECT ID, Flags, FlagsB, TurnSpeed, PitchSpeed, PitchMin, PitchMax, MouseLookOffsetPitch, " + + "CameraFadeDistScalarMin, CameraFadeDistScalarMax, CameraPitchOffset, FacingLimitRight, FacingLimitLeft, CameraYawOffset, " + + "VehicleUIIndicatorID, MissileTargetingID, VehiclePOITypeID, SeatID1, SeatID2, SeatID3, SeatID4, SeatID5, SeatID6, SeatID7, SeatID8, " + + "PowerDisplayID1, PowerDisplayID2, PowerDisplayID3 FROM vehicle"); // VehicleSeat.db2 PrepareStatement(HotfixStatements.SEL_VEHICLE_SEAT, "SELECT ID, AttachmentOffsetX, AttachmentOffsetY, AttachmentOffsetZ, CameraOffsetX, CameraOffsetY, " + @@ -1228,17 +1223,13 @@ namespace Framework.Database SEL_CFG_REGIONS, - SEL_CHARACTER_FACIAL_HAIR_STYLES, - - SEL_CHAR_BASE_SECTION, - - SEL_CHAR_SECTIONS, - - SEL_CHAR_START_OUTFIT, - SEL_CHAR_TITLES, SEL_CHAR_TITLES_LOCALE, + SEL_CHARACTER_LOADOUT, + + SEL_CHARACTER_LOADOUT_ITEM, + SEL_CHAT_CHANNELS, SEL_CHAT_CHANNELS_LOCALE, @@ -1247,6 +1238,24 @@ namespace Framework.Database SEL_CHR_CLASSES_X_POWER_TYPES, + SEL_CHR_CUSTOMIZATION_CHOICE, + SEL_CHR_CUSTOMIZATION_CHOICE_LOCALE, + + SEL_CHR_CUSTOMIZATION_DISPLAY_INFO, + + SEL_CHR_CUSTOMIZATION_ELEMENT, + + SEL_CHR_CUSTOMIZATION_OPTION, + SEL_CHR_CUSTOMIZATION_OPTION_LOCALE, + + SEL_CHR_CUSTOMIZATION_REQ, + + SEL_CHR_CUSTOMIZATION_REQ_CHOICE, + + SEL_CHR_MODEL, + + SEL_CHR_RACE_X_CHR_MODEL, + SEL_CHR_RACES, SEL_CHR_RACES_LOCALE, @@ -1544,8 +1553,6 @@ namespace Framework.Database SEL_REWARD_PACK_X_ITEM, - SEL_SCALING_STAT_DISTRIBUTION, - SEL_SCENARIO, SEL_SCENARIO_LOCALE, @@ -1668,6 +1675,8 @@ namespace Framework.Database SEL_TRANSMOG_HOLIDAY, + SEL_TRANSMOG_ILLUSION, + SEL_TRANSMOG_SET, SEL_TRANSMOG_SET_LOCALE, diff --git a/Source/Game/Achievements/AchievementManager.cs b/Source/Game/Achievements/AchievementManager.cs index 9780fb2f8..574ab5d81 100644 --- a/Source/Game/Achievements/AchievementManager.cs +++ b/Source/Game/Achievements/AchievementManager.cs @@ -84,6 +84,12 @@ namespace Game.Achievements return false; } + if (achievement.CovenantID != 0 && referencePlayer.m_playerData.CovenantID != achievement.CovenantID) + { + Log.outTrace(LogFilter.Achievement, $"CanUpdateCriteriaTree: (Id: {criteria.Id} Type {criteria.Entry.Type} Achievement {achievement.Id}) Wrong covenant"); + return false; + } + return base.CanUpdateCriteriaTree(criteria, tree, referencePlayer); } @@ -535,7 +541,7 @@ namespace Game.Achievements //! Since no common attributes were found, (not even in titleRewardFlags field) //! we explicitly check by ID. Maybe in the future we could move the achievement_reward //! condition fields to the condition system. - uint titleId = reward.TitleId[achievement.Id == 1793 ? _owner.m_playerData.NativeSex : (_owner.GetTeam() == Team.Alliance ? 0 : 1)]; + uint titleId = reward.TitleId[achievement.Id == 1793 ? (int)_owner.GetNativeSex() : (_owner.GetTeam() == Team.Alliance ? 0 : 1)]; if (titleId != 0) { CharTitlesRecord titleEntry = CliDB.CharTitlesStorage.LookupByKey(titleId); diff --git a/Source/Game/Achievements/CriteriaHandler.cs b/Source/Game/Achievements/CriteriaHandler.cs index 27112acc8..c98144054 100644 --- a/Source/Game/Achievements/CriteriaHandler.cs +++ b/Source/Game/Achievements/CriteriaHandler.cs @@ -138,6 +138,10 @@ namespace Game.Achievements case CriteriaTypes.OwnBattlePetCount: case CriteriaTypes.HonorLevelReached: case CriteriaTypes.PrestigeReached: + case CriteriaTypes.CompleteQuestAccumulate: + case CriteriaTypes.BoughtItemFromVendor: + case CriteriaTypes.SoldItemToVendor: + case CriteriaTypes.TravelledToArea: SetCriteriaProgress(criteria, 1, referencePlayer, ProgressType.Accumulate); break; // std case: increment at miscValue1 @@ -437,6 +441,9 @@ namespace Game.Achievements case CriteriaTypes.EarnHonorXp: case CriteriaTypes.RelicTalentUnlocked: case CriteriaTypes.ReachAccountHonorLevel: + case CriteriaTypes.MythicKeystoneCompleted: + case CriteriaTypes.ApplyConduit: + case CriteriaTypes.ConvertItemsToCurrency: break; // Not implemented yet :( } @@ -812,6 +819,10 @@ namespace Game.Achievements case CriteriaTypes.ReachAccountHonorLevel: case CriteriaTypes.HeartOfAzerothArtifactPowerEarned: case CriteriaTypes.HeartOfAzerothLevelReached: + case CriteriaTypes.CompleteQuestAccumulate: + case CriteriaTypes.BoughtItemFromVendor: + case CriteriaTypes.SoldItemToVendor: + case CriteriaTypes.TravelledToArea: return progress.Counter >= requiredAmount; case CriteriaTypes.CompleteAchievement: case CriteriaTypes.CompleteQuest: @@ -942,6 +953,9 @@ namespace Game.Achievements case CriteriaTypes.WinDuel: case CriteriaTypes.WinRatedArena: case CriteriaTypes.WonAuctions: + case CriteriaTypes.CompleteQuestAccumulate: + case CriteriaTypes.BoughtItemFromVendor: + case CriteriaTypes.SoldItemToVendor: if (miscValue1 == 0) return false; break; @@ -1188,6 +1202,10 @@ namespace Game.Achievements if (miscValue1 != criteria.Entry.Asset) return false; break; + case CriteriaTypes.TravelledToArea: + if (miscValue1 != criteria.Entry.Asset) + return false; + break; default: break; } @@ -1227,8 +1245,8 @@ namespace Game.Achievements bool ModifierSatisfied(ModifierTreeRecord modifier, ulong miscValue1, ulong miscValue2, Unit unit, Player referencePlayer) { uint reqValue = modifier.Asset; - int secondaryAsset = modifier.SecondaryAsset; - int tertiaryAsset = modifier.TertiaryAsset; + int secondaryAsset = modifier.SecondaryAsset; + int tertiaryAsset = modifier.TertiaryAsset; switch ((CriteriaAdditionalCondition)modifier.Type) { @@ -1621,7 +1639,7 @@ namespace Game.Achievements return false; break; case CriteriaAdditionalCondition.SourceNativeSex: // 98 - if (referencePlayer.m_playerData.NativeSex != reqValue) + if (referencePlayer.GetNativeSex() != (Gender)reqValue) return false; break; case CriteriaAdditionalCondition.Skill: // 99 @@ -1656,7 +1674,7 @@ namespace Game.Achievements uint questBit = Global.DB2Mgr.GetQuestUniqueBitFlag(reqValue); if (questBit != 0) if ((referencePlayer.m_activePlayerData.QuestCompleted[((int)questBit - 1) >> 6] & (1ul << (((int)questBit - 1) & 63))) == 0) - return false; + return false; break; case CriteriaAdditionalCondition.CompletedQuest: // 111 if (referencePlayer.GetQuestStatus(reqValue) != QuestStatus.Complete) @@ -2402,7 +2420,7 @@ namespace Game.Achievements break; } case CriteriaAdditionalCondition.SourceLevel120: // 264 - if (referencePlayer.GetLevel() != 120) + if (referencePlayer.GetLevel() != 60) return false; break; case CriteriaAdditionalCondition.SelectedAzeriteEssenceRankLower: // 266 @@ -2441,8 +2459,54 @@ namespace Game.Achievements } } } + return false; + } + case CriteriaAdditionalCondition.SourceLevelInRangeCt: // 268 + { + uint level = referencePlayer.GetLevel(); + var levels = Global.DB2Mgr.GetContentTuningData(reqValue, 0); + if (levels.HasValue) + { + if (secondaryAsset != 0) + return level >= levels.Value.MinLevelWithDelta && level <= levels.Value.MaxLevelWithDelta; + return level >= levels.Value.MinLevel && level <= levels.Value.MaxLevel; + } + return false; + } + case CriteriaAdditionalCondition.TargetLevelInRangeCt: // 269 + { + if (!unit) + return false; + + uint level = unit.GetLevel(); + var levels = Global.DB2Mgr.GetContentTuningData(reqValue, 0); + if (levels.HasValue) + { + if (secondaryAsset != 0) + return level >= levels.Value.MinLevelWithDelta && level <= levels.Value.MaxLevelWithDelta; + return level >= levels.Value.MinLevel && level <= levels.Value.MaxLevel; + } + return false; + } + case CriteriaAdditionalCondition.SourceLevelGreaterCt: // 272 + { + uint level = referencePlayer.GetLevel(); + var levels = Global.DB2Mgr.GetContentTuningData(reqValue, 0); + if (levels.HasValue) + return secondaryAsset != 0 ? level >= levels.Value.MinLevelWithDelta : level >= levels.Value.MinLevel; + return false; + } + case CriteriaAdditionalCondition.TargetLevelGreaterCt: // 273 + { + if (!unit) + return false; + + uint level = unit.GetLevel(); + var levels = Global.DB2Mgr.GetContentTuningData(reqValue, 0); + if (levels.HasValue) + return secondaryAsset != 0 ? level >= levels.Value.MinLevelWithDelta : level >= levels.Value.MinLevel; + return false; } - return false; case CriteriaAdditionalCondition.MapOrCosmeticMap: // 280 { MapRecord map = referencePlayer.GetMap().GetEntry(); @@ -2450,6 +2514,60 @@ namespace Game.Achievements return false; break; } + case CriteriaAdditionalCondition.Covenant: // 288 + if (referencePlayer.m_playerData.CovenantID != reqValue) + return false; + break; + case CriteriaAdditionalCondition.Soulbind: // 291 + if (referencePlayer.m_playerData.SoulbindID != reqValue) + return false; + break; + case CriteriaAdditionalCondition.SourceAreaOrZoneInGroup: // 293 + { + var areas = Global.DB2Mgr.GetAreasForGroup(reqValue); + AreaTableRecord area = CliDB.AreaTableStorage.LookupByKey(referencePlayer.GetAreaId()); + if (area != null) + foreach (uint areaInGroup in areas) + if (areaInGroup == area.Id || areaInGroup == area.ParentAreaID) + return true; + return false; + } + case CriteriaAdditionalCondition.SourceInSpecificChromieTime: // 300 + if (referencePlayer.m_activePlayerData.UiChromieTimeExpansionID != reqValue) + return false; + break; + case CriteriaAdditionalCondition.SourceInAnyChromieTime: // 301 + if (referencePlayer.m_activePlayerData.UiChromieTimeExpansionID == 0) + return false; + break; + case CriteriaAdditionalCondition.SourceRuneforgeLegendaryKnown: // 303 + { + int block = (int)reqValue / 32; + if (block >= referencePlayer.m_activePlayerData.RuneforgePowers.Size()) + return false; + + uint bit = reqValue % 32; + return (referencePlayer.m_activePlayerData.RuneforgePowers[block] & (1u << (int)bit)) != 0; + } + case CriteriaAdditionalCondition.ShapeshiftFormCustomizationDisplay: // 308 + { + ShapeshiftFormModelData formModelData = Global.DB2Mgr.GetShapeshiftFormModelData(referencePlayer.GetRace(), referencePlayer.GetNativeSex(), (ShapeShiftForm)secondaryAsset); + if (formModelData == null) + return false; + + uint formChoice = referencePlayer.GetCustomizationChoice(formModelData.OptionID); + var choiceIndex = formModelData.Choices.FindIndex(choice => { return choice.Id == formChoice; }); + if (choiceIndex == -1) + return false; + + if (reqValue != formModelData.Displays[choiceIndex].DisplayID) + return false; + break; + } + case CriteriaAdditionalCondition.SourceFlying: // 311 + if (!referencePlayer.IsFlying()) + return false; + break; default: break; } @@ -2851,7 +2969,7 @@ namespace Game.Achievements { return _criteriasByFailEvent[(int)condition].LookupByKey(asset); } - + public CriteriaDataSet GetCriteriaDataSet(Criteria criteria) { return _criteriaDataMap.LookupByKey(criteria.Id); @@ -2917,7 +3035,7 @@ namespace Game.Achievements } public class CriteriaTree - { + { public uint Id; public CriteriaTreeRecord Entry; public AchievementRecord Achievement; diff --git a/Source/Game/BattleGrounds/BattleGround.cs b/Source/Game/BattleGrounds/BattleGround.cs index 6ed11ce4b..0b0b90f1d 100644 --- a/Source/Game/BattleGrounds/BattleGround.cs +++ b/Source/Game/BattleGrounds/BattleGround.cs @@ -1552,7 +1552,7 @@ namespace Game.BattleGrounds // creature.SetVisibleAura(0, SPELL_SPIRIT_HEAL_CHANNEL); // casting visual effect creature.SetChannelSpellId(BattlegroundConst.SpellSpiritHealChannel); - creature.SetChannelSpellXSpellVisualId(BattlegroundConst.SpellSpiritHealChannelVisual); + creature.SetChannelVisual(new SpellCastVisual(BattlegroundConst.SpellSpiritHealChannelVisual, 0)); //creature.CastSpell(creature, SPELL_SPIRIT_HEAL_CHANNEL, true); return true; } diff --git a/Source/Game/Cache/CharacterCache.cs b/Source/Game/Cache/CharacterCache.cs index 08c0e5ff3..255cc9f8f 100644 --- a/Source/Game/Cache/CharacterCache.cs +++ b/Source/Game/Cache/CharacterCache.cs @@ -85,6 +85,14 @@ namespace Game.Cache _characterCacheByNameStore[name] = characterCacheEntry; } + public void UpdateCharacterGender(ObjectGuid guid, byte gender) + { + if (!_characterCacheStore.ContainsKey(guid)) + return; + + _characterCacheStore[guid].Sex = (Gender)gender; + } + public void UpdateCharacterLevel(ObjectGuid guid, byte level) { if (!_characterCacheStore.ContainsKey(guid)) diff --git a/Source/Game/Chat/Commands/LookupCommands.cs b/Source/Game/Chat/Commands/LookupCommands.cs index 65fa33b29..9005d674f 100644 --- a/Source/Game/Chat/Commands/LookupCommands.cs +++ b/Source/Game/Chat/Commands/LookupCommands.cs @@ -23,6 +23,7 @@ using Game.Entities; using Game.Spells; using System; using System.Text; +using System.Collections.Generic; namespace Game.Chat { @@ -542,11 +543,23 @@ namespace Game.Chat } if (handler.GetSession() != null) - handler.SendSysMessage(CypherStrings.QuestListChat, qInfo.Id, qInfo.Id, + { + int maxLevel = 0; + var questLevels = Global.DB2Mgr.GetContentTuningData(qInfo.ContentTuningId, handler.GetSession().GetPlayer().m_playerData.CtrOptions.GetValue().ContentTuningConditionMask); + if (questLevels.HasValue) + maxLevel = questLevels.Value.MaxLevel; + + int scalingFactionGroup = 0; + ContentTuningRecord contentTuning = CliDB.ContentTuningStorage.LookupByKey(qInfo.ContentTuningId); + if (contentTuning != null) + scalingFactionGroup = contentTuning.GetScalingFactionGroup(); + + handler.SendSysMessage(CypherStrings.QuestListChat, qInfo.Id, qInfo.Id, handler.GetSession().GetPlayer().GetQuestLevel(qInfo), handler.GetSession().GetPlayer().GetQuestMinLevel(qInfo), - qInfo.MaxScalingLevel, qInfo.ScalingFactionGroup, + maxLevel, scalingFactionGroup, title, statusStr); + } else handler.SendSysMessage(CypherStrings.QuestListConsole, qInfo.Id, title, statusStr); @@ -594,11 +607,23 @@ namespace Game.Chat } if (handler.GetSession() != null) + { + int maxLevel = 0; + var questLevels = Global.DB2Mgr.GetContentTuningData(qInfo.ContentTuningId, handler.GetSession().GetPlayer().m_playerData.CtrOptions.GetValue().ContentTuningConditionMask); + if (questLevels.HasValue) + maxLevel = questLevels.Value.MaxLevel; + + int scalingFactionGroup = 0; + ContentTuningRecord contentTuning = CliDB.ContentTuningStorage.LookupByKey(qInfo.ContentTuningId); + if (contentTuning != null) + scalingFactionGroup = contentTuning.GetScalingFactionGroup(); + handler.SendSysMessage(CypherStrings.QuestListChat, qInfo.Id, qInfo.Id, handler.GetSession().GetPlayer().GetQuestLevel(qInfo), handler.GetSession().GetPlayer().GetQuestMinLevel(qInfo), - qInfo.MaxScalingLevel, qInfo.ScalingFactionGroup, + maxLevel, scalingFactionGroup, _title, statusStr); + } else handler.SendSysMessage(CypherStrings.QuestListConsole, qInfo.Id, _title, statusStr); diff --git a/Source/Game/Chat/Commands/MiscCommands.cs b/Source/Game/Chat/Commands/MiscCommands.cs index a47ea389b..332e56f5d 100644 --- a/Source/Game/Chat/Commands/MiscCommands.cs +++ b/Source/Game/Chat/Commands/MiscCommands.cs @@ -591,7 +591,7 @@ namespace Game.Chat if (spellInfo == null) return false; - SpellNonMeleeDamage damageInfo = new SpellNonMeleeDamage(attacker, target, spellInfo, spellInfo.GetSpellXSpellVisualId(attacker), spellInfo.SchoolMask); + SpellNonMeleeDamage damageInfo = new SpellNonMeleeDamage(attacker, target, spellInfo, new Networking.Packets.SpellCastVisual(spellInfo.GetSpellXSpellVisualId(attacker), 0), spellInfo.SchoolMask); damageInfo.damage = damage_; attacker.DealDamageMods(damageInfo.target, ref damageInfo.damage, ref damageInfo.absorb); target.DealSpellDamage(damageInfo, true); @@ -1596,7 +1596,7 @@ namespace Game.Chat mapId = target.GetMapId(); areaId = target.GetAreaId(); alive = target.IsAlive() ? handler.GetCypherString(CypherStrings.Yes) : handler.GetCypherString(CypherStrings.No); - gender = (Gender)(byte)target.m_playerData.NativeSex; + gender = target.GetNativeSex(); } // get additional information from DB else @@ -2367,7 +2367,7 @@ namespace Game.Chat if (caster) { ObjectGuid castId = ObjectGuid.Create(HighGuid.Cast, SpellCastSource.Normal, player.GetMapId(), SPELL_UNSTUCK_ID, player.GetMap().GenerateLowGuid(HighGuid.Cast)); - Spell.SendCastResult(caster, spellInfo, SPELL_UNSTUCK_VISUAL, castId, SpellCastResult.CantDoThatRightNow); + Spell.SendCastResult(caster, spellInfo, new Networking.Packets.SpellCastVisual(SPELL_UNSTUCK_VISUAL, 0), castId, SpellCastResult.CantDoThatRightNow); } return false; diff --git a/Source/Game/Conditions/ConditionManager.cs b/Source/Game/Conditions/ConditionManager.cs index 6fa742fbe..bb656134d 100644 --- a/Source/Game/Conditions/ConditionManager.cs +++ b/Source/Game/Conditions/ConditionManager.cs @@ -1727,11 +1727,30 @@ namespace Game public static bool IsPlayerMeetingCondition(Player player, PlayerConditionRecord condition) { - if (condition.MinLevel != 0 && player.GetLevel() < condition.MinLevel) - return false; + ContentTuningLevels? levels = Global.DB2Mgr.GetContentTuningData(condition.ContentTuningID, player.m_playerData.CtrOptions.GetValue().ContentTuningConditionMask); + if (levels.HasValue) + { + byte minLevel = (byte)(condition.Flags.HasAnyFlag(0x800) ? levels.Value.MinLevelWithDelta : levels.Value.MinLevel); + byte maxLevel = 0; + if (!condition.Flags.HasAnyFlag(0x20)) + maxLevel = (byte)(condition.Flags.HasAnyFlag(0x800) ? levels.Value.MaxLevelWithDelta : levels.Value.MaxLevel); + if (condition.Flags.HasAnyFlag(0x80)) + { + if (minLevel != 0 && player.GetLevel() >= minLevel && (maxLevel == 0 || player.GetLevel() <= maxLevel)) + return false; - if (condition.MaxLevel != 0 && player.GetLevel() > condition.MaxLevel) - return false; + if (maxLevel != 0 && player.GetLevel() <= maxLevel && (minLevel == 0 || player.GetLevel() >= minLevel)) + return false; + } + else + { + if (minLevel != 0 && player.GetLevel() < minLevel) + return false; + + if (maxLevel != 0 && player.GetLevel() > maxLevel) + return false; + } + } if (condition.RaceMask != 0 && !Convert.ToBoolean(player.GetRaceMask() & condition.RaceMask)) return false; @@ -1742,7 +1761,7 @@ namespace Game if (condition.Gender >= 0 && (int)player.GetGender() != condition.Gender) return false; - if (condition.NativeGender >= 0 && player.m_playerData.NativeSex != condition.NativeGender) + if (condition.NativeGender >= 0 && player.GetNativeSex() != (Gender)condition.NativeGender) return false; if (condition.PowerType != -1 && condition.PowerTypeComp != 0) @@ -2140,6 +2159,9 @@ namespace Game if (condition.ModifierTreeID != 0 && !player.ModifierTreeSatisfied(condition.ModifierTreeID)) return false; + if (condition.CovenantID != 0 && player.m_playerData.CovenantID != condition.CovenantID) + return false; + return true; } diff --git a/Source/Game/DataStorage/CliDB.cs b/Source/Game/DataStorage/CliDB.cs index 5b9cbfb21..34fd03dee 100644 --- a/Source/Game/DataStorage/CliDB.cs +++ b/Source/Game/DataStorage/CliDB.cs @@ -91,14 +91,20 @@ namespace Game.DataStorage BattlemasterListStorage = ReadDB2("BattlemasterList.db2", HotfixStatements.SEL_BATTLEMASTER_LIST, HotfixStatements.SEL_BATTLEMASTER_LIST_LOCALE); BroadcastTextStorage = ReadDB2("BroadcastText.db2", HotfixStatements.SEL_BROADCAST_TEXT, HotfixStatements.SEL_BROADCAST_TEXT_LOCALE); CfgRegionsStorage = ReadDB2("Cfg_Regions.db2", HotfixStatements.SEL_CFG_REGIONS); - CharacterFacialHairStylesStorage = ReadDB2("CharacterFacialHairStyles.db2", HotfixStatements.SEL_CHARACTER_FACIAL_HAIR_STYLES); - CharBaseSectionStorage = ReadDB2("CharBaseSection.db2", HotfixStatements.SEL_CHAR_BASE_SECTION); - CharSectionsStorage = ReadDB2("CharSections.db2", HotfixStatements.SEL_CHAR_SECTIONS); - CharStartOutfitStorage = ReadDB2("CharStartOutfit.db2", HotfixStatements.SEL_CHAR_START_OUTFIT); CharTitlesStorage = ReadDB2("CharTitles.db2", HotfixStatements.SEL_CHAR_TITLES, HotfixStatements.SEL_CHAR_TITLES_LOCALE); + CharacterLoadoutStorage = ReadDB2("CharacterLoadout.db2", HotfixStatements.SEL_CHARACTER_LOADOUT); + CharacterLoadoutItemStorage = ReadDB2("CharacterLoadoutItem.db2", HotfixStatements.SEL_CHARACTER_LOADOUT_ITEM); ChatChannelsStorage = ReadDB2("ChatChannels.db2", HotfixStatements.SEL_CHAT_CHANNELS, HotfixStatements.SEL_CHAT_CHANNELS_LOCALE); ChrClassesStorage = ReadDB2("ChrClasses.db2", HotfixStatements.SEL_CHR_CLASSES, HotfixStatements.SEL_CHR_CLASSES_LOCALE); ChrClassesXPowerTypesStorage = ReadDB2("ChrClassesXPowerTypes.db2", HotfixStatements.SEL_CHR_CLASSES_X_POWER_TYPES); + ChrCustomizationChoiceStorage= ReadDB2("ChrCustomizationChoice.db2", HotfixStatements.SEL_CHR_CUSTOMIZATION_CHOICE, HotfixStatements.SEL_CHR_CUSTOMIZATION_CHOICE_LOCALE); + ChrCustomizationDisplayInfoStorage= ReadDB2("ChrCustomizationDisplayInfo.db2", HotfixStatements.SEL_CHR_CUSTOMIZATION_DISPLAY_INFO); + ChrCustomizationElementStorage =ReadDB2("ChrCustomizationElement.db2", HotfixStatements.SEL_CHR_CUSTOMIZATION_ELEMENT); + ChrCustomizationOptionStorage =ReadDB2("ChrCustomizationOption.db2", HotfixStatements.SEL_CHR_CUSTOMIZATION_OPTION, HotfixStatements.SEL_CHR_CUSTOMIZATION_OPTION_LOCALE); + ChrCustomizationReqStorage =ReadDB2("ChrCustomizationReq.db2", HotfixStatements.SEL_CHR_CUSTOMIZATION_REQ); + ChrCustomizationReqChoiceStorage =ReadDB2("ChrCustomizationReqChoice.db2", HotfixStatements.SEL_CHR_CUSTOMIZATION_REQ_CHOICE); + ChrModelStorage =ReadDB2("ChrModel.db2", HotfixStatements.SEL_CHR_MODEL); + ChrRaceXChrModelStorage =ReadDB2("ChrRaceXChrModel.db2", HotfixStatements.SEL_CHR_RACE_X_CHR_MODEL); ChrRacesStorage = ReadDB2("ChrRaces.db2", HotfixStatements.SEL_CHR_RACES, HotfixStatements.SEL_CHR_RACES_LOCALE); ChrSpecializationStorage = ReadDB2("ChrSpecialization.db2", HotfixStatements.SEL_CHR_SPECIALIZATION, HotfixStatements.SEL_CHR_SPECIALIZATION_LOCALE); CinematicCameraStorage = ReadDB2("CinematicCamera.db2", HotfixStatements.SEL_CINEMATIC_CAMERA); @@ -232,7 +238,6 @@ namespace Game.DataStorage RewardPackStorage = ReadDB2("RewardPack.db2", HotfixStatements.SEL_REWARD_PACK); RewardPackXCurrencyTypeStorage = ReadDB2("RewardPackXCurrencyType.db2", HotfixStatements.SEL_REWARD_PACK_X_CURRENCY_TYPE); RewardPackXItemStorage = ReadDB2("RewardPackXItem.db2", HotfixStatements.SEL_REWARD_PACK_X_ITEM); - ScalingStatDistributionStorage = ReadDB2("ScalingStatDistribution.db2", HotfixStatements.SEL_SCALING_STAT_DISTRIBUTION); ScenarioStorage = ReadDB2("Scenario.db2", HotfixStatements.SEL_SCENARIO, HotfixStatements.SEL_SCENARIO_LOCALE); ScenarioStepStorage = ReadDB2("ScenarioStep.db2", HotfixStatements.SEL_SCENARIO_STEP, HotfixStatements.SEL_SCENARIO_STEP_LOCALE); //SceneScriptStorage = ReadDB2("SceneScript.db2", HotfixStatements.SEL_SCENE_SCRIPT); @@ -287,6 +292,7 @@ namespace Game.DataStorage TotemCategoryStorage = ReadDB2("TotemCategory.db2", HotfixStatements.SEL_TOTEM_CATEGORY, HotfixStatements.SEL_TOTEM_CATEGORY_LOCALE); ToyStorage = ReadDB2("Toy.db2", HotfixStatements.SEL_TOY, HotfixStatements.SEL_TOY_LOCALE); TransmogHolidayStorage = ReadDB2("TransmogHoliday.db2", HotfixStatements.SEL_TRANSMOG_HOLIDAY); + TransmogIllusionStorage = ReadDB2("TransmogIllusion.db2", HotfixStatements.SEL_TRANSMOG_ILLUSION); TransmogSetStorage = ReadDB2("TransmogSet.db2", HotfixStatements.SEL_TRANSMOG_SET, HotfixStatements.SEL_TRANSMOG_SET_LOCALE); TransmogSetGroupStorage = ReadDB2("TransmogSetGroup.db2", HotfixStatements.SEL_TRANSMOG_SET_GROUP, HotfixStatements.SEL_TRANSMOG_SET_GROUP_LOCALE); TransmogSetItemStorage = ReadDB2("TransmogSetItem.db2", HotfixStatements.SEL_TRANSMOG_SET_ITEM); @@ -440,14 +446,20 @@ namespace Game.DataStorage public static DB6Storage BattlemasterListStorage; public static DB6Storage BroadcastTextStorage; public static DB6Storage CfgRegionsStorage; - public static DB6Storage CharacterFacialHairStylesStorage; - public static DB6Storage CharBaseSectionStorage; - public static DB6Storage CharSectionsStorage; - public static DB6Storage CharStartOutfitStorage; public static DB6Storage CharTitlesStorage; + public static DB6Storage CharacterLoadoutStorage; + public static DB6Storage CharacterLoadoutItemStorage; public static DB6Storage ChatChannelsStorage; public static DB6Storage ChrClassesStorage; public static DB6Storage ChrClassesXPowerTypesStorage; + public static DB6Storage ChrCustomizationChoiceStorage; + public static DB6Storage ChrCustomizationDisplayInfoStorage; + public static DB6Storage ChrCustomizationElementStorage; + public static DB6Storage ChrCustomizationReqStorage; + public static DB6Storage ChrCustomizationReqChoiceStorage; + public static DB6Storage ChrModelStorage; + public static DB6Storage ChrRaceXChrModelStorage; + public static DB6Storage ChrCustomizationOptionStorage; public static DB6Storage ChrRacesStorage; public static DB6Storage ChrSpecializationStorage; public static DB6Storage CinematicCameraStorage; @@ -581,7 +593,6 @@ namespace Game.DataStorage public static DB6Storage RewardPackStorage; public static DB6Storage RewardPackXCurrencyTypeStorage; public static DB6Storage RewardPackXItemStorage; - public static DB6Storage ScalingStatDistributionStorage; public static DB6Storage ScenarioStorage; public static DB6Storage ScenarioStepStorage; //public static DB6Storage SceneScriptStorage; @@ -636,6 +647,7 @@ namespace Game.DataStorage public static DB6Storage TotemCategoryStorage; public static DB6Storage ToyStorage; public static DB6Storage TransmogHolidayStorage; + public static DB6Storage TransmogIllusionStorage; public static DB6Storage TransmogSetStorage; public static DB6Storage TransmogSetGroupStorage; public static DB6Storage TransmogSetItemStorage; diff --git a/Source/Game/DataStorage/DB2Manager.cs b/Source/Game/DataStorage/DB2Manager.cs index 2055b755c..40a1dcdf2 100644 --- a/Source/Game/DataStorage/DB2Manager.cs +++ b/Source/Game/DataStorage/DB2Manager.cs @@ -23,6 +23,7 @@ using System; using System.Collections.Generic; using System.Linq; using System.Collections; +using Framework.Dynamic; namespace Game.DataStorage { @@ -123,41 +124,6 @@ namespace Game.DataStorage } } - foreach (CharacterFacialHairStylesRecord characterFacialStyle in CliDB.CharacterFacialHairStylesStorage.Values) - _characterFacialHairStyles.Add(Tuple.Create(characterFacialStyle.RaceID, characterFacialStyle.SexID, (uint)characterFacialStyle.VariationID)); - - CliDB.CharacterFacialHairStylesStorage.Clear(); - - CharBaseSectionVariation[] sectionToBase = new CharBaseSectionVariation[(int)CharSectionType.Max]; - foreach (CharBaseSectionRecord charBaseSection in CliDB.CharBaseSectionStorage.Values) - { - Cypher.Assert(charBaseSection.ResolutionVariationEnum < (byte)CharSectionType.Max, $"SECTION_TYPE_MAX ({(byte)CharSectionType.Max}) must be equal to or greater than {charBaseSection.ResolutionVariationEnum + 1}"); - Cypher.Assert(charBaseSection.VariationEnum < CharBaseSectionVariation.Max, $"CharBaseSectionVariation.Max {(byte)CharBaseSectionVariation.Max} must be equal to or greater than {charBaseSection.VariationEnum + 1}"); - - sectionToBase[charBaseSection.ResolutionVariationEnum] = charBaseSection.VariationEnum; - } - - CliDB.CharBaseSectionStorage.Clear(); - - MultiMap, Tuple> addedSections = new MultiMap, Tuple>(); - foreach (CharSectionsRecord charSection in CliDB.CharSectionsStorage.Values) - { - Cypher.Assert(charSection.BaseSection < (byte)CharSectionType.Max, $"SECTION_TYPE_MAX ({(byte)CharSectionType.Max}) must be equal to or greater than {charSection.BaseSection + 1}"); - - Tuple sectionKey = Tuple.Create(charSection.RaceID, charSection.SexID, sectionToBase[charSection.BaseSection]); - Tuple sectionCombination = Tuple.Create(charSection.VariationIndex, charSection.ColorIndex); - if (addedSections.Contains(sectionKey, sectionCombination)) - continue; - - addedSections.Add(sectionKey, sectionCombination); - _charSections.Add(sectionKey, charSection); - } - - CliDB.CharSectionsStorage.Clear(); - - foreach (var outfit in CliDB.CharStartOutfitStorage.Values) - _charStartOutfits[(uint)((byte)outfit.RaceID | (outfit.ClassID << 8) | (outfit.SexID << 16))] = outfit; - var powers = new List(); foreach (var chrClasses in CliDB.ChrClassesXPowerTypesStorage.Values) powers.Add(chrClasses); @@ -175,6 +141,71 @@ namespace Game.DataStorage _powersByClass[power.ClassID][power.PowerType] = index; } + foreach (var customizationChoice in CliDB.ChrCustomizationChoiceStorage.Values) + _chrCustomizationChoicesByOption.Add(customizationChoice.ChrCustomizationOptionID, customizationChoice); + + MultiMap> shapeshiftFormByModel = new MultiMap>(); + Dictionary displayInfoByCustomizationChoice = new Dictionary(); + + // build shapeshift form model lookup + foreach (ChrCustomizationElementRecord customizationElement in CliDB.ChrCustomizationElementStorage.Values) + { + ChrCustomizationDisplayInfoRecord customizationDisplayInfo = CliDB.ChrCustomizationDisplayInfoStorage.LookupByKey(customizationElement.ChrCustomizationDisplayInfoID); + if (customizationDisplayInfo != null) + { + ChrCustomizationChoiceRecord customizationChoice = CliDB.ChrCustomizationChoiceStorage.LookupByKey(customizationElement.ChrCustomizationChoiceID); + if (customizationChoice != null) + { + displayInfoByCustomizationChoice[customizationElement.ChrCustomizationChoiceID] = customizationDisplayInfo; + ChrCustomizationOptionRecord customizationOption = CliDB.ChrCustomizationOptionStorage.LookupByKey(customizationChoice.ChrCustomizationOptionID); + if (customizationOption != null) + shapeshiftFormByModel.Add(customizationOption.ChrModelID, Tuple.Create(customizationOption.Id, (byte)customizationDisplayInfo.ShapeshiftFormID)); + } + } + } + + MultiMap customizationOptionsByModel = new MultiMap(); + foreach (ChrCustomizationOptionRecord customizationOption in CliDB.ChrCustomizationOptionStorage.Values) + customizationOptionsByModel.Add(customizationOption.ChrModelID, customizationOption); + + foreach (ChrCustomizationReqChoiceRecord reqChoice in CliDB.ChrCustomizationReqChoiceStorage.Values) + { + ChrCustomizationChoiceRecord customizationChoice = CliDB.ChrCustomizationChoiceStorage.LookupByKey(reqChoice.ChrCustomizationChoiceID); + if (customizationChoice != null) + { + if (!_chrCustomizationRequiredChoices.ContainsKey(reqChoice.ChrCustomizationReqID)) + _chrCustomizationRequiredChoices[reqChoice.ChrCustomizationReqID] = new MultiMap(); + + _chrCustomizationRequiredChoices[reqChoice.ChrCustomizationReqID].Add(customizationChoice.ChrCustomizationOptionID, reqChoice.ChrCustomizationChoiceID); + } + } + + foreach (ChrRaceXChrModelRecord raceModel in CliDB.ChrRaceXChrModelStorage.Values) + { + ChrModelRecord model = CliDB.ChrModelStorage.LookupByKey(raceModel.ChrModelID); + if (model != null) + { + _chrModelsByRaceAndGender[Tuple.Create((byte)raceModel.ChrRacesID, (byte)model.Sex)] = model; + + var customizationOptionsForModel = customizationOptionsByModel.LookupByKey(model.Id); + if (customizationOptionsForModel != null) + _chrCustomizationOptionsByRaceAndGender.AddRange(Tuple.Create((byte)raceModel.ChrRacesID, (byte)model.Sex), customizationOptionsForModel); + + // link shapeshift displays to race/gender/form + foreach (var shapeshiftOptionsForModel in shapeshiftFormByModel.LookupByKey(model.Id)) + { + ShapeshiftFormModelData data = _chrCustomizationChoicesForShapeshifts[Tuple.Create((byte)raceModel.ChrRacesID, (byte)model.Sex, shapeshiftOptionsForModel.Item2)]; + data.OptionID = shapeshiftOptionsForModel.Item2; + data.Choices = _chrCustomizationChoicesByOption.LookupByKey(shapeshiftOptionsForModel.Item2); + if (!data.Choices.Empty()) + { + for (int i = 0; i < data.Choices.Count; ++i) + data.Displays[i] = displayInfoByCustomizationChoice.LookupByKey(data.Choices[i].Id); + } + } + } + } + foreach (ChrSpecializationRecord chrSpec in CliDB.ChrSpecializationStorage.Values) { //ASSERT(chrSpec.ClassID < MAX_CLASSES); @@ -190,9 +221,6 @@ namespace Game.DataStorage _chrSpecializationsByIndex[storageIndex] = new ChrSpecializationRecord[PlayerConst.MaxSpecializations]; _chrSpecializationsByIndex[storageIndex][chrSpec.OrderIndex] = chrSpec; - - if (chrSpec.Flags.HasAnyFlag(ChrSpecializationFlag.Recommended)) - _defaultChrSpecializationsByClass[(uint)chrSpec.ClassID] = chrSpec; } foreach (ContentTuningXExpectedRecord contentTuningXExpectedStat in CliDB.ContentTuningXExpectedStorage.Values) @@ -557,7 +585,7 @@ namespace Game.DataStorage UiMapRecord parentUiMap = CliDB.UiMapStorage.LookupByKey(uiMap.ParentUiMapID); if (parentUiMap != null) { - if (Convert.ToBoolean(parentUiMap.Flags & 0x80)) + if (parentUiMap.GetFlags().HasAnyFlag(UiMapFlag.NoWorldPositions)) continue; UiMapAssignmentRecord uiMapAssignment = null; UiMapAssignmentRecord parentUiMapAssignment = null; @@ -744,9 +772,7 @@ namespace Game.DataStorage public uint GetEmptyAnimStateID() { - return 1484; - // TEMP: well... AnimationData.db2 in 8.3.0 has more rows than max hardcoded anim id in client - // return sAnimationDataStore.GetNumRows(); + return (uint)CliDB.AnimationDataStorage.Count; } public List GetAreasForGroup(uint areaGroupId) @@ -855,31 +881,6 @@ namespace Game.DataStorage return broadcastText.Text[SharedConst.DefaultLocale]; } - public bool HasCharacterFacialHairStyle(Race race, Gender gender, uint variationId) - { - return _characterFacialHairStyles.Contains(Tuple.Create((byte)race, (byte)gender, variationId)); - } - - public bool HasCharSections(Race race, Gender gender, CharBaseSectionVariation variation) - { - return _charSections.ContainsKey(Tuple.Create((byte)race, (byte)gender, variation)); - } - - public CharSectionsRecord GetCharSectionEntry(Race race, Gender gender, CharBaseSectionVariation variation, byte variationIndex, byte colorIndex) - { - var list = _charSections.LookupByKey(Tuple.Create((byte)race, (byte)gender, variation)); - foreach (var charSection in list) - if (charSection.VariationIndex == variationIndex && charSection.ColorIndex == colorIndex) - return charSection; - - return null; - } - - public CharStartOutfitRecord GetCharStartOutfitEntry(uint race, uint class_, uint gender) - { - return _charStartOutfits.LookupByKey(race | (class_ << 8) | (gender << 16)); - } - public string GetClassName(Class class_, Locale locale = Locale.enUS) { ChrClassesRecord classEntry = CliDB.ChrClassesStorage.LookupByKey(class_); @@ -897,6 +898,26 @@ namespace Game.DataStorage return _powersByClass[(int)classId][(int)powerType]; } + public List GetCustomiztionChoices(uint chrCustomizationOptionId) + { + return _chrCustomizationChoicesByOption.LookupByKey(chrCustomizationOptionId); + } + + public List GetCustomiztionOptions(Race race, Gender gender) + { + return _chrCustomizationOptionsByRaceAndGender.LookupByKey(Tuple.Create(race, gender)); + } + + public MultiMap GetRequiredCustomizationChoices(uint chrCustomizationReqId) + { + return _chrCustomizationRequiredChoices.LookupByKey(chrCustomizationReqId); + } + + public ChrModelRecord GetChrModel(Race race, Gender gender) + { + return _chrModelsByRaceAndGender.LookupByKey(Tuple.Create(race, gender)); + } + public string GetChrRaceName(Race race, Locale locale = Locale.enUS) { ChrRacesRecord raceEntry = CliDB.ChrRacesStorage.LookupByKey(race); @@ -916,7 +937,46 @@ namespace Game.DataStorage public ChrSpecializationRecord GetDefaultChrSpecializationForClass(Class class_) { - return _defaultChrSpecializationsByClass.LookupByKey(class_); + return GetChrSpecializationByIndex(class_, PlayerConst.InitialSpecializationIndex); + } + + public ContentTuningLevels? GetContentTuningData(uint contentTuningId, uint replacementConditionMask, bool forItem = false) + { + ContentTuningRecord contentTuning = CliDB.ContentTuningStorage.LookupByKey(contentTuningId); + if (contentTuning == null) + return null; + + if (forItem && contentTuning.GetFlags().HasFlag(ContentTuningFlag.DisabledForItem)) + return null; + + int getLevelAdjustment(ContentTuningCalcType type) => type switch + { + ContentTuningCalcType.PlusOne => 1, + ContentTuningCalcType.PlusMaxLevelForExpansion => (int)Global.ObjectMgr.GetMaxLevelForExpansion((Expansion)WorldConfig.GetUIntValue(WorldCfg.Expansion)), + _ => 0 + }; + + ContentTuningLevels levels = new ContentTuningLevels(); + levels.MinLevel = (short)(contentTuning.MinLevel + getLevelAdjustment((ContentTuningCalcType)contentTuning.MinLevelType)); + levels.MaxLevel = (short)(contentTuning.MaxLevel + getLevelAdjustment((ContentTuningCalcType)contentTuning.MaxLevelType)); + levels.MinLevelWithDelta = (short)Math.Clamp(levels.MinLevel + contentTuning.TargetLevelDelta, 1, SharedConst.MaxLevel); + levels.MaxLevelWithDelta = (short)Math.Clamp(levels.MaxLevel + contentTuning.TargetLevelMaxDelta, 1, SharedConst.MaxLevel); + + // clamp after calculating levels with delta (delta can bring "overflown" level back into correct range) + levels.MinLevel = (short)Math.Clamp((int)levels.MinLevel, 1, SharedConst.MaxLevel); + levels.MaxLevel = (short)Math.Clamp((int)levels.MaxLevel, 1, SharedConst.MaxLevel); + + if (contentTuning.TargetLevelMin != 0) + levels.TargetLevelMin = (short)contentTuning.TargetLevelMin; + else + levels.TargetLevelMin = levels.MinLevelWithDelta; + + if (contentTuning.TargetLevelMax != 0) + levels.TargetLevelMax = (short)contentTuning.TargetLevelMax; + else + levels.TargetLevelMax = levels.MaxLevelWithDelta; + + return levels; } public string GetCreatureFamilyPetName(CreatureFamily petfamily, Locale locale) @@ -1708,6 +1768,11 @@ namespace Game.DataStorage return _rewardPackItems.LookupByKey(rewardPackID); } + public ShapeshiftFormModelData GetShapeshiftFormModelData(Race race, Gender gender, ShapeShiftForm form) + { + return _chrCustomizationChoicesForShapeshifts.LookupByKey(Tuple.Create((byte)race, (byte)gender, (byte)form)); + } + public List GetSkillLinesForParentSkill(uint parentSkillId) { return _skillLinesByParentSkillLine.LookupByKey(parentSkillId); @@ -2091,12 +2156,13 @@ namespace Game.DataStorage MultiMap _azeritePowers = new MultiMap(); Dictionary<(uint azeriteUnlockSetId, ItemContext itemContext), byte[]> _azeriteTierUnlockLevels = new Dictionary<(uint azeriteUnlockSetId, ItemContext itemContext), byte[]>(); Dictionary<(uint itemId, ItemContext itemContext), AzeriteUnlockMappingRecord> _azeriteUnlockMappings = new Dictionary<(uint itemId, ItemContext itemContext), AzeriteUnlockMappingRecord>(); - List> _characterFacialHairStyles = new List>(); - MultiMap, CharSectionsRecord> _charSections = new MultiMap, CharSectionsRecord>(); - Dictionary _charStartOutfits = new Dictionary(); uint[][] _powersByClass = new uint[(int)Class.Max][]; + MultiMap _chrCustomizationChoicesByOption = new MultiMap(); + Dictionary, ChrModelRecord> _chrModelsByRaceAndGender = new Dictionary, ChrModelRecord>(); + Dictionary, ShapeshiftFormModelData> _chrCustomizationChoicesForShapeshifts = new Dictionary, ShapeshiftFormModelData>(); + MultiMap, ChrCustomizationOptionRecord> _chrCustomizationOptionsByRaceAndGender = new MultiMap, ChrCustomizationOptionRecord>(); + Dictionary> _chrCustomizationRequiredChoices = new Dictionary>(); ChrSpecializationRecord[][] _chrSpecializationsByIndex = new ChrSpecializationRecord[(int)Class.Max + 1][]; - Dictionary _defaultChrSpecializationsByClass = new Dictionary(); MultiMap _curvePoints = new MultiMap(); Dictionary, EmotesTextSoundRecord> _emoteTextSounds = new Dictionary, EmotesTextSoundRecord>(); Dictionary, ExpectedStatRecord> _expectedStatsByLevel = new Dictionary, ExpectedStatRecord>(); @@ -2363,6 +2429,23 @@ namespace Game.DataStorage } } + public struct ContentTuningLevels + { + public short MinLevel; + public short MaxLevel; + public short MinLevelWithDelta; + public short MaxLevelWithDelta; + public short TargetLevelMin; + public short TargetLevelMax; + } + + public class ShapeshiftFormModelData + { + public uint OptionID; + public List Choices = new List(); + public List Displays = new List(); + } + enum CurveInterpolationMode { Linear = 0, diff --git a/Source/Game/DataStorage/Structs/A_Records.cs b/Source/Game/DataStorage/Structs/A_Records.cs index a3e6d17c6..97711571f 100644 --- a/Source/Game/DataStorage/Structs/A_Records.cs +++ b/Source/Game/DataStorage/Structs/A_Records.cs @@ -39,6 +39,7 @@ namespace Game.DataStorage public int RewardItemID; public uint CriteriaTree; public ushort SharesCriteria; + public int CovenantID; } public sealed class AnimationDataRecord @@ -79,7 +80,6 @@ namespace Game.DataStorage public ushort UwAmbience; public ushort ZoneMusic; public ushort UwZoneMusic; - public sbyte ExplorationLevel; public ushort IntroSound; public uint UwIntroSound; public byte FactionGroupMask; @@ -89,6 +89,7 @@ namespace Game.DataStorage public byte WildBattlePetLevelMin; public byte WildBattlePetLevelMax; public byte WindSettingsID; + public uint ContentTuningID; public AreaFlags[] Flags = new AreaFlags[2]; public ushort[] LiquidTypeID = new ushort[4]; diff --git a/Source/Game/DataStorage/Structs/B_Records.cs b/Source/Game/DataStorage/Structs/B_Records.cs index d8e42d043..c9dffff8e 100644 --- a/Source/Game/DataStorage/Structs/B_Records.cs +++ b/Source/Game/DataStorage/Structs/B_Records.cs @@ -54,7 +54,7 @@ namespace Game.DataStorage public sealed class BattlePetBreedStateRecord { public uint Id; - public byte BattlePetStateID; + public int BattlePetStateID; public ushort Value; public uint BattlePetBreedID; } @@ -72,6 +72,7 @@ namespace Game.DataStorage public sbyte SourceTypeEnum; public int CardUIModelSceneID; public int LoadoutUIModelSceneID; + public int CovenantID; } public sealed class BattlePetSpeciesStateRecord @@ -100,7 +101,7 @@ namespace Game.DataStorage public ushort HolidayWorldState; public BattlemasterListFlags Flags; public int IconFileDataID; - public short RequiredPlayerConditionID; + public int RequiredPlayerConditionID; public short[] MapId = new short[16]; } @@ -109,7 +110,7 @@ namespace Game.DataStorage public LocalizedString Text; public LocalizedString Text1; public uint Id; - public byte LanguageID; + public int LanguageID; public int ConditionID; public ushort EmotesID; public byte Flags; diff --git a/Source/Game/DataStorage/Structs/C_Records.cs b/Source/Game/DataStorage/Structs/C_Records.cs index 61f0b58ae..7367f2fa7 100644 --- a/Source/Game/DataStorage/Structs/C_Records.cs +++ b/Source/Game/DataStorage/Structs/C_Records.cs @@ -30,47 +30,6 @@ namespace Game.DataStorage public uint ChallengeOrigin; } - public sealed class CharacterFacialHairStylesRecord - { - public uint Id; - public int[] Geoset = new int[5]; - public byte RaceID; - public byte SexID; - public byte VariationID; - } - - public sealed class CharBaseSectionRecord - { - public uint Id; - public byte LayoutResType; - public CharBaseSectionVariation VariationEnum; - public byte ResolutionVariationEnum; - } - - public sealed class CharSectionsRecord - { - public uint Id; - public byte RaceID; - public byte SexID; - public sbyte BaseSection; - public byte VariationIndex; - public byte ColorIndex; - public short Flags; - public int[] MaterialResourcesID = new int[3]; - } - - public sealed class CharStartOutfitRecord - { - public uint Id; - public byte ClassID; - public byte SexID; - public byte OutfitID; - public uint PetDisplayID; // Pet Model ID for starting pet - public byte PetFamilyID; // Pet Family Entry for starting pet - public int[] ItemID = new int[24]; - public uint RaceID; - } - public sealed class CharTitlesRecord { public uint Id; @@ -80,13 +39,31 @@ namespace Game.DataStorage public sbyte Flags; } - public sealed class ChatChannelsRecord + public sealed class CharacterLoadoutRecord + { + public long RaceMask; + public uint Id; + public sbyte ChrClassID; + public sbyte Purpose; + + public bool IsForNewCharacter() { return Purpose == 9; } + } + + public sealed class CharacterLoadoutItemRecord { public uint Id; + public ushort CharacterLoadoutID; + public uint ItemID; + } + + public sealed class ChatChannelsRecord + { public LocalizedString Name; - public string Shortcut; + public string Shortcut; + public uint Id; public ChannelDBCFlags Flags; public sbyte FactionGroup; + public int Ruleset; } public sealed class ChrClassesRecord @@ -96,14 +73,29 @@ namespace Game.DataStorage public string NameMale; public string NameFemale; public string PetNameToken; + public string Description; + public string RoleInfoString; + public string DisabledString; + public string HyphenatedNameMale; + public string HyphenatedNameFemale; public uint Id; public uint CreateScreenFileDataID; public uint SelectScreenFileDataID; public uint IconFileDataID; public uint LowResScreenFileDataID; - public int StartingLevel; + public uint Flags; public uint SpellTextureBlobFileDataID; - public ushort Flags; + public uint RolesMask; + public uint ArmorTypeMask; + public int CharStartKitUnknown901; + public int MaleCharacterCreationVisualFallback; + public int MaleCharacterCreationIdleVisualFallback; + public int FemaleCharacterCreationVisualFallback; + public int FemaleCharacterCreationIdleVisualFallback; + public int CharacterCreationIdleGroundVisualFallback; + public int CharacterCreationGroundVisualFallback; + public int AlteredFormCharacterCreationIdleVisualFallback; + public int CharacterCreationAnimLoopWaitTimeMsFallback; public ushort CinematicSequenceID; public ushort DefaultSpec; public byte PrimaryStatPriority; @@ -112,6 +104,9 @@ namespace Game.DataStorage public byte AttackPowerPerAgility; public byte AttackPowerPerStrength; public byte SpellClassSet; + public byte ChatColorR; + public byte ChatColorG; + public byte ChatColorB; } public sealed class ChrClassesXPowerTypesRecord @@ -121,6 +116,103 @@ namespace Game.DataStorage public uint ClassID; } + public sealed class ChrCustomizationChoiceRecord + { + public LocalizedString Name; + public uint Id; + public uint ChrCustomizationOptionID; + public uint ChrCustomizationReqID; + public ushort SortOrder; + public int SwatchColor1; + public int SwatchColor2; + public ushort UiOrderIndex; + public int Flags; + } + + public sealed class ChrCustomizationDisplayInfoRecord + { + public uint Id; + public int ShapeshiftFormID; + public uint DisplayID; + public float BarberShopMinCameraDistance; + public float BarberShopHeightOffset; + } + + public sealed class ChrCustomizationElementRecord + { + public uint Id; + public uint ChrCustomizationChoiceID; + public int RelatedChrCustomizationChoiceID; + public int ChrCustomizationGeosetID; + public int ChrCustomizationSkinnedModelID; + public int ChrCustomizationMaterialID; + public int ChrCustomizationBoneSetID; + public int ChrCustomizationCondModelID; + public int ChrCustomizationDisplayInfoID; + } + + public sealed class ChrCustomizationOptionRecord + { + public LocalizedString Name; + public uint Id; + public ushort SecondaryID; + public int Flags; + public uint ChrModelID; + public int SortIndex; + public int ChrCustomizationCategoryID; + public int OptionType; + public float BarberShopCostModifier; + public int ChrCustomizationID; + public int ChrCustomizationReqID; + public int UiOrderIndex; + } + + public sealed class ChrCustomizationReqRecord + { + public uint Id; + public int Flags; + public int ClassMask; + public int AchievementID; + public int OverrideArchive; // -1: allow any, otherwise must match OverrideArchive cvar + public uint ItemModifiedAppearanceID; + + public ChrCustomizationReqFlag GetFlags() { return (ChrCustomizationReqFlag)Flags; } + } + + public sealed class ChrCustomizationReqChoiceRecord + { + public uint Id; + public uint ChrCustomizationChoiceID; + public uint ChrCustomizationReqID; + } + + public sealed class ChrModelRecord + { + public float[] FaceCustomizationOffset = new float[3]; + public float[] CustomizeOffset = new float[3]; + public uint Id; + public int Sex; + public uint DisplayID; + public int CharComponentTextureLayoutID; + public int Flags; + public int SkeletonFileDataID; + public int ModelFallbackChrModelID; + public int TextureFallbackChrModelID; + public int HelmVisFallbackChrModelID; + public float CustomizeScale; + public float CustomizeFacing; + public float CameraDistanceOffset; + public float BarberShopCameraOffsetScale; + public float BarberShopCameraRotationOffset; + } + + public sealed class ChrRaceXChrModelRecord + { + public uint Id; + public int ChrRacesID; + public int ChrModelID; + } + public sealed class ChrRacesRecord { public string ClientPrefix; @@ -129,37 +221,39 @@ namespace Game.DataStorage public string NameFemale; public string NameLowercase; public string NameFemaleLowercase; + public string NameS; + public string NameFemaleS; + public string NameLowercaseS; + public string NameFemaleLowercaseS; + public string RaceFantasyDescription; + public string NameL; + public string NameFemaleL; + public string NameLowercaseL; + public string NameFemaleLowercaseL; public uint Id; public int Flags; - public uint MaleDisplayId; - public uint FemaleDisplayId; - public uint HighResMaleDisplayId; - public uint HighResFemaleDisplayId; + public int BaseLanguage; + public int ResSicknessSpellID; + public int SplashSoundID; public int CreateScreenFileDataID; public int SelectScreenFileDataID; - public float[] MaleCustomizeOffset = new float[3]; - public float[] FemaleCustomizeOffset = new float[3]; public int LowResScreenFileDataID; public uint[] AlteredFormStartVisualKitID = new uint[3]; public uint[] AlteredFormFinishVisualKitID = new uint[3]; public int HeritageArmorAchievementID; public int StartingLevel; public int UiDisplayOrder; - public int FemaleSkeletonFileDataID; - public int MaleSkeletonFileDataID; - public int HelmVisFallbackRaceID; + public int PlayableRaceBit; + public int HelmetAnimScalingRaceID; public int TransmogrifyDisabledSlotMask; + public float[] AlteredFormCustomizeOffsetFallback = new float[3]; + public float AlteredFormCustomizeRotationFallback; public ushort FactionID; public ushort CinematicSequenceID; - public short ResSicknessSpellID; - public short SplashSoundID; - public sbyte BaseLanguage; public sbyte CreatureType; public sbyte Alliance; public sbyte RaceRelated; public sbyte UnalteredVisualRaceID; - public sbyte CharComponentTextureLayoutID; - public sbyte CharComponentTexLayoutHiResID; public sbyte DefaultClassID; public sbyte NeutralRaceID; public sbyte MaleModelFallbackRaceID; @@ -170,6 +264,7 @@ namespace Game.DataStorage public sbyte MaleTextureFallbackSex; public sbyte FemaleTextureFallbackRaceID; public sbyte FemaleTextureFallbackSex; + public sbyte UnalteredVisualCustomizationRaceID; } public sealed class ChrSpecializationRecord @@ -213,10 +308,31 @@ namespace Game.DataStorage public sealed class ContentTuningRecord { public uint Id; - public int MinLevel; - public int MaxLevel; public int Flags; public int ExpansionID; + public int MinLevel; + public int MaxLevel; + public int MinLevelType; + public int MaxLevelType; + public int TargetLevelDelta; + public int TargetLevelMaxDelta; + public int TargetLevelMin; + public int TargetLevelMax; + public int MinItemLevel; + + public ContentTuningFlag GetFlags() { return (ContentTuningFlag)Flags; } + + public int GetScalingFactionGroup() + { + ContentTuningFlag flags = GetFlags(); + if (flags.HasFlag(ContentTuningFlag.Horde)) + return 5; + + if (flags.HasFlag(ContentTuningFlag.Alliance)) + return 3; + + return 0; + } } public sealed class ContentTuningXExpectedRecord @@ -284,15 +400,9 @@ namespace Game.DataStorage public sbyte DisplayRaceID; public sbyte DisplaySexID; public sbyte DisplayClassID; - public sbyte SkinID; - public sbyte FaceID; - public sbyte HairStyleID; - public sbyte HairColorID; - public sbyte FacialHairID; public sbyte Flags; public int BakeMaterialResourcesID; public int HDBakeMaterialResourcesID; - public byte[] CustomDisplayOption = new byte[3]; } public sealed class CreatureFamilyRecord @@ -385,18 +495,19 @@ namespace Game.DataStorage public uint Id; public string Name; public string Description; - public byte CategoryID; + public int CategoryID; public int InventoryIconFileID; public uint SpellWeight; public byte SpellCategory; public uint MaxQty; public uint MaxEarnablePerWeek; - public uint Flags; public sbyte Quality; public int FactionID; public int ItemGroupSoundsID; - public int ConvertToPlayerExperience; - public int PlayerConditionID; + public int XpQuestDifficulty; + public int AwardConditionID; + public int MaxQtyWorldStateID; + public int[] Flags = new int[2]; } public sealed class CurveRecord @@ -410,6 +521,7 @@ namespace Game.DataStorage { public uint Id; public Vector2 Pos; + public Vector2 PosPreSquish; public ushort CurveID; public byte OrderIndex; } diff --git a/Source/Game/DataStorage/Structs/D_Records.cs b/Source/Game/DataStorage/Structs/D_Records.cs index 936bfe33d..8a4b3ec67 100644 --- a/Source/Game/DataStorage/Structs/D_Records.cs +++ b/Source/Game/DataStorage/Structs/D_Records.cs @@ -24,20 +24,20 @@ namespace Game.DataStorage public uint Id; public sbyte State0ImpactEffectDoodadSet; public byte State0AmbientDoodadSet; - public ushort State1Wmo; + public uint State1Wmo; public sbyte State1DestructionDoodadSet; public sbyte State1ImpactEffectDoodadSet; public byte State1AmbientDoodadSet; - public ushort State2Wmo; + public uint State2Wmo; public sbyte State2DestructionDoodadSet; public sbyte State2ImpactEffectDoodadSet; public byte State2AmbientDoodadSet; - public ushort State3Wmo; + public uint State3Wmo; public byte State3InitDoodadSet; public byte State3AmbientDoodadSet; public byte EjectDirection; public byte DoNotHighlight; - public ushort State0Wmo; + public uint State0Wmo; public byte HealEffect; public ushort HealEffectSpeed; public byte State0NameSet; @@ -69,7 +69,7 @@ namespace Game.DataStorage public LocalizedString Name; public uint Id; public short MapID; - public sbyte DifficultyID; + public int DifficultyID; public int OrderIndex; public int CompleteWorldStateID; public sbyte Bit; diff --git a/Source/Game/DataStorage/Structs/G_Records.cs b/Source/Game/DataStorage/Structs/G_Records.cs index edb917716..158ca2d14 100644 --- a/Source/Game/DataStorage/Structs/G_Records.cs +++ b/Source/Game/DataStorage/Structs/G_Records.cs @@ -47,13 +47,13 @@ namespace Game.DataStorage public Vector3 Pos; public float[] Rot = new float[4]; public uint Id; - public ushort OwnerID; - public ushort DisplayID; + public uint OwnerID; + public uint DisplayID; public float Scale; public GameObjectTypes TypeID; - public byte PhaseUseFlags; - public ushort PhaseID; - public ushort PhaseGroupID; + public int PhaseUseFlags; + public int PhaseID; + public int PhaseGroupID; public int[] PropValue = new int[8]; } @@ -80,7 +80,7 @@ namespace Game.DataStorage public byte BuildingType; public uint HordeGameObjectID; public uint AllianceGameObjectID; - public byte GarrSiteID; + public int GarrSiteID; public byte UpgradeLevel; public int BuildSeconds; public ushort CurrencyTypeID; @@ -153,6 +153,8 @@ namespace Game.DataStorage public byte ChrClassID; public byte Flags; public byte Gender; + public int AutoCombatantID; + public int CovenantID; } public sealed class GarrFollowerXAbilityRecord @@ -218,7 +220,6 @@ namespace Game.DataStorage public uint Id; public ushort EnchantId; public SocketColor Type; - public ushort MinItemLevel; } public sealed class GlyphBindableSpellRecord diff --git a/Source/Game/DataStorage/Structs/I_Records.cs b/Source/Game/DataStorage/Structs/I_Records.cs index a1e43e88e..187e5e0b4 100644 --- a/Source/Game/DataStorage/Structs/I_Records.cs +++ b/Source/Game/DataStorage/Structs/I_Records.cs @@ -57,6 +57,7 @@ namespace Game.DataStorage public sbyte SoundOverrideSubclassID; public int IconFileDataID; public byte ItemGroupSoundsID; + public int ModifiedCraftingReagentItemID; } public sealed class ItemAppearanceRecord @@ -66,6 +67,7 @@ namespace Game.DataStorage public uint ItemDisplayInfoID; public int DefaultIconFileDataID; public int UiOrder; + public int PlayerConditionID; } public sealed class ItemArmorQualityRecord @@ -100,7 +102,7 @@ namespace Game.DataStorage public sealed class ItemBonusRecord { public uint Id; - public int[] Value = new int[3]; + public int[] Value = new int[4]; public ushort ParentItemBonusListID; public ItemBonusType BonusType; public byte OrderIndex; @@ -109,11 +111,12 @@ namespace Game.DataStorage public sealed class ItemBonusListGroupEntryRecord { public uint Id; + public int ItemBonusListGroupID; public int ItemBonusListID; public int ItemLevelSelectorID; public int OrderIndex; public int ItemExtendedCostID; - public int ItemBonusListGroupID; + public int PlayerConditionID; } public sealed class ItemBonusListLevelDeltaRecord @@ -345,6 +348,9 @@ namespace Game.DataStorage public float PriceRandomValue; public int[] Flags = new int[4]; public int FactionRelated; + public int ModifiedCraftingReagentItemID; + public uint ContentTuningID; + public uint PlayerLevelToItemLevelCurveID; public ushort ItemNameDescriptionID; public ushort RequiredTransmogHoliday; public ushort RequiredHoliday; @@ -359,7 +365,6 @@ namespace Game.DataStorage public ushort StartQuestID; public ushort PageID; public ushort ItemDelay; - public ushort ScalingStatDistributionID; public ushort MinFactionID; public ushort RequiredSkillRank; public ushort RequiredSkill; diff --git a/Source/Game/DataStorage/Structs/L_Records.cs b/Source/Game/DataStorage/Structs/L_Records.cs index e2d3595e2..4fd4e18ac 100644 --- a/Source/Game/DataStorage/Structs/L_Records.cs +++ b/Source/Game/DataStorage/Structs/L_Records.cs @@ -25,8 +25,6 @@ namespace Game.DataStorage public uint Id; public LocalizedString Name; public string Description; - public byte MinLevel; - public ushort MaxLevel; public LfgType TypeID; public byte Subtype; public sbyte Faction; @@ -40,9 +38,6 @@ namespace Game.DataStorage public byte GroupID; public byte OrderIndex; public uint RequiredPlayerConditionId; - public byte TargetLevel; - public byte TargetLevelMin; - public ushort TargetLevelMax; public ushort RandomID; public ushort ScenarioID; public ushort FinalEncounterID; @@ -55,6 +50,7 @@ namespace Game.DataStorage public ushort BonusReputationAmount; public ushort MentorItemLevel; public byte MentorCharLevel; + public uint ContentTuningID; public LfgFlags[] Flags = new LfgFlags[2]; // Helpers @@ -100,6 +96,7 @@ namespace Game.DataStorage public sealed class LockRecord { public uint Id; + public int Flags; public int[] Index = new int[SharedConst.MaxLockCase]; public ushort[] Skill = new ushort[SharedConst.MaxLockCase]; public byte[] LockType = new byte[SharedConst.MaxLockCase]; diff --git a/Source/Game/DataStorage/Structs/M_Records.cs b/Source/Game/DataStorage/Structs/M_Records.cs index 6cb47cb17..9a441ab59 100644 --- a/Source/Game/DataStorage/Structs/M_Records.cs +++ b/Source/Game/DataStorage/Structs/M_Records.cs @@ -30,6 +30,7 @@ namespace Game.DataStorage public uint Id; public string Directory; public LocalizedString MapName; + public string InternalName; public string MapDescription0; // Horde public string MapDescription1; // Alliance public string PvpShortDescription; diff --git a/Source/Game/DataStorage/Structs/P_Records.cs b/Source/Game/DataStorage/Structs/P_Records.cs index e0102a707..e4e1c5b28 100644 --- a/Source/Game/DataStorage/Structs/P_Records.cs +++ b/Source/Game/DataStorage/Structs/P_Records.cs @@ -37,11 +37,9 @@ namespace Game.DataStorage public long RaceMask; public string FailureDescription; public uint Id; - public ushort MinLevel; - public ushort MaxLevel; public int ClassMask; public uint SkillLogic; - public byte LanguageID; + public int LanguageID; public byte MinLanguage; public int MaxLanguage; public ushort MaxFactionID; @@ -57,7 +55,7 @@ namespace Game.DataStorage public byte ItemFlags; public uint AuraSpellLogic; public ushort WorldStateExpressionID; - public byte WeatherID; + public int WeatherID; public byte PartyStatus; public byte LifetimeMaxPVPRank; public uint AchievementLogic; @@ -66,7 +64,7 @@ namespace Game.DataStorage public uint AreaLogic; public uint LfgLogic; public uint CurrencyLogic; - public ushort QuestKillID; + public uint QuestKillID; public uint QuestKillLogic; public sbyte MinExpansionLevel; public sbyte MaxExpansionLevel; @@ -77,7 +75,7 @@ namespace Game.DataStorage public byte PhaseUseFlags; public ushort PhaseID; public uint PhaseGroupID; - public byte Flags; + public int Flags; public sbyte ChrSpecializationIndex; public sbyte ChrSpecializationRole; public uint ModifierTreeID; @@ -91,14 +89,16 @@ namespace Game.DataStorage public sbyte MinExpansionTier; public byte MinPVPRank; public byte MaxPVPRank; + public uint ContentTuningID; + public int CovenantID; public ushort[] SkillID = new ushort[4]; public ushort[] MinSkill = new ushort[4]; public ushort[] MaxSkill = new ushort[4]; public uint[] MinFactionID = new uint[3]; public byte[] MinReputation = new byte[3]; - public ushort[] PrevQuestID = new ushort[4]; - public ushort[] CurrQuestID = new ushort[4]; - public ushort[] CurrentCompletedQuestID = new ushort[4]; + public uint[] PrevQuestID = new uint[4]; + public uint[] CurrQuestID = new uint[4]; + public uint[] CurrentCompletedQuestID = new uint[4]; public uint[] SpellID = new uint[4]; public uint[] ItemID = new uint[4]; public uint[] ItemCount = new uint[4]; diff --git a/Source/Game/DataStorage/Structs/S_Records.cs b/Source/Game/DataStorage/Structs/S_Records.cs index 4f4879474..01efab6b9 100644 --- a/Source/Game/DataStorage/Structs/S_Records.cs +++ b/Source/Game/DataStorage/Structs/S_Records.cs @@ -21,14 +21,6 @@ using System; namespace Game.DataStorage { - public sealed class ScalingStatDistributionRecord - { - public uint Id; - public ushort PlayerLevelToItemLevelCurveID; - public int MinLevel; - public int MaxLevel; - } - public sealed class ScenarioRecord { public uint Id; @@ -46,7 +38,7 @@ namespace Game.DataStorage public string Title; public ushort ScenarioID; public uint CriteriaTreeId; - public ushort RewardQuestID; + public uint RewardQuestID; public int RelatedStep; // Bonus step can only be completed if scenario is in the step specified in this field public ushort Supersedes; // Used in conjunction with Proving Grounds scenarios, when sequencing steps (Not using step order?) public byte OrderIndex; @@ -117,7 +109,7 @@ namespace Game.DataStorage public AbilityLearnType AcquireMethod; public ushort TrivialSkillLineRankHigh; public ushort TrivialSkillLineRankLow; - public sbyte Flags; + public int Flags; public byte NumSkillUps; public short UniqueBit; public short TradeSkillCategoryID; @@ -205,7 +197,6 @@ namespace Game.DataStorage { public uint Id; public int Base; - public short PerLevel; public int Minimum; } @@ -269,7 +260,6 @@ namespace Game.DataStorage { public uint Id; public int Duration; - public uint DurationPerLevel; public int MaxDuration; } @@ -333,14 +323,16 @@ namespace Game.DataStorage public sealed class SpellItemEnchantmentRecord { - public uint Id; public string Name; public string HordeName; + public uint Id; public uint[] EffectArg = new uint[ItemConst.MaxItemEnchantmentEffects]; public float[] EffectScalingPoints = new float[ItemConst.MaxItemEnchantmentEffects]; - public uint TransmogPlayerConditionID; - public uint TransmogCost; public uint IconFileDataID; + public int MinItemLevel; + public int MaxItemLevel; + public uint TransmogUseConditionID; + public uint TransmogCost; public ushort[] EffectPointsMin = new ushort[ItemConst.MaxItemEnchantmentEffects]; public ushort ItemVisual; public EnchantmentSlotMask Flags; @@ -379,17 +371,17 @@ namespace Game.DataStorage { public uint Id; public byte DifficultyID; - public ushort BaseLevel; public ushort MaxLevel; - public ushort SpellLevel; public byte MaxPassiveAuraLevel; + public ushort BaseLevel; + public ushort SpellLevel; public uint SpellID; } public sealed class SpellMiscRecord { public uint Id; - public int[] Attributes = new int[14]; + public int[] Attributes = new int[15]; public byte DifficultyID; public ushort CastingTimeIndex; public ushort DurationIndex; @@ -401,6 +393,9 @@ namespace Game.DataStorage public uint SpellIconFileDataID; public uint ActiveIconFileDataID; public uint ContentTuningID; + public int ShowFutureSpellPlayerConditionID; + public int SpellVisualScript; + public int ActiveSpellVisualScript; public uint SpellID; } @@ -447,7 +442,7 @@ namespace Game.DataStorage { public uint Id; public SpellProcsPerMinuteModType Type; - public ushort Param; + public uint Param; public float Coeff; public uint SpellProcsPerMinuteID; } @@ -550,7 +545,6 @@ namespace Game.DataStorage public byte DifficultyID; public uint SpellVisualID; public float Probability; - public byte Flags; public byte Priority; public int SpellIconFileID; public int ActiveIconFileID; diff --git a/Source/Game/DataStorage/Structs/T_Records.cs b/Source/Game/DataStorage/Structs/T_Records.cs index 70e280eba..c57e6d19a 100644 --- a/Source/Game/DataStorage/Structs/T_Records.cs +++ b/Source/Game/DataStorage/Structs/T_Records.cs @@ -103,6 +103,15 @@ namespace Game.DataStorage public int RequiredTransmogHoliday; } + public sealed class TransmogIllusionRecord + { + public uint Id; + public int UnlockConditionID; + public int TransmogCost; + public int SpellItemEnchantmentID; + public int Flags; + } + public sealed class TransmogSetRecord { public string Name; diff --git a/Source/Game/DataStorage/Structs/U_Records.cs b/Source/Game/DataStorage/Structs/U_Records.cs index 8e8ff08d0..0728220c8 100644 --- a/Source/Game/DataStorage/Structs/U_Records.cs +++ b/Source/Game/DataStorage/Structs/U_Records.cs @@ -27,15 +27,16 @@ namespace Game.DataStorage public int Flags; public int System; public UiMapType Type; - public uint LevelRangeMin; - public uint LevelRangeMax; public int BountySetID; public uint BountyDisplayLocation; public int VisibilityPlayerConditionID; public sbyte HelpTextPosition; public int BkgAtlasID; public int AlternateUiMapGroup; - } + public int ContentTuningID; + + public UiMapFlag GetFlags() { return (UiMapFlag)Flags; } +} public sealed class UiMapAssignmentRecord { @@ -61,6 +62,7 @@ namespace Game.DataStorage public int ChildUiMapID; public int OverrideHighlightFileDataID; public int OverrideHighlightAtlasID; + public int Flags; } public sealed class UiMapXMapArtRecord diff --git a/Source/Game/DataStorage/Structs/V_Records.cs b/Source/Game/DataStorage/Structs/V_Records.cs index eb0dd9ff2..18f249d2f 100644 --- a/Source/Game/DataStorage/Structs/V_Records.cs +++ b/Source/Game/DataStorage/Structs/V_Records.cs @@ -37,9 +37,9 @@ namespace Game.DataStorage public float FacingLimitRight; public float FacingLimitLeft; public float CameraYawOffset; - public byte UiLocomotionType; public ushort VehicleUIIndicatorID; public int MissileTargetingID; + public ushort VehiclePOITypeID; public ushort[] SeatID = new ushort[8]; public ushort[] PowerDisplayID = new ushort[3]; } diff --git a/Source/Game/DataStorage/WhoListStorage.cs b/Source/Game/DataStorage/WhoListStorage.cs index a0dd19c7e..de05e312b 100644 --- a/Source/Game/DataStorage/WhoListStorage.cs +++ b/Source/Game/DataStorage/WhoListStorage.cs @@ -86,7 +86,7 @@ namespace Game.DataStorage guildGuid = guild.GetGUID(); _whoListStorage.Add(new WhoListPlayerInfo(player.GetGUID(), player.GetTeam(), player.GetSession().GetSecurity(), player.GetLevel(), - player.GetClass(), player.GetRace(), player.GetZoneId(), player.m_playerData.NativeSex, player.IsVisible(), + player.GetClass(), player.GetRace(), player.GetZoneId(), (byte)player.GetNativeSex(), player.IsVisible(), player.IsGameMaster(), playerName, guildName, guildGuid)); } } diff --git a/Source/Game/DungeonFinding/LFGManager.cs b/Source/Game/DungeonFinding/LFGManager.cs index 0be763bbf..b4da0ff3f 100644 --- a/Source/Game/DungeonFinding/LFGManager.cs +++ b/Source/Game/DungeonFinding/LFGManager.cs @@ -1535,10 +1535,6 @@ namespace Game.DungeonFinding lockStatus = LfgLockStatusType.RaidLocked; else if (dungeon.difficulty > Difficulty.Normal && player.GetBoundInstance(dungeon.map, dungeon.difficulty) != null) lockStatus = LfgLockStatusType.RaidLocked; - else if (dungeon.minlevel > level) - lockStatus = LfgLockStatusType.TooLowLevel; - else if (dungeon.maxlevel < level) - lockStatus = LfgLockStatusType.TooHighLevel; else if (dungeon.seasonal && !IsSeasonActive(dungeon.id)) lockStatus = LfgLockStatusType.NotInSeason; else if (dungeon.requiredItemLevel > player.GetAverageItemLevel()) @@ -1560,16 +1556,23 @@ namespace Game.DungeonFinding else if (ar.item2 != 0 && !player.HasItemCount(ar.item2)) lockStatus = LfgLockStatusType.MissingItem; } + else + { + var levels = Global.DB2Mgr.GetContentTuningData(dungeon.contentTuningId, player.m_playerData.CtrOptions.GetValue().ContentTuningConditionMask); + if (levels.HasValue) + { + if (levels.Value.MinLevel > level) + lockStatus = LfgLockStatusType.TooLowLevel; + if (levels.Value.MaxLevel < level) + lockStatus = LfgLockStatusType.TooHighLevel; + } + } /* @todo VoA closed if WG is not under team control (LFG_LOCKSTATUS_RAID_LOCKED) lockData = LFG_LOCKSTATUS_TOO_HIGH_GEAR_SCORE; lockData = LFG_LOCKSTATUS_ATTUNEMENT_TOO_LOW_LEVEL; lockData = LFG_LOCKSTATUS_ATTUNEMENT_TOO_HIGH_LEVEL; */ - if (lockStatus == 0) - { - - } if (lockStatus != 0) lockDic[dungeon.Entry()] = new LfgLockInfoData(lockStatus, dungeon.requiredItemLevel, player.GetAverageItemLevel()); } @@ -1985,13 +1988,23 @@ namespace Game.DungeonFinding return 0; } - public List GetRandomAndSeasonalDungeons(uint level, uint expansion) + public List GetRandomAndSeasonalDungeons(uint level, uint expansion, uint contentTuningReplacementConditionMask) { List randomDungeons = new List(); foreach (var dungeon in LfgDungeonStore.Values) { - if ((dungeon.seasonal && IsSeasonActive(dungeon.id) || !dungeon.seasonal && dungeon.type == LfgType.RandomDungeon) && dungeon.expansion <= expansion && dungeon.minlevel <= level && level <= dungeon.maxlevel) - randomDungeons.Add(dungeon.Entry()); + if (!(dungeon.type == LfgType.RandomDungeon || (dungeon.seasonal && Global.LFGMgr.IsSeasonActive(dungeon.id)))) + continue; + + if (dungeon.expansion > expansion) + continue; + + var levels = Global.DB2Mgr.GetContentTuningData(dungeon.contentTuningId, contentTuningReplacementConditionMask); + if (levels.HasValue) + if (levels.Value.MinLevel > level || level > levels.Value.MaxLevel) + continue; + + randomDungeons.Add(dungeon.Entry()); } return randomDungeons; } @@ -2184,8 +2197,7 @@ namespace Game.DungeonFinding type = dbc.TypeID; expansion = dbc.ExpansionLevel; group = dbc.GroupID; - minlevel = dbc.MinLevel; - maxlevel = dbc.MaxLevel; + contentTuningId = dbc.ContentTuningID; difficulty = dbc.DifficultyID; seasonal = dbc.Flags[0].HasAnyFlag(LfgFlags.Seasonal); } @@ -2196,8 +2208,7 @@ namespace Game.DungeonFinding public LfgType type; public uint expansion; public uint group; - public uint minlevel; - public uint maxlevel; + public uint contentTuningId; public Difficulty difficulty; public bool seasonal; public float x, y, z, o; diff --git a/Source/Game/Entities/AreaTrigger/AreaTrigger.cs b/Source/Game/Entities/AreaTrigger/AreaTrigger.cs index c95ed5e80..aa9cb127e 100644 --- a/Source/Game/Entities/AreaTrigger/AreaTrigger.cs +++ b/Source/Game/Entities/AreaTrigger/AreaTrigger.cs @@ -78,7 +78,7 @@ namespace Game.Entities } } - bool Create(uint spellMiscId, Unit caster, Unit target, SpellInfo spell, Position pos, int duration, SpellCastVisual spellVisual, ObjectGuid castId, AuraEffect aurEff) + bool Create(uint spellMiscId, Unit caster, Unit target, SpellInfo spell, Position pos, int duration, SpellCastVisualField spellVisual, ObjectGuid castId, AuraEffect aurEff) { _targetGuid = target ? target.GetGUID() : ObjectGuid.Empty; _aurEff = aurEff; @@ -110,7 +110,11 @@ namespace Game.Entities SetUpdateFieldValue(m_values.ModifyValue(m_areaTriggerData).ModifyValue(m_areaTriggerData.SpellID), spell.Id); SetUpdateFieldValue(m_values.ModifyValue(m_areaTriggerData).ModifyValue(m_areaTriggerData.SpellForVisuals), spell.Id); - SetUpdateFieldValue(m_values.ModifyValue(m_areaTriggerData).ModifyValue(m_areaTriggerData.SpellXSpellVisualID), spellVisual.SpellXSpellVisualID); + + SpellCastVisualField spellCastVisual = m_values.ModifyValue(m_areaTriggerData).ModifyValue(m_areaTriggerData.SpellVisual); + SetUpdateFieldValue(ref spellCastVisual.SpellXSpellVisualID, spellVisual.SpellXSpellVisualID); + SetUpdateFieldValue(ref spellCastVisual.ScriptVisualID, spellVisual.ScriptVisualID); + SetUpdateFieldValue(m_values.ModifyValue(m_areaTriggerData).ModifyValue(m_areaTriggerData.TimeToTargetScale), GetMiscTemplate().TimeToTargetScale != 0 ? GetMiscTemplate().TimeToTargetScale : m_areaTriggerData.Duration); SetUpdateFieldValue(m_values.ModifyValue(m_areaTriggerData).ModifyValue(m_areaTriggerData.BoundsRadius2D), GetTemplate().MaxSearchRadius); SetUpdateFieldValue(m_values.ModifyValue(m_areaTriggerData).ModifyValue(m_areaTriggerData.DecalPropertiesID), GetMiscTemplate().DecalPropertiesId); @@ -197,7 +201,7 @@ namespace Game.Entities return true; } - public static AreaTrigger CreateAreaTrigger(uint spellMiscId, Unit caster, Unit target, SpellInfo spell, Position pos, int duration, SpellCastVisual spellVisual, ObjectGuid castId = default, AuraEffect aurEff = null) + public static AreaTrigger CreateAreaTrigger(uint spellMiscId, Unit caster, Unit target, SpellInfo spell, Position pos, int duration, SpellCastVisualField spellVisual, ObjectGuid castId = default, AuraEffect aurEff = null) { AreaTrigger at = new AreaTrigger(); if (!at.Create(spellMiscId, caster, target, spell, pos, duration, spellVisual, castId, aurEff)) diff --git a/Source/Game/Entities/Conversation.cs b/Source/Game/Entities/Conversation.cs index 8a7151175..8f3453353 100644 --- a/Source/Game/Entities/Conversation.cs +++ b/Source/Game/Entities/Conversation.cs @@ -174,7 +174,7 @@ namespace Game.Entities foreach (ushort actorIndex in actorIndices) { ConversationActor actor = actorIndex < m_conversationData.Actors.Size() ? m_conversationData.Actors[actorIndex] : null; - if (actor == null || (actor.CreatureID == 0 && actor.ActorGUID.IsEmpty())) + if (actor == null || (actor.CreatureID == 0 && actor.ActorGUID.IsEmpty() && actor.NoActorObject == 0)) { Log.outError(LogFilter.Conversation, $"Failed to create conversation (Id: {conversationEntry}) due to missing actor (Idx: {actorIndex})."); return false; diff --git a/Source/Game/Entities/Corpse.cs b/Source/Game/Entities/Corpse.cs index fdb53a2cc..d7292377a 100644 --- a/Source/Game/Entities/Corpse.cs +++ b/Source/Game/Entities/Corpse.cs @@ -101,10 +101,6 @@ namespace Game.Entities for (var i = 0; i < EquipmentSlot.End; ++i) items.Append($"{m_corpseData.Items[i]} "); - uint bytes1 = ((uint)m_corpseData.RaceID << 8) | ((uint)m_corpseData.Sex << 16) | ((uint)m_corpseData.SkinID << 24); - uint bytes2 = ((uint)m_corpseData.FaceID) | ((uint)m_corpseData.HairStyleID << 8) | ((uint)m_corpseData.HairColorID << 16) | ((uint)m_corpseData.FacialHairStyleID << 24); - - byte index = 0; PreparedStatement stmt = DB.Characters.GetPreparedStatement(CharStatements.INS_CORPSE); stmt.AddValue(index++, GetOwnerGUID().GetCounter()); // guid @@ -115,8 +111,8 @@ namespace Game.Entities stmt.AddValue(index++, GetMapId()); // mapId stmt.AddValue(index++, (uint)m_corpseData.DisplayID); // displayId stmt.AddValue(index++, items.ToString()); // itemCache - stmt.AddValue(index++, bytes1); // bytes1 - stmt.AddValue(index++, bytes2); // bytes2 + stmt.AddValue(index++, m_corpseData.RaceID); // race + stmt.AddValue(index++, m_corpseData.Sex); // gender stmt.AddValue(index++, (uint)m_corpseData.Flags); // flags stmt.AddValue(index++, (uint)m_corpseData.DynamicFlags); // dynFlags stmt.AddValue(index++, (uint)m_time); // time @@ -132,6 +128,18 @@ namespace Game.Entities stmt.AddValue(index++, phaseId); // PhaseId trans.Append(stmt); } + + foreach (var customization in m_corpseData.Customizations) + { + index = 0; + stmt = DB.Characters.GetPreparedStatement(CharStatements.INS_CORPSE_CUSTOMIZATIONS); + stmt.AddValue(index++, GetOwnerGUID().GetCounter()); // OwnerGuid + stmt.AddValue(index++, customization.ChrCustomizationOptionID); + stmt.AddValue(index++, customization.ChrCustomizationChoiceID); + trans.Append(stmt); + } + + DB.Characters.CommitTransaction(trans); } public void DeleteFromDB(SQLTransaction trans) @@ -148,12 +156,16 @@ namespace Game.Entities stmt = DB.Characters.GetPreparedStatement(CharStatements.DEL_CORPSE_PHASES); stmt.AddValue(0, ownerGuid.GetCounter()); DB.Characters.ExecuteOrAppend(trans, stmt); + + stmt = DB.Characters.GetPreparedStatement(CharStatements.DEL_CORPSE_CUSTOMIZATIONS); + stmt.AddValue(0, ownerGuid.GetCounter()); + DB.Characters.ExecuteOrAppend(trans, stmt); } public bool LoadCorpseFromDB(ulong guid, SQLFields field) { // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 - // SELECT posX, posY, posZ, orientation, mapId, displayId, itemCache, bytes1, bytes2, flags, dynFlags, time, corpseType, instanceId, guid FROM corpse WHERE mapId = ? AND instanceId = ? + // SELECT posX, posY, posZ, orientation, mapId, displayId, itemCache, race, gender, flags, dynFlags, time, corpseType, instanceId, guid FROM corpse WHERE mapId = ? AND instanceId = ? float posX = field.Read(0); float posY = field.Read(1); @@ -169,15 +181,8 @@ namespace Game.Entities for (uint index = 0; index < EquipmentSlot.End; ++index) SetItem(index, uint.Parse(items[(int)index])); - uint bytes1 = field.Read(7); - uint bytes2 = field.Read(8); - SetRace((Race)((bytes1 >> 8) & 0xFF)); - SetSex((Gender)((bytes1 >> 16) & 0xFF)); - SetSkin((byte)((bytes1 >> 24) & 0xFF)); - SetFace((byte)(bytes2 & 0xFF)); - SetHairStyle((byte)((bytes2 >> 8) & 0xFF)); - SetHairColor((byte)((bytes2 >> 16) & 0xFF)); - SetFacialHairStyle((byte)((bytes2 >> 24) & 0xFF)); + SetRace((Race)field.Read(7)); + SetSex((Gender)field.Read(8)); SetFlags((CorpseFlags)field.Read(9)); SetCorpseDynamicFlags((CorpseDynFlags)field.Read(10)); SetOwnerGUID(ObjectGuid.Create(HighGuid.Player, field.Read(14))); @@ -287,15 +292,21 @@ namespace Game.Entities public void SetDisplayId(uint displayId) { SetUpdateFieldValue(m_values.ModifyValue(m_corpseData).ModifyValue(m_corpseData.DisplayID), displayId); } public void SetRace(Race race) { SetUpdateFieldValue(m_values.ModifyValue(m_corpseData).ModifyValue(m_corpseData.RaceID), (byte)race); } public void SetSex(Gender sex) { SetUpdateFieldValue(m_values.ModifyValue(m_corpseData).ModifyValue(m_corpseData.Sex), (byte)sex); } - public void SetSkin(byte skin) { SetUpdateFieldValue(m_values.ModifyValue(m_corpseData).ModifyValue(m_corpseData.SkinID), skin); } - public void SetFace(byte face) { SetUpdateFieldValue(m_values.ModifyValue(m_corpseData).ModifyValue(m_corpseData.FaceID), face); } - public void SetHairStyle(byte hairStyle) { SetUpdateFieldValue(m_values.ModifyValue(m_corpseData).ModifyValue(m_corpseData.HairStyleID), hairStyle); } - public void SetHairColor(byte hairColor) { SetUpdateFieldValue(m_values.ModifyValue(m_corpseData).ModifyValue(m_corpseData.HairColorID), hairColor); } - public void SetFacialHairStyle(byte facialHairStyle) { SetUpdateFieldValue(m_values.ModifyValue(m_corpseData).ModifyValue(m_corpseData.FacialHairStyleID), facialHairStyle); } public void SetFlags(CorpseFlags flags) { SetUpdateFieldValue(m_values.ModifyValue(m_corpseData).ModifyValue(m_corpseData.Flags), (uint)flags); } public void SetFactionTemplate(int factionTemplate) { SetUpdateFieldValue(m_values.ModifyValue(m_corpseData).ModifyValue(m_corpseData.FactionTemplate), factionTemplate); } public void SetItem(uint slot, uint item) { SetUpdateFieldValue(ref m_values.ModifyValue(m_corpseData).ModifyValue(m_corpseData.Items, (int)slot), item); } - public void SetCustomDisplayOption(uint slot, byte customDisplayOption) { SetUpdateFieldValue(ref m_values.ModifyValue(m_corpseData).ModifyValue(m_corpseData.CustomDisplayOption, (int)slot), customDisplayOption); } + + public void SetCustomizations(List customizations) + { + ClearDynamicUpdateFieldValues(m_values.ModifyValue(m_corpseData).ModifyValue(m_corpseData.Customizations)); + foreach (var customization in customizations) + { + var newChoice = new ChrCustomizationChoice(); + newChoice.ChrCustomizationOptionID = customization.ChrCustomizationOptionID; + newChoice.ChrCustomizationChoiceID = customization.ChrCustomizationChoiceID; + AddDynamicUpdateFieldValue(m_values.ModifyValue(m_corpseData).ModifyValue(m_corpseData.Customizations), newChoice); + } + } public long GetGhostTime() { return m_time; } public void ResetGhostTime() { m_time = Time.UnixTime; } diff --git a/Source/Game/Entities/DynamicObject.cs b/Source/Game/Entities/DynamicObject.cs index 7a799821d..dabf293e6 100644 --- a/Source/Game/Entities/DynamicObject.cs +++ b/Source/Game/Entities/DynamicObject.cs @@ -77,7 +77,7 @@ namespace Game.Entities } } - public bool CreateDynamicObject(ulong guidlow, Unit caster, SpellInfo spell, Position pos, float radius, DynamicObjectType type, SpellCastVisual spellVisual) + public bool CreateDynamicObject(ulong guidlow, Unit caster, SpellInfo spell, Position pos, float radius, DynamicObjectType type, SpellCastVisualField spellVisual) { SetMap(caster.GetMap()); Relocate(pos); @@ -95,7 +95,11 @@ namespace Game.Entities SetUpdateFieldValue(m_values.ModifyValue(m_dynamicObjectData).ModifyValue(m_dynamicObjectData.Caster), caster.GetGUID()); SetUpdateFieldValue(m_values.ModifyValue(m_dynamicObjectData).ModifyValue(m_dynamicObjectData.Type), (byte)type); - SetUpdateFieldValue(m_values.ModifyValue(m_dynamicObjectData).ModifyValue(m_dynamicObjectData.SpellXSpellVisualID), spellVisual.SpellXSpellVisualID); + + SpellCastVisualField spellCastVisual = m_values.ModifyValue(m_dynamicObjectData).ModifyValue(m_dynamicObjectData.SpellVisual); + SetUpdateFieldValue(ref spellCastVisual.SpellXSpellVisualID, spellVisual.SpellXSpellVisualID); + SetUpdateFieldValue(ref spellCastVisual.ScriptVisualID, spellVisual.ScriptVisualID); + SetUpdateFieldValue(m_values.ModifyValue(m_dynamicObjectData).ModifyValue(m_dynamicObjectData.SpellID), spell.Id); SetUpdateFieldValue(m_values.ModifyValue(m_dynamicObjectData).ModifyValue(m_dynamicObjectData.Radius), radius); SetUpdateFieldValue(m_values.ModifyValue(m_dynamicObjectData).ModifyValue(m_dynamicObjectData.CastTime), GameTime.GetGameTimeMS()); diff --git a/Source/Game/Entities/Item/AzeriteItem.cs b/Source/Game/Entities/Item/AzeriteItem.cs index 8a9f9ac65..0361f5a0d 100644 --- a/Source/Game/Entities/Item/AzeriteItem.cs +++ b/Source/Game/Entities/Item/AzeriteItem.cs @@ -82,7 +82,7 @@ namespace Game.Entities for (int j = 0; j < SharedConst.MaxAzeriteEssenceSlot; ++j) stmt.AddValue(5 + specIndex * 5 + j, m_azeriteItemData.SelectedEssences[specIndex].AzeriteEssenceID[j]); } - for (; specIndex < PlayerConst.MaxSpecializations; ++specIndex) + for (; specIndex < 4; ++specIndex) { stmt.AddValue(4 + specIndex * 5, 0); for (int j = 0; j < SharedConst.MaxAzeriteEssenceSlot; ++j) @@ -557,6 +557,6 @@ namespace Game.Entities public uint KnowledgeLevel; public List AzeriteItemMilestonePowers = new List(); public List UnlockedAzeriteEssences = new List(); - public AzeriteItemSelectedEssencesData[] SelectedAzeriteEssences = new AzeriteItemSelectedEssencesData[PlayerConst.MaxSpecializations]; + public AzeriteItemSelectedEssencesData[] SelectedAzeriteEssences = new AzeriteItemSelectedEssencesData[4]; } } diff --git a/Source/Game/Entities/Item/Item.cs b/Source/Game/Entities/Item/Item.cs index d5ed57fd8..816bd58e0 100644 --- a/Source/Game/Entities/Item/Item.cs +++ b/Source/Game/Entities/Item/Item.cs @@ -1009,10 +1009,9 @@ namespace Game.Entities gemBonus.AddBonusList(bonusListId); uint gemBaseItemLevel = gemTemplate.GetBaseItemLevel(); - ScalingStatDistributionRecord ssd = CliDB.ScalingStatDistributionStorage.LookupByKey(gemBonus.ScalingStatDistribution); - if (ssd != null) + if (gemBonus.PlayerLevelToItemLevelCurveId != 0) { - uint scaledIlvl = (uint)Global.DB2Mgr.GetCurveValueAt(ssd.PlayerLevelToItemLevelCurveID, gemScalingLevel); + uint scaledIlvl = (uint)Global.DB2Mgr.GetCurveValueAt(gemBonus.PlayerLevelToItemLevelCurveId, gemScalingLevel); if (scaledIlvl != 0) gemBaseItemLevel = scaledIlvl; } @@ -1446,7 +1445,7 @@ namespace Game.Entities Player owner = GetOwner(); for (byte i = 0; i < ItemConst.MaxStats; ++i) { - if ((owner ? GetItemStatValue(i, owner) : proto.GetItemStatAllocation(i)) != 0) + if ((owner ? GetItemStatValue(i, owner) : proto.GetStatPercentEditor(i)) != 0) return true; } @@ -1457,7 +1456,7 @@ namespace Game.Entities { for (byte i = 0; i < ItemConst.MaxStats; ++i) { - if (bonus.ItemStatAllocation[i] != 0) + if (bonus.StatPercentEditor[i] != 0) return true; } @@ -1767,22 +1766,18 @@ namespace Game.Entities if (azeriteLevelInfo != null) itemLevel = azeriteLevelInfo.ItemLevel; - ScalingStatDistributionRecord ssd = CliDB.ScalingStatDistributionStorage.LookupByKey(bonusData.ScalingStatDistribution); - if (ssd != null) + if (bonusData.PlayerLevelToItemLevelCurveId != 0) { if (fixedLevel != 0) level = fixedLevel; else - level = (uint)Math.Min(Math.Max(level, ssd.MinLevel), ssd.MaxLevel); + { + var levels = Global.DB2Mgr.GetContentTuningData(bonusData.ContentTuningId, 0, true); + if (levels.HasValue) + level = (uint)Math.Min(Math.Max((ushort)level, levels.Value.MinLevel), levels.Value.MaxLevel); + } - ContentTuningRecord contentTuning = CliDB.ContentTuningStorage.LookupByKey(bonusData.ContentTuningId); - if (contentTuning != null) - if ((Convert.ToBoolean(contentTuning.Flags & 2) || contentTuning.MinLevel != 0 || contentTuning.MaxLevel != 0) && !Convert.ToBoolean(contentTuning.Flags & 4)) - level = (uint)Math.Min(Math.Max(level, contentTuning.MinLevel), contentTuning.MaxLevel); - - uint heirloomIlvl = (uint)Global.DB2Mgr.GetCurveValueAt(ssd.PlayerLevelToItemLevelCurveID, level); - if (heirloomIlvl != 0) - itemLevel = heirloomIlvl; + itemLevel = (uint)Global.DB2Mgr.GetCurveValueAt(bonusData.PlayerLevelToItemLevelCurveId, level); } itemLevel += (uint)bonusData.ItemLevelBonus; @@ -1814,7 +1809,7 @@ namespace Game.Entities { case ItemModType.Corruption: case ItemModType.CorruptionResistance: - return _bonusData.ItemStatAllocation[index]; + return _bonusData.StatPercentEditor[index]; default: break; } @@ -1823,7 +1818,7 @@ namespace Game.Entities uint randomPropPoints = ItemEnchantmentManager.GetRandomPropertyPoints(itemLevel, GetQuality(), GetTemplate().GetInventoryType(), GetTemplate().GetSubClass()); if (randomPropPoints != 0) { - float statValue = (_bonusData.ItemStatAllocation[index] * randomPropPoints) * 0.0001f; + float statValue = (_bonusData.StatPercentEditor[index] * randomPropPoints) * 0.0001f; GtItemSocketCostPerLevelRecord gtCost = CliDB.ItemSocketCostPerLevelGameTable.GetRow(itemLevel); if (gtCost != null) statValue -= (_bonusData.ItemStatSocketCostMultiplier[index] * gtCost.SocketCost); @@ -1881,11 +1876,11 @@ namespace Game.Entities public uint GetDisplayId(Player owner) { - ItemModifier transmogModifier = ItemModifier.TransmogAppearanceAllSpecs; - if ((m_itemData.ModifiersMask & ItemConst.AppearanceModifierMaskSpecSpecific) != 0) - transmogModifier = ItemConst.AppearanceModifierSlotBySpec[owner.GetActiveTalentGroup()]; + uint itemModifiedAppearanceId = GetModifier(ItemConst.AppearanceModifierSlotBySpec[owner.GetActiveTalentGroup()]); + if (itemModifiedAppearanceId == 0) + itemModifiedAppearanceId = GetModifier(ItemModifier.TransmogAppearanceAllSpecs); - ItemModifiedAppearanceRecord transmog = CliDB.ItemModifiedAppearanceStorage.LookupByKey(GetModifier(transmogModifier)); + ItemModifiedAppearanceRecord transmog = CliDB.ItemModifiedAppearanceStorage.LookupByKey(itemModifiedAppearanceId); if (transmog != null) { ItemAppearanceRecord itemAppearance = CliDB.ItemAppearanceStorage.LookupByKey(transmog.ItemAppearanceID); @@ -1903,51 +1898,57 @@ namespace Game.Entities public uint GetModifier(ItemModifier modifier) { - if ((m_itemData.ModifiersMask & (1 << (int)modifier)) == 0) - return 0; + int modifierIndex = m_itemData.Modifiers._value.Values.FindIndexIf(mod => + { + return mod.Type == (byte)modifier; + }); - int valueIndex = 0; - uint mask = m_itemData.ModifiersMask; - for (int i = 0; i < (int)modifier; ++i) - if ((mask & (1 << i)) != 0) - ++valueIndex; + if (modifierIndex != -1) + return m_itemData.Modifiers._value.Values[modifierIndex].Value; - return m_itemData.Modifiers[valueIndex]; + return 0; } public void SetModifier(ItemModifier modifier, uint value) { - int valueIndex = 0; - uint mask = m_itemData.ModifiersMask; - for (int i = 0; i < (int)modifier; ++i) - if ((mask & (1 << i)) != 0) - ++valueIndex; + int modifierIndex = m_itemData.Modifiers._value.Values.FindIndexIf(mod => + { + return mod.Type == (byte)modifier; + }); if (value != 0) { - if ((mask & (1 << (int)modifier)) != 0) - return; + if (modifierIndex == -1) + { + ItemMod mod = new ItemMod(); + mod.Value = value; + mod.Type = (byte)modifier; - SetUpdateFieldFlagValue(m_values.ModifyValue(m_itemData).ModifyValue(m_itemData.ModifiersMask), 1u << (int)modifier); - InsertDynamicUpdateFieldValue(m_values.ModifyValue(m_itemData).ModifyValue(m_itemData.Modifiers), valueIndex, value); + AddDynamicUpdateFieldValue(m_values.ModifyValue(m_itemData).ModifyValue(m_itemData.Modifiers)._value.ModifyValue(m_itemData.Modifiers._value.Values), mod); + } + else + { + ItemModList itemModList = m_values.ModifyValue(m_itemData).ModifyValue(m_itemData.Modifiers); + itemModList.ModifyValue(itemModList.Values, modifierIndex); + SetUpdateFieldValue(ref itemModList.ModifyValue(itemModList.Values, modifierIndex).GetValue().Value, value); + } } else { - if ((mask & (1 << (int)modifier)) == 0) + if (modifierIndex == -1) return; - RemoveUpdateFieldFlagValue(m_values.ModifyValue(m_itemData).ModifyValue(m_itemData.ModifiersMask), 1u << (int)modifier); - RemoveDynamicUpdateFieldValue(m_values.ModifyValue(m_itemData).ModifyValue(m_itemData.Modifiers), valueIndex); + RemoveDynamicUpdateFieldValue(m_values.ModifyValue(m_itemData).ModifyValue(m_itemData.Modifiers)._value.ModifyValue(m_itemData.Modifiers._value.Values), modifierIndex); } } public uint GetVisibleEntry(Player owner) { - ItemModifier transmogModifier = ItemModifier.TransmogAppearanceAllSpecs; - if ((m_itemData.ModifiersMask & ItemConst.AppearanceModifierMaskSpecSpecific) != 0) - transmogModifier = ItemConst.AppearanceModifierSlotBySpec[owner.GetActiveTalentGroup()]; + uint itemModifiedAppearanceId = GetModifier(ItemConst.AppearanceModifierSlotBySpec[owner.GetActiveTalentGroup()]); + if (itemModifiedAppearanceId == 0) + itemModifiedAppearanceId = GetModifier(ItemModifier.TransmogAppearanceAllSpecs); - ItemModifiedAppearanceRecord transmog = CliDB.ItemModifiedAppearanceStorage.LookupByKey(GetModifier(transmogModifier)); + ItemModifiedAppearanceRecord transmog = CliDB.ItemModifiedAppearanceStorage.LookupByKey(itemModifiedAppearanceId); if (transmog != null) return transmog.ItemID; @@ -1956,11 +1957,11 @@ namespace Game.Entities public ushort GetVisibleAppearanceModId(Player owner) { - ItemModifier transmogModifier = ItemModifier.TransmogAppearanceAllSpecs; - if ((m_itemData.ModifiersMask & ItemConst.AppearanceModifierMaskSpecSpecific) != 0) - transmogModifier = ItemConst.AppearanceModifierSlotBySpec[owner.GetActiveTalentGroup()]; + uint itemModifiedAppearanceId = GetModifier(ItemConst.AppearanceModifierSlotBySpec[owner.GetActiveTalentGroup()]); + if (itemModifiedAppearanceId == 0) + itemModifiedAppearanceId = GetModifier(ItemModifier.TransmogAppearanceAllSpecs); - ItemModifiedAppearanceRecord transmog = CliDB.ItemModifiedAppearanceStorage.LookupByKey(GetModifier(transmogModifier)); + ItemModifiedAppearanceRecord transmog = CliDB.ItemModifiedAppearanceStorage.LookupByKey(itemModifiedAppearanceId); if (transmog != null) return transmog.ItemAppearanceModifierID; @@ -1969,15 +1970,14 @@ namespace Game.Entities public uint GetVisibleEnchantmentId(Player owner) { - ItemModifier illusionModifier = ItemModifier.EnchantIllusionAllSpecs; - if ((m_itemData.ModifiersMask & ItemConst.IllusionModifierMaskSpecSpecific) != 0) - illusionModifier = ItemConst.IllusionModifierSlotBySpec[owner.GetActiveTalentGroup()]; + uint enchantmentId = GetModifier(ItemConst.IllusionModifierSlotBySpec[owner.GetActiveTalentGroup()]); + if (enchantmentId == 0) + enchantmentId = GetModifier(ItemModifier.EnchantIllusionAllSpecs); - uint enchantIllusion = GetModifier(illusionModifier); - if (enchantIllusion != 0) - return enchantIllusion; + if (enchantmentId == 0) + enchantmentId = GetEnchantmentId(EnchantmentSlot.Perm); - return (uint)GetEnchantmentId(EnchantmentSlot.Perm); + return enchantmentId; } public ushort GetVisibleItemVisual(Player owner) @@ -2255,15 +2255,11 @@ namespace Game.Entities if (!_bonusData.HasFixedLevel || GetModifier(ItemModifier.TimewalkerLevel) != 0) return; - ScalingStatDistributionRecord ssd = CliDB.ScalingStatDistributionStorage.LookupByKey(_bonusData.ScalingStatDistribution); - if (ssd != null) + if (_bonusData.PlayerLevelToItemLevelCurveId != 0) { - level = (uint)Math.Min(Math.Max(level, ssd.MinLevel), ssd.MaxLevel); - - ContentTuningRecord contentTuning = CliDB.ContentTuningStorage.LookupByKey(_bonusData.ContentTuningId); - if (contentTuning != null) - if ((contentTuning.Flags.HasAnyFlag(2) || contentTuning.MinLevel != 0 || contentTuning.MaxLevel != 0) && !contentTuning.Flags.HasAnyFlag(4)) - level = (uint)Math.Min(Math.Max(level, contentTuning.MinLevel), contentTuning.MaxLevel); + var levels = Global.DB2Mgr.GetContentTuningData(_bonusData.ContentTuningId, 0, true); + if (levels.HasValue) + level = (uint)Math.Min(Math.Max((short)level, levels.Value.MinLevel), levels.Value.MaxLevel); SetModifier(ItemModifier.TimewalkerLevel, level); } @@ -2271,12 +2267,14 @@ namespace Game.Entities public int GetRequiredLevel() { + int fixedLevel = (int)GetModifier(ItemModifier.TimewalkerLevel); + if (_bonusData.RequiredLevelCurve != 0) + return (int)Global.DB2Mgr.GetCurveValueAt(_bonusData.RequiredLevelCurve, fixedLevel); if (_bonusData.RequiredLevelOverride != 0) return _bonusData.RequiredLevelOverride; - else if (_bonusData.HasFixedLevel) - return (int)GetModifier(ItemModifier.TimewalkerLevel); - else - return _bonusData.RequiredLevel; + if (_bonusData.HasFixedLevel && _bonusData.PlayerLevelToItemLevelCurveId != 0) + return fixedLevel; + return _bonusData.RequiredLevel; } public static Item NewItemOrBag(ItemTemplate proto) @@ -2515,7 +2513,7 @@ namespace Game.Entities public uint GetAppearanceModId() { return m_itemData.ItemAppearanceModID; } public void SetAppearanceModId(uint appearanceModId) { SetUpdateFieldValue(m_values.ModifyValue(m_itemData).ModifyValue(m_itemData.ItemAppearanceModID), (byte)appearanceModId); } public float GetRepairCostMultiplier() { return _bonusData.RepairCostMultiplier; } - public uint GetScalingStatDistribution() { return _bonusData.ScalingStatDistribution; } + public uint GetScalingContentTuningId() { return _bonusData.ContentTuningId; } public void SetRefundRecipient(ObjectGuid guid) { m_refundRecipient = guid; } public void SetPaidMoney(ulong money) { m_paidMoney = money; } @@ -2685,13 +2683,13 @@ namespace Game.Entities ItemLevelBonus = 0; RequiredLevel = proto.GetBaseRequiredLevel(); for (uint i = 0; i < ItemConst.MaxStats; ++i) - ItemStatType[i] = proto.GetItemStatType(i); + ItemStatType[i] = proto.GetStatModifierBonusStat(i); for (uint i = 0; i < ItemConst.MaxStats; ++i) - ItemStatAllocation[i] = proto.GetItemStatAllocation(i); + StatPercentEditor[i] = proto.GetStatPercentEditor(i); for (uint i = 0; i < ItemConst.MaxStats; ++i) - ItemStatSocketCostMultiplier[i] = proto.GetItemStatSocketCostMultiplier(i); + ItemStatSocketCostMultiplier[i] = proto.GetStatPercentageOfSocket(i); for (uint i = 0; i < ItemConst.MaxGemSockets; ++i) { @@ -2705,7 +2703,8 @@ namespace Game.Entities AppearanceModID = 0; RepairCostMultiplier = 1.0f; - ScalingStatDistribution = proto.GetScalingStatDistribution(); + ContentTuningId = proto.GetScalingStatContentTuning(); + PlayerLevelToItemLevelCurveId = proto.GetPlayerLevelToItemLevelCurveId(); RelicType = -1; HasFixedLevel = false; RequiredLevelOverride = 0; @@ -2729,6 +2728,7 @@ namespace Game.Entities _state.AppearanceModPriority = int.MaxValue; _state.ScalingStatDistributionPriority = int.MaxValue; _state.AzeriteTierUnlockSetPriority = int.MaxValue; + _state.RequiredLevelCurvePriority = int.MaxValue; _state.HasQualityBonus = false; } @@ -2766,7 +2766,7 @@ namespace Game.Entities if (statIndex < ItemConst.MaxStats) { ItemStatType[statIndex] = values[0]; - ItemStatAllocation[statIndex] += values[1]; + StatPercentEditor[statIndex] += values[1]; } break; } @@ -2816,8 +2816,8 @@ namespace Game.Entities case ItemBonusType.ScalingStatDistributionFixed: if (values[1] < _state.ScalingStatDistributionPriority) { - ScalingStatDistribution = (uint)values[0]; ContentTuningId = (uint)values[2]; + PlayerLevelToItemLevelCurveId = (uint)values[3]; _state.ScalingStatDistributionPriority = values[1]; HasFixedLevel = type == ItemBonusType.ScalingStatDistributionFixed; } @@ -2849,6 +2849,15 @@ namespace Game.Entities if (itemEffect != null) Effects[EffectCount++] = itemEffect; break; + case ItemBonusType.RequiredLevelCurve: + if (values[2] < _state.RequiredLevelCurvePriority) + { + RequiredLevelCurve = (uint)values[0]; + _state.RequiredLevelCurvePriority = values[2]; + if (values[1] != 0) + ContentTuningId = (uint)values[1]; + } + break; } } @@ -2856,14 +2865,14 @@ namespace Game.Entities public int ItemLevelBonus; public int RequiredLevel; public int[] ItemStatType = new int[ItemConst.MaxStats]; - public int[] ItemStatAllocation = new int[ItemConst.MaxStats]; + public int[] StatPercentEditor = new int[ItemConst.MaxStats]; public float[] ItemStatSocketCostMultiplier = new float[ItemConst.MaxStats]; public SocketColor[] socketColor = new SocketColor[ItemConst.MaxGemSockets]; public ItemBondingType Bonding; public uint AppearanceModID; public float RepairCostMultiplier; - public uint ScalingStatDistribution; public uint ContentTuningId; + public uint PlayerLevelToItemLevelCurveId; public uint DisenchantLootId; public uint[] GemItemLevelBonus = new uint[ItemConst.MaxGemSockets]; public int[] GemRelicType = new int[ItemConst.MaxGemSockets]; @@ -2872,6 +2881,7 @@ namespace Game.Entities public int RequiredLevelOverride; public uint AzeriteTierUnlockSetId; public uint Suffix; + public uint RequiredLevelCurve; public ItemEffectRecord[] Effects = new ItemEffectRecord[13]; public int EffectCount; public bool CanDisenchant; @@ -2885,6 +2895,7 @@ namespace Game.Entities public int AppearanceModPriority; public int ScalingStatDistributionPriority; public int AzeriteTierUnlockSetPriority; + public int RequiredLevelCurvePriority; public bool HasQualityBonus; } } @@ -2972,7 +2983,7 @@ namespace Game.Entities info.AzeriteItem.Xp = azeriteItemResult.Read(1); info.AzeriteItem.Level = azeriteItemResult.Read(2); info.AzeriteItem.KnowledgeLevel = azeriteItemResult.Read(3); - for (int i = 0; i < PlayerConst.MaxSpecializations; ++i) + for (int i = 0; i < info.AzeriteItem.SelectedAzeriteEssences.Length; ++i) { uint specializationId = azeriteItemResult.Read(4 + i * 4); if (!CliDB.ChrSpecializationStorage.ContainsKey(specializationId)) diff --git a/Source/Game/Entities/Item/ItemTemplate.cs b/Source/Game/Entities/Item/ItemTemplate.cs index e8e928792..14f973261 100644 --- a/Source/Game/Entities/Item/ItemTemplate.cs +++ b/Source/Game/Entities/Item/ItemTemplate.cs @@ -277,22 +277,11 @@ namespace Game.Entities public uint GetRequiredReputationRank() { return ExtendedData.MinReputation; } public uint GetMaxCount() { return ExtendedData.MaxCount; } public uint GetContainerSlots() { return ExtendedData.ContainerSlots; } - public int GetItemStatType(uint index) - { - Cypher.Assert(index < ItemConst.MaxStats); - return ExtendedData.StatModifierBonusStat[index]; - } - public int GetItemStatAllocation(uint index) - { - Cypher.Assert(index < ItemConst.MaxStats); - return ExtendedData.StatPercentEditor[index]; - } - public float GetItemStatSocketCostMultiplier(uint index) - { - Cypher.Assert(index < ItemConst.MaxStats); - return ExtendedData.StatPercentageOfSocket[index]; - } - public uint GetScalingStatDistribution() { return ExtendedData.ScalingStatDistributionID; } + public int GetStatModifierBonusStat(uint index) { Cypher.Assert(index < ItemConst.MaxStats); return ExtendedData.StatModifierBonusStat[index]; } + public int GetStatPercentEditor(uint index) { Cypher.Assert(index < ItemConst.MaxStats); return ExtendedData.StatPercentEditor[index]; } + public float GetStatPercentageOfSocket(uint index) { Cypher.Assert(index < ItemConst.MaxStats); return ExtendedData.StatPercentageOfSocket[index]; } + public uint GetScalingStatContentTuning() { return ExtendedData.ContentTuningID; } + public uint GetPlayerLevelToItemLevelCurveId() { return ExtendedData.PlayerLevelToItemLevelCurveID; } public uint GetDamageType() { return ExtendedData.DamageType; } public uint GetDelay() { return ExtendedData.ItemDelay; } public float GetRangedModRange() { return ExtendedData.ItemRange; } diff --git a/Source/Game/Entities/Object/Update/UpdateFields.cs b/Source/Game/Entities/Object/Update/UpdateFields.cs index bd7169ff6..3cedbbd5b 100644 --- a/Source/Game/Entities/Object/Update/UpdateFields.cs +++ b/Source/Game/Entities/Object/Update/UpdateFields.cs @@ -16,13 +16,13 @@ */ using Framework.Constants; +using Framework.Dynamic; +using Framework.GameMath; +using Game.DataStorage; using Game.Networking; +using Game.Spells; using System; using System.Collections.Generic; -using Framework.GameMath; -using Game.Spells; -using Game.DataStorage; -using Framework.Dynamic; namespace Game.Entities { @@ -45,8 +45,8 @@ namespace Game.Entities { WriteUpdate(data, _changesMask, false, owner, receiver); } - - public void WriteUpdate(WorldPacket data, UpdateMask changesMask, bool ignoreNestedChangesMask, WorldObject owner, Player receiver) + + public void WriteUpdate(WorldPacket data, UpdateMask changesMask, bool ignoreNestedChangesMask, WorldObject owner, Player receiver) { data.WriteBits(changesMask.GetBlock(0), 4); @@ -204,6 +204,82 @@ namespace Game.Entities } } + public class ItemMod + { + public uint Value; + public byte Type; + + public void WriteCreate(WorldPacket data, Item owner, Player receiver) + { + data.WriteUInt32(Value); + data.WriteUInt8(Type); + } + + public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, Item owner, Player receiver) + { + data.WriteUInt32(Value); + data.WriteUInt8(Type); + } + } + + public class ItemModList : BaseUpdateData + { + public DynamicUpdateField Values = new DynamicUpdateField(0, 0); + + public ItemModList() : base(1) { } + + public void WriteCreate(WorldPacket data, Item owner, Player receiver) + { + data.WriteBits(Values.Size(), 6); + for (int i = 0; i < Values.Size(); ++i) + { + Values[i].WriteCreate(data, owner, receiver); + } + data.FlushBits(); + } + + public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, Item owner, Player receiver) + { + UpdateMask changesMask = _changesMask; + if (ignoreChangesMask) + changesMask.SetAll(); + + data.WriteBits(changesMask.GetBlock(0), 1); + + if (changesMask[0]) + { + if (changesMask[0]) + { + if (!ignoreChangesMask) + Values.WriteUpdateMask(data, 6); + else + WriteCompleteDynamicFieldUpdateMask(Values.Size(), data, 6); + } + } + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[0]) + { + for (int i = 0; i < Values.Size(); ++i) + { + if (Values.HasChanged(i) || ignoreChangesMask) + { + Values[i].WriteUpdate(data, ignoreChangesMask, owner, receiver); + } + } + } + } + data.FlushBits(); + } + + public override void ClearChangesMask() + { + ClearChangesMask(Values); + _changesMask.ResetAll(); + } + } + public class ArtifactPower { public ushort ArtifactPowerId; @@ -288,23 +364,23 @@ namespace Game.Entities public class ItemData : BaseUpdateData { public UpdateField> BonusListIDs = new UpdateField>(0, 1); - public DynamicUpdateField Modifiers = new DynamicUpdateField(0, 2); - public DynamicUpdateField ArtifactPowers = new DynamicUpdateField(0, 3); - public DynamicUpdateField Gems = new DynamicUpdateField(0, 4); - public UpdateField Owner = new UpdateField(0, 5); - public UpdateField ContainedIn = new UpdateField(0, 6); - public UpdateField Creator = new UpdateField(0, 7); - public UpdateField GiftCreator = new UpdateField(0, 8); - public UpdateField StackCount = new UpdateField(0, 9); - public UpdateField Expiration = new UpdateField(0, 10); - public UpdateField DynamicFlags = new UpdateField(0, 11); - public UpdateField Durability = new UpdateField(0, 12); - public UpdateField MaxDurability = new UpdateField(0, 13); - public UpdateField CreatePlayedTime = new UpdateField(0, 14); - public UpdateField ModifiersMask = new UpdateField(0, 15); - public UpdateField Context = new UpdateField(0, 16); - public UpdateField ArtifactXP = new UpdateField(0, 17); - public UpdateField ItemAppearanceModID = new UpdateField(0, 18); + public DynamicUpdateField ArtifactPowers = new DynamicUpdateField(0, 2); + public DynamicUpdateField Gems = new DynamicUpdateField(0, 3); + public UpdateField Owner = new UpdateField(0, 4); + public UpdateField ContainedIn = new UpdateField(0, 5); + public UpdateField Creator = new UpdateField(0, 6); + public UpdateField GiftCreator = new UpdateField(0, 7); + public UpdateField StackCount = new UpdateField(0, 8); + public UpdateField Expiration = new UpdateField(0, 9); + public UpdateField DynamicFlags = new UpdateField(0, 10); + public UpdateField Durability = new UpdateField(0, 11); + public UpdateField MaxDurability = new UpdateField(0, 12); + public UpdateField CreatePlayedTime = new UpdateField(0, 13); + public UpdateField Context = new UpdateField(0, 14); + public UpdateField CreateTime = new UpdateField(0, 15); + public UpdateField ArtifactXP = new UpdateField(0, 16); + public UpdateField ItemAppearanceModID = new UpdateField(0, 17); + public UpdateField Modifiers = new UpdateField(0, 18); public UpdateField DynamicFlags2 = new UpdateField(0, 19); public UpdateFieldArray SpellCharges = new UpdateFieldArray(5, 20, 21); public UpdateFieldArray Enchantment = new UpdateFieldArray(13, 26, 27); @@ -342,27 +418,19 @@ namespace Game.Entities data.WriteUInt32(MaxDurability); } data.WriteUInt32(CreatePlayedTime); - if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag.Owner)) - { - data.WriteUInt32(ModifiersMask); - } data.WriteInt32(Context); + data.WriteInt32(CreateTime); if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag.Owner)) { data.WriteUInt64(ArtifactXP); data.WriteUInt8(ItemAppearanceModID); } - data.WriteInt32(Modifiers.Size()); data.WriteInt32(ArtifactPowers.Size()); data.WriteInt32(Gems.Size()); if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag.Owner)) { data.WriteUInt32(DynamicFlags2); } - for (int i = 0; i < Modifiers.Size(); ++i) - { - data.WriteUInt32(Modifiers[i]); - } for (int i = 0; i < ArtifactPowers.Size(); ++i) { ArtifactPowers[i].WriteCreate(data, owner, receiver); @@ -371,11 +439,12 @@ namespace Game.Entities { Gems[i].WriteCreate(data, owner, receiver); } + ((ItemModList)Modifiers).WriteCreate(data, owner, receiver); } public void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Item owner, Player receiver) { - UpdateMask allowedMaskForTarget = new UpdateMask(40, new uint[] { 0xFC0149FFu, 0x000000FFu }); + UpdateMask allowedMaskForTarget = new UpdateMask(40, new uint[] { 0xFC04E4FFu, 0x000000FFu }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver); } @@ -383,15 +452,15 @@ namespace Game.Entities public void AppendAllowedFieldsMaskForFlag(UpdateMask allowedMaskForTarget, UpdateFieldFlag fieldVisibilityFlags) { if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag.Owner)) - allowedMaskForTarget |= new UpdateMask(40, new uint[] { 0x03FEB600u, 0x00000000u }); + allowedMaskForTarget |= new UpdateMask(40, new uint[] { 0x03FB1B00u, 0x00000000u }); } public void FilterDisallowedFieldsMaskForFlag(UpdateMask changesMask, UpdateFieldFlag fieldVisibilityFlags) { if (!fieldVisibilityFlags.HasFlag(UpdateFieldFlag.Owner)) - changesMask &= new UpdateMask(40, new uint[] { 0xFC0149FFu, 0xFFFFFFFFu }); + changesMask &= new UpdateMask(40, new uint[] { 0xFC04E4FFu, 0xFFFFFFFFu }); } - + public void WriteUpdate(WorldPacket data, UpdateMask changesMask, bool ignoreNestedChangesMask, Item owner, Player receiver) { data.WriteBits(changesMask.GetBlocksMask(0), 2); @@ -413,20 +482,13 @@ namespace Game.Entities if (changesMask[0]) { if (changesMask[2]) - { - if (!ignoreNestedChangesMask) - Modifiers.WriteUpdateMask(data); - else - WriteCompleteDynamicFieldUpdateMask(Modifiers.Size(), data); - } - if (changesMask[3]) { if (!ignoreNestedChangesMask) ArtifactPowers.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(ArtifactPowers.Size(), data); } - if (changesMask[4]) + if (changesMask[3]) { if (!ignoreNestedChangesMask) Gems.WriteUpdateMask(data); @@ -438,16 +500,6 @@ namespace Game.Entities if (changesMask[0]) { if (changesMask[2]) - { - for (int i = 0; i < Modifiers.Size(); ++i) - { - if (Modifiers.HasChanged(i) || ignoreNestedChangesMask) - { - data.WriteUInt32(Modifiers[i]); - } - } - } - if (changesMask[3]) { for (int i = 0; i < ArtifactPowers.Size(); ++i) { @@ -457,7 +509,7 @@ namespace Game.Entities } } } - if (changesMask[4]) + if (changesMask[3]) { for (int i = 0; i < Gems.Size(); ++i) { @@ -467,59 +519,59 @@ namespace Game.Entities } } } - if (changesMask[5]) + if (changesMask[4]) { data.WritePackedGuid(Owner); } - if (changesMask[6]) + if (changesMask[5]) { data.WritePackedGuid(ContainedIn); } - if (changesMask[7]) + if (changesMask[6]) { data.WritePackedGuid(Creator); } - if (changesMask[8]) + if (changesMask[7]) { data.WritePackedGuid(GiftCreator); } - if (changesMask[9]) + if (changesMask[8]) { data.WriteUInt32(StackCount); } - if (changesMask[10]) + if (changesMask[9]) { data.WriteUInt32(Expiration); } - if (changesMask[11]) + if (changesMask[10]) { data.WriteUInt32(DynamicFlags); } - if (changesMask[12]) + if (changesMask[11]) { data.WriteUInt32(Durability); } - if (changesMask[13]) + if (changesMask[12]) { data.WriteUInt32(MaxDurability); } - if (changesMask[14]) + if (changesMask[13]) { data.WriteUInt32(CreatePlayedTime); } - if (changesMask[15]) - { - data.WriteUInt32(ModifiersMask); - } - if (changesMask[16]) + if (changesMask[14]) { data.WriteInt32(Context); } - if (changesMask[17]) + if (changesMask[15]) + { + data.WriteInt32(CreateTime); + } + if (changesMask[16]) { data.WriteUInt64(ArtifactXP); } - if (changesMask[18]) + if (changesMask[17]) { data.WriteUInt8(ItemAppearanceModID); } @@ -527,6 +579,10 @@ namespace Game.Entities { data.WriteUInt32(DynamicFlags2); } + if (changesMask[18]) + { + ((ItemModList)Modifiers).WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } } if (changesMask[20]) { @@ -553,7 +609,6 @@ namespace Game.Entities public override void ClearChangesMask() { ClearChangesMask(BonusListIDs); - ClearChangesMask(Modifiers); ClearChangesMask(ArtifactPowers); ClearChangesMask(Gems); ClearChangesMask(Owner); @@ -566,10 +621,11 @@ namespace Game.Entities ClearChangesMask(Durability); ClearChangesMask(MaxDurability); ClearChangesMask(CreatePlayedTime); - ClearChangesMask(ModifiersMask); ClearChangesMask(Context); + ClearChangesMask(CreateTime); ClearChangesMask(ArtifactXP); ClearChangesMask(ItemAppearanceModID); + ClearChangesMask(Modifiers); ClearChangesMask(DynamicFlags2); ClearChangesMask(SpellCharges); ClearChangesMask(Enchantment); @@ -762,16 +818,17 @@ namespace Game.Entities public class AzeriteItemData : BaseUpdateData { - public DynamicUpdateField UnlockedEssences = new DynamicUpdateField(0, 1); - public DynamicUpdateField SelectedEssences = new DynamicUpdateField(0, 2); - public DynamicUpdateField UnlockedEssenceMilestones = new DynamicUpdateField(0, 3); - public UpdateField Xp = new UpdateField(0, 4); - public UpdateField Level = new UpdateField(0, 5); - public UpdateField AuraLevel = new UpdateField(0, 6); - public UpdateField KnowledgeLevel = new UpdateField(0, 7); - public UpdateField DEBUGknowledgeWeek = new UpdateField(0, 8); + public UpdateField Enabled = new UpdateField(0, 1); + public DynamicUpdateFieldUnlockedEssences = new DynamicUpdateField(0, 2); + public DynamicUpdateFieldUnlockedEssenceMilestones = new DynamicUpdateField(0, 4); + public DynamicUpdateFieldSelectedEssences = new DynamicUpdateField(0, 3); + public UpdateField Xp = new UpdateField(0, 5); + public UpdateField Level = new UpdateField(0, 6); + public UpdateField AuraLevel = new UpdateField(0, 7); + public UpdateField KnowledgeLevel = new UpdateField(0, 8); + public UpdateField DEBUGknowledgeWeek = new UpdateField(0, 9); - public AzeriteItemData() : base(9) { } + public AzeriteItemData() : base(10) { } public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, AzeriteItem owner, Player receiver) { @@ -794,15 +851,18 @@ namespace Game.Entities { data.WriteUInt32(UnlockedEssenceMilestones[i]); } + data.FlushBits(); + data.WriteBit(Enabled); for (int i = 0; i < SelectedEssences.Size(); ++i) { SelectedEssences[i].WriteCreate(data, owner, receiver); } + data.FlushBits(); } public void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, AzeriteItem owner, Player receiver) { - UpdateMask allowedMaskForTarget = new UpdateMask(9, new[] { 0x0000000Fu }); + UpdateMask allowedMaskForTarget = new UpdateMask(9, new[] { 0x0000001Fu }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver); } @@ -810,36 +870,40 @@ namespace Game.Entities public void AppendAllowedFieldsMaskForFlag(UpdateMask allowedMaskForTarget, UpdateFieldFlag fieldVisibilityFlags) { if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag.Owner)) - allowedMaskForTarget |= new UpdateMask(9, new[] { 0x000001F0u }); + allowedMaskForTarget |= new UpdateMask(9, new[] { 0x000003E0u }); } public void FilterDisallowedFieldsMaskForFlag(UpdateMask changesMask, UpdateFieldFlag fieldVisibilityFlags) { if (!fieldVisibilityFlags.HasFlag(UpdateFieldFlag.Owner)) - changesMask &= new UpdateMask(9, new[] { 0xFFFFFE0Fu }); + changesMask &= new UpdateMask(9, new[] { 0xFFFFFC1Fu }); } - + public void WriteUpdate(WorldPacket data, UpdateMask changesMask, bool ignoreNestedChangesMask, AzeriteItem owner, Player receiver) { - data.WriteBits(changesMask.GetBlock(0), 9); + data.WriteBits(changesMask.GetBlock(0), 10); if (changesMask[0]) { if (changesMask[1]) + { + data.WriteBit(Enabled); + } + if (changesMask[2]) { if (!ignoreNestedChangesMask) UnlockedEssences.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(UnlockedEssences.Size(), data); } - if (changesMask[2]) + if (changesMask[3]) { if (!ignoreNestedChangesMask) SelectedEssences.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(SelectedEssences.Size(), data); } - if (changesMask[3]) + if (changesMask[4]) { if (!ignoreNestedChangesMask) UnlockedEssenceMilestones.WriteUpdateMask(data); @@ -850,7 +914,7 @@ namespace Game.Entities data.FlushBits(); if (changesMask[0]) { - if (changesMask[1]) + if (changesMask[2]) { for (int i = 0; i < UnlockedEssences.Size(); ++i) { @@ -860,17 +924,7 @@ namespace Game.Entities } } } - if (changesMask[2]) - { - for (int i = 0; i < SelectedEssences.Size(); ++i) - { - if (SelectedEssences.HasChanged(i) || ignoreNestedChangesMask) - { - SelectedEssences[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); - } - } - } - if (changesMask[3]) + if (changesMask[4]) { for (int i = 0; i < UnlockedEssenceMilestones.Size(); ++i) { @@ -880,31 +934,43 @@ namespace Game.Entities } } } - if (changesMask[4]) + if (changesMask[3]) { - data.WriteUInt64(Xp); + for (int i = 0; i < SelectedEssences.Size(); ++i) + { + if (SelectedEssences.HasChanged(i) || ignoreNestedChangesMask) + { + SelectedEssences[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + } } if (changesMask[5]) { - data.WriteUInt32(Level); + data.WriteUInt64(Xp); } if (changesMask[6]) { - data.WriteUInt32(AuraLevel); + data.WriteUInt32(Level); } if (changesMask[7]) { - data.WriteUInt32(KnowledgeLevel); + data.WriteUInt32(AuraLevel); } if (changesMask[8]) + { + data.WriteUInt32(KnowledgeLevel); + } + if (changesMask[9]) { data.WriteInt32(DEBUGknowledgeWeek); } } + data.FlushBits(); } public override void ClearChangesMask() { + ClearChangesMask(Enabled); ClearChangesMask(UnlockedEssences); ClearChangesMask(UnlockedEssenceMilestones); ClearChangesMask(SelectedEssences); @@ -917,35 +983,56 @@ namespace Game.Entities } } + public struct SpellCastVisualField + { + public uint SpellXSpellVisualID; + public uint ScriptVisualID; + + public void WriteCreate(WorldPacket data, Object owner, Player receiver) + { + data.WriteUInt32(SpellXSpellVisualID); + data.WriteUInt32(ScriptVisualID); + } + + public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, WorldObject owner, Player receiver) + { + data.WriteUInt32(SpellXSpellVisualID); + data.WriteUInt32(ScriptVisualID); + } + } + public class UnitChannel { public uint SpellID; public uint SpellXSpellVisualID; + public SpellCastVisualField SpellVisual; public void WriteCreate(WorldPacket data, Unit owner, Player receiver) { data.WriteUInt32(SpellID); - data.WriteUInt32(SpellXSpellVisualID); + SpellVisual.WriteCreate(data, owner, receiver); } public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, Unit owner, Player receiver) { data.WriteUInt32(SpellID); - data.WriteUInt32(SpellXSpellVisualID); + SpellVisual.WriteUpdate(data, ignoreChangesMask, owner, receiver); } } public class VisibleItem : BaseUpdateData { public UpdateField ItemID = new UpdateField(0, 1); - public UpdateField ItemAppearanceModID = new UpdateField(0, 2); - public UpdateField ItemVisual = new UpdateField(0, 3); + public UpdateField ItemModifiedAppearanceID = new UpdateField(0, 2); + public UpdateField ItemAppearanceModID = new UpdateField(0, 3); + public UpdateField ItemVisual = new UpdateField(0, 4); - public VisibleItem() : base(4) { } + public VisibleItem() : base(5) { } public void WriteCreate(WorldPacket data, Unit owner, Player receiver) { data.WriteUInt32(ItemID); + data.WriteInt32(ItemModifiedAppearanceID); data.WriteUInt16(ItemAppearanceModID); data.WriteUInt16(ItemVisual); } @@ -956,7 +1043,7 @@ namespace Game.Entities if (ignoreChangesMask) changesMask.SetAll(); - data.WriteBits(changesMask.GetBlock(0), 4); + data.WriteBits(changesMask.GetBlock(0), 5); data.FlushBits(); if (changesMask[0]) @@ -967,9 +1054,13 @@ namespace Game.Entities } if (changesMask[2]) { - data.WriteUInt16(ItemAppearanceModID); + data.WriteInt32(ItemModifiedAppearanceID); } if (changesMask[3]) + { + data.WriteUInt16(ItemAppearanceModID); + } + if (changesMask[4]) { data.WriteUInt16(ItemVisual); } @@ -979,6 +1070,7 @@ namespace Game.Entities public override void ClearChangesMask() { ClearChangesMask(ItemID); + ClearChangesMask(ItemModifiedAppearanceID); ClearChangesMask(ItemAppearanceModID); ClearChangesMask(ItemVisual); _changesMask.ResetAll(); @@ -1014,125 +1106,128 @@ namespace Game.Entities public UpdateField StateAnimID = new UpdateField(0, 7); public UpdateField StateAnimKitID = new UpdateField(0, 8); public UpdateField StateWorldEffectsQuestObjectiveID = new UpdateField(0, 9); - public UpdateField Charm = new UpdateField(0, 10); - public UpdateField Summon = new UpdateField(0, 11); - public UpdateField Critter = new UpdateField(0, 12); - public UpdateField CharmedBy = new UpdateField(0, 13); - public UpdateField SummonedBy = new UpdateField(0, 14); - public UpdateField CreatedBy = new UpdateField(0, 15); - public UpdateField DemonCreator = new UpdateField(0, 16); - public UpdateField LookAtControllerTarget = new UpdateField(0, 17); - public UpdateField Target = new UpdateField(0, 18); - public UpdateField BattlePetCompanionGUID = new UpdateField(0, 19); - public UpdateField BattlePetDBID = new UpdateField(0, 20); - public UpdateField ChannelData = new UpdateField(0, 21); - public UpdateField SummonedByHomeRealm = new UpdateField(0, 22); - public UpdateField Race = new UpdateField(0, 23); - public UpdateField ClassId = new UpdateField(0, 24); - public UpdateField PlayerClassId = new UpdateField(0, 25); - public UpdateField Sex = new UpdateField(0, 26); - public UpdateField DisplayPower = new UpdateField(0, 27); - public UpdateField OverrideDisplayPowerID = new UpdateField(0, 28); - public UpdateField Health = new UpdateField(0, 29); - public UpdateField MaxHealth = new UpdateField(0, 30); - public UpdateField Level = new UpdateField(0, 31); - public UpdateField EffectiveLevel = new UpdateField(32, 33); - public UpdateField ContentTuningID = new UpdateField(32, 34); - public UpdateField ScalingLevelMin = new UpdateField(32, 35); - public UpdateField ScalingLevelMax = new UpdateField(32, 36); - public UpdateField ScalingLevelDelta = new UpdateField(32, 37); - public UpdateField ScalingFactionGroup = new UpdateField(32, 38); - public UpdateField ScalingHealthItemLevelCurveID = new UpdateField(32, 39); - public UpdateField ScalingDamageItemLevelCurveID = new UpdateField(32, 40); - public UpdateField FactionTemplate = new UpdateField(32, 41); - public UpdateField Flags = new UpdateField(32, 42); - public UpdateField Flags2 = new UpdateField(32, 43); - public UpdateField Flags3 = new UpdateField(32, 44); - public UpdateField AuraState = new UpdateField(32, 45); - public UpdateField RangedAttackRoundBaseTime = new UpdateField(32, 46); - public UpdateField BoundingRadius = new UpdateField(32, 47); - public UpdateField CombatReach = new UpdateField(32, 48); - public UpdateField DisplayScale = new UpdateField(32, 49); - public UpdateField NativeDisplayID = new UpdateField(32, 50); - public UpdateField NativeXDisplayScale = new UpdateField(32, 51); - public UpdateField MountDisplayID = new UpdateField(32, 52); - public UpdateField CosmeticMountDisplayID = new UpdateField(32, 53); - public UpdateField MinDamage = new UpdateField(32, 54); - public UpdateField MaxDamage = new UpdateField(32, 55); - public UpdateField MinOffHandDamage = new UpdateField(32, 56); - public UpdateField MaxOffHandDamage = new UpdateField(32, 57); - public UpdateField StandState = new UpdateField(32, 58); - public UpdateField PetTalentPoints = new UpdateField(32, 59); - public UpdateField VisFlags = new UpdateField(32, 60); - public UpdateField AnimTier = new UpdateField(32, 61); - public UpdateField PetNumber = new UpdateField(32, 62); - public UpdateField PetNameTimestamp = new UpdateField(32, 63); - public UpdateField PetExperience = new UpdateField(64, 65); - public UpdateField PetNextLevelExperience = new UpdateField(64, 66); - public UpdateField ModCastingSpeed = new UpdateField(64, 67); - public UpdateField ModSpellHaste = new UpdateField(64, 68); - public UpdateField ModHaste = new UpdateField(64, 69); - public UpdateField ModRangedHaste = new UpdateField(64, 70); - public UpdateField ModHasteRegen = new UpdateField(64, 71); - public UpdateField ModTimeRate = new UpdateField(64, 72); - public UpdateField CreatedBySpell = new UpdateField(64, 73); - public UpdateField EmoteState = new UpdateField(64, 74); - public UpdateField BaseMana = new UpdateField(64, 75); - public UpdateField BaseHealth = new UpdateField(64, 76); - public UpdateField SheatheState = new UpdateField(64, 77); - public UpdateField PvpFlags = new UpdateField(64, 78); - public UpdateField PetFlags = new UpdateField(64, 79); - public UpdateField ShapeshiftForm = new UpdateField(64, 80); - public UpdateField AttackPower = new UpdateField(64, 81); - public UpdateField AttackPowerModPos = new UpdateField(64, 82); - public UpdateField AttackPowerModNeg = new UpdateField(64, 83); - public UpdateField AttackPowerMultiplier = new UpdateField(64, 84); - public UpdateField RangedAttackPower = new UpdateField(64, 85); - public UpdateField RangedAttackPowerModPos = new UpdateField(64, 86); - public UpdateField RangedAttackPowerModNeg = new UpdateField(64, 87); - public UpdateField RangedAttackPowerMultiplier = new UpdateField(64, 88); - public UpdateField MainHandWeaponAttackPower = new UpdateField(64, 89); - public UpdateField OffHandWeaponAttackPower = new UpdateField(64, 90); - public UpdateField RangedWeaponAttackPower = new UpdateField(64, 91); - public UpdateField SetAttackSpeedAura = new UpdateField(64, 92); - public UpdateField Lifesteal = new UpdateField(64, 93); - public UpdateField MinRangedDamage = new UpdateField(64, 94); - public UpdateField MaxRangedDamage = new UpdateField(64, 95); - public UpdateField ManaCostModifierModifier = new UpdateField(96, 97); - public UpdateField MaxHealthModifier = new UpdateField(96, 98); - public UpdateField HoverHeight = new UpdateField(96, 99); - public UpdateField MinItemLevelCutoff = new UpdateField(96, 100); - public UpdateField MinItemLevel = new UpdateField(96, 101); - public UpdateField MaxItemLevel = new UpdateField(96, 102); - public UpdateField AzeriteItemLevel = new UpdateField(96, 103); - public UpdateField WildBattlePetLevel = new UpdateField(96, 104); - public UpdateField BattlePetCompanionNameTimestamp = new UpdateField(96, 105); - public UpdateField InteractSpellID = new UpdateField(96, 106); - public UpdateField ScaleDuration = new UpdateField(96, 107); - public UpdateField SpellOverrideNameID = new UpdateField(96, 108); - public UpdateField LooksLikeMountID = new UpdateField(96, 109); - public UpdateField LooksLikeCreatureID = new UpdateField(96, 110); - public UpdateField LookAtControllerID = new UpdateField(96, 111); - public UpdateField TaxiNodesID = new UpdateField(96, 112); - public UpdateField GuildGUID = new UpdateField(96, 113); - public UpdateFieldSkinningOwnerGUID = new UpdateField(96, 114); - public UpdateFieldArray NpcFlags = new UpdateFieldArray(2, 114, 115); + public UpdateField SpellOverrideNameID = new UpdateField(0, 10); + public UpdateField Charm = new UpdateField(0, 11); + public UpdateField Summon = new UpdateField(0, 12); + public UpdateField Critter = new UpdateField(0, 13); + public UpdateField CharmedBy = new UpdateField(0, 14); + public UpdateField SummonedBy = new UpdateField(0, 15); + public UpdateField CreatedBy = new UpdateField(0, 16); + public UpdateField DemonCreator = new UpdateField(0, 17); + public UpdateField LookAtControllerTarget = new UpdateField(0, 18); + public UpdateField Target = new UpdateField(0, 19); + public UpdateField BattlePetCompanionGUID = new UpdateField(0, 20); + public UpdateField BattlePetDBID = new UpdateField(0, 21); + public UpdateField ChannelData = new UpdateField(0, 22); + public UpdateField SummonedByHomeRealm = new UpdateField(0, 23); + public UpdateField Race = new UpdateField(0, 24); + public UpdateField ClassId = new UpdateField(0, 25); + public UpdateField PlayerClassId = new UpdateField(0, 26); + public UpdateField Sex = new UpdateField(0, 27); + public UpdateField DisplayPower = new UpdateField(0, 28); + public UpdateField OverrideDisplayPowerID = new UpdateField(0, 29); + public UpdateField Health = new UpdateField(0, 30); + public UpdateField MaxHealth = new UpdateField(0, 31); + public UpdateField Level = new UpdateField(32, 33); + public UpdateField EffectiveLevel = new UpdateField(32, 34); + public UpdateField ContentTuningID = new UpdateField(32, 35); + public UpdateField ScalingLevelMin = new UpdateField(32, 36); + public UpdateField ScalingLevelMax = new UpdateField(32, 37); + public UpdateField ScalingLevelDelta = new UpdateField(32, 38); + public UpdateField ScalingFactionGroup = new UpdateField(32, 39); + public UpdateField ScalingHealthItemLevelCurveID = new UpdateField(32, 40); + public UpdateField ScalingDamageItemLevelCurveID = new UpdateField(32, 41); + public UpdateField FactionTemplate = new UpdateField(32, 42); + public UpdateField Flags = new UpdateField(32, 43); + public UpdateField Flags2 = new UpdateField(32, 44); + public UpdateField Flags3 = new UpdateField(32, 45); + public UpdateField AuraState = new UpdateField(32, 46); + public UpdateField RangedAttackRoundBaseTime = new UpdateField(32, 47); + public UpdateField BoundingRadius = new UpdateField(32, 48); + public UpdateField CombatReach = new UpdateField(32, 49); + public UpdateField DisplayScale = new UpdateField(32, 50); + public UpdateField CreatureFamily = new UpdateField(32, 51); + public UpdateField CreatureType = new UpdateField(32, 52); + public UpdateField NativeDisplayID = new UpdateField(32, 53); + public UpdateField NativeXDisplayScale = new UpdateField(32, 54); + public UpdateField MountDisplayID = new UpdateField(32, 55); + public UpdateField CosmeticMountDisplayID = new UpdateField(32, 56); + public UpdateField MinDamage = new UpdateField(32, 57); + public UpdateField MaxDamage = new UpdateField(32, 58); + public UpdateField MinOffHandDamage = new UpdateField(32, 59); + public UpdateField MaxOffHandDamage = new UpdateField(32, 60); + public UpdateField StandState = new UpdateField(32, 61); + public UpdateField PetTalentPoints = new UpdateField(32, 62); + public UpdateField VisFlags = new UpdateField(32, 63); + public UpdateField AnimTier = new UpdateField(64, 65); + public UpdateField PetNumber = new UpdateField(64, 66); + public UpdateField PetNameTimestamp = new UpdateField(64, 67); + public UpdateField PetExperience = new UpdateField(64, 68); + public UpdateField PetNextLevelExperience = new UpdateField(64, 69); + public UpdateField ModCastingSpeed = new UpdateField(64, 70); + public UpdateField ModCastingSpeedNeg = new UpdateField(64, 71); + public UpdateField ModSpellHaste = new UpdateField(64, 72); + public UpdateField ModHaste = new UpdateField(64, 73); + public UpdateField ModRangedHaste = new UpdateField(64, 74); + public UpdateField ModHasteRegen = new UpdateField(64, 75); + public UpdateField ModTimeRate = new UpdateField(64, 76); + public UpdateField CreatedBySpell = new UpdateField(64, 77); + public UpdateField EmoteState = new UpdateField(64, 78); + public UpdateField BaseMana = new UpdateField(64, 79); + public UpdateField BaseHealth = new UpdateField(64, 80); + public UpdateField SheatheState = new UpdateField(64, 81); + public UpdateField PvpFlags = new UpdateField(64, 82); + public UpdateField PetFlags = new UpdateField(64, 83); + public UpdateField ShapeshiftForm = new UpdateField(64, 84); + public UpdateField AttackPower = new UpdateField(64, 85); + public UpdateField AttackPowerModPos = new UpdateField(64, 86); + public UpdateField AttackPowerModNeg = new UpdateField(64, 87); + public UpdateField AttackPowerMultiplier = new UpdateField(64, 88); + public UpdateField RangedAttackPower = new UpdateField(64, 89); + public UpdateField RangedAttackPowerModPos = new UpdateField(64, 90); + public UpdateField RangedAttackPowerModNeg = new UpdateField(64, 91); + public UpdateField RangedAttackPowerMultiplier = new UpdateField(64, 92); + public UpdateField MainHandWeaponAttackPower = new UpdateField(64, 93); + public UpdateField OffHandWeaponAttackPower = new UpdateField(64, 94); + public UpdateField RangedWeaponAttackPower = new UpdateField(64, 95); + public UpdateField SetAttackSpeedAura = new UpdateField(96, 97); + public UpdateField Lifesteal = new UpdateField(96, 98); + public UpdateField MinRangedDamage = new UpdateField(96, 99); + public UpdateField MaxRangedDamage = new UpdateField(96, 100); + public UpdateField ManaCostModifierModifier = new UpdateField(96, 101); + public UpdateField MaxHealthModifier = new UpdateField(96, 102); + public UpdateField HoverHeight = new UpdateField(96, 103); + public UpdateField MinItemLevelCutoff = new UpdateField(96, 104); + public UpdateField MinItemLevel = new UpdateField(96, 105); + public UpdateField MaxItemLevel = new UpdateField(96, 106); + public UpdateField AzeriteItemLevel = new UpdateField(96, 107); + public UpdateField WildBattlePetLevel = new UpdateField(96, 108); + public UpdateField BattlePetCompanionNameTimestamp = new UpdateField(96, 109); + public UpdateField InteractSpellID = new UpdateField(96, 110); + public UpdateField ScaleDuration = new UpdateField(96, 111); + public UpdateField LooksLikeMountID = new UpdateField(96, 112); + public UpdateField LooksLikeCreatureID = new UpdateField(96, 113); + public UpdateField LookAtControllerID = new UpdateField(96, 114); + public UpdateField TaxiNodesID = new UpdateField(96, 115); + public UpdateField GuildGUID = new UpdateField(96, 116); + public UpdateField SkinningOwnerGUID = new UpdateField(96, 117); + public UpdateField SilencedSchoolMask = new UpdateField(96, 118); + public UpdateFieldArray NpcFlags = new UpdateFieldArray(2, 119, 120); + public UpdateFieldArray Power = new UpdateFieldArray(6, 122, 123); + public UpdateFieldArray MaxPower = new UpdateFieldArray(6, 122, 129); + public UpdateFieldArray PowerRegenFlatModifier = new UpdateFieldArray(6, 122, 135); + public UpdateFieldArray PowerRegenInterruptedFlatModifier = new UpdateFieldArray(6, 122, 141); + public UpdateFieldArray VirtualItems = new UpdateFieldArray(3, 147, 148); + public UpdateFieldArray AttackRoundBaseTime = new UpdateFieldArray(2, 151, 152); + public UpdateFieldArray Stats = new UpdateFieldArray(4, 154, 155); + public UpdateFieldArray StatPosBuff = new UpdateFieldArray(4, 154, 159); + public UpdateFieldArray StatNegBuff = new UpdateFieldArray(4, 154, 163); + public UpdateFieldArray Resistances = new UpdateFieldArray(7, 167, 168); + public UpdateFieldArray BonusResistanceMods = new UpdateFieldArray(7, 167, 175); + public UpdateFieldArray PowerCostModifier = new UpdateFieldArray(7, 167, 182); + public UpdateFieldArray PowerCostMultiplier = new UpdateFieldArray(7, 167, 189); - public UpdateFieldArrayPower = new UpdateFieldArray(6, 118, 119); - public UpdateFieldArrayMaxPower = new UpdateFieldArray(6, 118, 125); - public UpdateFieldArrayPowerRegenFlatModifier = new UpdateFieldArray(6, 118, 131); - public UpdateFieldArrayPowerRegenInterruptedFlatModifier = new UpdateFieldArray(6, 118, 137); - public UpdateFieldArrayVirtualItems = new UpdateFieldArray(3, 143, 144); - public UpdateFieldArrayAttackRoundBaseTime = new UpdateFieldArray(2, 147, 148); - public UpdateFieldArrayStats = new UpdateFieldArray(4, 150, 151); - public UpdateFieldArrayStatPosBuff = new UpdateFieldArray(4, 150, 155); - public UpdateFieldArrayStatNegBuff = new UpdateFieldArray(4, 150, 159); - public UpdateFieldArrayResistances = new UpdateFieldArray(7, 163, 164); - public UpdateFieldArrayBonusResistanceMods = new UpdateFieldArray(7, 163, 171); - public UpdateFieldArrayPowerCostModifier = new UpdateFieldArray(7, 163, 178); - public UpdateFieldArrayPowerCostMultiplier = new UpdateFieldArray(7, 163, 185); - - public UnitData() : base(0, TypeId.Unit, 192) { } + public UnitData() : base(0, TypeId.Unit, 196) { } public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Unit owner, Player receiver) { @@ -1145,6 +1240,7 @@ namespace Game.Entities data.WriteUInt32(StateAnimKitID); data.WriteInt32(((List)StateWorldEffectIDs).Count); data.WriteUInt32(StateWorldEffectsQuestObjectiveID); + data.WriteInt32(SpellOverrideNameID); for (int i = 0; i < ((List)StateWorldEffectIDs).Count; ++i) data.WriteUInt32(((List)StateWorldEffectIDs)[i]); @@ -1210,6 +1306,8 @@ namespace Game.Entities data.WriteFloat(BoundingRadius); data.WriteFloat(CombatReach); data.WriteFloat(DisplayScale); + data.WriteInt32(CreatureFamily); + data.WriteInt32(CreatureType); data.WriteUInt32(NativeDisplayID); data.WriteFloat(NativeXDisplayScale); data.WriteUInt32(MountDisplayID); @@ -1230,6 +1328,7 @@ namespace Game.Entities data.WriteUInt32(PetExperience); data.WriteUInt32(PetNextLevelExperience); data.WriteFloat(ModCastingSpeed); + data.WriteFloat(ModCastingSpeedNeg); data.WriteFloat(ModSpellHaste); data.WriteFloat(ModHaste); data.WriteFloat(ModRangedHaste); @@ -1299,7 +1398,6 @@ namespace Game.Entities data.WriteUInt32(BattlePetCompanionNameTimestamp); data.WriteInt32(InteractSpellID); data.WriteInt32(ScaleDuration); - data.WriteInt32(SpellOverrideNameID); data.WriteInt32(LooksLikeMountID); data.WriteInt32(LooksLikeCreatureID); data.WriteInt32(LookAtControllerID); @@ -1309,6 +1407,7 @@ namespace Game.Entities data.WriteInt32(WorldEffects.Size()); data.WriteInt32(ChannelObjects.Size()); data.WritePackedGuid(SkinningOwnerGUID); + data.WriteUInt32(SilencedSchoolMask); for (int i = 0; i < PassiveSpells.Size(); ++i) PassiveSpells[i].WriteCreate(data, owner, receiver); @@ -1322,7 +1421,7 @@ namespace Game.Entities public void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Unit owner, Player receiver) { - UpdateMask allowedMaskForTarget = new UpdateMask(192, new uint[] { 0xFFFFEFFFu, 0xFC3FBFFFu, 0x0001EFFFu, 0xFFBFFFF9u, 0x003F8007u, 0x00000000u }); + UpdateMask allowedMaskForTarget = new UpdateMask(192, new uint[] { 0xFFFFDFFFu, 0xE1FF7FFFu, 0x001EFFFFu, 0xFBFFFF81u, 0x03F8007Fu, 0x00000000u, 0x00000000u }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver); } @@ -1330,27 +1429,27 @@ namespace Game.Entities public void AppendAllowedFieldsMaskForFlag(UpdateMask allowedMaskForTarget, UpdateFieldFlag fieldVisibilityFlags) { if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag.Owner)) - allowedMaskForTarget |= new UpdateMask(192, new uint[] { 0x00001000u, 0x03C04000u, 0xFFFE1000u, 0x00400006u, 0xFFC07FF8u, 0xFFFFFFFFu }); + allowedMaskForTarget |= new UpdateMask(192, new uint[] { 0x00002000u, 0x1E008000u, 0xFFE10000u, 0x0400007Eu, 0xFC07FF80u, 0xFFFFFFFFu, 0x0000000Fu }); if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag.UnitAll)) - allowedMaskForTarget |= new UpdateMask(192, new uint[] { 0x00000000u, 0x00000000u, 0x00000000u, 0x00400000u, 0x00007FF8u, 0x00000000u }); + allowedMaskForTarget |= new UpdateMask(192, new uint[] { 0x00000000u, 0x00000000u, 0x00000000u, 0x04000000u, 0x0007FF80u, 0x00000000u, 0x00000000 }); if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag.Empath)) - allowedMaskForTarget |= new UpdateMask(192, new uint[] { 0x00000000u, 0x03C00000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x000007F8u }); + allowedMaskForTarget |= new UpdateMask(192, new uint[] { 0x00000000u, 0x1E000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00007F80u, 0x00000000u }); } public void FilterDisallowedFieldsMaskForFlag(UpdateMask changesMask, UpdateFieldFlag fieldVisibilityFlags) { if (!fieldVisibilityFlags.HasFlag(UpdateFieldFlag.Owner)) - changesMask &= new UpdateMask(192, new uint[] { 0xFFFFEFFFu, 0xFC3FBFFFu, 0x0001EFFFu, 0xFFBFFFF9u, 0x003F8007u, 0x00000000u }); + changesMask &= new UpdateMask(192, new uint[] { 0xFFFFDFFFu, 0xE1FF7FFFu, 0x001EFFFFu, 0xFBFFFF81u, 0x03F8007Fu, 0x00000000u, 0xFFFFFFF0u }); if (!fieldVisibilityFlags.HasFlag(UpdateFieldFlag.UnitAll)) - changesMask &= new UpdateMask(192, new uint[] { 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFBFFFFFu, 0xFFFF8007u, 0xFFFFFFFFu }); + changesMask &= new UpdateMask(192, new uint[] { 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFBFFFFFFu, 0xFFF8007Fu, 0xFFFFFFFFu, 0xFFFFFFFFu }); if (!fieldVisibilityFlags.HasFlag(UpdateFieldFlag.Empath)) - changesMask &= new UpdateMask(192, new uint[] { 0xFFFFFFFFu, 0xFC3FFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFF807u }); + changesMask &= new UpdateMask(192, new uint[] { 0xFFFFFFFFu, 0xE1FFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFF807Fu, 0xFFFFFFFFu }); } - + public void WriteUpdate(WorldPacket data, UpdateMask changesMask, bool ignoreNestedChangesMask, Unit owner, Player receiver) { - data.WriteBits(changesMask.GetBlocksMask(0), 6); - for (uint i = 0; i < 6; ++i) + data.WriteBits(changesMask.GetBlocksMask(0), 7); + for (uint i = 0; i < 7; ++i) if (changesMask.GetBlock(i) != 0) data.WriteBits(changesMask.GetBlock(i), 32); @@ -1358,11 +1457,10 @@ namespace Game.Entities { if (changesMask[1]) { - List list = StateWorldEffectIDs; - data.WriteBits(list.Count, 32); - for (int i = 0; i < list.Count; ++i) + data.WriteBits(((List)StateWorldEffectIDs).Count, 32); + for (int i = 0; i < ((List)StateWorldEffectIDs).Count; ++i) { - data.WriteUInt32(list[i]); + data.WriteUInt32(((List)StateWorldEffectIDs)[i]); } } } @@ -1446,512 +1544,524 @@ namespace Game.Entities } if (changesMask[10]) { - data.WritePackedGuid(Charm); + data.WriteInt32(SpellOverrideNameID); } if (changesMask[11]) { - data.WritePackedGuid(Summon); + data.WritePackedGuid(Charm); } if (changesMask[12]) { - data.WritePackedGuid(Critter); + data.WritePackedGuid(Summon); } if (changesMask[13]) { - data.WritePackedGuid(CharmedBy); + data.WritePackedGuid(Critter); } if (changesMask[14]) { - data.WritePackedGuid(SummonedBy); + data.WritePackedGuid(CharmedBy); } if (changesMask[15]) { - data.WritePackedGuid(CreatedBy); + data.WritePackedGuid(SummonedBy); } if (changesMask[16]) { - data.WritePackedGuid(DemonCreator); + data.WritePackedGuid(CreatedBy); } if (changesMask[17]) { - data.WritePackedGuid(LookAtControllerTarget); + data.WritePackedGuid(DemonCreator); } if (changesMask[18]) { - data.WritePackedGuid(Target); + data.WritePackedGuid(LookAtControllerTarget); } if (changesMask[19]) { - data.WritePackedGuid(BattlePetCompanionGUID); + data.WritePackedGuid(Target); } if (changesMask[20]) { - data.WriteUInt64(BattlePetDBID); + data.WritePackedGuid(BattlePetCompanionGUID); } if (changesMask[21]) { - ((UnitChannel)ChannelData).WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + data.WriteUInt64(BattlePetDBID); } if (changesMask[22]) { - data.WriteUInt32(SummonedByHomeRealm); + ((UnitChannel)ChannelData).WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } if (changesMask[23]) { - data.WriteUInt8(Race); + data.WriteUInt32(SummonedByHomeRealm); } if (changesMask[24]) { - data.WriteUInt8(ClassId); + data.WriteUInt8(Race); } if (changesMask[25]) { - data.WriteUInt8(PlayerClassId); + data.WriteUInt8(ClassId); } if (changesMask[26]) { - data.WriteUInt8(Sex); + data.WriteUInt8(PlayerClassId); } if (changesMask[27]) { - data.WriteUInt8(DisplayPower); + data.WriteUInt8(Sex); } if (changesMask[28]) { - data.WriteUInt32(OverrideDisplayPowerID); + data.WriteUInt8(DisplayPower); } if (changesMask[29]) { - data.WriteUInt64(Health); + data.WriteUInt32(OverrideDisplayPowerID); } if (changesMask[30]) { - data.WriteUInt64(MaxHealth); + data.WriteUInt64(Health); } if (changesMask[31]) { - data.WriteUInt32(Level); + data.WriteUInt64(MaxHealth); } } if (changesMask[32]) { if (changesMask[33]) { - data.WriteInt32(EffectiveLevel); + data.WriteUInt32(Level); } if (changesMask[34]) { - data.WriteUInt32(ContentTuningID); + data.WriteInt32(EffectiveLevel); } if (changesMask[35]) { - data.WriteInt32(ScalingLevelMin); + data.WriteUInt32(ContentTuningID); } if (changesMask[36]) { - data.WriteInt32(ScalingLevelMax); + data.WriteInt32(ScalingLevelMin); } if (changesMask[37]) { - data.WriteInt32(ScalingLevelDelta); + data.WriteInt32(ScalingLevelMax); } if (changesMask[38]) { - data.WriteInt32(ScalingFactionGroup); + data.WriteInt32(ScalingLevelDelta); } if (changesMask[39]) { - data.WriteInt32(ScalingHealthItemLevelCurveID); + data.WriteInt32(ScalingFactionGroup); } if (changesMask[40]) { - data.WriteInt32(ScalingDamageItemLevelCurveID); + data.WriteInt32(ScalingHealthItemLevelCurveID); } if (changesMask[41]) { - data.WriteUInt32(GetViewerDependentFactionTemplate(FactionTemplate, owner, receiver)); + data.WriteInt32(ScalingDamageItemLevelCurveID); } if (changesMask[42]) { - data.WriteUInt32(GetViewerDependentFlags(Flags, owner, receiver)); + data.WriteUInt32(GetViewerDependentFactionTemplate(FactionTemplate, owner, receiver)); } if (changesMask[43]) { - data.WriteUInt32(Flags2); + data.WriteUInt32(GetViewerDependentFlags(Flags, owner, receiver)); } if (changesMask[44]) { - data.WriteUInt32(Flags3); + data.WriteUInt32(Flags2); } if (changesMask[45]) { - data.WriteUInt32(GetViewerDependentAuraState(AuraState, owner, receiver)); + data.WriteUInt32(Flags3); } if (changesMask[46]) { - data.WriteUInt32(RangedAttackRoundBaseTime); + data.WriteUInt32(GetViewerDependentAuraState(AuraState, owner, receiver)); } if (changesMask[47]) { - data.WriteFloat(BoundingRadius); + data.WriteUInt32(RangedAttackRoundBaseTime); } if (changesMask[48]) { - data.WriteFloat(CombatReach); + data.WriteFloat(BoundingRadius); } if (changesMask[49]) { - data.WriteFloat(DisplayScale); + data.WriteFloat(CombatReach); } if (changesMask[50]) { - data.WriteUInt32(NativeDisplayID); + data.WriteFloat(DisplayScale); } if (changesMask[51]) { - data.WriteFloat(NativeXDisplayScale); + data.WriteInt32(CreatureFamily); } if (changesMask[52]) { - data.WriteUInt32(MountDisplayID); + data.WriteInt32(CreatureType); } if (changesMask[53]) { - data.WriteInt32(CosmeticMountDisplayID); + data.WriteUInt32(NativeDisplayID); } if (changesMask[54]) { - data.WriteFloat(MinDamage); + data.WriteFloat(NativeXDisplayScale); } if (changesMask[55]) { - data.WriteFloat(MaxDamage); + data.WriteUInt32(MountDisplayID); } if (changesMask[56]) { - data.WriteFloat(MinOffHandDamage); + data.WriteInt32(CosmeticMountDisplayID); } if (changesMask[57]) { - data.WriteFloat(MaxOffHandDamage); + data.WriteFloat(MinDamage); } if (changesMask[58]) { - data.WriteUInt8(StandState); + data.WriteFloat(MaxDamage); } if (changesMask[59]) { - data.WriteUInt8(PetTalentPoints); + data.WriteFloat(MinOffHandDamage); } if (changesMask[60]) { - data.WriteUInt8(VisFlags); + data.WriteFloat(MaxOffHandDamage); } if (changesMask[61]) { - data.WriteUInt8(AnimTier); + data.WriteUInt8(StandState); } if (changesMask[62]) { - data.WriteUInt32(PetNumber); + data.WriteUInt8(PetTalentPoints); } if (changesMask[63]) { - data.WriteUInt32(PetNameTimestamp); + data.WriteUInt8(VisFlags); } } if (changesMask[64]) { if (changesMask[65]) { - data.WriteUInt32(PetExperience); + data.WriteUInt8(AnimTier); } if (changesMask[66]) { - data.WriteUInt32(PetNextLevelExperience); + data.WriteUInt32(PetNumber); } if (changesMask[67]) { - data.WriteFloat(ModCastingSpeed); + data.WriteUInt32(PetNameTimestamp); } if (changesMask[68]) { - data.WriteFloat(ModSpellHaste); + data.WriteUInt32(PetExperience); } if (changesMask[69]) { - data.WriteFloat(ModHaste); + data.WriteUInt32(PetNextLevelExperience); } if (changesMask[70]) { - data.WriteFloat(ModRangedHaste); + data.WriteFloat(ModCastingSpeed); } if (changesMask[71]) { - data.WriteFloat(ModHasteRegen); + data.WriteFloat(ModCastingSpeedNeg); } if (changesMask[72]) { - data.WriteFloat(ModTimeRate); + data.WriteFloat(ModSpellHaste); } if (changesMask[73]) { - data.WriteUInt32(CreatedBySpell); + data.WriteFloat(ModHaste); } if (changesMask[74]) { - data.WriteInt32(EmoteState); + data.WriteFloat(ModRangedHaste); } if (changesMask[75]) { - data.WriteUInt32(BaseMana); + data.WriteFloat(ModHasteRegen); } if (changesMask[76]) { - data.WriteUInt32(BaseHealth); + data.WriteFloat(ModTimeRate); } if (changesMask[77]) { - data.WriteUInt8(SheatheState); + data.WriteUInt32(CreatedBySpell); } if (changesMask[78]) { - data.WriteUInt8((byte)GetViewerDependentPvpFlags(PvpFlags, owner, receiver)); + data.WriteInt32(EmoteState); } if (changesMask[79]) { - data.WriteUInt8(PetFlags); + data.WriteUInt32(BaseMana); } if (changesMask[80]) { - data.WriteUInt8(ShapeshiftForm); + data.WriteUInt32(BaseHealth); } if (changesMask[81]) { - data.WriteInt32(AttackPower); + data.WriteUInt8(SheatheState); } if (changesMask[82]) { - data.WriteInt32(AttackPowerModPos); + data.WriteUInt8((byte)GetViewerDependentPvpFlags(PvpFlags, owner, receiver)); } if (changesMask[83]) { - data.WriteInt32(AttackPowerModNeg); + data.WriteUInt8(PetFlags); } if (changesMask[84]) { - data.WriteFloat(AttackPowerMultiplier); + data.WriteUInt8(ShapeshiftForm); } if (changesMask[85]) { - data.WriteInt32(RangedAttackPower); + data.WriteInt32(AttackPower); } if (changesMask[86]) { - data.WriteInt32(RangedAttackPowerModPos); + data.WriteInt32(AttackPowerModPos); } if (changesMask[87]) { - data.WriteInt32(RangedAttackPowerModNeg); + data.WriteInt32(AttackPowerModNeg); } if (changesMask[88]) { - data.WriteFloat(RangedAttackPowerMultiplier); + data.WriteFloat(AttackPowerMultiplier); } if (changesMask[89]) { - data.WriteInt32(MainHandWeaponAttackPower); + data.WriteInt32(RangedAttackPower); } if (changesMask[90]) { - data.WriteInt32(OffHandWeaponAttackPower); + data.WriteInt32(RangedAttackPowerModPos); } if (changesMask[91]) { - data.WriteInt32(RangedWeaponAttackPower); + data.WriteInt32(RangedAttackPowerModNeg); } if (changesMask[92]) { - data.WriteInt32(SetAttackSpeedAura); + data.WriteFloat(RangedAttackPowerMultiplier); } if (changesMask[93]) { - data.WriteFloat(Lifesteal); + data.WriteInt32(MainHandWeaponAttackPower); } if (changesMask[94]) { - data.WriteFloat(MinRangedDamage); + data.WriteInt32(OffHandWeaponAttackPower); } if (changesMask[95]) { - data.WriteFloat(MaxRangedDamage); + data.WriteInt32(RangedWeaponAttackPower); } } if (changesMask[96]) { if (changesMask[97]) { - data.WriteFloat(ManaCostModifierModifier); + data.WriteInt32(SetAttackSpeedAura); } if (changesMask[98]) { - data.WriteFloat(MaxHealthModifier); + data.WriteFloat(Lifesteal); } if (changesMask[99]) { - data.WriteFloat(HoverHeight); + data.WriteFloat(MinRangedDamage); } if (changesMask[100]) { - data.WriteUInt32(MinItemLevelCutoff); + data.WriteFloat(MaxRangedDamage); } if (changesMask[101]) { - data.WriteUInt32(MinItemLevel); + data.WriteFloat(ManaCostModifierModifier); } if (changesMask[102]) { - data.WriteUInt32(MaxItemLevel); + data.WriteFloat(MaxHealthModifier); } if (changesMask[103]) { - data.WriteInt32(AzeriteItemLevel); + data.WriteFloat(HoverHeight); } if (changesMask[104]) { - data.WriteInt32(WildBattlePetLevel); + data.WriteUInt32(MinItemLevelCutoff); } if (changesMask[105]) { - data.WriteUInt32(BattlePetCompanionNameTimestamp); + data.WriteUInt32(MinItemLevel); } if (changesMask[106]) { - data.WriteInt32(InteractSpellID); + data.WriteUInt32(MaxItemLevel); } if (changesMask[107]) { - data.WriteInt32(ScaleDuration); + data.WriteInt32(AzeriteItemLevel); } if (changesMask[108]) { - data.WriteInt32(SpellOverrideNameID); + data.WriteInt32(WildBattlePetLevel); } if (changesMask[109]) { - data.WriteInt32(LooksLikeMountID); + data.WriteUInt32(BattlePetCompanionNameTimestamp); } if (changesMask[110]) { - data.WriteInt32(LooksLikeCreatureID); + data.WriteInt32(InteractSpellID); } if (changesMask[111]) { - data.WriteInt32(LookAtControllerID); + data.WriteInt32(ScaleDuration); } if (changesMask[112]) { - data.WriteInt32(TaxiNodesID); + data.WriteInt32(LooksLikeMountID); } if (changesMask[113]) { - data.WritePackedGuid(GuildGUID); + data.WriteInt32(LooksLikeCreatureID); } if (changesMask[114]) + { + data.WriteInt32(LookAtControllerID); + } + if (changesMask[115]) + { + data.WriteInt32(TaxiNodesID); + } + if (changesMask[116]) + { + data.WritePackedGuid(GuildGUID); + } + if (changesMask[117]) { data.WritePackedGuid(SkinningOwnerGUID); } + if (changesMask[118]) + { + data.WriteUInt32(SilencedSchoolMask); + } } - if (changesMask[115]) + if (changesMask[119]) { for (int i = 0; i < 2; ++i) { - if (changesMask[116 + i]) + if (changesMask[120 + i]) { data.WriteUInt32(GetViewerDependentNpcFlags(NpcFlags[i], i, owner, receiver)); } } } - if (changesMask[118]) + if (changesMask[122]) { for (int i = 0; i < 6; ++i) { - if (changesMask[119 + i]) + if (changesMask[123 + i]) { data.WriteInt32(Power[i]); } - if (changesMask[125 + i]) + if (changesMask[129 + i]) { data.WriteUInt32(MaxPower[i]); } - if (changesMask[131 + i]) + if (changesMask[135 + i]) { data.WriteFloat(PowerRegenFlatModifier[i]); } - if (changesMask[137 + i]) + if (changesMask[141 + i]) { data.WriteFloat(PowerRegenInterruptedFlatModifier[i]); } } } - if (changesMask[143]) + if (changesMask[147]) { for (int i = 0; i < 3; ++i) { - if (changesMask[144 + i]) + if (changesMask[148 + i]) { VirtualItems[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } } - if (changesMask[147]) + if (changesMask[151]) { for (int i = 0; i < 2; ++i) { - if (changesMask[148 + i]) + if (changesMask[152 + i]) { data.WriteUInt32(AttackRoundBaseTime[i]); } } } - if (changesMask[150]) + if (changesMask[154]) { for (int i = 0; i < 4; ++i) { - if (changesMask[151 + i]) + if (changesMask[155 + i]) { data.WriteInt32(Stats[i]); } - if (changesMask[155 + i]) + if (changesMask[159 + i]) { data.WriteInt32(StatPosBuff[i]); } - if (changesMask[159 + i]) + if (changesMask[163 + i]) { data.WriteInt32(StatNegBuff[i]); } } } - if (changesMask[163]) + if (changesMask[167]) { for (int i = 0; i < 7; ++i) { - if (changesMask[164 + i]) + if (changesMask[168 + i]) { data.WriteInt32(Resistances[i]); } - if (changesMask[171 + i]) + if (changesMask[175 + i]) { data.WriteInt32(BonusResistanceMods[i]); } - if (changesMask[178 + i]) + if (changesMask[182 + i]) { data.WriteInt32(PowerCostModifier[i]); } - if (changesMask[185 + i]) - { - data.WriteFloat(PowerCostMultiplier[i]); - } } } } @@ -1967,6 +2077,7 @@ namespace Game.Entities ClearChangesMask(StateAnimID); ClearChangesMask(StateAnimKitID); ClearChangesMask(StateWorldEffectsQuestObjectiveID); + ClearChangesMask(SpellOverrideNameID); ClearChangesMask(Charm); ClearChangesMask(Summon); ClearChangesMask(Critter); @@ -2006,6 +2117,8 @@ namespace Game.Entities ClearChangesMask(BoundingRadius); ClearChangesMask(CombatReach); ClearChangesMask(DisplayScale); + ClearChangesMask(CreatureFamily); + ClearChangesMask(CreatureType); ClearChangesMask(NativeDisplayID); ClearChangesMask(NativeXDisplayScale); ClearChangesMask(MountDisplayID); @@ -2023,6 +2136,7 @@ namespace Game.Entities ClearChangesMask(PetExperience); ClearChangesMask(PetNextLevelExperience); ClearChangesMask(ModCastingSpeed); + ClearChangesMask(ModCastingSpeedNeg); ClearChangesMask(ModSpellHaste); ClearChangesMask(ModHaste); ClearChangesMask(ModRangedHaste); @@ -2062,13 +2176,13 @@ namespace Game.Entities ClearChangesMask(BattlePetCompanionNameTimestamp); ClearChangesMask(InteractSpellID); ClearChangesMask(ScaleDuration); - ClearChangesMask(SpellOverrideNameID); ClearChangesMask(LooksLikeMountID); ClearChangesMask(LooksLikeCreatureID); ClearChangesMask(LookAtControllerID); ClearChangesMask(TaxiNodesID); ClearChangesMask(GuildGUID); ClearChangesMask(SkinningOwnerGUID); + ClearChangesMask(SilencedSchoolMask); ClearChangesMask(NpcFlags); ClearChangesMask(Power); ClearChangesMask(MaxPower); @@ -2165,6 +2279,30 @@ namespace Game.Entities } } + public struct ChrCustomizationChoice + { + public uint ChrCustomizationOptionID; + public uint ChrCustomizationChoiceID; + + public ChrCustomizationChoice(uint chrCustomizationOptionID, uint chrCustomizationChoiceID) + { + ChrCustomizationOptionID = chrCustomizationOptionID; + ChrCustomizationChoiceID = chrCustomizationChoiceID; + } + + public void WriteCreate(WorldPacket data, Object owner, Player receiver) + { + data.WriteUInt32(ChrCustomizationOptionID); + data.WriteUInt32(ChrCustomizationChoiceID); + } + + public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, WorldObject owner, Player receiver) + { + data.WriteUInt32(ChrCustomizationOptionID); + data.WriteUInt32(ChrCustomizationChoiceID); + } + } + public class QuestLog : BaseUpdateData { public UpdateField QuestID = new UpdateField(0, 1); @@ -2325,49 +2463,66 @@ namespace Game.Entities } } + public struct CTROptions + { + public uint ContentTuningConditionMask; + public uint Field_4; + public uint ExpansionLevelMask; + + public void WriteCreate(WorldPacket data, Player owner, Player receiver) + { + data.WriteUInt32(ContentTuningConditionMask); + data.WriteUInt32(Field_4); + data.WriteUInt32(ExpansionLevelMask); + } + + public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, Player owner, Player receiver) + { + data.WriteUInt32(ContentTuningConditionMask); + data.WriteUInt32(Field_4); + data.WriteUInt32(ExpansionLevelMask); + } + } + public class PlayerData : BaseUpdateData { public UpdateField HasQuestSession = new UpdateField(0, 1); public UpdateField HasLevelLink = new UpdateField(0, 2); - public DynamicUpdateField QuestSessionQuestLog = new DynamicUpdateField(0, 3); - public DynamicUpdateField ArenaCooldowns = new DynamicUpdateField(0, 4); - public UpdateField DuelArbiter = new UpdateField(0, 5); - public UpdateField WowAccount = new UpdateField(0, 6); - public UpdateField LootTargetGUID = new UpdateField(0, 7); - public UpdateField PlayerFlags = new UpdateField(0, 8); - public UpdateField PlayerFlagsEx = new UpdateField(0, 9); - public UpdateField GuildRankID = new UpdateField(0, 10); - public UpdateField GuildDeleteDate = new UpdateField(0, 11); - public UpdateField GuildLevel = new UpdateField(0, 12); - public UpdateField SkinID = new UpdateField(0, 13); - public UpdateField FaceID = new UpdateField(0, 14); - public UpdateField HairStyleID = new UpdateField(0, 15); - public UpdateField HairColorID = new UpdateField(0, 16); - public UpdateField FacialHairStyleID = new UpdateField(0, 17); - public UpdateField PartyType = new UpdateField(0, 18); - public UpdateField NativeSex = new UpdateField(0, 19); - public UpdateField Inebriation = new UpdateField(0, 20); - public UpdateField PvpTitle = new UpdateField(0, 21); - public UpdateField ArenaFaction = new UpdateField(0, 22); - public UpdateField DuelTeam = new UpdateField(0, 23); - public UpdateField GuildTimeStamp = new UpdateField(0, 24); - public UpdateField PlayerTitle = new UpdateField(0, 25); - public UpdateField FakeInebriation = new UpdateField(0, 26); - public UpdateField VirtualPlayerRealm = new UpdateField(0, 27); - public UpdateField CurrentSpecID = new UpdateField(0, 28); - public UpdateField TaxiMountAnimKitID = new UpdateField(0, 29); - public UpdateField CurrentBattlePetBreedQuality = new UpdateField(0, 30); - public UpdateField HonorLevel = new UpdateField(0, 31); - public UpdateField Field_B0 = new UpdateField(32, 33); - public UpdateField Field_B4 = new UpdateField(32, 34); - public UpdateField Field_F8 = new UpdateField(32, 35); - public UpdateField Field_108 = new UpdateField(32, 36); - public UpdateFieldArray CustomDisplayOption = new UpdateFieldArray(3, 37, 38); - public UpdateFieldArray QuestLog = new UpdateFieldArray(125, 41, 42); - public UpdateFieldArray VisibleItems = new UpdateFieldArray(19, 167, 168); - public UpdateFieldArray AvgItemLevel = new UpdateFieldArray(4, 187, 188); + public DynamicUpdateFieldCustomizations = new DynamicUpdateField(0, 3); + public DynamicUpdateFieldQuestSessionQuestLog = new DynamicUpdateField(0, 4); + public DynamicUpdateFieldArenaCooldowns = new DynamicUpdateField(0, 5); + public UpdateField DuelArbiter = new UpdateField(0, 6); + public UpdateField WowAccount = new UpdateField(0, 7); + public UpdateField LootTargetGUID = new UpdateField(0, 8); + public UpdateField PlayerFlags = new UpdateField(0, 9); + public UpdateField PlayerFlagsEx = new UpdateField(0, 10); + public UpdateField GuildRankID = new UpdateField(0, 11); + public UpdateField GuildDeleteDate = new UpdateField(0, 12); + public UpdateField GuildLevel = new UpdateField(0, 13); + public UpdateField PartyType = new UpdateField(0, 14); + public UpdateField NativeSex = new UpdateField(0, 15); + public UpdateField Inebriation = new UpdateField(0, 16); + public UpdateField PvpTitle = new UpdateField(0, 17); + public UpdateField ArenaFaction = new UpdateField(0, 18); + public UpdateField DuelTeam = new UpdateField(0, 19); + public UpdateField GuildTimeStamp = new UpdateField(0, 20); + public UpdateField PlayerTitle = new UpdateField(0, 21); + public UpdateField FakeInebriation = new UpdateField(0, 22); + public UpdateField VirtualPlayerRealm = new UpdateField(0, 23); + public UpdateField CurrentSpecID = new UpdateField(0, 24); + public UpdateField TaxiMountAnimKitID = new UpdateField(0, 25); + public UpdateField CurrentBattlePetBreedQuality = new UpdateField(0, 26); + public UpdateField HonorLevel = new UpdateField(0, 27); + public UpdateField Field_B0 = new UpdateField(0, 28); + public UpdateField Field_B4 = new UpdateField(0, 29); + public UpdateField CtrOptions = new UpdateField(0, 30); + public UpdateField CovenantID = new UpdateField(0, 31); + public UpdateField SoulbindID = new UpdateField(32, 33); + public UpdateFieldArrayQuestLog = new UpdateFieldArray(125, 34, 35); + public UpdateFieldArray VisibleItems = new UpdateFieldArray(19, 160, 161); + public UpdateFieldArrayAvgItemLevel = new UpdateFieldArray(4, 180, 181); - public PlayerData() : base(0, TypeId.Player, 192) { } + public PlayerData() : base(0, TypeId.Player, 185) { } public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Player owner, Player receiver) { @@ -2379,15 +2534,7 @@ namespace Game.Entities data.WriteUInt32(GuildRankID); data.WriteUInt32(GuildDeleteDate); data.WriteUInt32(GuildLevel); - data.WriteUInt8(SkinID); - data.WriteUInt8(FaceID); - data.WriteUInt8(HairStyleID); - data.WriteUInt8(HairColorID); - for (int i = 0; i < 3; ++i) - { - data.WriteUInt8(CustomDisplayOption[i]); - } - data.WriteUInt8(FacialHairStyleID); + data.WriteInt32(Customizations.Size()); data.WriteUInt8(PartyType); data.WriteUInt8(NativeSex); data.WriteUInt8(Inebriation); @@ -2421,8 +2568,13 @@ namespace Game.Entities data.WriteInt32(ArenaCooldowns.Size()); data.WriteInt32(Field_B0); data.WriteInt32(Field_B4); - data.WritePackedGuid(Field_F8); - data.WriteInt32(Field_108); + ((CTROptions)CtrOptions).WriteCreate(data, owner, receiver); + data.WriteInt32(CovenantID); + data.WriteInt32(SoulbindID); + for (int i = 0; i < Customizations.Size(); ++i) + { + Customizations[i].WriteCreate(data, owner, receiver); + } if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag.PartyMember)) { for (int i = 0; i < QuestSessionQuestLog.Size(); ++i) @@ -2434,6 +2586,7 @@ namespace Game.Entities { ArenaCooldowns[i].WriteCreate(data, owner, receiver); } + data.FlushBits(); if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag.PartyMember)) { data.WriteBit((bool)HasQuestSession); @@ -2444,7 +2597,7 @@ namespace Game.Entities public void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Player owner, Player receiver) { - UpdateMask allowedMaskForTarget = new UpdateMask(192, new[] { 0xFFFFFFF5u, 0x000001FFu, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFFFFF80u }); + UpdateMask allowedMaskForTarget = new UpdateMask(192, new[] { 0xFFFFFFEDu, 0x00000003u, 0x00000000u, 0x00000000u, 0x00000000u, 0x01FFFFFFu }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver); } @@ -2452,15 +2605,15 @@ namespace Game.Entities public void AppendAllowedFieldsMaskForFlag(UpdateMask allowedMaskForTarget, UpdateFieldFlag fieldVisibilityFlags) { if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag.PartyMember)) - allowedMaskForTarget |= new UpdateMask(192, new[] { 0x0000000Au, 0xFFFFFE00u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x0000007Fu }); + allowedMaskForTarget |= new UpdateMask(192, new[] { 0x00000012u, 0xFFFFFFFCu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x00000000u }); } void FilterDisallowedFieldsMaskForFlag(UpdateMask changesMask, UpdateFieldFlag fieldVisibilityFlags) { if (!fieldVisibilityFlags.HasFlag(UpdateFieldFlag.PartyMember)) - changesMask &= new UpdateMask(192, new uint[] { 0xFFFFFFF5u, 0x000001FFu, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFFFFF80u }); + changesMask &= new UpdateMask(192, new uint[] { 0xFFFFFFEDu, 0x00000003u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFFFFFFFu }); } - + public void WriteUpdate(WorldPacket data, UpdateMask changesMask, bool ignoreNestedChangesMask, Player owner, Player receiver) { data.WriteBits(changesMask.GetBlocksMask(0), 6); @@ -2480,13 +2633,20 @@ namespace Game.Entities data.WriteBit(HasLevelLink); } if (changesMask[3]) + { + if (!ignoreNestedChangesMask) + Customizations.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(Customizations.Size(), data); + } + if (changesMask[4]) { if (!ignoreNestedChangesMask) QuestSessionQuestLog.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(QuestSessionQuestLog.Size(), data); } - if (changesMask[4]) + if (changesMask[5]) { if (!ignoreNestedChangesMask) ArenaCooldowns.WriteUpdateMask(data); @@ -2498,6 +2658,16 @@ namespace Game.Entities if (changesMask[0]) { if (changesMask[3]) + { + for (int i = 0; i < Customizations.Size(); ++i) + { + if (Customizations.HasChanged(i) || ignoreNestedChangesMask) + { + Customizations[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + } + } + if (changesMask[4]) { for (int i = 0; i < QuestSessionQuestLog.Size(); ++i) { @@ -2510,7 +2680,7 @@ namespace Game.Entities } } } - if (changesMask[4]) + if (changesMask[5]) { for (int i = 0; i < ArenaCooldowns.Size(); ++i) { @@ -2520,149 +2690,123 @@ namespace Game.Entities } } } - if (changesMask[5]) + if (changesMask[6]) { data.WritePackedGuid(DuelArbiter); } - if (changesMask[6]) + if (changesMask[7]) { data.WritePackedGuid(WowAccount); } - if (changesMask[7]) + if (changesMask[8]) { data.WritePackedGuid(LootTargetGUID); } - if (changesMask[8]) + if (changesMask[9]) { data.WriteUInt32(PlayerFlags); } - if (changesMask[9]) + if (changesMask[10]) { data.WriteUInt32(PlayerFlagsEx); } - if (changesMask[10]) + if (changesMask[11]) { data.WriteUInt32(GuildRankID); } - if (changesMask[11]) + if (changesMask[12]) { data.WriteUInt32(GuildDeleteDate); } - if (changesMask[12]) + if (changesMask[13]) { data.WriteUInt32(GuildLevel); } - if (changesMask[13]) - { - data.WriteUInt8(SkinID); - } if (changesMask[14]) - { - data.WriteUInt8(FaceID); - } - if (changesMask[15]) - { - data.WriteUInt8(HairStyleID); - } - if (changesMask[16]) - { - data.WriteUInt8(HairColorID); - } - if (changesMask[17]) - { - data.WriteUInt8(FacialHairStyleID); - } - if (changesMask[18]) { data.WriteUInt8(PartyType); } - if (changesMask[19]) + if (changesMask[15]) { data.WriteUInt8(NativeSex); } - if (changesMask[20]) + if (changesMask[16]) { data.WriteUInt8(Inebriation); } - if (changesMask[21]) + if (changesMask[17]) { data.WriteUInt8(PvpTitle); } - if (changesMask[22]) + if (changesMask[18]) { data.WriteUInt8(ArenaFaction); } - if (changesMask[23]) + if (changesMask[19]) { data.WriteUInt32(DuelTeam); } - if (changesMask[24]) + if (changesMask[20]) { data.WriteInt32(GuildTimeStamp); } - if (changesMask[25]) + if (changesMask[21]) { data.WriteUInt32(PlayerTitle); } - if (changesMask[26]) + if (changesMask[22]) { data.WriteInt32(FakeInebriation); } - if (changesMask[27]) + if (changesMask[23]) { data.WriteUInt32(VirtualPlayerRealm); } - if (changesMask[28]) + if (changesMask[24]) { data.WriteUInt32(CurrentSpecID); } - if (changesMask[29]) + if (changesMask[25]) { data.WriteInt32(TaxiMountAnimKitID); } - if (changesMask[30]) + if (changesMask[26]) { data.WriteUInt8(CurrentBattlePetBreedQuality); } - if (changesMask[31]) + if (changesMask[27]) { data.WriteUInt32(HonorLevel); } + if (changesMask[28]) + { + data.WriteInt32(Field_B0); + } + if (changesMask[29]) + { + data.WriteInt32(Field_B4); + } + if (changesMask[30]) + { + ((CTROptions)CtrOptions).WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + if (changesMask[31]) + { + data.WriteInt32(CovenantID); + } } if (changesMask[32]) { if (changesMask[33]) { - data.WriteInt32(Field_B0); - } - if (changesMask[34]) - { - data.WriteInt32(Field_B4); - } - if (changesMask[35]) - { - data.WritePackedGuid(Field_F8); - } - if (changesMask[36]) - { - data.WriteInt32(Field_108); + data.WriteInt32(SoulbindID); } } - if (changesMask[37]) - { - for (int i = 0; i < 3; ++i) - { - if (changesMask[38 + i]) - { - data.WriteUInt8(CustomDisplayOption[i]); - } - } - } - if (changesMask[41]) + if (changesMask[34]) { for (int i = 0; i < 125; ++i) { - if (changesMask[42 + i]) + if (changesMask[35 + i]) { if (noQuestLogChangesMask) QuestLog[i].WriteCreate(data, owner, receiver); @@ -2671,21 +2815,21 @@ namespace Game.Entities } } } - if (changesMask[167]) + if (changesMask[160]) { for (int i = 0; i < 19; ++i) { - if (changesMask[168 + i]) + if (changesMask[161 + i]) { VisibleItems[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } } - if (changesMask[187]) + if (changesMask[180]) { for (int i = 0; i < 4; ++i) { - if (changesMask[188 + i]) + if (changesMask[181 + i]) { data.WriteFloat(AvgItemLevel[i]); } @@ -2698,6 +2842,7 @@ namespace Game.Entities { ClearChangesMask(HasQuestSession); ClearChangesMask(HasLevelLink); + ClearChangesMask(Customizations); ClearChangesMask(QuestSessionQuestLog); ClearChangesMask(ArenaCooldowns); ClearChangesMask(DuelArbiter); @@ -2708,11 +2853,6 @@ namespace Game.Entities ClearChangesMask(GuildRankID); ClearChangesMask(GuildDeleteDate); ClearChangesMask(GuildLevel); - ClearChangesMask(SkinID); - ClearChangesMask(FaceID); - ClearChangesMask(HairStyleID); - ClearChangesMask(HairColorID); - ClearChangesMask(FacialHairStyleID); ClearChangesMask(PartyType); ClearChangesMask(NativeSex); ClearChangesMask(Inebriation); @@ -2729,9 +2869,9 @@ namespace Game.Entities ClearChangesMask(HonorLevel); ClearChangesMask(Field_B0); ClearChangesMask(Field_B4); - ClearChangesMask(Field_F8); - ClearChangesMask(Field_108); - ClearChangesMask(CustomDisplayOption); + ClearChangesMask(CtrOptions); + ClearChangesMask(CovenantID); + ClearChangesMask(SoulbindID); ClearChangesMask(QuestLog); ClearChangesMask(VisibleItems); ClearChangesMask(AvgItemLevel); @@ -3050,6 +3190,112 @@ namespace Game.Entities } } + public struct MawPower + { + public int Field_0; + public int Field_4; + public int Field_8; + + public void WriteCreate(WorldPacket data, Player owner, Player receiver) + { + data.WriteInt32(Field_0); + data.WriteInt32(Field_4); + data.WriteInt32(Field_8); + } + + public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, Player owner, Player receiver) + { + data.WriteInt32(Field_0); + data.WriteInt32(Field_4); + data.WriteInt32(Field_8); + } + } + + public class MultiFloorExplore + { + public List WorldMapOverlayIDs = new List(); + + public void WriteCreate(WorldPacket data, Player owner, Player receiver) + { + data.WriteInt32(WorldMapOverlayIDs.Count); + for (int i = 0; i < WorldMapOverlayIDs.Count; ++i) + { + data.WriteInt32(WorldMapOverlayIDs[i]); + } + } + + public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, Player owner, Player receiver) + { + data.WriteInt32(WorldMapOverlayIDs.Count); + for (int i = 0; i < WorldMapOverlayIDs.Count; ++i) + { + data.WriteInt32(WorldMapOverlayIDs[i]); + } + data.FlushBits(); + } + } + + public struct RecipeProgressionInfo + { + public ushort RecipeProgressionGroupID; + public ushort Experience; + + public void WriteCreate(WorldPacket data, Player owner, Player receiver) + { + data.WriteUInt16(RecipeProgressionGroupID); + data.WriteUInt16(Experience); + } + + public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, Player owner, Player receiver) + { + data.WriteUInt16(RecipeProgressionGroupID); + data.WriteUInt16(Experience); + } + } + + public class ActivePlayerUnk901 : BaseUpdateData + { + public UpdateField Field_0 = new UpdateField(0, 1 ); + public UpdateField Field_10 = new UpdateField(0, 2 ); + + public ActivePlayerUnk901() : base(3) { } + + public void WriteCreate(WorldPacket data, Player owner, Player receiver) + { + data.WritePackedGuid(Field_0); + data.WriteInt32(Field_10); + } + + public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, Player owner, Player receiver) + { + UpdateMask changesMask = _changesMask; + if (ignoreChangesMask) + changesMask.SetAll(); + + data.WriteBits(changesMask.GetBlock(0), 3); + + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[1]) + { + data.WritePackedGuid(Field_0); + } + if (changesMask[2]) + { + data.WriteInt32(Field_10); + } + } + } + + public override void ClearChangesMask() + { + ClearChangesMask(Field_0); + ClearChangesMask(Field_10); + _changesMask.ResetAll(); + } + } + public class ReplayedQuest : BaseUpdateData { public UpdateField QuestID = new UpdateField(0, 1); @@ -3154,7 +3400,7 @@ namespace Game.Entities public UpdateField BankAutoSortDisabled = new UpdateField(0, 2); public UpdateField SortBagsRightToLeft = new UpdateField(0, 3); public UpdateField InsertItemsLeftToRight = new UpdateField(0, 4); - public UpdateFieldArray> Research = new UpdateFieldArray>(1, 22, 23); + public UpdateFieldArray> Research = new UpdateFieldArray>(1, 27, 28); public DynamicUpdateField KnownTitles = new DynamicUpdateField(0, 5); public DynamicUpdateField ResearchSites = new DynamicUpdateField(0, 6); public DynamicUpdateField ResearchSiteProgress = new DynamicUpdateField(0, 7); @@ -3167,109 +3413,119 @@ namespace Game.Entities public DynamicUpdateField Transmog = new DynamicUpdateField(0, 14); public DynamicUpdateField ConditionalTransmog = new DynamicUpdateField(0, 15); public DynamicUpdateField SelfResSpells = new DynamicUpdateField(0, 16); - public DynamicUpdateField SpellPctModByLabel = new DynamicUpdateField(0, 18); - public DynamicUpdateField SpellFlatModByLabel = new DynamicUpdateField(0, 19); - public DynamicUpdateField ReplayedQuests = new DynamicUpdateField(0, 20); - public DynamicUpdateField DisabledSpells = new DynamicUpdateField(0, 21); - public DynamicUpdateField CharacterRestrictions = new DynamicUpdateField(0, 17); - public UpdateField FarsightObject = new UpdateField(0, 24); - public UpdateField SummonedBattlePetGUID = new UpdateField(0, 25); - public UpdateField Coinage = new UpdateField(0, 26); - public UpdateField XP = new UpdateField(0, 27); - public UpdateField NextLevelXP = new UpdateField(0, 28); - public UpdateField TrialXP = new UpdateField(0, 29); - public UpdateField Skill = new UpdateField(0, 30); - public UpdateField CharacterPoints = new UpdateField(0, 31); - public UpdateField MaxTalentTiers = new UpdateField(0, 32); - public UpdateField TrackCreatureMask = new UpdateField(0, 33); - public UpdateField MainhandExpertise = new UpdateField(34, 35); - public UpdateField OffhandExpertise = new UpdateField(34, 36); - public UpdateField RangedExpertise = new UpdateField(34, 37); - public UpdateField CombatRatingExpertise = new UpdateField(34, 38); - public UpdateField BlockPercentage = new UpdateField(34, 39); - public UpdateField DodgePercentage = new UpdateField(34, 40); - public UpdateField DodgePercentageFromAttribute = new UpdateField(34, 41); - public UpdateField ParryPercentage = new UpdateField(34, 42); - public UpdateField ParryPercentageFromAttribute = new UpdateField(34, 43); - public UpdateField CritPercentage = new UpdateField(34, 44); - public UpdateField RangedCritPercentage = new UpdateField(34, 45); - public UpdateField OffhandCritPercentage = new UpdateField(34, 46); - public UpdateField SpellCritPercentage = new UpdateField(34, 47); - public UpdateField ShieldBlock = new UpdateField(34, 48); - public UpdateField ShieldBlockCritPercentage = new UpdateField(34, 49); - public UpdateField Mastery = new UpdateField(34, 50); - public UpdateField Speed = new UpdateField(34, 51); - public UpdateField Avoidance = new UpdateField(34, 52); - public UpdateField Sturdiness = new UpdateField(34, 53); - public UpdateField Versatility = new UpdateField(34, 54); - public UpdateField VersatilityBonus = new UpdateField(34, 55); - public UpdateField PvpPowerDamage = new UpdateField(34, 56); - public UpdateField PvpPowerHealing = new UpdateField(34, 57); - public UpdateField ModHealingDonePos = new UpdateField(34, 58); - public UpdateField ModHealingPercent = new UpdateField(34, 59); - public UpdateField ModHealingDonePercent = new UpdateField(34, 60); - public UpdateField ModPeriodicHealingDonePercent = new UpdateField(34, 61); - public UpdateField ModSpellPowerPercent = new UpdateField(34, 62); - public UpdateField ModResiliencePercent = new UpdateField(34, 63); - public UpdateField OverrideSpellPowerByAPPercent = new UpdateField(34, 64); - public UpdateField OverrideAPBySpellPowerPercent = new UpdateField(34, 65); - public UpdateField ModTargetResistance = new UpdateField(66, 67); - public UpdateField ModTargetPhysicalResistance = new UpdateField(66, 68); - public UpdateField LocalFlags = new UpdateField(66, 69); - public UpdateField GrantableLevels = new UpdateField(66, 70); - public UpdateField MultiActionBars = new UpdateField(66, 71); - public UpdateField LifetimeMaxRank = new UpdateField(66, 72); - public UpdateField NumRespecs = new UpdateField(66, 73); - public UpdateField PvpMedals = new UpdateField(66, 74); - public UpdateField TodayHonorableKills = new UpdateField(66, 75); - public UpdateField YesterdayHonorableKills = new UpdateField(66, 76); - public UpdateField LifetimeHonorableKills = new UpdateField(66, 77); - public UpdateField WatchedFactionIndex = new UpdateField(66, 78); - public UpdateField MaxLevel = new UpdateField(66, 79); - public UpdateField ScalingPlayerLevelDelta = new UpdateField(66, 80); - public UpdateField MaxCreatureScalingLevel = new UpdateField(66, 81); - public UpdateField PetSpellPower = new UpdateField(66, 82); - public UpdateField UiHitModifier = new UpdateField(66, 83); - public UpdateField UiSpellHitModifier = new UpdateField(66, 84); - public UpdateField HomeRealmTimeOffset = new UpdateField(66, 85); - public UpdateField ModPetHaste = new UpdateField(66, 86); - public UpdateField LocalRegenFlags = new UpdateField(66, 87); - public UpdateField AuraVision = new UpdateField(66, 88); - public UpdateField NumBackpackSlots = new UpdateField(66, 89); - public UpdateField OverrideSpellsID = new UpdateField(66, 90); - public UpdateField LfgBonusFactionID = new UpdateField(66, 91); - public UpdateField LootSpecID = new UpdateField(66, 92); - public UpdateField OverrideZonePVPType = new UpdateField(66, 93); - public UpdateField Honor = new UpdateField(66, 94); - public UpdateField HonorNextLevel = new UpdateField(66, 95); - public UpdateField PvpRewardAchieved = new UpdateField(66, 96); - public UpdateField PvpTierMaxFromWins = new UpdateField(66, 97); - public UpdateField PvpLastWeeksRewardAchieved = new UpdateField(98, 99); - public UpdateField PvpLastWeeksTierMaxFromWins = new UpdateField(98, 100); - public UpdateField PvpLastWeeksRewardClaimed = new UpdateField(98, 101); - public UpdateField NumBankSlots = new UpdateField(98, 102); - public UpdateField> QuestSession = new UpdateField>(98, 103); + public DynamicUpdateField RuneforgePowers = new DynamicUpdateField(0, 17); + public DynamicUpdateField TransmogIllusions = new DynamicUpdateField(0, 18); + public DynamicUpdateField SpellPctModByLabel = new DynamicUpdateField(0, 20); + public DynamicUpdateField SpellFlatModByLabel = new DynamicUpdateField(0, 21); + public DynamicUpdateField MawPowers = new DynamicUpdateField(0, 22); + public DynamicUpdateField MultiFloorExploration = new DynamicUpdateField(0, 23); + public DynamicUpdateField RecipeProgression = new DynamicUpdateField(0, 24); + public DynamicUpdateField ReplayedQuests = new DynamicUpdateField(0, 25); + public DynamicUpdateField DisabledSpells = new DynamicUpdateField(0, 26); + public DynamicUpdateField CharacterRestrictions = new DynamicUpdateField(0, 19); + public UpdateField FarsightObject = new UpdateField(0, 29); + public UpdateField SummonedBattlePetGUID = new UpdateField(0, 30); + public UpdateField Coinage = new UpdateField(0, 31); + public UpdateField XP = new UpdateField(0, 32); + public UpdateField NextLevelXP = new UpdateField(0, 33); + public UpdateField TrialXP = new UpdateField(34, 35); + public UpdateField Skill = new UpdateField(34, 36); + public UpdateField CharacterPoints = new UpdateField(34, 37); + public UpdateField MaxTalentTiers = new UpdateField(34, 38); + public UpdateField TrackCreatureMask = new UpdateField(34, 39); + public UpdateField MainhandExpertise = new UpdateField(34, 40); + public UpdateField OffhandExpertise = new UpdateField(34, 41); + public UpdateField RangedExpertise = new UpdateField(34, 42); + public UpdateField CombatRatingExpertise = new UpdateField(34, 43); + public UpdateField BlockPercentage = new UpdateField(34, 44); + public UpdateField DodgePercentage = new UpdateField(34, 45); + public UpdateField DodgePercentageFromAttribute = new UpdateField(34, 46); + public UpdateField ParryPercentage = new UpdateField(34, 47); + public UpdateField ParryPercentageFromAttribute = new UpdateField(34, 48); + public UpdateField CritPercentage = new UpdateField(34, 49); + public UpdateField RangedCritPercentage = new UpdateField(34, 50); + public UpdateField OffhandCritPercentage = new UpdateField(34, 51); + public UpdateField SpellCritPercentage = new UpdateField(34, 52); + public UpdateField ShieldBlock = new UpdateField(34, 53); + public UpdateField ShieldBlockCritPercentage = new UpdateField(34, 54); + public UpdateField Mastery = new UpdateField(34, 55); + public UpdateField Speed = new UpdateField(34, 56); + public UpdateField Avoidance = new UpdateField(34, 57); + public UpdateField Sturdiness = new UpdateField(34, 58); + public UpdateField Versatility = new UpdateField(34, 59); + public UpdateField VersatilityBonus = new UpdateField(34, 60); + public UpdateField PvpPowerDamage = new UpdateField(34, 61); + public UpdateField PvpPowerHealing = new UpdateField(34, 62); + public UpdateField ModHealingDonePos = new UpdateField(34, 63); + public UpdateField ModHealingPercent = new UpdateField(34, 64); + public UpdateField ModPeriodicHealingDonePercent = new UpdateField(34, 65); + public UpdateField ModSpellPowerPercent = new UpdateField(66, 67); + public UpdateField ModResiliencePercent = new UpdateField(66, 68); + public UpdateField OverrideSpellPowerByAPPercent = new UpdateField(66, 69); + public UpdateField OverrideAPBySpellPowerPercent = new UpdateField(66, 70); + public UpdateField ModTargetResistance = new UpdateField(66, 71); + public UpdateField ModTargetPhysicalResistance = new UpdateField(66, 72); + public UpdateField LocalFlags = new UpdateField(66, 73); + public UpdateField GrantableLevels = new UpdateField(66, 74); + public UpdateField MultiActionBars = new UpdateField(66, 75); + public UpdateField LifetimeMaxRank = new UpdateField(66, 76); + public UpdateField NumRespecs = new UpdateField(66, 77); + public UpdateField PvpMedals = new UpdateField(66, 78); + public UpdateField TodayHonorableKills = new UpdateField(66, 79); + public UpdateField YesterdayHonorableKills = new UpdateField(66, 80); + public UpdateField LifetimeHonorableKills = new UpdateField(66, 81); + public UpdateField WatchedFactionIndex = new UpdateField(66, 82); + public UpdateField MaxLevel = new UpdateField(66, 83); + public UpdateField ScalingPlayerLevelDelta = new UpdateField(66, 84); + public UpdateField MaxCreatureScalingLevel = new UpdateField(66, 85); + public UpdateField PetSpellPower = new UpdateField(66, 86); + public UpdateField UiHitModifier = new UpdateField(66, 87); + public UpdateField UiSpellHitModifier = new UpdateField(66, 88); + public UpdateField HomeRealmTimeOffset = new UpdateField(66, 89); + public UpdateField ModPetHaste = new UpdateField(66, 90); + public UpdateField JailersTowerLevelMax = new UpdateField(66, 91); + public UpdateField JailersTowerLevel = new UpdateField(66, 92); + public UpdateField LocalRegenFlags = new UpdateField(66, 93); + public UpdateField AuraVision = new UpdateField(66, 94); + public UpdateField NumBackpackSlots = new UpdateField(66, 95); + public UpdateField OverrideSpellsID = new UpdateField(66, 96); + public UpdateField LootSpecID = new UpdateField(66, 97); + public UpdateField OverrideZonePVPType = new UpdateField(98, 99); + public UpdateField BnetAccount = new UpdateField(98, 100); + public UpdateField GuildClubMemberID = new UpdateField(98, 101); + public UpdateField Honor = new UpdateField(98, 102); + public UpdateField HonorNextLevel = new UpdateField(98, 103); + public UpdateField PvpRewardAchieved = new UpdateField(98, 104); + public UpdateField PvpTierMaxFromWins = new UpdateField(98, 105); + public UpdateField PvpLastWeeksRewardAchieved = new UpdateField(98, 106); + public UpdateField PvpLastWeeksTierMaxFromWins = new UpdateField(98, 107); + public UpdateField PvpLastWeeksRewardClaimed = new UpdateField(98, 108); + public UpdateField NumBankSlots = new UpdateField(98, 109); + public UpdateField Field_1410 = new UpdateField(98, 111); + public UpdateField> QuestSession = new UpdateField>(98, 110); + public UpdateField UiChromieTimeExpansionID = new UpdateField(98, 112); + public UpdateField TransportServerTime = new UpdateField(98, 113); + public UpdateFieldArray InvSlots = new UpdateFieldArray(199, 114, 115); + public UpdateFieldArray TrackResourceMask = new UpdateFieldArray(2, 314, 315); + public UpdateFieldArray ExploredZones = new UpdateFieldArray(192, 317, 318); + public UpdateFieldArray RestInfo = new UpdateFieldArray(2, 510, 511); + public UpdateFieldArray ModDamageDonePos = new UpdateFieldArray(7, 513, 514); + public UpdateFieldArray ModDamageDoneNeg = new UpdateFieldArray(7, 513, 521); + public UpdateFieldArray ModDamageDonePercent = new UpdateFieldArray(7, 513, 528); + public UpdateFieldArray ModHealingDonePercent = new UpdateFieldArray(7, 513, 535); + public UpdateFieldArray WeaponDmgMultipliers = new UpdateFieldArray(3, 542, 543); + public UpdateFieldArray WeaponAtkSpeedMultipliers = new UpdateFieldArray(3, 542, 546); + public UpdateFieldArray BuybackPrice = new UpdateFieldArray(12, 549, 550); + public UpdateFieldArray BuybackTimestamp = new UpdateFieldArray(12, 549, 562); + public UpdateFieldArray CombatRatings = new UpdateFieldArray(32, 574, 575); + public UpdateFieldArray PvpInfo = new UpdateFieldArray(6, 607, 608); + public UpdateFieldArray NoReagentCostMask = new UpdateFieldArray(4, 614, 615); + public UpdateFieldArray ProfessionSkillLine = new UpdateFieldArray(2, 619, 620); + public UpdateFieldArray BagSlotFlags = new UpdateFieldArray(4, 622, 623); + public UpdateFieldArray BankBagSlotFlags = new UpdateFieldArray(7, 627, 628); + public UpdateFieldArray QuestCompleted = new UpdateFieldArray(875, 635, 636); - public UpdateFieldArray InvSlots = new UpdateFieldArray(199, 104, 105); - public UpdateFieldArray TrackResourceMask = new UpdateFieldArray(2, 304, 305); - public UpdateFieldArray ExploredZones = new UpdateFieldArray(192, 307, 308); - public UpdateFieldArray RestInfo = new UpdateFieldArray(2, 500, 501); - public UpdateFieldArray ModDamageDonePos = new UpdateFieldArray(7, 503, 504); - public UpdateFieldArray ModDamageDoneNeg = new UpdateFieldArray(7, 503, 511); - public UpdateFieldArray ModDamageDonePercent = new UpdateFieldArray(7, 503, 518); - public UpdateFieldArray WeaponDmgMultipliers = new UpdateFieldArray(3, 525, 526); - public UpdateFieldArray WeaponAtkSpeedMultipliers = new UpdateFieldArray(3, 525, 529); - public UpdateFieldArray BuybackPrice = new UpdateFieldArray(12, 532, 533); - public UpdateFieldArray BuybackTimestamp = new UpdateFieldArray(12, 532, 545); - public UpdateFieldArray CombatRatings = new UpdateFieldArray(32, 557, 558); - public UpdateFieldArray PvpInfo = new UpdateFieldArray(6, 590, 591); - public UpdateFieldArray NoReagentCostMask = new UpdateFieldArray(4, 597, 598); - public UpdateFieldArray ProfessionSkillLine = new UpdateFieldArray(2, 602, 603); - public UpdateFieldArray BagSlotFlags = new UpdateFieldArray(4, 605, 606); - public UpdateFieldArray BankBagSlotFlags = new UpdateFieldArray(7, 610, 611); - public UpdateFieldArray QuestCompleted = new UpdateFieldArray(875, 618, 619); - - public ActivePlayerData() : base(0, TypeId.ActivePlayer, 1494) { } + public ActivePlayerData() : base(0, TypeId.ActivePlayer, 1511) { } public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Player owner, Player receiver) { @@ -3328,10 +3584,10 @@ namespace Game.Entities data.WriteInt32(ModDamageDonePos[i]); data.WriteInt32(ModDamageDoneNeg[i]); data.WriteFloat(ModDamageDonePercent[i]); + data.WriteFloat(ModHealingDonePercent[i]); } data.WriteInt32(ModHealingDonePos); data.WriteFloat(ModHealingPercent); - data.WriteFloat(ModHealingDonePercent); data.WriteFloat(ModPeriodicHealingDonePercent); for (int i = 0; i < 3; ++i) { @@ -3344,7 +3600,7 @@ namespace Game.Entities data.WriteFloat(OverrideAPBySpellPowerPercent); data.WriteInt32(ModTargetResistance); data.WriteInt32(ModTargetPhysicalResistance); - data.WriteInt32(LocalFlags); + data.WriteUInt32(LocalFlags); data.WriteUInt8(GrantableLevels); data.WriteUInt8(MultiActionBars); data.WriteUInt8(LifetimeMaxRank); @@ -3379,13 +3635,16 @@ namespace Game.Entities data.WriteFloat(UiSpellHitModifier); data.WriteInt32(HomeRealmTimeOffset); data.WriteFloat(ModPetHaste); + data.WriteInt8(JailersTowerLevelMax); + data.WriteInt8(JailersTowerLevel); data.WriteUInt8(LocalRegenFlags); data.WriteUInt8(AuraVision); data.WriteUInt8(NumBackpackSlots); data.WriteUInt32(OverrideSpellsID); - data.WriteInt32(LfgBonusFactionID); data.WriteUInt16(LootSpecID); data.WriteUInt32(OverrideZonePVPType); + data.WritePackedGuid(BnetAccount); + data.WriteUInt64(GuildClubMemberID); for (int i = 0; i < 4; ++i) { data.WriteUInt32(BagSlotFlags[i]); @@ -3417,6 +3676,8 @@ namespace Game.Entities data.WriteInt32(Transmog.Size()); data.WriteInt32(ConditionalTransmog.Size()); data.WriteInt32(SelfResSpells.Size()); + data.WriteInt32(RuneforgePowers.Size()); + data.WriteInt32(TransmogIllusions.Size()); data.WriteInt32(CharacterRestrictions.Size()); data.WriteInt32(SpellPctModByLabel.Size()); data.WriteInt32(SpellFlatModByLabel.Size()); @@ -3428,8 +3689,13 @@ namespace Game.Entities Research[i][j].WriteCreate(data, owner, receiver); } } + data.WriteInt32(MawPowers.Size()); + data.WriteInt32(MultiFloorExploration.Size()); + data.WriteInt32(RecipeProgression.Size()); data.WriteInt32(ReplayedQuests.Size()); data.WriteInt32(DisabledSpells.Size()); + data.WriteInt32(UiChromieTimeExpansionID); + data.WriteInt32(TransportServerTime); for (int i = 0; i < KnownTitles.Size(); ++i) { data.WriteUInt64(KnownTitles[i]); @@ -3478,6 +3744,14 @@ namespace Game.Entities { data.WriteUInt32(SelfResSpells[i]); } + for (int i = 0; i < RuneforgePowers.Size(); ++i) + { + data.WriteUInt32(RuneforgePowers[i]); + } + for (int i = 0; i < TransmogIllusions.Size(); ++i) + { + data.WriteUInt32(TransmogIllusions[i]); + } for (int i = 0; i < SpellPctModByLabel.Size(); ++i) { SpellPctModByLabel[i].WriteCreate(data, owner, receiver); @@ -3486,6 +3760,18 @@ namespace Game.Entities { SpellFlatModByLabel[i].WriteCreate(data, owner, receiver); } + for (int i = 0; i < MawPowers.Size(); ++i) + { + MawPowers[i].WriteCreate(data, owner, receiver); + } + for (int i = 0; i < MultiFloorExploration.Size(); ++i) + { + MultiFloorExploration[i].WriteCreate(data, owner, receiver); + } + for (int i = 0; i < RecipeProgression.Size(); ++i) + { + RecipeProgression[i].WriteCreate(data, owner, receiver); + } for (int i = 0; i < ReplayedQuests.Size(); ++i) { ReplayedQuests[i].WriteCreate(data, owner, receiver); @@ -3498,19 +3784,21 @@ namespace Game.Entities { PvpInfo[i].WriteCreate(data, owner, receiver); } + data.FlushBits(); data.WriteBit((bool)BackpackAutoSortDisabled); data.WriteBit((bool)BankAutoSortDisabled); data.WriteBit((bool)SortBagsRightToLeft); data.WriteBit((bool)InsertItemsLeftToRight); - data.WriteBit(QuestSession.GetValue().HasValue); - for (int i = 0; i < CharacterRestrictions.Size(); ++i) - { - CharacterRestrictions[i].WriteCreate(data, owner, receiver); - } + data.WriteBits(QuestSession.GetValue().HasValue, 1); + ((ActivePlayerUnk901)Field_1410).WriteCreate(data, owner, receiver); if (QuestSession.GetValue().HasValue) { QuestSession.GetValue().Value.WriteCreate(data, owner, receiver); } + for (int i = 0; i < CharacterRestrictions.Size(); ++i) + { + CharacterRestrictions[i].WriteCreate(data, owner, receiver); + } data.FlushBits(); } @@ -3522,129 +3810,144 @@ namespace Game.Entities public void WriteUpdate(WorldPacket data, UpdateMask changesMask, bool ignoreNestedChangesMask, Player owner, Player receiver) { for (uint i = 0; i < 1; ++i) - data.WriteUInt32(_changesMask.GetBlocksMask(i)); - data.WriteBits(_changesMask.GetBlocksMask(1), 15); - for (uint i = 0; i < 47; ++i) - if (_changesMask.GetBlock(i) != 0) - data.WriteBits(_changesMask.GetBlock(i), 32); + data.WriteUInt32(changesMask.GetBlocksMask(i)); - if (_changesMask[0]) + data.WriteBits(changesMask.GetBlocksMask(1), 16); + for (uint i = 0; i < 48; ++i) + if (changesMask.GetBlock(i) != 0) + data.WriteBits(changesMask.GetBlock(i), 32); + + if (changesMask[0]) { - if (_changesMask[1]) + if (changesMask[1]) { data.WriteBit(BackpackAutoSortDisabled); } - if (_changesMask[2]) + if (changesMask[2]) { data.WriteBit(BankAutoSortDisabled); } - if (_changesMask[3]) + if (changesMask[3]) { data.WriteBit(SortBagsRightToLeft); } - if (_changesMask[4]) + if (changesMask[4]) { data.WriteBit(InsertItemsLeftToRight); } - if (_changesMask[5]) + if (changesMask[5]) { if (!ignoreNestedChangesMask) KnownTitles.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(KnownTitles.Size(), data); } - if (_changesMask[6]) + if (changesMask[6]) { if (!ignoreNestedChangesMask) ResearchSites.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(ResearchSites.Size(), data); } - if (_changesMask[7]) + if (changesMask[7]) { if (!ignoreNestedChangesMask) ResearchSiteProgress.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(ResearchSiteProgress.Size(), data); } - if (_changesMask[8]) + if (changesMask[8]) { if (!ignoreNestedChangesMask) DailyQuestsCompleted.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(DailyQuestsCompleted.Size(), data); } - if (_changesMask[9]) + if (changesMask[9]) { if (!ignoreNestedChangesMask) AvailableQuestLineXQuestIDs.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(AvailableQuestLineXQuestIDs.Size(), data); } - if (_changesMask[10]) + if (changesMask[10]) { if (!ignoreNestedChangesMask) Heirlooms.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(Heirlooms.Size(), data); } - if (_changesMask[11]) + if (changesMask[11]) { if (!ignoreNestedChangesMask) HeirloomFlags.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(HeirloomFlags.Size(), data); } - if (_changesMask[12]) + if (changesMask[12]) { if (!ignoreNestedChangesMask) Toys.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(Toys.Size(), data); } - if (_changesMask[13]) + if (changesMask[13]) { if (!ignoreNestedChangesMask) ToyFlags.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(ToyFlags.Size(), data); } - if (_changesMask[14]) + if (changesMask[14]) { if (!ignoreNestedChangesMask) Transmog.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(Transmog.Size(), data); } - if (_changesMask[15]) + if (changesMask[15]) { if (!ignoreNestedChangesMask) ConditionalTransmog.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(ConditionalTransmog.Size(), data); } - if (_changesMask[16]) + if (changesMask[16]) { if (!ignoreNestedChangesMask) SelfResSpells.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(SelfResSpells.Size(), data); } - if (_changesMask[17]) + if (changesMask[17]) + { + if (!ignoreNestedChangesMask) + RuneforgePowers.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(RuneforgePowers.Size(), data); + } + if (changesMask[18]) + { + if (!ignoreNestedChangesMask) + TransmogIllusions.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(TransmogIllusions.Size(), data); + } + if (changesMask[19]) { if (!ignoreNestedChangesMask) CharacterRestrictions.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(CharacterRestrictions.Size(), data); } - if (_changesMask[18]) + if (changesMask[20]) { if (!ignoreNestedChangesMask) SpellPctModByLabel.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(SpellPctModByLabel.Size(), data); } - if (_changesMask[19]) + if (changesMask[21]) { if (!ignoreNestedChangesMask) SpellFlatModByLabel.WriteUpdateMask(data); @@ -3652,25 +3955,16 @@ namespace Game.Entities WriteCompleteDynamicFieldUpdateMask(SpellFlatModByLabel.Size(), data); } } - if (_changesMask[22]) + if (changesMask[27]) { for (int i = 0; i < 1; ++i) { - if (_changesMask[23 + i]) + if (changesMask[28 + i]) { if (!ignoreNestedChangesMask) Research[i].WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(Research[i].Size(), data); - } - } - } - if (_changesMask[22]) - { - for (int i = 0; i < 1; ++i) - { - if (_changesMask[23 + i]) - { for (int j = 0; j < Research[i].Size(); ++j) { if (Research[i].HasChanged(j) || ignoreNestedChangesMask) @@ -3681,17 +3975,37 @@ namespace Game.Entities } } } - data.FlushBits(); - if (_changesMask[0]) + if (changesMask[0]) { - if (_changesMask[20]) + if (changesMask[22]) + { + if (!ignoreNestedChangesMask) + MawPowers.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(MawPowers.Size(), data); + } + if (changesMask[23]) + { + if (!ignoreNestedChangesMask) + MultiFloorExploration.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(MultiFloorExploration.Size(), data); + } + if (changesMask[24]) + { + if (!ignoreNestedChangesMask) + RecipeProgression.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(RecipeProgression.Size(), data); + } + if (changesMask[25]) { if (!ignoreNestedChangesMask) ReplayedQuests.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(ReplayedQuests.Size(), data); } - if (_changesMask[21]) + if (changesMask[26]) { if (!ignoreNestedChangesMask) DisabledSpells.WriteUpdateMask(data); @@ -3700,9 +4014,9 @@ namespace Game.Entities } } data.FlushBits(); - if (_changesMask[0]) + if (changesMask[0]) { - if (_changesMask[5]) + if (changesMask[5]) { for (int i = 0; i < KnownTitles.Size(); ++i) { @@ -3712,7 +4026,7 @@ namespace Game.Entities } } } - if (_changesMask[6]) + if (changesMask[6]) { for (int i = 0; i < ResearchSites.Size(); ++i) { @@ -3722,7 +4036,7 @@ namespace Game.Entities } } } - if (_changesMask[7]) + if (changesMask[7]) { for (int i = 0; i < ResearchSiteProgress.Size(); ++i) { @@ -3732,7 +4046,7 @@ namespace Game.Entities } } } - if (_changesMask[8]) + if (changesMask[8]) { for (int i = 0; i < DailyQuestsCompleted.Size(); ++i) { @@ -3742,7 +4056,7 @@ namespace Game.Entities } } } - if (_changesMask[9]) + if (changesMask[9]) { for (int i = 0; i < AvailableQuestLineXQuestIDs.Size(); ++i) { @@ -3752,7 +4066,7 @@ namespace Game.Entities } } } - if (_changesMask[10]) + if (changesMask[10]) { for (int i = 0; i < Heirlooms.Size(); ++i) { @@ -3762,7 +4076,7 @@ namespace Game.Entities } } } - if (_changesMask[11]) + if (changesMask[11]) { for (int i = 0; i < HeirloomFlags.Size(); ++i) { @@ -3772,7 +4086,7 @@ namespace Game.Entities } } } - if (_changesMask[12]) + if (changesMask[12]) { for (int i = 0; i < Toys.Size(); ++i) { @@ -3782,7 +4096,7 @@ namespace Game.Entities } } } - if (_changesMask[13]) + if (changesMask[13]) { for (int i = 0; i < ToyFlags.Size(); ++i) { @@ -3792,7 +4106,7 @@ namespace Game.Entities } } } - if (_changesMask[14]) + if (changesMask[14]) { for (int i = 0; i < Transmog.Size(); ++i) { @@ -3802,7 +4116,7 @@ namespace Game.Entities } } } - if (_changesMask[15]) + if (changesMask[15]) { for (int i = 0; i < ConditionalTransmog.Size(); ++i) { @@ -3812,7 +4126,7 @@ namespace Game.Entities } } } - if (_changesMask[16]) + if (changesMask[16]) { for (int i = 0; i < SelfResSpells.Size(); ++i) { @@ -3822,17 +4136,27 @@ namespace Game.Entities } } } - if (_changesMask[17]) + if (changesMask[17]) { - for (int i = 0; i < CharacterRestrictions.Size(); ++i) + for (int i = 0; i < RuneforgePowers.Size(); ++i) { - if (CharacterRestrictions.HasChanged(i) || ignoreNestedChangesMask) + if (RuneforgePowers.HasChanged(i) || ignoreNestedChangesMask) { - CharacterRestrictions[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + data.WriteUInt32(RuneforgePowers[i]); } } } - if (_changesMask[18]) + if (changesMask[18]) + { + for (int i = 0; i < TransmogIllusions.Size(); ++i) + { + if (TransmogIllusions.HasChanged(i) || ignoreNestedChangesMask) + { + data.WriteUInt32(TransmogIllusions[i]); + } + } + } + if (changesMask[20]) { for (int i = 0; i < SpellPctModByLabel.Size(); ++i) { @@ -3842,7 +4166,7 @@ namespace Game.Entities } } } - if (_changesMask[19]) + if (changesMask[21]) { for (int i = 0; i < SpellFlatModByLabel.Size(); ++i) { @@ -3852,7 +4176,37 @@ namespace Game.Entities } } } - if (_changesMask[20]) + if (changesMask[22]) + { + for (int i = 0; i < MawPowers.Size(); ++i) + { + if (MawPowers.HasChanged(i) || ignoreNestedChangesMask) + { + MawPowers[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + } + } + if (changesMask[23]) + { + for (int i = 0; i < MultiFloorExploration.Size(); ++i) + { + if (MultiFloorExploration.HasChanged(i) || ignoreNestedChangesMask) + { + MultiFloorExploration[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + } + } + if (changesMask[24]) + { + for (int i = 0; i < RecipeProgression.Size(); ++i) + { + if (RecipeProgression.HasChanged(i) || ignoreNestedChangesMask) + { + RecipeProgression[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + } + } + if (changesMask[25]) { for (int i = 0; i < ReplayedQuests.Size(); ++i) { @@ -3862,7 +4216,7 @@ namespace Game.Entities } } } - if (_changesMask[21]) + if (changesMask[26]) { for (int i = 0; i < DisabledSpells.Size(); ++i) { @@ -3872,333 +4226,354 @@ namespace Game.Entities } } } - if (_changesMask[22]) + if (changesMask[19]) + { + for (int i = 0; i < CharacterRestrictions.Size(); ++i) + { + if (CharacterRestrictions.HasChanged(i) || ignoreNestedChangesMask) + { + CharacterRestrictions[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + } + } + if (changesMask[29]) { data.WritePackedGuid(FarsightObject); } - if (_changesMask[23]) + if (changesMask[30]) { data.WritePackedGuid(SummonedBattlePetGUID); } - if (_changesMask[24]) - { - data.WritePackedGuid(FarsightObject); - } - if (_changesMask[25]) - { - data.WritePackedGuid(SummonedBattlePetGUID); - } - if (_changesMask[26]) + if (changesMask[31]) { data.WriteUInt64(Coinage); } - if (_changesMask[27]) + if (changesMask[32]) { data.WriteUInt32(XP); } - if (_changesMask[28]) + if (changesMask[33]) { data.WriteUInt32(NextLevelXP); } - if (_changesMask[29]) + } + if (changesMask[34]) + { + if (changesMask[35]) { data.WriteInt32(TrialXP); } - if (_changesMask[30]) + if (changesMask[36]) { ((SkillInfo)Skill).WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } - if (_changesMask[31]) + if (changesMask[37]) { data.WriteUInt32(CharacterPoints); } - if (_changesMask[32]) + if (changesMask[38]) { - data.WriteFloat(MaxTalentTiers); + data.WriteUInt32(MaxTalentTiers); } - if (_changesMask[33]) + if (changesMask[39]) { - data.WriteFloat(TrackCreatureMask); + data.WriteUInt32(TrackCreatureMask); } - } - if (_changesMask[34]) - { - if (_changesMask[35]) + if (changesMask[40]) { data.WriteFloat(MainhandExpertise); } - if (_changesMask[36]) + if (changesMask[41]) { data.WriteFloat(OffhandExpertise); } - if (_changesMask[37]) + if (changesMask[42]) { data.WriteFloat(RangedExpertise); } - if (_changesMask[38]) + if (changesMask[43]) { data.WriteFloat(CombatRatingExpertise); } - if (_changesMask[39]) + if (changesMask[44]) { data.WriteFloat(BlockPercentage); } - if (_changesMask[40]) + if (changesMask[45]) { data.WriteFloat(DodgePercentage); } - if (_changesMask[41]) + if (changesMask[46]) { data.WriteFloat(DodgePercentageFromAttribute); } - if (_changesMask[42]) + if (changesMask[47]) { data.WriteFloat(ParryPercentage); } - if (_changesMask[43]) + if (changesMask[48]) { data.WriteFloat(ParryPercentageFromAttribute); } - if (_changesMask[44]) + if (changesMask[49]) { data.WriteFloat(CritPercentage); } - if (_changesMask[45]) + if (changesMask[50]) { data.WriteFloat(RangedCritPercentage); } - if (_changesMask[46]) + if (changesMask[51]) { data.WriteFloat(OffhandCritPercentage); } - if (_changesMask[47]) + if (changesMask[52]) { data.WriteFloat(SpellCritPercentage); } - if (_changesMask[48]) + if (changesMask[53]) { - data.WriteFloat(ShieldBlock); + data.WriteUInt32(ShieldBlock); } - if (_changesMask[49]) + if (changesMask[54]) { data.WriteFloat(ShieldBlockCritPercentage); } - if (_changesMask[50]) + if (changesMask[55]) { data.WriteFloat(Mastery); } - if (_changesMask[51]) + if (changesMask[56]) { data.WriteFloat(Speed); } - if (_changesMask[52]) + if (changesMask[57]) { data.WriteFloat(Avoidance); } - if (_changesMask[53]) + if (changesMask[58]) { data.WriteFloat(Sturdiness); } - if (_changesMask[54]) + if (changesMask[59]) { - data.WriteFloat(Versatility); + data.WriteInt32(Versatility); } - if (_changesMask[55]) + if (changesMask[60]) { data.WriteFloat(VersatilityBonus); } - if (_changesMask[56]) + if (changesMask[61]) { data.WriteFloat(PvpPowerDamage); } - if (_changesMask[57]) + if (changesMask[62]) { data.WriteFloat(PvpPowerHealing); } - if (_changesMask[58]) + if (changesMask[63]) { - data.WriteFloat(ModHealingDonePos); + data.WriteInt32(ModHealingDonePos); } - if (_changesMask[59]) + if (changesMask[64]) { data.WriteFloat(ModHealingPercent); } - if (_changesMask[60]) - { - data.WriteFloat(ModHealingDonePercent); - } - if (_changesMask[61]) + if (changesMask[65]) { data.WriteFloat(ModPeriodicHealingDonePercent); } - if (_changesMask[62]) + } + if (changesMask[66]) + { + if (changesMask[67]) { data.WriteFloat(ModSpellPowerPercent); } - if (_changesMask[63]) + if (changesMask[68]) { data.WriteFloat(ModResiliencePercent); } - if (_changesMask[64]) + if (changesMask[69]) { data.WriteFloat(OverrideSpellPowerByAPPercent); } - if (_changesMask[65]) + if (changesMask[70]) { data.WriteFloat(OverrideAPBySpellPowerPercent); } - } - if (_changesMask[66]) - { - if (_changesMask[67]) + if (changesMask[71]) { data.WriteInt32(ModTargetResistance); } - if (_changesMask[68]) + if (changesMask[72]) { data.WriteInt32(ModTargetPhysicalResistance); } - if (_changesMask[69]) + if (changesMask[73]) { - data.WriteInt32(LocalFlags); + data.WriteUInt32(LocalFlags); } - if (_changesMask[70]) + if (changesMask[74]) { data.WriteUInt8(GrantableLevels); } - if (_changesMask[71]) + if (changesMask[75]) { data.WriteUInt8(MultiActionBars); } - if (_changesMask[72]) + if (changesMask[76]) { - data.WriteUInt32(LifetimeMaxRank); + data.WriteUInt8(LifetimeMaxRank); } - if (_changesMask[73]) + if (changesMask[77]) { - data.WriteUInt16(NumRespecs); + data.WriteUInt8(NumRespecs); } - if (_changesMask[74]) + if (changesMask[78]) { data.WriteUInt32(PvpMedals); } - if (_changesMask[75]) + if (changesMask[79]) { - data.WriteUInt32(TodayHonorableKills); + data.WriteUInt16(TodayHonorableKills); } - if (_changesMask[76]) + if (changesMask[80]) { - data.WriteUInt32(YesterdayHonorableKills); + data.WriteUInt16(YesterdayHonorableKills); } - if (_changesMask[77]) + if (changesMask[81]) { data.WriteUInt32(LifetimeHonorableKills); } - if (_changesMask[78]) + if (changesMask[82]) { data.WriteUInt32(WatchedFactionIndex); } - if (_changesMask[79]) + if (changesMask[83]) { data.WriteInt32(MaxLevel); } - if (_changesMask[80]) + if (changesMask[84]) { data.WriteInt32(ScalingPlayerLevelDelta); } - if (_changesMask[81]) + if (changesMask[85]) { - data.WriteFloat(MaxCreatureScalingLevel); + data.WriteInt32(MaxCreatureScalingLevel); } - if (_changesMask[82]) + if (changesMask[86]) { - data.WriteFloat(PetSpellPower); + data.WriteUInt32(PetSpellPower); } - if (_changesMask[83]) + if (changesMask[87]) { data.WriteFloat(UiHitModifier); } - if (_changesMask[84]) + if (changesMask[88]) { data.WriteFloat(UiSpellHitModifier); } - if (_changesMask[85]) + if (changesMask[89]) { data.WriteInt32(HomeRealmTimeOffset); } - if (_changesMask[86]) + if (changesMask[90]) { data.WriteFloat(ModPetHaste); } - if (_changesMask[87]) + if (changesMask[91]) + { + data.WriteInt8(JailersTowerLevelMax); + } + if (changesMask[92]) + { + data.WriteInt8(JailersTowerLevel); + } + if (changesMask[93]) { data.WriteUInt8(LocalRegenFlags); } - if (_changesMask[88]) + if (changesMask[94]) { - data.WriteUInt32(AuraVision); + data.WriteUInt8(AuraVision); } - if (_changesMask[89]) + if (changesMask[95]) { - data.WriteInt32(NumBackpackSlots); + data.WriteUInt8(NumBackpackSlots); } - if (_changesMask[90]) + if (changesMask[96]) { data.WriteUInt32(OverrideSpellsID); } - if (_changesMask[91]) + if (changesMask[97]) { - data.WriteInt32(LfgBonusFactionID); + data.WriteUInt16(LootSpecID); } - if (_changesMask[92]) - { - data.WriteUInt32(LootSpecID); - } - if (_changesMask[93]) + } + if (changesMask[98]) + { + if (changesMask[99]) { data.WriteUInt32(OverrideZonePVPType); } - if (_changesMask[94]) + if (changesMask[100]) + { + data.WritePackedGuid(BnetAccount); + } + if (changesMask[101]) + { + data.WriteUInt64(GuildClubMemberID); + } + if (changesMask[102]) { data.WriteUInt32(Honor); } - if (_changesMask[95]) + if (changesMask[103]) { data.WriteUInt32(HonorNextLevel); } - if (_changesMask[96]) + if (changesMask[104]) { data.WriteInt32(PvpRewardAchieved); } - if (_changesMask[97]) + if (changesMask[105]) { data.WriteInt32(PvpTierMaxFromWins); } - } - if (_changesMask[98]) - { - if (_changesMask[99]) + if (changesMask[106]) { data.WriteInt32(PvpLastWeeksRewardAchieved); } - if (_changesMask[100]) + if (changesMask[107]) { data.WriteInt32(PvpLastWeeksTierMaxFromWins); } - if (_changesMask[101]) + if (changesMask[108]) { data.WriteInt32(PvpLastWeeksRewardClaimed); } - if (_changesMask[102]) + if (changesMask[109]) { data.WriteUInt8(NumBankSlots); } + if (changesMask[112]) + { + data.WriteInt32(UiChromieTimeExpansionID); + } + if (changesMask[113]) + { + data.WriteInt32(TransportServerTime); + } } - data.FlushBits(); - if (_changesMask[98]) + if (changesMask[98]) { - data.WriteBit(QuestSession.GetValue().HasValue); - if (_changesMask[103]) + data.WriteBits(QuestSession.GetValue().HasValue, 1); + if (changesMask[111]) + { + ((ActivePlayerUnk901)Field_1410).WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + if (changesMask[110]) { if (QuestSession.GetValue().HasValue) { @@ -4206,157 +4581,161 @@ namespace Game.Entities } } } - if (_changesMask[104]) + if (changesMask[114]) { for (int i = 0; i < 199; ++i) { - if (_changesMask[105 + i]) + if (changesMask[115 + i]) { data.WritePackedGuid(InvSlots[i]); } } } - if (_changesMask[304]) + if (changesMask[314]) { for (int i = 0; i < 2; ++i) { - if (_changesMask[305 + i]) + if (changesMask[315 + i]) { data.WriteUInt32(TrackResourceMask[i]); } } } - if (_changesMask[307]) + if (changesMask[317]) { for (int i = 0; i < 192; ++i) { - if (_changesMask[308 + i]) + if (changesMask[318 + i]) { data.WriteUInt64(ExploredZones[i]); } } } - if (_changesMask[500]) + if (changesMask[510]) { for (int i = 0; i < 2; ++i) { - if (_changesMask[501 + i]) + if (changesMask[511 + i]) { RestInfo[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } } - if (_changesMask[503]) + if (changesMask[513]) { for (int i = 0; i < 7; ++i) { - if (_changesMask[504 + i]) + if (changesMask[514 + i]) { data.WriteInt32(ModDamageDonePos[i]); } - if (_changesMask[511 + i]) + if (changesMask[521 + i]) { data.WriteInt32(ModDamageDoneNeg[i]); } - if (_changesMask[518 + i]) + if (changesMask[528 + i]) { data.WriteFloat(ModDamageDonePercent[i]); } + if (changesMask[535 + i]) + { + data.WriteFloat(ModHealingDonePercent[i]); + } } } - if (_changesMask[525]) + if (changesMask[542]) { for (int i = 0; i < 3; ++i) { - if (_changesMask[526 + i]) + if (changesMask[543 + i]) { data.WriteFloat(WeaponDmgMultipliers[i]); } - if (_changesMask[529 + i]) + if (changesMask[546 + i]) { data.WriteFloat(WeaponAtkSpeedMultipliers[i]); } } } - if (_changesMask[532]) + if (changesMask[549]) { for (int i = 0; i < 12; ++i) { - if (_changesMask[533 + i]) + if (changesMask[550 + i]) { data.WriteUInt32(BuybackPrice[i]); } - if (_changesMask[545 + i]) + if (changesMask[562 + i]) { data.WriteUInt32(BuybackTimestamp[i]); } } } - if (_changesMask[557]) + if (changesMask[574]) { for (int i = 0; i < 32; ++i) { - if (_changesMask[558 + i]) + if (changesMask[575 + i]) { data.WriteUInt32(CombatRatings[i]); } } } - if (_changesMask[597]) + if (changesMask[614]) { for (int i = 0; i < 4; ++i) { - if (_changesMask[598 + i]) + if (changesMask[615 + i]) { data.WriteUInt32(NoReagentCostMask[i]); } } } - if (_changesMask[602]) + if (changesMask[619]) { for (int i = 0; i < 2; ++i) { - if (_changesMask[603 + i]) + if (changesMask[620 + i]) { data.WriteUInt32(ProfessionSkillLine[i]); } } } - if (_changesMask[605]) + if (changesMask[622]) { for (int i = 0; i < 4; ++i) { - if (_changesMask[606 + i]) + if (changesMask[623 + i]) { data.WriteUInt32(BagSlotFlags[i]); } } } - if (_changesMask[610]) + if (changesMask[627]) { for (int i = 0; i < 7; ++i) { - if (_changesMask[611 + i]) + if (changesMask[628 + i]) { data.WriteUInt32(BankBagSlotFlags[i]); } } } - if (_changesMask[618]) + if (changesMask[635]) { for (int i = 0; i < 875; ++i) { - if (_changesMask[619 + i]) + if (changesMask[636 + i]) { data.WriteUInt64(QuestCompleted[i]); } } } - if (_changesMask[590]) + if (changesMask[607]) { for (int i = 0; i < 6; ++i) { - if (_changesMask[591 + i]) + if (changesMask[608 + i]) { PvpInfo[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } @@ -4384,8 +4763,13 @@ namespace Game.Entities ClearChangesMask(Transmog); ClearChangesMask(ConditionalTransmog); ClearChangesMask(SelfResSpells); + ClearChangesMask(RuneforgePowers); + ClearChangesMask(TransmogIllusions); ClearChangesMask(SpellPctModByLabel); ClearChangesMask(SpellFlatModByLabel); + ClearChangesMask(MawPowers); + ClearChangesMask(MultiFloorExploration); + ClearChangesMask(RecipeProgression); ClearChangesMask(ReplayedQuests); ClearChangesMask(DisabledSpells); ClearChangesMask(CharacterRestrictions); @@ -4424,7 +4808,6 @@ namespace Game.Entities ClearChangesMask(PvpPowerHealing); ClearChangesMask(ModHealingDonePos); ClearChangesMask(ModHealingPercent); - ClearChangesMask(ModHealingDonePercent); ClearChangesMask(ModPeriodicHealingDonePercent); ClearChangesMask(ModSpellPowerPercent); ClearChangesMask(ModResiliencePercent); @@ -4450,13 +4833,16 @@ namespace Game.Entities ClearChangesMask(UiSpellHitModifier); ClearChangesMask(HomeRealmTimeOffset); ClearChangesMask(ModPetHaste); + ClearChangesMask(JailersTowerLevelMax); + ClearChangesMask(JailersTowerLevel); ClearChangesMask(LocalRegenFlags); ClearChangesMask(AuraVision); ClearChangesMask(NumBackpackSlots); ClearChangesMask(OverrideSpellsID); - ClearChangesMask(LfgBonusFactionID); ClearChangesMask(LootSpecID); ClearChangesMask(OverrideZonePVPType); + ClearChangesMask(BnetAccount); + ClearChangesMask(GuildClubMemberID); ClearChangesMask(Honor); ClearChangesMask(HonorNextLevel); ClearChangesMask(PvpRewardAchieved); @@ -4465,7 +4851,10 @@ namespace Game.Entities ClearChangesMask(PvpLastWeeksTierMaxFromWins); ClearChangesMask(PvpLastWeeksRewardClaimed); ClearChangesMask(NumBankSlots); + ClearChangesMask(Field_1410); ClearChangesMask(QuestSession); + ClearChangesMask(UiChromieTimeExpansionID); + ClearChangesMask(TransportServerTime); ClearChangesMask(InvSlots); ClearChangesMask(TrackResourceMask); ClearChangesMask(ExploredZones); @@ -4473,6 +4862,7 @@ namespace Game.Entities ClearChangesMask(ModDamageDonePos); ClearChangesMask(ModDamageDoneNeg); ClearChangesMask(ModDamageDonePercent); + ClearChangesMask(ModHealingDonePercent); ClearChangesMask(WeaponDmgMultipliers); ClearChangesMask(WeaponAtkSpeedMultipliers); ClearChangesMask(BuybackPrice); @@ -4503,14 +4893,15 @@ namespace Game.Entities public UpdateField Flags = new UpdateField(0, 11); public UpdateField ParentRotation = new UpdateField(0, 12); public UpdateField FactionTemplate = new UpdateField(0, 13); - public UpdateField Level = new UpdateField(0, 14); - public UpdateField State = new UpdateField(0, 15); - public UpdateField TypeID = new UpdateField(0, 16); - public UpdateField PercentHealth = new UpdateField(0, 17); - public UpdateField ArtKit = new UpdateField(0, 18); - public UpdateField CustomParam = new UpdateField(0, 19); + public UpdateField State = new UpdateField(0, 14); + public UpdateField TypeID = new UpdateField(0, 15); + public UpdateField PercentHealth = new UpdateField(0, 16); + public UpdateField ArtKit = new UpdateField(0, 17); + public UpdateField CustomParam = new UpdateField(0, 18); + public UpdateField Level = new UpdateField(0, 19); + public UpdateField AnimGroupInstance = new UpdateField(0, 20); - public GameObjectFieldData() : base(0, TypeId.GameObject, 20) { } + public GameObjectFieldData() : base(0, TypeId.GameObject, 21) { } public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, GameObject owner, Player receiver) { @@ -4534,13 +4925,14 @@ namespace Game.Entities data.WriteFloat(rotation.Z); data.WriteFloat(rotation.W); data.WriteUInt32(FactionTemplate); - data.WriteUInt32(GetViewerGameObjectLevel(Level, owner, receiver)); - data.WriteInt8((sbyte)GetViewerGameObjectState(State, owner, receiver)); - data.WriteInt8((sbyte)TypeID); + data.WriteInt8(GetViewerGameObjectState(State, owner, receiver)); + data.WriteInt8(TypeID); data.WriteUInt8(PercentHealth); data.WriteUInt32(ArtKit); data.WriteInt32(EnableDoodadSets.Size()); data.WriteUInt32(CustomParam); + data.WriteUInt32(GetViewerGameObjectLevel(Level, owner, receiver)); + data.WriteUInt32(AnimGroupInstance); for (int i = 0; i < EnableDoodadSets.Size(); ++i) { data.WriteInt32(EnableDoodadSets[i]); @@ -4554,24 +4946,23 @@ namespace Game.Entities public void WriteUpdate(WorldPacket data, UpdateMask changesMask, bool ignoreNestedChangesMask, GameObject owner, Player receiver) { - data.WriteBits(_changesMask.GetBlock(0), 20); + data.WriteBits(changesMask.GetBlock(0), 21); - if (_changesMask[0]) + if (changesMask[0]) { - if (_changesMask[1]) + if (changesMask[1]) { - List list = StateWorldEffectIDs; - data.WriteBits(list.Count, 32); - for (int i = 0; i < list.Count; ++i) + data.WriteBits(((List)StateWorldEffectIDs).Count, 32); + for (int i = 0; i < ((List)StateWorldEffectIDs).Count; ++i) { - data.WriteUInt32(list[i]); + data.WriteUInt32(((List)StateWorldEffectIDs)[i]); } } } data.FlushBits(); - if (_changesMask[0]) + if (changesMask[0]) { - if (_changesMask[2]) + if (changesMask[2]) { if (!ignoreNestedChangesMask) EnableDoodadSets.WriteUpdateMask(data); @@ -4580,9 +4971,9 @@ namespace Game.Entities } } data.FlushBits(); - if (_changesMask[0]) + if (changesMask[0]) { - if (_changesMask[2]) + if (changesMask[2]) { for (int i = 0; i < EnableDoodadSets.Size(); ++i) { @@ -4592,78 +4983,81 @@ namespace Game.Entities } } } - if (_changesMask[3]) + if (changesMask[3]) { data.WriteUInt32(DisplayID); } - if (_changesMask[4]) + if (changesMask[4]) { data.WriteUInt32(SpellVisualID); } - if (_changesMask[5]) + if (changesMask[5]) { data.WriteUInt32(StateSpellVisualID); } - if (_changesMask[6]) + if (changesMask[6]) { data.WriteUInt32(SpawnTrackingStateAnimID); } - if (_changesMask[7]) + if (changesMask[7]) { data.WriteUInt32(SpawnTrackingStateAnimKitID); } - if (_changesMask[8]) + if (changesMask[8]) { data.WriteUInt32(StateWorldEffectsQuestObjectiveID); } - if (_changesMask[9]) + if (changesMask[9]) { data.WritePackedGuid(CreatedBy); } - if (_changesMask[10]) + if (changesMask[10]) { data.WritePackedGuid(GuildGUID); } - if (_changesMask[11]) + if (changesMask[11]) { data.WriteUInt32(GetViewerGameObjectFlags(Flags, owner, receiver)); } - if (_changesMask[12]) + if (changesMask[12]) { - Quaternion rotation = ParentRotation; - data.WriteFloat(rotation.X); - data.WriteFloat(rotation.Y); - data.WriteFloat(rotation.Z); - data.WriteFloat(rotation.W); + data.WriteFloat(((Quaternion)ParentRotation).X); + data.WriteFloat(((Quaternion)ParentRotation).Y); + data.WriteFloat(((Quaternion)ParentRotation).Z); + data.WriteFloat(((Quaternion)ParentRotation).W); } - if (_changesMask[13]) + if (changesMask[13]) { data.WriteUInt32(FactionTemplate); } - if (_changesMask[14]) + if (changesMask[14]) { - data.WriteUInt32(GetViewerGameObjectLevel(Level, owner, receiver)); + data.WriteInt8(GetViewerGameObjectState(State, owner, receiver)); } - if (_changesMask[15]) + if (changesMask[15]) { - data.WriteInt8((sbyte)GetViewerGameObjectState(State, owner, receiver)); + data.WriteInt8(TypeID); } - if (_changesMask[16]) - { - data.WriteInt8((sbyte)TypeID); - } - if (_changesMask[17]) + if (changesMask[16]) { data.WriteUInt8(PercentHealth); } - if (_changesMask[18]) + if (changesMask[17]) { data.WriteUInt32(ArtKit); } - if (_changesMask[19]) + if (changesMask[18]) { data.WriteUInt32(CustomParam); } + if (changesMask[19]) + { + data.WriteUInt32(GetViewerGameObjectLevel(Level, owner, receiver)); + } + if (changesMask[20]) + { + data.WriteUInt32(AnimGroupInstance); + } } } @@ -4682,12 +5076,13 @@ namespace Game.Entities ClearChangesMask(Flags); ClearChangesMask(ParentRotation); ClearChangesMask(FactionTemplate); - ClearChangesMask(Level); ClearChangesMask(State); ClearChangesMask(TypeID); ClearChangesMask(PercentHealth); ClearChangesMask(ArtKit); ClearChangesMask(CustomParam); + ClearChangesMask(Level); + ClearChangesMask(AnimGroupInstance); _changesMask.ResetAll(); } @@ -4720,7 +5115,7 @@ namespace Game.Entities public class DynamicObjectData : BaseUpdateData { public UpdateField Caster = new UpdateField(0, 1); - public UpdateField SpellXSpellVisualID = new UpdateField(0, 2); + public UpdateField SpellVisual = new UpdateField(0, 2); public UpdateField SpellID = new UpdateField(0, 3); public UpdateField Radius = new UpdateField(0, 4); public UpdateField CastTime = new UpdateField(0, 5); @@ -4731,7 +5126,7 @@ namespace Game.Entities public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, DynamicObject owner, Player receiver) { data.WritePackedGuid(Caster); - data.WriteUInt32(SpellXSpellVisualID); + ((SpellCastVisualField)SpellVisual).WriteCreate(data, owner, receiver); data.WriteUInt32(SpellID); data.WriteFloat(Radius); data.WriteUInt32(CastTime); @@ -4756,7 +5151,7 @@ namespace Game.Entities } if (_changesMask[2]) { - data.WriteUInt32(SpellXSpellVisualID); + ((SpellCastVisualField)SpellVisual).WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } if (_changesMask[3]) { @@ -4780,7 +5175,7 @@ namespace Game.Entities public override void ClearChangesMask() { ClearChangesMask(Caster); - ClearChangesMask(SpellXSpellVisualID); + ClearChangesMask(SpellVisual); ClearChangesMask(SpellID); ClearChangesMask(Radius); ClearChangesMask(CastTime); @@ -4791,25 +5186,21 @@ namespace Game.Entities public class CorpseData : BaseUpdateData { - public UpdateField DynamicFlags = new UpdateField(0, 1); - public UpdateField Owner = new UpdateField(0, 2); - public UpdateField PartyGUID = new UpdateField(0, 3); - public UpdateField GuildGUID = new UpdateField(0, 4); - public UpdateField DisplayID = new UpdateField(0, 5); - public UpdateField Unused = new UpdateField(0, 6); - public UpdateField RaceID = new UpdateField(0, 7); - public UpdateField Sex = new UpdateField(0, 8); - public UpdateField SkinID = new UpdateField(0, 9); - public UpdateField FaceID = new UpdateField(0, 10); - public UpdateField HairStyleID = new UpdateField(0, 11); - public UpdateField HairColorID = new UpdateField(0, 12); - public UpdateField FacialHairStyleID = new UpdateField(0, 13); - public UpdateField Flags = new UpdateField(0, 14); - public UpdateField FactionTemplate = new UpdateField(0, 15); - public UpdateFieldArray Items = new UpdateFieldArray(19, 16, 17); - public UpdateFieldArray CustomDisplayOption = new UpdateFieldArray(3, 36, 37); + public DynamicUpdateField Customizations = new DynamicUpdateField(0, 1); + public UpdateField DynamicFlags = new UpdateField(0, 2); + public UpdateField Owner = new UpdateField(0, 3); + public UpdateField PartyGUID = new UpdateField(0, 4); + public UpdateField GuildGUID = new UpdateField(0, 5); + public UpdateField DisplayID = new UpdateField(0, 6); + public UpdateField Unused = new UpdateField(0, 7); + public UpdateField RaceID = new UpdateField(0, 8); + public UpdateField Sex = new UpdateField(0, 9); + public UpdateField Flags = new UpdateField(0, 10); + public UpdateField FactionTemplate = new UpdateField(0, 11); + public UpdateField StateSpellVisualKitID = new UpdateField(0, 12); + public UpdateFieldArray Items = new UpdateFieldArray(19, 13, 14); - public CorpseData() : base(0, TypeId.Corpse, 40) { } + public CorpseData() : base(0, TypeId.Corpse, 33) { } public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Corpse owner, Player receiver) { @@ -4825,16 +5216,13 @@ namespace Game.Entities data.WriteUInt8(Unused); data.WriteUInt8(RaceID); data.WriteUInt8(Sex); - data.WriteUInt8(SkinID); - data.WriteUInt8(FaceID); - data.WriteUInt8(HairStyleID); - data.WriteUInt8(HairColorID); - data.WriteUInt8(FacialHairStyleID); + data.WriteInt32(Customizations.Size()); data.WriteUInt32(Flags); data.WriteInt32(FactionTemplate); - for (int i = 0; i < 3; ++i) + data.WriteUInt32(StateSpellVisualKitID); + for (int i = 0; i < Customizations.Size(); ++i) { - data.WriteUInt8(CustomDisplayOption[i]); + Customizations[i].WriteCreate(data, owner, receiver); } } @@ -4845,99 +5233,94 @@ namespace Game.Entities public void WriteUpdate(WorldPacket data, UpdateMask changesMask, bool ignoreNestedChangesMask, Corpse owner, Player receiver) { - data.WriteBits(_changesMask.GetBlocksMask(0), 2); + data.WriteBits(changesMask.GetBlocksMask(0), 2); for (uint i = 0; i < 2; ++i) - if (_changesMask.GetBlock(i) != 0) - data.WriteBits(_changesMask.GetBlock(i), 32); + if (changesMask.GetBlock(i) != 0) + data.WriteBits(changesMask.GetBlock(i), 32); - data.FlushBits(); - if (_changesMask[0]) + if (changesMask[0]) { - if (_changesMask[1]) + if (changesMask[1]) + { + if (!ignoreNestedChangesMask) + Customizations.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(Customizations.Size(), data); + } + } + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[1]) + { + for (int i = 0; i < Customizations.Size(); ++i) + { + if (Customizations.HasChanged(i) || ignoreNestedChangesMask) + { + Customizations[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + } + } + if (changesMask[2]) { data.WriteUInt32(DynamicFlags); } - if (_changesMask[2]) + if (changesMask[3]) { data.WritePackedGuid(Owner); } - if (_changesMask[3]) + if (changesMask[4]) { data.WritePackedGuid(PartyGUID); } - if (_changesMask[4]) + if (changesMask[5]) { data.WritePackedGuid(GuildGUID); } - if (_changesMask[5]) + if (changesMask[6]) { data.WriteUInt32(DisplayID); } - if (_changesMask[6]) + if (changesMask[7]) { data.WriteUInt8(Unused); } - if (_changesMask[7]) + if (changesMask[8]) { data.WriteUInt8(RaceID); } - if (_changesMask[8]) + if (changesMask[9]) { data.WriteUInt8(Sex); } - if (_changesMask[9]) - { - data.WriteUInt8(SkinID); - } - if (_changesMask[10]) - { - data.WriteUInt8(FaceID); - } - if (_changesMask[11]) - { - data.WriteUInt8(HairStyleID); - } - if (_changesMask[12]) - { - data.WriteUInt8(HairColorID); - } - if (_changesMask[13]) - { - data.WriteUInt8(FacialHairStyleID); - } - if (_changesMask[14]) + if (changesMask[10]) { data.WriteUInt32(Flags); } - if (_changesMask[15]) + if (changesMask[11]) { data.WriteInt32(FactionTemplate); } + if (changesMask[12]) + { + data.WriteUInt32(StateSpellVisualKitID); + } } - if (_changesMask[16]) + if (changesMask[13]) { for (int i = 0; i < 19; ++i) { - if (_changesMask[17 + i]) + if (changesMask[14 + i]) { data.WriteUInt32(Items[i]); } } } - if (_changesMask[36]) - { - for (int i = 0; i < 3; ++i) - { - if (_changesMask[37 + i]) - { - data.WriteUInt8(CustomDisplayOption[i]); - } - } - } } public override void ClearChangesMask() { + ClearChangesMask(Customizations); ClearChangesMask(DynamicFlags); ClearChangesMask(Owner); ClearChangesMask(PartyGUID); @@ -4946,15 +5329,10 @@ namespace Game.Entities ClearChangesMask(Unused); ClearChangesMask(RaceID); ClearChangesMask(Sex); - ClearChangesMask(SkinID); - ClearChangesMask(FaceID); - ClearChangesMask(HairStyleID); - ClearChangesMask(HairColorID); - ClearChangesMask(FacialHairStyleID); ClearChangesMask(Flags); ClearChangesMask(FactionTemplate); + ClearChangesMask(StateSpellVisualKitID); ClearChangesMask(Items); - ClearChangesMask(CustomDisplayOption); _changesMask.ResetAll(); } } @@ -4976,6 +5354,7 @@ namespace Game.Entities data.WriteVector2(Points[i]); } data.WriteUInt32(ParameterCurve); + data.FlushBits(); data.WriteBit(OverrideActive); data.FlushBits(); } @@ -5042,7 +5421,7 @@ namespace Game.Entities public UpdateField TimeToTargetExtraScale = new UpdateField(0, 7); public UpdateField SpellID = new UpdateField(0, 8); public UpdateField SpellForVisuals = new UpdateField(0, 9); - public UpdateField SpellXSpellVisualID = new UpdateField(0, 10); + public UpdateField SpellVisual = new UpdateField(0, 10); public UpdateField BoundsRadius2D = new UpdateField(0, 11); public UpdateField DecalPropertiesID = new UpdateField(0, 12); public UpdateField CreatingEffectGUID = new UpdateField(0, 13); @@ -5050,7 +5429,7 @@ namespace Game.Entities public AreaTriggerFieldData() : base(0, TypeId.AreaTrigger, 14) { } public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, AreaTrigger owner, Player receiver) - { + { ((ScaleCurve)OverrideScaleCurve).WriteCreate(data, owner, receiver); data.WritePackedGuid(Caster); data.WriteUInt32(Duration); @@ -5059,7 +5438,9 @@ namespace Game.Entities data.WriteUInt32(TimeToTargetExtraScale); data.WriteUInt32(SpellID); data.WriteUInt32(SpellForVisuals); - data.WriteUInt32(SpellXSpellVisualID); + + ((SpellCastVisualField)SpellVisual).WriteCreate(data, owner, receiver); + data.WriteFloat(BoundsRadius2D); data.WriteUInt32(DecalPropertiesID); data.WritePackedGuid(CreatingEffectGUID); @@ -5112,7 +5493,7 @@ namespace Game.Entities } if (_changesMask[10]) { - data.WriteUInt32(SpellXSpellVisualID); + ((SpellCastVisualField)SpellVisual).WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } if (_changesMask[11]) { @@ -5144,7 +5525,7 @@ namespace Game.Entities ClearChangesMask(TimeToTargetExtraScale); ClearChangesMask(SpellID); ClearChangesMask(SpellForVisuals); - ClearChangesMask(SpellXSpellVisualID); + ClearChangesMask(SpellVisual); ClearChangesMask(BoundsRadius2D); ClearChangesMask(DecalPropertiesID); ClearChangesMask(CreatingEffectGUID); @@ -5217,6 +5598,7 @@ namespace Game.Entities public uint UiCameraID; public byte ActorIndex; public byte Flags; + public byte ChatType; public void WriteCreate(WorldPacket data, Conversation owner, Player receiver) { @@ -5225,6 +5607,7 @@ namespace Game.Entities data.WriteUInt32(UiCameraID); data.WriteUInt8(ActorIndex); data.WriteUInt8(Flags); + data.WriteUInt8(ChatType); } public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, Conversation owner, Player receiver) @@ -5234,6 +5617,7 @@ namespace Game.Entities data.WriteUInt32(UiCameraID); data.WriteUInt8(ActorIndex); data.WriteUInt8(Flags); + data.WriteUInt8(ChatType); } } @@ -5244,6 +5628,7 @@ namespace Game.Entities public ObjectGuid ActorGUID; public int Field_18; public ConversationActorType Type; + public uint NoActorObject; public void WriteCreate(WorldPacket data, Conversation owner, Player receiver) { @@ -5252,6 +5637,7 @@ namespace Game.Entities data.WritePackedGuid(ActorGUID); data.WriteInt32(Field_18); data.WriteBits(Type, 1); + data.WriteBits(NoActorObject, 1); data.FlushBits(); } @@ -5262,6 +5648,7 @@ namespace Game.Entities data.WritePackedGuid(ActorGUID); data.WriteInt32(Field_18); data.WriteBits(Type, 1); + data.WriteBits(NoActorObject, 1); data.FlushBits(); } } diff --git a/Source/Game/Entities/Player/Player.DB.cs b/Source/Game/Entities/Player/Player.DB.cs index 181d2a9dc..b04df9f6e 100644 --- a/Source/Game/Entities/Player/Player.DB.cs +++ b/Source/Game/Entities/Player/Player.DB.cs @@ -1832,6 +1832,38 @@ namespace Game.Entities pair.Value.state = PlayerCurrencyState.Unchanged; } } + + public static void SavePlayerCustomizations(SQLTransaction trans, ulong guid, List customizations) + { + PreparedStatement stmt = DB.Characters.GetPreparedStatement(CharStatements.DEL_CHARACTER_CUSTOMIZATIONS); + stmt.AddValue(0, guid); + trans.Append(stmt); + + foreach (var customization in customizations) + { + stmt = DB.Characters.GetPreparedStatement(CharStatements.INS_CHARACTER_CUSTOMIZATION); + stmt.AddValue(0, guid); + stmt.AddValue(1, customization.ChrCustomizationOptionID); + stmt.AddValue(2, customization.ChrCustomizationChoiceID); + trans.Append(stmt); + } + } + + public static void SaveCustomizations(SQLTransaction trans, ulong guid, List customizations) + { + SavePlayerCustomizations(trans, guid, customizations); + } + + void _SaveCustomizations(SQLTransaction trans) + { + if (!m_customizationsChanged) + return; + + m_customizationsChanged = false; + + SavePlayerCustomizations(trans, GetGUID().GetCounter(), m_playerData.Customizations); + } + void _SaveActions(SQLTransaction trans) { PreparedStatement stmt = null; @@ -2418,19 +2450,86 @@ namespace Game.Entities SQLResult result = holder.GetResult(PlayerLoginQueryLoad.From); if (result.IsEmpty()) { - string name; - Global.CharacterCacheStorage.GetCharacterNameByGuid(guid, out name); - Log.outError(LogFilter.Player, "Player {0} {1} not found in table `characters`, can't load. ", name, guid.ToString()); + Global.CharacterCacheStorage.GetCharacterNameByGuid(guid, out string cacheName); + Log.outError(LogFilter.Player, "Player {0} {1} not found in table `characters`, can't load. ", cacheName, guid.ToString()); return false; } - uint dbAccountId = result.Read(1); + int fieldIndex = 1; + uint accountId = result.Read(fieldIndex++); + string name = result.Read(fieldIndex++); + Race race = (Race)result.Read(fieldIndex++); + Class class_ = (Class)result.Read(fieldIndex++); + Gender gender = (Gender)result.Read(fieldIndex++); + byte level = result.Read(fieldIndex++); + uint xp = result.Read(fieldIndex++); + ulong money = result.Read(fieldIndex++); + byte inventorySlots = result.Read(fieldIndex++); + byte bankSlots = result.Read(fieldIndex++); + PlayerRestState restState = (PlayerRestState)result.Read(fieldIndex++); + PlayerFlags playerFlags = (PlayerFlags)result.Read(fieldIndex++); + PlayerFlagsEx playerFlagsEx = (PlayerFlagsEx)result.Read(fieldIndex++); + float position_x = result.Read(fieldIndex++); + float position_y = result.Read(fieldIndex++); + float position_z = result.Read(fieldIndex++); + uint mapId = result.Read(fieldIndex++); + float orientation = result.Read(fieldIndex++); + string taximask = result.Read(fieldIndex++); + byte cinematic = result.Read(fieldIndex++); + uint totaltime = result.Read (fieldIndex++); + uint leveltime = result.Read(fieldIndex++); + float rest_bonus = result.Read(fieldIndex++); + uint logout_time = result.Read(fieldIndex++); + byte is_logout_resting = result.Read(fieldIndex++); + uint resettalents_cost = result.Read(fieldIndex++); + uint resettalents_time = result.Read(fieldIndex++); + uint primarySpecialization = result.Read(fieldIndex++); + float trans_x = result.Read(fieldIndex++); + float trans_y = result.Read(fieldIndex++); + float trans_z = result.Read(fieldIndex++); + float trans_o = result.Read(fieldIndex++); + ulong transguid = result.Read(fieldIndex++); + PlayerExtraFlags extra_flags = (PlayerExtraFlags)result.Read(fieldIndex++); + byte stable_slots = result.Read(fieldIndex++); + ushort at_login = result.Read(fieldIndex++); + ushort zone = result.Read(fieldIndex++); + byte online = result.Read(fieldIndex++); + uint death_expire_time = result.Read(fieldIndex++); + string taxi_path = result.Read(fieldIndex++); + Difficulty dungeonDifficulty = (Difficulty)result.Read(fieldIndex++); + uint totalKills = result.Read(fieldIndex++); + ushort todayKills = result.Read(fieldIndex++); + ushort yesterdayKills = result.Read(fieldIndex++); + uint chosenTitle = result.Read(fieldIndex++); + uint watchedFaction = result.Read(fieldIndex++); + byte drunk = result.Read(fieldIndex++); + uint health = result.Read(fieldIndex++); + + uint[] powers = new uint[(int)PowerType.MaxPerClass]; + for (var i = 0; fieldIndex < powers.Length; ++i) + powers[i] = result.Read(fieldIndex++); + + uint instance_id = result.Read(fieldIndex++); + byte activeTalentGroup = result.Read(fieldIndex++); + uint lootSpecId = result.Read(fieldIndex++); + string exploredZones = result.Read(fieldIndex++); + string knownTitles = result.Read(fieldIndex++); + byte actionBars = result.Read(fieldIndex++); + Difficulty raidDifficulty = (Difficulty)result.Read(fieldIndex++); + Difficulty legacyRaidDifficulty = (Difficulty)result.Read(fieldIndex++); + byte fishingSteps = result.Read(fieldIndex++); + uint honor = result.Read(fieldIndex++); + uint honorLevel = result.Read(fieldIndex++); + PlayerRestState honorRestState = (PlayerRestState)result.Read(fieldIndex++); + float honorRestBonus = result.Read(fieldIndex++); + byte numRespecs = result.Read(fieldIndex++); + // check if the character's account in the db and the logged in account match. // player should be able to load/delete character only with correct account! - if (dbAccountId != GetSession().GetAccountId()) + if (accountId != GetSession().GetAccountId()) { - Log.outError(LogFilter.Player, "Player (GUID: {0}) loading from wrong account (is: {1}, should be: {2})", GetGUID().ToString(), GetSession().GetAccountId(), dbAccountId); + Log.outError(LogFilter.Player, "Player (GUID: {0}) loading from wrong account (is: {1}, should be: {2})", GetGUID().ToString(), GetSession().GetAccountId(), accountId); return false; } @@ -2443,7 +2542,7 @@ namespace Game.Entities _Create(guid); - SetName(result.Read(2)); + SetName(name); // check name limitations if (ObjectManager.CheckPlayerName(GetName(), GetSession().GetSessionDbcLocale()) != ResponseCodes.CharNameSuccess || @@ -2456,18 +2555,18 @@ namespace Game.Entities return false; } - // overwrite possible wrong/corrupted guid - SetUpdateFieldValue(m_values.ModifyValue(m_playerData).ModifyValue(m_playerData.WowAccount), GetSession().GetAccountGUID()); - Gender gender = (Gender)result.Read(5); + SetUpdateFieldValue(m_values.ModifyValue(m_playerData).ModifyValue(m_playerData.WowAccount), GetSession().GetAccountGUID()); + SetUpdateFieldValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.BnetAccount), GetSession().GetBattlenetAccountGUID()); + if (gender >= Gender.None) { Log.outError(LogFilter.Player, "Player {0} has wrong gender ({1}), can't be loaded.", guid.ToString(), gender); return false; } - SetRace((Race)result.Read(3)); - SetClass((Class)result.Read(4)); + SetRace(race); + SetClass(class_); SetGender(gender); // check if race/class combination is valid @@ -2478,19 +2577,19 @@ namespace Game.Entities return false; } - SetLevel(result.Read(6)); - SetXP(result.Read(7)); + SetLevel(level); + SetXP(xp); - StringArray exploredZones = new StringArray(result.Read(66), ' '); - if (exploredZones.Length == PlayerConst.ExploredZonesSize * 2) - for (int i = 0; i < exploredZones.Length; ++i) - SetUpdateFieldFlagValue(ref m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.ExploredZones, i / 2), (ulong)((long.Parse(exploredZones[i])) << (32 * (i % 2)))); + StringArray exploredZonesStrings = new StringArray(exploredZones, ' '); + if (exploredZonesStrings.Length == PlayerConst.ExploredZonesSize * 2) + for (int i = 0; i < exploredZonesStrings.Length; ++i) + SetUpdateFieldFlagValue(ref m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.ExploredZones, i / 2), (ulong)((long.Parse(exploredZonesStrings[i])) << (32 * (i % 2)))); - StringArray knownTitles = new StringArray(result.Read(67), ' '); - if ((knownTitles.Length % 2) == 0) + StringArray knownTitlesStrings = new StringArray(knownTitles, ' '); + if ((knownTitlesStrings.Length % 2) == 0) { - for (int i = 0; i < knownTitles.Length; ++i) - SetUpdateFieldFlagValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.KnownTitles, i / 2), (ulong)((long.Parse(knownTitles[i])) << (32 * (i % 2)))); + for (int i = 0; i < knownTitlesStrings.Length; ++i) + SetUpdateFieldFlagValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.KnownTitles, i / 2), (ulong)((long.Parse(knownTitlesStrings[i])) << (32 * (i % 2)))); } SetObjectScale(1.0f); @@ -2500,42 +2599,42 @@ namespace Game.Entities m_achievementSys.LoadFromDB(holder.GetResult(PlayerLoginQueryLoad.Achievements), holder.GetResult(PlayerLoginQueryLoad.CriteriaProgress)); m_questObjectiveCriteriaMgr.LoadFromDB(holder.GetResult(PlayerLoginQueryLoad.QuestStatusObjectivesCriteria), holder.GetResult(PlayerLoginQueryLoad.QuestStatusObjectivesCriteriaProgress)); - ulong money = result.Read(8); - if (money > PlayerConst.MaxMoneyAmount) - money = PlayerConst.MaxMoneyAmount; - SetMoney(money); + SetMoney(Math.Min(money, PlayerConst.MaxMoneyAmount)); - Array customDisplay = new Array(PlayerConst.CustomDisplaySize); - customDisplay[0] = result.Read(14); - customDisplay[1] = result.Read(15); - customDisplay[2] = result.Read(16); + List customizations = new List(); + SQLResult customizationsResult = holder.GetResult(PlayerLoginQueryLoad.Customizations); + if (!customizationsResult.IsEmpty()) + { + do + { - SetSkinId(result.Read(9)); - SetFaceId(result.Read(10)); - SetHairStyleId(result.Read(11)); - SetHairColorId(result.Read(12)); - SetFacialHairStyleId(result.Read(13)); - for (byte i = 0; i < PlayerConst.CustomDisplaySize; ++i) - SetCustomDisplayOption(i, customDisplay[i]); - SetInventorySlotCount(result.Read(17)); - SetBankBagSlotCount(result.Read(18)); + ChrCustomizationChoice choice; + choice.ChrCustomizationOptionID = customizationsResult.Read(0); + choice.ChrCustomizationChoiceID = customizationsResult.Read(1); + customizations.Add(choice); + + } while (customizationsResult.NextRow()); + } + + SetCustomizations(customizations, false); + SetInventorySlotCount(inventorySlots); + SetBankBagSlotCount(bankSlots); SetNativeSex(gender); - SetUpdateFieldValue(m_values.ModifyValue(m_playerData).ModifyValue(m_playerData.Inebriation), result.Read(55)); - SetPlayerFlags((PlayerFlags)result.Read(20)); - SetPlayerFlagsEx((PlayerFlagsEx)result.Read(21)); - SetWatchedFactionIndex(result.Read(54)); + SetUpdateFieldValue(m_values.ModifyValue(m_playerData).ModifyValue(m_playerData.Inebriation), drunk); + SetPlayerFlags(playerFlags); + SetPlayerFlagsEx(playerFlagsEx); + SetWatchedFactionIndex(watchedFaction); - if (!ValidateAppearance((Race)result.Read(3), (Class)result.Read(4), (Gender)gender, - m_playerData.HairStyleID, m_playerData.HairColorID, m_playerData.FaceID, m_playerData.FacialHairStyleID, m_playerData.SkinID, customDisplay)) + if (!GetSession().ValidateAppearance(GetRace(), GetClass(), gender, customizations)) { Log.outError(LogFilter.Player, "Player {0} has wrong Appearance values (Hair/Skin/Color), can't be loaded.", guid.ToString()); return false; } // set which actionbars the client has active - DO NOT REMOVE EVER AGAIN (can be changed though, if it does change fieldwise) - SetMultiActionBars(result.Read(68)); + SetMultiActionBars(actionBars); - m_fishingSteps = result.Read(71); + m_fishingSteps = fishingSteps; InitDisplayIds(); @@ -2560,27 +2659,20 @@ namespace Game.Entities InitPrimaryProfessions(); // to max set before any spell loaded // init saved position, and fix it later if problematic - ulong transLowGUID = result.Read(41); + Relocate(position_x, position_y, position_z, orientation); - Relocate(result.Read(22), result.Read(23), result.Read(24), result.Read(26)); + SetDungeonDifficultyID(CheckLoadedDungeonDifficultyID(dungeonDifficulty)); + SetRaidDifficultyID(CheckLoadedRaidDifficultyID(raidDifficulty)); + SetLegacyRaidDifficultyID(CheckLoadedLegacyRaidDifficultyID(legacyRaidDifficulty)); - uint mapId = result.Read(25); - uint instanceId = result.Read(63); - - var RelocateToHomebind = new Action(() => { mapId = homebind.GetMapId(); instanceId = 0; Relocate(homebind); }); - - SetDungeonDifficultyID(CheckLoadedDungeonDifficultyID((Difficulty)result.Read(49))); - SetRaidDifficultyID(CheckLoadedRaidDifficultyID((Difficulty)result.Read(69))); - SetLegacyRaidDifficultyID(CheckLoadedLegacyRaidDifficultyID((Difficulty)result.Read(70))); - - string taxi_nodes = result.Read(48); + var RelocateToHomebind = new Action(() => { mapId = (ushort)homebind.GetMapId(); instance_id = 0; Relocate(homebind); }); _LoadGroup(holder.GetResult(PlayerLoginQueryLoad.Group)); _LoadCurrency(holder.GetResult(PlayerLoginQueryLoad.Currency)); - SetUpdateFieldValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.LifetimeHonorableKills), result.Read(50)); - SetUpdateFieldValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.TodayHonorableKills), result.Read(51)); - SetUpdateFieldValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.YesterdayHonorableKills), result.Read(52)); + SetUpdateFieldValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.LifetimeHonorableKills), totalKills); + SetUpdateFieldValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.TodayHonorableKills), todayKills); + SetUpdateFieldValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.YesterdayHonorableKills), yesterdayKills); _LoadBoundInstances(holder.GetResult(PlayerLoginQueryLoad.BoundInstances)); _LoadInstanceTimeRestrictions(holder.GetResult(PlayerLoginQueryLoad.InstanceLockTimes)); @@ -2632,7 +2724,7 @@ namespace Game.Entities // Do not look for instance if bg not found WorldLocation _loc = GetBattlegroundEntryPoint(); mapId = _loc.GetMapId(); - instanceId = 0; + instance_id = 0; if (mapId == 0xFFFFFFFF) // BattlegroundEntry Point not found (???) { @@ -2647,9 +2739,9 @@ namespace Game.Entities } } // currently we do not support transport in bg - else if (transLowGUID != 0) + else if (transguid != 0) { - ObjectGuid transGUID = ObjectGuid.Create(HighGuid.Transport, transLowGUID); + ObjectGuid transGUID = ObjectGuid.Create(HighGuid.Transport, transguid); Transport transport = null; Transport go = Global.ObjAccessor.FindTransport(transGUID); @@ -2658,10 +2750,11 @@ namespace Game.Entities if (transport) { - float x = result.Read(37); - float y = result.Read(38); - float z = result.Read(39); - float o = result.Read(40); + float x = trans_x; + float y = trans_y; + float z = trans_z; + float o = trans_o; + m_movementInfo.transport.pos = new Position(x, y, z, o); transport.CalculatePassengerPosition(ref x, ref y, ref z, ref o); @@ -2671,8 +2764,7 @@ namespace Game.Entities Math.Abs(m_movementInfo.transport.pos.posY) > 250.0f || Math.Abs(m_movementInfo.transport.pos.posZ) > 250.0f) { - Log.outError(LogFilter.Player, "Player (guidlow {0}) have invalid transport coordinates (X: {1} Y: {2} Z: {3} O: {4}). Teleport to bind location.", - guid.ToString(), x, y, z, o); + Log.outError(LogFilter.Player, "Player (guidlow {0}) have invalid transport coordinates (X: {1} Y: {2} Z: {3} O: {4}). Teleport to bind location.", guid.ToString(), x, y, z, o); m_movementInfo.transport.Reset(); RelocateToHomebind(); @@ -2687,16 +2779,15 @@ namespace Game.Entities } else { - Log.outError(LogFilter.Player, "Player (guidlow {0}) have problems with transport guid ({1}). Teleport to bind location.", - guid.ToString(), transLowGUID); + Log.outError(LogFilter.Player, "Player (guidlow {0}) have problems with transport guid ({1}). Teleport to bind location.", guid.ToString(), transguid); RelocateToHomebind(); } } // currently we do not support taxi in instance - else if (!string.IsNullOrEmpty(taxi_nodes)) + else if (!taxi_path.IsEmpty()) { - instanceId = 0; + instance_id = 0; // Not finish taxi flight path if (m_bgData.HasTaxiPath()) @@ -2704,7 +2795,7 @@ namespace Game.Entities for (int i = 0; i < 2; ++i) m_taxi.AddTaxiDestination(m_bgData.taxiPath[i]); } - if (!m_taxi.LoadTaxiDestinationsFromString(taxi_nodes, GetTeam())) + if (!m_taxi.LoadTaxiDestinationsFromString(taxi_path, GetTeam())) { // problems with taxi path loading TaxiNodesRecord nodeEntry = null; @@ -2753,19 +2844,20 @@ namespace Game.Entities } // fix crash (because of if (Map* map = _FindMap(instanceId)) in MapInstanced.CreateInstance) - if (instanceId != 0) + if (instance_id != 0) { InstanceSave save = GetInstanceSave(mapId); if (save != null) - if (save.GetInstanceId() != instanceId) - instanceId = 0; + if (save.GetInstanceId() != instance_id) + instance_id = 0; } } // NOW player must have valid map // load the player's map here if it's not already loaded if (!map) - map = Global.MapMgr.CreateMap(mapId, this, instanceId); + map = Global.MapMgr.CreateMap(mapId, this, instance_id); + AreaTriggerStruct areaTrigger = null; bool check = false; @@ -2802,7 +2894,7 @@ namespace Game.Entities areaTrigger = Global.ObjectMgr.GetGoBackTrigger(mapId); check = true; } - else if (instanceId != 0 && Global.InstanceSaveMgr.GetInstanceSave(instanceId) == null) // ... and instance is reseted then look for entrance. + else if (instance_id != 0 && Global.InstanceSaveMgr.GetInstanceSave(instance_id) == null) // ... and instance is reseted then look for entrance. { areaTrigger = Global.ObjectMgr.GetMapEntranceTrigger(mapId); check = true; @@ -2857,7 +2949,7 @@ namespace Game.Entities SaveRecallPosition(); long now = Time.UnixTime; - long logoutTime = result.Read(32); + long logoutTime = logout_time; // since last logout (in seconds) uint time_diff = (uint)(now - logoutTime); @@ -2870,32 +2962,30 @@ namespace Game.Entities SetDrunkValue(newDrunkValue); - m_cinematic = result.Read(28); - m_PlayedTimeTotal = result.Read(29); - m_PlayedTimeLevel = result.Read(30); + m_cinematic = cinematic; + m_PlayedTimeTotal = totaltime; + m_PlayedTimeLevel = leveltime; - SetTalentResetCost(result.Read(34)); - SetTalentResetTime(result.Read(35)); + SetTalentResetCost(resettalents_cost); + SetTalentResetTime(resettalents_time); - m_taxi.LoadTaxiMask(result.Read(27)); // must be before InitTaxiNodesForLevel + m_taxi.LoadTaxiMask(taximask); // must be before InitTaxiNodesForLevel - PlayerExtraFlags extraflags = (PlayerExtraFlags)result.Read(42); - - m_stableSlots = result.Read(43); + m_stableSlots = stable_slots; if (m_stableSlots > 4) { Log.outError(LogFilter.Player, "Player can have not more {0} stable slots, but have in DB {1}", 4, m_stableSlots); m_stableSlots = 4; } - atLoginFlags = (AtLoginFlags)result.Read(44); + atLoginFlags = (AtLoginFlags)at_login; // Honor system // Update Honor kills data m_lastHonorUpdateTime = logoutTime; UpdateHonorFields(); - m_deathExpireTime = result.Read(47); + m_deathExpireTime = death_expire_time; if (m_deathExpireTime > now + PlayerConst.MaxDeathCount * PlayerConst.DeathExpireStep) m_deathExpireTime = now + PlayerConst.MaxDeathCount * PlayerConst.DeathExpireStep - 1; @@ -2910,20 +3000,19 @@ namespace Game.Entities InitRunes(); // rest bonus can only be calculated after InitStatsForLevel() - _restMgr.LoadRestBonus(RestTypes.XP, (PlayerRestState)result.Read(19), result.Read(31)); + _restMgr.LoadRestBonus(RestTypes.XP, restState, rest_bonus); // load skills after InitStatsForLevel because it triggering aura apply also _LoadSkills(holder.GetResult(PlayerLoginQueryLoad.Skills)); UpdateSkillsForLevel(); - SetNumRespecs(result.Read(76)); - SetPrimarySpecialization(result.Read(36)); - SetActiveTalentGroup(result.Read(64)); + SetNumRespecs(numRespecs); + SetPrimarySpecialization(primarySpecialization); + SetActiveTalentGroup(activeTalentGroup); ChrSpecializationRecord primarySpec = CliDB.ChrSpecializationStorage.LookupByKey(GetPrimarySpecialization()); if (primarySpec == null || primarySpec.ClassID != (byte)GetClass() || GetActiveTalentGroup() >= PlayerConst.MaxSpecializations) ResetTalentSpecialization(); - uint lootSpecId = result.Read(65); ChrSpecializationRecord chrSpec = CliDB.ChrSpecializationStorage.LookupByKey(lootSpecId); if (chrSpec != null) { @@ -2986,11 +3075,10 @@ namespace Game.Entities // check PLAYER_CHOSEN_TITLE compatibility with PLAYER__FIELD_KNOWN_TITLES // note: PLAYER__FIELD_KNOWN_TITLES updated at quest status loaded - uint curTitle = result.Read(53); - if (curTitle != 0 && !HasTitle(curTitle)) - curTitle = 0; + if (chosenTitle != 0 && !HasTitle(chosenTitle)) + chosenTitle = 0; - SetChosenTitle(curTitle); + SetChosenTitle(chosenTitle); // has to be called after last Relocate() in Player.LoadFromDB SetFallInformation(0, GetPositionZ()); @@ -3009,14 +3097,13 @@ namespace Game.Entities UpdateAllStats(); // restore remembered power/health values (but not more max values) - uint savedHealth = result.Read(56); - SetHealth(savedHealth > GetMaxHealth() ? GetMaxHealth() : savedHealth); + SetHealth(health > GetMaxHealth() ? GetMaxHealth() : health); int loadedPowers = 0; for (PowerType i = 0; i < PowerType.Max; ++i) { if (Global.DB2Mgr.GetPowerIndexByClass(i, GetClass()) != (int)PowerType.Max) { - uint savedPower = result.Read(56 + loadedPowers); + uint savedPower = powers[loadedPowers]; uint maxPower = m_unitData.MaxPower[loadedPowers]; SetPower(i, (int)(savedPower > maxPower ? maxPower : savedPower)); if (++loadedPowers >= (int)PowerType.MaxPerClass) @@ -3025,7 +3112,7 @@ namespace Game.Entities } for (; loadedPowers < (int)PowerType.MaxPerClass; ++loadedPowers) - SetUpdateFieldValue(ref m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.Power, (int)loadedPowers), 0); + SetUpdateFieldValue(ref m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.Power, loadedPowers), 0); SetPower(PowerType.LunarPower, 0); // Init rune recharge @@ -3054,7 +3141,7 @@ namespace Game.Entities case 1: SetGameMaster(true); break; // enable case 2: // save state - if (extraflags.HasAnyFlag(PlayerExtraFlags.GMOn)) + if (extra_flags.HasAnyFlag(PlayerExtraFlags.GMOn)) SetGameMaster(true); break; } @@ -3067,7 +3154,7 @@ namespace Game.Entities case 1: break; // visible case 2: // save state - if (extraflags.HasAnyFlag(PlayerExtraFlags.GMInvisible)) + if (extra_flags.HasAnyFlag(PlayerExtraFlags.GMInvisible)) SetGMVisible(false); break; } @@ -3080,7 +3167,7 @@ namespace Game.Entities case 1: SetGMChat(true); break; // enable case 2: // save state - if (extraflags.HasAnyFlag(PlayerExtraFlags.GMChat)) + if (extra_flags.HasAnyFlag(PlayerExtraFlags.GMChat)) SetGMChat(true); break; } @@ -3093,7 +3180,7 @@ namespace Game.Entities case 1: SetAcceptWhispers(true); break; // enable case 2: // save state - if (extraflags.HasAnyFlag(PlayerExtraFlags.AcceptWhispers)) + if (extra_flags.HasAnyFlag(PlayerExtraFlags.AcceptWhispers)) SetAcceptWhispers(true); break; } @@ -3118,16 +3205,16 @@ namespace Game.Entities holder.GetResult(PlayerLoginQueryLoad.GarrisonFollowerAbilities))) _garrison = garrison; - _InitHonorLevelOnLoadFromDB(result.Read(72), result.Read(73)); + _InitHonorLevelOnLoadFromDB(honor, honorLevel); - _restMgr.LoadRestBonus(RestTypes.Honor, (PlayerRestState)result.Read(74), result.Read(75)); + _restMgr.LoadRestBonus(RestTypes.Honor, honorRestState, honorRestBonus); if (time_diff > 0) { //speed collect rest bonus in offline, in logout, far from tavern, city (section/in hour) float bubble0 = 0.031f; //speed collect rest bonus in offline, in logout, in tavern, city (section/in hour) float bubble1 = 0.125f; - float bubble = result.Read(33) > 0 + float bubble = is_logout_resting > 0 ? bubble1 * WorldConfig.GetFloatValue(WorldCfg.RateRestOfflineInTavernOrCity) : bubble0 * WorldConfig.GetFloatValue(WorldCfg.RateRestOfflineInWilderness); @@ -3191,15 +3278,8 @@ namespace Game.Entities stmt.AddValue(index++, (byte)GetClass()); stmt.AddValue(index++, (byte)m_playerData.NativeSex); // save gender from PLAYER_BYTES_3, UNIT_BYTES_0 changes with every transform effect stmt.AddValue(index++, GetLevel()); - stmt.AddValue(index++, (uint)m_activePlayerData.XP); + stmt.AddValue(index++, (uint)GetNativeSex()); stmt.AddValue(index++, GetMoney()); - stmt.AddValue(index++, (byte)m_playerData.SkinID); - stmt.AddValue(index++, (byte)m_playerData.FaceID); - stmt.AddValue(index++, (byte)m_playerData.HairStyleID); - stmt.AddValue(index++, (byte)m_playerData.HairColorID); - stmt.AddValue(index++, (byte)m_playerData.FacialHairStyleID); - for (int i = 0; i < PlayerConst.CustomDisplaySize; ++i) - stmt.AddValue(index++, m_playerData.CustomDisplayOption[i]); stmt.AddValue(index++, GetInventorySlotCount()); stmt.AddValue(index++, GetBankBagSlotCount()); stmt.AddValue(index++, (byte)m_activePlayerData.RestInfo[(int)RestTypes.XP].StateID); @@ -3321,17 +3401,8 @@ namespace Game.Entities stmt.AddValue(index++, (byte)GetClass()); stmt.AddValue(index++, (byte)m_playerData.NativeSex); // save gender from PLAYER_BYTES_3, UNIT_BYTES_0 changes with every transform effect stmt.AddValue(index++, GetLevel()); - stmt.AddValue(index++, (uint)m_activePlayerData.XP); + stmt.AddValue(index++, (uint)GetNativeSex()); stmt.AddValue(index++, GetMoney()); - stmt.AddValue(index++, (byte)m_playerData.SkinID); - stmt.AddValue(index++, (byte)m_playerData.FaceID); - stmt.AddValue(index++, (byte)m_playerData.HairStyleID); - stmt.AddValue(index++, (byte)m_playerData.HairColorID); - stmt.AddValue(index++, (byte)m_playerData.FacialHairStyleID); - - for (int i = 0; i < PlayerConst.CustomDisplaySize; ++i) - stmt.AddValue(index++, m_playerData.CustomDisplayOption[i]); - stmt.AddValue(index++, GetInventorySlotCount()); stmt.AddValue(index++, GetBankBagSlotCount()); stmt.AddValue(index++, (byte)m_activePlayerData.RestInfo[(int)RestTypes.XP].StateID); @@ -3485,6 +3556,7 @@ namespace Game.Entities if (m_mailsUpdated) //save mails only when needed _SaveMail(characterTransaction); + _SaveCustomizations(characterTransaction); _SaveBGData(characterTransaction); _SaveInventory(characterTransaction); _SaveVoidStorage(characterTransaction); @@ -3807,6 +3879,10 @@ namespace Game.Entities stmt.AddValue(0, guid); trans.Append(stmt); + stmt = DB.Characters.GetPreparedStatement(CharStatements.DEL_CHARACTER_CUSTOMIZATIONS); + stmt.AddValue(0, guid); + trans.Append(stmt); + stmt = DB.Characters.GetPreparedStatement(CharStatements.DEL_PLAYER_ACCOUNT_DATA); stmt.AddValue(0, guid); trans.Append(stmt); diff --git a/Source/Game/Entities/Player/Player.Fields.cs b/Source/Game/Entities/Player/Player.Fields.cs index 01b07a783..21567b878 100644 --- a/Source/Game/Entities/Player/Player.Fields.cs +++ b/Source/Game/Entities/Player/Player.Fields.cs @@ -196,6 +196,7 @@ namespace Game.Entities byte m_cinematic; uint m_movie; + bool m_customizationsChanged; SpecializationInfo _specializationInfo; public List m_clientGUIDs = new List(); diff --git a/Source/Game/Entities/Player/Player.Items.cs b/Source/Game/Entities/Player/Player.Items.cs index 7f992b575..aafd6ff95 100644 --- a/Source/Game/Entities/Player/Player.Items.cs +++ b/Source/Game/Entities/Player/Player.Items.cs @@ -32,6 +32,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using Game.BattleFields; +using Framework.Dynamic; namespace Game.Entities { @@ -3848,6 +3849,8 @@ namespace Game.Entities if (guild != null) guild.AddGuildNews(GuildNews.ItemPurchased, GetGUID(), 0, item); } + + UpdateCriteria(CriteriaTypes.BoughtItemFromVendor, 1); return true; } @@ -5186,9 +5189,12 @@ namespace Game.Entities return InventoryResult.ClientLockedOut; } - ScalingStatDistributionRecord ssd = CliDB.ScalingStatDistributionStorage.LookupByKey(pItem.GetScalingStatDistribution()); + ContentTuningLevels? requiredLevels = null; // check allowed level (extend range to upper values if MaxLevel more or equal max player level, this let GM set high level with 1...max range items) - if (ssd != null && ssd.MaxLevel < WorldConfig.GetIntValue(WorldCfg.MaxPlayerLevel) && ssd.MaxLevel < GetLevel() && Global.DB2Mgr.GetHeirloomByItemId(pProto.GetId()) == null) + if (pItem.GetQuality() == ItemQuality.Heirloom) + requiredLevels = Global.DB2Mgr.GetContentTuningData(pItem.GetScalingContentTuningId(), 0, true); + + if (requiredLevels.HasValue && requiredLevels.Value.MaxLevel < SharedConst.DefaultMaxLevel && requiredLevels.Value.MaxLevel < GetLevel() && Global.DB2Mgr.GetHeirloomByItemId(pProto.GetId()) == null) return InventoryResult.NotEquippable; byte eslot = FindEquipSlot(pProto, slot, swap); diff --git a/Source/Game/Entities/Player/Player.Map.cs b/Source/Game/Entities/Player/Player.Map.cs index d3ee02e3a..924611ad7 100644 --- a/Source/Game/Entities/Player/Player.Map.cs +++ b/Source/Game/Entities/Player/Player.Map.cs @@ -144,6 +144,8 @@ namespace Game.Entities _restMgr.SetRestFlag(RestFlag.FactionArea); else _restMgr.RemoveRestFlag(RestFlag.FactionArea); + + UpdateCriteria(CriteriaTypes.TravelledToArea, newArea); } public void UpdateZone(uint newZone, uint newArea) diff --git a/Source/Game/Entities/Player/Player.Quest.cs b/Source/Game/Entities/Player/Player.Quest.cs index f99b91864..f487750f4 100644 --- a/Source/Game/Entities/Player/Player.Quest.cs +++ b/Source/Game/Entities/Player/Player.Quest.cs @@ -49,14 +49,18 @@ namespace Game.Entities public int GetQuestMinLevel(Quest quest) { - if (quest.Level == -1 && quest.ScalingFactionGroup != 0) + var questLevels = Global.DB2Mgr.GetContentTuningData(quest.ContentTuningId, m_playerData.CtrOptions.GetValue().ContentTuningConditionMask); + if (questLevels.HasValue) { ChrRacesRecord race = CliDB.ChrRacesStorage.LookupByKey(GetRace()); FactionTemplateRecord raceFaction = CliDB.FactionTemplateStorage.LookupByKey(race.FactionID); - if (raceFaction == null || raceFaction.FactionGroup != quest.ScalingFactionGroup) - return quest.MaxScalingLevel; + if (raceFaction == null || raceFaction.FactionGroup != CliDB.ContentTuningStorage.LookupByKey(quest.ContentTuningId).GetScalingFactionGroup()) + return questLevels.Value.MaxLevel; + + return questLevels.Value.MinLevelWithDelta; } - return quest.MinLevel; + + return 0; } public int GetQuestLevel(Quest quest) @@ -64,16 +68,18 @@ namespace Game.Entities if (quest == null) return 0; - if (quest.Level == -1) + var questLevels = Global.DB2Mgr.GetContentTuningData(quest.ContentTuningId, m_playerData.CtrOptions.GetValue().ContentTuningConditionMask); + if (questLevels.HasValue) { int minLevel = GetQuestMinLevel(quest); - int maxLevel = quest.MaxScalingLevel; + int maxLevel = questLevels.Value.MaxLevel; int level = (int)GetLevel(); if (level >= minLevel) return Math.Min(level, maxLevel); return minLevel; } - return quest.Level; + + return 0; } public int GetRewardedQuestCount() { return m_RewardedQuests.Count; } @@ -1153,6 +1159,7 @@ namespace Game.Entities UpdateCriteria(CriteriaTypes.CompleteQuestCount); UpdateCriteria(CriteriaTypes.CompleteQuest, quest.Id); + UpdateCriteria(CriteriaTypes.CompleteQuestAccumulate, 1); // make full db save SaveToDB(false); diff --git a/Source/Game/Entities/Player/Player.cs b/Source/Game/Entities/Player/Player.cs index 27894a459..fcd40f403 100644 --- a/Source/Game/Entities/Player/Player.cs +++ b/Source/Game/Entities/Player/Player.cs @@ -59,6 +59,7 @@ namespace Game.Entities m_zoneUpdateId = 0xffffffff; m_nextSave = WorldConfig.GetUIntValue(WorldCfg.IntervalSave); + m_customizationsChanged = false; SetGroupInvite(null); @@ -184,7 +185,7 @@ namespace Game.Entities return false; } - if (!ValidateAppearance(createInfo.RaceId, createInfo.ClassId, createInfo.Sex, createInfo.HairStyle, createInfo.HairColor, createInfo.Face, createInfo.FacialHairStyle, createInfo.Skin, createInfo.CustomDisplay, true)) + if (!GetSession().ValidateAppearance(createInfo.RaceId, createInfo.ClassId, createInfo.Sex, createInfo.Customizations)) { Log.outError(LogFilter.Player, "Player.Create: Possible hacking-attempt: Account {0} tried creating a character named '{1}' with invalid appearance attributes - refusing to do so", GetSession().GetAccountId(), GetName()); @@ -223,14 +224,7 @@ namespace Game.Entities SetWatchedFactionIndex(0xFFFFFFFF); - SetSkinId(createInfo.Skin); - SetFaceId(createInfo.Face); - SetHairStyleId(createInfo.HairStyle); - SetHairColorId(createInfo.HairColor); - SetFacialHairStyleId(createInfo.FacialHairStyle); - for (byte i = 0; i < PlayerConst.CustomDisplaySize; ++i) - SetCustomDisplayOption(i, createInfo.CustomDisplay[i]); - + SetCustomizations(createInfo.Customizations); SetRestState(RestTypes.XP, ((GetSession().IsARecruiter() || GetSession().GetRecruiterId() != 0) ? PlayerRestState.RAFLinked : PlayerRestState.NotRAFLinked)); SetRestState(RestTypes.Honor, PlayerRestState.NotRAFLinked); SetNativeSex(createInfo.Sex); @@ -308,46 +302,8 @@ namespace Game.Entities } // original items - CharStartOutfitRecord oEntry = Global.DB2Mgr.GetCharStartOutfitEntry((byte)createInfo.RaceId, (byte)createInfo.ClassId, (byte)createInfo.Sex); - if (oEntry != null) - { - for (int j = 0; j < ItemConst.MaxOutfitItems - 1; ++j) - { - if (oEntry.ItemID[j] <= 0) - continue; - - uint itemId = (uint)oEntry.ItemID[j]; - - ItemTemplate iProto = Global.ObjectMgr.GetItemTemplate(itemId); - if (iProto == null) - continue; - - // BuyCount by default - uint count = iProto.GetBuyCount(); - - // special amount for food/drink - if (iProto.GetClass() == ItemClass.Consumable && iProto.GetSubClass() == (uint)ItemSubClassConsumable.FoodDrink) - { - if (!iProto.Effects.Empty()) - { - switch (iProto.Effects[0].SpellCategoryID) - { - case 11: // food - count = (uint)(GetClass() == Class.Deathknight ? 10 : 4); - break; - case 59: // drink - count = 2; - break; - } - } - if (iProto.GetMaxStackSize() < count) - count = iProto.GetMaxStackSize(); - } - StoreNewItemInBestSlots(itemId, count); - } - } - foreach (var item in info.item) - StoreNewItemInBestSlots(item.item_id, item.item_amount); + foreach (PlayerCreateInfoItem initialItem in info.item) + StoreNewItemInBestSlots(initialItem.item_id, initialItem.item_amount); // bags and main-hand weapon must equipped at this moment // now second pass for not equipped (offhand weapon/shield if it attempt equipped before main-hand weapon) @@ -1193,7 +1149,7 @@ namespace Game.Entities FactionRecord factionEntry = CliDB.FactionStorage.LookupByKey(currency.FactionID); if (factionEntry != null) { - if (currency.Flags.HasAnyFlag((uint)CurrencyFlags.HighPrecision)) + if (currency.Flags[0].HasAnyFlag((int)CurrencyFlags.HighPrecision)) count /= 100; GetReputationMgr().ModifyReputation(factionEntry, count, false, true); return; @@ -1582,8 +1538,12 @@ namespace Game.Entities { LFGDungeonsRecord dungeon = Global.DB2Mgr.GetLfgDungeon(map.GetId(), map.GetDifficultyID()); if (dungeon != null) - if (dungeon.TargetLevel == 80) - ChampioningFaction = GetChampioningFaction(); + { + var dungeonLevels = Global.DB2Mgr.GetContentTuningData(dungeon.ContentTuningID, m_playerData.CtrOptions.GetValue().ContentTuningConditionMask); + if (dungeonLevels.HasValue) + if (dungeonLevels.Value.TargetLevelMax == Global.ObjectMgr.GetMaxLevelForExpansion(Expansion.WrathOfTheLichKing)) + ChampioningFaction = GetChampioningFaction(); + } } } @@ -2613,6 +2573,9 @@ namespace Game.Entities if (channel.Flags.HasAnyFlag(ChannelDBCFlags.GuildReq) && GetGuildId() != 0) return false; + if (channel.Flags.HasAnyFlag(ChannelDBCFlags.NoClientJoin)) + return false; + return true; } public void JoinedChannel(Channel c) @@ -2658,6 +2621,9 @@ namespace Game.Entities foreach (var channelEntry in CliDB.ChatChannelsStorage.Values) { + if (!channelEntry.Flags.HasAnyFlag(ChannelDBCFlags.Initial)) + continue; + Channel usedChannel = null; foreach (var channel in m_channels) { @@ -3467,51 +3433,27 @@ namespace Game.Entities SendBattlefieldWorldStates(); } - public uint GetBarberShopCost(BarberShopStyleRecord newHairStyle, uint newHairColor, BarberShopStyleRecord newFacialHair, BarberShopStyleRecord newSkin, BarberShopStyleRecord newFace, Array newCustomDisplay) + public long GetBarberShopCost(List newCustomizations) { - byte hairstyle = m_playerData.HairStyleID; - byte haircolor = m_playerData.HairColorID; - byte facialhair = m_playerData.FacialHairStyleID; - byte skincolor = m_playerData.SkinID; - byte face = m_playerData.FaceID; - - Array customDisplay = new Array(PlayerConst.CustomDisplaySize); - for (int i = 0; i < PlayerConst.CustomDisplaySize; ++i) - customDisplay[i] = m_playerData.CustomDisplayOption[i]; - - if ((hairstyle == newHairStyle.Data) && - (haircolor == newHairColor) && - (facialhair == newFacialHair.Data) && - (newSkin == null || (newSkin.Data == skincolor)) && - (newFace == null || (newFace.Data == face)) && - (newCustomDisplay[0] == null || (newCustomDisplay[0].Data == customDisplay[0])) && - (newCustomDisplay[1] == null || (newCustomDisplay[1].Data == customDisplay[1])) && - (newCustomDisplay[2] == null || (newCustomDisplay[2].Data == customDisplay[2]))) - return 0; - GtBarberShopCostBaseRecord bsc = CliDB.BarberShopCostBaseGameTable.GetRow(GetLevel()); if (bsc == null) // shouldn't happen - return 0xFFFFFFFF; + return 0; - uint cost = 0; - if (hairstyle != newHairStyle.Data) - cost += (uint)(bsc.Cost * newHairStyle.CostModifier); + long cost = 0; + foreach (ChrCustomizationChoice newChoice in newCustomizations) + { + int currentCustomizationIndex = m_playerData.Customizations.FindIndexIf(currentCustomization => + { + return currentCustomization.ChrCustomizationOptionID == newChoice.ChrCustomizationOptionID; + }); - if ((haircolor != newHairColor) && (hairstyle == newHairStyle.Data)) - cost += (uint)(bsc.Cost * 0.5f); // +1/2 of price - - if (facialhair != newFacialHair.Data) - cost += (uint)(bsc.Cost * newFacialHair.CostModifier); - - if (newSkin != null && skincolor != newSkin.Data) - cost += (uint)(bsc.Cost * newSkin.CostModifier); - - if (newFace != null && face != newFace.Data) - cost += (uint)(bsc.Cost * newFace.CostModifier); - - for (int i = 0; i < PlayerConst.CustomDisplaySize; ++i) - if (newCustomDisplay[i] != null && customDisplay[i] != newCustomDisplay[i].Data) - cost += (uint)(bsc.Cost * newCustomDisplay[i].CostModifier); + if (currentCustomizationIndex == -1 || m_playerData.Customizations[currentCustomizationIndex].ChrCustomizationChoiceID != newChoice.ChrCustomizationChoiceID) + { + ChrCustomizationOptionRecord customizationOption = CliDB.ChrCustomizationOptionStorage.LookupByKey(newChoice.ChrCustomizationOptionID); + if (customizationOption != null) + cost += (long)(bsc.Cost * customizationOption.BarberShopCostModifier); + } + } return cost; } @@ -3950,139 +3892,10 @@ namespace Game.Entities return null; } - static uint GetSelectionFromContext(uint context, Class playerClass) - { - switch (context) - { - case 1: - if (playerClass == Class.Deathknight) - return 1; - if (playerClass == Class.DemonHunter) - return 3; - return 0; - case 2: - if (playerClass == Class.Deathknight) - return 5; - if (playerClass == Class.DemonHunter) - return 6; - return 4; - case 3: - return 7; - case 4: - if (playerClass == Class.Deathknight) - return 9; - if (playerClass == Class.DemonHunter) - return 10; - return 8; - default: - if (playerClass == Class.Deathknight) - return 1; - if (playerClass == Class.DemonHunter) - return 2; - return 0; - } - } - - static bool ComponentFlagsMatch(CharSectionsRecord entry, uint selection) - { - switch (selection) - { - case 0: - if (!entry.Flags.HasAnyFlag((short)1)) - return false; - return !entry.Flags.HasAnyFlag((short)0x2C); - case 1: - if (!entry.Flags.HasAnyFlag((short)1)) - return false; - if (!entry.Flags.HasAnyFlag((short)0x94)) - return false; - return !entry.Flags.HasAnyFlag((short)8); - case 2: - if (!entry.Flags.HasAnyFlag((short)1)) - return false; - if (!entry.Flags.HasAnyFlag((short)0x70)) - return false; - return !entry.Flags.HasAnyFlag((short)8); - case 3: - if (!entry.Flags.HasAnyFlag((short)1)) - return false; - if (!entry.Flags.HasAnyFlag((short)0x20)) - return false; - return !entry.Flags.HasAnyFlag((short)8); - case 4: - case 8: - if (!entry.Flags.HasAnyFlag((short)3)) - return false; - return !entry.Flags.HasAnyFlag((short)0x2C); - case 5: - case 9: - if (!entry.Flags.HasAnyFlag((short)3)) - return false; - if (!entry.Flags.HasAnyFlag((short)0x94)) - return false; - return !entry.Flags.HasAnyFlag((short)8); - case 6: - case 10: - if (!entry.Flags.HasAnyFlag((short)3)) - return false; - if (!entry.Flags.HasAnyFlag((short)0x70)) - return false; - return !entry.Flags.HasAnyFlag((short)8); - case 7: - return true; - default: - break; - } - - return false; - } - - static bool IsSectionFlagValid(CharSectionsRecord entry, Class class_, bool create) - { - if (create) - return ComponentFlagsMatch(entry, GetSelectionFromContext(0, class_)); - - return ComponentFlagsMatch(entry, GetSelectionFromContext(2, class_)); - } - static bool IsSectionValid(Race race, Class class_, Gender gender, CharBaseSectionVariation variation, byte variationIndex, byte colorIndex, bool create) - { - CharSectionsRecord section = Global.DB2Mgr.GetCharSectionEntry(race, gender, variation, variationIndex, colorIndex); - if (section != null) - return IsSectionFlagValid(section, class_, create); - - return false; - } public static bool IsValidGender(Gender _gender) { return _gender <= Gender.Female; } public static bool IsValidClass(Class _class) { return Convert.ToBoolean((1 << ((int)_class - 1)) & (int)Class.ClassMaskAllPlayable); } public static bool IsValidRace(Race _race) { return Convert.ToBoolean((1 << ((int)_race - 1)) & (int)Race.RaceMaskAllPlayable); } - public static bool ValidateAppearance(Race race, Class class_, Gender gender, byte hairID, byte hairColor, byte faceID, byte facialHairId, byte skinColor, Array customDisplay, bool create = false) - { - if (!IsSectionValid(race, class_, gender, CharBaseSectionVariation.Skin, 0, skinColor, create)) - return false; - - if (!IsSectionValid(race, class_, gender, CharBaseSectionVariation.Face, faceID, skinColor, create)) - return false; - - if (!IsSectionValid(race, class_, gender, CharBaseSectionVariation.Hair, hairID, hairColor, create)) - return false; - - if (!IsSectionValid(race, class_, gender, CharBaseSectionVariation.FacialHair, facialHairId, hairColor, create)) - if (Global.DB2Mgr.HasCharSections(race, gender, CharBaseSectionVariation.FacialHair) || !Global.DB2Mgr.HasCharacterFacialHairStyle(race, gender, facialHairId)) - return false; - - if (!IsSectionValid(race, class_, gender, CharBaseSectionVariation.CustomDisplay1, customDisplay[0], 0, create)) - return false; - - if (!IsSectionValid(race, class_, gender, CharBaseSectionVariation.CustomDisplay2, customDisplay[1], 0, create)) - return false; - - if (!IsSectionValid(race, class_, gender, CharBaseSectionVariation.CustomDisplay3, customDisplay[2], 0, create)) - return false; - - return true; - } - public void OnCombatExit() { UpdatePotionCooldown(); @@ -4594,12 +4407,8 @@ namespace Game.Entities flags |= CorpseFlags.FFAPvP; corpse.SetRace(GetRace()); - corpse.SetSex((Gender)(byte)m_playerData.NativeSex); - corpse.SetSkin(m_playerData.SkinID); - corpse.SetFace(m_playerData.FaceID); - corpse.SetHairStyle(m_playerData.HairStyleID); - corpse.SetHairColor(m_playerData.HairColorID); - corpse.SetFacialHairStyle(m_playerData.FacialHairStyleID); + corpse.SetSex(GetNativeSex()); + corpse.SetCustomizations(m_playerData.Customizations); corpse.SetFlags(flags); corpse.SetDisplayId(GetNativeDisplayId()); corpse.SetFactionTemplate(CliDB.ChrRacesStorage.LookupByKey(GetRace()).FactionID); @@ -5475,8 +5284,7 @@ namespace Game.Entities return; } - byte gender = m_playerData.NativeSex; - switch ((Gender)gender) + switch (GetNativeSex()) { case Gender.Female: SetDisplayId(info.DisplayId_f); @@ -5487,7 +5295,7 @@ namespace Game.Entities SetNativeDisplayId(info.DisplayId_m); break; default: - Log.outError(LogFilter.Player, "Player {0} ({1}) has invalid gender {2}", GetName(), GetGUID().ToString(), (Gender)gender); + Log.outError(LogFilter.Player, "Player {0} ({1}) has invalid gender {2}", GetName(), GetGUID().ToString(), GetNativeSex()); return; } @@ -5883,13 +5691,13 @@ namespace Game.Entities SetUpdateFieldValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.ModHealingDonePos), 0); SetUpdateFieldValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.ModHealingPercent), 1.0f); - SetUpdateFieldValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.ModHealingDonePercent), 1.0f); SetUpdateFieldValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.ModPeriodicHealingDonePercent), 1.0f); - for (byte i = 0; i < 7; ++i) + for (byte i = 0; i < (int)SpellSchools.Max; ++i) { SetUpdateFieldValue(ref m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.ModDamageDoneNeg, i), 0); SetUpdateFieldValue(ref m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.ModDamageDonePos, i), 0); SetUpdateFieldValue(ref m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.ModDamageDonePercent, i), 1.0f); + SetUpdateFieldValue(ref m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.ModHealingDonePercent, i), 1.0f); } SetUpdateFieldValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.ModSpellPowerPercent), 1.0f); @@ -6324,7 +6132,8 @@ namespace Game.Entities UpdateCriteria(CriteriaTypes.ExploreArea, GetAreaId()); - if (areaEntry.ExplorationLevel > 0) + var areaLevels = Global.DB2Mgr.GetContentTuningData(areaEntry.ContentTuningID, m_playerData.CtrOptions.GetValue().ContentTuningConditionMask); + if (areaLevels.HasValue) { if (GetLevel() >= WorldConfig.GetIntValue(WorldCfg.MaxPlayerLevel)) { @@ -6332,7 +6141,8 @@ namespace Game.Entities } else { - int diff = (int)(GetLevel() - areaEntry.ExplorationLevel); + ushort areaLevel = (ushort)Math.Min(Math.Max((ushort)GetLevel(), areaLevels.Value.MinLevel), areaLevels.Value.MaxLevel); + int diff = (int)(GetLevel()) - areaLevel; uint XP = 0; if (diff < -5) { @@ -6344,11 +6154,11 @@ namespace Game.Entities if (exploration_percent < 0) exploration_percent = 0; - XP = (uint)(Global.ObjectMgr.GetBaseXP((byte)areaEntry.ExplorationLevel) * exploration_percent / 100 * WorldConfig.GetFloatValue(WorldCfg.RateXpExplore)); + XP = (uint)(Global.ObjectMgr.GetBaseXP(areaLevel) * exploration_percent / 100 * WorldConfig.GetFloatValue(WorldCfg.RateXpExplore)); } else { - XP = (uint)(Global.ObjectMgr.GetBaseXP((byte)areaEntry.ExplorationLevel) * WorldConfig.GetFloatValue(WorldCfg.RateXpExplore)); + XP = (uint)(Global.ObjectMgr.GetBaseXP(areaLevel) * WorldConfig.GetFloatValue(WorldCfg.RateXpExplore)); } GiveXP(XP, null); @@ -7477,17 +7287,40 @@ namespace Game.Entities public void RemovePlayerFlagEx(PlayerFlagsEx flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(m_playerData).ModifyValue(m_playerData.PlayerFlagsEx), (uint)flags); } public void SetPlayerFlagsEx(PlayerFlagsEx flags) { SetUpdateFieldValue(m_values.ModifyValue(m_playerData).ModifyValue(m_playerData.PlayerFlagsEx), (uint)flags); } - public void SetSkinId(byte skinId) { SetUpdateFieldValue(m_values.ModifyValue(m_playerData).ModifyValue(m_playerData.SkinID), skinId); } - public void SetFaceId(byte faceId) { SetUpdateFieldValue(m_values.ModifyValue(m_playerData).ModifyValue(m_playerData.FaceID), faceId); } - public void SetHairStyleId(byte hairStyleId) { SetUpdateFieldValue(m_values.ModifyValue(m_playerData).ModifyValue(m_playerData.HairStyleID), hairStyleId); } - public void SetHairColorId(byte hairColorId) { SetUpdateFieldValue(m_values.ModifyValue(m_playerData).ModifyValue(m_playerData.HairColorID), hairColorId); } - public void SetFacialHairStyleId(byte facialHairStyleId) { SetUpdateFieldValue(m_values.ModifyValue(m_playerData).ModifyValue(m_playerData.FacialHairStyleID), facialHairStyleId); } + public uint GetCustomizationChoice(uint chrCustomizationOptionId) + { + int choiceIndex = m_playerData.Customizations.FindIndexIf(choice => + { + return choice.ChrCustomizationOptionID == chrCustomizationOptionId; + }); + + if (choiceIndex >= 0) + return m_playerData.Customizations[choiceIndex].ChrCustomizationChoiceID; + + return 0; + } + + public void SetCustomizations(List customizations, bool markChanged = true) + { + if (markChanged) + m_customizationsChanged = true; + + ClearDynamicUpdateFieldValues(m_values.ModifyValue(m_playerData).ModifyValue(m_playerData.Customizations)); + foreach (var customization in customizations) + { + ChrCustomizationChoice newChoice = new ChrCustomizationChoice(); + newChoice.ChrCustomizationOptionID = customization.ChrCustomizationOptionID; + newChoice.ChrCustomizationChoiceID = customization.ChrCustomizationChoiceID; + AddDynamicUpdateFieldValue(m_values.ModifyValue(m_playerData).ModifyValue(m_playerData.Customizations), newChoice); + } + } + + public Gender GetNativeSex() { return (Gender)(byte)m_playerData.NativeSex; } public void SetNativeSex(Gender sex) { SetUpdateFieldValue(m_values.ModifyValue(m_playerData).ModifyValue(m_playerData.NativeSex), (byte)sex); } public void SetPvpTitle(byte pvpTitle) { SetUpdateFieldValue(m_values.ModifyValue(m_playerData).ModifyValue(m_playerData.PvpTitle), pvpTitle); } public void SetArenaFaction(byte arenaFaction) { SetUpdateFieldValue(m_values.ModifyValue(m_playerData).ModifyValue(m_playerData.ArenaFaction), arenaFaction); } public void ApplyModFakeInebriation(int mod, bool apply) { ApplyModUpdateFieldValue(m_values.ModifyValue(m_playerData).ModifyValue(m_playerData.FakeInebriation), mod, apply); } public void SetVirtualPlayerRealm(uint virtualRealmAddress) { SetUpdateFieldValue(m_values.ModifyValue(m_playerData).ModifyValue(m_playerData.VirtualPlayerRealm), virtualRealmAddress); } - public void SetCustomDisplayOption(int slot, byte customDisplayOption) { SetUpdateFieldValue(ref m_values.ModifyValue(m_playerData).ModifyValue(m_playerData.CustomDisplayOption, slot), customDisplayOption); } public void AddHeirloom(uint itemId, uint flags) { @@ -7537,9 +7370,9 @@ namespace Game.Entities public void ApplyModOverrideAPBySpellPowerPercent(float mod, bool apply) { ApplyModUpdateFieldValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.OverrideAPBySpellPowerPercent), mod, apply); } public bool HasPlayerLocalFlag(PlayerLocalFlags flags) { return (m_activePlayerData.LocalFlags & (int)flags) != 0; } - public void AddPlayerLocalFlag(PlayerLocalFlags flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.LocalFlags), (int)flags); } - public void RemovePlayerLocalFlag(PlayerLocalFlags flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.LocalFlags), (int)flags); } - public void SetPlayerLocalFlags(PlayerLocalFlags flags) { SetUpdateFieldValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.LocalFlags), (int)flags); } + public void AddPlayerLocalFlag(PlayerLocalFlags flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.LocalFlags), (uint)flags); } + public void RemovePlayerLocalFlag(PlayerLocalFlags flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.LocalFlags), (uint)flags); } + public void SetPlayerLocalFlags(PlayerLocalFlags flags) { SetUpdateFieldValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.LocalFlags), (uint)flags); } public byte GetNumRespecs() { return m_activePlayerData.NumRespecs; } public void SetNumRespecs(byte numRespecs) { SetUpdateFieldValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.NumRespecs), numRespecs); } diff --git a/Source/Game/Entities/Player/RestMgr.cs b/Source/Game/Entities/Player/RestMgr.cs index 49d9e2643..b4ce1c80c 100644 --- a/Source/Game/Entities/Player/RestMgr.cs +++ b/Source/Game/Entities/Player/RestMgr.cs @@ -114,7 +114,11 @@ namespace Game.Entities if (rested_bonus > xp) // max rested_bonus == xp or (r+x) = 200% xp rested_bonus = xp; - SetRestBonus(restType, GetRestBonus(restType) - rested_bonus); + uint rested_loss = rested_bonus; + if (restType == RestTypes.XP) + MathFunctions.AddPct(ref rested_loss, _player.GetTotalAuraModifier(AuraType.ModRestedXpConsumption)); + + SetRestBonus(restType, GetRestBonus(restType) - rested_loss); Log.outDebug(LogFilter.Player, "RestMgr.GetRestBonus: Player '{0}' ({1}) gain {2} xp (+{3} Rested Bonus). Rested points={4}", _player.GetGUID().ToString(), _player.GetName(), xp + rested_bonus, rested_bonus, GetRestBonus(restType)); diff --git a/Source/Game/Entities/StatSystem.cs b/Source/Game/Entities/StatSystem.cs index ef95b4a80..f6ccee3ae 100644 --- a/Source/Game/Entities/StatSystem.cs +++ b/Source/Game/Entities/StatSystem.cs @@ -1493,7 +1493,8 @@ namespace Game.Entities foreach (AuraEffect auraEffect in GetAuraEffectsByType(AuraType.ModHealingDonePercent)) MathFunctions.AddPct(ref value, auraEffect.GetAmount()); - SetUpdateFieldStatValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.ModHealingDonePercent), value); + for (int i = 0; i < (int)SpellSchools.Max; ++i) + SetUpdateFieldStatValue(ref m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.ModHealingDonePercent, i), value); } void UpdateCorruption() diff --git a/Source/Game/Entities/Totem.cs b/Source/Game/Entities/Totem.cs index bb88f5aaa..ad3d019b1 100644 --- a/Source/Game/Entities/Totem.cs +++ b/Source/Game/Entities/Totem.cs @@ -77,7 +77,7 @@ namespace Game.Entities // Get spell cast by totem SpellInfo totemSpell = Global.SpellMgr.GetSpellInfo(GetSpell(), GetMap().GetDifficultyID()); if (totemSpell != null) - if (totemSpell.CalcCastTime(GetLevel()) != 0) // If spell has cast time . its an active totem + if (totemSpell.CalcCastTime() != 0) // If spell has cast time -> its an active totem m_type = TotemType.Active; m_duration = duration; diff --git a/Source/Game/Entities/Unit/Unit.Spells.cs b/Source/Game/Entities/Unit/Unit.Spells.cs index e5ce3f644..1a7a108f6 100644 --- a/Source/Game/Entities/Unit/Unit.Spells.cs +++ b/Source/Game/Entities/Unit/Unit.Spells.cs @@ -516,7 +516,14 @@ namespace Game.Entities Player thisPlayer = ToPlayer(); if (thisPlayer != null) - return thisPlayer.m_activePlayerData.ModHealingDonePercent; + { + float maxModDamagePercentSchool = 0.0f; + for (int i = 0; i < (int)SpellSchools.Max; ++i) + if (((int)spellProto.GetSchoolMask() & (1 << i)) != 0) + maxModDamagePercentSchool = Math.Max(maxModDamagePercentSchool, thisPlayer.m_activePlayerData.ModHealingDonePercent[i]); + + return maxModDamagePercentSchool; + } float DoneTotalMod = 1.0f; @@ -1201,8 +1208,10 @@ namespace Game.Entities { // mainly for DoTs which are 3500 here otherwise int OriginalCastTime = spellProto.CalcCastTime(); - if (OriginalCastTime > 7000) OriginalCastTime = 7000; - if (OriginalCastTime < 1500) OriginalCastTime = 1500; + if (OriginalCastTime > 7000) + OriginalCastTime = 7000; + if (OriginalCastTime < 1500) + OriginalCastTime = 1500; // Portion to Over Time float PtOT = (overTime / 15000.0f) / ((overTime / 15000.0f) + (OriginalCastTime / 3500.0f)); @@ -2068,7 +2077,7 @@ namespace Game.Entities InterruptSpell(CurrentSpellTypes.AutoRepeat); m_AutoRepeatFirstCast = true; } - if (pSpell.m_spellInfo.CalcCastTime(GetLevel()) > 0) + if (pSpell.m_spellInfo.CalcCastTime() > 0) AddUnitState(UnitState.Casting); break; @@ -2152,26 +2161,19 @@ namespace Game.Entities public uint SpellCriticalDamageBonus(SpellInfo spellProto, uint damage, Unit victim = null) { // Calculate critical bonus - int crit_bonus = (int)damage; + int crit_bonus = (int)damage * 2; float crit_mod = 0.0f; - switch (spellProto.DmgClass) - { - case SpellDmgClass.Melee: // for melee based spells is 100% - case SpellDmgClass.Ranged: - // @todo write here full calculation for melee/ranged spells - crit_bonus += (int)damage; - break; - default: - crit_bonus += (int)damage / 2; // for spells is 50% - break; - } - crit_mod += (GetTotalAuraMultiplierByMiscMask(AuraType.ModCritDamageBonus, (uint)spellProto.GetSchoolMask()) - 1.0f) * 100; if (crit_bonus != 0) MathFunctions.AddPct(ref crit_bonus, (int)crit_mod); + MathFunctions.AddPct(ref crit_bonus, victim.GetTotalAuraModifier(AuraType.ModCriticalDamageTakenFromCaster, aurEff => + { + return aurEff.GetCasterGUID() == GetGUID(); + })); + crit_bonus -= (int)damage; if (damage > crit_bonus) diff --git a/Source/Game/Entities/Unit/Unit.cs b/Source/Game/Entities/Unit/Unit.cs index 1f5b19a3d..af9ff36d0 100644 --- a/Source/Game/Entities/Unit/Unit.cs +++ b/Source/Game/Entities/Unit/Unit.cs @@ -1207,7 +1207,7 @@ namespace Game.Entities if (artifactAura != null) { Item artifact = ToPlayer().GetItemByGuid(artifactAura.GetCastItemGUID()); - if (artifact) + if (artifact != null) { ArtifactAppearanceRecord artifactAppearance = CliDB.ArtifactAppearanceStorage.LookupByKey(artifact.GetModifier(ItemModifier.ArtifactAppearanceId)); if (artifactAppearance != null) @@ -1216,398 +1216,84 @@ namespace Game.Entities } } - byte hairColor = thisPlayer.m_playerData.HairColorID; - byte skinColor = thisPlayer.m_playerData.SkinID; + ShapeshiftFormModelData formModelData = Global.DB2Mgr.GetShapeshiftFormModelData(GetRace(), thisPlayer.GetNativeSex(), form); + if (formModelData != null) + { + bool useRandom = false; + switch (form) + { + case ShapeShiftForm.CatForm: + useRandom = HasAura(210333); + break; // Glyph of the Feral Chameleon + case ShapeShiftForm.TravelForm: + useRandom = HasAura(344336); + break; // Glyph of the Swift Chameleon + case ShapeShiftForm.AquaticForm: + useRandom = HasAura(344338); + break; // Glyph of the Aquatic Chameleon + case ShapeShiftForm.BearForm: + useRandom = HasAura(107059); + break; // Glyph of the Ursol Chameleon + case ShapeShiftForm.FlightForm: + useRandom = HasAura(344342); + break; // Glyph of the Aerial Chameleon + default: + break; + } + if (useRandom) + { + List displayIds = new List(); + for (var i = 0; i < formModelData.Choices.Count; ++i) + { + ChrCustomizationDisplayInfoRecord displayInfo = formModelData.Displays[i]; + if (displayInfo != null) + { + ChrCustomizationReqRecord choiceReq = CliDB.ChrCustomizationReqStorage.LookupByKey(formModelData.Choices[i].ChrCustomizationReqID); + if (choiceReq == null || thisPlayer.GetSession().MeetsChrCustomizationReq(choiceReq, GetClass(), false, thisPlayer.m_playerData.Customizations)) + displayIds.Add(displayInfo.DisplayID); + } + } + + if (!displayIds.Empty()) + return displayIds.SelectRandom(); + } + else + { + uint formChoice = thisPlayer.GetCustomizationChoice(formModelData.OptionID); + if (formChoice != 0) + { + var choiceIndex = formModelData.Choices.FindIndex(choice => + { + return choice.Id == formChoice; + }); + + if (choiceIndex != -1) + { + ChrCustomizationDisplayInfoRecord displayInfo = formModelData.Displays[choiceIndex]; + if (displayInfo != null) + return displayInfo.DisplayID; + } + } + } + } switch (form) { - case ShapeShiftForm.CatForm: - { - if (GetRace() == Race.NightElf) - { - if (HasAura(210333)) // Glyph of the Feral Chameleon - hairColor = (byte)RandomHelper.URand(0, 10); - - switch (hairColor) - { - case 7: // Violet - case 8: - return 29405; - case 3: // Light Blue - return 29406; - case 0: // Green - case 1: // Light Green - case 2: // Dark Green - return 29407; - case 4: // White - return 29408; - default: // original - Dark Blue - return 892; - } - } - else if (GetRace() == Race.Troll) - { - if (HasAura(210333)) // Glyph of the Feral Chameleon - hairColor = (byte)RandomHelper.URand(0, 12); - - switch (hairColor) - { - case 0: // Red - case 1: - return 33668; - case 2: // Yellow - case 3: - return 33667; - case 4: // Blue - case 5: - case 6: - return 33666; - case 7: // Purple - case 10: - return 33665; - default: // original - white - return 33669; - } - } - else if (GetRace() == Race.Worgen) - { - if (HasAura(210333)) // Glyph of the Feral Chameleon - skinColor = (byte)RandomHelper.URand(0, 9); - - // Male - if (GetGender() == Gender.Male) - { - switch (skinColor) - { - case 1: // Brown - return 33662; - case 2: // Black - case 7: - return 33661; - case 4: // yellow - return 33664; - case 3: // White - case 5: - return 33663; - default: // original - Gray - return 33660; - } - } - // Female - else - { - switch (skinColor) - { - case 5: // Brown - case 6: - return 33662; - case 7: // Black - case 8: - return 33661; - case 3: // yellow - case 4: - return 33664; - case 2: // White - return 33663; - default: // original - Gray - return 33660; - } - } - } - else if (GetRace() == Race.Tauren) - { - if (HasAura(210333)) // Glyph of the Feral Chameleon - skinColor = (byte)RandomHelper.URand(0, 20); - - if (GetGender() == Gender.Male) - { - switch (skinColor) - { - case 12: // White - case 13: - case 14: - case 18: // Completly White - return 29409; - case 9: // Light Brown - case 10: - case 11: - return 29410; - case 6: // Brown - case 7: - case 8: - return 29411; - case 0: // Dark - case 1: - case 2: - case 3: // Dark Grey - case 4: - case 5: - return 29412; - default: // original - Grey - return 8571; - } - } - // Female - else - { - switch (skinColor) - { - case 10: // White - return 29409; - case 6: // Light Brown - case 7: - return 29410; - case 4: // Brown - case 5: - return 29411; - case 0: // Dark - case 1: - case 2: - case 3: - return 29412; - default: // original - Grey - return 8571; - } - } - } - else if (Player.TeamForRace(GetRace()) == Team.Alliance) - return 892; - else - return 8571; - } - case ShapeShiftForm.BearForm: - { - if (GetRace() == Race.NightElf) - { - if (HasAura(210333)) // Glyph of the Feral Chameleon - hairColor = (byte)RandomHelper.URand(0, 8); - - switch (hairColor) - { - case 0: // Green - case 1: // Light Green - case 2: // Dark Green - return 29413; // 29415? - case 6: // Dark Blue - return 29414; - case 4: // White - return 29416; - case 3: // Light Blue - return 29417; - default: // original - Violet - return 29415; - } - } - else if (GetRace() == Race.Troll) - { - if (HasAura(210333)) // Glyph of the Feral Chameleon - hairColor = (byte)RandomHelper.URand(0, 14); - - switch (hairColor) - { - case 0: // Red - case 1: - return 33657; - case 2: // Yellow - case 3: - return 33659; - case 7: // Purple - case 10: - return 33656; - case 8: // White - case 9: - case 11: - case 12: - return 33658; - default: // original - Blue - return 33655; - } - } - else if (GetRace() == Race.Worgen) - { - if (HasAura(210333)) // Glyph of the Feral Chameleon - skinColor = (byte)RandomHelper.URand(0, 8); - - // Male - if (GetGender() == Gender.Male) - { - switch (skinColor) - { - case 1: // Brown - return 33652; - case 2: // Black - case 7: - return 33651; - case 4: // Yellow - return 33653; - case 3: // White - case 5: - return 33654; - default: // original - Gray - return 33650; - } - } - // Female - else - { - switch (skinColor) - { - case 5: // Brown - case 6: - return 33652; - case 7: // Black - case 8: - return 33651; - case 3: // yellow - case 4: - return 33654; - case 2: // White - return 33653; - default: // original - Gray - return 33650; - } - } - } - else if (GetRace() == Race.Tauren) - { - if (HasAura(210333)) // Glyph of the Feral Chameleon - skinColor = (byte)RandomHelper.URand(0, 20); - - if (GetGender() == Gender.Male) - { - switch (skinColor) - { - case 0: // Dark (Black) - case 1: - case 2: - return 29418; - case 3: // White - case 4: - case 5: - case 12: - case 13: - case 14: - return 29419; - case 9: // Light Brown/Grey - case 10: - case 11: - case 15: - case 16: - case 17: - return 29420; - case 18: // Completly White - return 29421; - default: // original - Brown - return 2289; - } - } - // Female - else - { - switch (skinColor) - { - case 0: // Dark (Black) - case 1: - return 29418; - case 2: // White - case 3: - return 29419; - case 6: // Light Brown/Grey - case 7: - case 8: - case 9: - return 29420; - case 10: // Completly White - return 29421; - default: // original - Brown - return 2289; - } - } - } - else if (Player.TeamForRace(GetRace()) == Team.Alliance) - return 29415; - else - return 2289; - } - case ShapeShiftForm.FlightForm: - if (Player.TeamForRace(GetRace()) == Team.Alliance) - return 20857; - return 20872; - case ShapeShiftForm.FlightFormEpic: - if (HasAura(219062)) // Glyph of the Sentinel - { - switch (GetRace()) - { - case Race.NightElf: // Blue - return 64328; - case Race.Tauren: // Brown - return 64329; - case Race.Worgen: // Purple - return 64330; - case Race.Troll: // White - return 64331; - default: - break; - } - } - if (Player.TeamForRace(GetRace()) == Team.Alliance) - return (GetRace() == Race.Worgen ? 37729 : 21243u); - if (GetRace() == Race.Troll) - return 37730; - return 21244; - case ShapeShiftForm.MoonkinForm: - switch (GetRace()) - { - case Race.NightElf: - return 15374; - case Race.Tauren: - return 15375; - case Race.Worgen: - return 37173; - case Race.Troll: - return 37174; - default: - break; - } - break; - case ShapeShiftForm.AquaticForm: - if (HasAura(114333)) // Glyph of the Orca - return 4591; - return 2428; - case ShapeShiftForm.TravelForm: - { - if (HasAura(131113)) // Glyph of the Cheetah - return 1043; - - if (HasAura(224122)) // Glyph of the Doe - return 70450; - - switch (GetRace()) - { - case Race.NightElf: - case Race.Worgen: - return 40816; - case Race.Troll: - case Race.Tauren: - return 45339; - default: - break; - } - break; - } case ShapeShiftForm.GhostWolf: if (HasAura(58135)) // Glyph of Spectral Wolf return 60247; break; + default: + break; } } uint modelid = 0; - SpellShapeshiftFormRecord formEntry = CliDB.SpellShapeshiftFormStorage.LookupByKey((uint)form); + SpellShapeshiftFormRecord formEntry = CliDB.SpellShapeshiftFormStorage.LookupByKey(form); if (formEntry != null && formEntry.CreatureDisplayID[0] != 0) { // Take the alliance modelid as default - if (!IsTypeId(TypeId.Player)) + if (GetTypeId() != TypeId.Player) return formEntry.CreatureDisplayID[0]; else { @@ -2673,11 +2359,12 @@ namespace Game.Entities { SetUpdateFieldValue(ref m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.ChannelData)._value.SpellID, channelSpellId); } - public uint GetChannelSpellXSpellVisualId() { return ((UnitChannel)m_unitData.ChannelData).SpellXSpellVisualID; } - public void SetChannelSpellXSpellVisualId(SpellCastVisual channelVisual) + public uint GetChannelSpellXSpellVisualId() { return m_unitData.ChannelData.GetValue().SpellVisual.SpellXSpellVisualID; } + public uint GetChannelScriptVisualId() { return m_unitData.ChannelData.GetValue().SpellVisual.ScriptVisualID; } + public void SetChannelVisual(SpellCastVisualField channelVisual) { UnitChannel unitChannel = m_unitData.ModifyValue(m_unitData.ChannelData); - SetUpdateFieldValue(ref unitChannel.SpellXSpellVisualID, channelVisual.SpellXSpellVisualID); + SetUpdateFieldValue(ref unitChannel.SpellVisual, channelVisual); } public void AddChannelObject(ObjectGuid guid) { AddDynamicUpdateFieldValue(m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.ChannelObjects), guid); } public void SetChannelObject(int slot, ObjectGuid guid) { SetUpdateFieldValue(m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.ChannelObjects, slot), guid); } diff --git a/Source/Game/Globals/ObjectManager.cs b/Source/Game/Globals/ObjectManager.cs index 3f07010bf..5b8140f7c 100644 --- a/Source/Game/Globals/ObjectManager.cs +++ b/Source/Game/Globals/ObjectManager.cs @@ -4589,25 +4589,6 @@ namespace Game itemTemplate.Effects.Add(effectEntry); } - // Check if item templates for DBC referenced character start outfit are present - List notFoundOutfit = new List(); - foreach (var entry in CliDB.CharStartOutfitStorage.Values) - { - for (int j = 0; j < ItemConst.MaxOutfitItems; ++j) - { - if (entry.ItemID[j] <= 0) - continue; - - uint item_id = (uint)entry.ItemID[j]; - - if (GetItemTemplate(item_id) == null) - notFoundOutfit.Add(item_id); - } - } - - foreach (var id in notFoundOutfit) - Log.outError(LogFilter.Sql, "Item (Entry: {0}) item does not exist but is referenced in `CharStartOutfit.dbc`", id); - Log.outInfo(LogFilter.ServerLoading, "Loaded {0} item templates in {1} ms", sparseCount, Time.GetMSTimeDiffToNow(oldMSTime)); } @@ -5510,28 +5491,42 @@ namespace Game float positionZ = result.Read(6); float orientation = result.Read(7); - if (currentrace >= (int)Race.Max) + if (CliDB.ChrRacesStorage.ContainsKey(currentrace)) { - Log.outError(LogFilter.Sql, "Wrong race {0} in `playercreateinfo` table, ignoring.", currentrace); + Log.outError(LogFilter.Sql, $"Wrong race {currentrace} in `playercreateinfo` table, ignoring."); continue; } - var rEntry = CliDB.ChrRacesStorage.LookupByKey(currentrace); - if (rEntry == null) + if (CliDB.ChrClassesStorage.ContainsKey(currentclass)) { - Log.outError(LogFilter.Sql, "Wrong race {0} in `playercreateinfo` table, ignoring.", currentrace); + Log.outError(LogFilter.Sql, $"Wrong class {currentclass} in `playercreateinfo` table, ignoring."); continue; } - if (currentclass >= (int)Class.Max) + // accept DB data only for valid position (and non instanceable) + if (!GridDefines.IsValidMapCoord(mapId, positionX, positionY, positionZ, orientation)) { - Log.outError(LogFilter.Sql, "Wrong class {0} in `playercreateinfo` table, ignoring.", currentclass); + Log.outError(LogFilter.Sql, $"Wrong home position for class {currentclass} race {currentrace} pair in `playercreateinfo` table, ignoring."); continue; } - if (CliDB.ChrClassesStorage.LookupByKey(currentclass) == null) + if (CliDB.MapStorage.LookupByKey(mapId).Instanceable()) { - Log.outError(LogFilter.Sql, "Wrong class {0} in `playercreateinfo` table, ignoring.", currentclass); + Log.outError(LogFilter.Sql, $"Home position in instanceable map for class {currentclass} race {currentrace} pair in `playercreateinfo` table, ignoring."); + continue; + } + + ChrModelRecord maleModel = Global.DB2Mgr.GetChrModel((Race)currentrace, Gender.Male); + if (maleModel == null) + { + Log.outError(LogFilter.Sql, $"Missing male model for race {currentrace}, ignoring."); + continue; + } + + ChrModelRecord femaleModel = Global.DB2Mgr.GetChrModel((Race)currentrace, Gender.Female); + if (femaleModel == null) + { + Log.outError(LogFilter.Sql, $"Missing female model for race {currentrace}, ignoring."); continue; } @@ -5543,8 +5538,8 @@ namespace Game pInfo.PositionZ = positionZ; pInfo.Orientation = orientation; - pInfo.DisplayId_m = rEntry.MaleDisplayId; - pInfo.DisplayId_f = rEntry.FemaleDisplayId; + pInfo.DisplayId_m = maleModel.DisplayID; + pInfo.DisplayId_f = femaleModel.DisplayID; _playerInfo[currentrace][currentclass] = pInfo; @@ -5556,6 +5551,63 @@ namespace Game time = Time.GetMSTime(); // Load playercreate items Log.outInfo(LogFilter.ServerLoading, "Loading Player Create Items Data..."); + { + MultiMap itemsByCharacterLoadout = new MultiMap(); + foreach (CharacterLoadoutItemRecord characterLoadoutItem in CliDB.CharacterLoadoutItemStorage.Values) + { + ItemTemplate itemTemplate = GetItemTemplate(characterLoadoutItem.ItemID); + if (itemTemplate != null) + itemsByCharacterLoadout.Add(characterLoadoutItem.CharacterLoadoutID, itemTemplate); + } + + foreach (CharacterLoadoutRecord characterLoadout in CliDB.CharacterLoadoutStorage.Values) + { + if (!characterLoadout.IsForNewCharacter()) + continue; + + var items = itemsByCharacterLoadout.LookupByKey(characterLoadout.Id); + if (items.Empty()) + continue; + + for (uint raceIndex = (int)Race.Human; raceIndex < (int)Race.Max; ++raceIndex) + { + if (!characterLoadout.RaceMask.HasAnyFlag(raceIndex)) + continue; + + PlayerInfo playerInfo = _playerInfo[raceIndex][characterLoadout.ChrClassID]; + if (playerInfo != null) + { + foreach (ItemTemplate itemTemplate in items) + { + // BuyCount by default + uint count = itemTemplate.GetBuyCount(); + + // special amount for food/drink + if (itemTemplate.GetClass() == ItemClass.Consumable && (ItemSubClassConsumable)itemTemplate.GetSubClass() == ItemSubClassConsumable.FoodDrink) + { + if (!itemTemplate.Effects.Empty()) + { + switch ((SpellCategories)itemTemplate.Effects[0].SpellCategoryID) + { + case SpellCategories.Food: // food + count = characterLoadout.ChrClassID == (int)Class.Deathknight ? 10 : 4u; + break; + case SpellCategories.Drink: // drink + count = 2; + break; + } + } + if (itemTemplate.GetMaxStackSize() < count) + count = itemTemplate.GetMaxStackSize(); + } + + playerInfo.item.Add(new PlayerCreateInfoItem(itemTemplate.GetId(), count)); + } + } + } + } + } + Log.outInfo(LogFilter.ServerLoading, "Loading Player Create Items Override Data..."); { // 0 1 2 3 SQLResult result = DB.World.Query("SELECT race, class, itemid, amount FROM playercreateinfo_item"); @@ -5986,38 +6038,20 @@ namespace Game Log.outInfo(LogFilter.ServerLoading, "Loaded {0} xp for level definition(s) from database in {1} ms", count, Time.GetMSTimeDiffToNow(time)); } } - void PlayerCreateInfoAddItemHelper(uint race, uint _class, uint itemId, int count) + void PlayerCreateInfoAddItemHelper(uint race, uint class_, uint itemId, int count) { - if (_playerInfo[race][_class] == null) + if (_playerInfo[race][class_] == null) return; if (count > 0) - _playerInfo[race][_class].item.Add(new PlayerCreateInfoItem(itemId, (uint)count)); + _playerInfo[race][class_].item.Add(new PlayerCreateInfoItem(itemId, (uint)count)); else { if (count < -1) Log.outError(LogFilter.Sql, "Invalid count {0} specified on item {1} be removed from original player create info (use -1)!", count, itemId); - for (byte gender = 0; gender < (int)Gender.None; ++gender) - { - CharStartOutfitRecord entry = Global.DB2Mgr.GetCharStartOutfitEntry(race, _class, gender); - if (entry != null) - { - bool found = false; - for (var x = 0; x < ItemConst.MaxOutfitItems; ++x) - { - if (entry.ItemID[x] > 0 && entry.ItemID[x] == itemId) - { - found = true; - entry.ItemID[x] = 0; - break; - } - } - - if (!found) - Log.outError(LogFilter.Sql, "Item {0} specified to be removed from original create info not found in dbc!", itemId); - } - } + var items = _playerInfo[race][class_].item; + items.RemoveAll(item => { return item.item_id == itemId; }); } } @@ -9416,9 +9450,9 @@ namespace Game int responseId = rewardItems.Read(1); uint itemId = rewardItems.Read(2); StringArray bonusListIDsTok = new StringArray(rewardItems.Read(3), ' '); - List bonusListIds = new List(); + List bonusListIds = new List(); foreach (string token in bonusListIDsTok) - bonusListIds.Add(int.Parse(token)); + bonusListIds.Add(uint.Parse(token)); int quantity = rewardItems.Read(4); @@ -9448,7 +9482,7 @@ namespace Game continue; } - response.Reward.ItemChoices.Add(itemId, bonusListIds, quantity); + response.Reward.Value.ItemChoices.Add(new PlayerChoiceResponseRewardItem(itemId, bonusListIds, quantity)); itemChoiceRewardCount++; } while (rewards.NextRow()); @@ -9482,7 +9516,7 @@ namespace Game mawPower.RarityColor = mawPowersResult.Read(4); mawPower.SpellID = mawPowersResult.Read(5); mawPower.MaxStacks = mawPowersResult.Read(6); - response.MawPower.Add(mawPower); + response.MawPower.Set(mawPower); ++mawPowersCount; @@ -9757,21 +9791,23 @@ namespace Game switch (expansion) { case Expansion.Classic: - return 60; + return 30; case Expansion.BurningCrusade: - return 70; + return 30; case Expansion.WrathOfTheLichKing: - return 80; + return 30; case Expansion.Cataclysm: - return 85; + return 35; case Expansion.MistsOfPandaria: - return 90; + return 35; case Expansion.WarlordsOfDraenor: - return 100; + return 40; case Expansion.Legion: - return 110; + return 45; case Expansion.BattleForAzeroth: - return 120; + return 50; + case Expansion.ShadowLands: + return 60; default: break; } diff --git a/Source/Game/Guilds/Guild.cs b/Source/Game/Guilds/Guild.cs index 10bc4501b..4d5388cf2 100644 --- a/Source/Game/Guilds/Guild.cs +++ b/Source/Game/Guilds/Guild.cs @@ -2505,7 +2505,7 @@ namespace Game.Guilds m_name = player.GetName(); m_level = (byte)player.GetLevel(); m_class = player.GetClass(); - _gender = (Gender)(byte)player.m_playerData.NativeSex; + _gender = player.GetNativeSex(); m_zoneId = player.GetZoneId(); m_accountId = player.GetSession().GetAccountId(); m_achievementPoints = player.GetAchievementPoints(); diff --git a/Source/Game/Handlers/CalendarHandler.cs b/Source/Game/Handlers/CalendarHandler.cs index 71d54732e..0f52b4519 100644 --- a/Source/Game/Handlers/CalendarHandler.cs +++ b/Source/Game/Handlers/CalendarHandler.cs @@ -108,7 +108,7 @@ namespace Game Global.CalendarMgr.SendCalendarCommandResult(GetPlayer().GetGUID(), CalendarError.EventInvalid); } - [WorldPacketHandler(ClientOpcodes.CalendarCommunityInviteRequest)] + [WorldPacketHandler(ClientOpcodes.CalendarCommunityInvite)] void HandleCalendarCommunityInvite(CalendarCommunityInviteRequest calendarCommunityInvite) { Guild guild = Global.GuildMgr.GetGuildById(GetPlayer().GetGuildId()); @@ -423,7 +423,7 @@ namespace Game Global.CalendarMgr.SendCalendarCommandResult(guid, CalendarError.EventInvalid); } - [WorldPacketHandler(ClientOpcodes.CalendarEventModeratorStatus)] + [WorldPacketHandler(ClientOpcodes.CalendarModeratorStatus)] void HandleCalendarModeratorStatus(CalendarModeratorStatusQuery calendarModeratorStatus) { ObjectGuid guid = GetPlayer().GetGUID(); diff --git a/Source/Game/Handlers/CharacterHandler.cs b/Source/Game/Handlers/CharacterHandler.cs index a768a0d8b..374d02b2b 100644 --- a/Source/Game/Handlers/CharacterHandler.cs +++ b/Source/Game/Handlers/CharacterHandler.cs @@ -28,6 +28,7 @@ using Game.Networking; using Game.Networking.Packets; using System; using System.Collections.Generic; +using System.Linq; namespace Game { @@ -41,57 +42,77 @@ namespace Game DB.Characters.Execute(stmt); // get all the data necessary for loading all characters (along with their pets) on the account - if (WorldConfig.GetBoolValue(WorldCfg.DeclinedNamesUsed)) - stmt = DB.Characters.GetPreparedStatement(CharStatements.SEL_ENUM_DECLINED_NAME); - else - stmt = DB.Characters.GetPreparedStatement(CharStatements.SEL_ENUM); + EnumCharactersQueryHolder holder = new EnumCharactersQueryHolder(); + if (!holder.Initialize(GetAccountId(), WorldConfig.GetBoolValue(WorldCfg.DeclinedNamesUsed), false)) + { + HandleCharEnum(holder); + return; + } - stmt.AddValue(0, PetSaveMode.AsCurrent); - stmt.AddValue(1, GetAccountId()); - - _queryProcessor.AddCallback(DB.Characters.AsyncQuery(stmt).WithCallback(HandleCharEnumCallback)); + _charEnumCallback = DB.Characters.DelayQueryHolder(holder); } - void HandleCharEnumCallback(SQLResult result) + void HandleCharEnum(EnumCharactersQueryHolder holder) { EnumCharactersResult charResult = new EnumCharactersResult(); charResult.Success = true; - charResult.IsDeletedCharacters = false; + charResult.IsDeletedCharacters = holder.IsDeletedCharacters(); charResult.DisabledClassesMask.Set(WorldConfig.GetUIntValue(WorldCfg.CharacterCreatingDisabledClassmask)); - _legitCharacters.Clear(); + if (!charResult.IsDeletedCharacters) + _legitCharacters.Clear(); + + MultiMap customizations = new MultiMap(); + SQLResult customizationsResult = holder.GetResult(EnumCharacterQueryLoad.Customizations); + if (!customizationsResult.IsEmpty()) + { + do + { + var customizationsForCharacter = customizations[customizationsResult.Read(0)]; + + ChrCustomizationChoice choice = new ChrCustomizationChoice(); + choice.ChrCustomizationOptionID = customizationsResult.Read(1); + choice.ChrCustomizationChoiceID = customizationsResult.Read(2); + customizationsForCharacter.Add(choice); + + } while (customizationsResult.NextRow()); + } + + SQLResult result = holder.GetResult(EnumCharacterQueryLoad.Characters); if (!result.IsEmpty()) { do { EnumCharactersResult.CharacterInfo charInfo = new EnumCharactersResult.CharacterInfo(result.GetFields()); + var customizationsForChar = customizations.LookupByKey(charInfo.Guid.GetCounter()); + if (!customizationsForChar.Empty()) + charInfo.Customizations = (Array)customizationsForChar.ToList(); + Log.outInfo(LogFilter.Network, "Loading Character {0} from account {1}.", charInfo.Guid.ToString(), GetAccountId()); - if (!Player.ValidateAppearance((Race)charInfo.RaceId, charInfo.ClassId, (Gender)charInfo.SexId, charInfo.HairStyle, charInfo.HairColor, charInfo.FaceId, charInfo.FacialHair, charInfo.SkinId, charInfo.CustomDisplay)) + if (!charResult.IsDeletedCharacters) { - Log.outError(LogFilter.Player, "Player {0} has wrong Appearance values (Hair/Skin/Color), forcing recustomize", charInfo.Guid.ToString()); - - // Make sure customization always works properly - send all zeroes instead - charInfo.SkinId = 0; - charInfo.FaceId = 0; - charInfo.HairStyle = 0; - charInfo.HairColor = 0; - charInfo.FacialHair = 0; - - if (charInfo.Flags2 != CharacterCustomizeFlags.Customize) + if (!ValidateAppearance((Race)charInfo.RaceId, charInfo.ClassId, (Gender)charInfo.SexId, charInfo.Customizations)) { - PreparedStatement stmt = DB.Characters.GetPreparedStatement(CharStatements.UPD_ADD_AT_LOGIN_FLAG); - stmt.AddValue(0, (ushort)AtLoginFlags.Customize); - stmt.AddValue(1, charInfo.Guid.GetCounter()); - DB.Characters.Execute(stmt); - charInfo.Flags2 = CharacterCustomizeFlags.Customize; - } - } + Log.outError(LogFilter.Player, "Player {0} has wrong Appearance values (Hair/Skin/Color), forcing recustomize", charInfo.Guid.ToString()); - // Do not allow locked characters to login - if (!charInfo.Flags.HasAnyFlag(CharacterFlags.CharacterLockedForTransfer | CharacterFlags.LockedByBilling)) - _legitCharacters.Add(charInfo.Guid); + charInfo.Customizations.Clear(); + + if (charInfo.Flags2 != CharacterCustomizeFlags.Customize) + { + PreparedStatement stmt = DB.Characters.GetPreparedStatement(CharStatements.UPD_ADD_AT_LOGIN_FLAG); + stmt.AddValue(0, (ushort)AtLoginFlags.Customize); + stmt.AddValue(1, charInfo.Guid.GetCounter()); + DB.Characters.Execute(stmt); + charInfo.Flags2 = CharacterCustomizeFlags.Customize; + } + } + + // Do not allow locked characters to login + if (!charInfo.Flags.HasAnyFlag(CharacterFlags.CharacterLockedForTransfer | CharacterFlags.LockedByBilling)) + _legitCharacters.Add(charInfo.Guid); + } if (!Global.CharacterCacheStorage.HasCharacterCacheEntry(charInfo.Guid)) // This can happen if characters are inserted into the database manually. Core hasn't loaded name data yet. Global.CharacterCacheStorage.AddCharacterCacheEntry(charInfo.Guid, GetAccountId(), charInfo.Name, charInfo.SexId, charInfo.RaceId, (byte)charInfo.ClassId, charInfo.ExperienceLevel, false); @@ -120,16 +141,14 @@ namespace Game void HandleCharUndeleteEnum(EnumCharacters enumCharacters) { // get all the data necessary for loading all undeleted characters (along with their pets) on the account - PreparedStatement stmt; - if (WorldConfig.GetBoolValue(WorldCfg.DeclinedNamesUsed)) - stmt = DB.Characters.GetPreparedStatement(CharStatements.SEL_UNDELETE_ENUM_DECLINED_NAME); - else - stmt = DB.Characters.GetPreparedStatement(CharStatements.SEL_UNDELETE_ENUM); - - stmt.AddValue(0, (uint)PetSaveMode.AsCurrent); - stmt.AddValue(1, GetAccountId()); - - _queryProcessor.AddCallback(DB.Characters.AsyncQuery(stmt).WithCallback(HandleCharUndeleteEnumCallback)); + EnumCharactersQueryHolder holder = new EnumCharactersQueryHolder(); + if (!holder.Initialize(GetAccountId(), WorldConfig.GetBoolValue(WorldCfg.DeclinedNamesUsed), true)) + { + HandleCharEnum(holder); + return; + } + + _charEnumCallback = DB.Characters.DelayQueryHolder(holder); } void HandleCharUndeleteEnumCallback(SQLResult result) @@ -158,6 +177,94 @@ namespace Game SendPacket(charEnum); } + public bool MeetsChrCustomizationReq(ChrCustomizationReqRecord req, Class playerClass, bool checkRequiredDependentChoices, List selectedChoices) + { + if (!req.GetFlags().HasFlag(ChrCustomizationReqFlag.HasRequirements)) + return true; + + if (req.ClassMask != 0 && (req.ClassMask & (1 << ((int)playerClass - 1))) == 0) + return false; + + if (req.AchievementID != 0 /*&& !HasAchieved(req->AchievementID)*/) + return false; + + if (req.ItemModifiedAppearanceID != 0 && !GetCollectionMgr().HasItemAppearance(req.ItemModifiedAppearanceID).PermAppearance) + return false; + + if (checkRequiredDependentChoices) + { + var requiredChoices = Global.DB2Mgr.GetRequiredCustomizationChoices(req.Id); + if (!requiredChoices.Empty()) + { + foreach (var key in requiredChoices.Keys) + { + bool hasRequiredChoiceForOption = false; + foreach (uint requiredChoice in requiredChoices[key]) + { + if (selectedChoices.Any(choice => choice.ChrCustomizationChoiceID == requiredChoice)) + { + hasRequiredChoiceForOption = true; + break; + } + } + + if (!hasRequiredChoiceForOption) + return false; + } + } + + } + + return true; + } + + public bool ValidateAppearance(Race race, Class playerClass, Gender gender, List customizations) + { + var options = Global.DB2Mgr.GetCustomiztionOptions(race, gender); + if (options.Empty()) + return false; + + uint previousOption = 0; + + foreach (var playerChoice in customizations) + { + // check uniqueness of options + if (playerChoice.ChrCustomizationOptionID == previousOption) + return false; + + previousOption = playerChoice.ChrCustomizationOptionID; + + // check if we can use this option + var customizationOptionData = options.Find(option => { return option.Id == playerChoice.ChrCustomizationOptionID; }); + + // option not found for race/gender combination + if (customizationOptionData == null) + return false; + + ChrCustomizationReqRecord req = CliDB.ChrCustomizationReqStorage.LookupByKey(customizationOptionData.ChrCustomizationReqID); + if (req != null) + if (!MeetsChrCustomizationReq(req, playerClass, false, customizations)) + return false; + + var choicesForOption = Global.DB2Mgr.GetCustomiztionChoices(playerChoice.ChrCustomizationOptionID); + if (choicesForOption.Empty()) + return false; + + var customizationChoiceData = choicesForOption.Find(choice => { return choice.Id == playerChoice.ChrCustomizationChoiceID; }); + + // choice not found for option + if (customizationChoiceData == null) + return false; + + ChrCustomizationReqRecord reqEntry = CliDB.ChrCustomizationReqStorage.LookupByKey(customizationChoiceData.ChrCustomizationReqID); + if (reqEntry != null) + if (!MeetsChrCustomizationReq(reqEntry, playerClass, true, customizations)) + return false; + } + + return true; + } + [WorldPacketHandler(ClientOpcodes.CreateCharacter, Status = SessionStatus.Authed)] void HandleCharCreate(CreateCharacter charCreate) { @@ -332,7 +439,7 @@ namespace Game return; } } - + int demonHunterReqLevel = WorldConfig.GetIntValue(WorldCfg.CharacterCreatingMinLevelForDemonHunter); bool hasDemonHunterReqLevel = demonHunterReqLevel == 0; bool allowTwoSideAccounts = !Global.WorldMgr.IsPvPRealm() || HasPermission(RBACPermissions.TwoSideCharacterCreation); @@ -386,19 +493,6 @@ namespace Game if (checkDemonHunterReqs) { - byte acc_class = result1.Read(2); - if (acc_class == (byte)Class.DemonHunter) - { - if (freeDemonHunterSlots > 0) - --freeDemonHunterSlots; - - if (freeDemonHunterSlots == 0) - { - SendCharCreate(ResponseCodes.CharCreateFailed); - return; - } - } - if (!hasDemonHunterReqLevel) { byte acc_level = result1.Read(0); @@ -457,7 +551,7 @@ namespace Game { Log.outInfo(LogFilter.Player, "Account: {0} (IP: {1}) Create Character: {2} {3}", GetAccountId(), GetRemoteAddress(), createInfo.Name, newChar.GetGUID().ToString()); Global.ScriptMgr.OnPlayerCreate(newChar); - Global.CharacterCacheStorage.AddCharacterCacheEntry(newChar.GetGUID(), GetAccountId(), newChar.GetName(), newChar.m_playerData.NativeSex, (byte)newChar.GetRace(), (byte)newChar.GetClass(), (byte)newChar.GetLevel(), false); + Global.CharacterCacheStorage.AddCharacterCacheEntry(newChar.GetGUID(), GetAccountId(), newChar.GetName(), (byte)newChar.GetNativeSex(), (byte)newChar.GetRace(), (byte)newChar.GetClass(), (byte)newChar.GetLevel(), false); SendCharCreate(ResponseCodes.CharCreateSuccess, newChar.GetGUID()); } @@ -474,7 +568,7 @@ namespace Game stmt = DB.Characters.GetPreparedStatement(CharStatements.SEL_CHAR_CREATE_INFO); stmt.AddValue(0, GetAccountId()); - stmt.AddValue(1, (skipCinematics == 1 || createInfo.ClassId == Class.DemonHunter) ? 12 : 1); + stmt.AddValue(1, (skipCinematics == 1 || createInfo.ClassId == Class.DemonHunter) ? 1200 : 1); // 200 (max chars per realm) + 1000 (max deleted chars per realm) queryCallback.WithCallback(finalizeCharacterCreation).SetNextQuery(DB.Characters.AsyncQuery(stmt)); })); } @@ -1227,37 +1321,7 @@ namespace Game [WorldPacketHandler(ClientOpcodes.AlterAppearance)] void HandleAlterAppearance(AlterApperance packet) { - BarberShopStyleRecord bs_hair = CliDB.BarberShopStyleStorage.LookupByKey(packet.NewHairStyle); - if (bs_hair == null || bs_hair.Type != 0 || bs_hair.Race != (byte)GetPlayer().GetRace() || bs_hair.Sex != GetPlayer().m_playerData.NativeSex) - return; - - BarberShopStyleRecord bs_facialHair = CliDB.BarberShopStyleStorage.LookupByKey(packet.NewFacialHair); - if (bs_facialHair == null || bs_facialHair.Type != 2 || bs_facialHair.Race != (byte)GetPlayer().GetRace() || bs_facialHair.Sex != GetPlayer().m_playerData.NativeSex) - return; - - BarberShopStyleRecord bs_skinColor = CliDB.BarberShopStyleStorage.LookupByKey(packet.NewSkinColor); - if (bs_skinColor != null && (bs_skinColor.Type != 3 || bs_skinColor.Race != (byte)GetPlayer().GetRace() || bs_skinColor.Sex != GetPlayer().m_playerData.NativeSex)) - return; - - BarberShopStyleRecord bs_face = CliDB.BarberShopStyleStorage.LookupByKey(packet.NewFace); - if (bs_face != null && (bs_face.Type != 4 || bs_face.Race != (byte)GetPlayer().GetRace() || bs_face.Sex != GetPlayer().m_playerData.NativeSex)) - return; - - Array customDisplayEntries = new Array(PlayerConst.CustomDisplaySize); - Array customDisplay = new Array(PlayerConst.CustomDisplaySize); - for (int i = 0; i < PlayerConst.CustomDisplaySize; ++i) - { - BarberShopStyleRecord bs_customDisplay = CliDB.BarberShopStyleStorage.LookupByKey(packet.NewCustomDisplay[i]); - if (bs_customDisplay != null && (bs_customDisplay.Type != 5 + i || bs_customDisplay.Race != (byte)_player.GetRace() || bs_customDisplay.Sex != _player.m_playerData.NativeSex)) - return; - - customDisplayEntries[i] = bs_customDisplay; - customDisplay[i] = (byte)(bs_customDisplay != null ? bs_customDisplay.Data : 0); - } - - if (!Player.ValidateAppearance(GetPlayer().GetRace(), GetPlayer().GetClass(), (Gender)(byte)GetPlayer().m_playerData.NativeSex, - bs_hair.Data, (byte)packet.NewHairColor, bs_face != null ? bs_face.Data : GetPlayer().m_playerData.FaceID, - bs_facialHair.Data, bs_skinColor != null ? bs_skinColor.Data : GetPlayer().m_playerData.SkinID, customDisplay)) + if (!ValidateAppearance(_player.GetRace(), _player.GetClass(), (Gender)packet.NewSex, packet.Customizations)) return; GameObject go = GetPlayer().FindNearestGameObjectOfType(GameObjectTypes.BarberChair, 5.0f); @@ -1273,8 +1337,8 @@ namespace Game return; } - uint cost = GetPlayer().GetBarberShopCost(bs_hair, packet.NewHairColor, bs_facialHair, bs_skinColor, bs_face, customDisplayEntries); - if (!GetPlayer().HasEnoughMoney((ulong)cost)) + long cost = GetPlayer().GetBarberShopCost(packet.Customizations); + if (!GetPlayer().HasEnoughMoney(cost)) { SendPacket(new BarberShopResult(BarberShopResult.ResultEnum.NoMoney)); return; @@ -1283,22 +1347,16 @@ namespace Game SendPacket(new BarberShopResult(BarberShopResult.ResultEnum.Success)); _player.ModifyMoney(-cost); - _player.UpdateCriteria(CriteriaTypes.GoldSpentAtBarber, cost); + _player.UpdateCriteria(CriteriaTypes.GoldSpentAtBarber, (ulong)cost); - _player.SetHairStyleId(bs_hair.Data); - _player.SetHairColorId((byte)packet.NewHairColor); - _player.SetFacialHairStyleId(bs_facialHair.Data); - if (bs_skinColor != null) - GetPlayer().SetSkinId(bs_skinColor.Data); - if (bs_face != null) - _player.SetFaceId(bs_face.Data); - - for (int i = 0; i < PlayerConst.CustomDisplaySize; ++i) - _player.SetCustomDisplayOption(i, customDisplay[i]); + _player.SetNativeSex((Gender)packet.NewSex); + _player.SetCustomizations(packet.Customizations); _player.UpdateCriteria(CriteriaTypes.VisitBarberShop, 1); _player.SetStandState(UnitStandStateType.Stand); + + Global.CharacterCacheStorage.UpdateCharacterGender(_player.GetGUID(), packet.NewSex); } [WorldPacketHandler(ClientOpcodes.CharCustomize, Status = SessionStatus.Authed)] @@ -1327,13 +1385,12 @@ namespace Game } string oldName = result.Read(0); - byte plrRace = result.Read(1); - byte plrClass = result.Read(2); - byte plrGender = result.Read(3); + Race plrRace = (Race)result.Read(1); + Class plrClass = (Class)result.Read(2); + Gender plrGender = (Gender)result.Read(3); AtLoginFlags atLoginFlags = (AtLoginFlags)result.Read(4); - if (!Player.ValidateAppearance((Race)plrRace, (Class)plrClass, (Gender)plrGender, customizeInfo.HairStyleID, customizeInfo.HairColorID, customizeInfo.FaceID, - customizeInfo.FacialHairStyleID, customizeInfo.SkinID, customizeInfo.CustomDisplay)) + if (!ValidateAppearance(plrRace, plrClass, plrGender, customizeInfo.Customizations)) { SendCharCustomize(ResponseCodes.CharCreateError, customizeInfo); return; @@ -1392,22 +1449,7 @@ namespace Game ulong lowGuid = customizeInfo.CharGUID.GetCounter(); // Customize - { - stmt = DB.Characters.GetPreparedStatement(CharStatements.UPD_GENDER_AND_APPEARANCE); - - stmt.AddValue(0, customizeInfo.SexID); - stmt.AddValue(1, customizeInfo.SkinID); - stmt.AddValue(2, customizeInfo.FaceID); - stmt.AddValue(3, customizeInfo.HairStyleID); - stmt.AddValue(4, customizeInfo.HairColorID); - stmt.AddValue(5, customizeInfo.FacialHairStyleID); - stmt.AddValue(6, customizeInfo.CustomDisplay[0]); - stmt.AddValue(7, customizeInfo.CustomDisplay[1]); - stmt.AddValue(8, customizeInfo.CustomDisplay[2]); - stmt.AddValue(9, lowGuid); - - trans.Append(stmt); - } + Player.SaveCustomizations(trans, lowGuid, customizeInfo.Customizations); // Name Change and update atLogin flags { @@ -1505,7 +1547,7 @@ namespace Game if (illusion.ItemVisual == 0 || !illusion.Flags.HasAnyFlag(EnchantmentSlotMask.Collectable)) return false; - PlayerConditionRecord condition = CliDB.PlayerConditionStorage.LookupByKey(illusion.TransmogPlayerConditionID); + PlayerConditionRecord condition = CliDB.PlayerConditionStorage.LookupByKey(illusion.TransmogUseConditionID); if (condition != null) if (!ConditionManager.IsPlayerMeetingCondition(_player, condition)) return false; @@ -1735,21 +1777,7 @@ namespace Game } // Customize - { - stmt = DB.Characters.GetPreparedStatement(CharStatements.UPD_GENDER_AND_APPEARANCE); - stmt.AddValue(0, factionChangeInfo.SexID); - stmt.AddValue(1, factionChangeInfo.SkinID); - stmt.AddValue(2, factionChangeInfo.FaceID); - stmt.AddValue(3, factionChangeInfo.HairStyleID); - stmt.AddValue(4, factionChangeInfo.HairColorID); - stmt.AddValue(5, factionChangeInfo.FacialHairStyleID); - stmt.AddValue(6, factionChangeInfo.CustomDisplay[0]); - stmt.AddValue(7, factionChangeInfo.CustomDisplay[1]); - stmt.AddValue(8, factionChangeInfo.CustomDisplay[2]); - stmt.AddValue(9, lowGuid); - - trans.Append(stmt); - } + Player.SaveCustomizations(trans, lowGuid, factionChangeInfo.Customizations); // Race Change { @@ -2511,6 +2539,10 @@ namespace Game stmt.AddValue(0, lowGuid); SetQuery(PlayerLoginQueryLoad.From, stmt); + stmt = DB.Characters.GetPreparedStatement(CharStatements.SEL_CHARACTER_CUSTOMIZATIONS); + stmt.AddValue(0, lowGuid); + SetQuery(PlayerLoginQueryLoad.Customizations, stmt); + stmt = DB.Characters.GetPreparedStatement(CharStatements.SEL_GROUP_MEMBER); stmt.AddValue(0, lowGuid); SetQuery(PlayerLoginQueryLoad.Group, stmt); @@ -2736,10 +2768,41 @@ namespace Game ObjectGuid m_guid; } + class EnumCharactersQueryHolder : SQLQueryHolder + { + public bool Initialize(uint accountId, bool withDeclinedNames, bool isDeletedCharacters) + { + _isDeletedCharacters = isDeletedCharacters; + + CharStatements[][] statements = + { + new [] { CharStatements.SEL_ENUM, CharStatements.SEL_ENUM_DECLINED_NAME, CharStatements.SEL_ENUM_CUSTOMIZATIONS }, + new [] { CharStatements.SEL_UNDELETE_ENUM, CharStatements.SEL_UNDELETE_ENUM_DECLINED_NAME, CharStatements.SEL_UNDELETE_ENUM_CUSTOMIZATIONS } + }; + + bool result = true; + PreparedStatement stmt = DB.Characters.GetPreparedStatement(statements[isDeletedCharacters ? 1 : 0][withDeclinedNames ? 1 : 0]); + stmt.AddValue(0, (byte)PetSaveMode.AsCurrent); + stmt.AddValue(1, accountId); + SetQuery(EnumCharacterQueryLoad.Characters, stmt); + + stmt = DB.Characters.GetPreparedStatement(statements[isDeletedCharacters ? 1 : 0][2]); + stmt.AddValue(0, accountId); + SetQuery(EnumCharacterQueryLoad.Customizations, stmt); + + return result; + } + + public bool IsDeletedCharacters() { return _isDeletedCharacters; } + + bool _isDeletedCharacters = false; + } + // used at player loading query list preparing, and later result selection public enum PlayerLoginQueryLoad { From, + Customizations, Group, BoundInstances, Auras, @@ -2795,4 +2858,10 @@ namespace Game GarrisonFollowerAbilities, Max } + + enum EnumCharacterQueryLoad + { + Characters, + Customizations + } } diff --git a/Source/Game/Handlers/ItemHandler.cs b/Source/Game/Handlers/ItemHandler.cs index 450443127..0fb2ed8ae 100644 --- a/Source/Game/Handlers/ItemHandler.cs +++ b/Source/Game/Handlers/ItemHandler.cs @@ -451,6 +451,7 @@ namespace Game } _player.UpdateCriteria(CriteriaTypes.MoneyFromVendors, money); + _player.UpdateCriteria(CriteriaTypes.SoldItemToVendor, 1); if (packet.Amount < pItem.GetCount()) // need split items { diff --git a/Source/Game/Handlers/LFGHandler.cs b/Source/Game/Handlers/LFGHandler.cs index 8b898900d..5fd32317d 100644 --- a/Source/Game/Handlers/LFGHandler.cs +++ b/Source/Game/Handlers/LFGHandler.cs @@ -144,7 +144,8 @@ namespace Game { // Get Random dungeons that can be done at a certain level and expansion uint level = GetPlayer().GetLevel(); - List randomDungeons = Global.LFGMgr.GetRandomAndSeasonalDungeons(level, (uint)GetExpansion()); + uint contentTuningReplacementConditionMask = GetPlayer().m_playerData.CtrOptions.GetValue().ContentTuningConditionMask; + var randomDungeons = Global.LFGMgr.GetRandomAndSeasonalDungeons(level, (uint)GetExpansion(), contentTuningReplacementConditionMask); LfgPlayerInfo lfgPlayerInfo = new LfgPlayerInfo(); diff --git a/Source/Game/Handlers/QuestHandler.cs b/Source/Game/Handlers/QuestHandler.cs index d970f1b80..ba68d3cc5 100644 --- a/Source/Game/Handlers/QuestHandler.cs +++ b/Source/Game/Handlers/QuestHandler.cs @@ -250,7 +250,7 @@ namespace Game ItemTemplate rewardProto = Global.ObjectMgr.GetItemTemplate(packet.Choice.Item.ItemID); if (rewardProto == null) { - Log.outError(LogFilter.Network, "Error in CMSG_QUESTGIVER_CHOOSE_REWARD: player {0} ({1}) tried to get invalid reward item (Item Entry: {2}) for quest {3} (possible packet-hacking detected)", GetPlayer().GetName(), GetPlayer().GetGUID().ToString(), packet.ItemChoiceID, packet.QuestID); + Log.outError(LogFilter.Network, "Error in CMSG_QUESTGIVER_CHOOSE_REWARD: player {0} ({1}) tried to get invalid reward item (Item Entry: {2}) for quest {3} (possible packet-hacking detected)", GetPlayer().GetName(), GetPlayer().GetGUID().ToString(), packet.Choice.Item.ItemID, packet.QuestID); return; } @@ -301,7 +301,7 @@ namespace Game if (!itemValid) { - Log.outError(LogFilter.Network, "Error in CMSG_QUESTGIVER_CHOOSE_REWARD: player {0} ({1}) tried to get reward item (Item Entry: {2}) wich is not a reward for quest {3} (possible packet-hacking detected)", GetPlayer().GetName(), GetPlayer().GetGUID().ToString(), packet.ItemChoiceID, packet.QuestID); + Log.outError(LogFilter.Network, "Error in CMSG_QUESTGIVER_CHOOSE_REWARD: player {0} ({1}) tried to get reward item (Item Entry: {2}) wich is not a reward for quest {3} (possible packet-hacking detected)", GetPlayer().GetName(), GetPlayer().GetGUID().ToString(), packet.Choice.Item.ItemID, packet.QuestID); return; } break; diff --git a/Source/Game/Handlers/SpellHandler.cs b/Source/Game/Handlers/SpellHandler.cs index 4edd9e706..036e5eb73 100644 --- a/Source/Game/Handlers/SpellHandler.cs +++ b/Source/Game/Handlers/SpellHandler.cs @@ -529,10 +529,10 @@ namespace Game mirrorImageComponentedData.Gender = (byte)creator.GetGender(); mirrorImageComponentedData.ClassID = (byte)creator.GetClass(); - Guild guild = player.GetGuild(); - foreach (var customization in player.m_playerData.Customizations) mirrorImageComponentedData.Customizations.Add(new ChrCustomizationChoice(customization.ChrCustomizationOptionID, customization.ChrCustomizationChoiceID)); + + Guild guild = player.GetGuild(); mirrorImageComponentedData.GuildGUID = (guild ? guild.GetGUID() : ObjectGuid.Empty); byte[] itemSlots = diff --git a/Source/Game/Handlers/TransmogrificationHandler.cs b/Source/Game/Handlers/TransmogrificationHandler.cs index 3ee43ca06..ee2243347 100644 --- a/Source/Game/Handlers/TransmogrificationHandler.cs +++ b/Source/Game/Handlers/TransmogrificationHandler.cs @@ -149,12 +149,12 @@ namespace Game return; } - PlayerConditionRecord condition = CliDB.PlayerConditionStorage.LookupByKey(illusion.TransmogPlayerConditionID); + PlayerConditionRecord condition = CliDB.PlayerConditionStorage.LookupByKey(illusion.TransmogUseConditionID); if (condition != null) { if (!ConditionManager.IsPlayerMeetingCondition(player, condition)) { - Log.outDebug(LogFilter.Network, "WORLD: HandleTransmogrifyItems - {0}, Name: {1} tried to transmogrify illusion using not collected enchant ({2}).", player.GetGUID().ToString(), player.GetName(), transmogItem.SpellItemEnchantmentID); + Log.outDebug(LogFilter.Network, "WORLD: HandleTransmogrifyItems - {0}, Name: {1} tried to transmogrify illusion using not allowed enchant ({2}).", player.GetGUID().ToString(), player.GetName(), transmogItem.SpellItemEnchantmentID); return; } } diff --git a/Source/Game/Maps/Map.cs b/Source/Game/Maps/Map.cs index c1215c7db..12c9fd6c4 100644 --- a/Source/Game/Maps/Map.cs +++ b/Source/Game/Maps/Map.cs @@ -3290,9 +3290,20 @@ namespace Game.Maps public void LoadCorpseData() { - MultiMap phases = new MultiMap(); + PreparedStatement stmt = DB.Characters.GetPreparedStatement(CharStatements.SEL_CORPSES); + stmt.AddValue(0, GetId()); + stmt.AddValue(1, GetInstanceId()); - PreparedStatement stmt = DB.Characters.GetPreparedStatement(CharStatements.SEL_CORPSE_PHASES); + // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 + // SELECT posX, posY, posZ, orientation, mapId, displayId, itemCache, bytes1, bytes2, flags, dynFlags, time, corpseType, instanceId, guid FROM corpse WHERE mapId = ? AND instanceId = ? + SQLResult result = DB.Characters.Query(stmt); + if (result.IsEmpty()) + return; + + MultiMap phases = new MultiMap(); + MultiMap customizations = new MultiMap(); + + stmt = DB.Characters.GetPreparedStatement(CharStatements.SEL_CORPSE_PHASES); stmt.AddValue(0, GetId()); stmt.AddValue(1, GetInstanceId()); @@ -3311,15 +3322,22 @@ namespace Game.Maps } while (phaseResult.NextRow()); } - stmt = DB.Characters.GetPreparedStatement(CharStatements.SEL_CORPSES); - stmt.AddValue(0, GetId()); - stmt.AddValue(1, GetInstanceId()); + // 0 1 2 + // SELECT cc.ownerGuid, cc.chrCustomizationOptionID, cc.chrCustomizationChoiceID FROM corpse_customizations cc LEFT JOIN corpse c ON cc.ownerGuid = c.guid WHERE c.mapId = ? AND c.instanceId = ? + SQLResult customizationResult = DB.Characters.Query(stmt); + if (!customizationResult.IsEmpty()) + { + do + { + ulong guid = customizationResult.Read(0); - // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 - // SELECT posX, posY, posZ, orientation, mapId, displayId, itemCache, bytes1, bytes2, flags, dynFlags, time, corpseType, instanceId, guid FROM corpse WHERE mapId = ? AND instanceId = ? - SQLResult result = DB.Characters.Query(stmt); - if (result.IsEmpty()) - return; + ChrCustomizationChoice choice = new ChrCustomizationChoice(); + choice.ChrCustomizationOptionID = customizationResult.Read(1); + choice.ChrCustomizationChoiceID = customizationResult.Read(2); + customizations.Add(guid, choice); + + } while (customizationResult.NextRow()); + } do { @@ -3338,6 +3356,8 @@ namespace Game.Maps foreach (var phaseId in phases[guid]) PhasingHandler.AddPhase(corpse, phaseId, false); + corpse.SetCustomizations(customizations[guid]); + AddCorpse(corpse); } while (result.NextRow()); } @@ -3414,19 +3434,12 @@ namespace Game.Maps bones.SetDisplayId(corpse.m_corpseData.DisplayID); bones.SetRace((Race)(byte)corpse.m_corpseData.RaceID); bones.SetSex((Gender)(byte)corpse.m_corpseData.Sex); - bones.SetSkin(corpse.m_corpseData.SkinID); - bones.SetFace(corpse.m_corpseData.FaceID); - bones.SetHairStyle(corpse.m_corpseData.HairStyleID); - bones.SetHairColor(corpse.m_corpseData.HairColorID); - bones.SetFacialHairStyle(corpse.m_corpseData.FacialHairStyleID); + bones.SetCustomizations(corpse.m_corpseData.Customizations); bones.SetFlags((CorpseFlags)(corpse.m_corpseData.Flags | (uint)CorpseFlags.Bones)); bones.SetFactionTemplate(corpse.m_corpseData.FactionTemplate); for (int i = 0; i < EquipmentSlot.End; ++i) bones.SetItem((uint)i, corpse.m_corpseData.Items[i]); - for (int i = 0; i < PlayerConst.CustomDisplaySize; ++i) - bones.SetCustomDisplayOption((uint)i, corpse.m_corpseData.CustomDisplayOption[i]); - bones.SetCellCoord(corpse.GetCellCoord()); bones.Relocate(corpse.GetPositionX(), corpse.GetPositionY(), corpse.GetPositionZ(), corpse.GetOrientation()); diff --git a/Source/Game/Movement/MoveSplineInit.cs b/Source/Game/Movement/MoveSplineInit.cs index 73717190e..9b40ed23e 100644 --- a/Source/Game/Movement/MoveSplineInit.cs +++ b/Source/Game/Movement/MoveSplineInit.cs @@ -285,8 +285,8 @@ namespace Game.Movement public void SetAnimation(AnimType anim) { args.time_perc = 0.0f; - args.animTier.emplace(); - args.animTier.AnimTier = anim; + args.animTier.HasValue = true; + args.animTier.Value.AnimTier = (byte)anim; args.flags.EnableAnimation(); } diff --git a/Source/Game/Networking/Packets/CharacterPackets.cs b/Source/Game/Networking/Packets/CharacterPackets.cs index fd59fafb8..fa3f7f0d6 100644 --- a/Source/Game/Networking/Packets/CharacterPackets.cs +++ b/Source/Game/Networking/Packets/CharacterPackets.cs @@ -80,41 +80,22 @@ namespace Game.Networking.Packets { public CharacterInfo(SQLFields fields) { - // 0 1 2 3 4 5 6 7 - // "SELECT characters.guid, characters.name, characters.race, characters.class, characters.gender, characters.skin, characters.face, characters.hairStyle, " - // 8 9 10 11 12 13 - // "characters.hairColor, characters.facialStyle, characters.customDisplay1, characters.customDisplay2, characters.customDisplay3, characters.level, " - // 14 15 16 17 18 - // "characters.zone, characters.map, characters.position_x, characters.position_y, characters.position_z, " - // 19 20 21 22 23 24 25 - // "guild_member.guildid, characters.playerFlags, characters.at_login, character_pet.entry, character_pet.modelid, character_pet.level, characters.equipmentCache, " - // 26 27 28 29 30 31 - // "character_banned.guid, characters.slot, characters.logout_time, characters.activeTalentGroup, characters.lastLoginBuild, character_declinedname.genitive" - Guid = ObjectGuid.Create(HighGuid.Player, fields.Read(0)); Name = fields.Read(1); RaceId = fields.Read(2); ClassId = (Class)fields.Read(3); SexId = fields.Read(4); - SkinId = fields.Read(5); - FaceId = fields.Read(6); - HairStyle = fields.Read(7); - HairColor = fields.Read(8); - FacialHair = fields.Read(9); - CustomDisplay[0] = fields.Read(10); - CustomDisplay[1] = fields.Read(11); - CustomDisplay[2] = fields.Read(12); - ExperienceLevel = fields.Read(13); - ZoneId = fields.Read(14); - MapId = fields.Read(15); - PreloadPos = new Vector3(fields.Read(16), fields.Read(17), fields.Read(18)); + ExperienceLevel = fields.Read(5); + ZoneId = fields.Read(6); + MapId = fields.Read(7); + PreloadPos = new Vector3(fields.Read(8), fields.Read(9), fields.Read(10)); - ulong guildId = fields.Read(19); + ulong guildId = fields.Read(11); if (guildId != 0) GuildGuid = ObjectGuid.Create(HighGuid.Guild, guildId); - PlayerFlags playerFlags = (PlayerFlags)fields.Read(20); - AtLoginFlags atLoginFlags = (AtLoginFlags)fields.Read(21); + PlayerFlags playerFlags = (PlayerFlags)fields.Read(12); + AtLoginFlags atLoginFlags = (AtLoginFlags)fields.Read(13); if (atLoginFlags.HasAnyFlag(AtLoginFlags.Resurrect)) playerFlags &= ~PlayerFlags.Ghost; @@ -125,10 +106,10 @@ namespace Game.Networking.Packets if (atLoginFlags.HasAnyFlag(AtLoginFlags.Rename)) Flags |= CharacterFlags.Rename; - if (fields.Read(26) != 0) + if (fields.Read(18) != 0) Flags |= CharacterFlags.LockedByBilling; - if (WorldConfig.GetBoolValue(WorldCfg.DeclinedNamesUsed) && !string.IsNullOrEmpty(fields.Read(31))) + if (WorldConfig.GetBoolValue(WorldCfg.DeclinedNamesUsed) && !string.IsNullOrEmpty(fields.Read(23))) Flags |= CharacterFlags.Declined; if (atLoginFlags.HasAnyFlag(AtLoginFlags.Customize)) @@ -145,11 +126,11 @@ namespace Game.Networking.Packets // show pet at selection character in character list only for non-ghost character if (!playerFlags.HasAnyFlag(PlayerFlags.Ghost) && (ClassId == Class.Warlock || ClassId == Class.Hunter || ClassId == Class.Deathknight)) { - CreatureTemplate creatureInfo = Global.ObjectMgr.GetCreatureTemplate(fields.Read(22)); + CreatureTemplate creatureInfo = Global.ObjectMgr.GetCreatureTemplate(fields.Read(14)); if (creatureInfo != null) { - PetCreatureDisplayId = fields.Read(23); - PetExperienceLevel = fields.Read(24); + PetCreatureDisplayId = fields.Read(15); + PetExperienceLevel = fields.Read(16); PetCreatureFamilyId = (uint)creatureInfo.Family; } } @@ -158,15 +139,15 @@ namespace Game.Networking.Packets ProfessionIds[0] = 0; ProfessionIds[1] = 0; - StringArguments equipment = new StringArguments(fields.Read(25)); - ListPosition = fields.Read(27); - LastPlayedTime = fields.Read(28); + StringArguments equipment = new StringArguments(fields.Read(17)); + ListPosition = fields.Read(19); + LastPlayedTime = fields.Read(20); - var spec = Global.DB2Mgr.GetChrSpecializationByIndex(ClassId, fields.Read(29)); + var spec = Global.DB2Mgr.GetChrSpecializationByIndex(ClassId, fields.Read(21)); if (spec != null) SpecID = (ushort)spec.Id; - LastLoginVersion = fields.Read(30); + LastLoginVersion = fields.Read(22); for (byte slot = 0; slot < InventorySlots.BagEnd; ++slot) { @@ -214,7 +195,10 @@ namespace Game.Networking.Packets data.WriteUInt32(OverrideSelectScreenFileDataID); foreach (ChrCustomizationChoice customization in Customizations) - customization.Write(data); + { + data.WriteUInt32(customization.ChrCustomizationOptionID); + data.WriteUInt32(customization.ChrCustomizationChoiceID); + } data.WriteBits(Name.GetByteCount(), 6); data.WriteBit(FirstLogin); @@ -340,7 +324,7 @@ namespace Game.Networking.Packets public uint SequenceIndex; public ResponseCodes Result; - public CheckCharacterNameAvailabilityResult(uint sequenceIndex, ResponseCodes result) : base(ServerOpcodes.SMSG_CHECK_CHARACTER_NAME_AVAILABILITY_RESULT) + public CheckCharacterNameAvailabilityResult(uint sequenceIndex, ResponseCodes result) : base(ServerOpcodes.CheckCharacterNameAvailabilityResult) { SequenceIndex = sequenceIndex; Result = result; @@ -375,7 +359,15 @@ namespace Game.Networking.Packets CreateInfo.TemplateSet.Set(_worldPacket.ReadUInt32()); for (var i = 0; i < customizationCount; ++i) - CreateInfo.Customizations[i].Read(_worldPacket); + { + CreateInfo.Customizations[i] = new ChrCustomizationChoice() + { + ChrCustomizationOptionID = _worldPacket.ReadUInt32(), + ChrCustomizationChoiceID = _worldPacket.ReadUInt32() + }; + } + + CreateInfo.Customizations.Sort(); } public CharacterCreateInfo CreateInfo; @@ -470,7 +462,15 @@ namespace Game.Networking.Packets var customizationCount = _worldPacket.ReadUInt32(); for (var i = 0; i < customizationCount; ++i) - CustomizeInfo.Customizations[i].Read(_worldPacket); + { + CustomizeInfo.Customizations[i] = new ChrCustomizationChoice() + { + ChrCustomizationOptionID = _worldPacket.ReadUInt32(), + ChrCustomizationChoiceID = _worldPacket.ReadUInt32() + }; + } + + CustomizeInfo.Customizations.Sort(); CustomizeInfo.CharName = _worldPacket.ReadString(_worldPacket.ReadBits(6)); } @@ -499,7 +499,15 @@ namespace Game.Networking.Packets RaceOrFactionChangeInfo.Name = _worldPacket.ReadString(nameLength); for (var i = 0; i < customizationCount; ++i) - RaceOrFactionChangeInfo.Customizations[i].Read(_worldPacket); + { + RaceOrFactionChangeInfo.Customizations[i] = new ChrCustomizationChoice() + { + ChrCustomizationOptionID = _worldPacket.ReadUInt32(), + ChrCustomizationChoiceID = _worldPacket.ReadUInt32() + }; + } + + RaceOrFactionChangeInfo.Customizations.Sort(); } public CharRaceOrFactionChangeInfo RaceOrFactionChangeInfo; @@ -527,7 +535,10 @@ namespace Game.Networking.Packets _worldPacket.WriteString(Display.Value.Name); foreach (ChrCustomizationChoice customization in Display.Value.Customizations) - customization.Write(_worldPacket); + { + _worldPacket.WriteUInt32(customization.ChrCustomizationOptionID); + _worldPacket.WriteUInt32(customization.ChrCustomizationChoiceID); + } } } @@ -839,7 +850,15 @@ namespace Game.Networking.Packets NewSex = _worldPacket.ReadUInt8(); for (var i = 0; i < customizationCount; ++i) - Customizations[i].Read(_worldPacket); + { + Customizations[i] = new ChrCustomizationChoice() + { + ChrCustomizationOptionID = _worldPacket.ReadUInt32(), + ChrCustomizationChoiceID = _worldPacket.ReadUInt32() + }; + } + + Customizations.Sort(); } public byte NewSex; @@ -981,7 +1000,10 @@ namespace Game.Networking.Packets _worldPacket.WriteUInt8(SexID); _worldPacket.WriteInt32(Customizations.Count); foreach (ChrCustomizationChoice customization in Customizations) - customization.Write(_worldPacket); + { + _worldPacket.WriteUInt32(customization.ChrCustomizationOptionID); + _worldPacket.WriteUInt32(customization.ChrCustomizationChoiceID); + } _worldPacket.WriteBits(CharName.GetByteCount(), 6); _worldPacket.FlushBits(); @@ -1047,30 +1069,6 @@ namespace Game.Networking.Packets } //Structs - public struct ChrCustomizationChoice - { - public uint ChrCustomizationOptionID; - public uint ChrCustomizationChoiceID; - - public ChrCustomizationChoice(uint chrCustomizationOptionID, uint chrCustomizationChoiceID) - { - ChrCustomizationOptionID = chrCustomizationOptionID; - ChrCustomizationChoiceID = chrCustomizationChoiceID; - } - - public void Write(WorldPacket data) - { - data.WriteUInt32(ChrCustomizationOptionID); - data.WriteUInt32(ChrCustomizationChoiceID); - } - - public void Read(WorldPacket data) - { - ChrCustomizationOptionID = data.ReadUInt32(); - ChrCustomizationChoiceID = data.ReadUInt32(); - } - } - public class CharacterCreateInfo { // User specified variables diff --git a/Source/Game/Networking/Packets/GarrisonPackets.cs b/Source/Game/Networking/Packets/GarrisonPackets.cs index 9f7cb1f4b..413c899ae 100644 --- a/Source/Game/Networking/Packets/GarrisonPackets.cs +++ b/Source/Game/Networking/Packets/GarrisonPackets.cs @@ -233,7 +233,7 @@ namespace Game.Networking.Packets class GarrisonMapDataResponse : ServerPacket { - public GarrisonMapDataResponse() : base(ServerOpcodes.GarrisonBuildingLandmarks, ConnectionType.Instance) { } + public GarrisonMapDataResponse() : base(ServerOpcodes.GarrisonMapDataResponse, ConnectionType.Instance) { } public override void Write() { diff --git a/Source/Game/Networking/Packets/GuildPackets.cs b/Source/Game/Networking/Packets/GuildPackets.cs index 5cd7c68e2..36c99ad79 100644 --- a/Source/Game/Networking/Packets/GuildPackets.cs +++ b/Source/Game/Networking/Packets/GuildPackets.cs @@ -280,7 +280,7 @@ namespace Game.Networking.Packets public class GuildEventStatusChange : ServerPacket { - public GuildEventStatusChange() : base(ServerOpcodes.GuildEventAwayChange) { } + public GuildEventStatusChange() : base(ServerOpcodes.GuildEventStatusChange) { } public override void Write() { diff --git a/Source/Game/Networking/Packets/InspectPackets.cs b/Source/Game/Networking/Packets/InspectPackets.cs index 27e7c49e2..3cd53b414 100644 --- a/Source/Game/Networking/Packets/InspectPackets.cs +++ b/Source/Game/Networking/Packets/InspectPackets.cs @@ -233,12 +233,12 @@ namespace Game.Networking.Packets GUID = player.GetGUID(); SpecializationID = player.GetPrimarySpecialization(); Name = player.GetName(); - GenderID = player.m_playerData.NativeSex; + GenderID = (byte)player.GetNativeSex(); Race = (byte)player.GetRace(); ClassID = (byte)player.GetClass(); foreach (var customization in player.m_playerData.Customizations) - Customizations.Add(new ChrCustomizationChoice(customization.ChrCustomizationOptionID, customization.ChrCustomizationChoiceID)); + Customizations.Add(customization); for (byte i = 0; i < EquipmentSlot.End; ++i) { @@ -261,7 +261,10 @@ namespace Game.Networking.Packets data.WriteString(Name); foreach (var customization in Customizations) - customization.Write(data); + { + data.WriteUInt32(customization.ChrCustomizationOptionID); + data.WriteUInt32(customization.ChrCustomizationChoiceID); + } foreach (InspectItemData item in Items) item.Write(data); diff --git a/Source/Game/Networking/Packets/ItemPackets.cs b/Source/Game/Networking/Packets/ItemPackets.cs index 9d31cf3ee..f5b4908ad 100644 --- a/Source/Game/Networking/Packets/ItemPackets.cs +++ b/Source/Game/Networking/Packets/ItemPackets.cs @@ -790,7 +790,7 @@ namespace Game.Networking.Packets public class ItemModList { - public Array Values = new Array(ItemModifier.Max); + public Array Values = new Array((int)ItemModifier.Max); public void Read(WorldPacket data) { @@ -859,8 +859,8 @@ namespace Game.Networking.Packets ItemBonus.Value.Context = item.GetContext(); } - foreach (var mod in item.m_itemData.Modifiers.Values) - Modifications.Values.Add(mod.Value, (ItemModifier)mod.Type); + foreach (var mod in item.m_itemData.Modifiers.GetValue().Values) + Modifications.Values.Add(new ItemMod(mod.Value, (ItemModifier)mod.Type)); } public ItemInstance(Loots.LootItem lootItem) diff --git a/Source/Game/Networking/Packets/NPCPackets.cs b/Source/Game/Networking/Packets/NPCPackets.cs index ddd2b905e..628b18b06 100644 --- a/Source/Game/Networking/Packets/NPCPackets.cs +++ b/Source/Game/Networking/Packets/NPCPackets.cs @@ -328,7 +328,7 @@ namespace Game.Networking.Packets public class ClientGossipText { public uint QuestID; - public int ContentTuningID; + public uint ContentTuningID; public int QuestType; public bool Repeatable; public string QuestTitle; @@ -338,7 +338,7 @@ namespace Game.Networking.Packets public void Write(WorldPacket data) { data.WriteUInt32(QuestID); - data.WriteInt32(ContentTuningID); + data.WriteUInt32(ContentTuningID); data.WriteInt32(QuestType); data.WriteUInt32(QuestFlags); data.WriteUInt32(QuestFlagsEx); diff --git a/Source/Game/Networking/Packets/QueryPackets.cs b/Source/Game/Networking/Packets/QueryPackets.cs index 927be41d0..d4947540d 100644 --- a/Source/Game/Networking/Packets/QueryPackets.cs +++ b/Source/Game/Networking/Packets/QueryPackets.cs @@ -616,7 +616,7 @@ namespace Game.Networking.Packets BnetAccountID = player.GetSession().GetBattlenetAccountGUID(); Name = player.GetName(); RaceID = player.GetRace(); - Sex = (Gender)(byte)player.m_playerData.NativeSex; + Sex = player.GetNativeSex(); ClassID = player.GetClass(); Level = (byte)player.GetLevel(); diff --git a/Source/Game/Networking/Packets/QuestPackets.cs b/Source/Game/Networking/Packets/QuestPackets.cs index 66fff92e1..5796b866f 100644 --- a/Source/Game/Networking/Packets/QuestPackets.cs +++ b/Source/Game/Networking/Packets/QuestPackets.cs @@ -116,7 +116,7 @@ namespace Game.Networking.Packets _worldPacket.WriteUInt32(Info.QuestID); _worldPacket.WriteInt32(Info.QuestType); _worldPacket.WriteUInt32(Info.QuestPackageID); - _worldPacket.WriteInt32(Info.ContentTuningID); + _worldPacket.WriteUInt32(Info.ContentTuningID); _worldPacket.WriteInt32(Info.QuestSortID); _worldPacket.WriteUInt32(Info.QuestInfoID); _worldPacket.WriteUInt32(Info.SuggestedGroupNum); @@ -350,7 +350,7 @@ namespace Game.Networking.Packets { QuestGiverGUID = _worldPacket.ReadPackedGuid(); QuestID = _worldPacket.ReadUInt32(); - ItemChoiceID = _worldPacket.ReadUInt32(); + Choice.Read(_worldPacket); } public ObjectGuid QuestGiverGUID; @@ -887,13 +887,19 @@ namespace Game.Networking.Packets public struct QuestCompleteDisplaySpell { - public int SpellID; - public int PlayerConditionID; + public uint SpellID; + public uint PlayerConditionID; + + public QuestCompleteDisplaySpell(uint spellID, uint playerConditionID) + { + SpellID = spellID; + PlayerConditionID = playerConditionID; + } public void Write(WorldPacket data) { - data.WriteInt32(SpellID); - data.WriteInt32(PlayerConditionID); + data.WriteUInt32(SpellID); + data.WriteUInt32(PlayerConditionID); } } @@ -914,7 +920,7 @@ namespace Game.Networking.Packets public uint QuestID; public int QuestType; // Accepted values: 0, 1 or 2. 0 == IsAutoComplete() (skip objectives/details) - public int ContentTuningID; + public uint ContentTuningID; public uint QuestPackageID; public int QuestSortID; // zone or sort to display in quest log public uint QuestInfoID; diff --git a/Source/Game/Networking/Packets/SpellPackets.cs b/Source/Game/Networking/Packets/SpellPackets.cs index e9574320c..b0ee462e8 100644 --- a/Source/Game/Networking/Packets/SpellPackets.cs +++ b/Source/Game/Networking/Packets/SpellPackets.cs @@ -933,7 +933,10 @@ namespace Game.Networking.Packets _worldPacket.WriteInt32(ItemDisplayID.Count); foreach (ChrCustomizationChoice customization in Customizations) - customization.Write(_worldPacket); + { + _worldPacket.WriteUInt32(customization.ChrCustomizationOptionID); + _worldPacket.WriteUInt32(customization.ChrCustomizationChoiceID); + } foreach (var itemDisplayId in ItemDisplayID) _worldPacket.WriteInt32(itemDisplayId); @@ -1352,9 +1355,9 @@ namespace Game.Networking.Packets public struct SpellCastVisual { public uint SpellXSpellVisualID; - public int ScriptVisualID; + public uint ScriptVisualID; - public SpellCastVisual(uint spellXSpellVisualID, int scriptVisualID) + public SpellCastVisual(uint spellXSpellVisualID, uint scriptVisualID) { SpellXSpellVisualID = spellXSpellVisualID; ScriptVisualID = scriptVisualID; @@ -1363,13 +1366,21 @@ namespace Game.Networking.Packets public void Read(WorldPacket data) { SpellXSpellVisualID = data.ReadUInt32(); - ScriptVisualID = data.ReadInt32(); + ScriptVisualID = data.ReadUInt32(); } public void Write(WorldPacket data) { data.WriteUInt32(SpellXSpellVisualID); - data.WriteInt32(ScriptVisualID); + data.WriteUInt32(ScriptVisualID); + } + + public static implicit operator SpellCastVisualField(SpellCastVisual spellCastVisual) + { + SpellCastVisualField visual; + visual.SpellXSpellVisualID = spellCastVisual.SpellXSpellVisualID; + visual.ScriptVisualID = spellCastVisual.ScriptVisualID; + return visual; } } diff --git a/Source/Game/Quest/Quest.cs b/Source/Game/Quest/Quest.cs index 56e80d419..fabd95391 100644 --- a/Source/Game/Quest/Quest.cs +++ b/Source/Game/Quest/Quest.cs @@ -284,17 +284,16 @@ namespace Game if (questXp == null || RewardXPDifficulty >= 10) return 0; - float multiplier = 1.0f; - if (questLevel != player.GetLevel()) - multiplier = CliDB.XpGameTable.GetRow(Math.Min(player.GetLevel(), questLevel)).Divisor / CliDB.XpGameTable.GetRow(player.GetLevel()).Divisor; - - int diffFactor = (int)(2 * (questLevel + (Level == -1 ? 0 : 5) - player.GetLevel()) + 10); + int diffFactor = (int)(2 * (questLevel - player.GetLevel()) + 12); if (diffFactor < 1) diffFactor = 1; else if (diffFactor > 10) diffFactor = 10; - uint xp = (uint)(diffFactor * questXp.Difficulty[RewardXPDifficulty] * RewardXPMultiplier / 10 * multiplier); + uint xp = (uint)(diffFactor * questXp.Difficulty[RewardXPDifficulty] * RewardXPMultiplier / 10); + if (player.GetLevel() >= Global.ObjectMgr.GetMaxLevelForExpansion(PlayerConst.CurrentExpansion - 1) && player.GetSession().GetExpansion() == PlayerConst.CurrentExpansion && Expansion < (int)PlayerConst.CurrentExpansion) + xp = (uint)(xp / 9.0f); + if (xp <= 100) xp = 5 * ((xp + 2) / 5); else if (xp <= 500) @@ -329,7 +328,7 @@ namespace Game rewards.Title = RewardTitleId; rewards.FactionFlags = RewardReputationMask; - var displaySpellItr = rewards.SpellCompletionDisplayID.begin(); + var displaySpellIndex = 0; foreach (QuestRewardDisplaySpell displaySpell in RewardDisplaySpell) { PlayerConditionRecord playerCondition = CliDB.PlayerConditionStorage.LookupByKey(displaySpell.PlayerConditionId); @@ -337,8 +336,8 @@ namespace Game if (!ConditionManager.IsPlayerMeetingCondition(player, playerCondition)) continue; - displaySpellItr = displaySpell.SpellId; - if (++displaySpellItr == null) + rewards.SpellCompletionDisplayID[displaySpellIndex] = (int)displaySpell.SpellId; + if (++displaySpellIndex >= rewards.SpellCompletionDisplayID.Length) break; } @@ -456,11 +455,8 @@ namespace Game QueryData.Info.QuestID = Id; QueryData.Info.QuestType = (int)Type; - QueryData.Info.QuestLevel = Level; - QueryData.Info.QuestScalingFactionGroup = ScalingFactionGroup; - QueryData.Info.QuestMaxScalingLevel = MaxScalingLevel; + QueryData.Info.ContentTuningID = ContentTuningId; QueryData.Info.QuestPackageID = PackageID; - QueryData.Info.QuestMinLevel = MinLevel; QueryData.Info.QuestSortID = QuestSortID; QueryData.Info.QuestInfoID = QuestInfoID; QueryData.Info.SuggestedGroupNum = SuggestedPlayers; @@ -474,8 +470,8 @@ namespace Game QueryData.Info.RewardMoneyDifficulty = RewardMoneyDifficulty; QueryData.Info.RewardMoneyMultiplier = RewardMoneyMultiplier; QueryData.Info.RewardBonusMoney = RewardBonusMoney; - for (byte i = 0; i < SharedConst.QuestRewardDisplaySpellCount; ++i) - QueryData.Info.RewardDisplaySpell[i] = RewardDisplaySpell[i]; + foreach (QuestRewardDisplaySpell displaySpell in RewardDisplaySpell) + QueryData.Info.RewardDisplaySpell.Add(new QuestCompleteDisplaySpell(displaySpell.SpellId, displaySpell.PlayerConditionId)); QueryData.Info.RewardSpell = RewardSpell; @@ -581,15 +577,6 @@ namespace Game public void SetEventIdForQuest(ushort eventId) { _eventIdForQuest = eventId; } public ushort GetEventIdForQuest() { return _eventIdForQuest; } - [Obsolete] - public int MinLevel; - [Obsolete] - public int Level; - [Obsolete] - public int ScalingFactionGroup; - [Obsolete] - public int MaxScalingLevel; - #region Fields public uint Id; public QuestType Type; @@ -699,7 +686,7 @@ namespace Game public uint ScriptId; public List DependentPreviousQuests = new List(); - public QueryQuestInfoResponse[] QueryData = new QueryQuestInfoResponse[(int)Locale.Total]; + public QueryQuestInfoResponse QueryData; uint _rewChoiceItemsCount; uint _rewItemsCount; diff --git a/Source/Game/Server/WorldConfig.cs b/Source/Game/Server/WorldConfig.cs index 67e088343..117570025 100644 --- a/Source/Game/Server/WorldConfig.cs +++ b/Source/Game/Server/WorldConfig.cs @@ -355,11 +355,11 @@ namespace Game Values[WorldCfg.CharacterCreatingDisabledRacemask] = GetDefaultValue("CharacterCreating.Disabled.RaceMask", 0); Values[WorldCfg.CharacterCreatingDisabledClassmask] = GetDefaultValue("CharacterCreating.Disabled.ClassMask", 0); - Values[WorldCfg.CharactersPerRealm] = GetDefaultValue("CharactersPerRealm", 16); - if ((int)Values[WorldCfg.CharactersPerRealm] < 1 || (int)Values[WorldCfg.CharactersPerRealm] > 16) + Values[WorldCfg.CharactersPerRealm] = GetDefaultValue("CharactersPerRealm", 50); + if ((int)Values[WorldCfg.CharactersPerRealm] < 1 || (int)Values[WorldCfg.CharactersPerRealm] > 200) { - Log.outError(LogFilter.ServerLoading, "CharactersPerRealm ({0}) must be in range 1..16. Set to 16.", Values[WorldCfg.CharactersPerRealm]); - Values[WorldCfg.CharactersPerRealm] = 16; + Log.outError(LogFilter.ServerLoading, "CharactersPerRealm ({0}) must be in range 1..200. Set to 200.", Values[WorldCfg.CharactersPerRealm]); + Values[WorldCfg.CharactersPerRealm] = 200; } // must be after CharactersPerRealm @@ -370,14 +370,7 @@ namespace Game Values[WorldCfg.CharactersPerAccount] = Values[WorldCfg.CharactersPerRealm]; } - Values[WorldCfg.DemonHuntersPerRealm] = GetDefaultValue("DemonHuntersPerRealm", 1); - if ((int)Values[WorldCfg.DemonHuntersPerRealm] < 0 || (int)Values[WorldCfg.DemonHuntersPerRealm] > 12) - { - Log.outError(LogFilter.ServerLoading, "DemonHuntersPerRealm ({0}) must be in range 0..12. Set to 1.", Values[WorldCfg.DemonHuntersPerRealm]); - Values[WorldCfg.DemonHuntersPerRealm] = 1; - } - - Values[WorldCfg.CharacterCreatingMinLevelForDemonHunter] = GetDefaultValue("CharacterCreating.MinLevelForDemonHunter", 70); + Values[WorldCfg.CharacterCreatingMinLevelForDemonHunter] = GetDefaultValue("CharacterCreating.MinLevelForDemonHunter", 0); Values[WorldCfg.SkipCinematics] = GetDefaultValue("SkipCinematics", 0); if ((int)Values[WorldCfg.SkipCinematics] < 0 || (int)Values[WorldCfg.SkipCinematics] > 2) diff --git a/Source/Game/Server/WorldSession.cs b/Source/Game/Server/WorldSession.cs index 25e8d06fe..f3c563425 100644 --- a/Source/Game/Server/WorldSession.cs +++ b/Source/Game/Server/WorldSession.cs @@ -663,6 +663,12 @@ namespace Game HandlePlayerLogin((LoginQueryHolder)_charLoginCallback.Result); _charLoginCallback = null; } + + if (_charEnumCallback != null && _charEnumCallback.IsCompleted) + { + HandleCharEnum((EnumCharactersQueryHolder)_charEnumCallback.Result); + _charEnumCallback = null; + } } TransactionCallback AddTransactionCallback(TransactionCallback callback) @@ -909,6 +915,7 @@ namespace Game Task> _realmAccountLoginCallback; Task> _accountLoginCallback; Task> _charLoginCallback; + Task> _charEnumCallback; AsyncCallbackProcessor _queryProcessor = new AsyncCallbackProcessor(); AsyncCallbackProcessor _transactionCallbacks = new AsyncCallbackProcessor(); diff --git a/Source/Game/Spells/Spell.cs b/Source/Game/Spells/Spell.cs index 437111969..5fe483fe3 100644 --- a/Source/Game/Spells/Spell.cs +++ b/Source/Game/Spells/Spell.cs @@ -2501,13 +2501,13 @@ namespace Game.Spells if (!m_caster.ToPlayer().GetCommandStatus(PlayerCommandStates.Casttime)) { // calculate cast time (calculated after first CheckCast check to prevent charge counting for first CheckCast fail) - m_casttime = m_spellInfo.CalcCastTime(m_caster.GetLevel(), this); + m_casttime = m_spellInfo.CalcCastTime(this); } else m_casttime = 0; } else - m_casttime = m_spellInfo.CalcCastTime(m_caster.GetLevel(), this); + m_casttime = m_spellInfo.CalcCastTime(this); // don't allow channeled spells / spells with cast time to be casted while moving // exception are only channeled spells that have no casttime and SPELL_ATTR5_CAN_CHANNEL_WHEN_MOVING @@ -3547,7 +3547,7 @@ namespace Game.Spells owner.ToPlayer().SendPacket(petCastFailed); } - public static void SendCastResult(Player caster, SpellInfo spellInfo, SpellCastVisual spellVisual, ObjectGuid cast_count, SpellCastResult result, SpellCustomErrors customError = SpellCustomErrors.None, uint? param1 = null, uint? param2 = null) + public static void SendCastResult(Player caster, SpellInfo spellInfo, Networking.Packets.SpellCastVisual spellVisual, ObjectGuid cast_count, SpellCastResult result, SpellCustomErrors customError = SpellCustomErrors.None, uint? param1 = null, uint? param2 = null) { if (result == SpellCastResult.SpellCastOk) return; @@ -4038,7 +4038,7 @@ namespace Game.Spells { m_caster.ClearChannelObjects(); m_caster.SetChannelSpellId(0); - m_caster.SetChannelSpellXSpellVisualId(default); + m_caster.SetChannelVisual(default); } SpellChannelUpdate spellChannelUpdate = new SpellChannelUpdate(); @@ -4087,7 +4087,7 @@ namespace Game.Spells m_caster.AddChannelObject(target.targetGUID); m_caster.SetChannelSpellId(m_spellInfo.Id); - m_caster.SetChannelSpellXSpellVisualId(m_SpellVisual); + m_caster.SetChannelVisual(m_SpellVisual); } void SendResurrectRequest(Player target) @@ -7404,7 +7404,7 @@ namespace Game.Spells public bool m_fromClient; public SpellCastFlagsEx m_castFlagsEx; public SpellMisc m_misc; - public SpellCastVisual m_SpellVisual; + public Networking.Packets.SpellCastVisual m_SpellVisual; public SpellCastTargets m_targets; public sbyte m_comboPointGain; public SpellCustomErrors m_customError; diff --git a/Source/Game/Spells/SpellInfo.cs b/Source/Game/Spells/SpellInfo.cs index 2968def86..c23121103 100644 --- a/Source/Game/Spells/SpellInfo.cs +++ b/Source/Game/Spells/SpellInfo.cs @@ -63,6 +63,7 @@ namespace Game.Spells AttributesEx11 = (SpellAttr11)_misc.Attributes[11]; AttributesEx12 = (SpellAttr12)_misc.Attributes[12]; AttributesEx13 = (SpellAttr13)_misc.Attributes[13]; + AttributesEx14 = (SpellAttr14)_misc.Attributes[14]; CastTimeEntry = CliDB.SpellCastTimesStorage.LookupByKey(_misc.CastingTimeIndex); DurationEntry = CliDB.SpellDurationStorage.LookupByKey(_misc.DurationIndex); RangeIndex = _misc.RangeIndex; @@ -2608,31 +2609,11 @@ namespace Game.Spells return (DurationEntry.MaxDuration == -1) ? -1 : Math.Abs(DurationEntry.MaxDuration); } - public int CalcCastTime(uint level = 0, Spell spell = null) + public int CalcCastTime(Spell spell = null) { int castTime = 0; if (CastTimeEntry != null) - { - int calcLevel = spell != null ? (int)spell.GetCaster().GetLevel() : 0; - if (MaxLevel != 0 && calcLevel > MaxLevel) - calcLevel = (int)MaxLevel; - - if (HasAttribute(SpellAttr13.Unk17)) - calcLevel *= 5; - - if (MaxLevel != 0 && calcLevel > MaxLevel) - calcLevel = (int)MaxLevel; - - if (BaseLevel != 0) - calcLevel -= (int)BaseLevel; - - if (calcLevel < 0) - calcLevel = 0; - - castTime = (int)(CastTimeEntry.Base + CastTimeEntry.PerLevel * level); - if (castTime < CastTimeEntry.Minimum) - castTime = CastTimeEntry.Minimum; - } + castTime = Math.Max(CastTimeEntry.Base, CastTimeEntry.Minimum); if (castTime <= 0) return 0; @@ -2963,7 +2944,7 @@ namespace Game.Spells } case SpellProcsPerMinuteModType.Class: { - if (caster.GetClassMask().HasAnyFlag(mod.Param)) + if (caster.GetClassMask().HasAnyFlag((uint)mod.Param)) ppm *= 1.0f + mod.Coeff; break; } @@ -3513,6 +3494,7 @@ namespace Game.Spells public bool HasAttribute(SpellAttr11 attribute) { return Convert.ToBoolean(AttributesEx11 & attribute); } public bool HasAttribute(SpellAttr12 attribute) { return Convert.ToBoolean(AttributesEx12 & attribute); } public bool HasAttribute(SpellAttr13 attribute) { return Convert.ToBoolean(AttributesEx13 & attribute); } + public bool HasAttribute(SpellAttr14 attribute) { return Convert.ToBoolean(AttributesEx14 & attribute); } public bool HasAttribute(SpellCustomAttributes attribute) { return Convert.ToBoolean(AttributesCu & attribute); } public bool HasAnyAuraInterruptFlag() { return AuraInterruptFlags.Any(flag => flag != 0); } @@ -3542,6 +3524,7 @@ namespace Game.Spells public SpellAttr11 AttributesEx11 { get; set; } public SpellAttr12 AttributesEx12 { get; set; } public SpellAttr13 AttributesEx13 { get; set; } + public SpellAttr14 AttributesEx14 { get; set; } public SpellCustomAttributes AttributesCu { get; set; } public BitSet NegativeEffects { get; set; } = new BitSet(SpellConst.MaxEffects); public ulong Stances { get; set; } @@ -4359,6 +4342,18 @@ namespace Game.Spells new StaticData(SpellEffectImplicitTargetTypes.None, SpellTargetObjectTypes.None), // 269 SPELL_EFFECT_UPGRADE_ITEM new StaticData(SpellEffectImplicitTargetTypes.None, SpellTargetObjectTypes.None), // 270 SPELL_EFFECT_270 new StaticData(SpellEffectImplicitTargetTypes.None, SpellTargetObjectTypes.None), // 271 SPELL_EFFECT_APPLY_AREA_AURA_PARTY_NONRANDOM + new StaticData(SpellEffectImplicitTargetTypes.None, SpellTargetObjectTypes.None), // 272 SPELL_EFFECT_SET_COVENANT + new StaticData(SpellEffectImplicitTargetTypes.Caster, SpellTargetObjectTypes.Unit), // 273 SPELL_EFFECT_CRAFT_RUNEFORGE_LEGENDARY + new StaticData(SpellEffectImplicitTargetTypes.None, SpellTargetObjectTypes.None), // 274 SPELL_EFFECT_274 + new StaticData(SpellEffectImplicitTargetTypes.None, SpellTargetObjectTypes.None), // 275 SPELL_EFFECT_275 + new StaticData(SpellEffectImplicitTargetTypes.None, SpellTargetObjectTypes.None), // 276 SPELL_EFFECT_LEARN_TRANSMOG_ILLUSION + new StaticData(SpellEffectImplicitTargetTypes.None, SpellTargetObjectTypes.None), // 277 SPELL_EFFECT_SET_CHROMIE_TIME + new StaticData(SpellEffectImplicitTargetTypes.None, SpellTargetObjectTypes.None), // 278 SPELL_EFFECT_270 + new StaticData(SpellEffectImplicitTargetTypes.None, SpellTargetObjectTypes.None), // 279 SPELL_EFFECT_LEARN_GARR_TALENT + new StaticData(SpellEffectImplicitTargetTypes.None, SpellTargetObjectTypes.None), // 280 SPELL_EFFECT_270 + new StaticData(SpellEffectImplicitTargetTypes.None, SpellTargetObjectTypes.None), // 281 SPELL_EFFECT_LEARN_SOULBIND_CONDUIT + new StaticData(SpellEffectImplicitTargetTypes.None, SpellTargetObjectTypes.None), // 282 SPELL_EFFECT_CONVERT_ITEMS_TO_CURRENCY + new StaticData(SpellEffectImplicitTargetTypes.None, SpellTargetObjectTypes.None), // 283 SPELL_EFFECT_283 }; #region Fields @@ -4726,7 +4721,8 @@ namespace Game.Spells new StaticData(SpellTargetObjectTypes.None, SpellTargetReferenceTypes.None, SpellTargetSelectionCategories.Nyi, SpellTargetCheckTypes.Default, SpellTargetDirectionTypes.None), // 147 new StaticData(SpellTargetObjectTypes.None, SpellTargetReferenceTypes.None, SpellTargetSelectionCategories.Nyi, SpellTargetCheckTypes.Default, SpellTargetDirectionTypes.None), // 148 new StaticData(SpellTargetObjectTypes.Dest, SpellTargetReferenceTypes.Caster, SpellTargetSelectionCategories.Default, SpellTargetCheckTypes.Default, SpellTargetDirectionTypes.Random), // 149 - new StaticData(SpellTargetObjectTypes.Unit, SpellTargetReferenceTypes.Caster, SpellTargetSelectionCategories.Default, SpellTargetCheckTypes.Default, SpellTargetDirectionTypes.None), // 150 + new StaticData(SpellTargetObjectTypes.Unit, SpellTargetReferenceTypes.Caster, SpellTargetSelectionCategories.Default, SpellTargetCheckTypes.Default, SpellTargetDirectionTypes.None), // 150 TARGET_UNIT_OWN_CRITTER + new StaticData(SpellTargetObjectTypes.Unit, SpellTargetReferenceTypes.Caster, SpellTargetSelectionCategories.Area, SpellTargetCheckTypes.Enemy, SpellTargetDirectionTypes.None), // 151 }; } diff --git a/Source/Scripts/Spells/DeathKnight.cs b/Source/Scripts/Spells/DeathKnight.cs index ce40fc08b..c68c49d03 100644 --- a/Source/Scripts/Spells/DeathKnight.cs +++ b/Source/Scripts/Spells/DeathKnight.cs @@ -263,7 +263,7 @@ namespace Scripts.Spells.DeathKnight return; int amount = (int)(damageInfo.GetDamage() / 2); - SpellNonMeleeDamage log = new SpellNonMeleeDamage(drw, drw.GetVictim(), spellInfo, spellInfo.GetSpellXSpellVisualId(drw), spellInfo.GetSchoolMask()); + SpellNonMeleeDamage log = new SpellNonMeleeDamage(drw, drw.GetVictim(), spellInfo, new Game.Networking.Packets.SpellCastVisual(spellInfo.GetSpellXSpellVisualId(drw), 0), spellInfo.GetSchoolMask()); log.damage = (uint)amount; drw.DealDamage(drw.GetVictim(), (uint)amount, null, DamageEffectType.Direct, spellInfo.GetSchoolMask(), spellInfo, true); drw.SendSpellNonMeleeDamageLog(log); diff --git a/Source/Scripts/World/ItemScripts.cs b/Source/Scripts/World/ItemScripts.cs index d37001608..b3af330f8 100644 --- a/Source/Scripts/World/ItemScripts.cs +++ b/Source/Scripts/World/ItemScripts.cs @@ -128,7 +128,7 @@ namespace Scripts.World case 34475: SpellInfo spellInfo = Global.SpellMgr.GetSpellInfo(ItemScriptConst.SpellArcaneCharges, player.GetMap().GetDifficultyID()); if (spellInfo != null) - Spell.SendCastResult(player, spellInfo, 0, castId, SpellCastResult.NotOnGround); + Spell.SendCastResult(player, spellInfo, default, castId, SpellCastResult.NotOnGround); break; } @@ -277,7 +277,7 @@ namespace Scripts.World { SpellInfo spellInfo = Global.SpellMgr.GetSpellInfo(ItemScriptConst.SpellPetrovBomb, Difficulty.None); if (spellInfo != null) - Spell.SendCastResult(player, spellInfo, 0, castId, SpellCastResult.NotHere); + Spell.SendCastResult(player, spellInfo, default, castId, SpellCastResult.NotHere); return true; } diff --git a/Source/WorldServer/WorldServer.conf.dist b/Source/WorldServer/WorldServer.conf.dist index 66c0fa892..78a8687b5 100644 --- a/Source/WorldServer/WorldServer.conf.dist +++ b/Source/WorldServer/WorldServer.conf.dist @@ -791,28 +791,19 @@ CharactersPerAccount = 50 # # CharactersPerRealm # Description: Limit number of characters per account on this realm. -# Range: 1-16 -# Default: 16 - (Client limitation) +# Range: 1-200 +# Default: 50 -CharactersPerRealm = 16 - -# -# DemonHuntersPerRealm -# Description: Limit number of demon hunter characters per account on this realm. -# Range: 1-12 -# Default: 1 - -DemonHuntersPerRealm = 1 +CharactersPerRealm = 50 # # CharacterCreating.MinLevelForDemonHunter # Description: Limit creating demon hunters only for account with another # character of specific level. -# Default: 70 - (Enabled, Requires at least another level 70 character) -# 0 - (Disabled) +# Default: 0 - (Disabled, No requirement) # 1 - (Enabled, Requires at least another level 1 character) -CharacterCreating.MinLevelForDemonHunter = 70 +CharacterCreating.MinLevelForDemonHunter = 0 # # SkipCinematics @@ -827,11 +818,11 @@ SkipCinematics = 0 # # MaxPlayerLevel # Description: Maximum level that can be reached by players. -# Important: Levels beyond 100 are not recommended at all. +# Important: Levels beyond 110 are not recommended at all. # Range: 1-255 -# Default: 120 +# Default: 60 -MaxPlayerLevel = 120 +MaxPlayerLevel = 60 # # MinDualSpecLevel diff --git a/sql/base/characters_database.sql b/sql/base/characters_database.sql index 316d02288..2e5b285cf 100644 --- a/sql/base/characters_database.sql +++ b/sql/base/characters_database.sql @@ -704,6 +704,29 @@ LOCK TABLES `character_currency` WRITE; /*!40000 ALTER TABLE `character_currency` ENABLE KEYS */; UNLOCK TABLES; +-- +-- Table structure for table `character_customizations` +-- +DROP TABLE IF EXISTS `character_customizations`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `character_customizations` ( + `guid` bigint(20) unsigned NOT NULL, + `chrCustomizationOptionID` int(10) unsigned NOT NULL, + `chrCustomizationChoiceID` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`guid`,`chrCustomizationOptionID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `character_customizations` +-- + +LOCK TABLES `character_customizations` WRITE; +/*!40000 ALTER TABLE `character_customizations` DISABLE KEYS */; +/*!40000 ALTER TABLE `character_customizations` ENABLE KEYS */; +UNLOCK TABLES; + -- -- Table structure for table `character_declinedname` -- @@ -1736,14 +1759,6 @@ CREATE TABLE `characters` ( `level` tinyint(3) unsigned NOT NULL DEFAULT '0', `xp` int(10) unsigned NOT NULL DEFAULT '0', `money` bigint(20) unsigned NOT NULL DEFAULT '0', - `skin` tinyint(3) unsigned NOT NULL DEFAULT '0', - `face` tinyint(3) unsigned NOT NULL DEFAULT '0', - `hairStyle` tinyint(3) unsigned NOT NULL DEFAULT '0', - `hairColor` tinyint(3) unsigned NOT NULL DEFAULT '0', - `facialStyle` tinyint(3) unsigned NOT NULL DEFAULT '0', - `customDisplay1` tinyint(3) unsigned NOT NULL DEFAULT '0', - `customDisplay2` tinyint(3) unsigned NOT NULL DEFAULT '0', - `customDisplay3` tinyint(3) unsigned NOT NULL DEFAULT '0', `inventorySlots` tinyint(3) unsigned NOT NULL DEFAULT '16', `bankSlots` tinyint(3) unsigned NOT NULL DEFAULT '0', `restState` tinyint(3) unsigned NOT NULL DEFAULT '0', @@ -1841,8 +1856,8 @@ CREATE TABLE `corpse` ( `mapId` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'Map Identifier', `displayId` int(10) unsigned NOT NULL DEFAULT '0', `itemCache` text NOT NULL, - `bytes1` int(10) unsigned NOT NULL DEFAULT '0', - `bytes2` int(10) unsigned NOT NULL DEFAULT '0', + `race` tinyint(3) unsigned NOT NULL DEFAULT '0', + `gender` tinyint(3) unsigned NOT NULL DEFAULT '0', `flags` tinyint(3) unsigned NOT NULL DEFAULT '0', `dynFlags` tinyint(3) unsigned NOT NULL DEFAULT '0', `time` int(10) unsigned NOT NULL DEFAULT '0', @@ -1864,6 +1879,30 @@ LOCK TABLES `corpse` WRITE; /*!40000 ALTER TABLE `corpse` ENABLE KEYS */; UNLOCK TABLES; +-- +-- Table structure for table `corpse_customizations` +-- + +DROP TABLE IF EXISTS `corpse_customizations`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `corpse_customizations` ( + `ownerGuid` bigint(20) unsigned NOT NULL, + `chrCustomizationOptionID` int(10) unsigned NOT NULL, + `chrCustomizationChoiceID` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`ownerGuid`,`chrCustomizationOptionID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `corpse_customizations` +-- + +LOCK TABLES `corpse_customizations` WRITE; +/*!40000 ALTER TABLE `corpse_customizations` DISABLE KEYS */; +/*!40000 ALTER TABLE `corpse_customizations` ENABLE KEYS */; +UNLOCK TABLES; + -- -- Table structure for table `corpse_phases` -- @@ -3780,7 +3819,8 @@ INSERT INTO `updates` VALUES ('2020_06_12_00_characters.sql','DF16C99EFACA4DFADDDF35644AAC63F9B4AA2BD6','ARCHIVED','2020-06-11 16:24:56',0), ('2020_06_17_00_characters.sql','C3EE0D751E4B97CDF15F3BE27AAAE3646514A358','ARCHIVED','2020-06-17 17:04:56',0), ('2020_08_14_00_characters.sql','355685FF86EE64E2ED9D4B7D1311D53A9C2E0FA5','ARCHIVED','2020-08-14 21:41:24',0), -('2020_10_20_00_characters.sql','744F2A36865761920CE98A6DDE3A3BADF44D1E77','ARCHIVED','2020-10-20 21:36:49',0); +('2020_10_20_00_characters.sql','744F2A36865761920CE98A6DDE3A3BADF44D1E77','ARCHIVED','2020-10-20 21:36:49',0), +('2020_11_16_00_characters.sql','33D5C7539E239132923D01F4B6EAD5F3EF3EEB69','RELEASED','2020-11-16 19:16:31',0); /*!40000 ALTER TABLE `updates` ENABLE KEYS */; UNLOCK TABLES; diff --git a/sql/updates/characters/master/2020_11_16_00_characters.sql b/sql/updates/characters/master/2020_11_16_00_characters.sql new file mode 100644 index 000000000..52cd9c89b --- /dev/null +++ b/sql/updates/characters/master/2020_11_16_00_characters.sql @@ -0,0 +1,8660 @@ +-- Prepare conversion data +-- +-- Table structure for table `chr_customization_conversion` +-- +DROP TABLE IF EXISTS `chr_customization_conversion`; +CREATE TABLE `chr_customization_conversion` ( + `ID` int NOT NULL, + `RaceMask` bigint unsigned DEFAULT NULL, + `ClassMask` int unsigned DEFAULT NULL, + `Sex` int DEFAULT NULL, + `OptionID` int DEFAULT NULL, + `Data` int DEFAULT NULL, + `ChrCustomizationOptionID` int DEFAULT NULL, + `ChrCustomizationChoiceID` int DEFAULT NULL, + `DependentOptionID` int DEFAULT NULL, + `DependentData` int DEFAULT NULL, + PRIMARY KEY (`ID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- +-- Dumping data for table `chr_customization_conversion` +-- +LOCK TABLES `chr_customization_conversion` WRITE; +ALTER TABLE `chr_customization_conversion` DISABLE KEYS; +INSERT INTO `chr_customization_conversion` VALUES +(1,1,4095,0,1,0,9,1,0,0), +(2,1,4095,0,1,1,9,2,0,0), +(3,1,4095,0,1,2,9,3,0,0), +(4,1,4095,0,1,3,9,4,0,0), +(5,1,4095,0,1,4,9,5,0,0), +(6,1,4095,0,1,5,9,6,0,0), +(7,1,4095,0,1,6,9,7,0,0), +(8,1,4095,0,1,7,9,8,0,0), +(9,1,4095,0,1,8,9,9,0,0), +(10,1,4095,0,1,9,9,10,0,0), +(11,1,4095,0,1,10,9,11,0,0), +(12,1,4095,0,1,11,9,12,0,0), +(13,1,32,0,1,12,9,13,0,0), +(14,1,32,0,1,13,9,14,0,0), +(15,1,32,0,1,14,9,15,0,0), +(16,1,4095,0,1,15,9,16,0,0), +(17,1,4095,0,1,16,9,17,0,0), +(18,1,4095,0,1,17,9,18,0,0), +(20,1,4095,0,2,0,10,20,0,0), +(21,1,4095,0,2,1,10,21,0,0), +(22,1,4095,0,2,2,10,22,0,0), +(23,1,4095,0,2,3,10,23,0,0), +(24,1,4095,0,2,4,10,24,0,0), +(25,1,4095,0,2,5,10,25,0,0), +(26,1,4095,0,2,6,10,26,0,0), +(27,1,4095,0,2,7,10,27,0,0), +(28,1,4095,0,2,8,10,28,0,0), +(29,1,4095,0,2,9,10,29,0,0), +(30,1,4095,0,2,10,10,30,0,0), +(31,1,4095,0,2,11,10,31,0,0), +(32,1,4095,0,2,12,10,20,0,0), +(33,1,4095,0,2,13,10,21,0,0), +(34,1,4095,0,2,14,10,22,0,0), +(35,1,4095,0,2,15,10,23,0,0), +(36,1,4095,0,2,16,10,24,0,0), +(37,1,4095,0,2,17,10,25,0,0), +(38,1,4095,0,2,18,10,26,0,0), +(39,1,4095,0,2,19,10,27,0,0), +(40,1,4095,0,2,20,10,28,0,0), +(41,1,4095,0,2,21,10,29,0,0), +(42,1,4095,0,2,22,10,30,0,0), +(43,1,4095,0,2,23,10,31,0,0), +(44,1,4095,0,3,0,11,44,0,0), +(45,1,4095,0,3,1,11,45,0,0), +(46,1,4095,0,3,2,11,46,0,0), +(47,1,4095,0,3,3,11,47,0,0), +(48,1,4095,0,3,4,11,48,0,0), +(49,1,4095,0,3,5,11,49,0,0), +(50,1,4095,0,3,6,11,50,0,0), +(51,1,4095,0,3,7,11,51,0,0), +(52,1,4095,0,3,8,11,52,0,0), +(53,1,4095,0,3,9,11,53,0,0), +(54,1,4095,0,3,10,11,54,0,0), +(55,1,4095,0,3,11,11,55,0,0), +(56,1,4095,0,3,12,11,56,0,0), +(57,1,4095,0,3,13,11,57,0,0), +(58,1,4095,0,3,14,11,58,0,0), +(59,1,4095,0,3,15,11,59,0,0), +(60,1,4095,0,3,16,11,60,0,0), +(61,1,4095,0,4,0,12,61,0,0), +(62,1,4095,0,4,1,12,62,0,0), +(63,1,4095,0,4,2,12,63,0,0), +(64,1,4095,0,4,3,12,64,0,0), +(65,1,4095,0,4,4,12,65,0,0), +(66,1,4095,0,4,5,12,66,0,0), +(67,1,4095,0,4,6,12,67,0,0), +(68,1,4095,0,4,7,12,68,0,0), +(69,1,4095,0,4,8,12,69,0,0), +(70,1,4095,0,4,9,12,70,0,0), +(71,1,4095,0,4,10,12,71,0,0), +(72,1,4095,0,4,11,12,72,0,0), +(73,1,4095,0,4,12,12,73,0,0), +(74,1,4095,0,4,13,12,74,0,0), +(76,1,4095,0,5,0,13,81,0,0), +(77,1,4095,0,5,1,13,82,0,0), +(78,1,4095,0,5,2,13,83,0,0), +(79,1,4095,0,5,3,13,77,0,0), +(80,1,4095,0,5,4,13,77,0,0), +(81,1,4095,0,5,5,13,76,0,0), +(82,1,4095,0,5,6,13,77,0,0), +(83,1,4095,0,5,7,13,76,0,0), +(84,1,4095,0,5,8,13,76,0,0), +(85,1,4095,1,1,0,14,85,0,0), +(86,1,4095,1,1,1,14,86,0,0), +(87,1,4095,1,1,2,14,87,0,0), +(88,1,4095,1,1,3,14,88,0,0), +(89,1,4095,1,1,4,14,89,0,0), +(90,1,4095,1,1,5,14,90,0,0), +(91,1,4095,1,1,6,14,91,0,0), +(92,1,4095,1,1,7,14,92,0,0), +(93,1,4095,1,1,8,14,93,0,0), +(94,1,4095,1,1,9,14,94,0,0), +(95,1,4095,1,1,10,14,95,0,0), +(96,1,4095,1,1,11,14,96,0,0), +(97,1,32,1,1,12,14,97,0,0), +(98,1,32,1,1,13,14,98,0,0), +(99,1,32,1,1,14,14,99,0,0), +(100,1,4095,1,1,15,14,100,0,0), +(101,1,4095,1,1,16,14,101,0,0), +(102,1,4095,1,2,0,15,102,0,0), +(103,1,4095,1,2,1,15,103,0,0), +(104,1,4095,1,2,2,15,104,0,0), +(105,1,4095,1,2,3,15,105,0,0), +(106,1,4095,1,2,4,15,106,0,0), +(107,1,4095,1,2,5,15,107,0,0), +(108,1,4095,1,2,6,15,108,0,0), +(109,1,4095,1,2,7,15,109,0,0), +(110,1,4095,1,2,8,15,110,0,0), +(111,1,4095,1,2,9,15,111,0,0), +(112,1,4095,1,2,10,15,112,0,0), +(113,1,4095,1,2,11,15,113,0,0), +(114,1,4095,1,2,12,15,114,0,0), +(115,1,4095,1,2,13,15,115,0,0), +(116,1,4095,1,2,14,15,116,0,0), +(117,1,4095,1,2,15,15,102,0,0), +(118,1,4095,1,2,16,15,103,0,0), +(119,1,4095,1,2,17,15,104,0,0), +(120,1,4095,1,2,18,15,105,0,0), +(121,1,4095,1,2,19,15,106,0,0), +(122,1,4095,1,2,20,15,107,0,0), +(123,1,4095,1,2,21,15,108,0,0), +(124,1,4095,1,2,22,15,109,0,0), +(125,1,4095,1,2,23,15,110,0,0), +(126,1,4095,1,2,24,15,111,0,0), +(127,1,4095,1,2,25,15,112,0,0), +(128,1,4095,1,2,26,15,113,0,0), +(129,1,4095,1,2,27,15,114,0,0), +(130,1,4095,1,2,28,15,115,0,0), +(131,1,4095,1,2,29,15,116,0,0), +(132,1,4095,1,3,0,16,132,0,0), +(133,1,4095,1,3,1,16,133,0,0), +(134,1,4095,1,3,2,16,134,0,0), +(135,1,4095,1,3,3,16,135,0,0), +(136,1,4095,1,3,4,16,136,0,0), +(137,1,4095,1,3,5,16,137,0,0), +(138,1,4095,1,3,6,16,138,0,0), +(139,1,4095,1,3,7,16,139,0,0), +(140,1,4095,1,3,8,16,140,0,0), +(141,1,4095,1,3,9,16,141,0,0), +(142,1,4095,1,3,10,16,142,0,0), +(143,1,4095,1,3,11,16,143,0,0), +(144,1,4095,1,3,12,16,144,0,0), +(145,1,4095,1,3,13,16,145,0,0), +(146,1,4095,1,3,14,16,146,0,0), +(147,1,4095,1,3,15,16,147,0,0), +(148,1,4095,1,3,16,16,148,0,0), +(149,1,4095,1,3,17,16,149,0,0), +(150,1,4095,1,3,18,16,150,0,0), +(151,1,4095,1,3,19,16,151,0,0), +(152,1,4095,1,3,20,16,152,0,0), +(153,1,4095,1,3,21,16,153,0,0), +(154,1,4095,1,3,22,16,154,0,0), +(155,1,4095,1,3,23,16,155,0,0), +(156,1,4095,1,4,0,17,156,0,0), +(157,1,4095,1,4,1,17,157,0,0), +(158,1,4095,1,4,2,17,158,0,0), +(159,1,4095,1,4,3,17,159,0,0), +(160,1,4095,1,4,4,17,160,0,0), +(161,1,4095,1,4,5,17,161,0,0), +(162,1,4095,1,4,6,17,162,0,0), +(163,1,4095,1,4,7,17,163,0,0), +(164,1,4095,1,4,8,17,164,0,0), +(165,1,4095,1,4,9,17,165,0,0), +(166,1,4095,1,4,10,17,166,0,0), +(167,1,4095,1,4,11,17,167,0,0), +(168,1,4095,1,4,12,17,168,0,0), +(169,1,4095,1,4,13,17,169,0,0), +(177,2,4095,0,1,0,19,353,0,0), +(178,2,4095,0,1,1,19,354,0,0), +(179,2,4095,0,1,2,19,355,0,0), +(180,2,4095,0,1,3,19,356,0,0), +(181,2,4095,0,1,4,19,357,0,0), +(182,2,4095,0,1,5,19,358,0,0), +(183,2,4095,0,1,6,19,359,0,0), +(184,2,4095,0,1,7,19,360,0,0), +(185,2,4095,0,1,8,19,361,0,0), +(186,2,4095,0,1,9,19,362,0,0), +(187,2,4095,0,1,10,19,363,0,0), +(188,2,4095,0,1,11,19,364,0,0), +(189,2,4095,0,1,12,19,365,0,0), +(190,2,4095,0,1,13,19,366,0,0), +(191,2,4095,0,1,14,19,367,0,0), +(192,2,32,0,1,15,19,368,0,0), +(193,2,32,0,1,16,19,369,0,0), +(194,2,32,0,1,17,19,370,0,0), +(195,2,4095,0,1,18,19,371,0,0), +(196,2,4095,0,1,19,19,372,0,0), +(197,2,4095,0,1,20,19,373,0,0), +(198,2,4095,0,1,21,19,374,0,0), +(199,2,4095,0,1,22,19,375,0,0), +(200,2,4095,0,1,23,19,376,0,0), +(201,2,4095,0,1,24,19,377,0,0), +(202,2,4095,0,1,25,19,378,0,0), +(203,2,4095,0,1,26,19,379,0,0), +(204,2,4095,0,1,27,19,380,0,0), +(205,2,4095,0,1,28,19,381,0,0), +(206,2,4095,0,1,29,19,382,0,0), +(207,2,4095,0,1,30,19,383,0,0), +(208,2,4063,0,2,0,20,384,1,0), +(209,2,4063,0,2,1,20,385,1,0), +(210,2,4063,0,2,2,20,386,0,0), +(211,2,4063,0,2,3,20,387,0,0), +(212,2,4063,0,2,4,20,388,0,0), +(213,2,4063,0,2,5,20,389,1,0), +(214,2,4063,0,2,6,20,390,0,0), +(215,2,4063,0,2,7,20,391,0,0), +(216,2,4063,0,2,8,20,392,0,0), +(217,2,32,0,2,9,20,393,0,0), +(218,2,32,0,2,10,20,394,0,0), +(219,2,32,0,2,11,20,395,0,0), +(220,2,32,0,2,12,20,396,0,0), +(221,2,32,0,2,13,20,397,0,0), +(222,2,32,0,2,14,20,398,0,0), +(223,2,32,0,2,15,20,399,0,0), +(224,2,32,0,2,16,20,400,0,0), +(225,2,32,0,2,17,20,401,0,0), +(226,2,4095,0,3,0,21,402,0,0), +(227,2,4095,0,3,1,21,403,0,0), +(228,2,4095,0,3,2,21,404,0,0), +(229,2,4095,0,3,3,21,405,0,0), +(230,2,4095,0,3,4,21,406,0,0), +(231,2,4095,0,3,5,21,407,0,0), +(232,2,4095,0,3,6,21,408,0,0), +(233,2,4095,0,3,7,21,409,0,0), +(234,2,4095,0,3,8,21,410,0,0), +(235,2,4095,0,3,9,21,411,0,0), +(236,2,4095,0,3,10,21,412,0,0), +(237,2,4095,0,3,11,21,413,0,0), +(238,2,4095,0,3,12,21,414,0,0), +(239,2,4095,0,4,0,22,415,0,0), +(240,2,4095,0,4,1,22,416,0,0), +(241,2,4095,0,4,2,22,417,0,0), +(242,2,4095,0,4,3,22,418,0,0), +(243,2,4095,0,4,4,22,419,0,0), +(244,2,4095,0,4,5,22,420,0,0), +(245,2,4095,0,4,6,22,421,0,0), +(246,2,4095,0,4,7,22,422,0,0), +(247,2,4095,0,4,8,22,423,0,0), +(248,2,4095,0,4,9,22,424,0,0), +(249,2,4095,0,4,10,22,425,0,0), +(250,2,4095,0,4,11,22,426,0,0), +(251,2,4095,0,5,0,23,427,0,0), +(252,2,4095,0,5,1,23,428,0,0), +(253,2,4095,0,5,2,23,433,0,0), +(254,2,4095,0,5,3,23,432,0,0), +(255,2,4095,0,5,4,23,434,0,0), +(256,2,4095,0,5,5,23,436,0,0), +(257,2,4095,0,5,6,23,9813,0,0), +(258,2,4095,0,5,7,23,427,0,0), +(259,2,4095,0,5,8,23,437,0,0), +(260,2,4095,0,5,9,23,431,0,0), +(261,2,4095,0,5,10,23,430,0,0), +(262,2,4095,0,8,0,24,438,0,0), +(263,2,4095,0,8,1,24,439,0,0), +(264,2,4095,1,1,0,25,440,0,0), +(265,2,4095,1,1,1,25,441,0,0), +(266,2,4095,1,1,2,25,442,0,0), +(267,2,4095,1,1,3,25,443,0,0), +(268,2,4095,1,1,4,25,444,0,0), +(269,2,4095,1,1,5,25,445,0,0), +(270,2,4095,1,1,6,25,446,0,0), +(271,2,4095,1,1,7,25,447,0,0), +(272,2,4095,1,1,8,25,448,0,0), +(273,2,4095,1,1,9,25,449,0,0), +(274,2,4095,1,1,10,25,450,0,0), +(275,2,32,1,1,11,25,451,0,0), +(276,2,32,1,1,12,25,452,0,0), +(277,2,32,1,1,13,25,453,0,0), +(278,2,4095,1,1,14,25,454,0,0), +(279,2,4095,1,1,15,25,455,0,0), +(280,2,4095,1,1,16,25,456,0,0), +(281,2,4095,1,1,17,25,457,0,0), +(282,2,4095,1,1,18,25,458,0,0), +(283,2,4095,1,1,19,25,459,0,0), +(284,2,4095,1,1,20,25,460,0,0), +(285,2,4095,1,1,21,25,461,0,0), +(286,2,4095,1,1,22,25,462,0,0), +(287,2,4095,1,1,23,25,463,0,0), +(288,2,4095,1,1,24,25,464,0,0), +(289,2,4095,1,1,25,25,465,0,0), +(290,2,4095,1,1,26,25,466,0,0), +(291,2,4095,1,1,27,25,467,0,0), +(292,2,4095,1,1,28,25,468,0,0), +(293,2,4095,1,1,29,25,469,0,0), +(294,2,4095,1,1,30,25,470,0,0), +(295,2,4095,1,1,31,25,471,0,0), +(296,2,4063,1,2,0,26,472,1,0), +(297,2,4063,1,2,1,26,473,0,0), +(298,2,4063,1,2,2,26,474,0,0), +(299,2,4063,1,2,3,26,475,0,0), +(300,2,4063,1,2,4,26,476,0,0), +(301,2,4063,1,2,5,26,477,0,0), +(302,2,4063,1,2,6,26,478,0,0), +(303,2,4063,1,2,7,26,479,1,0), +(304,2,4063,1,2,8,26,480,1,0), +(305,2,32,1,2,9,26,481,0,0), +(306,2,32,1,2,10,26,482,0,0), +(307,2,32,1,2,11,26,483,0,0), +(308,2,32,1,2,12,26,484,0,0), +(309,2,32,1,2,13,26,485,0,0), +(310,2,32,1,2,14,26,486,0,0), +(311,2,32,1,2,15,26,487,0,0), +(312,2,32,1,2,16,26,488,0,0), +(313,2,32,1,2,17,26,489,0,0), +(314,2,4095,1,3,0,27,490,0,0), +(315,2,4095,1,3,1,27,491,0,0), +(316,2,4095,1,3,2,27,492,0,0), +(317,2,4095,1,3,3,27,493,0,0), +(318,2,4095,1,3,4,27,494,0,0), +(319,2,4095,1,3,5,27,495,0,0), +(320,2,4095,1,3,6,27,496,0,0), +(321,2,4095,1,3,7,27,497,0,0), +(322,2,4095,1,3,8,27,498,0,0), +(323,2,4095,1,3,9,27,499,0,0), +(324,2,4095,1,3,10,27,500,0,0), +(325,2,4095,1,3,11,27,501,0,0), +(326,2,4095,1,3,12,27,502,0,0), +(327,2,4095,1,3,13,27,503,0,0), +(328,2,4095,1,3,14,27,504,0,0), +(329,2,4095,1,4,0,28,505,0,0), +(330,2,4095,1,4,1,28,506,0,0), +(331,2,4095,1,4,2,28,507,0,0), +(332,2,4095,1,4,3,28,508,0,0), +(333,2,4095,1,4,4,28,509,0,0), +(334,2,4095,1,4,5,28,510,0,0), +(335,2,4095,1,4,6,28,511,0,0), +(336,2,4095,1,4,7,28,512,0,0), +(337,2,4095,1,4,8,28,513,0,0), +(338,2,4095,1,4,9,28,514,0,0), +(339,2,4095,1,4,10,28,515,0,0), +(340,2,4095,1,4,11,28,516,0,0), +(341,2,4095,1,5,0,29,517,0,0), +(342,2,4095,1,5,1,29,518,0,0), +(343,2,4095,1,5,2,29,519,0,0), +(344,2,4095,1,5,3,29,517,0,0), +(345,2,4095,1,5,4,29,518,0,0), +(346,2,4095,1,5,5,29,519,0,0), +(347,2,4095,1,5,6,29,521,0,0), +(348,4,4095,0,1,0,30,524,0,0), +(349,4,4095,0,1,1,30,525,0,0), +(350,4,4095,0,1,2,30,526,0,0), +(351,4,4095,0,1,3,30,527,0,0), +(352,4,4095,0,1,4,30,528,0,0), +(353,4,4095,0,1,5,30,529,0,0), +(354,4,4095,0,1,6,30,530,0,0), +(355,4,4095,0,1,7,30,531,0,0), +(356,4,4095,0,1,8,30,532,0,0), +(357,4,4095,0,1,9,30,533,0,0), +(358,4,4095,0,1,10,30,534,0,0), +(359,4,4095,0,1,11,30,535,0,0), +(360,4,4095,0,1,12,30,536,0,0), +(361,4,4095,0,1,13,30,537,0,0), +(362,4,4095,0,1,14,30,538,0,0), +(363,4,4095,0,1,15,30,539,0,0), +(364,4,4095,0,1,16,30,540,0,0), +(365,4,4095,0,1,17,30,541,0,0), +(366,4,4095,0,1,18,30,542,0,0), +(367,4,32,0,1,19,30,543,0,0), +(368,4,32,0,1,20,30,544,0,0), +(369,4,32,0,1,21,30,545,0,0), +(370,4,4095,0,1,22,30,546,0,0), +(371,4,4095,0,1,23,30,547,0,0), +(372,4,4095,0,1,24,30,548,0,0), +(373,4,4095,0,1,25,30,549,0,0), +(374,4,4095,0,1,26,30,550,0,0), +(375,4,4063,0,2,0,31,551,1,0), +(376,4,4063,0,2,1,31,552,1,0), +(377,4,4063,0,2,2,31,553,0,0), +(378,4,4063,0,2,3,31,554,0,0), +(379,4,4063,0,2,4,31,555,0,0), +(380,4,4063,0,2,5,31,556,0,0), +(381,4,4063,0,2,6,31,557,0,0), +(382,4,4063,0,2,7,31,558,0,0), +(383,4,4063,0,2,8,31,559,0,0), +(384,4,4063,0,2,9,31,560,1,0), +(385,4,32,0,2,10,31,561,0,0), +(386,4,32,0,2,11,31,562,0,0), +(387,4,32,0,2,12,31,563,0,0), +(388,4,32,0,2,13,31,564,0,0), +(389,4,32,0,2,14,31,565,0,0), +(390,4,32,0,2,15,31,566,0,0), +(391,4,32,0,2,16,31,567,0,0), +(392,4,32,0,2,17,31,568,0,0), +(393,4,32,0,2,18,31,569,0,0), +(394,4,32,0,2,19,31,570,0,0), +(395,4,4095,0,3,0,32,571,0,0), +(396,4,4095,0,3,1,32,572,0,0), +(397,4,4095,0,3,2,32,573,0,0), +(398,4,4095,0,3,3,32,574,0,0), +(399,4,4095,0,3,4,32,575,0,0), +(400,4,4095,0,3,5,32,576,0,0), +(401,4,4095,0,3,6,32,577,0,0), +(402,4,4095,0,3,7,32,578,0,0), +(403,4,4095,0,3,8,32,579,0,0), +(404,4,4095,0,3,9,32,580,0,0), +(405,4,4095,0,3,10,32,581,0,0), +(406,4,4095,0,3,11,32,582,0,0), +(407,4,4095,0,3,12,32,583,0,0), +(408,4,4095,0,3,13,32,584,0,0), +(409,4,4095,0,3,14,32,585,0,0), +(410,4,4095,0,3,15,32,586,0,0), +(411,4,4095,0,3,16,32,587,0,0), +(412,4,4095,0,3,17,32,588,0,0), +(413,4,4095,0,3,18,32,589,0,0), +(414,4,4095,0,4,0,33,590,0,0), +(415,4,4095,0,4,1,33,591,0,0), +(416,4,4095,0,4,2,33,592,0,0), +(417,4,4095,0,4,3,33,593,0,0), +(418,4,4095,0,4,4,33,594,0,0), +(419,4,4095,0,4,5,33,595,0,0), +(420,4,4095,0,4,6,33,596,0,0), +(421,4,4095,0,4,7,33,597,0,0), +(422,4,4095,0,4,8,33,598,0,0), +(423,4,4095,0,4,9,33,599,0,0), +(424,4,4095,0,4,10,33,600,0,0), +(425,4,4095,0,4,11,33,601,0,0), +(426,4,4095,0,4,12,33,602,0,0), +(427,4,4095,0,4,13,33,603,0,0), +(428,4,4095,0,5,0,34,604,0,0), +(429,4,4095,0,5,1,34,605,0,0), +(430,4,4095,0,5,2,34,606,0,0), +(431,4,4095,0,5,3,34,607,0,0), +(432,4,4095,0,5,4,34,608,0,0), +(433,4,4095,0,5,5,34,609,0,0), +(434,4,4095,0,5,6,34,610,0,0), +(435,4,4095,0,5,7,34,611,0,0), +(436,4,4095,0,5,8,34,612,0,0), +(437,4,4095,0,5,9,34,613,0,0), +(438,4,4095,0,5,10,34,614,0,0), +(439,4,4095,1,1,0,35,615,0,0), +(440,4,4095,1,1,1,35,616,0,0), +(441,4,4095,1,1,2,35,617,0,0), +(442,4,4095,1,1,3,35,618,0,0), +(443,4,4095,1,1,4,35,619,0,0), +(444,4,4095,1,1,5,35,620,0,0), +(445,4,4095,1,1,6,35,621,0,0), +(446,4,4095,1,1,7,35,622,0,0), +(447,4,4095,1,1,8,35,623,0,0), +(448,4,4095,1,1,9,35,624,0,0), +(449,4,4095,1,1,10,35,625,0,0), +(450,4,32,1,1,11,35,626,0,0), +(451,4,32,1,1,12,35,627,0,0), +(452,4,32,1,1,13,35,628,0,0), +(453,4,4095,1,1,14,35,629,0,0), +(454,4,4095,1,1,15,35,630,0,0), +(455,4,4095,1,1,16,35,631,0,0), +(456,4,4095,1,1,17,35,632,0,0), +(457,4,4095,1,1,18,35,633,0,0), +(458,4,4063,1,2,0,36,634,1,0), +(459,4,4063,1,2,1,36,635,0,0), +(460,4,4063,1,2,2,36,636,0,0), +(461,4,4063,1,2,3,36,637,0,0), +(462,4,4063,1,2,4,36,638,0,0), +(463,4,4063,1,2,5,36,639,1,0), +(464,4,4063,1,2,6,36,640,1,0), +(465,4,4063,1,2,7,36,641,0,0), +(466,4,4063,1,2,8,36,642,0,0), +(467,4,4063,1,2,9,36,643,0,0), +(468,4,32,1,2,10,36,644,0,0), +(469,4,32,1,2,11,36,645,0,0), +(470,4,32,1,2,12,36,646,0,0), +(471,4,32,1,2,13,36,647,0,0), +(472,4,32,1,2,14,36,648,0,0), +(473,4,32,1,2,15,36,649,0,0), +(474,4,32,1,2,16,36,650,0,0), +(475,4,32,1,2,17,36,651,0,0), +(476,4,32,1,2,18,36,652,0,0), +(477,4,32,1,2,19,36,653,0,0), +(478,4,4095,1,3,0,37,654,0,0), +(479,4,4095,1,3,1,37,655,0,0), +(480,4,4095,1,3,2,37,656,0,0), +(481,4,4095,1,3,3,37,657,0,0), +(482,4,4095,1,3,4,37,658,0,0), +(483,4,4095,1,3,5,37,659,0,0), +(484,4,4095,1,3,6,37,660,0,0), +(485,4,4095,1,3,7,37,661,0,0), +(486,4,4095,1,3,8,37,662,0,0), +(487,4,4095,1,3,9,37,663,0,0), +(488,4,4095,1,3,10,37,664,0,0), +(489,4,4095,1,3,11,37,665,0,0), +(490,4,4095,1,3,12,37,666,0,0), +(491,4,4095,1,3,13,37,667,0,0), +(492,4,4095,1,3,14,37,668,0,0), +(493,4,4095,1,3,15,37,669,0,0), +(494,4,4095,1,3,16,37,670,0,0), +(495,4,4095,1,3,17,37,671,0,0), +(496,4,4095,1,3,18,37,672,0,0), +(497,4,4095,1,3,19,37,673,0,0), +(498,4,4095,1,3,20,37,674,0,0), +(499,4,4095,1,4,0,38,675,0,0), +(500,4,4095,1,4,1,38,676,0,0), +(501,4,4095,1,4,2,38,677,0,0), +(502,4,4095,1,4,3,38,678,0,0), +(503,4,4095,1,4,4,38,679,0,0), +(504,4,4095,1,4,5,38,680,0,0), +(505,4,4095,1,4,6,38,681,0,0), +(506,4,4095,1,4,7,38,682,0,0), +(507,4,4095,1,4,8,38,683,0,0), +(508,4,4095,1,4,9,38,684,0,0), +(509,4,4095,1,4,10,38,685,0,0), +(510,4,4095,1,4,11,38,686,0,0), +(511,4,4095,1,4,12,38,687,0,0), +(512,4,4095,1,4,13,38,688,0,0), +(513,4,4095,1,5,0,601,6797,0,0), +(514,4,4095,1,5,1,601,6798,0,0), +(515,4,4095,1,5,2,601,6799,0,0), +(516,4,4095,1,5,3,601,6800,0,0), +(517,4,4095,1,5,4,605,6824,0,0), +(518,4,4095,1,5,5,601,6801,0,0), +(519,8,4095,0,1,0,40,695,0,0), +(520,8,4095,0,1,1,40,696,0,0), +(521,8,4095,0,1,2,40,697,0,0), +(522,8,4095,0,1,3,40,698,0,0), +(523,8,4095,0,1,4,40,699,0,0), +(524,8,4095,0,1,5,40,700,0,0), +(525,8,4095,0,1,6,40,701,0,0), +(526,8,4095,0,1,7,40,702,0,0), +(527,8,4095,0,1,8,40,703,0,0), +(528,8,32,0,1,9,40,704,0,0), +(529,8,32,0,1,10,40,705,0,0), +(530,8,32,0,1,11,40,706,0,0), +(531,8,4095,0,1,12,40,707,0,0), +(532,8,4095,0,1,13,40,708,0,0), +(533,8,2048,0,1,14,40,709,0,0), +(534,8,2048,0,1,15,40,710,0,0), +(535,8,2048,0,1,16,40,711,0,0), +(536,8,2048,0,1,17,40,712,0,0), +(537,8,2048,0,1,18,40,713,0,0), +(538,8,2048,0,1,19,40,714,0,0), +(539,8,4095,0,1,20,40,715,0,0), +(540,8,4095,0,1,21,40,716,0,0), +(541,8,4095,0,1,22,40,717,0,0), +(542,8,4095,0,1,23,40,718,0,0), +(543,8,4063,0,2,0,41,719,1,0), +(544,8,4063,0,2,1,41,720,1,0), +(545,8,4063,0,2,2,41,721,0,0), +(546,8,4063,0,2,3,41,722,0,0), +(547,8,4063,0,2,4,41,723,1,0), +(548,8,4063,0,2,5,41,724,0,0), +(549,8,4063,0,2,6,41,725,0,0), +(550,8,4063,0,2,7,41,726,0,0), +(551,8,4063,0,2,8,41,727,0,0), +(552,8,32,0,2,9,41,728,0,0), +(553,8,32,0,2,10,41,729,0,0), +(554,8,32,0,2,11,41,730,0,0), +(555,8,32,0,2,12,41,731,0,0), +(556,8,32,0,2,13,41,732,0,0), +(557,8,32,0,2,14,41,733,0,0), +(558,8,32,0,2,15,41,734,0,0), +(559,8,32,0,2,16,41,735,0,0), +(560,8,32,0,2,17,41,736,0,0), +(561,8,4095,0,3,0,42,737,0,0), +(562,8,4095,0,3,1,42,738,0,0), +(563,8,4095,0,3,2,42,739,0,0), +(564,8,4095,0,3,3,42,740,0,0), +(565,8,4095,0,3,4,42,741,0,0), +(566,8,4095,0,3,5,42,742,0,0), +(567,8,4095,0,3,6,42,743,0,0), +(568,8,4095,0,3,7,42,744,0,0), +(569,8,4095,0,3,8,42,745,0,0), +(570,8,4095,0,3,9,42,746,0,0), +(571,8,4095,0,3,10,42,747,0,0), +(572,8,4095,0,3,11,42,748,0,0), +(573,8,4095,0,4,0,43,749,0,0), +(574,8,4095,0,4,1,43,750,0,0), +(575,8,4095,0,4,2,43,751,0,0), +(576,8,4095,0,4,3,43,752,0,0), +(577,8,4095,0,4,4,43,753,0,0), +(578,8,4095,0,4,5,43,754,0,0), +(579,8,4095,0,4,6,43,755,0,0), +(580,8,4095,0,4,7,43,756,0,0), +(581,8,4095,0,4,8,43,757,0,0), +(582,8,4095,0,4,9,43,758,0,0), +(583,8,4095,0,4,10,43,759,0,0), +(584,8,4095,0,4,11,43,760,0,0), +(585,8,4095,0,4,12,43,761,0,0), +(586,8,4095,0,4,13,43,762,0,0), +(587,8,4095,0,4,14,43,3605,0,0), +(588,8,4095,0,4,15,43,3606,0,0), +(589,8,4095,0,5,0,44,763,0,0), +(590,8,4095,0,5,1,44,768,0,0), +(591,8,4095,0,5,2,44,765,0,0), +(592,8,4095,0,5,3,44,763,0,0), +(593,8,4095,0,5,4,44,8106,0,0), +(594,8,4095,0,5,5,44,764,0,0), +(595,8,4095,0,6,0,376,769,0,0), +(596,8,2048,0,6,1,376,770,0,0), +(597,8,2048,0,6,7,376,770,0,0), +(598,8,2048,0,6,13,376,770,0,0), +(599,8,2048,0,6,19,376,770,0,0), +(600,8,2048,0,6,25,376,770,0,0), +(601,8,2048,0,6,31,376,770,0,0), +(602,8,2048,0,6,2,376,771,0,0), +(603,8,2048,0,6,8,376,771,0,0), +(604,8,2048,0,6,14,376,771,0,0), +(605,8,2048,0,6,20,376,771,0,0), +(606,8,2048,0,6,26,376,771,0,0), +(607,8,2048,0,6,32,376,771,0,0), +(608,8,2048,0,6,3,376,772,0,0), +(609,8,2048,0,6,9,376,772,0,0), +(610,8,2048,0,6,15,376,772,0,0), +(611,8,2048,0,6,21,376,772,0,0), +(612,8,2048,0,6,27,376,772,0,0), +(613,8,2048,0,6,33,376,772,0,0), +(614,8,2048,0,6,4,376,773,0,0), +(615,8,2048,0,6,10,376,773,0,0), +(616,8,2048,0,6,16,376,773,0,0), +(617,8,2048,0,6,22,376,773,0,0), +(618,8,2048,0,6,28,376,773,0,0), +(619,8,2048,0,6,34,376,773,0,0), +(620,8,2048,0,6,5,376,774,0,0), +(621,8,2048,0,6,11,376,774,0,0), +(622,8,2048,0,6,17,376,774,0,0), +(623,8,2048,0,6,23,376,774,0,0), +(624,8,2048,0,6,29,376,774,0,0), +(625,8,2048,0,6,35,376,774,0,0), +(626,8,2048,0,6,6,376,3715,0,0), +(627,8,2048,0,6,12,376,3715,0,0), +(628,8,2048,0,6,18,376,3715,0,0), +(629,8,2048,0,6,24,376,3715,0,0), +(630,8,2048,0,6,30,376,3715,0,0), +(631,8,2048,0,6,36,376,3715,0,0), +(632,8,4095,0,6,0,46,8166,0,0), +(633,8,2048,0,6,1,46,775,0,0), +(634,8,2048,0,6,2,46,775,0,0), +(635,8,2048,0,6,3,46,775,0,0), +(636,8,2048,0,6,4,46,775,0,0), +(637,8,2048,0,6,5,46,775,0,0), +(638,8,2048,0,6,6,46,775,0,0), +(639,8,2048,0,6,7,46,776,0,0), +(640,8,2048,0,6,8,46,776,0,0), +(641,8,2048,0,6,9,46,776,0,0), +(642,8,2048,0,6,10,46,776,0,0), +(643,8,2048,0,6,11,46,776,0,0), +(644,8,2048,0,6,12,46,776,0,0), +(645,8,2048,0,6,13,46,777,0,0), +(646,8,2048,0,6,14,46,777,0,0), +(647,8,2048,0,6,15,46,777,0,0), +(648,8,2048,0,6,16,46,777,0,0), +(649,8,2048,0,6,17,46,777,0,0), +(650,8,2048,0,6,18,46,777,0,0), +(651,8,2048,0,6,19,46,778,0,0), +(652,8,2048,0,6,20,46,778,0,0), +(653,8,2048,0,6,21,46,778,0,0), +(654,8,2048,0,6,22,46,778,0,0), +(655,8,2048,0,6,23,46,778,0,0), +(656,8,2048,0,6,24,46,778,0,0), +(657,8,2048,0,6,25,46,779,0,0), +(658,8,2048,0,6,26,46,779,0,0), +(659,8,2048,0,6,27,46,779,0,0), +(660,8,2048,0,6,28,46,779,0,0), +(661,8,2048,0,6,29,46,779,0,0), +(662,8,2048,0,6,30,46,779,0,0), +(669,8,2048,0,6,31,46,780,0,0), +(670,8,2048,0,6,32,46,780,0,0), +(671,8,2048,0,6,33,46,780,0,0), +(672,8,2048,0,6,34,46,780,0,0), +(673,8,2048,0,6,35,46,780,0,0), +(674,8,2048,0,6,36,46,780,0,0), +(675,8,4095,0,7,0,47,782,0,0), +(676,8,2048,0,7,1,47,783,0,0), +(677,8,2048,0,7,2,47,784,0,0), +(678,8,2048,0,7,3,47,785,0,0), +(679,8,2048,0,7,4,47,786,0,0), +(680,8,2048,0,7,5,47,787,0,0), +(681,8,2048,0,7,6,47,788,0,0), +(682,8,2047,0,8,0,48,789,2,0), +(683,8,2048,0,8,1,48,790,0,0), +(684,8,2048,0,8,2,48,791,0,0), +(685,8,2048,0,8,3,48,792,0,0), +(686,8,2048,0,8,4,48,793,0,0), +(687,8,2048,0,8,5,48,794,0,0), +(688,8,4095,1,1,0,49,801,0,0), +(689,8,4095,1,1,1,49,802,0,0), +(690,8,4095,1,1,2,49,803,0,0), +(691,8,4095,1,1,3,49,804,0,0), +(692,8,4095,1,1,4,49,805,0,0), +(693,8,4095,1,1,5,49,806,0,0), +(694,8,4095,1,1,6,49,807,0,0), +(695,8,4095,1,1,7,49,808,0,0), +(696,8,4095,1,1,8,49,809,0,0), +(697,8,32,1,1,9,49,810,0,0), +(698,8,32,1,1,10,49,811,0,0), +(699,8,32,1,1,11,49,812,0,0), +(700,8,4095,1,1,12,49,813,0,0), +(701,8,4095,1,1,13,49,814,0,0), +(702,8,2048,1,1,14,49,815,0,0), +(703,8,2048,1,1,15,49,816,0,0), +(704,8,2048,1,1,16,49,817,0,0), +(705,8,2048,1,1,17,49,818,0,0), +(706,8,2048,1,1,18,49,819,0,0), +(707,8,2048,1,1,19,49,820,0,0), +(708,8,4095,1,1,20,49,821,0,0), +(709,8,4095,1,1,21,49,822,0,0), +(710,8,4095,1,1,22,49,823,0,0), +(711,8,4095,1,1,23,49,824,0,0), +(712,8,4063,1,2,0,50,825,1,0), +(713,8,4063,1,2,1,50,826,0,0), +(714,8,4063,1,2,2,50,827,0,0), +(715,8,4063,1,2,3,50,828,0,0), +(716,8,4063,1,2,4,50,829,0,0), +(717,8,4063,1,2,5,50,830,0,0), +(718,8,4063,1,2,6,50,831,1,0), +(719,8,4063,1,2,7,50,832,1,0), +(720,8,4063,1,2,8,50,833,0,0), +(721,8,32,1,2,9,50,834,0,0), +(722,8,32,1,2,10,50,835,0,0), +(723,8,32,1,2,11,50,836,0,0), +(724,8,32,1,2,12,50,837,0,0), +(725,8,32,1,2,13,50,838,0,0), +(726,8,32,1,2,14,50,839,0,0), +(727,8,32,1,2,15,50,840,0,0), +(728,8,32,1,2,16,50,841,0,0), +(729,8,32,1,2,17,50,842,0,0), +(730,8,4095,1,3,0,51,843,0,0), +(731,8,4095,1,3,1,51,844,0,0), +(732,8,4095,1,3,2,51,845,0,0), +(733,8,4095,1,3,3,51,846,0,0), +(734,8,4095,1,3,4,51,847,0,0), +(735,8,4095,1,3,5,51,848,0,0), +(736,8,4095,1,3,6,51,849,0,0), +(737,8,4095,1,3,7,51,850,0,0), +(738,8,4095,1,3,8,51,851,0,0), +(739,8,4095,1,3,9,51,852,0,0), +(740,8,4095,1,3,10,51,853,0,0), +(741,8,4095,1,3,11,51,854,0,0), +(742,8,4095,1,3,12,51,855,0,0), +(743,8,4095,1,3,13,51,856,0,0), +(744,8,4095,1,3,14,51,857,0,0), +(745,8,4095,1,4,0,52,858,0,0), +(746,8,4095,1,4,1,52,859,0,0), +(747,8,4095,1,4,2,52,860,0,0), +(748,8,4095,1,4,3,52,861,0,0), +(749,8,4095,1,4,4,52,862,0,0), +(750,8,4095,1,4,5,52,863,0,0), +(751,8,4095,1,4,6,52,864,0,0), +(752,8,4095,1,4,7,52,865,0,0), +(753,8,4095,1,4,8,52,866,0,0), +(754,8,4095,1,4,9,52,867,0,0), +(755,8,4095,1,4,10,52,868,0,0), +(756,8,4095,1,4,11,52,869,0,0), +(757,8,4095,1,4,12,52,870,0,0), +(758,8,4095,1,4,13,52,3607,0,0), +(759,8,4095,1,4,14,52,3608,0,0), +(760,8,4095,1,5,0,53,871,0,0), +(761,8,4095,1,5,1,53,872,0,0), +(762,8,4095,1,5,2,53,873,0,0), +(763,8,4095,1,5,3,53,874,0,0), +(764,8,4095,1,5,4,53,875,0,0), +(765,8,4095,1,5,5,53,876,0,0), +(766,8,4095,1,5,6,53,877,0,0), +(767,8,4095,1,5,7,53,878,0,0), +(768,8,4095,1,5,8,53,879,0,0), +(769,8,4095,1,5,9,53,880,0,0), +(770,8,4095,1,6,0,377,881,0,0), +(771,8,2048,1,6,1,377,882,0,0), +(772,8,2048,1,6,7,377,882,0,0), +(773,8,2048,1,6,13,377,882,0,0), +(774,8,2048,1,6,19,377,882,0,0), +(775,8,2048,1,6,25,377,882,0,0), +(776,8,2048,1,6,31,377,882,0,0), +(777,8,2048,1,6,2,377,883,0,0), +(778,8,2048,1,6,8,377,883,0,0), +(779,8,2048,1,6,14,377,883,0,0), +(780,8,2048,1,6,20,377,883,0,0), +(781,8,2048,1,6,26,377,883,0,0), +(782,8,2048,1,6,32,377,883,0,0), +(783,8,2048,1,6,3,377,884,0,0), +(784,8,2048,1,6,9,377,884,0,0), +(785,8,2048,1,6,15,377,884,0,0), +(786,8,2048,1,6,21,377,884,0,0), +(787,8,2048,1,6,27,377,884,0,0), +(788,8,2048,1,6,33,377,884,0,0), +(789,8,2048,1,6,4,377,885,0,0), +(790,8,2048,1,6,10,377,885,0,0), +(791,8,2048,1,6,16,377,885,0,0), +(792,8,2048,1,6,22,377,885,0,0), +(793,8,2048,1,6,28,377,885,0,0), +(794,8,2048,1,6,34,377,885,0,0), +(795,8,2048,1,6,5,377,886,0,0), +(796,8,2048,1,6,11,377,886,0,0), +(797,8,2048,1,6,17,377,886,0,0), +(798,8,2048,1,6,23,377,886,0,0), +(799,8,2048,1,6,29,377,886,0,0), +(800,8,2048,1,6,35,377,886,0,0), +(801,8,2048,1,6,6,377,3716,0,0), +(802,8,2048,1,6,12,377,3716,0,0), +(803,8,2048,1,6,18,377,3716,0,0), +(804,8,2048,1,6,24,377,3716,0,0), +(805,8,2048,1,6,30,377,3716,0,0), +(806,8,2048,1,6,36,377,3716,0,0), +(807,8,2048,1,6,0,55,887,0,0), +(808,8,2048,1,6,1,55,887,0,0), +(809,8,2048,1,6,2,55,887,0,0), +(810,8,2048,1,6,3,55,887,0,0), +(811,8,2048,1,6,4,55,887,0,0), +(812,8,2048,1,6,5,55,887,0,0), +(813,8,2048,1,6,6,55,887,0,0), +(814,8,2048,1,6,7,55,888,0,0), +(815,8,2048,1,6,8,55,888,0,0), +(816,8,2048,1,6,9,55,888,0,0), +(817,8,2048,1,6,10,55,888,0,0), +(818,8,2048,1,6,11,55,888,0,0), +(819,8,2048,1,6,12,55,888,0,0), +(820,8,2048,1,6,13,55,889,0,0), +(821,8,2048,1,6,14,55,889,0,0), +(822,8,2048,1,6,15,55,889,0,0), +(823,8,2048,1,6,16,55,889,0,0), +(824,8,2048,1,6,17,55,889,0,0), +(825,8,2048,1,6,18,55,889,0,0), +(826,8,2048,1,6,19,55,890,0,0), +(827,8,2048,1,6,20,55,890,0,0), +(828,8,2048,1,6,21,55,890,0,0), +(829,8,2048,1,6,22,55,890,0,0), +(830,8,2048,1,6,23,55,890,0,0), +(831,8,2048,1,6,24,55,890,0,0), +(832,8,2048,1,6,25,55,891,0,0), +(833,8,2048,1,6,26,55,891,0,0), +(834,8,2048,1,6,27,55,891,0,0), +(835,8,2048,1,6,28,55,891,0,0), +(836,8,2048,1,6,29,55,891,0,0), +(837,8,2048,1,6,30,55,891,0,0), +(844,8,2048,1,6,31,55,892,0,0), +(845,8,2048,1,6,32,55,892,0,0), +(846,8,2048,1,6,33,55,892,0,0), +(847,8,2048,1,6,34,55,892,0,0), +(848,8,2048,1,6,35,55,892,0,0), +(849,8,2048,1,6,36,55,892,0,0), +(850,8,4095,1,7,0,56,894,0,0), +(851,8,2048,1,7,1,56,895,0,0), +(852,8,2048,1,7,2,56,896,0,0), +(853,8,2048,1,7,3,56,897,0,0), +(854,8,2048,1,7,4,56,898,0,0), +(855,8,2048,1,7,5,56,899,0,0), +(856,8,2048,1,7,6,56,900,0,0), +(857,8,2047,1,8,0,57,901,0,0), +(858,8,2048,1,8,1,57,902,0,0), +(859,8,2048,1,8,2,57,903,0,0), +(860,8,2048,1,8,3,57,904,0,0), +(861,8,2048,1,8,4,57,905,0,0), +(862,8,2048,1,8,5,57,906,0,0), +(863,16,4095,0,1,0,58,913,0,0), +(864,16,4095,0,1,1,58,914,0,0), +(865,16,4095,0,1,2,58,915,0,0), +(866,16,4095,0,1,3,58,916,0,0), +(867,16,4095,0,1,4,58,917,0,0), +(868,16,4095,0,1,5,58,918,0,0), +(869,16,4095,0,1,6,58,919,0,0), +(870,16,4095,0,2,0,59,920,0,0), +(871,16,4095,0,2,1,59,921,0,0), +(872,16,4095,0,2,2,59,922,0,0), +(873,16,4095,0,2,3,59,923,0,0), +(874,16,4095,0,2,4,59,924,0,0), +(875,16,4095,0,2,5,59,925,0,0), +(876,16,4095,0,2,6,59,926,0,0), +(877,16,4095,0,2,7,59,927,0,0), +(878,16,4095,0,2,8,59,928,0,0), +(879,16,4095,0,2,9,59,929,0,0), +(880,16,4095,0,2,10,59,920,0,0), +(881,16,4095,0,2,11,59,921,0,0), +(882,16,4095,0,2,12,59,922,0,0), +(883,16,4095,0,2,13,59,923,0,0), +(884,16,4095,0,2,14,59,924,0,0), +(885,16,4095,0,2,15,59,925,0,0), +(886,16,4095,0,2,16,59,926,0,0), +(887,16,4095,0,2,17,59,927,0,0), +(888,16,4095,0,2,18,59,928,0,0), +(889,16,4095,0,2,19,59,929,0,0), +(890,16,4095,0,3,0,60,940,0,0), +(891,16,4095,0,3,1,60,941,0,0), +(892,16,4095,0,3,2,60,942,0,0), +(893,16,4095,0,3,3,60,943,0,0), +(894,16,4095,0,3,4,60,944,0,0), +(895,16,4095,0,3,5,60,945,0,0), +(896,16,4095,0,3,6,60,946,0,0), +(897,16,4095,0,3,7,60,947,0,0), +(898,16,4095,0,3,8,60,948,0,0), +(899,16,4095,0,3,9,60,949,0,0), +(900,16,4095,0,3,10,60,950,0,0), +(901,16,4095,0,3,11,60,951,0,0), +(902,16,4095,0,3,12,60,952,0,0), +(903,16,4095,0,3,13,60,953,0,0), +(904,16,4095,0,3,14,60,954,0,0), +(905,16,4095,0,3,15,60,955,0,0), +(906,16,4095,0,4,0,61,956,0,0), +(907,16,4095,0,4,1,61,957,0,0), +(908,16,4095,0,4,2,61,958,0,0), +(909,16,4095,0,4,3,61,959,0,0), +(910,16,4095,0,4,4,61,960,0,0), +(911,16,4095,0,4,5,61,961,0,0), +(912,16,4095,0,4,6,61,962,0,0), +(913,16,4095,0,4,7,61,963,0,0), +(914,16,4095,0,4,8,61,964,0,0), +(915,16,4095,0,4,9,61,965,0,0), +(916,16,4095,0,4,10,61,966,0,0), +(917,16,4095,0,5,0,62,967,0,0), +(918,16,4095,0,5,1,62,968,0,0), +(919,16,4095,0,5,2,62,967,0,0), +(920,16,4095,0,5,3,62,969,0,0), +(921,16,4095,0,5,4,62,971,0,0), +(922,16,4095,0,5,5,62,967,0,0), +(923,16,4095,0,5,6,62,969,0,0), +(924,16,4095,0,5,7,62,971,0,0), +(925,16,4095,0,5,8,62,975,0,0), +(926,16,4095,0,5,9,62,976,0,0), +(927,16,4095,0,5,10,62,977,0,0), +(928,16,4095,0,5,11,62,978,0,0), +(929,16,4095,0,5,12,62,979,0,0), +(930,16,4095,0,5,13,62,980,0,0), +(931,16,4095,0,5,14,62,967,0,0), +(932,16,4095,0,5,15,62,969,0,0), +(933,16,4095,0,5,16,62,983,0,0), +(934,16,4095,1,1,0,63,984,0,0), +(935,16,4095,1,1,1,63,985,0,0), +(936,16,4095,1,1,2,63,986,0,0), +(937,16,4095,1,1,3,63,987,0,0), +(938,16,4095,1,1,4,63,988,0,0), +(939,16,4095,1,1,5,63,989,0,0), +(940,16,4095,1,1,6,63,990,0,0), +(941,16,4095,1,2,0,64,991,0,0), +(942,16,4095,1,2,1,64,992,0,0), +(943,16,4095,1,2,2,64,993,0,0), +(944,16,4095,1,2,3,64,994,0,0), +(945,16,4095,1,2,4,64,995,0,0), +(946,16,4095,1,2,5,64,996,0,0), +(947,16,4095,1,2,6,64,997,0,0), +(948,16,4095,1,2,7,64,998,0,0), +(949,16,4095,1,2,8,64,999,0,0), +(950,16,4095,1,2,9,64,1000,0,0), +(951,16,4095,1,2,10,64,991,0,0), +(952,16,4095,1,2,11,64,992,0,0), +(953,16,4095,1,2,12,64,993,0,0), +(954,16,4095,1,2,13,64,994,0,0), +(955,16,4095,1,2,14,64,995,0,0), +(956,16,4095,1,2,15,64,996,0,0), +(957,16,4095,1,2,16,64,997,0,0), +(958,16,4095,1,2,17,64,998,0,0), +(959,16,4095,1,2,18,64,999,0,0), +(960,16,4095,1,2,19,64,1000,0,0), +(961,16,4095,1,3,0,65,1011,0,0), +(962,16,4095,1,3,1,65,1012,0,0), +(963,16,4095,1,3,2,65,1013,0,0), +(964,16,4095,1,3,3,65,1014,0,0), +(965,16,4095,1,3,4,65,1015,0,0), +(966,16,4095,1,3,5,65,1016,0,0), +(967,16,4095,1,3,6,65,1017,0,0), +(968,16,4095,1,3,7,65,1018,0,0), +(969,16,4095,1,3,8,65,1019,0,0), +(970,16,4095,1,3,9,65,1020,0,0), +(971,16,4095,1,3,10,65,1021,0,0), +(972,16,4095,1,3,11,65,1022,0,0), +(973,16,4095,1,3,12,65,1023,0,0), +(974,16,4095,1,3,13,65,1024,0,0), +(975,16,4095,1,3,14,65,1025,0,0), +(976,16,4095,1,4,0,66,1026,0,0), +(977,16,4095,1,4,1,66,1027,0,0), +(978,16,4095,1,4,2,66,1028,0,0), +(979,16,4095,1,4,3,66,1029,0,0), +(980,16,4095,1,4,4,66,1030,0,0), +(981,16,4095,1,4,5,66,1031,0,0), +(982,16,4095,1,4,6,66,1032,0,0), +(983,16,4095,1,4,7,66,1033,0,0), +(984,16,4095,1,4,8,66,1034,0,0), +(985,16,4095,1,4,9,66,1035,0,0), +(986,16,4095,1,4,10,66,1036,0,0), +(987,16,4095,1,5,0,67,1037,0,0), +(988,16,4095,1,5,1,67,1038,0,0), +(989,16,4095,1,5,2,559,6276,0,0), +(990,16,4095,1,5,3,559,6277,0,0), +(991,16,4095,1,5,4,67,1041,0,0), +(992,16,4095,1,5,5,67,1042,0,0), +(993,16,4095,1,5,6,67,1043,0,0), +(994,16,4095,1,5,7,559,6278,0,0), +(995,32,4095,0,1,0,68,1045,0,0), +(996,32,4095,0,1,1,68,1046,0,0), +(997,32,4095,0,1,2,68,1047,0,0), +(998,32,4095,0,1,3,68,1048,0,0), +(999,32,4095,0,1,4,68,1049,0,0), +(1000,32,4095,0,1,5,68,1050,0,0), +(1001,32,4095,0,1,6,68,1051,0,0), +(1002,32,4095,0,1,7,68,1052,0,0), +(1003,32,4095,0,1,8,68,1053,0,0), +(1004,32,4095,0,1,9,68,1054,0,0), +(1005,32,4095,0,1,10,68,1055,0,0), +(1006,32,4095,0,1,11,68,1056,0,0), +(1007,32,4095,0,1,12,68,1057,0,0), +(1008,32,4095,0,1,13,68,1058,0,0), +(1009,32,4095,0,1,14,68,1059,0,0), +(1010,32,4095,0,1,15,68,1060,0,0), +(1011,32,4095,0,1,16,68,1061,0,0), +(1012,32,4095,0,1,17,68,1062,0,0), +(1013,32,4095,0,1,18,68,1063,0,0), +(1014,32,32,0,1,19,68,1064,0,0), +(1015,32,32,0,1,20,68,1065,0,0), +(1016,32,32,0,1,21,68,1066,0,0), +(1017,32,4095,0,1,22,68,1067,0,0), +(1018,32,4095,0,1,23,68,1068,0,0), +(1019,32,4095,0,1,24,68,1069,0,0), +(1020,32,4095,0,1,25,68,1070,0,0), +(1021,32,4095,0,1,26,68,1071,0,0), +(1022,32,4095,0,1,27,68,1072,0,0), +(1023,32,4095,0,1,28,68,1073,0,0), +(1024,32,4063,0,2,0,378,1074,1,0), +(1025,32,4063,0,2,1,378,1075,0,0), +(1026,32,4063,0,2,2,378,1076,1,0), +(1027,32,4063,0,2,3,378,1077,0,0), +(1028,32,4063,0,2,4,378,1078,1,0), +(1029,32,32,0,2,5,378,1079,0,0), +(1030,32,32,0,2,6,378,1080,0,0), +(1031,32,32,0,2,7,378,1081,0,0), +(1032,32,32,0,2,8,378,1082,0,0), +(1033,32,32,0,2,9,378,1083,0,0), +(1034,32,4095,0,3,0,71,1084,0,0), +(1035,32,4095,0,3,1,71,1085,0,0), +(1036,32,4095,0,3,2,71,1086,0,0), +(1037,32,4095,0,3,3,71,1087,0,0), +(1038,32,4095,0,3,4,71,1088,0,0), +(1039,32,4095,0,3,5,71,1089,0,0), +(1040,32,4095,0,3,6,71,1090,0,0), +(1041,32,4095,0,3,7,71,1091,0,0), +(1042,32,4095,0,3,8,71,1092,0,0), +(1043,32,4095,0,3,9,71,1093,0,0), +(1044,32,4095,0,3,10,71,1094,0,0), +(1045,32,4095,0,3,11,71,1095,0,0), +(1046,32,4095,0,3,12,71,1096,0,0), +(1047,32,4095,0,3,13,71,1097,0,0), +(1048,32,4095,0,3,14,71,1098,0,0), +(1049,32,4095,0,3,15,71,1099,0,0), +(1050,32,4095,0,4,0,72,1100,0,0), +(1051,32,4095,0,4,1,72,1101,0,0), +(1052,32,4095,0,4,2,72,1102,0,0), +(1053,32,4095,0,4,3,72,1103,0,0), +(1054,32,4095,0,4,4,72,1104,0,0), +(1055,32,4095,0,4,5,72,1105,0,0), +(1056,32,4095,0,4,6,72,1106,0,0), +(1057,32,4095,0,5,0,73,1107,0,0), +(1058,32,4095,0,5,1,73,1108,0,0), +(1059,32,4095,0,5,2,73,1109,0,0), +(1060,32,4095,0,5,3,73,1110,0,0), +(1061,32,4095,0,5,4,73,1111,0,0), +(1062,32,4095,0,5,5,73,1107,0,0), +(1063,32,4095,0,5,6,73,1112,0,0), +(1064,32,4095,1,1,0,74,1114,0,0), +(1065,32,4095,1,1,1,74,1115,0,0), +(1066,32,4095,1,1,2,74,1116,0,0), +(1067,32,4095,1,1,3,74,1117,0,0), +(1068,32,4095,1,1,4,74,1118,0,0), +(1069,32,4095,1,1,5,74,1119,0,0), +(1070,32,4095,1,1,6,74,1120,0,0), +(1071,32,4095,1,1,7,74,1121,0,0), +(1072,32,4095,1,1,8,74,1122,0,0), +(1073,32,4095,1,1,9,74,1123,0,0), +(1074,32,4095,1,1,10,74,1124,0,0), +(1075,32,32,1,1,11,74,1125,0,0), +(1076,32,32,1,1,12,74,1126,0,0), +(1077,32,32,1,1,13,74,1127,0,0), +(1085,32,4063,1,2,0,379,1135,1,0), +(1086,32,4063,1,2,1,379,1136,0,0), +(1087,32,4063,1,2,2,379,1137,1,0), +(1088,32,4063,1,2,3,379,1138,1,0), +(1089,32,32,1,2,4,379,1139,0,0), +(1090,32,32,1,2,5,379,1140,0,0), +(1091,32,32,1,2,6,379,1141,0,0), +(1092,32,32,1,2,7,379,1142,0,0), +(1093,32,4095,1,3,0,77,1143,0,0), +(1094,32,4095,1,3,1,77,1144,0,0), +(1095,32,4095,1,3,2,77,1145,0,0), +(1096,32,4095,1,3,3,77,1146,0,0), +(1097,32,4095,1,3,4,77,1147,0,0), +(1098,32,4095,1,3,5,77,1148,0,0), +(1099,32,4095,1,3,6,77,1149,0,0), +(1100,32,4095,1,3,7,77,1150,0,0), +(1101,32,4095,1,3,8,77,1151,0,0), +(1102,32,4095,1,3,9,77,1152,0,0), +(1103,32,4095,1,3,10,77,1153,0,0), +(1104,32,4095,1,3,11,77,1154,0,0), +(1105,32,4095,1,3,12,77,1155,0,0), +(1106,32,4095,1,3,13,77,1156,0,0), +(1107,32,4095,1,3,14,77,1157,0,0), +(1108,32,4095,1,3,15,77,1158,0,0), +(1109,32,4095,1,3,16,77,1159,0,0), +(1110,32,4095,1,3,17,77,1160,0,0), +(1111,32,4095,1,4,0,78,1161,0,0), +(1112,32,4095,1,4,1,78,1162,0,0), +(1113,32,4095,1,4,2,78,1163,0,0), +(1114,32,4095,1,4,3,78,1164,0,0), +(1115,32,4095,1,4,4,78,1165,0,0), +(1116,32,4095,1,4,5,78,1166,0,0), +(1117,32,4095,1,4,6,78,1167,0,0), +(1118,32,4095,1,4,7,78,1168,0,0), +(1119,32,4095,1,5,0,79,1169,0,0), +(1120,32,4095,1,5,1,79,1170,0,0), +(1121,32,4095,1,5,2,79,1171,0,0), +(1122,32,4095,1,5,3,79,1172,0,0), +(1123,32,4095,1,5,4,79,1173,0,0), +(1124,64,4095,0,1,0,80,1174,0,0), +(1125,64,4095,0,1,1,80,1175,0,0), +(1126,64,4095,0,1,2,80,1176,0,0), +(1127,64,4095,0,1,3,80,1177,0,0), +(1128,64,4095,0,1,4,80,1178,0,0), +(1129,64,4095,0,1,5,80,1179,0,0), +(1130,64,4095,0,1,6,80,1180,0,0), +(1131,64,32,0,1,7,80,1181,0,0), +(1132,64,32,0,1,8,80,1182,0,0), +(1133,64,32,0,1,9,80,1183,0,0), +(1134,64,4095,0,1,10,80,1184,0,0), +(1135,64,4063,0,2,0,81,1185,1,0), +(1136,64,4063,0,2,1,81,1186,0,0), +(1137,64,4063,0,2,2,81,1187,1,0), +(1138,64,4063,0,2,3,81,1188,1,0), +(1139,64,4063,0,2,4,81,1189,0,0), +(1140,64,4063,0,2,5,81,1190,0,0), +(1141,64,4063,0,2,6,81,1191,0,0), +(1142,64,32,0,2,7,81,1192,0,0), +(1143,64,32,0,2,8,81,1193,0,0), +(1144,64,32,0,2,9,81,1194,0,0), +(1145,64,32,0,2,10,81,1195,0,0), +(1146,64,32,0,2,11,81,1196,0,0), +(1147,64,32,0,2,12,81,1197,0,0), +(1148,64,32,0,2,13,81,1198,0,0), +(1149,64,4095,0,3,0,82,1199,0,0), +(1150,64,4095,0,3,1,82,1200,0,0), +(1151,64,4095,0,3,2,82,1201,0,0), +(1152,64,4095,0,3,3,82,1202,0,0), +(1153,64,4095,0,3,4,82,1203,0,0), +(1154,64,4095,0,3,5,82,1204,0,0), +(1155,64,4095,0,3,6,82,1205,0,0), +(1156,64,4095,0,3,7,82,1206,0,0), +(1157,64,4095,0,3,8,82,1207,0,0), +(1158,64,4095,0,3,9,82,1208,0,0), +(1159,64,4095,0,3,10,82,1209,0,0), +(1160,64,4095,0,3,11,82,1210,0,0), +(1161,64,4095,0,3,12,82,1211,0,0), +(1162,64,4095,0,3,13,82,1212,0,0), +(1163,64,4095,0,3,14,82,1213,0,0), +(1164,64,4095,0,4,0,83,1214,0,0), +(1165,64,4095,0,4,1,83,1215,0,0), +(1166,64,4095,0,4,2,83,1216,0,0), +(1167,64,4095,0,4,3,83,1217,0,0), +(1168,64,4095,0,4,4,83,1218,0,0), +(1169,64,4095,0,4,5,83,1219,0,0), +(1170,64,4095,0,4,6,83,1220,0,0), +(1171,64,4095,0,4,7,83,1221,0,0), +(1172,64,4095,0,4,8,83,1222,0,0), +(1173,64,4095,0,4,9,83,1223,0,0), +(1174,64,4095,0,4,10,83,1224,0,0), +(1175,64,4095,0,4,11,83,1225,0,0), +(1176,64,4095,0,4,12,83,1226,0,0), +(1177,64,4095,0,5,0,84,1227,0,0), +(1178,64,4095,0,5,1,84,1228,0,0), +(1179,64,4095,0,5,2,84,1229,0,0), +(1180,64,4095,0,5,3,84,1230,0,0), +(1181,64,4095,0,5,4,84,1231,0,0), +(1182,64,4095,0,5,5,84,1232,0,0), +(1183,64,4095,0,5,6,84,1233,0,0), +(1184,64,4095,0,5,7,84,1227,0,0), +(1185,64,4095,1,1,0,85,1235,0,0), +(1186,64,4095,1,1,1,85,1236,0,0), +(1187,64,4095,1,1,2,85,1237,0,0), +(1188,64,4095,1,1,3,85,1238,0,0), +(1189,64,4095,1,1,4,85,1239,0,0), +(1190,64,4095,1,1,5,85,1240,0,0), +(1191,64,4095,1,1,6,85,1241,0,0), +(1192,64,32,1,1,7,85,1242,0,0), +(1193,64,32,1,1,8,85,1243,0,0), +(1194,64,32,1,1,9,85,1244,0,0), +(1195,64,4095,1,1,10,85,1245,0,0), +(1196,64,4063,1,2,0,86,1246,1,0), +(1197,64,4063,1,2,1,86,1247,0,0), +(1198,64,4063,1,2,2,86,1248,0,0), +(1199,64,4063,1,2,3,86,1249,1,0), +(1200,64,4063,1,2,4,86,1250,0,0), +(1201,64,4063,1,2,5,86,1251,1,0), +(1202,64,4063,1,2,6,86,1252,0,0), +(1203,64,32,1,2,7,86,1253,0,0), +(1204,64,32,1,2,8,86,1254,0,0), +(1205,64,32,1,2,9,86,1255,0,0), +(1206,64,32,1,2,10,86,1256,0,0), +(1207,64,32,1,2,11,86,1257,0,0), +(1208,64,32,1,2,12,86,1258,0,0), +(1209,64,32,1,2,13,86,1259,0,0), +(1210,64,4095,1,3,0,87,1260,0,0), +(1211,64,4095,1,3,1,87,1261,0,0), +(1212,64,4095,1,3,2,87,1262,0,0), +(1213,64,4095,1,3,3,87,1263,0,0), +(1214,64,4095,1,3,4,87,1264,0,0), +(1215,64,4095,1,3,5,87,1265,0,0), +(1216,64,4095,1,3,6,87,1266,0,0), +(1217,64,4095,1,3,7,87,1267,0,0), +(1218,64,4095,1,3,8,87,1268,0,0), +(1219,64,4095,1,3,9,87,1269,0,0), +(1220,64,4095,1,3,10,87,1270,0,0), +(1221,64,4095,1,3,11,87,1271,0,0), +(1222,64,4095,1,3,12,87,1272,0,0), +(1223,64,4095,1,3,13,87,1273,0,0), +(1224,64,4095,1,3,14,87,1274,0,0), +(1225,64,4095,1,3,15,87,1275,0,0), +(1226,64,4095,1,4,0,88,1276,0,0), +(1227,64,4095,1,4,1,88,1277,0,0), +(1228,64,4095,1,4,2,88,1278,0,0), +(1229,64,4095,1,4,3,88,1279,0,0), +(1230,64,4095,1,4,4,88,1280,0,0), +(1231,64,4095,1,4,5,88,1281,0,0), +(1232,64,4095,1,4,6,88,1282,0,0), +(1233,64,4095,1,4,7,88,1283,0,0), +(1234,64,4095,1,4,8,88,1284,0,0), +(1235,64,4095,1,4,9,88,1285,0,0), +(1236,64,4095,1,4,10,88,1286,0,0), +(1237,64,4095,1,4,11,88,1287,0,0), +(1238,64,4095,1,4,12,88,1288,0,0), +(1239,64,4095,1,5,0,89,1289,0,0), +(1240,64,4095,1,5,1,89,1290,0,0), +(1241,64,4095,1,5,2,89,1291,0,0), +(1242,64,4095,1,5,3,89,1292,0,0), +(1243,64,4095,1,5,4,89,1293,0,0), +(1244,64,4095,1,5,5,89,1294,0,0), +(1245,64,4095,1,5,6,89,1295,0,0), +(1246,128,4095,0,1,0,90,1296,0,0), +(1247,128,4095,0,1,1,90,1297,0,0), +(1248,128,4095,0,1,2,90,1298,0,0), +(1249,128,4095,0,1,3,90,1299,0,0), +(1250,128,4095,0,1,4,90,1300,0,0), +(1251,128,4095,0,1,5,90,1301,0,0), +(1252,128,4095,0,1,6,90,1302,0,0), +(1253,128,4095,0,1,7,90,1303,0,0), +(1254,128,4095,0,1,8,90,1304,0,0), +(1255,128,4095,0,1,9,90,1305,0,0), +(1256,128,4095,0,1,10,90,1306,0,0), +(1257,128,4095,0,1,11,90,1307,0,0), +(1258,128,4095,0,1,12,90,1308,0,0), +(1259,128,4095,0,1,13,90,1309,0,0), +(1260,128,4095,0,1,14,90,1310,0,0), +(1261,128,32,0,1,15,90,1311,0,0), +(1262,128,32,0,1,16,90,1312,0,0), +(1263,128,32,0,1,17,90,1313,0,0), +(1264,128,4095,0,1,18,90,1314,0,0), +(1265,128,4063,0,2,0,91,1315,1,0), +(1266,128,4063,0,2,1,91,1316,1,0), +(1267,128,4063,0,2,2,91,1317,0,0), +(1268,128,4063,0,2,3,91,1318,1,0), +(1269,128,4063,0,2,4,91,1319,0,0), +(1270,128,32,0,2,5,91,1320,0,0), +(1271,128,32,0,2,6,91,1321,0,0), +(1272,128,32,0,2,7,91,1322,0,0), +(1273,128,32,0,2,8,91,1323,0,0), +(1274,128,32,0,2,9,91,1324,0,0), +(1275,128,4095,0,3,0,92,1325,0,0), +(1276,128,4095,0,3,1,92,1326,0,0), +(1277,128,4095,0,3,2,92,1327,0,0), +(1278,128,4095,0,3,3,92,1328,0,0), +(1279,128,4095,0,3,4,92,1329,0,0), +(1280,128,4095,0,3,5,92,1330,0,0), +(1281,128,4095,0,3,6,92,1331,0,0), +(1282,128,4095,0,3,7,92,1332,0,0), +(1283,128,4095,0,3,8,92,1333,0,0), +(1284,128,4095,0,3,9,92,1334,0,0), +(1285,128,4095,0,3,10,92,1335,0,0), +(1286,128,4095,0,3,11,92,1336,0,0), +(1287,128,4095,0,3,12,92,1337,0,0), +(1288,128,4095,0,4,0,93,1338,0,0), +(1289,128,4095,0,4,1,93,1339,0,0), +(1290,128,4095,0,4,2,93,1340,0,0), +(1291,128,4095,0,4,3,93,1341,0,0), +(1292,128,4095,0,4,4,93,1342,0,0), +(1293,128,4095,0,4,5,93,1343,0,0), +(1294,128,4095,0,4,6,93,1344,0,0), +(1295,128,4095,0,4,7,93,1345,0,0), +(1296,128,4095,0,4,8,93,1346,0,0), +(1297,128,4095,0,4,9,93,1347,0,0), +(1298,128,4095,0,4,10,93,1348,0,0), +(1299,128,4095,0,4,11,93,1349,0,0), +(1300,128,4095,0,4,12,93,1350,0,0), +(1301,128,4095,0,4,13,93,1351,0,0), +(1302,128,4095,0,5,0,94,1352,0,0), +(1303,128,4095,0,5,1,94,1353,0,0), +(1304,128,4095,0,5,2,94,1354,0,0), +(1305,128,4095,0,5,3,94,1355,0,0), +(1306,128,4095,0,5,4,94,1356,0,0), +(1307,128,4095,0,5,5,94,1352,0,0), +(1308,128,4095,0,5,6,94,1353,0,0), +(1309,128,4095,0,5,7,94,1354,0,0), +(1310,128,4095,0,5,8,94,1355,0,0), +(1311,128,4095,0,5,9,94,1356,0,0), +(1312,128,4095,0,5,10,94,1354,0,0), +(1313,128,4095,1,1,0,95,1363,0,0), +(1314,128,4095,1,1,1,95,1364,0,0), +(1315,128,4095,1,1,2,95,1365,0,0), +(1316,128,4095,1,1,3,95,1366,0,0), +(1317,128,4095,1,1,4,95,1367,0,0), +(1318,128,4095,1,1,5,95,1368,0,0), +(1319,128,4095,1,1,6,95,1369,0,0), +(1320,128,4095,1,1,7,95,1370,0,0), +(1321,128,4095,1,1,8,95,1371,0,0), +(1322,128,4095,1,1,9,95,1372,0,0), +(1323,128,4095,1,1,10,95,1373,0,0), +(1324,128,4095,1,1,11,95,1374,0,0), +(1325,128,4095,1,1,12,95,1375,0,0), +(1326,128,4095,1,1,13,95,1376,0,0), +(1327,128,4095,1,1,14,95,1377,0,0), +(1328,128,32,1,1,15,95,1378,0,0), +(1329,128,32,1,1,16,95,1379,0,0), +(1330,128,32,1,1,17,95,1380,0,0), +(1331,128,4095,1,1,18,95,1381,0,0), +(1332,128,4063,1,2,0,96,1382,1,0), +(1333,128,4063,1,2,1,96,1383,0,0), +(1334,128,4063,1,2,2,96,1384,0,0), +(1335,128,4063,1,2,3,96,1385,1,0), +(1336,128,4063,1,2,4,96,1386,0,0), +(1337,128,4063,1,2,5,96,1387,1,0), +(1338,128,32,1,2,6,96,1388,0,0), +(1339,128,32,1,2,7,96,1389,0,0), +(1340,128,32,1,2,8,96,1390,0,0), +(1341,128,32,1,2,9,96,1391,0,0), +(1342,128,32,1,2,10,96,1392,0,0), +(1343,128,32,1,2,11,96,1393,0,0), +(1344,128,4095,1,3,0,97,1394,0,0), +(1345,128,4095,1,3,1,97,1395,0,0), +(1346,128,4095,1,3,2,97,1396,0,0), +(1347,128,4095,1,3,3,97,1397,0,0), +(1348,128,4095,1,3,4,97,1398,0,0), +(1349,128,4095,1,3,5,97,1399,0,0), +(1350,128,4095,1,3,6,97,1400,0,0), +(1351,128,4095,1,3,7,97,1401,0,0), +(1352,128,4095,1,3,8,97,1402,0,0), +(1353,128,4095,1,3,9,97,1403,0,0), +(1354,128,4095,1,3,10,97,1404,0,0), +(1355,128,4095,1,3,11,97,1405,0,0), +(1356,128,4095,1,4,0,98,1406,0,0), +(1357,128,4095,1,4,1,98,1407,0,0), +(1358,128,4095,1,4,2,98,1408,0,0), +(1359,128,4095,1,4,3,98,1409,0,0), +(1360,128,4095,1,4,4,98,1410,0,0), +(1361,128,4095,1,4,5,98,1411,0,0), +(1362,128,4095,1,4,6,98,1412,0,0), +(1363,128,4095,1,4,7,98,1413,0,0), +(1364,128,4095,1,4,8,98,1414,0,0), +(1365,128,4095,1,4,9,98,1415,0,0), +(1366,128,4095,1,4,10,98,1416,0,0), +(1367,128,4095,1,4,11,98,1417,0,0), +(1368,128,4095,1,4,12,98,1418,0,0), +(1369,128,4095,1,4,13,98,1419,0,0), +(1370,128,4095,1,5,0,99,1420,0,0), +(1371,128,4095,1,5,1,99,1421,0,0), +(1372,128,4095,1,5,2,99,1422,0,0), +(1373,128,4095,1,5,3,99,1423,0,0), +(1374,128,4095,1,5,4,99,1424,0,0), +(1375,128,4095,1,5,5,99,1425,0,0), +(1376,256,4095,0,1,0,100,1426,0,0), +(1377,256,4095,0,1,1,100,1427,0,0), +(1378,256,4095,0,1,2,100,1428,0,0), +(1379,256,4095,0,1,3,100,1429,0,0), +(1380,256,4095,0,1,4,100,1430,0,0), +(1381,256,4095,0,1,5,100,1431,0,0), +(1382,256,4095,0,1,6,100,1432,0,0), +(1383,256,4095,0,1,7,100,1433,0,0), +(1384,256,4095,0,1,8,100,1434,0,0), +(1385,256,32,0,1,9,100,1435,0,0), +(1386,256,32,0,1,10,100,1436,0,0), +(1387,256,32,0,1,11,100,1437,0,0), +(1388,256,4095,0,1,12,100,1438,0,0), +(1389,256,4095,0,1,13,100,1439,0,0), +(1390,256,4095,0,1,14,100,1440,0,0), +(1391,256,4095,0,1,15,100,1441,0,0), +(1392,256,4095,0,1,16,100,1442,0,0), +(1393,256,4095,0,1,17,100,1443,0,0), +(1394,256,4095,0,1,18,100,1444,0,0), +(1395,256,4095,0,1,19,100,1445,0,0), +(1396,256,4063,0,2,0,101,1446,1,0), +(1397,256,4063,0,2,1,101,1447,1,0), +(1398,256,4063,0,2,2,101,1448,1,0), +(1399,256,4063,0,2,3,101,1449,0,0), +(1400,256,4063,0,2,4,101,1450,0,0), +(1401,256,32,0,2,5,101,1451,0,0), +(1402,256,32,0,2,6,101,1452,0,0), +(1403,256,32,0,2,7,101,1453,0,0), +(1404,256,32,0,2,8,101,1454,0,0), +(1405,256,32,0,2,9,101,1455,0,0), +(1406,256,4095,0,3,0,102,1456,0,0), +(1407,256,4095,0,3,1,102,1457,0,0), +(1408,256,4095,0,3,2,102,1458,0,0), +(1409,256,4095,0,3,3,102,1459,0,0), +(1410,256,4095,0,3,4,102,1460,0,0), +(1411,256,4095,0,3,5,102,1461,0,0), +(1412,256,4095,0,3,6,102,1462,0,0), +(1413,256,4095,0,3,7,102,1463,0,0), +(1414,256,4095,0,3,8,102,1464,0,0), +(1415,256,4095,0,3,9,102,1465,0,0), +(1416,256,4095,0,3,10,102,1466,0,0), +(1417,256,4095,0,3,11,102,1467,0,0), +(1418,256,4095,0,3,12,102,1468,0,0), +(1419,256,4095,0,3,13,102,1469,0,0), +(1420,256,4095,0,3,14,102,1470,0,0), +(1421,256,4095,0,3,15,102,1471,0,0), +(1422,256,4095,0,3,16,102,1472,0,0), +(1423,256,4095,0,3,17,102,1473,0,0), +(1424,256,4095,0,3,18,102,1474,0,0), +(1425,256,4095,0,4,0,103,1475,0,0), +(1426,256,4095,0,4,1,103,1476,0,0), +(1427,256,4095,0,4,2,103,1477,0,0), +(1428,256,4095,0,4,3,103,1478,0,0), +(1429,256,4095,0,4,4,103,1479,0,0), +(1430,256,4095,0,4,5,103,1480,0,0), +(1431,256,4095,0,4,6,103,1481,0,0), +(1432,256,4095,0,4,7,103,1482,0,0), +(1433,256,4095,0,4,8,103,1483,0,0), +(1434,256,4095,0,4,9,103,1484,0,0), +(1435,256,4095,0,4,10,103,1485,0,0), +(1436,256,4095,0,4,11,103,1486,0,0), +(1437,256,4095,0,4,12,103,1487,0,0), +(1438,256,4095,0,5,0,104,1488,0,0), +(1439,256,4095,0,5,1,104,1489,0,0), +(1440,256,4095,0,5,2,104,1490,0,0), +(1441,256,4095,0,5,3,104,1491,0,0), +(1442,256,4095,0,5,4,104,1492,0,0), +(1443,256,4095,0,5,5,104,1493,0,0), +(1444,256,4095,0,5,6,104,1494,0,0), +(1445,256,4095,0,5,7,104,1489,0,0), +(1446,256,4095,0,5,8,104,1494,0,0), +(1447,256,4095,0,5,9,104,1491,0,0), +(1448,256,4095,0,5,10,104,1490,0,0), +(1449,256,4095,0,5,11,104,1488,0,0), +(1450,256,4095,0,5,12,104,1488,0,0), +(1451,256,4095,0,5,13,104,1489,0,0), +(1452,256,4095,0,5,14,104,1490,0,0), +(1453,256,4095,0,5,15,104,1491,0,0), +(1454,256,4095,0,5,16,104,1492,0,0), +(1455,256,4095,0,5,17,104,1493,0,0), +(1456,256,4095,0,5,18,104,1494,0,0), +(1457,256,4095,0,5,19,104,1489,0,0), +(1458,256,4095,0,5,20,104,1494,0,0), +(1459,256,4095,0,5,21,104,1491,0,0), +(1460,256,4095,0,5,22,104,1490,0,0), +(1461,256,4095,0,5,23,104,1488,0,0), +(1462,256,4095,0,5,24,104,1488,0,0), +(1463,256,4095,1,1,0,105,1513,0,0), +(1464,256,4095,1,1,1,105,1514,0,0), +(1465,256,4095,1,1,2,105,1515,0,0), +(1466,256,4095,1,1,3,105,1516,0,0), +(1467,256,4095,1,1,4,105,1517,0,0), +(1468,256,4095,1,1,5,105,1518,0,0), +(1469,256,4095,1,1,6,105,1519,0,0), +(1470,256,4095,1,1,7,105,1520,0,0), +(1471,256,4095,1,1,8,105,1521,0,0), +(1472,256,32,1,1,9,105,1522,0,0), +(1473,256,32,1,1,10,105,1523,0,0), +(1474,256,32,1,1,11,105,1524,0,0), +(1475,256,4095,1,1,12,105,1525,0,0), +(1476,256,4063,1,2,0,106,1526,1,0), +(1477,256,4063,1,2,1,106,1527,0,0), +(1478,256,4063,1,2,2,106,1528,0,0), +(1479,256,4063,1,2,3,106,1529,0,0), +(1480,256,4063,1,2,4,106,1530,0,0), +(1481,256,4063,1,2,5,106,1531,0,0), +(1482,256,4063,1,2,6,106,1532,1,0), +(1483,256,4063,1,2,7,106,1533,0,0), +(1484,256,4063,1,2,8,106,1534,0,0), +(1485,256,4063,1,2,9,106,1535,1,0), +(1486,256,32,1,2,10,106,1536,0,0), +(1487,256,32,1,2,11,106,1537,0,0), +(1488,256,32,1,2,12,106,1538,0,0), +(1489,256,32,1,2,13,106,1539,0,0), +(1490,256,32,1,2,14,106,1540,0,0), +(1491,256,32,1,2,15,106,1541,0,0), +(1492,256,32,1,2,16,106,1542,0,0), +(1493,256,32,1,2,17,106,1543,0,0), +(1494,256,4095,1,3,0,107,1544,0,0), +(1495,256,4095,1,3,1,107,1545,0,0), +(1496,256,4095,1,3,2,107,1546,0,0), +(1497,256,4095,1,3,3,107,1547,0,0), +(1498,256,4095,1,3,4,107,1548,0,0), +(1499,256,4095,1,3,5,107,1549,0,0), +(1500,256,4095,1,3,6,107,1550,0,0), +(1501,256,4095,1,3,7,107,1551,0,0), +(1502,256,4095,1,3,8,107,1552,0,0), +(1503,256,4095,1,3,9,107,1553,0,0), +(1504,256,4095,1,3,10,107,1554,0,0), +(1505,256,4095,1,3,11,107,1555,0,0), +(1506,256,4095,1,3,12,107,1556,0,0), +(1507,256,4095,1,3,13,107,1557,0,0), +(1508,256,4095,1,3,14,107,1558,0,0), +(1509,256,4095,1,3,15,107,1559,0,0), +(1510,256,4095,1,3,16,107,1560,0,0), +(1511,256,4095,1,4,0,108,1561,0,0), +(1512,256,4095,1,4,1,108,1562,0,0), +(1513,256,4095,1,4,2,108,1563,0,0), +(1514,256,4095,1,4,3,108,1564,0,0), +(1515,256,4095,1,4,4,108,1565,0,0), +(1516,256,4095,1,4,5,108,1566,0,0), +(1517,256,4095,1,4,6,108,1567,0,0), +(1518,256,4095,1,4,7,108,1568,0,0), +(1519,256,4095,1,4,8,108,1569,0,0), +(1520,256,4095,1,4,9,108,1570,0,0), +(1521,256,4095,1,4,10,108,1571,0,0), +(1522,256,4095,1,4,11,108,1572,0,0), +(1523,256,4095,1,4,12,108,1573,0,0), +(1524,256,4095,1,5,0,109,1574,0,0), +(1525,256,4095,1,5,1,109,1575,0,0), +(1526,256,4095,1,5,2,109,1576,0,0), +(1527,256,4095,1,5,3,109,1574,0,0), +(1528,256,4095,1,5,4,109,1574,0,0), +(1529,256,4095,1,5,5,109,1574,0,0), +(1530,256,4095,1,5,6,109,1575,0,0), +(1531,256,4095,1,5,7,109,1575,0,0), +(1532,256,4095,1,5,8,109,1576,0,0), +(1533,256,4095,1,5,9,109,1574,0,0), +(1534,256,4095,1,5,10,109,1574,0,0), +(1535,256,4095,1,5,11,109,1575,0,0), +(1536,256,4095,1,5,12,109,1574,0,0), +(1537,256,4095,1,5,13,109,1575,0,0), +(1538,256,4095,1,5,14,109,1576,0,0), +(1539,256,4095,1,5,15,109,1574,0,0), +(1540,256,4095,1,5,16,109,1574,0,0), +(1541,256,4095,1,5,17,109,1574,0,0), +(1542,256,4095,1,5,18,109,1575,0,0), +(1543,256,4095,1,5,19,109,1575,0,0), +(1544,256,4095,1,5,20,109,1576,0,0), +(1545,256,4095,1,5,21,109,1574,0,0), +(1546,256,4095,1,5,22,109,1574,0,0), +(1547,256,4095,1,5,23,109,1575,0,0), +(1548,256,4095,1,5,24,109,1574,0,0), +(1549,512,4095,0,1,0,110,1599,0,0), +(1550,512,4095,0,1,1,110,1600,0,0), +(1551,512,4095,0,1,2,110,1601,0,0), +(1552,512,4095,0,1,3,110,1602,0,0), +(1553,512,4095,0,1,4,110,1603,0,0), +(1554,512,4095,0,1,5,110,1604,0,0), +(1555,512,4095,0,1,6,110,1605,0,0), +(1556,512,4095,0,1,7,110,1606,0,0), +(1557,512,4095,0,1,8,110,1607,0,0), +(1558,512,4095,0,1,9,110,1608,0,0), +(1559,512,4095,0,1,10,110,1609,0,0), +(1560,512,4095,0,1,11,110,1610,0,0), +(1561,512,4095,0,1,12,110,1611,0,0), +(1562,512,4095,0,1,13,110,1612,0,0), +(1563,512,4095,0,1,14,110,1613,0,0), +(1564,512,4095,0,1,15,110,1614,0,0), +(1565,512,32,0,1,16,110,1615,0,0), +(1566,512,32,0,1,17,110,1616,0,0), +(1567,512,32,0,1,18,110,1617,0,0), +(1568,512,2048,0,1,19,110,1618,0,0), +(1569,512,2048,0,1,20,110,1619,0,0), +(1570,512,2048,0,1,21,110,1620,0,0), +(1571,512,2048,0,1,22,110,1621,0,0), +(1572,512,2048,0,1,23,110,1622,0,0), +(1573,512,2048,0,1,24,110,1623,0,0), +(1574,512,4095,0,1,25,110,1624,0,0), +(1575,512,4095,0,1,26,110,1625,0,0), +(1576,512,4063,0,2,0,111,1626,0,0), +(1577,512,4063,0,2,1,111,1627,0,0), +(1578,512,4063,0,2,2,111,1628,1,0), +(1579,512,4063,0,2,3,111,1629,0,0), +(1580,512,4063,0,2,4,111,1630,1,0), +(1581,512,4063,0,2,5,111,1631,0,0), +(1582,512,2015,0,2,6,111,1632,0,0), +(1583,512,2015,0,2,7,111,1633,1,0), +(1584,512,2015,0,2,8,111,1634,0,0), +(1585,512,2015,0,2,9,111,1635,0,0), +(1586,512,32,0,2,10,111,1636,0,0), +(1587,512,32,0,2,11,111,1637,0,0), +(1588,512,32,0,2,12,111,1638,0,0), +(1589,512,32,0,2,13,111,1639,0,0), +(1590,512,32,0,2,14,111,1640,0,0), +(1591,512,32,0,2,15,111,1641,0,0), +(1592,512,32,0,2,16,111,1642,0,0), +(1593,512,32,0,2,17,111,1643,0,0), +(1594,512,32,0,2,18,111,1644,0,0), +(1595,512,32,0,2,19,111,1645,0,0), +(1596,512,4063,0,2,20,111,1626,0,0), +(1597,512,4063,0,2,21,111,1627,0,0), +(1598,512,4063,0,2,22,111,1628,0,0), +(1599,512,4095,0,3,0,112,1649,0,0), +(1600,512,4095,0,3,1,112,1650,0,0), +(1601,512,4095,0,3,2,112,1651,0,0), +(1602,512,4095,0,3,3,112,1652,0,0), +(1603,512,4095,0,3,4,112,1653,0,0), +(1604,512,4095,0,3,5,112,1654,0,0), +(1605,512,4095,0,3,6,112,1655,0,0), +(1606,512,4095,0,3,7,112,1656,0,0), +(1607,512,4095,0,3,8,112,1657,0,0), +(1608,512,4095,0,3,9,112,1658,0,0), +(1609,512,4095,0,3,10,112,1659,0,0), +(1610,512,4095,0,3,11,112,1660,0,0), +(1611,512,4095,0,3,12,112,1661,0,0), +(1612,512,4095,0,3,13,112,1662,0,0), +(1613,512,4095,0,3,14,112,1663,0,0), +(1614,512,4095,0,3,15,112,1664,0,0), +(1615,512,4095,0,3,16,112,1665,0,0), +(1616,512,4095,0,4,0,113,1666,0,0), +(1617,512,4095,0,4,1,113,1667,0,0), +(1618,512,4095,0,4,2,113,1668,0,0), +(1619,512,4095,0,4,3,113,1669,0,0), +(1620,512,4095,0,4,4,113,1670,0,0), +(1621,512,4095,0,4,5,113,1671,0,0), +(1622,512,4095,0,4,6,113,1672,0,0), +(1623,512,4095,0,4,7,113,1673,0,0), +(1624,512,4095,0,4,8,113,1674,0,0), +(1625,512,4095,0,4,9,113,1675,0,0), +(1626,512,4095,0,4,10,113,1676,0,0), +(1627,512,4095,0,4,11,113,1677,0,0), +(1628,512,4095,0,4,12,113,1678,0,0), +(1629,512,4095,0,4,13,113,1679,0,0), +(1630,512,4095,0,5,0,114,1680,0,0), +(1631,512,4095,0,5,1,114,1681,0,0), +(1632,512,4095,0,5,2,114,1682,0,0), +(1633,512,4095,0,5,3,114,1683,0,0), +(1634,512,4095,0,5,4,114,1684,0,0), +(1635,512,4095,0,5,5,114,1685,0,0), +(1636,512,4095,0,5,6,114,1686,0,0), +(1637,512,4095,0,5,7,114,1687,0,0), +(1638,512,4095,0,5,8,114,1688,0,0), +(1639,512,4095,0,5,9,114,1689,0,0), +(1640,512,4095,0,5,10,114,1680,0,0), +(1641,512,4095,0,5,11,114,1681,0,0), +(1642,512,4095,0,5,12,114,1682,0,0), +(1643,512,4095,0,5,13,114,1683,0,0), +(1644,512,4095,0,5,14,114,1684,0,0), +(1645,512,4095,0,5,15,114,1685,0,0), +(1646,512,4095,0,5,16,114,1686,0,0), +(1647,512,4095,0,5,17,114,1687,0,0), +(1648,512,4095,0,5,18,114,1688,0,0), +(1649,512,4095,0,5,19,114,1689,0,0), +(1650,512,4095,0,6,0,380,1700,0,0), +(1651,512,2048,0,6,1,380,1701,0,0), +(1652,512,2048,0,6,7,380,1701,0,0), +(1653,512,2048,0,6,13,380,1701,0,0), +(1654,512,2048,0,6,19,380,1701,0,0), +(1655,512,2048,0,6,25,380,1701,0,0), +(1656,512,2048,0,6,31,380,1701,0,0), +(1657,512,2048,0,6,2,380,1702,0,0), +(1658,512,2048,0,6,8,380,1702,0,0), +(1659,512,2048,0,6,14,380,1702,0,0), +(1660,512,2048,0,6,20,380,1702,0,0), +(1661,512,2048,0,6,26,380,1702,0,0), +(1662,512,2048,0,6,32,380,1702,0,0), +(1663,512,2048,0,6,3,380,1703,0,0), +(1664,512,2048,0,6,9,380,1703,0,0), +(1665,512,2048,0,6,15,380,1703,0,0), +(1666,512,2048,0,6,21,380,1703,0,0), +(1667,512,2048,0,6,27,380,1703,0,0), +(1668,512,2048,0,6,33,380,1703,0,0), +(1669,512,2048,0,6,4,380,1704,0,0), +(1670,512,2048,0,6,10,380,1704,0,0), +(1671,512,2048,0,6,16,380,1704,0,0), +(1672,512,2048,0,6,22,380,1704,0,0), +(1673,512,2048,0,6,28,380,1704,0,0), +(1674,512,2048,0,6,34,380,1704,0,0), +(1675,512,2048,0,6,5,380,1705,0,0), +(1676,512,2048,0,6,11,380,1705,0,0), +(1677,512,2048,0,6,17,380,1705,0,0), +(1678,512,2048,0,6,23,380,1705,0,0), +(1679,512,2048,0,6,29,380,1705,0,0), +(1680,512,2048,0,6,35,380,1705,0,0), +(1681,512,2048,0,6,6,380,3713,0,0), +(1682,512,2048,0,6,12,380,3713,0,0), +(1683,512,2048,0,6,18,380,3713,0,0), +(1684,512,2048,0,6,24,380,3713,0,0), +(1685,512,2048,0,6,30,380,3713,0,0), +(1686,512,2048,0,6,36,380,3713,0,0), +(1687,512,4095,0,6,0,116,1706,0,0), +(1688,512,2048,0,6,1,116,1707,0,0), +(1689,512,2048,0,6,2,116,1707,0,0), +(1690,512,2048,0,6,3,116,1707,0,0), +(1691,512,2048,0,6,4,116,1707,0,0), +(1692,512,2048,0,6,5,116,1707,0,0), +(1693,512,2048,0,6,6,116,1707,0,0), +(1694,512,2048,0,6,7,116,1708,0,0), +(1695,512,2048,0,6,8,116,1708,0,0), +(1696,512,2048,0,6,9,116,1708,0,0), +(1697,512,2048,0,6,10,116,1708,0,0), +(1698,512,2048,0,6,11,116,1708,0,0), +(1699,512,2048,0,6,12,116,1708,0,0), +(1700,512,2048,0,6,13,116,1709,0,0), +(1701,512,2048,0,6,14,116,1709,0,0), +(1702,512,2048,0,6,15,116,1709,0,0), +(1703,512,2048,0,6,16,116,1709,0,0), +(1704,512,2048,0,6,17,116,1709,0,0), +(1705,512,2048,0,6,18,116,1709,0,0), +(1706,512,2048,0,6,19,116,1710,0,0), +(1707,512,2048,0,6,20,116,1710,0,0), +(1708,512,2048,0,6,21,116,1710,0,0), +(1709,512,2048,0,6,22,116,1710,0,0), +(1710,512,2048,0,6,23,116,1710,0,0), +(1711,512,2048,0,6,24,116,1710,0,0), +(1712,512,2048,0,6,25,116,1711,0,0), +(1713,512,2048,0,6,26,116,1711,0,0), +(1714,512,2048,0,6,27,116,1711,0,0), +(1715,512,2048,0,6,28,116,1711,0,0), +(1716,512,2048,0,6,29,116,1711,0,0), +(1717,512,2048,0,6,30,116,1711,0,0), +(1724,512,2048,0,6,31,116,9931,0,0), +(1725,512,2048,0,6,32,116,9931,0,0), +(1726,512,2048,0,6,33,116,9931,0,0), +(1727,512,2048,0,6,34,116,9931,0,0), +(1728,512,2048,0,6,35,116,9931,0,0), +(1729,512,2048,0,6,36,116,9931,0,0), +(1730,512,4095,0,7,0,117,1713,0,0), +(1731,512,2048,0,7,1,117,1714,0,0), +(1732,512,2048,0,7,2,117,1715,0,0), +(1733,512,2048,0,7,3,117,1716,0,0), +(1734,512,2048,0,7,4,117,1717,0,0), +(1735,512,2048,0,7,5,117,1718,0,0), +(1736,512,2048,0,7,6,117,1719,0,0), +(1737,512,2047,0,8,0,118,1720,0,0), +(1738,512,2048,0,8,1,118,1721,0,0), +(1739,512,2048,0,8,2,118,1722,0,0), +(1740,512,2048,0,8,3,118,1723,0,0), +(1741,512,2048,0,8,4,118,1724,0,0), +(1742,512,2048,0,8,5,118,1725,0,0), +(1743,512,4095,1,1,0,119,1732,0,0), +(1744,512,4095,1,1,1,119,1733,0,0), +(1745,512,4095,1,1,2,119,1734,0,0), +(1746,512,4095,1,1,3,119,1735,0,0), +(1747,512,4095,1,1,4,119,1736,0,0), +(1748,512,4095,1,1,5,119,1737,0,0), +(1749,512,4095,1,1,6,119,1738,0,0), +(1750,512,4095,1,1,7,119,1739,0,0), +(1751,512,4095,1,1,8,119,1740,0,0), +(1752,512,4095,1,1,9,119,1741,0,0), +(1753,512,4095,1,1,10,119,1742,0,0), +(1754,512,4095,1,1,11,119,1743,0,0), +(1755,512,4095,1,1,12,119,1744,0,0), +(1756,512,4095,1,1,13,119,1745,0,0), +(1757,512,4095,1,1,14,119,1746,0,0), +(1758,512,4095,1,1,15,119,1747,0,0), +(1759,512,32,1,1,16,119,1748,0,0), +(1760,512,32,1,1,17,119,1749,0,0), +(1761,512,32,1,1,18,119,1750,0,0), +(1762,512,2048,1,1,19,119,1751,0,0), +(1763,512,2048,1,1,20,119,1752,0,0), +(1764,512,2048,1,1,21,119,1753,0,0), +(1765,512,2048,1,1,22,119,1754,0,0), +(1766,512,2048,1,1,23,119,1755,0,0), +(1767,512,2048,1,1,24,119,1756,0,0), +(1768,512,4095,1,1,25,119,1757,0,0), +(1769,512,4063,1,2,0,120,1758,1,0), +(1770,512,4063,1,2,1,120,1759,0,0), +(1771,512,4063,1,2,2,120,1760,0,0), +(1772,512,4063,1,2,3,120,1761,1,0), +(1773,512,4063,1,2,4,120,1762,0,0), +(1774,512,4063,1,2,5,120,1763,0,0), +(1775,512,2015,1,2,6,120,1764,0,0), +(1776,512,2015,1,2,7,120,1765,0,0), +(1777,512,2015,1,2,8,120,1766,1,0), +(1778,512,2015,1,2,9,120,1767,0,0), +(1779,512,32,1,2,10,120,1768,0,0), +(1780,512,32,1,2,11,120,1769,0,0), +(1781,512,32,1,2,12,120,1770,0,0), +(1782,512,32,1,2,13,120,1771,0,0), +(1783,512,32,1,2,14,120,1772,0,0), +(1784,512,32,1,2,15,120,1773,0,0), +(1785,512,32,1,2,16,120,1774,0,0), +(1786,512,32,1,2,17,120,1775,0,0), +(1787,512,32,1,2,18,120,1776,0,0), +(1788,512,32,1,2,19,120,1777,0,0), +(1789,512,4063,1,2,20,120,1758,0,0), +(1790,512,4063,1,2,21,120,1759,0,0), +(1791,512,4063,1,2,22,120,1760,0,0), +(1792,512,4095,1,3,0,121,1781,0,0), +(1793,512,4095,1,3,1,121,1782,0,0), +(1794,512,4095,1,3,2,121,1783,0,0), +(1795,512,4095,1,3,3,121,1784,0,0), +(1796,512,4095,1,3,4,121,1785,0,0), +(1797,512,4095,1,3,5,121,1786,0,0), +(1798,512,4095,1,3,6,121,1787,0,0), +(1799,512,4095,1,3,7,121,1788,0,0), +(1800,512,4095,1,3,8,121,1789,0,0), +(1801,512,4095,1,3,9,121,1790,0,0), +(1802,512,4095,1,3,10,121,1791,0,0), +(1803,512,4095,1,3,11,121,1792,0,0), +(1804,512,4095,1,3,12,121,1793,0,0), +(1805,512,4095,1,3,13,121,1794,0,0), +(1806,512,4095,1,3,14,121,1795,0,0), +(1807,512,4095,1,3,15,121,1796,0,0), +(1808,512,4095,1,3,16,121,1797,0,0), +(1809,512,4095,1,3,17,121,1798,0,0), +(1810,512,4095,1,3,18,121,1799,0,0), +(1811,512,4095,1,3,19,121,1800,0,0), +(1812,512,4095,1,4,0,122,1801,0,0), +(1813,512,4095,1,4,1,122,1802,0,0), +(1814,512,4095,1,4,2,122,1803,0,0), +(1815,512,4095,1,4,3,122,1804,0,0), +(1816,512,4095,1,4,4,122,1805,0,0), +(1817,512,4095,1,4,5,122,1806,0,0), +(1818,512,4095,1,4,6,122,1807,0,0), +(1819,512,4095,1,4,7,122,1808,0,0), +(1820,512,4095,1,4,8,122,1809,0,0), +(1821,512,4095,1,4,9,122,1810,0,0), +(1822,512,4095,1,4,10,122,1811,0,0), +(1823,512,4095,1,4,11,122,1812,0,0), +(1824,512,4095,1,4,12,122,1813,0,0), +(1825,512,4095,1,4,13,122,1814,0,0), +(1826,512,4095,1,5,0,123,1815,0,0), +(1827,512,4095,1,5,1,123,1816,0,0), +(1828,512,4095,1,5,2,123,1817,0,0), +(1829,512,4095,1,5,3,123,1818,0,0), +(1830,512,4095,1,5,4,123,1819,0,0), +(1831,512,4095,1,5,5,123,1820,0,0), +(1832,512,4095,1,5,6,123,1821,0,0), +(1833,512,4095,1,5,7,123,1822,0,0), +(1834,512,4095,1,5,8,123,1823,0,0), +(1835,512,4095,1,5,9,123,1824,0,0), +(1836,512,4095,1,5,10,123,1825,0,0), +(1837,512,4095,1,5,11,123,1815,0,0), +(1838,512,4095,1,5,12,123,1816,0,0), +(1839,512,4095,1,5,13,123,1817,0,0), +(1840,512,4095,1,5,14,123,1818,0,0), +(1841,512,4095,1,5,15,123,1819,0,0), +(1842,512,4095,1,5,16,123,1820,0,0), +(1843,512,4095,1,5,17,123,1821,0,0), +(1844,512,4095,1,5,18,123,1822,0,0), +(1845,512,4095,1,5,19,123,1823,0,0), +(1846,512,4095,1,5,20,123,1824,0,0), +(1847,512,4095,1,5,21,123,1825,0,0), +(1848,512,4095,1,6,0,381,1837,0,0), +(1849,512,2048,1,6,1,381,1838,0,0), +(1850,512,2048,1,6,7,381,1838,0,0), +(1851,512,2048,1,6,13,381,1838,0,0), +(1852,512,2048,1,6,19,381,1838,0,0), +(1853,512,2048,1,6,25,381,1838,0,0), +(1854,512,2048,1,6,31,381,1838,0,0), +(1855,512,2048,1,6,2,381,1839,0,0), +(1856,512,2048,1,6,8,381,1839,0,0), +(1857,512,2048,1,6,14,381,1839,0,0), +(1858,512,2048,1,6,20,381,1839,0,0), +(1859,512,2048,1,6,26,381,1839,0,0), +(1860,512,2048,1,6,32,381,1839,0,0), +(1861,512,2048,1,6,3,381,1840,0,0), +(1862,512,2048,1,6,9,381,1840,0,0), +(1863,512,2048,1,6,15,381,1840,0,0), +(1864,512,2048,1,6,21,381,1840,0,0), +(1865,512,2048,1,6,27,381,1840,0,0), +(1866,512,2048,1,6,33,381,1840,0,0), +(1867,512,2048,1,6,4,381,1841,0,0), +(1868,512,2048,1,6,10,381,1841,0,0), +(1869,512,2048,1,6,16,381,1841,0,0), +(1870,512,2048,1,6,22,381,1841,0,0), +(1871,512,2048,1,6,28,381,1841,0,0), +(1872,512,2048,1,6,34,381,1841,0,0), +(1873,512,2048,1,6,5,381,1842,0,0), +(1874,512,2048,1,6,11,381,1842,0,0), +(1875,512,2048,1,6,17,381,1842,0,0), +(1876,512,2048,1,6,23,381,1842,0,0), +(1877,512,2048,1,6,29,381,1842,0,0), +(1878,512,2048,1,6,35,381,1842,0,0), +(1879,512,2048,1,6,6,381,3714,0,0), +(1880,512,2048,1,6,12,381,3714,0,0), +(1881,512,2048,1,6,18,381,3714,0,0), +(1882,512,2048,1,6,24,381,3714,0,0), +(1883,512,2048,1,6,30,381,3714,0,0), +(1884,512,2048,1,6,36,381,3714,0,0), +(1885,512,4095,1,6,0,125,1843,0,0), +(1886,512,2048,1,6,1,125,1844,0,0), +(1887,512,2048,1,6,2,125,1844,0,0), +(1888,512,2048,1,6,3,125,1844,0,0), +(1889,512,2048,1,6,4,125,1844,0,0), +(1890,512,2048,1,6,5,125,1844,0,0), +(1891,512,2048,1,6,6,125,1844,0,0), +(1892,512,2048,1,6,7,125,1845,0,0), +(1893,512,2048,1,6,8,125,1845,0,0), +(1894,512,2048,1,6,9,125,1845,0,0), +(1895,512,2048,1,6,10,125,1845,0,0), +(1896,512,2048,1,6,11,125,1845,0,0), +(1897,512,2048,1,6,12,125,1845,0,0), +(1898,512,2048,1,6,13,125,1846,0,0), +(1899,512,2048,1,6,14,125,1846,0,0), +(1900,512,2048,1,6,15,125,1846,0,0), +(1901,512,2048,1,6,16,125,1846,0,0), +(1902,512,2048,1,6,17,125,1846,0,0), +(1903,512,2048,1,6,18,125,1846,0,0), +(1904,512,2048,1,6,19,125,1847,0,0), +(1905,512,2048,1,6,20,125,1847,0,0), +(1906,512,2048,1,6,21,125,1847,0,0), +(1907,512,2048,1,6,22,125,1847,0,0), +(1908,512,2048,1,6,23,125,1847,0,0), +(1909,512,2048,1,6,24,125,1847,0,0), +(1910,512,2048,1,6,25,125,1848,0,0), +(1911,512,2048,1,6,26,125,1848,0,0), +(1912,512,2048,1,6,27,125,1848,0,0), +(1913,512,2048,1,6,28,125,1848,0,0), +(1914,512,2048,1,6,29,125,1848,0,0), +(1915,512,2048,1,6,30,125,1848,0,0), +(1922,512,2048,1,6,31,125,9930,0,0), +(1923,512,2048,1,6,32,125,9930,0,0), +(1924,512,2048,1,6,33,125,9930,0,0), +(1925,512,2048,1,6,34,125,9930,0,0), +(1926,512,2048,1,6,35,125,9930,0,0), +(1927,512,2048,1,6,36,125,9930,0,0), +(1928,512,4095,1,7,0,126,1850,0,0), +(1929,512,2048,1,7,1,126,1851,0,0), +(1930,512,2048,1,7,2,126,1852,0,0), +(1931,512,2048,1,7,3,126,1853,0,0), +(1932,512,2048,1,7,4,126,1854,0,0), +(1933,512,2048,1,7,5,126,1855,0,0), +(1934,512,2048,1,7,6,126,1856,0,0), +(1935,512,2047,1,8,0,127,1857,0,0), +(1936,512,2048,1,8,1,127,1858,0,0), +(1937,512,2048,1,8,2,127,1859,0,0), +(1938,512,2048,1,8,3,127,1860,0,0), +(1939,512,2048,1,8,4,127,1861,0,0), +(1940,512,2048,1,8,5,127,1862,0,0), +(1941,1024,4095,0,1,0,128,1869,0,0), +(1942,1024,4095,0,1,1,128,1870,0,0), +(1943,1024,4095,0,1,2,128,1871,0,0), +(1944,1024,4095,0,1,3,128,1872,0,0), +(1945,1024,4095,0,1,4,128,1873,0,0), +(1946,1024,4095,0,1,5,128,1874,0,0), +(1947,1024,4095,0,1,6,128,1875,0,0), +(1948,1024,4095,0,1,7,128,1876,0,0), +(1949,1024,4095,0,1,8,128,1877,0,0), +(1950,1024,4095,0,1,9,128,1878,0,0), +(1951,1024,4095,0,1,10,128,1879,0,0), +(1952,1024,4095,0,1,11,128,1880,0,0), +(1953,1024,4095,0,1,12,128,1881,0,0), +(1954,1024,4095,0,1,13,128,1882,0,0), +(1955,1024,32,0,1,14,128,1883,0,0), +(1956,1024,32,0,1,15,128,1884,0,0), +(1957,1024,32,0,1,16,128,1885,0,0), +(1958,1024,4095,0,1,17,128,1886,0,0), +(1959,1024,4095,0,1,18,128,1887,0,0), +(1960,1024,4095,0,1,19,128,1888,0,0), +(1961,1024,4095,0,1,20,128,1889,0,0), +(1962,1024,4063,0,2,0,129,1890,0,0), +(1963,1024,4063,0,2,1,129,1891,1,0), +(1964,1024,4063,0,2,2,129,1892,0,0), +(1965,1024,4063,0,2,3,129,1893,0,0), +(1966,1024,4063,0,2,4,129,1894,1,0), +(1967,1024,4063,0,2,5,129,1895,0,0), +(1968,1024,4063,0,2,6,129,1896,0,0), +(1969,1024,4063,0,2,7,129,1897,0,0), +(1970,1024,4063,0,2,8,129,1898,0,0), +(1971,1024,4063,0,2,9,129,1899,1,0), +(1972,1024,32,0,2,10,129,1900,0,0), +(1973,1024,32,0,2,11,129,1901,0,0), +(1974,1024,32,0,2,12,129,1902,0,0), +(1975,1024,32,0,2,13,129,1903,0,0), +(1976,1024,32,0,2,14,129,1904,0,0), +(1977,1024,32,0,2,15,129,1905,0,0), +(1978,1024,32,0,2,16,129,1906,0,0), +(1979,1024,32,0,2,17,129,1907,0,0), +(1980,1024,32,0,2,18,129,1908,0,0), +(1981,1024,32,0,2,19,129,1909,0,0), +(1982,1024,4095,0,3,0,130,1910,0,0), +(1983,1024,4095,0,3,1,130,1911,0,0), +(1984,1024,4095,0,3,2,130,1912,0,0), +(1985,1024,4095,0,3,3,130,1913,0,0), +(1986,1024,4095,0,3,4,130,1914,0,0), +(1987,1024,4095,0,3,5,130,1915,0,0), +(1988,1024,4095,0,3,6,130,1916,0,0), +(1989,1024,4095,0,3,7,130,1917,0,0), +(1990,1024,4095,0,3,8,130,1918,0,0), +(1991,1024,4095,0,3,9,130,1919,0,0), +(1992,1024,4095,0,3,10,130,1920,0,0), +(1993,1024,4095,0,3,11,130,1921,0,0), +(1994,1024,4095,0,3,12,130,1922,0,0), +(1995,1024,4095,0,3,13,130,1923,0,0), +(1996,1024,4095,0,4,0,131,1924,0,0), +(1997,1024,4095,0,4,1,131,1925,0,0), +(1998,1024,4095,0,4,2,131,1926,0,0), +(1999,1024,4095,0,4,3,131,1927,0,0), +(2000,1024,4095,0,4,4,131,1928,0,0), +(2001,1024,4095,0,4,5,131,1929,0,0), +(2002,1024,4095,0,4,6,131,1930,0,0), +(2003,1024,4095,0,4,7,131,1931,0,0), +(2004,1024,4095,0,4,8,131,1932,0,0), +(2005,1024,4095,0,4,9,131,1933,0,0), +(2006,1024,4095,0,4,10,131,1934,0,0), +(2007,1024,4095,0,4,11,131,1935,0,0), +(2008,1024,4095,0,5,0,132,7767,0,0), +(2009,1024,4095,0,5,1,132,7767,0,0), +(2010,1024,4095,0,5,2,132,1936,0,0), +(2011,1024,4095,0,5,3,132,1937,0,0), +(2012,1024,4095,0,5,4,132,1938,0,0), +(2013,1024,4095,0,5,5,132,1939,0,0), +(2014,1024,4095,0,5,6,132,1940,0,0), +(2015,1024,4095,0,5,7,132,7767,0,0), +(2016,1024,4095,1,1,0,133,1944,0,0), +(2017,1024,4095,1,1,1,133,1945,0,0), +(2018,1024,4095,1,1,2,133,1946,0,0), +(2019,1024,4095,1,1,3,133,1947,0,0), +(2020,1024,4095,1,1,4,133,1948,0,0), +(2021,1024,4095,1,1,5,133,1949,0,0), +(2022,1024,4095,1,1,6,133,1950,0,0), +(2023,1024,4095,1,1,7,133,1951,0,0), +(2024,1024,4095,1,1,8,133,1952,0,0), +(2025,1024,4095,1,1,9,133,1953,0,0), +(2026,1024,4095,1,1,10,133,1954,0,0), +(2027,1024,4095,1,1,11,133,1955,0,0), +(2028,1024,32,1,1,12,133,1956,0,0), +(2029,1024,32,1,1,13,133,1957,0,0), +(2030,1024,32,1,1,14,133,1958,0,0), +(2031,1024,4095,1,1,15,133,1959,0,0), +(2032,1024,4095,1,1,16,133,1960,0,0), +(2033,1024,4095,1,1,17,133,1961,0,0), +(2034,1024,4095,1,1,18,133,1962,0,0), +(2035,1024,4063,1,2,0,134,1963,1,0), +(2036,1024,4063,1,2,1,134,1964,0,0), +(2037,1024,4063,1,2,2,134,1965,0,0), +(2038,1024,4063,1,2,3,134,1966,0,0), +(2039,1024,4063,1,2,4,134,1967,1,0), +(2040,1024,4063,1,2,5,134,1968,0,0), +(2041,1024,4063,1,2,6,134,1969,0,0), +(2042,1024,4063,1,2,7,134,1970,0,0), +(2043,1024,4063,1,2,8,134,1971,1,0), +(2044,1024,4063,1,2,9,134,1972,0,0), +(2045,1024,32,1,2,10,134,1973,0,0), +(2046,1024,32,1,2,11,134,1974,0,0), +(2047,1024,32,1,2,12,134,1975,0,0), +(2048,1024,32,1,2,13,134,1976,0,0), +(2049,1024,32,1,2,14,134,1977,0,0), +(2050,1024,32,1,2,15,134,1978,0,0), +(2051,1024,32,1,2,16,134,1979,0,0), +(2052,1024,32,1,2,17,134,1980,0,0), +(2053,1024,32,1,2,18,134,1981,0,0), +(2054,1024,32,1,2,19,134,1982,0,0), +(2055,1024,4095,1,3,0,135,1983,0,0), +(2056,1024,4095,1,3,1,135,1984,0,0), +(2057,1024,4095,1,3,2,135,1985,0,0), +(2058,1024,4095,1,3,3,135,1986,0,0), +(2059,1024,4095,1,3,4,135,1987,0,0), +(2060,1024,4095,1,3,5,135,1988,0,0), +(2061,1024,4095,1,3,6,135,1989,0,0), +(2062,1024,4095,1,3,7,135,1990,0,0), +(2063,1024,4095,1,3,8,135,1991,0,0), +(2064,1024,4095,1,3,9,135,1992,0,0), +(2065,1024,4095,1,3,10,135,1993,0,0), +(2066,1024,4095,1,3,11,135,1994,0,0), +(2067,1024,4095,1,3,12,135,1995,0,0), +(2068,1024,4095,1,3,13,135,1996,0,0), +(2069,1024,4095,1,3,14,135,1997,0,0), +(2070,1024,4095,1,3,15,135,1998,0,0), +(2071,1024,4095,1,3,16,135,1999,0,0), +(2072,1024,4095,1,4,0,136,2000,0,0), +(2073,1024,4095,1,4,1,136,2001,0,0), +(2074,1024,4095,1,4,2,136,2002,0,0), +(2075,1024,4095,1,4,3,136,2003,0,0), +(2076,1024,4095,1,4,4,136,2004,0,0), +(2077,1024,4095,1,4,5,136,2005,0,0), +(2078,1024,4095,1,4,6,136,2006,0,0), +(2079,1024,4095,1,4,7,136,2007,0,0), +(2080,1024,4095,1,4,8,136,2008,0,0), +(2081,1024,4095,1,4,9,136,2009,0,0), +(2082,1024,4095,1,4,10,136,2010,0,0), +(2083,1024,4095,1,5,0,137,2011,0,0), +(2084,1024,4095,1,5,1,137,2012,0,0), +(2085,1024,4095,1,5,2,137,2013,0,0), +(2086,1024,4095,1,5,3,137,2014,0,0), +(2087,1024,4095,1,5,4,137,2015,0,0), +(2088,1024,4095,1,5,5,137,2016,0,0), +(2089,1024,4095,1,5,6,137,2017,0,0), +(2090,1024,4095,1,5,7,137,2018,0,0), +(2091,2048,4063,0,1,0,138,2019,0,0), +(2092,2048,4063,0,1,1,138,2020,0,0), +(2093,2048,4063,0,1,2,138,2021,0,0), +(2094,2048,4063,0,2,0,139,2022,0,0), +(2095,2048,4063,0,3,0,140,2023,0,0), +(2096,2048,4063,0,4,0,141,2024,0,0), +(2097,2048,4063,1,3,0,142,2025,0,0), +(2098,2048,4063,1,4,0,143,2026,0,0), +(2099,4096,4063,0,1,0,144,2027,0,0), +(2100,4096,4063,0,1,1,144,2028,0,0), +(2101,4096,4063,0,1,2,144,2029,0,0), +(2102,4096,4063,0,1,3,144,2030,0,0), +(2103,4096,4063,0,1,4,144,2031,0,0), +(2104,4096,4063,0,1,5,144,2032,0,0), +(2105,4096,4063,0,3,0,145,2033,0,0), +(2106,4096,4063,0,4,0,146,2034,0,0), +(2107,4096,4063,1,1,0,147,2035,0,0), +(2108,4096,4063,1,1,1,147,2036,0,0), +(2109,4096,4063,1,1,2,147,2037,0,0), +(2110,4096,4063,1,1,3,147,2038,0,0), +(2111,4096,4063,1,1,4,147,2039,0,0), +(2112,4096,4063,1,1,5,147,2040,0,0), +(2113,4096,4063,1,3,0,148,2041,0,0), +(2114,4096,4063,1,4,0,149,2042,0,0), +(2115,8192,4063,0,1,0,150,2043,0,0), +(2116,8192,4063,0,1,1,150,2044,0,0), +(2117,8192,4063,0,1,2,150,2045,0,0), +(2118,8192,4063,0,1,3,150,2046,0,0), +(2119,8192,4063,0,1,4,150,2047,0,0), +(2120,8192,4063,0,1,5,150,2048,0,0), +(2121,8192,4063,0,2,0,151,2049,0,0), +(2122,8192,4063,0,3,0,152,2050,0,0), +(2123,8192,4063,0,3,1,152,2051,0,0), +(2124,8192,4063,0,3,2,152,2052,0,0), +(2125,8192,4063,0,4,0,153,2053,0,0), +(2126,8192,4063,0,4,1,153,2054,0,0), +(2127,8192,4063,0,4,2,153,2055,0,0), +(2128,8192,4063,0,4,3,153,2056,0,0), +(2129,8192,4063,0,4,4,153,2057,0,0), +(2130,8192,4063,0,4,5,153,2058,0,0), +(2131,8192,4063,0,4,6,153,2059,0,0), +(2132,8192,4063,0,4,7,153,2060,0,0), +(2133,8192,4063,0,4,8,153,2061,0,0), +(2134,8192,4063,0,4,9,153,2062,0,0), +(2135,8192,4063,1,3,0,154,2063,0,0), +(2136,8192,4063,1,4,0,155,2064,0,0), +(2137,16384,4063,0,1,0,156,2065,0,0), +(2138,16384,4063,0,2,0,157,2066,0,0), +(2139,16384,4063,0,3,0,158,2067,0,0), +(2140,16384,4063,0,4,0,159,2068,0,0), +(2141,16384,4063,1,3,0,160,2069,0,0), +(2142,16384,4063,1,4,0,161,2070,0,0), +(2143,32768,4063,0,1,0,162,2071,0,0), +(2144,32768,4063,0,1,1,162,2072,0,0), +(2145,32768,4063,0,1,2,162,2073,0,0), +(2146,32768,4063,0,1,3,162,2074,0,0), +(2147,32768,4063,0,1,4,162,2075,0,0), +(2148,32768,4063,0,1,5,162,2076,0,0), +(2149,32768,4063,0,2,0,163,2077,0,0), +(2150,32768,4063,0,3,0,164,2078,0,0), +(2151,32768,4063,0,3,1,164,2079,0,0), +(2152,32768,4063,0,3,2,164,2080,0,0), +(2153,32768,4063,0,3,3,164,2081,0,0), +(2154,32768,4063,0,3,4,164,2082,0,0), +(2155,32768,4063,0,3,5,164,2083,0,0), +(2156,32768,4063,0,4,0,165,2084,0,0), +(2157,32768,4063,0,4,1,165,2085,0,0), +(2158,32768,4063,0,4,2,165,2086,0,0), +(2159,32768,4063,0,4,3,165,2087,0,0), +(2160,32768,4063,0,4,4,165,2088,0,0), +(2161,32768,4063,0,5,0,166,2089,0,0), +(2162,32768,4063,0,5,1,166,2090,0,0), +(2163,32768,4063,0,5,2,166,2091,0,0), +(2164,32768,4063,0,5,3,166,2092,0,0), +(2165,32768,4063,0,5,4,166,2093,0,0), +(2166,32768,4095,0,5,5,166,2094,0,0), +(2167,32768,4063,1,3,0,167,2095,0,0), +(2168,32768,4063,1,4,0,168,2096,0,0), +(2169,65536,4063,0,1,0,169,2097,0,0), +(2170,65536,4063,0,1,1,169,2098,0,0), +(2171,65536,4063,0,1,2,169,2099,0,0), +(2172,65536,4063,0,1,3,169,2100,0,0), +(2173,65536,4063,0,1,4,169,2101,0,0), +(2174,65536,4063,0,1,5,169,2102,0,0), +(2175,65536,4063,0,1,6,169,2103,0,0), +(2176,65536,4063,0,2,0,170,2104,0,0), +(2177,65536,4063,0,3,0,171,2105,0,0), +(2178,65536,4063,0,3,1,171,2106,0,0), +(2179,65536,4063,0,3,2,171,2107,0,0), +(2180,65536,4063,0,3,3,171,2108,0,0), +(2181,65536,4063,0,3,4,171,2109,0,0), +(2182,65536,4063,0,3,5,171,2110,0,0), +(2183,65536,4063,0,3,6,171,2111,0,0), +(2184,65536,4063,0,4,0,172,2112,0,0), +(2185,65536,4063,0,4,1,172,2113,0,0), +(2186,65536,4063,0,4,2,172,2114,0,0), +(2187,65536,4063,0,4,3,172,2115,0,0), +(2188,65536,4063,0,4,4,172,2116,0,0), +(2189,65536,4063,0,4,5,172,2117,0,0), +(2190,65536,4063,0,4,6,172,2118,0,0), +(2191,65536,4063,0,5,0,173,2119,0,0), +(2192,65536,4095,0,5,1,173,2120,0,0), +(2193,65536,4095,0,5,2,173,2121,0,0), +(2194,65536,4095,0,5,3,173,2122,0,0), +(2195,65536,4095,0,5,4,173,2123,0,0), +(2196,65536,4095,0,5,5,173,2124,0,0), +(2197,65536,4095,0,5,6,173,2125,0,0), +(2198,65536,4063,1,3,0,174,2126,0,0), +(2199,65536,4063,1,4,0,175,2127,0,0), +(2200,131072,4063,0,1,0,176,2128,0,0), +(2201,131072,4063,0,1,1,176,2129,0,0), +(2202,131072,4063,0,1,2,176,2130,0,0), +(2203,131072,4063,0,1,3,176,2131,0,0), +(2204,131072,4063,0,1,4,176,2132,0,0), +(2205,131072,4063,0,1,5,176,2133,0,0), +(2206,131072,4095,0,1,6,176,2134,0,0), +(2207,131072,4095,0,1,7,176,2135,0,0), +(2208,131072,4095,0,1,8,176,2136,0,0), +(2209,131072,4095,0,1,9,176,2137,0,0), +(2210,131072,4095,0,1,10,176,2138,0,0), +(2211,131072,4095,0,1,11,176,2139,0,0), +(2212,131072,4095,0,1,12,176,2140,0,0), +(2213,131072,4095,0,1,13,176,2141,0,0), +(2214,131072,4095,0,1,14,176,2142,0,0), +(2215,131072,4063,0,2,0,177,2143,0,0), +(2216,131072,4063,0,2,1,177,2144,0,0), +(2217,131072,4063,0,2,2,177,2145,0,0), +(2218,131072,4063,0,2,3,177,2146,0,0), +(2219,131072,4063,0,2,4,177,2147,0,0), +(2220,131072,4063,0,3,0,178,2148,0,0), +(2221,131072,4063,0,3,1,178,2149,0,0), +(2222,131072,4063,0,3,2,178,2150,0,0), +(2223,131072,4063,0,3,3,178,2151,0,0), +(2224,131072,4063,0,3,4,178,2152,0,0), +(2225,131072,4063,0,3,5,178,2153,0,0), +(2226,131072,4063,0,4,0,179,2154,0,0), +(2227,131072,4063,0,4,1,179,2155,0,0), +(2228,131072,4063,0,4,2,179,2156,0,0), +(2229,131072,4063,0,4,3,179,2157,0,0), +(2230,131072,4063,0,4,4,179,2158,0,0), +(2231,131072,4063,0,4,5,179,2159,0,0), +(2232,131072,4063,0,4,6,179,2160,0,0), +(2233,131072,4063,0,4,7,179,2161,0,0), +(2234,131072,4063,0,4,8,179,2162,0,0), +(2235,131072,4063,0,4,9,179,2163,0,0), +(2236,131072,4063,0,5,0,180,2164,0,0), +(2237,131072,4063,0,5,1,180,2165,0,0), +(2238,131072,4063,0,5,2,180,2166,0,0), +(2239,131072,4063,0,5,3,180,2167,0,0), +(2240,131072,4063,0,5,4,180,2168,0,0), +(2241,131072,4063,0,5,5,180,2169,0,0), +(2242,131072,4063,0,5,6,180,2170,0,0), +(2243,131072,4063,0,5,7,180,2171,0,0), +(2244,131072,4063,0,5,8,180,2172,0,0), +(2245,131072,4063,0,5,9,180,2173,0,0), +(2246,131072,4063,0,5,10,180,2174,0,0), +(2247,131072,4063,1,3,0,181,2175,0,0), +(2248,131072,4063,1,4,0,182,2176,0,0), +(2249,262144,4063,0,1,0,183,2177,0,0), +(2250,262144,4063,0,1,1,183,2178,0,0), +(2251,262144,4063,0,1,2,183,2179,0,0), +(2252,262144,4063,0,1,3,183,2180,0,0), +(2253,262144,4063,0,2,0,184,2181,0,0), +(2254,262144,4063,0,3,0,185,2182,0,0), +(2255,262144,4063,0,4,0,186,3604,0,0), +(2256,262144,4063,0,5,0,187,2183,0,0), +(2257,262144,4095,0,5,1,187,2184,0,0), +(2258,262144,4095,0,5,2,187,2185,0,0), +(2259,262144,4063,1,3,0,188,2186,0,0), +(2260,262144,4063,1,4,0,189,2187,0,0), +(2261,524288,4095,0,1,0,190,2188,0,0), +(2262,524288,4095,0,1,1,190,2189,0,0), +(2263,524288,4095,0,1,2,190,2190,0,0), +(2264,524288,4095,0,1,3,190,2191,0,0), +(2265,524288,4063,0,3,0,191,2192,0,0), +(2266,524288,4063,0,4,0,192,2193,0,0), +(2267,524288,4063,0,4,1,192,2194,0,0), +(2268,524288,4063,0,4,2,192,2195,0,0), +(2269,524288,4063,0,4,3,192,2196,0,0), +(2270,524288,4095,0,5,0,193,2197,0,0), +(2271,524288,4095,0,5,1,193,2198,0,0), +(2272,524288,4095,0,5,2,193,2199,0,0), +(2273,524288,4095,0,5,3,193,2200,0,0), +(2274,524288,4095,0,5,4,193,2201,0,0), +(2275,524288,4063,1,3,0,194,2202,0,0), +(2276,524288,4063,1,4,0,195,2203,0,0), +(2277,1048576,4063,0,1,0,196,2204,0,0), +(2278,1048576,4063,0,1,1,196,2205,0,0), +(2279,1048576,4063,0,1,2,196,2206,0,0), +(2280,1048576,4063,0,1,3,196,2207,0,0), +(2281,1048576,4063,0,1,4,196,2208,0,0), +(2282,1048576,4063,0,1,5,196,2209,0,0), +(2283,1048576,4063,0,1,6,196,2210,0,0), +(2284,1048576,4063,0,1,7,196,2211,0,0), +(2285,1048576,4063,0,2,0,197,2212,0,0), +(2286,1048576,4063,0,3,0,198,2213,0,0), +(2287,1048576,4063,0,3,1,198,2214,0,0), +(2288,1048576,4063,0,3,2,198,2215,0,0), +(2289,1048576,4063,0,3,3,198,2216,0,0), +(2290,1048576,4063,0,3,4,198,2217,0,0), +(2291,1048576,4095,0,3,5,198,2218,0,0), +(2292,1048576,4063,0,4,0,199,2219,0,0), +(2293,1048576,4063,0,4,1,199,2220,0,0), +(2294,1048576,4063,0,4,2,199,2221,0,0), +(2295,1048576,4063,0,4,3,199,2222,0,0), +(2296,1048576,4063,0,4,4,199,2223,0,0), +(2297,1048576,4063,0,4,5,199,2224,0,0), +(2298,1048576,4095,0,5,0,200,2225,0,0), +(2299,1048576,4095,0,5,1,200,2226,0,0), +(2300,1048576,4095,0,5,2,200,2227,0,0), +(2301,1048576,4095,0,5,3,200,2228,0,0), +(2302,1048576,4095,0,5,4,200,2229,0,0), +(2303,1048576,4063,1,3,0,201,2230,0,0), +(2304,1048576,4063,1,4,0,202,2231,0,0), +(2305,2097152,4095,0,1,0,203,2232,0,0), +(2306,2097152,4095,0,1,1,203,2233,0,0), +(2307,2097152,4095,0,1,2,203,2234,0,0), +(2308,2097152,4095,0,1,3,203,2235,0,0), +(2309,2097152,4095,0,1,4,203,2236,0,0), +(2310,2097152,32,0,1,5,203,2237,0,0), +(2311,2097152,32,0,1,6,203,2238,0,0), +(2312,2097152,32,0,1,7,203,2239,0,0), +(2313,2097152,4095,0,1,8,203,2240,0,0), +(2314,2097152,4063,0,2,0,204,2241,1,0), +(2315,2097152,4063,0,2,1,204,2242,0,0), +(2316,2097152,4063,0,2,2,204,2243,0,0), +(2317,2097152,4063,0,2,3,204,2244,0,0), +(2318,2097152,4063,0,2,4,204,2245,0,0), +(2319,2097152,32,0,2,5,204,2246,0,0), +(2320,2097152,32,0,2,6,204,2247,0,0), +(2321,2097152,32,0,2,7,204,2248,0,0), +(2322,2097152,32,0,2,8,204,2249,0,0), +(2323,2097152,32,0,2,9,204,2250,0,0), +(2324,2097152,32,0,2,10,204,2251,0,0), +(2325,2097152,32,0,2,11,204,2252,0,0), +(2326,2097152,32,0,2,12,204,2253,0,0), +(2327,2097152,32,0,2,13,204,2254,0,0), +(2328,2097152,32,0,2,14,204,2255,0,0), +(2329,2097152,4063,0,2,15,204,2256,0,0), +(2330,2097152,4063,0,2,16,204,2257,0,0), +(2331,2097152,32,0,2,17,204,2258,0,0), +(2332,2097152,32,0,2,18,204,2259,0,0), +(2333,2097152,4095,0,3,0,205,2260,0,0), +(2334,2097152,4095,0,3,1,205,2261,0,0), +(2335,2097152,4095,0,3,2,205,2262,0,0), +(2336,2097152,4095,0,3,3,205,2263,0,0), +(2337,2097152,4095,0,3,4,205,2264,0,0), +(2338,2097152,4095,0,3,5,205,2265,0,0), +(2339,2097152,4095,0,3,6,205,2266,0,0), +(2340,2097152,4095,0,3,7,205,2267,0,0), +(2341,2097152,4095,0,3,8,205,2268,0,0), +(2342,2097152,4095,0,3,9,205,2269,0,0), +(2343,2097152,4095,0,3,10,205,2270,0,0), +(2344,2097152,4095,0,3,11,205,2271,0,0), +(2345,2097152,4095,0,3,12,205,2272,0,0), +(2352,2097152,4095,0,5,0,207,2279,0,0), +(2353,2097152,4095,0,5,1,207,2280,0,0), +(2354,2097152,4095,0,5,2,207,2281,0,0), +(2355,2097152,4095,0,5,3,207,2282,0,0), +(2356,2097152,4095,0,5,4,207,2283,0,0), +(2357,2097152,4095,0,5,5,207,2279,0,0), +(2358,2097152,4095,0,5,6,207,2284,0,0), +(2359,2097152,4095,0,5,7,207,2285,0,0), +(2360,2097152,4095,0,5,8,207,2279,0,0), +(2376,2097152,4095,1,1,0,208,2303,0,0), +(2377,2097152,4095,1,1,1,208,2304,0,0), +(2378,2097152,4095,1,1,2,208,2305,0,0), +(2379,2097152,4095,1,1,3,208,2306,0,0), +(2380,2097152,4095,1,1,4,208,2307,0,0), +(2381,2097152,4095,1,1,5,208,2308,0,0), +(2382,2097152,4095,1,1,6,208,2309,0,0), +(2383,2097152,4095,1,1,7,208,2310,0,0), +(2384,2097152,4095,1,1,8,208,2311,0,0), +(2385,2097152,32,1,1,9,208,2312,0,0), +(2386,2097152,32,1,1,10,208,2313,0,0), +(2387,2097152,32,1,1,11,208,2314,0,0), +(2388,2097152,4095,1,1,12,208,2315,0,0), +(2389,2097152,4063,1,2,0,209,2316,0,0), +(2390,2097152,4063,1,2,1,209,2317,0,0), +(2391,2097152,4063,1,2,2,209,2318,0,0), +(2392,2097152,4063,1,2,3,209,2319,0,0), +(2393,2097152,4063,1,2,4,209,2320,0,0), +(2394,2097152,4063,1,2,5,209,2321,0,0), +(2395,2097152,4063,1,2,6,209,2322,0,0), +(2396,2097152,4063,1,2,7,209,2323,1,0), +(2397,2097152,4063,1,2,8,209,2324,0,0), +(2398,2097152,4063,1,2,9,209,2325,1,0), +(2399,2097152,4063,1,2,10,209,2326,0,0), +(2400,2097152,4063,1,2,11,209,2327,0,0), +(2401,2097152,4063,1,2,12,209,2328,0,0), +(2402,2097152,4063,1,2,13,209,2329,1,0), +(2403,2097152,32,1,2,14,209,2330,0,0), +(2404,2097152,32,1,2,15,209,2331,0,0), +(2405,2097152,32,1,2,16,209,2332,0,0), +(2406,2097152,32,1,2,17,209,2333,0,0), +(2407,2097152,32,1,2,18,209,2334,0,0), +(2408,2097152,32,1,2,19,209,2335,0,0), +(2409,2097152,32,1,2,20,209,2336,0,0), +(2410,2097152,32,1,2,21,209,2337,0,0), +(2411,2097152,32,1,2,22,209,2338,0,0), +(2412,2097152,32,1,2,23,209,2339,0,0), +(2413,2097152,32,1,2,24,209,2340,0,0), +(2414,2097152,32,1,2,25,209,2341,0,0), +(2415,2097152,32,1,2,26,209,2342,0,0), +(2416,2097152,32,1,2,27,209,2343,0,0), +(2417,2097152,4063,1,2,28,209,2344,0,0), +(2418,2097152,32,1,2,29,209,2345,0,0), +(2419,2097152,4063,1,2,30,209,2346,0,0), +(2420,2097152,32,1,2,31,209,2347,0,0), +(2421,2097152,4095,1,3,0,210,2348,0,0), +(2422,2097152,4095,1,3,1,210,2349,0,0), +(2423,2097152,4095,1,3,2,210,2350,0,0), +(2424,2097152,4095,1,3,3,210,2351,0,0), +(2425,2097152,4095,1,3,4,210,2352,0,0), +(2426,2097152,4095,1,3,5,210,2353,0,0), +(2427,2097152,4095,1,3,6,210,2354,0,0), +(2428,2097152,4095,1,3,7,210,2355,0,0), +(2429,2097152,4095,1,3,8,210,2356,0,0), +(2430,2097152,4095,1,3,9,210,2357,0,0), +(2431,2097152,4095,1,3,10,210,2358,0,0), +(2432,2097152,4095,1,3,11,210,2359,0,0), +(2433,2097152,4095,1,3,12,210,2360,0,0), +(2434,2097152,4095,1,3,13,210,2361,0,0), +(2435,2097152,4095,1,3,14,210,2362,0,0), +(2436,2097152,4095,1,3,15,210,2363,0,0), +(2443,2097152,4095,1,5,0,212,2370,0,0), +(2444,2097152,4095,1,5,1,212,2371,0,0), +(2445,2097152,4095,1,5,2,212,2372,0,0), +(2446,2097152,4095,1,5,3,212,2373,0,0), +(2447,2097152,4095,1,5,4,212,2374,0,0), +(2448,2097152,4095,1,5,5,212,2375,0,0), +(2449,2097152,4095,1,5,6,212,2376,0,0), +(2450,2097152,4095,1,5,7,212,2377,0,0), +(2451,2097152,4095,1,5,8,212,2378,0,0), +(2452,2097152,4095,1,5,9,212,2379,0,0), +(2453,2097152,4095,1,5,10,212,2380,0,0), +(2454,2097152,4095,1,5,11,212,2381,0,0), +(2455,6291456,4095,0,1,0,9,1,0,0), +(2456,6291456,4095,0,1,1,9,4,0,0), +(2457,6291456,4095,0,1,2,9,6,0,0), +(2458,6291456,4095,0,1,3,9,8,0,0), +(2459,6291456,4095,0,1,4,9,10,0,0), +(2460,6291456,32,0,1,5,9,13,0,0), +(2461,6291456,32,0,1,6,9,14,0,0), +(2462,6291456,32,0,1,7,9,15,0,0), +(2463,6291456,4095,0,1,8,9,17,0,0), +(2464,6291456,4095,0,2,0,10,20,1,0), +(2465,6291456,4095,0,2,1,10,21,0,0), +(2466,6291456,4095,0,2,2,10,22,0,0), +(2467,6291456,4095,0,2,3,10,23,0,0), +(2468,6291456,4095,0,2,4,10,24,0,0), +(2469,6291456,4095,0,2,5,10,25,0,0), +(2470,6291456,4095,0,2,6,10,26,0,0), +(2471,6291456,4095,0,2,7,10,27,0,0), +(2472,6291456,4095,0,2,8,10,28,0,0), +(2473,6291456,4095,0,2,9,10,29,0,0), +(2474,6291456,4095,0,2,10,10,22,1,5), +(2475,6291456,4095,0,2,11,10,20,1,5), +(2476,6291456,4095,0,2,12,10,22,1,5), +(2477,6291456,4095,0,2,13,10,31,1,5), +(2478,6291456,4095,0,2,14,10,20,1,5), +(2479,6291456,4095,0,2,15,10,21,0,0), +(2480,6291456,4095,0,2,16,10,22,0,0), +(2481,6291456,4095,0,2,17,10,27,0,0), +(2482,6291456,4095,0,2,18,10,28,0,0), +(2483,6291456,4095,0,3,0,11,48,0,0), +(2484,6291456,4095,0,3,1,11,45,0,0), +(2485,6291456,4095,0,3,2,11,46,0,0), +(2486,6291456,4095,0,3,3,11,45,0,0), +(2487,6291456,4095,0,3,4,11,48,0,0), +(2488,6291456,4095,0,3,5,11,49,0,0), +(2489,6291456,4095,0,3,6,11,50,0,0), +(2490,6291456,4095,0,3,7,11,51,0,0), +(2491,6291456,4095,0,3,8,11,50,0,0), +(2492,6291456,4095,0,3,9,11,53,0,0), +(2493,6291456,4095,0,3,10,11,54,0,0), +(2494,6291456,4095,0,3,11,11,55,0,0), +(2495,6291456,4095,0,3,12,11,56,0,0), +(2496,6291456,4095,0,3,13,11,57,0,0), +(2497,6291456,4095,0,3,14,11,58,0,0), +(2498,6291456,4095,0,3,15,11,59,0,0), +(2499,6291456,4095,0,3,16,11,60,0,0), +(2500,6291456,4095,0,4,0,12,61,0,0), +(2501,6291456,4095,0,4,1,12,62,0,0), +(2502,6291456,4095,0,4,2,12,63,0,0), +(2503,6291456,4095,0,4,3,12,64,0,0), +(2504,6291456,4095,0,4,4,12,65,0,0), +(2505,6291456,4095,0,4,5,12,74,0,0), +(2506,6291456,4095,0,5,0,13,81,0,0), +(2507,6291456,4095,0,5,1,13,82,0,0), +(2508,6291456,4095,0,5,2,13,83,0,0), +(2509,6291456,4095,0,5,3,13,77,0,0), +(2510,6291456,4095,0,5,4,13,77,0,0), +(2511,6291456,4095,0,5,5,13,76,0,0), +(2512,6291456,4095,0,5,6,13,77,0,0), +(2513,6291456,4095,0,5,7,13,76,0,0), +(2514,6291456,4095,0,5,8,13,76,0,0), +(2515,6291456,4095,1,1,0,14,85,0,0), +(2516,6291456,4095,1,1,1,14,86,0,0), +(2517,6291456,4095,1,1,2,14,87,0,0), +(2518,6291456,4095,1,1,3,14,88,0,0), +(2519,6291456,4095,1,1,4,14,89,0,0), +(2520,6291456,4095,1,1,5,14,90,0,0), +(2521,6291456,4095,1,1,6,14,91,0,0), +(2522,6291456,4095,1,1,7,14,92,0,0), +(2523,6291456,4095,1,1,8,14,93,0,0), +(2524,6291456,32,1,1,9,14,97,0,0), +(2525,6291456,32,1,1,10,14,98,0,0), +(2526,6291456,32,1,1,11,14,99,0,0), +(2527,6291456,4095,1,1,12,14,100,0,0), +(2528,6291456,4095,1,2,0,15,102,0,0), +(2529,6291456,4095,1,2,1,15,103,0,0), +(2530,6291456,4095,1,2,2,15,104,0,0), +(2531,6291456,4095,1,2,3,15,105,0,0), +(2532,6291456,4095,1,2,4,15,106,0,0), +(2533,6291456,4095,1,2,5,15,107,0,0), +(2534,6291456,4095,1,2,6,15,108,0,0), +(2535,6291456,4095,1,2,7,15,109,1,12), +(2536,6291456,4095,1,2,8,15,110,0,0), +(2537,6291456,4095,1,2,9,15,111,1,12), +(2538,6291456,4095,1,2,10,15,112,0,0), +(2539,6291456,4095,1,2,11,15,113,0,0), +(2540,6291456,4095,1,2,12,15,114,0,0), +(2541,6291456,4095,1,2,13,15,115,1,12), +(2542,6291456,4095,1,2,14,15,116,0,0), +(2543,6291456,4095,1,2,15,15,102,0,0), +(2544,6291456,4095,1,2,16,15,103,0,0), +(2545,6291456,4095,1,2,17,15,104,0,0), +(2546,6291456,4095,1,2,18,15,105,0,0), +(2547,6291456,4095,1,2,19,15,106,0,0), +(2548,6291456,4095,1,2,20,15,107,0,0), +(2549,6291456,4095,1,2,21,15,108,0,0), +(2550,6291456,4095,1,2,22,15,109,0,0), +(2551,6291456,4095,1,2,23,15,110,0,0), +(2552,6291456,4095,1,2,24,15,111,0,0), +(2553,6291456,4095,1,2,25,15,112,0,0), +(2554,6291456,4095,1,2,26,15,113,0,0), +(2555,6291456,4095,1,2,27,15,114,0,0), +(2556,6291456,4095,1,2,28,15,112,0,0), +(2557,6291456,4095,1,2,29,15,107,0,0), +(2558,6291456,4095,1,2,30,15,114,0,0), +(2559,6291456,4095,1,2,31,15,110,0,0), +(2588,6291456,4095,1,4,0,17,156,0,0), +(2589,6291456,4095,1,4,1,17,157,0,0), +(2590,6291456,4095,1,4,2,17,158,0,0), +(2591,6291456,4095,1,4,3,17,159,0,0), +(2592,6291456,4095,1,4,4,17,160,0,0), +(2593,6291456,4095,1,4,5,17,169,0,0), +(2594,6291456,4095,1,5,0,501,4752,0,0), +(2595,6291456,4095,1,5,1,501,4753,0,0), +(2596,6291456,4095,1,5,2,501,4754,0,0), +(2597,6291456,4095,1,5,3,501,4755,0,0), +(2598,6291456,4095,1,5,4,501,4756,0,0), +(2599,6291456,4095,1,5,5,501,4757,0,0), +(2600,6291456,4095,1,5,6,501,4758,0,0), +(2601,58720256,4095,0,1,0,383,2528,0,0), +(2602,58720256,4095,0,1,1,383,2529,0,0), +(2603,58720256,4095,0,1,2,383,2530,0,0), +(2604,58720256,4095,0,1,3,383,2531,0,0), +(2605,58720256,4095,0,1,4,383,2532,0,0), +(2606,58720256,4095,0,1,5,383,2533,0,0), +(2607,58720256,4095,0,1,6,383,2534,0,0), +(2608,58720256,4095,0,1,7,383,2535,0,0), +(2609,58720256,4095,0,1,8,383,2536,0,0), +(2610,58720256,4095,0,1,9,383,2537,0,0), +(2611,58720256,4095,0,1,10,383,2538,0,0), +(2612,58720256,4095,0,1,11,383,2539,0,0), +(2613,58720256,4095,0,1,12,383,2540,0,0), +(2614,58720256,4095,0,1,13,383,2541,0,0), +(2615,58720256,4095,0,1,14,383,2542,0,0), +(2616,58720256,4095,0,2,0,384,2543,0,0), +(2617,58720256,4095,0,2,1,384,2544,0,0), +(2618,58720256,4095,0,2,2,384,2545,0,0), +(2619,58720256,4095,0,2,3,384,2546,0,0), +(2620,58720256,4095,0,2,4,384,2547,0,0), +(2621,58720256,4095,0,2,5,384,2548,0,0), +(2622,58720256,4095,0,2,6,384,2549,0,0), +(2623,58720256,4095,0,2,7,384,2550,0,0), +(2624,58720256,4095,0,2,8,384,2551,0,0), +(2625,58720256,4095,0,2,9,384,2552,0,0), +(2626,58720256,4095,0,2,10,384,2553,0,0), +(2627,58720256,4095,0,2,11,384,2554,0,0), +(2628,58720256,4095,0,2,12,384,2555,0,0), +(2629,58720256,4095,0,2,13,384,2556,0,0), +(2630,58720256,4095,0,2,14,384,2557,0,0), +(2631,58720256,4095,0,2,15,384,2558,0,0), +(2632,58720256,4095,0,2,16,384,2559,0,0), +(2633,58720256,4095,0,2,17,384,2560,0,0), +(2634,58720256,4095,0,2,18,384,2561,0,0), +(2635,58720256,4095,0,2,19,384,2562,0,0), +(2636,58720256,4095,0,2,20,384,2563,0,0), +(2637,58720256,4095,0,3,0,385,2564,0,0), +(2638,58720256,4095,0,3,1,385,2565,0,0), +(2639,58720256,4095,0,3,2,385,2566,0,0), +(2640,58720256,4095,0,3,3,385,2567,0,0), +(2641,58720256,4095,0,3,4,385,2568,0,0), +(2642,58720256,4095,0,3,5,385,2569,0,0), +(2643,58720256,4095,0,3,6,385,2570,0,0), +(2644,58720256,4095,0,3,7,385,2571,0,0), +(2645,58720256,4095,0,3,8,385,2572,0,0), +(2646,58720256,4095,0,3,9,385,2573,0,0), +(2647,58720256,4095,0,3,10,385,2574,0,0), +(2648,58720256,4095,0,3,11,385,2575,0,0), +(2649,58720256,4095,0,3,12,385,2576,0,0), +(2650,58720256,4095,0,3,13,385,2577,0,0), +(2651,58720256,4095,0,3,14,385,2578,0,0), +(2652,58720256,4095,0,3,15,385,2579,0,0), +(2653,58720256,4095,0,3,16,385,2580,0,0), +(2654,58720256,4095,0,3,17,385,2581,0,0), +(2655,58720256,4095,0,3,18,385,2582,0,0), +(2656,58720256,4095,0,5,0,386,2614,0,0), +(2657,58720256,4095,0,5,1,386,2584,0,0), +(2658,58720256,4095,0,5,2,386,2585,0,0), +(2659,58720256,4095,0,5,3,386,2586,0,0), +(2660,58720256,4095,0,5,4,386,2587,0,0), +(2661,58720256,4095,0,5,5,386,2586,0,0), +(2662,58720256,4095,0,5,6,386,2589,0,0), +(2663,58720256,4095,0,5,7,386,2590,0,0), +(2664,58720256,4095,0,5,8,386,2591,0,0), +(2665,58720256,4095,0,5,9,386,2592,0,0), +(2666,58720256,4095,0,5,10,386,2593,0,0), +(2667,58720256,4095,0,5,11,386,2594,0,0), +(2668,58720256,4095,0,5,12,386,2584,0,0), +(2669,58720256,4095,0,5,13,386,2596,0,0), +(2670,58720256,4095,0,5,14,386,2594,0,0), +(2671,58720256,4095,0,5,15,386,2598,0,0), +(2672,58720256,4095,0,5,16,386,2599,0,0), +(2673,58720256,4095,0,5,17,386,2600,0,0), +(2674,58720256,4095,0,5,18,386,2601,0,0), +(2675,58720256,4095,0,5,19,386,2591,0,0), +(2676,58720256,4095,0,5,20,386,2589,0,0), +(2677,58720256,4095,0,5,21,386,2586,0,0), +(2678,58720256,4095,0,5,22,386,2589,0,0), +(2679,58720256,4095,0,5,23,386,2599,0,0), +(2680,58720256,4095,0,5,24,386,2607,0,0), +(2681,58720256,4095,0,5,25,386,2608,0,0), +(2682,58720256,4095,0,5,26,386,2609,0,0), +(2683,58720256,4095,0,5,27,386,2592,0,0), +(2684,58720256,4095,0,5,28,386,2586,0,0), +(2685,58720256,4095,0,5,29,386,2590,0,0), +(2686,58720256,4095,0,5,30,386,2587,0,0), +(2687,58720256,4095,0,5,31,386,2614,0,0), +(2688,58720256,4095,0,5,32,386,2614,0,0), +(2689,58720256,4095,0,5,33,386,2614,0,0), +(2690,58720256,4095,0,5,34,386,2614,0,0), +(2691,58720256,4095,1,1,0,387,2618,0,0), +(2692,58720256,4095,1,1,1,387,2619,0,0), +(2693,58720256,4095,1,1,2,387,2620,0,0), +(2694,58720256,4095,1,1,3,387,2621,0,0), +(2695,58720256,4095,1,1,4,387,2622,0,0), +(2696,58720256,4095,1,1,5,387,2623,0,0), +(2697,58720256,4095,1,1,6,387,2624,0,0), +(2698,58720256,4095,1,1,7,387,2625,0,0), +(2699,58720256,4095,1,1,8,387,2626,0,0), +(2700,58720256,4095,1,1,9,387,2627,0,0), +(2701,58720256,4095,1,1,10,387,2628,0,0), +(2702,58720256,4095,1,1,11,387,2629,0,0), +(2703,58720256,4095,1,1,12,387,2630,0,0), +(2704,58720256,4095,1,1,13,387,2631,0,0), +(2705,58720256,4095,1,1,14,387,2632,0,0), +(2706,58720256,4095,1,2,0,388,2633,0,0), +(2707,58720256,4095,1,2,1,388,2634,0,0), +(2708,58720256,4095,1,2,2,388,2635,0,0), +(2709,58720256,4095,1,2,3,388,2636,0,0), +(2710,58720256,4095,1,2,4,388,2637,0,0), +(2711,58720256,4095,1,2,5,388,2638,0,0), +(2712,58720256,4095,1,2,6,388,2639,0,0), +(2713,58720256,4095,1,2,7,388,2640,0,0), +(2714,58720256,4095,1,2,8,388,2641,0,0), +(2715,58720256,4095,1,2,9,388,2642,0,0), +(2716,58720256,4095,1,2,10,388,2643,0,0), +(2717,58720256,4095,1,2,11,388,2644,0,0), +(2718,58720256,4095,1,2,12,388,2645,0,0), +(2719,58720256,4095,1,2,13,388,2646,0,0), +(2720,58720256,4095,1,2,14,388,2647,0,0), +(2721,58720256,4095,1,2,15,388,2648,0,0), +(2722,58720256,4095,1,2,16,388,2649,0,0), +(2723,58720256,4095,1,2,17,388,2650,0,0), +(2724,58720256,4095,1,2,18,388,2651,0,0), +(2725,58720256,4095,1,2,19,388,2652,0,0), +(2726,58720256,4095,1,3,0,230,2653,0,0), +(2727,58720256,4095,1,3,1,230,2654,0,0), +(2728,58720256,4095,1,3,2,230,2655,0,0), +(2729,58720256,4095,1,3,3,230,2656,0,0), +(2730,58720256,4095,1,3,4,230,2657,0,0), +(2731,58720256,4095,1,3,5,230,2658,0,0), +(2732,58720256,4095,1,3,6,230,2659,0,0), +(2733,58720256,4095,1,3,7,230,2660,0,0), +(2734,58720256,4095,1,3,8,230,2661,0,0), +(2735,58720256,4095,1,3,9,230,2662,0,0), +(2736,58720256,4095,1,3,10,230,2663,0,0), +(2737,58720256,4095,1,3,11,230,2664,0,0), +(2738,58720256,4095,1,3,12,230,2665,0,0), +(2739,58720256,4095,1,3,13,230,2666,0,0), +(2740,58720256,4095,1,3,14,230,2667,0,0), +(2741,58720256,4095,1,3,15,230,2668,0,0), +(2742,58720256,4095,1,3,16,230,2669,0,0), +(2743,58720256,4095,1,4,0,231,2670,0,0), +(2744,58720256,4095,1,4,1,231,2671,0,0), +(2745,58720256,4095,1,4,2,231,2672,0,0), +(2746,58720256,4095,1,4,3,231,2673,0,0), +(2747,58720256,4095,1,4,4,231,2674,0,0), +(2748,58720256,4095,1,4,5,231,2675,0,0), +(2749,58720256,4095,1,4,6,231,2676,0,0), +(2750,58720256,4095,1,4,7,231,2677,0,0), +(2751,58720256,4095,1,4,8,231,2678,0,0), +(2752,58720256,4095,1,4,9,231,2679,0,0), +(2753,58720256,4095,1,4,10,231,2680,0,0), +(2754,58720256,4095,1,4,11,231,2681,0,0), +(2755,58720256,4095,1,4,12,231,2682,0,0), +(2756,58720256,4095,1,5,0,232,2683,0,0), +(2757,58720256,4095,1,5,1,232,2684,0,0), +(2758,58720256,4095,1,5,2,232,2685,0,0), +(2759,58720256,4095,1,5,3,232,2686,0,0), +(2760,58720256,4095,1,5,4,232,2687,0,0), +(2761,58720256,4095,1,5,5,232,2688,0,0), +(2762,67108864,4095,0,1,0,233,2689,0,0), +(2763,67108864,4095,0,1,1,233,2690,0,0), +(2764,67108864,4095,0,1,2,233,2691,0,0), +(2765,67108864,4095,0,1,3,233,2692,0,0), +(2766,67108864,4095,0,2,0,234,2693,0,0), +(2767,67108864,4095,0,2,1,234,2694,0,0), +(2768,67108864,4095,0,2,2,234,2695,0,0), +(2769,67108864,4095,0,2,3,234,2696,0,0), +(2770,67108864,4095,0,2,4,234,2697,0,0), +(2771,67108864,4095,0,2,5,234,2698,0,0), +(2772,67108864,4095,0,3,0,235,2699,0,0), +(2773,67108864,4095,0,3,1,235,2700,0,0), +(2774,67108864,4095,0,3,2,235,2701,0,0), +(2775,67108864,4095,0,3,3,235,2702,0,0), +(2776,67108864,4095,0,3,4,235,2703,0,0), +(2777,67108864,4095,0,3,5,235,2704,0,0), +(2778,67108864,4095,0,3,6,235,2705,0,0), +(2779,67108864,4095,0,4,0,236,2706,0,0), +(2780,67108864,4095,0,4,1,236,2707,0,0), +(2781,67108864,4095,0,4,2,236,2708,0,0), +(2782,67108864,4095,0,4,3,236,2709,0,0), +(2783,67108864,4095,0,4,4,236,2710,0,0), +(2784,67108864,4095,0,4,5,236,2711,0,0), +(2785,67108864,4095,0,4,6,236,2712,0,0), +(2786,67108864,4095,0,5,0,237,2713,0,0), +(2787,67108864,4095,0,5,1,237,2714,0,0), +(2788,67108864,4095,0,5,2,237,2715,0,0), +(2789,67108864,4095,0,5,3,237,2716,0,0), +(2790,67108864,4095,0,5,4,237,2717,0,0), +(2791,67108864,4095,0,5,5,237,2718,0,0), +(2792,67108864,4095,0,5,6,237,2719,0,0), +(2793,67108864,4095,0,6,0,389,2720,0,0), +(2794,67108864,4095,0,6,1,389,2721,0,0), +(2795,67108864,4095,0,6,2,389,2722,0,0), +(2796,67108864,4095,0,6,3,389,2723,0,0), +(2797,67108864,4095,1,1,0,239,2724,0,0), +(2798,67108864,4095,1,1,1,239,2725,0,0), +(2799,67108864,4095,1,1,2,239,2726,0,0), +(2800,67108864,4095,1,1,3,239,2727,0,0), +(2801,67108864,4095,1,2,0,240,2728,0,0), +(2802,67108864,4095,1,2,1,240,2729,0,0), +(2803,67108864,4095,1,2,2,240,2730,0,0), +(2804,67108864,4095,1,2,3,240,2731,0,0), +(2805,67108864,4095,1,2,4,240,2732,0,0), +(2806,67108864,4095,1,2,5,240,2733,0,0), +(2807,67108864,4095,1,3,0,241,2734,0,0), +(2808,67108864,4095,1,3,1,241,2735,0,0), +(2809,67108864,4095,1,3,2,241,2736,0,0), +(2810,67108864,4095,1,3,3,241,2737,0,0), +(2811,67108864,4095,1,3,4,241,2738,0,0), +(2812,67108864,4095,1,3,5,241,2739,0,0), +(2813,67108864,4095,1,4,0,242,2740,0,0), +(2814,67108864,4095,1,4,1,242,2741,0,0), +(2815,67108864,4095,1,4,2,242,2742,0,0), +(2816,67108864,4095,1,4,3,242,2743,0,0), +(2817,67108864,4095,1,4,4,242,2744,0,0), +(2818,67108864,4095,1,4,5,242,2745,0,0), +(2819,67108864,4095,1,4,6,242,2746,0,0), +(2820,67108864,4095,1,5,0,243,2747,0,0), +(2821,67108864,4095,1,5,1,243,2748,0,0), +(2822,67108864,4095,1,5,2,243,2749,0,0), +(2823,67108864,4095,1,5,3,243,2750,0,0), +(2824,67108864,4095,1,5,4,243,2751,0,0), +(2825,67108864,4095,1,5,5,243,2752,0,0), +(2826,67108864,4095,1,5,6,243,2753,0,0), +(2827,67108864,4095,1,5,7,243,2754,0,0), +(2828,67108864,4095,1,6,0,390,2755,0,0), +(2829,67108864,4095,1,6,1,390,2756,0,0), +(2830,67108864,4095,1,6,2,390,2757,0,0), +(2831,67108864,4095,1,6,3,390,2758,0,0), +(2832,134217728,4095,0,1,0,391,2759,0,0), +(2833,134217728,4095,0,1,1,391,2760,0,0), +(2834,134217728,4095,0,1,2,391,2761,0,0), +(2835,134217728,4095,0,1,3,391,2762,0,0), +(2836,134217728,4095,0,1,4,391,2763,0,0), +(2837,134217728,4095,0,2,0,392,2764,0,0), +(2838,134217728,4095,0,2,1,392,2765,0,0), +(2839,134217728,4095,0,2,2,392,2766,0,0), +(2840,134217728,4095,0,2,3,392,2767,0,0), +(2841,134217728,4095,0,2,4,392,2768,0,0), +(2842,134217728,4095,0,3,0,247,2769,0,0), +(2843,134217728,4095,0,3,1,247,2770,0,0), +(2844,134217728,4095,0,3,2,247,2771,0,0), +(2845,134217728,4095,0,3,3,247,2772,0,0), +(2846,134217728,4095,0,3,4,247,2773,0,0), +(2847,134217728,4095,0,4,0,248,2774,0,0), +(2848,134217728,4095,0,4,1,248,2775,0,0), +(2849,134217728,4095,0,4,2,248,2776,0,0), +(2850,134217728,4095,0,5,0,393,2777,0,0), +(2851,134217728,4095,0,5,1,393,2778,0,0), +(2852,134217728,4095,0,5,2,393,2779,0,0), +(2853,134217728,4095,0,5,3,393,2780,0,0), +(2854,134217728,4095,0,5,4,393,2781,0,0), +(2855,134217728,4095,0,6,0,865,9631,0,0), +(2856,134217728,4095,0,6,1,865,9632,0,0), +(2857,134217728,4095,0,6,2,865,9633,0,0), +(2858,134217728,4095,0,6,3,865,9634,0,0), +(2859,134217728,4095,0,6,4,865,9632,0,0), +(2860,134217728,4095,0,6,5,865,9633,0,0), +(2861,134217728,4095,0,6,6,865,9634,0,0), +(2862,134217728,4095,0,6,7,865,9632,0,0), +(2863,134217728,4095,0,6,8,865,9633,0,0), +(2864,134217728,4095,0,6,9,865,9634,0,0), +(2865,134217728,4095,1,1,0,395,2792,0,0), +(2866,134217728,4095,1,1,1,395,2793,0,0), +(2867,134217728,4095,1,1,2,395,2794,0,0), +(2868,134217728,4095,1,1,3,395,2795,0,0), +(2869,134217728,4095,1,1,4,395,2796,0,0), +(2870,134217728,4095,1,2,0,396,2797,0,0), +(2871,134217728,4095,1,2,1,396,2798,0,0), +(2872,134217728,4095,1,2,2,396,2799,0,0), +(2873,134217728,4095,1,2,3,396,2800,0,0), +(2874,134217728,4095,1,3,0,254,2801,0,0), +(2875,134217728,4095,1,3,1,254,2802,0,0), +(2876,134217728,4095,1,3,2,254,2803,0,0), +(2877,134217728,4095,1,3,3,254,2804,0,0), +(2878,134217728,4095,1,3,4,254,2805,0,0), +(2879,134217728,4095,1,4,0,255,2806,0,0), +(2880,134217728,4095,1,4,1,255,2807,0,0), +(2881,134217728,4095,1,4,2,255,2808,0,0), +(2882,134217728,4095,1,5,0,256,2809,0,0), +(2883,134217728,4095,1,5,1,256,2810,0,0), +(2884,134217728,4095,1,5,2,256,2811,0,0), +(2885,134217728,4095,1,5,3,256,2812,0,0), +(2886,134217728,4095,1,5,4,256,2813,0,0), +(2887,134217728,4095,1,6,0,866,9635,0,0), +(2888,134217728,4095,1,6,1,866,9636,0,0), +(2889,134217728,4095,1,6,2,866,9637,0,0), +(2890,134217728,4095,1,6,3,866,9638,0,0), +(2891,134217728,4095,1,6,4,866,9636,0,0), +(2892,134217728,4095,1,6,5,866,9637,0,0), +(2893,134217728,4095,1,6,6,866,9638,0,0), +(2894,134217728,4095,1,6,7,866,9636,0,0), +(2895,134217728,4095,1,6,8,866,9637,0,0), +(2896,134217728,4095,1,6,9,866,9638,0,0), +(2897,268435456,4095,0,1,0,259,2824,0,0), +(2898,268435456,4095,0,1,1,259,2825,0,0), +(2899,268435456,4095,0,1,2,259,2826,0,0), +(2900,268435456,4095,0,1,3,259,2827,0,0), +(2901,268435456,4095,0,1,4,259,2828,0,0), +(2902,268435456,4095,0,1,5,259,2829,0,0), +(2903,268435456,4095,0,1,6,259,2830,0,0), +(2904,268435456,4095,0,1,7,259,2831,0,0), +(2905,268435456,4095,0,2,0,260,2832,0,0), +(2906,268435456,4095,0,2,1,260,2833,0,0), +(2907,268435456,4095,0,2,2,260,2834,0,0), +(2908,268435456,4095,0,2,3,260,2835,0,0), +(2909,268435456,4095,0,2,4,260,2836,0,0), +(2910,268435456,4095,0,2,5,260,2837,0,0), +(2911,268435456,4095,0,2,6,260,2838,0,0), +(2912,268435456,4095,0,2,7,260,2839,0,0), +(2913,268435456,4095,0,3,0,261,2840,0,0), +(2914,268435456,4095,0,3,1,261,2841,0,0), +(2915,268435456,4095,0,3,2,261,2842,0,0), +(2916,268435456,4095,0,3,3,261,2843,0,0), +(2917,268435456,4095,0,3,4,261,2844,0,0), +(2918,268435456,4095,0,3,5,261,2845,0,0), +(2919,268435456,4095,0,3,6,261,2846,0,0), +(2920,268435456,4095,0,3,7,261,2847,0,0), +(2921,268435456,4095,0,3,8,261,2848,0,0), +(2922,268435456,4095,0,3,9,261,2849,0,0), +(2923,268435456,4095,0,3,10,261,2850,0,0), +(2924,268435456,4095,0,3,11,261,2851,0,0), +(2925,268435456,4095,0,4,0,262,2852,0,0), +(2926,268435456,4095,0,4,1,262,2853,0,0), +(2927,268435456,4095,0,4,2,262,2854,0,0), +(2928,268435456,4095,0,4,3,262,2855,0,0), +(2929,268435456,4095,0,4,4,262,2856,0,0), +(2930,268435456,4095,0,4,5,262,2857,0,0), +(2931,268435456,4095,0,4,6,262,2858,0,0), +(2932,268435456,4095,0,4,7,262,2859,0,0), +(2933,268435456,4095,0,4,8,262,2860,0,0), +(2934,268435456,4095,0,4,9,262,2861,0,0), +(2935,268435456,4095,0,5,0,263,2862,0,0), +(2936,268435456,4095,0,5,1,263,2863,0,0), +(2937,268435456,4095,0,5,2,263,2864,0,0), +(2938,268435456,4095,0,5,3,263,2865,0,0), +(2939,268435456,4095,0,5,4,263,2866,0,0), +(2940,268435456,4095,0,5,5,263,2867,0,0), +(2941,268435456,4095,0,5,6,263,2868,0,0), +(2942,268435456,4095,0,5,7,263,2869,0,0), +(2943,268435456,4095,1,1,0,264,2870,0,0), +(2944,268435456,4095,1,1,1,264,2871,0,0), +(2945,268435456,4095,1,1,2,264,2872,0,0), +(2946,268435456,4095,1,1,3,264,2873,0,0), +(2947,268435456,4095,1,1,4,264,2874,0,0), +(2948,268435456,4095,1,1,5,264,2875,0,0), +(2949,268435456,4095,1,1,6,264,2876,0,0), +(2950,268435456,4095,1,1,7,264,2877,0,0), +(2951,268435456,4095,1,2,0,265,2878,0,0), +(2952,268435456,4095,1,2,1,265,2879,0,0), +(2953,268435456,4095,1,2,2,265,2880,0,0), +(2954,268435456,4095,1,2,3,265,2881,0,0), +(2955,268435456,4095,1,2,4,265,2882,0,0), +(2956,268435456,4095,1,2,5,265,2883,0,0), +(2957,268435456,4095,1,2,6,265,2884,0,0), +(2958,268435456,4095,1,2,7,265,2885,0,0), +(2959,268435456,4095,1,3,0,266,2886,0,0), +(2960,268435456,4095,1,3,1,266,2887,0,0), +(2961,268435456,4095,1,3,2,266,2888,0,0), +(2962,268435456,4095,1,3,3,266,2889,0,0), +(2963,268435456,4095,1,3,4,266,2890,0,0), +(2964,268435456,4095,1,3,5,266,2891,0,0), +(2965,268435456,4095,1,3,6,266,2892,0,0), +(2966,268435456,4095,1,3,7,266,2893,0,0), +(2967,268435456,4095,1,3,8,266,2894,0,0), +(2968,268435456,4095,1,3,9,266,2895,0,0), +(2969,268435456,4095,1,4,0,267,2896,0,0), +(2970,268435456,4095,1,4,1,267,2897,0,0), +(2971,268435456,4095,1,4,2,267,2898,0,0), +(2972,268435456,4095,1,4,3,267,2899,0,0), +(2973,268435456,4095,1,4,4,267,2900,0,0), +(2974,268435456,4095,1,4,5,267,2901,0,0), +(2975,268435456,4095,1,4,6,267,2902,0,0), +(2976,268435456,4095,1,4,7,267,2903,0,0), +(2977,268435456,4095,1,4,8,267,2904,0,0), +(2978,268435456,4095,1,4,9,267,2905,0,0), +(2979,268435456,4095,1,5,0,268,2906,0,0), +(2980,268435456,4095,1,5,1,268,2907,0,0), +(2981,268435456,4095,1,5,2,268,2908,0,0), +(2982,268435456,4095,1,5,3,268,2909,0,0), +(2983,268435456,4095,1,5,4,268,2910,0,0), +(2984,536870912,4095,0,1,0,269,2911,0,0), +(2985,536870912,4095,0,1,1,269,2912,0,0), +(2986,536870912,4095,0,1,2,269,2913,0,0), +(2987,536870912,4095,0,1,3,269,2914,0,0), +(2988,536870912,4095,0,2,0,270,2915,0,0), +(2989,536870912,4095,0,2,1,270,2916,0,0), +(2990,536870912,4095,0,2,2,270,2917,0,0), +(2991,536870912,4095,0,2,3,270,2918,0,0), +(2992,536870912,4095,0,2,4,270,2919,0,0), +(2993,536870912,4095,0,2,5,270,2920,0,0), +(2994,536870912,4095,0,2,6,270,2921,0,0), +(2995,536870912,4095,0,2,7,270,2922,0,0), +(2996,536870912,4095,0,2,8,270,2923,0,0), +(2997,536870912,4095,0,2,9,270,2924,0,0), +(2998,536870912,4095,0,3,0,271,2925,0,0), +(2999,536870912,4095,0,3,1,271,2926,0,0), +(3000,536870912,4095,0,3,2,271,2927,0,0), +(3001,536870912,4095,0,3,3,271,2928,0,0), +(3002,536870912,4095,0,3,4,271,2929,0,0), +(3003,536870912,4095,0,3,5,271,2930,0,0), +(3004,536870912,4095,0,4,0,272,2931,0,0), +(3005,536870912,4095,0,4,1,272,2932,0,0), +(3006,536870912,4095,0,4,2,272,2933,0,0), +(3007,536870912,4095,0,4,3,272,2934,0,0), +(3008,536870912,4095,0,4,4,272,2935,0,0), +(3009,536870912,4095,0,4,5,272,2936,0,0), +(3010,536870912,4095,0,5,0,273,2937,0,0), +(3011,536870912,4095,0,5,1,273,2940,0,0), +(3012,536870912,4095,0,5,2,273,2941,0,0), +(3013,536870912,4095,0,5,3,273,2941,0,0), +(3014,536870912,4095,0,5,4,273,2939,0,0), +(3015,536870912,4095,0,5,5,273,2938,0,0), +(3016,536870912,4095,0,5,6,273,2937,0,0), +(3017,536870912,4095,0,5,7,273,2937,0,0), +(3018,536870912,4095,0,5,8,273,2939,0,0), +(3019,536870912,4095,0,6,0,398,2946,0,0), +(3020,536870912,4095,0,6,1,398,2947,0,0), +(3021,536870912,4095,0,6,2,398,2948,0,0), +(3022,536870912,4095,0,6,3,398,2949,0,0), +(3023,536870912,4095,0,8,0,275,2950,0,0), +(3024,536870912,4095,0,8,1,275,2951,0,0), +(3025,536870912,4095,0,8,2,275,2952,0,0), +(3026,536870912,4095,0,8,3,275,2953,0,0), +(3027,536870912,4095,0,8,4,275,2954,0,0), +(3028,536870912,4095,0,8,5,275,2955,0,0), +(3029,536870912,4095,1,1,0,276,2956,0,0), +(3030,536870912,4095,1,1,1,276,2957,0,0), +(3031,536870912,4095,1,1,2,276,2958,0,0), +(3032,536870912,4095,1,1,3,276,2959,0,0), +(3033,536870912,4095,1,2,0,277,2960,0,0), +(3034,536870912,4095,1,2,1,277,2961,0,0), +(3035,536870912,4095,1,2,2,277,2962,0,0), +(3036,536870912,4095,1,2,3,277,2963,0,0), +(3037,536870912,4095,1,2,4,277,2964,0,0), +(3038,536870912,4095,1,2,5,277,2965,0,0), +(3039,536870912,4095,1,2,6,277,2966,0,0), +(3040,536870912,4095,1,2,7,277,2967,0,0), +(3041,536870912,4095,1,2,8,277,2968,0,0), +(3042,536870912,4095,1,2,9,277,2969,0,0), +(3043,536870912,4095,1,3,0,278,2970,0,0), +(3044,536870912,4095,1,3,1,278,2971,0,0), +(3045,536870912,4095,1,3,2,278,2972,0,0), +(3046,536870912,4095,1,3,3,278,2973,0,0), +(3047,536870912,4095,1,3,4,278,2974,0,0), +(3048,536870912,4095,1,3,5,278,2975,0,0), +(3049,536870912,4095,1,3,6,278,2976,0,0), +(3050,536870912,4095,1,4,0,279,2977,0,0), +(3051,536870912,4095,1,4,1,279,2978,0,0), +(3052,536870912,4095,1,4,2,279,2979,0,0), +(3053,536870912,4095,1,4,3,279,2980,0,0), +(3054,536870912,4095,1,4,4,279,2981,0,0), +(3055,536870912,4095,1,4,5,279,2982,0,0), +(3056,536870912,4095,1,5,0,280,2983,0,0), +(3057,536870912,4095,1,5,1,280,2984,0,0), +(3058,536870912,4095,1,5,2,280,2985,0,0), +(3059,536870912,4095,1,5,3,280,2986,0,0), +(3060,536870912,4095,1,5,4,280,2987,0,0), +(3061,536870912,4095,1,5,5,280,2988,0,0), +(3062,536870912,4095,1,6,0,399,2989,0,0), +(3063,536870912,4095,1,6,1,399,2990,0,0), +(3064,536870912,4095,1,6,2,399,2991,0,0), +(3065,536870912,4095,1,6,3,399,2992,0,0), +(3066,536870912,4095,1,8,0,282,2993,0,0), +(3067,536870912,4095,1,8,1,282,2994,0,0), +(3068,536870912,4095,1,8,2,282,2995,0,0), +(3069,536870912,4095,1,8,3,282,2996,0,0), +(3070,536870912,4095,1,8,4,282,2997,0,0), +(3071,536870912,4095,1,8,5,282,2998,0,0), +(3072,1073741824,4095,0,1,0,283,2999,0,0), +(3073,1073741824,4095,0,1,1,283,3000,0,0), +(3074,1073741824,4095,0,1,2,283,3001,0,0), +(3075,1073741824,4095,0,1,3,283,3002,0,0), +(3076,1073741824,4095,0,1,4,283,3003,0,0), +(3077,1073741824,4095,0,1,5,283,3004,0,0), +(3078,1073741824,4095,0,1,6,283,3005,0,0), +(3079,1073741824,4095,0,1,7,283,3006,0,0), +(3080,1073741824,4095,0,2,0,284,3007,0,0), +(3081,1073741824,4095,0,2,1,284,3008,0,0), +(3082,1073741824,4095,0,2,2,284,3009,0,0), +(3083,1073741824,4095,0,2,3,284,3010,0,0), +(3084,1073741824,4095,0,2,4,284,3011,0,0), +(3085,1073741824,4095,0,2,5,284,3012,0,0), +(3086,1073741824,4095,0,3,0,285,3013,0,0), +(3087,1073741824,4095,0,3,1,285,3014,0,0), +(3088,1073741824,4095,0,3,2,285,3015,0,0), +(3089,1073741824,4095,0,3,3,285,3016,0,0), +(3090,1073741824,4095,0,3,4,285,3017,0,0), +(3091,1073741824,4095,0,3,5,285,3018,0,0), +(3092,1073741824,4095,0,3,6,285,3019,0,0), +(3093,1073741824,4095,0,3,7,285,3020,0,0), +(3094,1073741824,4095,0,3,8,285,3021,0,0), +(3095,1073741824,4095,0,3,9,285,3022,0,0), +(3096,1073741824,4095,0,3,10,285,3023,0,0), +(3097,1073741824,4095,0,3,11,285,3024,0,0), +(3098,1073741824,4095,0,4,0,286,3025,0,0), +(3099,1073741824,4095,0,4,1,286,3026,0,0), +(3100,1073741824,4095,0,4,2,286,3027,0,0), +(3101,1073741824,4095,0,4,3,286,3028,0,0), +(3102,1073741824,4095,0,4,4,286,3029,0,0), +(3103,1073741824,4095,0,4,5,286,3030,0,0), +(3104,1073741824,4095,0,4,6,286,3031,0,0), +(3105,1073741824,4095,0,6,0,400,3032,0,0), +(3106,1073741824,4095,0,6,1,400,3033,0,0), +(3107,1073741824,4095,0,6,2,400,3034,0,0), +(3108,1073741824,4095,0,6,3,400,3035,0,0), +(3109,1073741824,4095,0,7,0,288,3036,0,0), +(3110,1073741824,4095,0,7,1,288,3037,0,0), +(3111,1073741824,4095,0,7,2,288,3038,0,0), +(3112,1073741824,4095,0,7,3,288,3039,0,0), +(3113,1073741824,4095,0,7,4,288,3040,0,0), +(3114,1073741824,4095,0,7,5,288,3041,0,0), +(3115,1073741824,4095,0,7,6,288,3042,0,0), +(3116,1073741824,4095,0,8,0,289,3043,0,0), +(3117,1073741824,4095,0,8,1,289,3044,0,0), +(3118,1073741824,4095,0,8,2,289,3045,0,0), +(3119,1073741824,4095,0,8,3,289,3046,0,0), +(3120,1073741824,4095,0,8,4,289,3047,0,0), +(3121,1073741824,4095,0,8,5,289,3048,0,0), +(3122,1073741824,4095,1,1,0,290,3049,0,0), +(3123,1073741824,4095,1,1,1,290,3050,0,0), +(3124,1073741824,4095,1,1,2,290,3051,0,0), +(3125,1073741824,4095,1,1,3,290,3052,0,0), +(3126,1073741824,4095,1,1,4,290,3053,0,0), +(3127,1073741824,4095,1,1,5,290,3054,0,0), +(3128,1073741824,4095,1,1,6,290,3055,0,0), +(3129,1073741824,4095,1,1,7,290,3056,0,0), +(3130,1073741824,4095,1,2,0,291,3057,0,0), +(3131,1073741824,4095,1,2,1,291,3058,0,0), +(3132,1073741824,4095,1,2,2,291,3059,0,0), +(3133,1073741824,4095,1,2,3,291,3060,0,0), +(3134,1073741824,4095,1,2,4,291,3061,0,0), +(3135,1073741824,4095,1,2,5,291,3062,0,0), +(3136,1073741824,4095,1,3,0,292,3063,0,0), +(3137,1073741824,4095,1,3,1,292,3064,0,0), +(3138,1073741824,4095,1,3,2,292,3065,0,0), +(3139,1073741824,4095,1,3,3,292,3066,0,0), +(3140,1073741824,4095,1,3,4,292,3067,0,0), +(3141,1073741824,4095,1,3,5,292,3068,0,0), +(3142,1073741824,4095,1,3,6,292,3069,0,0), +(3143,1073741824,4095,1,3,7,292,3070,0,0), +(3144,1073741824,4095,1,3,8,292,3071,0,0), +(3145,1073741824,4095,1,3,9,292,3072,0,0), +(3146,1073741824,4095,1,4,0,293,3073,0,0), +(3147,1073741824,4095,1,4,1,293,3074,0,0), +(3148,1073741824,4095,1,4,2,293,3075,0,0), +(3149,1073741824,4095,1,4,3,293,3076,0,0), +(3150,1073741824,4095,1,4,4,293,3077,0,0), +(3151,1073741824,4095,1,4,5,293,3078,0,0), +(3152,1073741824,4095,1,4,6,293,3079,0,0), +(3153,1073741824,4095,1,5,0,297,3097,0,0), +(3154,1073741824,4095,1,5,1,297,3097,0,0), +(3155,1073741824,4095,1,5,2,297,3097,0,0), +(3156,1073741824,4095,1,5,3,297,3097,0,0), +(3157,1073741824,4095,1,5,4,297,3097,0,0), +(3158,1073741824,4095,1,5,5,297,9681,0,0), +(3159,1073741824,4095,1,6,0,401,3086,0,0), +(3160,1073741824,4095,1,6,1,401,3087,0,0), +(3161,1073741824,4095,1,6,2,401,3088,0,0), +(3162,1073741824,4095,1,6,3,401,3089,0,0), +(3163,1073741824,4095,1,7,0,296,3090,0,0), +(3164,1073741824,4095,1,7,1,296,3091,0,0), +(3165,1073741824,4095,1,7,2,296,3092,0,0), +(3166,1073741824,4095,1,7,3,296,3093,0,0), +(3167,1073741824,4095,1,7,4,296,3094,0,0), +(3168,1073741824,4095,1,7,5,296,3095,0,0), +(3169,1073741824,4095,1,7,6,296,3096,0,0), +(3170,1073741824,4095,1,8,0,294,3080,0,0), +(3171,1073741824,4095,1,8,1,294,3098,0,0), +(3172,1073741824,4095,1,8,2,294,3099,0,0), +(3173,2147483648,4095,0,1,0,298,3100,0,0), +(3174,2147483648,4095,0,1,1,298,3101,0,0), +(3175,2147483648,4095,0,1,2,298,3102,0,0), +(3176,2147483648,4095,0,1,3,298,3103,0,0), +(3177,2147483648,4095,0,1,4,298,3104,0,0), +(3178,2147483648,4095,0,1,5,298,3105,0,0), +(3179,2147483648,4095,0,1,6,298,3106,0,0), +(3180,2147483648,4095,0,2,0,299,3107,0,0), +(3181,2147483648,4095,0,2,1,299,3108,0,0), +(3182,2147483648,4095,0,2,2,299,3109,0,0), +(3183,2147483648,4095,0,2,3,299,3110,0,0), +(3184,2147483648,4095,0,2,4,299,3111,0,0), +(3185,2147483648,4095,0,2,5,299,3112,0,0), +(3186,2147483648,4095,0,2,6,299,3113,0,0), +(3187,2147483648,4095,0,3,0,300,3114,0,0), +(3188,2147483648,4095,0,3,1,300,3115,0,0), +(3189,2147483648,4095,0,3,2,300,3116,0,0), +(3190,2147483648,4095,0,3,3,300,3117,0,0), +(3191,2147483648,4095,0,3,4,300,3118,0,0), +(3192,2147483648,4095,0,3,5,300,3119,0,0), +(3193,2147483648,4095,0,4,0,301,3120,0,0), +(3194,2147483648,4095,0,4,1,301,3121,0,0), +(3195,2147483648,4095,0,4,2,301,3122,0,0), +(3196,2147483648,4095,0,4,3,301,3123,0,0), +(3197,2147483648,4095,0,4,4,301,3124,0,0), +(3198,2147483648,4095,0,4,5,301,3125,0,0), +(3199,2147483648,4095,0,4,6,301,3126,0,0), +(3200,2147483648,4095,0,4,7,301,3127,0,0), +(3201,2147483648,4095,0,5,0,302,3128,0,0), +(3202,2147483648,4095,0,5,1,706,3129,0,0), +(3203,2147483648,4095,0,5,2,302,3130,0,0), +(3204,2147483648,4095,0,5,3,706,3131,0,0), +(3205,2147483648,4095,0,5,4,302,3132,0,0), +(3206,2147483648,4095,0,5,5,302,3133,0,0), +(3207,2147483648,4095,0,5,6,302,3134,0,0), +(3208,2147483648,4095,0,5,7,302,3135,0,0), +(3213,2147483648,4095,1,1,0,303,3140,0,0), +(3214,2147483648,4095,1,1,1,303,3141,0,0), +(3215,2147483648,4095,1,1,2,303,3142,0,0), +(3216,2147483648,4095,1,1,3,303,3143,0,0), +(3217,2147483648,4095,1,1,4,303,3144,0,0), +(3218,2147483648,4095,1,1,5,303,3145,0,0), +(3219,2147483648,4095,1,1,6,303,3146,0,0), +(3220,2147483648,4095,1,2,0,304,3147,0,0), +(3221,2147483648,4095,1,2,1,304,3148,0,0), +(3222,2147483648,4095,1,2,2,304,3149,0,0), +(3223,2147483648,4095,1,2,3,304,3150,0,0), +(3224,2147483648,4095,1,2,4,304,3151,0,0), +(3225,2147483648,4095,1,2,5,304,3152,0,0), +(3226,2147483648,4095,1,2,6,304,3153,0,0), +(3227,2147483648,4095,1,3,0,305,3154,0,0), +(3228,2147483648,4095,1,3,1,305,3155,0,0), +(3229,2147483648,4095,1,3,2,305,3156,0,0), +(3230,2147483648,4095,1,3,3,305,3157,0,0), +(3231,2147483648,4095,1,3,4,305,3158,0,0), +(3232,2147483648,4095,1,3,5,305,3159,0,0), +(3233,2147483648,4095,1,3,6,305,3160,0,0), +(3234,2147483648,4095,1,3,7,305,3161,0,0), +(3235,2147483648,4095,1,3,8,305,3162,0,0), +(3236,2147483648,4095,1,4,0,306,3163,0,0), +(3237,2147483648,4095,1,4,1,306,3164,0,0), +(3238,2147483648,4095,1,4,2,306,3165,0,0), +(3239,2147483648,4095,1,4,3,306,3166,0,0), +(3240,2147483648,4095,1,4,4,306,3167,0,0), +(3241,2147483648,4095,1,4,5,306,3168,0,0), +(3242,2147483648,4095,1,4,6,306,3169,0,0), +(3243,2147483648,4095,1,4,7,306,3170,0,0), +(3245,2147483648,4095,1,7,0,308,3172,0,0), +(3246,2147483648,4095,1,7,1,308,3173,0,0), +(3247,2147483648,4095,1,7,2,308,3174,0,0), +(3248,2147483648,4095,1,7,3,308,3175,0,0), +(3249,2147483648,4095,1,7,4,308,3176,0,0), +(3250,2147483648,4095,1,7,5,308,3177,0,0), +(3251,2147483648,4095,1,7,6,308,3178,0,0), +(3252,2147483648,4095,1,8,0,309,3179,0,0), +(3253,2147483648,4095,1,8,1,309,3180,0,0), +(3254,2147483648,4095,1,8,2,309,3181,0,0), +(3255,2147483648,4095,1,8,3,309,3182,0,0), +(3256,2147483648,4095,1,8,4,309,3183,0,0), +(3257,2147483648,4095,1,8,5,309,3184,0,0), +(3258,2147483648,4095,1,8,6,309,3185,0,0), +(3259,4294967296,4095,0,1,0,310,3186,0,0), +(3260,4294967296,4095,0,1,1,310,3187,0,0), +(3261,4294967296,4095,0,1,2,310,3188,0,0), +(3262,4294967296,4095,0,1,3,310,3189,0,0), +(3263,4294967296,4095,0,2,0,311,3190,0,0), +(3264,4294967296,4095,0,3,0,312,3191,0,0), +(3265,4294967296,4095,0,3,1,312,3192,0,0), +(3266,4294967296,4095,0,3,2,312,3193,0,0), +(3267,4294967296,4095,0,3,3,312,3194,0,0), +(3268,4294967296,4095,0,4,0,313,3195,0,0), +(3269,4294967296,4095,0,4,1,313,3196,0,0), +(3270,4294967296,4095,0,4,2,313,3197,0,0), +(3271,4294967296,4095,0,4,3,313,3198,0,0), +(3272,4294967296,4095,0,5,0,314,3199,0,0), +(3273,4294967296,4095,0,5,1,314,3200,0,0), +(3274,4294967296,4095,0,5,2,314,3201,0,0), +(3275,4294967296,4095,0,5,3,314,3202,0,0), +(3276,4294967296,4095,0,5,4,314,3203,0,0), +(3277,4294967296,4095,0,5,5,314,3204,0,0), +(3278,4294967296,4095,0,5,6,314,3205,0,0), +(3279,8589934592,4095,0,1,0,318,3209,0,0), +(3280,8589934592,4095,0,1,1,318,3210,0,0), +(3281,8589934592,4095,0,1,2,318,3211,0,0), +(3282,8589934592,4095,0,1,3,318,3212,0,0), +(3283,8589934592,4095,0,1,4,318,3213,0,0), +(3284,8589934592,4095,0,2,0,319,3214,0,0), +(3285,8589934592,4095,0,2,1,319,3215,0,0), +(3286,8589934592,4095,0,2,2,319,3216,0,0), +(3287,8589934592,4095,0,2,3,319,3217,0,0), +(3288,8589934592,4095,0,2,4,319,3218,0,0), +(3289,8589934592,4095,0,2,5,319,3219,0,0), +(3290,8589934592,4095,0,2,6,319,3220,0,0), +(3291,8589934592,4095,0,2,7,319,3221,0,0), +(3292,8589934592,4095,0,2,8,319,3222,0,0), +(3293,8589934592,4095,0,2,9,319,3223,0,0), +(3294,8589934592,4095,0,3,0,320,3224,0,0), +(3295,8589934592,4095,0,3,1,320,3225,0,0), +(3296,8589934592,4095,0,3,2,320,3226,0,0), +(3297,8589934592,4095,0,3,3,320,3227,0,0), +(3298,8589934592,4095,0,3,4,320,3228,0,0), +(3299,8589934592,4095,0,3,5,320,3229,0,0), +(3300,8589934592,4095,0,3,6,320,3230,0,0), +(3301,8589934592,4095,0,3,7,320,3231,0,0), +(3302,8589934592,4095,0,4,0,321,3232,0,0), +(3303,8589934592,4095,0,4,1,321,3233,0,0), +(3304,8589934592,4095,0,4,2,321,3234,0,0), +(3305,8589934592,4095,0,4,3,321,3235,0,0), +(3306,8589934592,4095,0,4,4,321,3236,0,0), +(3307,8589934592,4095,0,4,5,321,3237,0,0), +(3308,8589934592,4095,0,4,6,321,3238,0,0), +(3309,8589934592,4095,0,5,0,322,3239,0,0), +(3310,8589934592,4095,0,5,1,322,3240,0,0), +(3311,8589934592,4095,0,5,2,322,3241,0,0), +(3312,8589934592,4095,0,5,3,322,3242,0,0), +(3313,8589934592,4095,0,5,4,322,3243,0,0), +(3314,8589934592,4095,0,5,5,322,3244,0,0), +(3315,8589934592,4095,0,5,6,322,3245,0,0), +(3316,8589934592,4095,0,6,0,403,3246,0,0), +(3317,8589934592,4095,0,6,1,403,3247,0,0), +(3318,8589934592,4095,0,6,2,403,3248,0,0), +(3319,8589934592,4095,0,6,3,403,3249,0,0), +(3320,8589934592,4095,0,6,4,403,3250,0,0), +(3321,8589934592,4095,0,6,5,403,3251,0,0), +(3322,8589934592,4095,0,7,0,324,3252,0,0), +(3323,8589934592,4095,0,7,1,324,3253,0,0), +(3324,8589934592,4095,0,7,2,324,3254,0,0), +(3325,8589934592,4095,0,7,3,324,3255,0,0), +(3326,8589934592,4095,0,7,4,324,3256,0,0), +(3327,8589934592,4095,0,7,5,324,3257,0,0), +(3328,8589934592,4095,1,1,0,325,3258,0,0), +(3329,8589934592,4095,1,1,1,325,3259,0,0), +(3330,8589934592,4095,1,1,2,325,3260,0,0), +(3331,8589934592,4095,1,1,3,325,3261,0,0), +(3332,8589934592,4095,1,1,4,325,3262,0,0), +(3333,8589934592,4095,1,2,0,326,3263,0,0), +(3334,8589934592,4095,1,2,1,326,3264,0,0), +(3335,8589934592,4095,1,2,2,326,3265,0,0), +(3336,8589934592,4095,1,2,3,326,3266,0,0), +(3337,8589934592,4095,1,2,4,326,3267,0,0), +(3338,8589934592,4095,1,2,5,326,3268,0,0), +(3339,8589934592,4095,1,2,6,326,3269,0,0), +(3340,8589934592,4095,1,2,7,326,3270,0,0), +(3341,8589934592,4095,1,2,8,326,3271,0,0), +(3342,8589934592,4095,1,2,9,326,3272,0,0), +(3343,8589934592,4095,1,3,0,327,3273,0,0), +(3344,8589934592,4095,1,3,1,327,3274,0,0), +(3345,8589934592,4095,1,3,2,327,3275,0,0), +(3346,8589934592,4095,1,3,3,327,3276,0,0), +(3347,8589934592,4095,1,3,4,327,3277,0,0), +(3348,8589934592,4095,1,3,5,327,3278,0,0), +(3349,8589934592,4095,1,3,6,327,3279,0,0), +(3350,8589934592,4095,1,3,7,327,3280,0,0), +(3351,8589934592,4095,1,3,8,327,3281,0,0), +(3352,8589934592,4095,1,3,9,327,3282,0,0), +(3353,8589934592,4095,1,3,10,327,3283,0,0), +(3354,8589934592,4095,1,4,0,328,3284,0,0), +(3355,8589934592,4095,1,4,1,328,3285,0,0), +(3356,8589934592,4095,1,4,2,328,3286,0,0), +(3357,8589934592,4095,1,4,3,328,3287,0,0), +(3358,8589934592,4095,1,4,4,328,3288,0,0), +(3359,8589934592,4095,1,4,5,328,3289,0,0), +(3360,8589934592,4095,1,4,6,328,3290,0,0), +(3361,8589934592,4095,1,5,0,404,3291,0,0), +(3362,8589934592,4095,1,5,1,404,3292,0,0), +(3363,8589934592,4095,1,5,2,404,3293,0,0), +(3364,8589934592,4095,1,5,3,404,3294,0,0), +(3365,8589934592,4095,1,5,4,404,3295,0,0), +(3366,8589934592,4095,1,5,5,404,3296,0,0), +(3367,8589934592,4095,1,5,6,404,3297,0,0), +(3368,8589934592,4095,1,6,0,405,3298,0,0), +(3369,8589934592,4095,1,6,1,405,3299,0,0), +(3370,8589934592,4095,1,6,2,405,3300,0,0), +(3371,8589934592,4095,1,6,3,405,3301,0,0), +(3372,8589934592,4095,1,6,4,405,3302,0,0), +(3373,8589934592,4095,1,6,5,405,3303,0,0), +(3374,17179869184,4095,0,1,0,331,3304,0,0), +(3375,17179869184,4095,0,1,1,331,3305,0,0), +(3376,17179869184,4095,0,1,2,331,3306,0,0), +(3377,17179869184,4095,0,1,3,331,3307,0,0), +(3378,17179869184,4095,0,1,4,331,3308,0,0), +(3379,17179869184,4095,0,1,5,331,3309,0,0), +(3380,17179869184,4095,0,1,6,331,3310,0,0), +(3381,17179869184,4095,0,1,7,331,3311,0,0), +(3382,17179869184,4095,0,1,8,331,3312,0,0), +(3383,17179869184,4095,0,2,0,406,3313,0,0), +(3384,17179869184,4095,0,2,1,406,3314,0,0), +(3385,17179869184,4095,0,2,2,406,3315,0,0), +(3386,17179869184,4095,0,2,3,406,3316,0,0), +(3387,17179869184,4095,0,2,4,406,3317,0,0), +(3388,17179869184,4095,0,2,5,406,3318,0,0), +(3389,17179869184,4095,0,3,0,407,3319,0,0), +(3390,17179869184,4095,0,5,0,336,3321,0,0), +(3391,17179869184,4095,0,5,1,336,3321,0,0), +(3392,17179869184,4095,0,5,2,336,3323,0,0), +(3393,17179869184,4095,0,5,3,336,3323,0,0), +(3394,17179869184,4095,0,5,4,336,3325,0,0), +(3395,17179869184,4095,0,5,5,336,3325,0,0), +(3396,17179869184,4095,0,5,6,336,3327,0,0), +(3397,17179869184,4095,0,5,7,336,3327,0,0), +(3398,17179869184,4095,0,5,8,336,3329,0,0), +(3399,17179869184,4095,0,5,9,336,3329,0,0), +(3400,17179869184,4095,0,5,10,336,3331,0,0), +(3401,17179869184,4095,0,5,11,336,3331,0,0), +(3402,17179869184,4095,0,6,0,408,3332,0,0), +(3403,17179869184,4095,0,6,1,408,3333,0,0), +(3404,17179869184,4095,0,6,2,408,3334,0,0), +(3405,17179869184,4095,0,7,0,338,3335,0,0), +(3406,17179869184,4095,0,7,1,338,3336,0,0), +(3407,17179869184,4095,0,7,2,338,3337,0,0), +(3408,17179869184,4095,0,7,3,338,3338,0,0), +(3409,17179869184,4095,0,7,4,338,3339,0,0), +(3410,17179869184,4095,0,7,5,338,3340,0,0), +(3411,17179869184,4095,1,1,0,339,3341,0,0), +(3412,17179869184,4095,1,1,1,339,3342,0,0), +(3413,17179869184,4095,1,1,2,339,3343,0,0), +(3414,17179869184,4095,1,1,3,339,3344,0,0), +(3415,17179869184,4095,1,1,4,339,3345,0,0), +(3416,17179869184,4095,1,1,5,339,3346,0,0), +(3417,17179869184,4095,1,1,6,339,3347,0,0), +(3418,17179869184,4095,1,1,7,339,3348,0,0), +(3419,17179869184,4095,1,1,8,339,3349,0,0), +(3420,17179869184,4095,1,2,0,409,3350,0,0), +(3421,17179869184,4095,1,2,1,409,3351,0,0), +(3422,17179869184,4095,1,2,2,409,3352,0,0), +(3423,17179869184,4095,1,2,3,409,3353,0,0), +(3424,17179869184,4095,1,2,4,409,3354,0,0), +(3425,17179869184,4095,1,2,5,409,3355,0,0), +(3426,17179869184,4095,1,3,0,410,3356,0,0), +(3427,17179869184,4095,1,5,0,344,3358,0,0), +(3428,17179869184,4095,1,5,1,344,3358,0,0), +(3429,17179869184,4095,1,5,2,344,3360,0,0), +(3430,17179869184,4095,1,5,3,344,3360,0,0), +(3431,17179869184,4095,1,5,4,344,3362,0,0), +(3432,17179869184,4095,1,5,5,344,3362,0,0), +(3433,17179869184,4095,1,5,6,344,3364,0,0), +(3434,17179869184,4095,1,5,7,344,3364,0,0), +(3435,17179869184,4095,1,5,8,344,3366,0,0), +(3436,17179869184,4095,1,5,9,344,3366,0,0), +(3437,17179869184,4095,1,5,10,344,3368,0,0), +(3438,17179869184,4095,1,5,11,344,3368,0,0), +(3439,17179869184,4095,1,5,12,344,3370,0,0), +(3440,17179869184,4095,1,5,13,344,3370,0,0), +(3441,17179869184,4095,1,5,14,344,3372,0,0), +(3442,17179869184,4095,1,5,15,344,3372,0,0), +(3443,17179869184,4095,1,6,0,411,3373,0,0), +(3444,17179869184,4095,1,6,1,411,3374,0,0), +(3445,17179869184,4095,1,6,2,411,3375,0,0), +(3446,17179869184,4095,1,7,0,346,3376,0,0), +(3447,17179869184,4095,1,7,1,346,3377,0,0), +(3448,17179869184,4095,1,7,2,346,3378,0,0), +(3449,17179869184,4095,1,7,3,346,3379,0,0), +(3450,17179869184,4095,1,7,4,346,3380,0,0), +(3451,17179869184,4095,1,7,5,346,3381,0,0), +(3452,34359738368,4095,0,1,0,347,3382,0,0), +(3453,34359738368,4095,0,1,1,347,3383,0,0), +(3454,34359738368,4095,0,1,2,347,3384,0,0), +(3455,34359738368,4095,0,1,3,347,3385,0,0), +(3456,34359738368,4095,0,1,4,347,3386,0,0), +(3457,34359738368,4095,0,1,5,347,3387,0,0), +(3458,34359738368,4095,0,1,6,347,3388,0,0), +(3459,34359738368,4095,0,1,7,347,3389,0,0), +(3460,34359738368,4095,0,1,8,347,3390,0,0), +(3461,34359738368,4095,0,1,9,347,3391,0,0), +(3462,34359738368,4095,0,1,10,347,3392,0,0), +(3463,34359738368,4095,0,2,0,412,3393,0,0), +(3464,34359738368,4095,0,2,1,412,3394,0,0), +(3465,34359738368,4095,0,2,2,412,3395,0,0), +(3466,34359738368,4095,0,2,3,412,3396,0,0), +(3467,34359738368,4095,0,2,4,412,3397,0,0), +(3468,34359738368,4095,0,2,5,412,3398,0,0), +(3469,34359738368,4095,0,2,6,412,3399,0,0), +(3470,34359738368,4095,0,2,7,412,3400,0,0), +(3471,34359738368,4095,0,2,8,412,3401,0,0), +(3472,34359738368,4095,0,3,0,350,3402,0,0), +(3473,34359738368,4095,0,3,1,350,3403,0,0), +(3474,34359738368,4095,0,3,2,350,3404,0,0), +(3475,34359738368,4095,0,3,3,350,3405,0,0), +(3476,34359738368,4095,0,3,4,350,3406,0,0), +(3477,34359738368,4095,0,3,5,350,3407,0,0), +(3478,34359738368,4095,0,3,6,350,3408,0,0), +(3479,34359738368,4095,0,3,7,350,3409,0,0), +(3480,34359738368,4095,0,4,0,351,3410,0,0), +(3481,34359738368,4095,0,4,1,351,3411,0,0), +(3482,34359738368,4095,0,4,2,351,3412,0,0), +(3483,34359738368,4095,0,4,3,351,3413,0,0), +(3484,34359738368,4095,0,4,4,351,3414,0,0), +(3485,34359738368,4095,0,4,5,351,3415,0,0), +(3486,34359738368,4095,0,4,6,351,3416,0,0), +(3487,34359738368,4095,0,4,7,351,3417,0,0), +(3488,34359738368,4095,0,4,8,351,3418,0,0), +(3489,34359738368,4095,0,5,0,352,3419,0,0), +(3490,34359738368,4095,0,5,1,352,3421,0,0), +(3491,34359738368,4095,0,5,2,352,3422,0,0), +(3492,34359738368,4095,0,5,3,352,3420,0,0), +(3493,34359738368,4095,0,5,4,352,3423,0,0), +(3494,34359738368,4095,0,5,5,352,3419,0,0), +(3495,34359738368,4095,0,5,6,352,3425,0,0), +(3496,34359738368,4095,0,8,0,353,3426,0,0), +(3497,34359738368,4095,0,8,1,353,3427,0,0), +(3498,34359738368,4095,1,1,0,354,3428,0,0), +(3499,34359738368,4095,1,1,1,354,3429,0,0), +(3500,34359738368,4095,1,1,2,354,3430,0,0), +(3501,34359738368,4095,1,1,3,354,3431,0,0), +(3502,34359738368,4095,1,1,4,354,3432,0,0), +(3503,34359738368,4095,1,1,5,354,3433,0,0), +(3504,34359738368,4095,1,1,6,354,3434,0,0), +(3505,34359738368,4095,1,1,7,354,3435,0,0), +(3506,34359738368,4095,1,1,8,354,3436,0,0), +(3507,34359738368,4095,1,1,9,354,3437,0,0), +(3508,34359738368,4095,1,1,10,354,3438,0,0), +(3509,34359738368,4095,1,1,11,354,3439,0,0), +(3510,34359738368,4095,1,2,0,413,3440,0,0), +(3511,34359738368,4095,1,2,1,413,3441,0,0), +(3512,34359738368,4095,1,2,2,413,3442,0,0), +(3513,34359738368,4095,1,2,3,413,3443,0,0), +(3514,34359738368,4095,1,2,4,413,3444,0,0), +(3515,34359738368,4095,1,2,5,413,3445,0,0), +(3516,34359738368,4095,1,2,6,413,3446,0,0), +(3517,34359738368,4095,1,2,7,413,3447,0,0), +(3518,34359738368,4095,1,2,8,413,3448,0,0), +(3519,34359738368,4095,1,3,0,357,3449,0,0), +(3520,34359738368,4095,1,3,1,357,3450,0,0), +(3521,34359738368,4095,1,3,2,357,3451,0,0), +(3522,34359738368,4095,1,3,3,357,3452,0,0), +(3523,34359738368,4095,1,3,4,357,3453,0,0), +(3524,34359738368,4095,1,3,5,357,3454,0,0), +(3525,34359738368,4095,1,3,6,357,3455,0,0), +(3526,34359738368,4095,1,3,7,357,3456,0,0), +(3527,34359738368,4095,1,4,0,358,3457,0,0), +(3528,34359738368,4095,1,4,1,358,3458,0,0), +(3529,34359738368,4095,1,4,2,358,3459,0,0), +(3530,34359738368,4095,1,4,3,358,3460,0,0), +(3531,34359738368,4095,1,4,4,358,3461,0,0), +(3532,34359738368,4095,1,4,5,358,3462,0,0), +(3533,34359738368,4095,1,4,6,358,3463,0,0), +(3534,34359738368,4095,1,4,7,358,3464,0,0), +(3535,34359738368,4095,1,4,8,358,3465,0,0), +(3536,34359738368,4095,1,5,0,414,3466,0,0), +(3537,34359738368,4095,1,5,1,414,3467,0,0), +(3538,34359738368,4095,1,5,2,414,3468,0,0), +(3539,34359738368,4095,1,5,3,414,3469,0,0), +(3540,34359738368,4095,1,5,4,886,3470,0,0), +(3541,34359738368,4095,1,5,5,887,3471,0,0), +(3563,68719476736,4095,0,3,0,362,3493,0,0), +(3564,68719476736,4095,0,3,1,362,3494,0,0), +(3565,68719476736,4095,0,3,2,362,3495,0,0), +(3566,68719476736,4095,0,3,3,362,3496,0,0), +(3567,68719476736,4095,0,3,4,362,3497,0,0), +(3568,68719476736,4095,0,3,5,362,3498,0,0), +(3569,68719476736,4095,0,3,6,362,3499,0,0), +(3570,68719476736,4095,0,4,0,363,3500,0,0), +(3571,68719476736,4095,0,4,1,363,3501,0,0), +(3572,68719476736,4095,0,4,2,363,3502,0,0), +(3573,68719476736,4095,0,4,3,363,3503,0,0), +(3574,68719476736,4095,0,4,4,363,3504,0,0), +(3575,68719476736,4095,0,4,5,363,3505,0,0), +(3576,68719476736,4095,0,4,6,363,3506,0,0), +(3577,68719476736,4095,0,4,7,363,3507,0,0), +(3578,68719476736,4095,0,5,0,364,3508,0,0), +(3579,68719476736,4095,0,5,1,364,3509,0,0), +(3580,68719476736,4095,0,5,2,364,3510,0,0), +(3581,68719476736,4095,0,5,3,364,3511,0,0), +(3582,68719476736,4095,0,5,4,364,3512,0,0), +(3583,68719476736,4095,0,5,5,364,3513,0,0), +(3584,68719476736,4095,0,6,0,415,3514,0,0), +(3585,68719476736,4095,0,6,1,415,3515,0,0), +(3586,68719476736,4095,0,6,2,415,3516,0,0), +(3587,68719476736,4095,0,6,3,415,3517,0,0), +(3588,68719476736,4095,0,6,4,415,3518,0,0), +(3589,68719476736,4095,0,6,5,415,3519,0,0), +(3590,68719476736,4095,0,6,6,415,3520,0,0), +(3591,68719476736,4095,0,6,7,415,3521,0,0), +(3592,68719476736,4095,0,6,8,415,3522,0,0), +(3593,68719476736,4095,0,6,9,415,3523,0,0), +(3594,68719476736,4095,0,6,10,415,3524,0,0), +(3595,68719476736,4095,0,6,11,415,3525,0,0), +(3596,68719476736,4095,0,6,12,415,3526,0,0), +(3597,68719476736,4095,0,6,13,415,3527,0,0), +(3598,68719476736,4095,0,6,14,415,3528,0,0), +(3599,68719476736,4095,0,6,15,415,3529,0,0), +(3600,68719476736,4095,0,6,16,415,3530,0,0), +(3601,68719476736,4095,0,6,17,415,3531,0,0), +(3602,68719476736,4095,0,6,18,415,3532,0,0), +(3603,68719476736,4095,0,6,19,415,3533,0,0), +(3604,68719476736,4095,0,7,0,366,3534,0,0), +(3605,68719476736,4095,0,7,1,366,3535,0,0), +(3606,68719476736,4095,0,7,2,366,3536,0,0), +(3607,68719476736,4095,0,7,3,366,3537,0,0), +(3608,68719476736,4095,0,8,0,367,3538,0,0), +(3609,68719476736,4095,0,8,1,367,3539,0,0), +(3632,68719476736,4095,1,3,0,370,3562,0,0), +(3633,68719476736,4095,1,3,1,370,3563,0,0), +(3634,68719476736,4095,1,3,2,370,3564,0,0), +(3635,68719476736,4095,1,3,3,370,3565,0,0), +(3636,68719476736,4095,1,3,4,370,3566,0,0), +(3637,68719476736,4095,1,3,5,370,3567,0,0), +(3638,68719476736,4095,1,3,6,370,3568,0,0), +(3639,68719476736,4095,1,3,7,370,3569,0,0), +(3640,68719476736,4095,1,4,0,371,3570,0,0), +(3641,68719476736,4095,1,4,1,371,3571,0,0), +(3642,68719476736,4095,1,4,2,371,3572,0,0), +(3643,68719476736,4095,1,4,3,371,3573,0,0), +(3644,68719476736,4095,1,4,4,371,3574,0,0), +(3645,68719476736,4095,1,4,5,371,3575,0,0), +(3646,68719476736,4095,1,4,6,371,3576,0,0), +(3647,68719476736,4095,1,4,7,371,3577,0,0), +(3648,68719476736,4095,1,6,0,416,3578,0,0), +(3649,68719476736,4095,1,6,1,416,3579,0,0), +(3650,68719476736,4095,1,6,2,416,3580,0,0), +(3651,68719476736,4095,1,6,3,416,3581,0,0), +(3652,68719476736,4095,1,6,4,416,3582,0,0), +(3653,68719476736,4095,1,6,5,416,3583,0,0), +(3654,68719476736,4095,1,6,6,416,3584,0,0), +(3655,68719476736,4095,1,6,7,416,3585,0,0), +(3656,68719476736,4095,1,6,8,416,3586,0,0), +(3657,68719476736,4095,1,6,9,416,3587,0,0), +(3658,68719476736,4095,1,6,10,416,3588,0,0), +(3659,68719476736,4095,1,6,11,416,3589,0,0), +(3660,68719476736,4095,1,6,12,416,3590,0,0), +(3661,68719476736,4095,1,6,13,416,3591,0,0), +(3662,68719476736,4095,1,6,14,416,3592,0,0), +(3663,68719476736,4095,1,6,15,416,3593,0,0), +(3664,68719476736,4095,1,6,16,416,3594,0,0), +(3665,68719476736,4095,1,6,17,416,3595,0,0), +(3666,68719476736,4095,1,6,18,416,3596,0,0), +(3667,68719476736,4095,1,6,19,416,3597,0,0), +(3668,68719476736,4095,1,7,0,374,3598,0,0), +(3669,68719476736,4095,1,7,1,374,3599,0,0), +(3670,68719476736,4095,1,7,2,374,3600,0,0), +(3671,68719476736,4095,1,7,3,374,3601,0,0), +(3672,68719476736,4095,1,8,0,375,3602,0,0), +(3673,68719476736,4095,1,8,1,375,3603,0,0), +(3674,512,2048,0,8,6,118,1726,0,0), +(3675,512,2048,0,8,7,118,1727,0,0), +(3676,512,2048,0,8,8,118,1728,0,0), +(3677,512,2048,0,8,9,118,1729,0,0), +(3678,512,2048,0,8,10,118,1730,0,0), +(3679,512,2048,0,8,11,118,1731,0,0), +(3680,512,2048,1,8,6,127,1863,0,0), +(3681,512,2048,1,8,7,127,1864,0,0), +(3682,512,2048,1,8,8,127,1865,0,0), +(3683,512,2048,1,8,9,127,1866,0,0), +(3684,512,2048,1,8,10,127,1867,0,0), +(3685,512,2048,1,8,11,127,1868,0,0), +(3686,8,4095,0,8,6,48,795,0,0), +(3687,8,2048,0,8,7,48,796,0,0), +(3688,8,2048,0,8,8,48,797,0,0), +(3689,8,2048,0,8,9,48,798,0,0), +(3690,8,2048,0,8,10,48,799,0,0), +(3691,8,2048,0,8,11,48,800,0,0), +(3692,8,2048,1,8,6,57,907,0,0), +(3693,8,2048,1,8,7,57,908,0,0), +(3694,8,2048,1,8,8,57,909,0,0), +(3695,8,2048,1,8,9,57,910,0,0), +(3696,8,2048,1,8,10,57,911,0,0), +(3697,8,2048,1,8,11,57,912,0,0), +(3698,1,4095,1,5,0,501,4752,0,0), +(3699,1,4095,1,5,1,501,4753,0,0), +(3700,1,4095,1,5,2,501,4754,0,0), +(3701,1,4095,1,5,3,501,4755,0,0), +(3702,1,4095,1,5,4,501,4756,0,0), +(3703,1,4095,1,5,5,501,4757,0,0), +(3704,1,4095,1,5,6,501,4758,0,0), +(3705,1,4063,0,2,0,463,4138,1,0), +(3706,1,4063,0,2,1,463,4140,1,0), +(3707,1,4063,0,2,2,463,4133,1,0), +(3708,1,4063,0,2,3,463,4135,1,0), +(3709,1,4063,0,2,4,463,4141,1,0), +(3710,1,4063,0,2,5,463,4134,0,0), +(3711,1,4063,0,2,6,463,4130,0,0), +(3712,1,4063,0,2,7,463,4138,1,0), +(3713,1,4063,0,2,8,463,4140,1,0), +(3714,1,4063,0,2,9,463,4135,1,0), +(3715,1,4063,0,2,10,463,4134,0,0), +(3716,1,4063,0,2,11,463,4136,1,0), +(3717,1,32,0,2,12,463,4534,0,0), +(3718,1,32,0,2,13,463,4534,0,0), +(3719,1,32,0,2,23,463,4534,0,0), +(3720,1,32,0,2,22,463,4534,0,0), +(3721,1,32,0,2,21,463,4534,0,0), +(3722,1,32,0,2,20,463,4534,0,0), +(3723,1,32,0,2,19,463,4534,0,0), +(3724,1,32,0,2,18,463,4534,0,0), +(3725,1,32,0,2,17,463,4534,0,0), +(3726,1,32,0,2,16,463,4534,0,0), +(3727,1,32,0,2,15,463,4534,0,0), +(3728,1,32,0,2,14,463,4534,0,0), +(3729,1,4063,1,2,0,464,4162,0,0), +(3730,1,4063,1,2,1,464,4153,0,0), +(3731,1,4063,1,2,2,464,4161,0,0), +(3732,1,4063,1,2,3,464,4163,0,0), +(3733,1,4063,1,2,4,464,4154,0,0), +(3734,1,4063,1,2,5,464,4160,0,0), +(3735,1,4063,1,2,6,464,4160,0,0), +(3736,1,4063,1,2,7,464,4156,0,0), +(3737,1,4063,1,2,8,464,4152,0,0), +(3738,1,4063,1,2,9,464,4154,0,0), +(3739,1,4063,1,2,10,464,4155,0,0), +(3740,1,4063,1,2,11,464,4165,0,0), +(3741,1,4063,1,2,12,464,4165,0,0), +(3742,1,4063,1,2,13,464,4155,0,0), +(3743,1,4063,1,2,14,464,4151,0,0), +(3744,1,32,1,2,15,464,4535,0,0), +(3745,1,32,1,2,29,464,4535,0,0), +(3746,1,32,1,2,28,464,4535,0,0), +(3747,1,32,1,2,27,464,4535,0,0), +(3748,1,32,1,2,26,464,4535,0,0), +(3749,1,32,1,2,25,464,4535,0,0), +(3750,1,32,1,2,24,464,4535,0,0), +(3751,1,32,1,2,23,464,4535,0,0), +(3752,1,32,1,2,22,464,4535,0,0), +(3753,1,32,1,2,21,464,4535,0,0), +(3754,1,32,1,2,20,464,4535,0,0), +(3755,1,32,1,2,19,464,4535,0,0), +(3756,1,32,1,2,18,464,4535,0,0), +(3757,1,32,1,2,17,464,4535,0,0), +(3758,1,32,1,2,16,464,4535,0,0), +(3759,4,4063,0,2,0,544,5533,1,0), +(3760,4,4063,0,2,1,544,5534,1,0), +(3761,4,4063,0,2,2,544,5535,1,0), +(3763,4,32,0,2,18,544,5559,0,0), +(3764,4,32,0,2,17,544,5559,0,0), +(3765,4,32,0,2,16,544,5559,0,0), +(3766,4,32,0,2,15,544,5559,0,0), +(3767,4,32,0,2,14,544,5559,0,0), +(3768,4,32,0,2,13,544,5559,0,0), +(3769,4,32,0,2,12,544,5559,0,0), +(3770,4,32,0,2,11,544,5559,0,0), +(3771,4,32,0,2,10,544,5559,0,0), +(3772,4,4063,0,2,9,544,5540,1,0), +(3773,4,4063,0,2,8,544,5541,1,0), +(3774,4,4063,0,2,7,544,5540,1,0), +(3775,4,4063,0,2,6,544,5539,1,0), +(3776,4,4063,0,2,5,544,5538,1,0), +(3777,4,4063,0,2,4,544,5537,1,0), +(3778,4,4063,0,2,3,544,5536,1,0), +(3779,4,32,1,2,19,545,5587,0,0), +(3780,4,32,1,2,17,545,5587,0,0), +(3781,4,32,1,2,16,545,5587,0,0), +(3782,4,32,1,2,15,545,5587,0,0), +(3783,4,32,1,2,14,545,5587,0,0), +(3784,4,32,1,2,13,545,5587,0,0), +(3785,4,32,1,2,12,545,5587,0,0), +(3786,4,32,1,2,11,545,5587,0,0), +(3787,4,32,1,2,10,545,5587,0,0), +(3788,4,4063,1,2,9,545,5563,0,0), +(3789,4,4063,1,2,8,545,5564,0,0), +(3790,4,4063,1,2,7,545,5578,0,0), +(3791,4,4063,1,2,6,545,5575,0,0), +(3792,4,4063,1,2,5,545,5566,0,0), +(3793,4,4063,1,2,4,545,5577,0,0), +(3794,4,4063,1,2,3,545,5576,0,0), +(3795,4,4063,1,2,2,545,5575,0,0), +(3796,4,4063,1,2,1,545,5574,0,0), +(3797,4,4063,1,2,0,545,5564,0,0), +(3798,4,32,0,2,19,544,5559,0,0), +(3799,64,32,0,2,13,548,5629,0,0), +(3800,64,32,0,2,12,548,5629,0,0), +(3801,64,32,0,2,11,548,5629,0,0), +(3802,64,32,0,2,10,548,5629,0,0), +(3803,64,32,0,2,9,548,5629,0,0), +(3804,64,32,0,2,8,548,5629,0,0), +(3805,64,32,0,2,7,548,5629,0,0), +(3806,64,4063,0,2,6,548,5622,0,0), +(3807,64,4063,0,2,5,548,5618,0,0), +(3808,64,4063,0,2,4,548,5620,0,0), +(3809,64,4063,0,2,3,548,5619,0,0), +(3810,64,4063,0,2,2,548,5618,0,0), +(3811,64,4063,0,2,1,548,5617,0,0), +(3812,64,4063,0,2,0,548,6523,0,0), +(3813,64,32,1,2,13,549,5643,0,0), +(3814,64,32,1,2,12,549,5643,0,0), +(3815,64,32,1,2,11,549,5643,0,0), +(3816,64,32,1,2,10,549,5643,0,0), +(3817,64,32,1,2,9,549,5643,0,0), +(3818,64,32,1,2,8,549,5643,0,0), +(3819,64,32,1,2,7,549,5643,0,0), +(3820,64,4063,1,2,6,549,5641,0,0), +(3821,64,4063,1,2,5,549,5640,0,0), +(3822,64,4063,1,2,4,549,5638,0,0), +(3823,64,4063,1,2,3,549,5635,0,0), +(3824,64,4063,1,2,2,549,5639,0,0), +(3825,64,4063,1,2,1,549,5638,0,0), +(3826,64,4063,1,2,0,549,5637,0,0), +(3867,256,32,0,2,9,552,5676,0,0), +(3868,256,32,0,2,8,552,5676,0,0), +(3869,256,32,0,2,7,552,5676,0,0), +(3870,256,32,0,2,6,552,5676,0,0), +(3871,256,32,0,2,5,552,5676,0,0), +(3872,256,4063,0,2,4,552,5670,0,0), +(3873,256,4063,0,2,3,552,5667,0,0), +(3874,256,4063,0,2,2,552,5668,0,0), +(3875,256,4063,0,2,1,552,5667,0,0), +(3876,256,4063,0,2,0,552,5666,0,0), +(3877,256,32,1,2,17,553,5687,0,0), +(3878,256,32,1,2,16,553,5687,0,0), +(3879,256,32,1,2,15,553,5687,0,0), +(3880,256,32,1,2,14,553,5687,0,0), +(3881,256,32,1,2,13,553,5687,0,0), +(3882,256,32,1,2,12,553,5687,0,0), +(3883,256,32,1,2,11,553,5687,0,0), +(3884,256,32,1,2,10,553,5687,0,0), +(3885,256,4063,1,2,9,553,5686,0,0), +(3886,256,4063,1,2,8,553,5685,0,0), +(3887,256,4063,1,2,7,553,5684,0,0), +(3888,256,4063,1,2,6,553,5681,0,0), +(3889,256,4063,1,2,5,553,5682,0,0), +(3890,256,4063,1,2,4,553,5681,0,0), +(3891,256,4063,1,2,3,553,5678,0,0), +(3892,256,4063,1,2,2,553,5677,0,0), +(3893,256,4063,1,2,1,553,5678,0,0), +(3894,256,4063,1,2,0,553,5677,0,0), +(3895,16,4095,0,5,2,563,6288,0,0), +(3896,16,4095,0,5,3,563,6288,0,0), +(3897,16,4095,0,5,4,563,6288,0,0), +(3898,16,4095,0,5,5,563,6289,0,0), +(3899,16,4095,0,5,6,563,6292,0,0), +(3900,16,4095,0,5,7,563,6292,0,0), +(3901,16,4095,0,5,14,563,6293,0,0), +(3902,16,4095,0,5,15,563,6293,0,0), +(3903,16,4095,1,5,2,67,1037,0,0), +(3904,16,4095,1,5,3,67,1037,0,0), +(3905,16,4095,1,5,7,67,1037,0,0), +(3906,16,4063,0,5,2,534,6304,0,0), +(3907,16,4063,0,5,3,534,6304,0,0), +(3908,16,4063,0,5,4,534,6304,0,0), +(3909,16,4063,0,5,10,534,6304,0,0), +(3910,16,4063,0,5,11,534,6304,0,0), +(3911,16,4063,0,5,0,534,5330,0,0), +(3912,16,4063,0,5,1,534,5330,0,0), +(3913,16,4063,0,5,5,534,5330,0,0), +(3914,16,4063,0,5,6,534,5330,0,0), +(3915,16,4063,0,5,7,534,5330,0,0), +(3916,16,4063,0,5,8,534,5330,0,0), +(3917,16,4063,0,5,9,534,5330,0,0), +(3918,16,4063,0,5,12,534,5330,0,0), +(3919,16,4063,0,5,13,534,5330,0,0), +(3920,16,4063,0,5,14,534,5330,0,0), +(3921,16,4063,0,5,15,534,5330,0,0), +(3922,16,4063,0,5,16,534,5330,0,0), +(3923,16,4063,1,5,0,535,5337,0,0), +(3924,16,4063,1,5,1,535,5337,0,0), +(3925,16,4063,1,5,2,535,6305,0,0), +(3926,16,4063,1,5,3,535,5337,0,0), +(3927,16,4063,1,5,4,535,5337,0,0), +(3928,16,4063,1,5,5,535,6305,0,0), +(3929,16,4063,1,5,6,535,5337,0,0), +(3930,16,4063,1,5,7,535,5337,0,0), +(3931,512,2015,0,2,22,571,6572,0,0), +(3932,512,2015,0,2,21,571,6572,0,0), +(3933,512,2015,0,2,20,571,6572,0,0), +(3934,512,32,0,2,19,571,6586,0,0), +(3935,512,32,0,2,18,571,6586,0,0), +(3936,512,32,0,2,17,571,6586,0,0), +(3937,512,32,0,2,16,571,6586,0,0), +(3938,512,32,0,2,15,571,6586,0,0), +(3939,512,32,0,2,14,571,6586,0,0), +(3940,512,32,0,2,13,571,6586,0,0), +(3941,512,32,0,2,12,571,6586,0,0), +(3942,512,32,0,2,11,571,6586,0,0), +(3943,512,32,0,2,10,571,6586,0,0), +(3944,512,2015,0,2,9,571,6568,0,0), +(3945,512,2015,0,2,8,571,6568,0,0), +(3946,512,2015,0,2,7,571,6568,0,0), +(3947,512,2015,0,2,6,571,6568,0,0), +(3948,512,2015,0,2,5,571,6568,0,0), +(3949,512,2015,0,2,4,571,6568,0,0), +(3950,512,2015,0,2,3,571,6568,0,0), +(3951,512,2015,0,2,2,571,6568,0,0), +(3952,512,2015,0,2,1,571,6568,0,0), +(3953,512,2015,0,2,0,571,6568,0,0), +(3954,512,2015,1,2,22,572,6591,0,0), +(3955,512,2015,1,2,21,572,6591,0,0), +(3956,512,2015,1,2,20,572,6591,0,0), +(3957,512,32,1,2,19,572,6605,0,0), +(3958,512,32,1,2,18,572,6605,0,0), +(3959,512,32,1,2,17,572,6605,0,0), +(3960,512,32,1,2,16,572,6605,0,0), +(3961,512,32,1,2,15,572,6605,0,0), +(3962,512,32,1,2,14,572,6605,0,0), +(3963,512,32,1,2,13,572,6605,0,0), +(3964,512,32,1,2,12,572,6605,0,0), +(3965,512,32,1,2,11,572,6605,0,0), +(3966,512,32,1,2,10,572,6605,0,0), +(3967,512,2015,1,2,9,572,6587,0,0), +(3968,512,2015,1,2,8,572,6587,0,0), +(3969,512,2015,1,2,7,572,6587,0,0), +(3970,512,2015,1,2,6,572,6587,0,0), +(3971,512,2015,1,2,5,572,6587,0,0), +(3972,512,2015,1,2,4,572,6587,0,0), +(3973,512,2015,1,2,3,572,6587,0,0), +(3974,512,2015,1,2,2,572,6587,0,0), +(3975,512,2015,1,2,1,572,6587,0,0), +(3976,512,2015,1,2,0,572,6587,0,0), +(3977,268435456,4063,0,2,7,578,6667,0,0), +(3978,268435456,4063,0,2,6,578,6667,0,0), +(3979,268435456,4063,0,2,5,578,6667,0,0), +(3980,268435456,4063,0,2,4,578,6667,0,0), +(3981,268435456,4063,0,2,3,578,6667,0,0), +(3982,268435456,4063,0,2,2,578,6667,0,0), +(3983,268435456,4063,0,2,1,578,6667,0,0), +(3984,268435456,4063,0,2,0,578,6667,0,0), +(3985,268435456,4063,1,2,7,579,6675,0,0), +(3986,268435456,4063,1,2,6,579,6675,0,0), +(3987,268435456,4063,1,2,5,579,6675,0,0), +(3988,268435456,4063,1,2,4,579,6675,0,0), +(3989,268435456,4063,1,2,3,579,6675,0,0), +(3990,268435456,4063,1,2,2,579,6675,0,0), +(3991,268435456,4063,1,2,1,579,6675,0,0), +(3992,268435456,4063,1,2,0,579,6675,0,0), +(3993,512,4095,0,1,26,582,6714,0,0), +(3994,512,4095,0,1,25,582,6714,0,0), +(3995,512,4095,0,1,24,582,6714,0,0), +(3996,512,4095,0,1,23,582,6714,0,0), +(3997,512,4095,0,1,22,582,6714,0,0), +(3998,512,4095,0,1,21,582,6714,0,0), +(3999,512,4095,0,1,20,582,6714,0,0), +(4000,512,4095,0,1,19,582,6714,0,0), +(4001,512,4095,0,1,18,582,6714,0,0), +(4002,512,4095,0,1,17,582,6714,0,0), +(4003,512,4095,0,1,16,582,6714,0,0), +(4004,512,4095,0,1,15,582,6714,0,0), +(4005,512,4095,0,1,14,582,6714,0,0), +(4006,512,4095,0,1,13,582,6714,0,0), +(4007,512,4095,0,1,12,582,6714,0,0), +(4008,512,4095,0,1,11,582,6714,0,0), +(4009,512,4095,0,1,10,582,6714,0,0), +(4010,512,4095,0,1,9,582,6714,0,0), +(4011,512,4095,0,1,8,582,6714,0,0), +(4012,512,4095,0,1,7,582,6714,0,0), +(4013,512,4095,0,1,6,582,6714,0,0), +(4014,512,4095,0,1,5,582,6714,0,0), +(4015,512,4095,0,1,4,582,6714,0,0), +(4016,512,4095,0,1,3,582,6714,0,0), +(4017,512,4095,0,1,2,582,6714,0,0), +(4018,512,4095,0,1,1,582,6714,0,0), +(4019,512,4095,0,1,0,582,6714,0,0), +(4020,512,4095,1,1,25,583,6719,0,0), +(4021,512,4095,1,1,24,583,6719,0,0), +(4022,512,4095,1,1,23,583,6719,0,0), +(4023,512,4095,1,1,22,583,6719,0,0), +(4024,512,4095,1,1,21,583,6719,0,0), +(4025,512,4095,1,1,20,583,6719,0,0), +(4026,512,4095,1,1,19,583,6719,0,0), +(4027,512,4095,1,1,18,583,6719,0,0), +(4028,512,4095,1,1,17,583,6719,0,0), +(4029,512,4095,1,1,16,583,6719,0,0), +(4030,512,4095,1,1,15,583,6719,0,0), +(4031,512,4095,1,1,14,583,6719,0,0), +(4032,512,4095,1,1,13,583,6719,0,0), +(4033,512,4095,1,1,12,583,6719,0,0), +(4034,512,4095,1,1,11,583,6719,0,0), +(4035,512,4095,1,1,10,583,6719,0,0), +(4036,512,4095,1,1,9,583,6719,0,0), +(4037,512,4095,1,1,8,583,6719,0,0), +(4038,512,4095,1,1,7,583,6719,0,0), +(4039,512,4095,1,1,6,583,6719,0,0), +(4040,512,4095,1,1,5,583,6719,0,0), +(4041,512,4095,1,1,4,583,6719,0,0), +(4042,512,4095,1,1,3,583,6719,0,0), +(4043,512,4095,1,1,2,583,6719,0,0), +(4044,512,4095,1,1,1,583,6719,0,0), +(4045,512,4095,1,1,0,583,6719,0,0), +(4059,8589934592,4063,0,2,0,614,6968,0,0), +(4060,8589934592,4063,0,2,1,614,6968,0,0), +(4061,8589934592,4063,0,2,2,614,6968,0,0), +(4062,8589934592,4063,0,2,3,614,6968,0,0), +(4063,8589934592,4063,0,2,4,614,6968,0,0), +(4064,8589934592,4063,0,2,5,614,6968,0,0), +(4065,8589934592,4063,0,2,6,614,6968,0,0), +(4066,8589934592,4063,0,2,7,614,6968,0,0), +(4067,8589934592,4063,0,2,8,614,6968,0,0), +(4068,8589934592,4063,0,2,9,614,6968,0,0), +(4069,8589934592,4063,1,2,0,615,6970,0,0), +(4070,8589934592,4063,1,2,1,615,6970,0,0), +(4071,8589934592,4063,1,2,2,615,6970,0,0), +(4072,8589934592,4063,1,2,3,615,6970,0,0), +(4073,8589934592,4063,1,2,4,615,6970,0,0), +(4074,8589934592,4063,1,2,5,615,6970,0,0), +(4075,8589934592,4063,1,2,6,615,6970,0,0), +(4076,8589934592,4063,1,2,7,615,6970,0,0), +(4077,8589934592,4063,1,2,8,615,6970,0,0), +(4078,8589934592,4063,1,2,9,615,6970,0,0), +(4079,1024,4063,0,2,0,618,6976,0,0), +(4080,1024,4063,0,2,1,618,6976,0,0), +(4081,1024,4063,0,2,2,618,6976,0,0), +(4082,1024,4063,0,2,3,618,6976,0,0), +(4083,1024,4063,0,2,4,618,6976,0,0), +(4084,1024,4063,0,2,5,618,6976,0,0), +(4085,1024,4063,0,2,6,618,6976,0,0), +(4086,1024,4063,0,2,7,618,6976,0,0), +(4087,1024,4063,0,2,8,618,6976,0,0), +(4088,1024,4063,0,2,9,618,6976,0,0), +(4089,1024,4063,0,2,10,618,6976,0,0), +(4090,1024,4063,0,2,11,618,6976,0,0), +(4091,1024,4063,0,2,12,618,6976,0,0), +(4092,1024,4063,0,2,13,618,6976,0,0), +(4093,1024,4063,0,2,14,618,6976,0,0), +(4094,1024,4063,0,2,15,618,6976,0,0), +(4095,1024,4063,0,2,16,618,6976,0,0), +(4096,1024,4063,0,2,17,618,6976,0,0), +(4097,1024,4063,0,2,18,618,6976,0,0), +(4098,1024,4063,0,2,19,618,6976,0,0), +(4099,1024,4063,1,2,0,619,6978,0,0), +(4100,1024,4063,1,2,1,619,6978,0,0), +(4101,1024,4063,1,2,2,619,6978,0,0), +(4102,1024,4063,1,2,3,619,6978,0,0), +(4103,1024,4063,1,2,4,619,6978,0,0), +(4104,1024,4063,1,2,5,619,6978,0,0), +(4105,1024,4063,1,2,6,619,6978,0,0), +(4106,1024,4063,1,2,7,619,6978,0,0), +(4107,1024,4063,1,2,8,619,6978,0,0), +(4108,1024,4063,1,2,9,619,6978,0,0), +(4109,1024,4063,1,2,10,619,6978,0,0), +(4110,1024,4063,1,2,11,619,6978,0,0), +(4111,1024,4063,1,2,12,619,6978,0,0), +(4112,1024,4063,1,2,13,619,6978,0,0), +(4113,1024,4063,1,2,14,619,6978,0,0), +(4114,1024,4063,1,2,15,619,6978,0,0), +(4115,1024,4063,1,2,16,619,6978,0,0), +(4116,1024,4063,1,2,17,619,6978,0,0), +(4117,1024,4063,1,2,18,619,6978,0,0), +(4118,1024,4063,1,2,19,619,6978,0,0), +(4119,2097152,4063,0,2,0,622,7042,0,0), +(4120,2097152,4063,0,2,1,622,7043,0,0), +(4121,2097152,4063,0,2,2,622,7044,0,0), +(4122,2097152,4063,0,2,3,622,7045,0,0), +(4123,2097152,4063,0,2,4,622,7046,0,0), +(4124,2097152,32,0,2,5,622,7072,0,0), +(4125,2097152,32,0,2,6,622,7072,0,0), +(4126,2097152,32,0,2,7,622,7072,0,0), +(4127,2097152,32,0,2,8,622,7072,0,0), +(4128,2097152,32,0,2,9,622,7072,0,0), +(4129,2097152,32,0,2,10,622,7072,0,0), +(4130,2097152,32,0,2,11,622,7072,0,0), +(4131,2097152,32,0,2,12,622,7072,0,0), +(4132,2097152,32,0,2,13,622,7072,0,0), +(4133,2097152,32,0,2,14,622,7072,0,0), +(4134,2097152,4063,0,2,15,622,7053,0,0), +(4135,2097152,4063,0,2,16,622,7058,0,0), +(4136,2097152,32,0,2,17,622,7072,0,0), +(4137,2097152,32,0,2,18,622,7072,0,0), +(4138,2097152,4063,1,2,0,623,7092,0,0), +(4139,2097152,4063,1,2,1,623,7089,0,0), +(4140,2097152,4063,1,2,2,623,7092,0,0), +(4141,2097152,4063,1,2,3,623,7092,0,0), +(4142,2097152,4063,1,2,4,623,7085,0,0), +(4143,2097152,4063,1,2,5,623,7092,0,0), +(4144,2097152,4063,1,2,6,623,7087,0,0), +(4145,2097152,4063,1,2,7,623,7091,0,0), +(4146,2097152,4063,1,2,8,623,7087,0,0), +(4147,2097152,4063,1,2,9,623,7092,0,0), +(4148,2097152,4063,1,2,10,623,7093,0,0), +(4149,2097152,4063,1,2,11,623,7093,0,0), +(4150,2097152,4063,1,2,12,623,7092,0,0), +(4151,2097152,4063,1,2,13,623,7087,0,0), +(4152,2097152,32,1,2,14,623,7103,0,0), +(4153,2097152,32,1,2,15,623,7103,0,0), +(4154,2097152,32,1,2,16,623,7103,0,0), +(4155,2097152,32,1,2,17,623,7103,0,0), +(4156,2097152,32,1,2,18,623,7103,0,0), +(4157,2097152,32,1,2,19,623,7103,0,0), +(4158,2097152,32,1,2,20,623,7103,0,0), +(4159,2097152,32,1,2,21,623,7103,0,0), +(4160,2097152,32,1,2,22,623,7103,0,0), +(4161,2097152,32,1,2,23,623,7103,0,0), +(4162,2097152,32,1,2,24,623,7103,0,0), +(4163,2097152,32,1,2,25,623,7103,0,0), +(4164,2097152,32,1,2,26,623,7103,0,0), +(4165,2097152,32,1,2,27,623,7103,0,0), +(4166,2097152,4063,1,2,28,623,7073,0,0), +(4167,2097152,32,1,2,29,623,7103,0,0), +(4168,2097152,4063,1,2,30,623,7073,0,0), +(4169,2097152,32,1,2,31,623,7103,0,0), +(4170,4,4095,0,1,0,611,6956,0,0), +(4171,4,4095,0,1,1,611,6956,0,0), +(4172,4,4095,0,1,2,611,6956,0,0), +(4173,4,4095,0,1,3,611,6956,0,0), +(4174,4,4095,0,1,4,611,6956,0,0), +(4175,4,4095,0,1,5,611,6956,0,0), +(4176,4,4095,0,1,6,611,6956,0,0), +(4177,4,4095,0,1,7,611,6956,0,0), +(4178,4,4095,0,1,8,611,6956,0,0), +(4179,4,4095,0,1,9,611,6956,0,0), +(4180,4,4095,0,1,10,611,6956,0,0), +(4181,4,4095,0,1,11,611,6956,0,0), +(4182,4,4095,0,1,12,611,6956,0,0), +(4183,4,4095,0,1,13,611,6956,0,0), +(4184,4,4095,0,1,14,611,6956,0,0), +(4185,4,4095,0,1,15,611,6956,0,0), +(4186,4,4095,0,1,16,611,6956,0,0), +(4187,4,4095,0,1,17,611,6956,0,0), +(4188,4,4095,0,1,18,611,6956,0,0), +(4189,4,4095,0,1,19,611,6956,0,0), +(4190,4,4095,0,1,20,611,6956,0,0), +(4191,4,4095,0,1,21,611,6956,0,0), +(4192,4,4095,0,1,22,611,6956,0,0), +(4193,4,4095,0,1,23,611,6956,0,0), +(4194,4,4095,0,1,24,611,6956,0,0), +(4195,4,4095,0,1,25,611,6956,0,0), +(4196,4,4095,0,1,26,611,6956,0,0), +(4197,1,4095,0,2,0,525,5056,0,0), +(4198,1,4095,0,2,1,525,5056,0,0), +(4199,1,4095,0,2,2,525,5056,0,0), +(4200,1,4095,0,2,3,525,5056,0,0), +(4201,1,4095,0,2,4,525,5056,0,0), +(4202,1,4095,0,2,5,525,5056,0,0), +(4203,1,4095,0,2,6,525,5056,0,0), +(4204,1,4095,0,2,7,525,5056,0,0), +(4205,1,4095,0,2,8,525,5056,0,0), +(4206,1,4095,0,2,9,525,5056,0,0), +(4207,1,4095,0,2,10,525,5056,0,0), +(4208,1,4095,0,2,11,525,5056,0,0), +(4209,1,4095,0,2,12,525,5056,0,0), +(4210,1,4095,0,2,13,525,5056,0,0), +(4211,1,4095,0,2,14,525,5056,0,0), +(4212,1,4095,0,2,15,525,5056,0,0), +(4213,1,4095,0,2,16,525,5056,0,0), +(4214,1,4095,0,2,17,525,5056,0,0), +(4215,1,4095,0,2,18,525,5056,0,0), +(4216,1,4095,0,2,19,525,5056,0,0), +(4217,1,4095,0,2,20,525,5056,0,0), +(4218,1,4095,0,2,21,525,5056,0,0), +(4219,1,4095,0,2,22,525,5056,0,0), +(4220,1,4095,0,2,23,525,5056,0,0), +(4221,1,4095,1,2,0,526,5059,0,0), +(4222,1,4095,1,2,1,526,5059,0,0), +(4223,1,4095,1,2,2,526,5059,0,0), +(4224,1,4095,1,2,3,526,5059,0,0), +(4225,1,4095,1,2,4,526,5059,0,0), +(4226,1,4095,1,2,5,526,5059,0,0), +(4227,1,4095,1,2,6,526,5059,0,0), +(4228,1,4095,1,2,7,526,5059,0,0), +(4229,1,4095,1,2,8,526,5059,0,0), +(4230,1,4095,1,2,9,526,5059,0,0), +(4231,1,4095,1,2,10,526,5059,0,0), +(4232,1,4095,1,2,11,526,5059,0,0), +(4233,1,4095,1,2,12,526,5059,0,0), +(4234,1,4095,1,2,13,526,5059,0,0), +(4235,1,4095,1,2,14,526,5059,0,0), +(4236,1,4095,1,2,15,526,5059,0,0), +(4237,1,4095,1,2,16,526,5059,0,0), +(4238,1,4095,1,2,17,526,5059,0,0), +(4239,1,4095,1,2,18,526,5059,0,0), +(4240,1,4095,1,2,19,526,5059,0,0), +(4241,1,4095,1,2,20,526,5059,0,0), +(4242,1,4095,1,2,21,526,5059,0,0), +(4243,1,4095,1,2,22,526,5059,0,0), +(4244,1,4095,1,2,23,526,5059,0,0), +(4245,1,4095,1,2,24,526,5059,0,0), +(4246,1,4095,1,2,25,526,5059,0,0), +(4247,1,4095,1,2,26,526,5059,0,0), +(4248,1,4095,1,2,27,526,5059,0,0), +(4249,1,4095,1,2,28,526,5059,0,0), +(4250,1,4095,1,2,29,526,5059,0,0), +(4263,6291456,4095,1,3,27,16,4983,0,0), +(4264,6291456,4095,1,3,26,16,4982,0,0), +(4265,6291456,4095,1,3,25,16,4981,0,0), +(4266,6291456,4095,1,3,24,16,4980,0,0), +(4267,6291456,4095,1,3,23,16,155,0,0), +(4268,6291456,4095,1,3,22,16,154,0,0), +(4269,6291456,4095,1,3,21,16,153,0,0), +(4270,6291456,4095,1,3,20,16,152,0,0), +(4271,6291456,4095,1,3,19,16,151,0,0), +(4272,6291456,4095,1,3,18,16,150,0,0), +(4273,6291456,4095,1,3,17,16,149,0,0), +(4274,6291456,4095,1,3,16,16,148,0,0), +(4275,6291456,4095,1,3,15,16,147,0,0), +(4276,6291456,4095,1,3,14,16,146,0,0), +(4277,6291456,4095,1,3,13,16,145,0,0), +(4278,6291456,4095,1,3,12,16,144,0,0), +(4279,6291456,4095,1,3,11,16,143,0,0), +(4280,6291456,4095,1,3,10,16,142,0,0), +(4281,6291456,4095,1,3,9,16,141,0,0), +(4282,6291456,4095,1,3,8,16,140,0,0), +(4283,6291456,4095,1,3,7,16,139,0,0), +(4284,6291456,4095,1,3,6,16,138,0,0), +(4285,6291456,4095,1,3,5,16,137,0,0), +(4286,6291456,4095,1,3,4,16,136,0,0), +(4287,6291456,4095,1,3,3,16,135,0,0), +(4288,6291456,4095,1,3,2,16,134,0,0), +(4289,6291456,4095,1,3,1,16,133,0,0), +(4290,6291456,4095,1,3,0,16,132,0,0), +(4291,32,32,0,2,9,646,7281,0,0), +(4292,32,32,0,2,8,646,7281,0,0), +(4293,32,32,0,2,7,646,7281,0,0), +(4294,32,32,0,2,6,646,7281,0,0), +(4295,32,32,0,2,5,646,7281,0,0), +(4296,32,4063,0,2,4,646,7278,0,0), +(4297,32,4063,0,2,3,646,7275,0,0), +(4298,32,4063,0,2,2,646,7276,0,0), +(4299,32,4063,0,2,1,646,7280,0,0), +(4300,32,4063,0,2,0,646,7279,0,0), +(4308,32,32,1,2,7,647,7289,0,0), +(4309,32,32,1,2,6,647,7289,0,0), +(4310,32,32,1,2,5,647,7289,0,0), +(4311,32,32,1,2,4,647,7289,0,0), +(4312,32,4063,1,2,3,647,7285,0,0), +(4313,32,4063,1,2,2,647,7284,0,0), +(4314,32,4063,1,2,1,647,7283,0,0), +(4315,32,4063,1,2,0,647,7282,0,0), +(4323,32,4095,0,5,6,672,7425,0,0), +(4324,32,4095,0,5,5,672,7425,0,0), +(4325,32,4095,0,5,4,672,7425,0,0), +(4326,32,4095,0,5,3,672,7425,0,0), +(4327,32,4095,0,5,2,672,7425,0,0), +(4328,32,4095,0,5,1,672,7425,0,0), +(4329,32,4095,0,5,0,672,7425,0,0), +(4330,32,4095,0,5,6,671,7409,0,0), +(4331,32,4095,0,5,5,671,7412,0,0), +(4332,32,4095,0,5,4,671,7408,0,0), +(4333,32,4095,0,5,3,671,7411,0,0), +(4334,32,4095,0,5,2,671,7410,0,0), +(4335,32,4095,0,5,1,671,7409,0,0), +(4336,32,4095,0,5,0,671,7408,0,0), +(4337,32,4095,0,5,0,661,7343,0,0), +(4338,32,4095,0,5,1,661,7344,0,0), +(4339,32,4095,0,5,2,661,7345,0,0), +(4340,32,4095,0,5,3,661,7343,0,0), +(4341,32,4095,0,5,4,661,7343,0,0), +(4342,32,4095,0,5,5,661,7346,0,0), +(4343,32,4095,0,5,6,661,7345,0,0), +(4344,32,4095,1,5,4,673,7429,0,0), +(4345,32,4095,1,5,3,673,7429,0,0), +(4346,32,4095,1,5,2,673,7429,0,0), +(4347,32,4095,1,5,1,673,7429,0,0), +(4348,32,4095,1,5,0,673,7429,0,0), +(4349,2097152,4095,0,5,0,675,7444,0,0), +(4350,2097152,4095,0,5,1,675,7445,0,0), +(4351,2097152,4095,0,5,2,675,7446,0,0), +(4352,2097152,4095,0,5,3,675,7447,0,0), +(4353,2097152,4095,0,5,4,675,7448,0,0), +(4354,2097152,4095,0,5,5,675,7449,0,0), +(4355,2097152,4095,0,5,6,675,7450,0,0), +(4356,2097152,4095,0,5,7,675,7451,0,0), +(4357,2097152,4095,0,5,8,675,7452,0,0), +(4358,2097152,4095,0,5,9,675,7453,0,0), +(4359,2097152,4095,0,5,10,675,7454,0,0), +(4360,2097152,4095,0,5,11,675,7455,0,0), +(4361,2097152,4095,0,5,12,675,7455,0,0), +(4362,2097152,4095,0,5,13,675,7454,0,0), +(4363,2097152,4095,0,5,14,675,7453,0,0), +(4364,2097152,4095,0,5,15,675,7452,0,0), +(4365,2097152,4095,0,5,16,675,7445,0,0), +(4366,2097152,4095,0,5,17,675,7450,0,0), +(4367,2097152,4095,0,5,18,675,7449,0,0), +(4368,2097152,4095,0,5,19,675,7448,0,0), +(4369,2097152,4095,0,5,20,675,7447,0,0), +(4370,2097152,4095,0,5,21,675,7446,0,0), +(4371,2097152,4095,0,5,22,675,7445,0,0), +(4372,2097152,4095,0,5,23,675,7444,0,0), +(4417,8,2015,0,2,0,682,7610,1,0), +(4418,8,2015,0,2,1,682,7610,1,0), +(4419,8,2015,0,2,2,682,7610,1,0), +(4420,8,2015,0,2,3,682,7610,1,0), +(4421,8,2015,0,2,4,682,7610,1,0), +(4422,8,2015,0,2,5,682,7610,1,0), +(4423,8,2015,0,2,6,682,7610,1,0), +(4424,8,2015,0,2,7,682,7610,1,0), +(4425,8,2015,0,2,8,682,7610,1,0), +(4426,8,32,0,2,9,682,7618,0,0), +(4427,8,32,0,2,10,682,7618,0,0), +(4428,8,32,0,2,11,682,7618,0,0), +(4429,8,32,0,2,12,682,7618,0,0), +(4430,8,32,0,2,13,682,7618,0,0), +(4431,8,32,0,2,14,682,7618,0,0), +(4432,8,32,0,2,15,682,7618,0,0), +(4433,8,32,0,2,16,682,7618,0,0), +(4434,8,32,0,2,17,682,7618,0,0), +(4435,8,2015,1,2,0,683,7622,1,0), +(4436,8,2015,1,2,1,683,7622,1,0), +(4437,8,2015,1,2,2,683,7622,1,0), +(4438,8,2015,1,2,3,683,7622,1,0), +(4439,8,2015,1,2,4,683,7622,1,0), +(4440,8,2015,1,2,5,683,7622,1,0), +(4441,8,2015,1,2,6,683,7622,1,0), +(4442,8,2015,1,2,7,683,7622,1,0), +(4443,8,2015,1,2,8,683,7622,1,0), +(4444,8,32,1,2,9,683,7634,0,0), +(4445,8,32,1,2,10,683,7634,0,0), +(4446,8,32,1,2,11,683,7634,0,0), +(4447,8,32,1,2,12,683,7634,0,0), +(4448,8,32,1,2,13,683,7634,0,0), +(4449,8,32,1,2,14,683,7634,0,0), +(4450,8,32,1,2,15,683,7634,0,0), +(4451,8,32,1,2,16,683,7634,0,0), +(4452,8,32,1,2,17,683,7634,0,0), +(4463,2147483648,4063,0,2,0,686,7669,1,0), +(4464,2147483648,4063,0,2,1,686,7670,1,0), +(4465,2147483648,4063,0,2,2,686,7671,1,0), +(4466,2147483648,4063,0,2,3,686,7673,1,0), +(4467,2147483648,4063,0,2,4,686,7675,1,0), +(4468,2147483648,4063,0,2,5,686,7677,1,0), +(4469,2147483648,4063,0,2,6,686,7673,1,0), +(4470,2147483648,4063,1,2,0,687,7682,1,0), +(4471,2147483648,4063,1,2,1,687,7684,1,0), +(4472,2147483648,4063,1,2,2,687,7686,1,0), +(4473,2147483648,4063,1,2,3,687,7688,1,0), +(4474,2147483648,4063,1,2,4,687,7683,1,0), +(4475,2147483648,4063,1,2,5,687,7690,1,0), +(4476,2147483648,4063,1,2,6,687,7686,1,0), +(4477,1024,4095,0,1,0,691,7712,0,0), +(4478,1024,4095,0,1,1,691,7712,0,0), +(4479,1024,4095,0,1,2,691,7712,0,0), +(4480,1024,4095,0,1,3,691,7712,0,0), +(4481,1024,4095,0,1,4,691,7712,0,0), +(4482,1024,4095,0,1,5,691,7712,0,0), +(4483,1024,4095,0,1,6,691,7712,0,0), +(4484,1024,4095,0,1,7,691,7712,0,0), +(4485,1024,4095,0,1,8,691,7712,0,0), +(4486,1024,4095,0,1,9,691,7712,0,0), +(4487,1024,4095,0,1,10,691,7712,0,0), +(4488,1024,4095,0,1,11,691,7712,0,0), +(4489,1024,4095,0,1,12,691,7712,0,0), +(4490,1024,4095,0,1,13,691,7712,0,0), +(4491,1024,4095,0,1,14,691,7712,0,0), +(4492,1024,4095,0,1,15,691,7712,0,0), +(4493,1024,4095,0,1,16,691,7712,0,0), +(4494,1024,4095,0,1,17,691,7712,0,0), +(4495,1024,4095,0,1,18,691,7712,0,0), +(4496,1024,4095,0,1,19,691,7712,0,0), +(4497,1024,4095,0,1,20,691,7712,0,0), +(4498,1024,4095,1,1,0,689,7703,0,0), +(4499,1024,4095,1,1,1,689,7703,0,0), +(4500,1024,4095,1,1,2,689,7703,0,0), +(4501,1024,4095,1,1,3,689,7703,0,0), +(4502,1024,4095,1,1,4,689,7703,0,0), +(4503,1024,4095,1,1,5,689,7703,0,0), +(4504,1024,4095,1,1,6,689,7703,0,0), +(4505,1024,4095,1,1,7,689,7703,0,0), +(4506,1024,4095,1,1,8,689,7703,0,0), +(4507,1024,4095,1,1,9,689,7703,0,0), +(4508,1024,4095,1,1,10,689,7703,0,0), +(4509,1024,4095,1,1,11,689,7703,0,0), +(4510,1024,4095,1,1,12,689,7703,0,0), +(4511,1024,4095,1,1,13,689,7703,0,0), +(4512,1024,4095,1,1,14,689,7703,0,0), +(4513,1024,4095,1,1,15,689,7703,0,0), +(4514,1024,4095,1,1,16,689,7703,0,0), +(4515,1024,4095,1,1,17,689,7703,0,0), +(4516,1024,4095,1,1,18,689,7703,0,0), +(4517,1024,4095,0,5,0,695,7747,0,0), +(4518,1024,4095,0,5,1,695,7748,0,0), +(4519,1024,4095,0,5,2,695,7749,0,0), +(4520,1024,4095,0,5,3,695,7750,0,0), +(4521,1024,4095,0,5,4,695,7751,0,0), +(4522,1024,4095,0,5,5,695,7752,0,0), +(4523,1024,4095,0,5,6,695,7753,0,0), +(4524,1024,4095,0,5,7,695,7754,0,0), +(4525,2147483648,4095,0,5,0,706,7840,0,0), +(4526,2147483648,4095,0,5,1,302,3128,0,0), +(4527,2147483648,4095,0,5,3,302,3128,0,0), +(4528,2147483648,4095,0,5,2,706,7840,0,0), +(4529,2147483648,4095,0,5,4,706,7839,0,0), +(4530,2147483648,4095,0,5,5,706,7840,0,0), +(4531,2147483648,4095,0,5,6,706,7840,0,0), +(4532,2147483648,4095,0,5,7,706,7840,0,0), +(4533,2147483648,4095,0,5,8,706,7839,0,0), +(4534,2147483648,4095,0,5,9,706,3129,0,0), +(4535,2147483648,4095,0,5,10,706,3131,0,0), +(4536,2147483648,4095,0,5,11,706,3129,0,0), +(4537,2147483648,4095,0,5,8,302,3135,0,0), +(4538,2147483648,4095,0,5,9,302,3130,0,0), +(4539,2147483648,4095,0,5,10,302,3133,0,0), +(4540,2147483648,4095,0,5,11,302,3134,0,0), +(4541,2097152,4095,0,5,9,207,2286,0,0), +(4542,2097152,4095,0,5,10,207,2287,0,0), +(4543,2097152,4095,0,5,11,207,2279,0,0), +(4544,2097152,4095,0,5,12,207,2280,0,0), +(4545,2097152,4095,0,5,13,207,2281,0,0), +(4546,2097152,4095,0,5,14,207,2282,0,0), +(4547,2097152,4095,0,5,15,207,2283,0,0), +(4548,2097152,4095,0,5,16,207,2283,0,0), +(4549,2097152,4095,0,5,17,207,2284,0,0), +(4550,2097152,4095,0,5,18,207,2285,0,0), +(4551,2097152,4095,0,5,19,207,2279,0,0), +(4552,2097152,4095,0,5,20,207,2286,0,0), +(4553,2097152,4095,0,5,21,207,2287,0,0), +(4554,2097152,4095,0,5,22,207,2279,0,0), +(4555,2097152,4095,0,5,23,207,2288,0,0), +(4556,8,4095,0,1,23,734,8062,0,0), +(4557,8,4095,0,1,22,734,8062,0,0), +(4558,8,4095,0,1,21,734,8062,0,0), +(4559,8,4095,0,1,20,734,8062,0,0), +(4560,8,4095,0,1,19,734,8062,0,0), +(4561,8,4095,0,1,18,734,8062,0,0), +(4562,8,4095,0,1,17,734,8062,0,0), +(4563,8,4095,0,1,16,734,8062,0,0), +(4564,8,4095,0,1,15,734,8062,0,0), +(4565,8,4095,0,1,14,734,8062,0,0), +(4566,8,4095,0,1,13,734,8062,0,0), +(4567,8,4095,0,1,12,734,8062,0,0), +(4568,8,4095,0,1,11,734,8062,0,0), +(4569,8,4095,0,1,10,734,8062,0,0), +(4570,8,4095,0,1,9,734,8062,0,0), +(4571,8,4095,0,1,8,734,8062,0,0), +(4572,8,4095,0,1,7,734,8062,0,0), +(4573,8,4095,0,1,6,734,8062,0,0), +(4574,8,4095,0,1,5,734,8062,0,0), +(4575,8,4095,0,1,4,734,8062,0,0), +(4576,8,4095,0,1,3,734,8062,0,0), +(4577,8,4095,0,1,2,734,8062,0,0), +(4578,8,4095,0,1,1,734,8062,0,0), +(4579,8,4095,0,1,0,734,8062,0,0), +(4604,8,4095,1,1,23,732,8052,0,0), +(4605,8,4095,1,1,22,732,8052,0,0), +(4606,8,4095,1,1,21,732,8052,0,0), +(4607,8,4095,1,1,20,732,8052,0,0), +(4608,8,4095,1,1,19,732,8052,0,0), +(4609,8,4095,1,1,18,732,8052,0,0), +(4610,8,4095,1,1,17,732,8052,0,0), +(4611,8,4095,1,1,16,732,8052,0,0), +(4612,8,4095,1,1,15,732,8052,0,0), +(4613,8,4095,1,1,14,732,8052,0,0), +(4614,8,4095,1,1,13,732,8052,0,0), +(4615,8,4095,1,1,12,732,8052,0,0), +(4616,8,4095,1,1,11,732,8052,0,0), +(4617,8,4095,1,1,10,732,8052,0,0), +(4618,8,4095,1,1,9,732,8052,0,0), +(4619,8,4095,1,1,8,732,8052,0,0), +(4620,8,4095,1,1,7,732,8052,0,0), +(4621,8,4095,1,1,6,732,8052,0,0), +(4622,8,4095,1,1,5,732,8052,0,0), +(4623,8,4095,1,1,4,732,8052,0,0), +(4624,8,4095,1,1,3,732,8052,0,0), +(4625,8,4095,1,1,2,732,8052,0,0), +(4626,8,4095,1,1,1,732,8052,0,0), +(4627,8,4095,1,1,0,732,8052,0,0), +(4628,8,4095,1,1,23,736,8071,0,0), +(4629,8,4095,1,1,22,736,8071,0,0), +(4630,8,4095,1,1,21,736,8071,0,0), +(4631,8,4095,1,1,20,736,8071,0,0), +(4632,8,4095,1,1,19,736,8071,0,0), +(4633,8,4095,1,1,18,736,8071,0,0), +(4634,8,4095,1,1,17,736,8071,0,0), +(4635,8,4095,1,1,16,736,8071,0,0), +(4636,8,4095,1,1,15,736,8071,0,0), +(4637,8,4095,1,1,14,736,8071,0,0), +(4638,8,4095,1,1,13,736,8071,0,0), +(4639,8,4095,1,1,12,736,8071,0,0), +(4640,8,4095,1,1,11,736,8071,0,0), +(4641,8,4095,1,1,10,736,8071,0,0), +(4642,8,4095,1,1,9,736,8071,0,0), +(4643,8,4095,1,1,8,736,8071,0,0), +(4644,8,4095,1,1,7,736,8071,0,0), +(4645,8,4095,1,1,6,736,8071,0,0), +(4646,8,4095,1,1,5,736,8071,0,0), +(4647,8,4095,1,1,4,736,8071,0,0), +(4648,8,4095,1,1,3,736,8071,0,0), +(4649,8,4095,1,1,2,736,8071,0,0), +(4650,8,4095,1,1,1,736,8071,0,0), +(4651,8,4095,1,1,0,736,8071,0,0), +(4652,8,4095,0,5,5,738,8086,0,0), +(4653,8,4095,0,5,4,738,8085,0,0), +(4654,8,4095,0,5,3,738,8084,0,0), +(4655,8,4095,0,5,2,738,8083,0,0), +(4656,8,4095,0,5,1,738,8083,0,0), +(4657,8,4095,0,5,0,738,8091,0,0), +(4670,8,4095,0,5,0,740,8099,0,0), +(4671,8,4095,0,5,1,740,8102,0,0), +(4672,8,4095,0,5,2,740,8099,0,0), +(4673,8,4095,0,5,3,740,8107,0,0), +(4674,8,4095,0,5,4,740,8099,0,0), +(4675,8,4095,0,5,5,740,8099,0,0), +(4676,8,4095,0,5,0,739,8093,0,0), +(4677,8,4095,0,5,1,739,8108,0,0), +(4678,8,4095,0,5,2,739,8093,0,0), +(4679,8,4095,0,5,3,739,8094,0,0), +(4680,8,4095,0,5,4,739,8095,0,0), +(4681,8,4095,0,5,5,739,8108,0,0), +(4682,8,4095,1,4,0,745,8173,0,0), +(4683,8,4095,1,4,1,745,8174,0,0), +(4684,8,4095,1,4,2,745,8175,0,0), +(4685,8,4095,1,4,3,745,8175,0,0), +(4686,8,4095,1,4,4,745,8177,0,0), +(4687,8,4095,1,4,5,745,8175,0,0), +(4688,8,4095,1,4,6,745,8178,0,0), +(4689,8,4095,1,4,7,745,8179,0,0), +(4690,8,4095,1,4,8,745,8290,0,0), +(4691,8,4095,1,4,9,745,8290,0,0), +(4692,8,32,1,4,10,745,8181,0,0), +(4693,8,2080,1,4,11,745,8180,0,0), +(4694,8,2080,1,4,12,745,8180,0,0), +(4695,8,2080,1,4,13,745,8180,0,0), +(4696,8,4095,1,4,14,745,8290,0,0), +(4697,58720256,4063,0,2,0,747,8318,1,0), +(4698,58720256,4063,0,2,0,747,8323,1,1), +(4699,58720256,4063,0,2,0,747,8323,1,2), +(4700,58720256,4063,0,2,0,747,8323,1,3), +(4701,58720256,4063,0,2,0,747,8323,1,4), +(4702,58720256,4063,0,2,0,747,8321,1,5), +(4718,58720256,4095,1,1,0,751,8363,0,0), +(4719,58720256,4095,1,1,1,751,8364,0,0), +(4720,58720256,4095,1,1,2,751,8363,0,0), +(4721,58720256,4095,1,1,3,751,8363,0,0), +(4722,58720256,4095,1,1,4,751,8363,0,0), +(4723,58720256,4095,1,1,5,751,8364,0,0), +(4724,58720256,4095,1,1,6,751,8363,0,0), +(4725,58720256,4095,1,1,7,751,8363,0,0), +(4726,58720256,4095,1,1,8,751,8363,0,0), +(4727,58720256,4095,1,1,9,751,8364,0,0), +(4728,58720256,4095,1,1,10,751,8363,0,0), +(4729,58720256,4095,1,1,11,751,8363,0,0), +(4730,58720256,4095,1,1,12,751,8364,0,0), +(4731,58720256,4095,1,1,13,751,8364,0,0), +(4732,58720256,4095,1,1,14,751,8363,0,0), +(4733,58720256,4095,0,5,34,752,8389,0,0), +(4734,58720256,4095,0,5,33,752,8389,0,0), +(4735,58720256,4095,0,5,32,752,8389,0,0), +(4736,58720256,4095,0,5,31,752,8389,0,0), +(4737,58720256,4095,0,5,30,752,8389,0,0), +(4738,58720256,4095,0,5,29,752,8393,0,0), +(4739,58720256,4095,0,5,28,752,8390,0,0), +(4740,58720256,4095,0,5,27,752,8390,0,0), +(4741,58720256,4095,0,5,26,752,8389,0,0), +(4742,58720256,4095,0,5,25,752,8389,0,0), +(4743,58720256,4095,0,5,24,752,8389,0,0), +(4744,58720256,4095,0,5,23,752,8399,0,0), +(4745,58720256,4095,0,5,22,752,8393,0,0), +(4746,58720256,4095,0,5,21,752,8390,0,0), +(4747,58720256,4095,0,5,20,752,8399,0,0), +(4748,58720256,4095,0,5,19,752,8389,0,0), +(4749,58720256,4095,0,5,18,752,8389,0,0), +(4750,58720256,4095,0,5,17,752,9928,0,0), +(4751,58720256,4095,0,5,16,752,8391,0,0), +(4752,58720256,4095,0,5,15,752,8389,0,0), +(4753,58720256,4095,0,5,14,752,8392,0,0), +(4754,58720256,4095,0,5,13,752,8389,0,0), +(4755,58720256,4095,0,5,12,752,8390,0,0), +(4756,58720256,4095,0,5,11,752,8399,0,0), +(4757,58720256,4095,0,5,10,752,8389,0,0), +(4758,58720256,4095,0,5,9,752,8392,0,0), +(4759,58720256,4095,0,5,8,752,8393,0,0), +(4760,58720256,4095,0,5,7,752,8389,0,0), +(4761,58720256,4095,0,5,6,752,8390,0,0), +(4762,58720256,4095,0,5,5,752,8393,0,0), +(4763,58720256,4095,0,5,4,752,8399,0,0), +(4764,58720256,4095,0,5,3,752,8389,0,0), +(4765,58720256,4095,0,5,2,752,8390,0,0), +(4766,58720256,4095,0,5,1,752,8389,0,0), +(4767,58720256,4095,0,5,0,752,8389,0,0), +(4785,58720256,4095,0,5,17,753,8395,0,0), +(4786,58720256,4095,0,5,16,753,8397,0,0), +(4787,58720256,4095,0,5,15,753,8396,0,0), +(4788,58720256,4095,0,5,14,753,8394,0,0), +(4789,58720256,4095,0,5,13,753,8394,0,0), +(4790,58720256,4095,0,5,12,753,8395,0,0), +(4791,58720256,4095,0,5,11,753,8394,0,0), +(4792,58720256,4095,0,5,10,753,8396,0,0), +(4793,58720256,4095,0,5,9,753,8394,0,0), +(4794,58720256,4095,0,5,8,753,8394,0,0), +(4795,58720256,4095,0,5,7,753,8400,0,0), +(4796,58720256,4095,0,5,6,753,8397,0,0), +(4797,58720256,4095,0,5,5,753,8394,0,0), +(4798,58720256,4095,0,5,4,753,8395,0,0), +(4799,58720256,4095,0,5,3,753,8394,0,0), +(4800,58720256,4095,0,5,2,753,8394,0,0), +(4801,58720256,4095,0,5,1,753,8394,0,0), +(4802,58720256,4095,0,5,0,753,8394,0,0), +(4803,58720256,4095,0,5,34,753,8400,0,0), +(4804,58720256,4095,0,5,33,753,8397,0,0), +(4805,58720256,4095,0,5,32,753,8396,0,0), +(4806,58720256,4095,0,5,31,753,8395,0,0), +(4807,58720256,4095,0,5,30,753,8396,0,0), +(4808,58720256,4095,0,5,29,753,8396,0,0), +(4809,58720256,4095,0,5,28,753,8395,0,0), +(4810,58720256,4095,0,5,27,753,8395,0,0), +(4811,58720256,4095,0,5,26,753,8395,0,0), +(4812,58720256,4095,0,5,25,753,8395,0,0), +(4813,58720256,4095,0,5,24,753,8395,0,0), +(4814,58720256,4095,0,5,23,753,8396,0,0), +(4815,58720256,4095,0,5,22,753,8396,0,0), +(4816,58720256,4095,0,5,21,753,8397,0,0), +(4817,58720256,4095,0,5,20,753,8396,0,0), +(4818,58720256,4095,0,5,19,753,8396,0,0), +(4819,58720256,4095,0,5,18,753,8395,0,0), +(4820,128,32,0,2,9,756,8451,0,0), +(4821,128,32,0,2,8,756,8451,0,0), +(4822,128,32,0,2,7,756,8451,0,0), +(4823,128,32,0,2,6,756,8451,0,0), +(4824,128,32,0,2,5,756,8451,0,0), +(4825,128,4063,0,2,4,756,8438,0,0), +(4826,128,4063,0,2,3,756,8435,0,0), +(4827,128,4063,0,2,2,756,8435,0,0), +(4828,128,4063,0,2,1,756,8435,0,0), +(4829,128,4063,0,2,0,756,8435,0,0), +(4830,128,32,1,2,11,757,8468,0,0), +(4831,128,32,1,2,10,757,8468,0,0), +(4832,128,32,1,2,9,757,8468,0,0), +(4833,128,32,1,2,8,757,8468,0,0), +(4834,128,32,1,2,7,757,8468,0,0), +(4835,128,32,1,2,6,757,8468,0,0), +(4836,128,4063,1,2,5,757,8452,0,0), +(4837,128,4063,1,2,4,757,8454,0,0), +(4838,128,4063,1,2,3,757,8454,0,0), +(4839,128,4063,1,2,2,757,8454,0,0), +(4840,128,4063,1,2,1,757,8454,0,0), +(4841,128,4063,1,2,0,757,8454,0,0), +(4862,128,4095,1,1,18,766,8510,0,0), +(4863,128,4095,1,1,17,766,8510,0,0), +(4864,128,4095,1,1,16,766,8510,0,0), +(4865,128,4095,1,1,15,766,8510,0,0), +(4866,128,4095,1,1,14,766,8510,0,0), +(4867,128,4095,1,1,13,766,8510,0,0), +(4868,128,4095,1,1,12,766,8510,0,0), +(4869,128,4095,1,1,11,766,8510,0,0), +(4870,128,4095,1,1,10,766,8510,0,0), +(4871,128,4095,1,1,9,766,8510,0,0), +(4872,128,4095,1,1,8,766,8510,0,0), +(4873,128,4095,1,1,7,766,8510,0,0), +(4874,128,4095,1,1,6,766,8510,0,0), +(4875,128,4095,1,1,5,766,8510,0,0), +(4876,128,4095,1,1,4,766,8510,0,0), +(4877,128,4095,1,1,3,766,8510,0,0), +(4878,128,4095,1,1,2,766,8510,0,0), +(4879,128,4095,1,1,1,766,8510,0,0), +(4880,128,4095,1,1,0,766,8510,0,0), +(4881,128,4095,0,5,0,767,8538,0,0), +(4882,128,4095,0,5,1,767,8538,0,0), +(4883,128,4095,0,5,2,767,8538,0,0), +(4884,128,4095,0,5,3,767,8538,0,0), +(4885,128,4095,0,5,4,767,8538,0,0), +(4886,128,4095,0,5,5,767,8539,0,0), +(4887,128,4095,0,5,6,767,8540,0,0), +(4888,128,4095,0,5,7,767,8541,0,0), +(4889,128,4095,0,5,8,767,8542,0,0), +(4890,128,4095,0,5,9,767,8543,0,0), +(4891,128,4095,0,5,10,767,8544,0,0), +(4897,128,4095,0,4,9,768,8569,0,0), +(4898,128,4095,0,4,8,768,8568,0,0), +(4899,128,4095,0,4,7,768,8567,0,0), +(4900,128,4095,0,4,6,768,8566,0,0), +(4901,128,4095,0,4,5,768,8565,0,0), +(4902,128,4095,0,4,4,768,8564,0,0), +(4903,128,4095,0,4,3,768,8563,0,0), +(4904,128,4095,0,4,2,768,8562,0,0), +(4905,128,4095,0,4,1,768,8561,0,0), +(4906,128,4095,0,4,0,768,8560,0,0), +(4907,1024,4095,1,1,0,778,8637,0,0), +(4908,1024,4095,1,1,1,778,8638,0,0), +(4909,1024,4095,1,1,2,778,8639,0,0), +(4910,1024,4095,1,1,3,778,8639,0,0), +(4911,1024,4095,1,1,4,778,8640,0,0), +(4912,1024,4095,1,1,5,778,8639,0,0), +(4913,1024,4095,1,1,6,778,8639,0,0), +(4914,1024,4095,1,1,7,778,8641,0,0), +(4915,1024,4095,1,1,8,778,8642,0,0), +(4916,1024,4095,1,1,9,778,8639,0,0), +(4917,1024,4095,1,1,10,778,8639,0,0), +(4918,1024,4095,1,1,11,778,8639,0,0), +(4919,1024,4095,1,1,12,778,8639,0,0), +(4920,1024,4095,1,1,13,778,8639,0,0), +(4921,1024,4095,1,1,14,778,8642,0,0), +(4922,1024,4095,1,1,15,778,8650,0,0), +(4923,1024,4095,1,1,16,778,8651,0,0), +(4924,1024,4095,1,1,17,778,8652,0,0), +(4925,1024,4095,1,1,18,778,8649,0,0), +(4926,1024,4095,0,1,0,782,8707,0,0), +(4927,1024,4095,0,1,1,782,8707,0,0), +(4928,1024,4095,0,1,2,782,8707,0,0), +(4929,1024,4095,0,1,3,782,8707,0,0), +(4930,1024,4095,0,1,4,782,8707,0,0), +(4931,1024,4095,0,1,5,782,8707,0,0), +(4932,1024,4095,0,1,6,782,8707,0,0), +(4933,1024,4095,0,1,7,782,8707,0,0), +(4934,1024,4095,0,1,8,782,8707,0,0), +(4935,1024,4095,0,1,9,782,8707,0,0), +(4936,1024,4095,0,1,10,782,8707,0,0), +(4937,1024,4095,0,1,11,782,8707,0,0), +(4938,1024,4095,0,1,12,782,8707,0,0), +(4939,1024,4095,0,1,13,782,8707,0,0), +(4940,1024,4095,0,1,14,782,8707,0,0), +(4941,1024,4095,0,1,15,782,8707,0,0), +(4942,1024,4095,0,1,16,782,8707,0,0), +(4943,1024,4095,0,1,17,782,8707,0,0), +(4944,1024,4095,0,1,18,782,8707,0,0), +(4945,1024,4095,0,1,19,782,8707,0,0), +(4946,1024,4095,0,1,20,782,8713,0,0), +(4951,64,4095,0,5,0,783,8757,0,0), +(4952,64,4095,0,5,0,784,8765,0,0), +(4953,64,4095,0,5,1,783,8757,0,0), +(4954,64,4095,0,5,1,784,8766,0,0), +(4955,64,4095,0,5,2,783,8758,0,0), +(4956,64,4095,0,5,2,784,8767,0,0), +(4957,64,4095,0,5,3,783,8759,0,0), +(4958,64,4095,0,5,3,784,8768,0,0), +(4959,64,4095,0,5,4,783,8760,0,0), +(4960,64,4095,0,5,4,784,8769,0,0), +(4961,64,4095,0,5,5,783,8761,0,0), +(4962,64,4095,0,5,5,784,8770,0,0), +(4963,64,4095,0,5,6,783,8762,0,0), +(4964,64,4095,0,5,6,784,8766,0,0), +(4965,64,4095,0,5,7,783,8763,0,0), +(4966,64,4095,0,5,7,784,8767,0,0), +(4967,68719476736,4063,0,2,4,794,8903,0,0), +(4968,68719476736,4063,0,2,3,794,8902,0,0), +(4969,68719476736,4063,0,2,2,794,8909,0,0), +(4970,68719476736,4063,0,2,1,794,8900,0,0), +(4971,68719476736,4063,0,2,0,794,8912,0,0), +(4972,68719476736,4063,1,2,5,795,8924,0,0), +(4973,68719476736,4063,1,2,4,795,8922,0,0), +(4974,68719476736,4063,1,2,3,795,8919,0,0), +(4975,68719476736,4063,1,2,2,795,8920,0,0), +(4976,68719476736,4063,1,2,1,795,8922,0,0), +(4977,68719476736,4063,1,2,0,795,8921,0,0), +(4978,68719476736,4095,0,1,0,360,8938,0,0), +(4979,68719476736,4095,0,1,1,360,8939,0,0), +(4980,68719476736,4095,0,1,2,360,8940,0,0), +(4981,68719476736,4095,0,1,3,360,8941,0,0), +(4982,68719476736,4095,0,1,4,360,8942,0,0), +(4983,68719476736,4095,0,1,5,360,8938,0,0), +(4984,68719476736,4095,0,1,6,360,8939,0,0), +(4985,68719476736,4095,0,1,7,360,8940,0,0), +(4986,68719476736,4095,0,1,8,360,8941,0,0), +(4987,68719476736,4095,0,1,9,360,8942,0,0), +(4988,68719476736,4095,0,1,10,360,8938,0,0), +(4989,68719476736,4095,0,1,11,360,8939,0,0), +(4990,68719476736,4095,0,1,12,360,8940,0,0), +(4991,68719476736,4095,0,1,13,360,8941,0,0), +(4992,68719476736,4095,0,1,14,360,8942,0,0), +(4993,68719476736,4095,0,1,15,360,8948,0,0), +(4994,68719476736,4095,1,1,0,368,8952,0,0), +(4995,68719476736,4095,1,1,1,368,8953,0,0), +(4996,68719476736,4095,1,1,2,368,8954,0,0), +(4997,68719476736,4095,1,1,3,368,8955,0,0), +(4998,68719476736,4095,1,1,4,368,8956,0,0), +(4999,68719476736,4095,1,1,5,368,8952,0,0), +(5000,68719476736,4095,1,1,6,368,8953,0,0), +(5001,68719476736,4095,1,1,7,368,8954,0,0), +(5002,68719476736,4095,1,1,8,368,8955,0,0), +(5003,68719476736,4095,1,1,9,368,8956,0,0), +(5004,68719476736,4095,1,1,10,368,8952,0,0), +(5005,68719476736,4095,1,1,11,368,8953,0,0), +(5006,68719476736,4095,1,1,12,368,8954,0,0), +(5007,68719476736,4095,1,1,13,368,8955,0,0), +(5008,68719476736,4095,1,1,14,368,8956,0,0), +(5009,68719476736,4095,1,1,15,368,8962,0,0), +(5010,68719476736,4063,0,2,0,361,8966,0,0), +(5011,68719476736,4063,0,2,2,361,8968,0,0), +(5012,68719476736,4063,0,2,1,361,8967,0,0), +(5013,68719476736,4063,0,2,4,361,8970,0,0), +(5014,68719476736,4063,0,2,3,361,8969,0,0), +(5015,68719476736,4063,1,2,0,369,8980,0,0), +(5016,68719476736,4063,1,2,1,369,8981,0,0), +(5017,68719476736,4063,1,2,2,369,8982,0,0), +(5018,68719476736,4063,1,2,3,369,8983,0,0), +(5019,68719476736,4063,1,2,4,369,8984,0,0), +(5020,68719476736,4063,1,2,5,369,8985,0,0), +(5021,68719476736,4095,0,1,0,797,8997,0,0), +(5022,68719476736,4095,0,1,1,797,8997,0,0), +(5023,68719476736,4095,0,1,2,797,8997,0,0), +(5024,68719476736,4095,0,1,3,797,8997,0,0), +(5025,68719476736,4095,0,1,4,797,8997,0,0), +(5026,68719476736,4095,0,1,5,797,8999,0,0), +(5027,68719476736,4095,0,1,6,797,8999,0,0), +(5028,68719476736,4095,0,1,7,797,8999,0,0), +(5029,68719476736,4095,0,1,8,797,8999,0,0), +(5030,68719476736,4095,0,1,9,797,8999,0,0), +(5031,68719476736,4095,0,1,10,797,8998,0,0), +(5032,68719476736,4095,0,1,11,797,8998,0,0), +(5033,68719476736,4095,0,1,12,797,8998,0,0), +(5034,68719476736,4095,0,1,13,797,8998,0,0), +(5035,68719476736,4095,0,1,14,797,8998,0,0), +(5037,68719476736,4095,1,1,0,799,9003,0,0), +(5038,68719476736,4095,1,1,1,799,9003,0,0), +(5039,68719476736,4095,1,1,2,799,9003,0,0), +(5040,68719476736,4095,1,1,3,799,9003,0,0), +(5041,68719476736,4095,1,1,4,799,9003,0,0), +(5042,68719476736,4095,1,1,5,799,9005,0,0), +(5043,68719476736,4095,1,1,6,799,9005,0,0), +(5044,68719476736,4095,1,1,7,799,9005,0,0), +(5045,68719476736,4095,1,1,8,799,9005,0,0), +(5046,68719476736,4095,1,1,9,799,9005,0,0), +(5047,68719476736,4095,1,1,10,799,9004,0,0), +(5048,68719476736,4095,1,1,11,799,9004,0,0), +(5049,68719476736,4095,1,1,12,799,9004,0,0), +(5050,68719476736,4095,1,1,13,799,9004,0,0), +(5051,68719476736,4095,1,1,14,799,9004,0,0), +(5059,32,4095,0,5,0,803,9017,0,0), +(5060,32,4095,0,5,1,803,9017,0,0), +(5061,32,4095,0,5,2,803,9017,0,0), +(5062,32,4095,0,5,3,803,9017,0,0), +(5063,32,4095,0,5,4,803,9017,0,0), +(5064,32,4095,0,5,5,803,9017,0,0), +(5065,32,4095,0,5,6,803,9017,0,0), +(5066,32,4095,1,5,0,805,9019,0,0), +(5067,32,4095,1,5,2,805,9019,0,0), +(5068,32,4095,1,5,1,805,9019,0,0), +(5069,32,4095,1,5,3,805,9019,0,0), +(5070,32,4095,1,5,4,805,9019,0,0), +(5071,536870912,4095,0,5,0,848,9494,0,0), +(5072,536870912,4095,0,5,1,848,9494,0,0), +(5073,536870912,4095,0,5,2,848,9496,0,0), +(5074,536870912,4095,0,5,3,848,9497,0,0), +(5075,536870912,4095,0,5,4,848,9494,0,0), +(5076,536870912,4095,0,5,5,848,9498,0,0), +(5077,536870912,4095,0,5,6,848,9495,0,0), +(5078,536870912,4095,0,5,7,848,9500,0,0), +(5079,536870912,4095,0,5,8,848,9499,0,0), +(5080,536870912,4095,0,5,0,849,9502,0,0), +(5081,536870912,4095,0,5,1,849,9502,0,0), +(5082,536870912,4095,0,5,2,849,9502,0,0), +(5083,536870912,4095,0,5,3,849,9502,0,0), +(5084,536870912,4095,0,5,4,849,9502,0,0), +(5085,536870912,4095,0,5,5,849,9502,0,0), +(5086,536870912,4095,0,5,6,849,9502,0,0), +(5087,536870912,4095,0,5,7,849,9502,0,0), +(5088,536870912,4095,0,5,8,849,9502,0,0), +(5089,17179869184,4095,0,5,0,854,9582,0,0), +(5090,17179869184,4095,0,5,2,854,9582,0,0), +(5091,17179869184,4095,0,5,4,854,9582,0,0), +(5092,17179869184,4095,0,5,6,854,9582,0,0), +(5093,17179869184,4095,0,5,8,854,9582,0,0), +(5094,17179869184,4095,0,5,10,854,9582,0,0), +(5095,17179869184,4095,0,5,1,854,9581,0,0), +(5096,17179869184,4095,0,5,3,854,9581,0,0), +(5097,17179869184,4095,0,5,5,854,9581,0,0), +(5098,17179869184,4095,0,5,7,854,9581,0,0), +(5099,17179869184,4095,0,5,9,854,9581,0,0), +(5100,17179869184,4095,0,5,11,854,9581,0,0), +(5101,17179869184,4095,1,5,0,855,9584,0,0), +(5102,17179869184,4095,1,5,2,855,9584,0,0), +(5103,17179869184,4095,1,5,4,855,9584,0,0), +(5104,17179869184,4095,1,5,6,855,9584,0,0), +(5105,17179869184,4095,1,5,8,855,9584,0,0), +(5106,17179869184,4095,1,5,10,855,9584,0,0), +(5107,17179869184,4095,1,5,12,855,9584,0,0), +(5108,17179869184,4095,1,5,14,855,9584,0,0), +(5109,17179869184,4095,1,5,1,855,9583,0,0), +(5110,17179869184,4095,1,5,3,855,9583,0,0), +(5111,17179869184,4095,1,5,5,855,9583,0,0), +(5112,17179869184,4095,1,5,7,855,9583,0,0), +(5113,17179869184,4095,1,5,9,855,9583,0,0), +(5114,17179869184,4095,1,5,11,855,9583,0,0), +(5115,17179869184,4095,1,5,13,855,9583,0,0), +(5116,17179869184,4095,1,5,15,855,9583,0,0), +(5117,134217728,4063,0,2,0,862,9616,0,0), +(5118,134217728,4063,0,2,1,862,9616,0,0), +(5119,134217728,4063,0,2,2,862,9616,0,0), +(5120,134217728,4063,0,2,3,862,9616,0,0), +(5121,134217728,4063,0,2,4,862,9616,0,0), +(5122,134217728,4063,1,2,0,863,9624,0,0), +(5123,134217728,4063,1,2,1,863,9624,0,0), +(5124,134217728,4063,1,2,2,863,9624,0,0), +(5125,134217728,4063,1,2,3,863,9624,0,0), +(5126,134217728,4095,0,6,1,394,2783,0,0), +(5127,134217728,4095,0,6,2,394,2783,0,0), +(5128,134217728,4095,0,6,3,394,2783,0,0), +(5129,134217728,4095,0,6,4,394,2786,0,0), +(5130,134217728,4095,0,6,5,394,2786,0,0), +(5131,134217728,4095,0,6,6,394,2786,0,0), +(5132,134217728,4095,0,6,7,394,2788,0,0), +(5133,134217728,4095,0,6,8,394,2788,0,0), +(5134,134217728,4095,0,6,9,394,2788,0,0), +(5135,134217728,4095,1,6,1,397,2815,0,0), +(5136,134217728,4095,1,6,2,397,2815,0,0), +(5137,134217728,4095,1,6,3,397,2815,0,0), +(5138,134217728,4095,1,6,4,397,2818,0,0), +(5139,134217728,4095,1,6,5,397,2818,0,0), +(5140,134217728,4095,1,6,6,397,2818,0,0), +(5141,134217728,4095,1,6,7,397,2821,0,0), +(5142,134217728,4095,1,6,8,397,2821,0,0), +(5143,134217728,4095,1,6,9,397,2821,0,0), +(5144,1073741824,4063,0,2,0,869,9655,0,0), +(5145,1073741824,4063,0,2,1,869,9655,0,0), +(5146,1073741824,4063,0,2,2,869,9655,0,0), +(5147,1073741824,4063,0,2,3,869,9655,0,0), +(5148,1073741824,4063,0,2,4,869,9655,0,0), +(5149,1073741824,4063,0,2,5,869,9655,0,0), +(5150,1073741824,4063,1,2,0,870,9663,0,0), +(5151,1073741824,4063,1,2,1,870,9663,0,0), +(5152,1073741824,4063,1,2,2,870,9663,0,0), +(5153,1073741824,4063,1,2,3,870,9663,0,0), +(5154,1073741824,4063,1,2,4,870,9663,0,0), +(5155,1073741824,4063,1,2,5,870,9663,0,0), +(5156,1073741824,4095,1,5,0,871,9673,0,0), +(5157,1073741824,4095,1,5,1,871,3081,0,0), +(5158,1073741824,4095,1,5,2,871,9673,0,0), +(5159,1073741824,4095,1,5,3,871,9673,0,0), +(5160,1073741824,4095,1,5,4,871,9673,0,0), +(5161,1073741824,4095,1,5,5,871,9673,0,0), +(5162,1073741824,4095,1,5,0,872,9674,0,0), +(5163,1073741824,4095,1,5,1,872,9674,0,0), +(5164,1073741824,4095,1,5,2,872,3082,0,0), +(5165,1073741824,4095,1,5,3,872,3083,0,0), +(5166,1073741824,4095,1,5,4,872,3084,0,0), +(5167,1073741824,4095,1,5,5,872,9674,0,0), +(5168,1073741824,4095,0,8,0,873,9682,0,0), +(5169,1073741824,4095,0,8,1,873,9683,0,0), +(5170,1073741824,4095,0,8,2,873,9683,0,0), +(5171,1073741824,4095,0,8,3,873,9684,0,0), +(5172,1073741824,4095,0,8,4,873,9684,0,0), +(5173,1073741824,4095,0,8,5,873,9682,0,0), +(5174,2,4095,0,5,0,836,9428,0,0), +(5175,2,4095,0,5,1,836,9428,0,0), +(5176,2,4095,0,5,2,836,9428,0,0), +(5177,2,4095,0,5,3,836,9428,0,0), +(5178,2,4095,0,5,4,836,9428,0,0), +(5179,2,4095,0,5,5,836,9428,0,0), +(5180,2,4095,0,5,6,836,9428,0,0), +(5181,2,4095,0,5,7,836,9428,0,0), +(5182,2,4095,0,5,8,836,9428,0,0), +(5183,2,4095,0,5,9,836,9428,0,0), +(5184,2,4095,0,5,10,836,9428,0,0), +(5185,2,4095,0,5,0,874,9804,0,0), +(5186,2,4095,0,5,1,874,9804,0,0), +(5187,2,4095,0,5,2,874,9804,0,0), +(5188,2,4095,0,5,3,874,9804,0,0), +(5189,2,4095,0,5,4,874,9804,0,0), +(5190,2,4095,0,5,5,874,9804,0,0), +(5191,2,4095,0,5,6,874,9804,0,0), +(5192,2,4095,0,5,7,874,9804,0,0), +(5193,2,4095,0,5,8,874,9804,0,0), +(5194,2,4095,0,5,9,874,9804,0,0), +(5195,2,4095,0,5,10,874,9804,0,0), +(5214,2,4095,1,5,0,841,9471,0,0), +(5215,2,4095,1,5,1,841,9471,0,0), +(5216,2,4095,1,5,2,841,9471,0,0), +(5217,2,4095,1,5,3,841,9471,0,0), +(5218,2,4095,1,5,4,841,9471,0,0), +(5219,2,4095,1,5,5,841,9471,0,0), +(5220,2,4095,1,5,6,841,9471,0,0), +(5221,2,4095,0,5,0,876,9816,0,0), +(5222,2,4095,0,5,1,876,9816,0,0), +(5223,2,4095,0,5,2,876,9821,0,0), +(5224,2,4095,0,5,3,876,9817,0,0), +(5225,2,4095,0,5,4,876,9822,0,0), +(5226,2,4095,0,5,5,876,9816,0,0), +(5227,2,4095,0,5,6,876,9816,0,0), +(5228,2,4095,0,5,7,876,9823,0,0), +(5229,2,4095,0,5,8,876,9816,0,0), +(5230,2,4095,0,5,9,876,9820,0,0), +(5231,2,4095,0,5,10,876,9821,0,0), +(5232,34359738368,4063,0,1,0,880,9846,0,0), +(5233,34359738368,4063,0,1,1,880,9849,0,0), +(5234,34359738368,4063,0,1,2,880,9849,0,0), +(5235,34359738368,4063,0,1,3,880,9849,0,0), +(5236,34359738368,4063,0,1,4,880,9851,0,0), +(5237,34359738368,4063,0,1,5,880,9851,0,0), +(5238,34359738368,4063,0,1,6,880,9851,0,0), +(5239,34359738368,4063,0,1,7,880,9853,0,0), +(5240,34359738368,4063,0,1,8,880,9853,0,0), +(5241,34359738368,4063,0,1,9,880,9853,0,0), +(5242,34359738368,4095,0,1,10,880,9864,0,0), +(5243,34359738368,4063,1,1,0,881,9855,0,0), +(5244,34359738368,4063,1,1,1,881,9857,0,0), +(5245,34359738368,4063,1,1,2,881,9857,0,0), +(5246,34359738368,4063,1,1,3,881,9857,0,0), +(5247,34359738368,4063,1,1,4,881,9859,0,0), +(5248,34359738368,4063,1,1,5,881,9859,0,0), +(5249,34359738368,4063,1,1,6,881,9859,0,0), +(5250,34359738368,4063,1,1,7,881,9861,0,0), +(5251,34359738368,4063,1,1,8,881,9861,0,0), +(5252,34359738368,4063,1,1,9,881,9861,0,0), +(5253,34359738368,4095,1,1,10,881,9865,0,0), +(5254,34359738368,4095,1,1,11,881,9866,0,0), +(5255,2,4063,0,2,0,824,9269,0,0), +(5256,2,4063,0,2,1,824,9269,0,0), +(5257,2,4063,0,2,2,824,9266,0,0), +(5258,2,4063,0,2,3,824,9267,0,0), +(5259,2,4063,0,2,4,824,9271,0,0), +(5260,2,4063,0,2,5,824,9268,0,0), +(5261,2,4063,0,2,6,824,9269,0,0), +(5262,2,4063,0,2,7,824,9269,0,0), +(5263,2,4063,0,2,8,824,9266,0,0), +(5264,2,32,0,2,9,824,9289,0,0), +(5265,2,32,0,2,10,824,9289,0,0), +(5266,2,32,0,2,11,824,9289,0,0), +(5267,2,32,0,2,12,824,9289,0,0), +(5268,2,32,0,2,13,824,9289,0,0), +(5269,2,32,0,2,14,824,9289,0,0), +(5270,2,32,0,2,15,824,9289,0,0), +(5271,2,32,0,2,16,824,9289,0,0), +(5272,2,32,0,2,17,824,9289,0,0), +(5273,2,32,1,2,17,825,9313,0,0), +(5274,2,32,1,2,16,825,9313,0,0), +(5275,2,32,1,2,15,825,9313,0,0), +(5276,2,32,1,2,14,825,9313,0,0), +(5277,2,32,1,2,13,825,9313,0,0), +(5278,2,32,1,2,12,825,9313,0,0), +(5279,2,32,1,2,11,825,9313,0,0), +(5280,2,32,1,2,10,825,9313,0,0), +(5281,2,32,1,2,9,825,9313,0,0), +(5282,2,4063,1,2,8,825,9298,0,0), +(5283,2,4063,1,2,7,825,15781,0,0), +(5284,2,4063,1,2,6,825,15780,0,0), +(5285,2,4063,1,2,5,825,9300,0,0), +(5286,2,4063,1,2,4,825,9298,0,0), +(5287,2,4063,1,2,3,825,9300,0,0), +(5288,2,4063,1,2,2,825,15779,0,0), +(5289,2,4063,1,2,1,825,15778,0,0), +(5290,2,4063,1,2,0,825,9297,0,0), +(5291,34359738368,4095,0,5,0,882,9867,0,0), +(5292,34359738368,4095,0,5,1,882,9870,0,0), +(5293,34359738368,4095,0,5,2,882,9871,0,0), +(5294,34359738368,4095,0,5,3,882,9868,0,0), +(5295,34359738368,4095,0,5,4,882,9867,0,0), +(5296,34359738368,4095,0,5,5,882,9869,0,0), +(5297,34359738368,4095,0,5,6,882,9867,0,0), +(5298,34359738368,4095,0,2,0,883,9872,0,0), +(5299,34359738368,4095,0,2,1,883,9872,0,0), +(5300,34359738368,4095,0,2,2,883,9872,0,0), +(5301,34359738368,4095,0,2,3,883,9872,0,0), +(5302,34359738368,4095,0,2,4,883,9872,0,0), +(5303,34359738368,4095,0,2,5,883,9872,0,0), +(5304,34359738368,4095,0,2,6,883,9872,0,0), +(5305,34359738368,4095,0,2,7,883,9872,0,0), +(5306,34359738368,4095,0,2,8,883,9872,0,0), +(5307,34359738368,4095,0,5,0,884,9876,0,0), +(5308,34359738368,4095,0,5,1,884,9876,0,0), +(5309,34359738368,4095,0,5,2,884,9876,0,0), +(5310,34359738368,4095,0,5,3,884,9876,0,0), +(5311,34359738368,4095,0,5,4,884,9876,0,0), +(5312,34359738368,4095,0,5,5,884,9876,0,0), +(5313,34359738368,4095,0,5,6,884,9876,0,0), +(5314,34359738368,4095,0,5,0,885,9882,0,0), +(5315,34359738368,4095,0,5,1,885,9882,0,0), +(5316,34359738368,4095,0,5,2,885,9882,0,0), +(5317,34359738368,4095,0,5,3,885,9882,0,0), +(5318,34359738368,4095,0,5,4,885,9882,0,0), +(5319,34359738368,4095,0,5,5,885,9882,0,0), +(5320,34359738368,4095,0,5,6,885,9882,0,0), +(5321,34359738368,4095,1,5,4,414,3466,0,0), +(5322,34359738368,4095,1,5,5,414,3466,0,0), +(5323,34359738368,4095,1,5,0,887,9902,0,0), +(5324,34359738368,4095,1,5,1,887,9902,0,0), +(5325,34359738368,4095,1,5,2,887,9902,0,0), +(5326,34359738368,4095,1,5,3,887,9902,0,0), +(5327,34359738368,4095,1,5,4,887,9902,0,0), +(5328,34359738368,4095,1,5,0,886,9905,0,0), +(5329,34359738368,4095,1,5,1,886,9905,0,0), +(5330,34359738368,4095,1,5,2,886,9905,0,0), +(5331,34359738368,4095,1,5,3,886,9905,0,0), +(5332,34359738368,4095,1,5,5,886,9905,0,0), +(5333,256,4095,0,5,0,806,9071,0,0), +(5334,256,4095,0,5,1,806,9067,0,0), +(5335,256,4095,0,5,2,806,9068,0,0), +(5336,256,4095,0,5,3,806,9073,0,0), +(5337,256,4095,0,5,4,806,9072,0,0), +(5338,256,4095,0,5,5,806,9071,0,0), +(5339,256,4095,0,5,6,806,9070,0,0), +(5340,256,4095,0,5,7,806,9069,0,0), +(5341,256,4095,0,5,8,806,9068,0,0), +(5342,256,4095,0,5,9,806,9067,0,0), +(5343,256,4095,0,5,10,806,9071,0,0), +(5344,256,4095,0,5,11,806,9067,0,0), +(5345,256,4095,0,5,12,806,9068,0,0), +(5346,256,4095,0,5,13,806,9073,0,0), +(5347,256,4095,0,5,14,806,9072,0,0), +(5348,256,4095,0,5,15,806,9071,0,0), +(5349,256,4095,0,5,16,806,9070,0,0), +(5350,256,4095,0,5,17,806,9069,0,0), +(5351,256,4095,0,5,18,806,9068,0,0), +(5352,256,4095,0,5,19,806,9067,0,0), +(5353,256,4095,0,5,20,806,9071,0,0), +(5354,256,4095,0,5,21,806,9067,0,0), +(5355,256,4095,0,5,22,806,9068,0,0), +(5356,256,4095,0,5,23,806,9073,0,0), +(5357,256,4095,0,5,24,806,9072,0,0), +(5358,256,4095,0,5,0,807,9083,0,0), +(5359,256,4095,0,5,1,807,9082,0,0), +(5360,256,4095,0,5,2,807,9079,0,0), +(5361,256,4095,0,5,3,807,9080,0,0), +(5362,256,4095,0,5,4,807,9079,0,0), +(5363,256,4095,0,5,5,807,9082,0,0), +(5364,256,4095,0,5,6,807,9081,0,0), +(5365,256,4095,0,5,7,807,9080,0,0), +(5366,256,4095,0,5,8,807,9079,0,0), +(5367,256,4095,0,5,9,807,9082,0,0), +(5368,256,4095,0,5,10,807,9081,0,0), +(5369,256,4095,0,5,11,807,9080,0,0), +(5370,256,4095,0,5,12,807,9082,0,0), +(5371,256,4095,0,5,13,807,9083,0,0), +(5372,256,4095,0,5,14,807,9082,0,0), +(5373,256,4095,0,5,15,807,9081,0,0), +(5374,256,4095,0,5,16,807,9080,0,0), +(5375,256,4095,0,5,17,807,9081,0,0), +(5376,256,4095,0,5,18,807,9083,0,0), +(5377,256,4095,0,5,19,807,9082,0,0), +(5378,256,4095,0,5,20,807,9081,0,0), +(5379,256,4095,0,5,21,807,9079,0,0), +(5380,256,4095,0,5,22,807,9080,0,0), +(5381,256,4095,0,5,23,807,9082,0,0), +(5382,256,4095,0,5,24,807,9079,0,0), +(5383,256,4095,0,5,0,815,9153,0,0), +(5384,256,4095,0,5,1,815,9153,0,0), +(5385,256,4095,0,5,2,815,9153,0,0), +(5386,256,4095,0,5,3,815,9153,0,0), +(5387,256,4095,0,5,4,815,9153,0,0), +(5388,256,4095,0,5,5,815,9153,0,0), +(5389,256,4095,0,5,6,815,9153,0,0), +(5390,256,4095,0,5,7,815,9154,0,0), +(5391,256,4095,0,5,8,815,9155,0,0), +(5392,256,4095,0,5,9,815,9156,0,0), +(5393,256,4095,0,5,10,815,9157,0,0), +(5394,256,4095,0,5,11,815,9158,0,0), +(5395,256,4095,0,5,12,815,9153,0,0), +(5396,256,4095,0,5,13,815,9153,0,0), +(5397,256,4095,0,5,14,815,9153,0,0), +(5398,256,4095,0,5,15,815,9153,0,0), +(5399,256,4095,0,5,16,815,9153,0,0), +(5400,256,4095,0,5,17,815,9153,0,0), +(5401,256,4095,0,5,18,815,9153,0,0), +(5402,256,4095,0,5,19,815,9154,0,0), +(5403,256,4095,0,5,20,815,9155,0,0), +(5404,256,4095,0,5,21,815,9156,0,0), +(5405,256,4095,0,5,22,815,9157,0,0), +(5406,256,4095,0,5,23,815,9158,0,0), +(5407,256,4095,0,5,24,815,9158,0,0), +(5408,256,4095,0,5,0,817,9169,0,0), +(5409,256,4095,0,5,1,817,9168,0,0), +(5410,256,4095,0,5,2,817,9167,0,0), +(5411,256,4095,0,5,3,817,9166,0,0), +(5412,256,4095,0,5,4,817,9166,0,0), +(5413,256,4095,0,5,5,817,9166,0,0), +(5414,256,4095,0,5,6,817,9166,0,0), +(5415,256,4095,0,5,7,817,9166,0,0), +(5416,256,4095,0,5,8,817,9166,0,0), +(5417,256,4095,0,5,9,817,9166,0,0), +(5418,256,4095,0,5,10,817,9169,0,0), +(5419,256,4095,0,5,11,817,9168,0,0), +(5420,256,4095,0,5,12,817,9167,0,0), +(5421,256,4095,0,5,13,817,9166,0,0), +(5422,256,4095,0,5,14,817,9166,0,0), +(5423,256,4095,0,5,15,817,9166,0,0), +(5424,256,4095,0,5,16,817,9166,0,0), +(5425,256,4095,0,5,17,817,9166,0,0), +(5426,256,4095,0,5,18,817,9166,0,0), +(5427,256,4095,0,5,19,817,9166,0,0), +(5428,256,4095,0,5,20,817,9169,0,0), +(5429,256,4095,0,5,21,817,9168,0,0), +(5430,256,4095,0,5,22,817,9167,0,0), +(5431,256,4095,0,5,23,817,9166,0,0), +(5432,256,4095,0,5,24,817,9166,0,0), +(5458,256,4095,1,5,0,808,9093,0,0), +(5459,256,4095,1,5,1,808,9093,0,0), +(5460,256,4095,1,5,2,808,9093,0,0), +(5461,256,4095,1,5,3,808,9092,0,0), +(5462,256,4095,1,5,4,808,9091,0,0), +(5463,256,4095,1,5,5,808,9095,0,0), +(5464,256,4095,1,5,6,808,9094,0,0), +(5465,256,4095,1,5,7,808,9093,0,0), +(5466,256,4095,1,5,8,808,9092,0,0), +(5467,256,4095,1,5,9,808,9091,0,0), +(5468,256,4095,1,5,10,808,9093,0,0), +(5469,256,4095,1,5,11,808,9093,0,0), +(5470,256,4095,1,5,12,808,9093,0,0), +(5471,256,4095,1,5,13,808,9092,0,0), +(5472,256,4095,1,5,14,808,9091,0,0), +(5473,256,4095,1,5,15,808,9095,0,0), +(5474,256,4095,1,5,16,808,9094,0,0), +(5475,256,4095,1,5,17,808,9093,0,0), +(5476,256,4095,1,5,18,808,9092,0,0), +(5477,256,4095,1,5,19,808,9091,0,0), +(5478,256,4095,1,5,20,808,9093,0,0), +(5479,256,4095,1,5,21,808,9093,0,0), +(5480,256,4095,1,5,22,808,9093,0,0), +(5481,256,4095,1,5,23,808,9092,0,0), +(5482,256,4095,1,5,24,808,9095,0,0), +(5483,256,4095,1,5,0,809,9104,0,0), +(5484,256,4095,1,5,1,809,9103,0,0), +(5485,256,4095,1,5,2,809,9100,0,0), +(5486,256,4095,1,5,3,809,9101,0,0), +(5487,256,4095,1,5,4,809,9100,0,0), +(5488,256,4095,1,5,5,809,9103,0,0), +(5489,256,4095,1,5,6,809,9102,0,0), +(5490,256,4095,1,5,7,809,9101,0,0), +(5491,256,4095,1,5,8,809,9100,0,0), +(5492,256,4095,1,5,9,809,9103,0,0), +(5493,256,4095,1,5,10,809,9102,0,0), +(5494,256,4095,1,5,11,809,9101,0,0), +(5495,256,4095,1,5,12,809,9103,0,0), +(5496,256,4095,1,5,13,809,9104,0,0), +(5497,256,4095,1,5,14,809,9103,0,0), +(5498,256,4095,1,5,15,809,9102,0,0), +(5499,256,4095,1,5,16,809,9101,0,0), +(5500,256,4095,1,5,17,809,9102,0,0), +(5501,256,4095,1,5,18,809,9104,0,0), +(5502,256,4095,1,5,19,809,9103,0,0), +(5503,256,4095,1,5,20,809,9102,0,0), +(5504,256,4095,1,5,21,809,9100,0,0), +(5505,256,4095,1,5,22,809,9101,0,0), +(5506,256,4095,1,5,23,809,9103,0,0), +(5507,256,4095,1,5,24,809,9104,0,0), +(5508,256,4095,1,5,0,813,9144,0,0), +(5509,256,4095,1,5,1,813,9143,0,0), +(5510,256,4095,1,5,2,813,9142,0,0), +(5511,256,4095,1,5,3,813,9141,0,0), +(5512,256,4095,1,5,4,813,9140,0,0), +(5513,256,4095,1,5,5,813,9139,0,0), +(5514,256,4095,1,5,6,813,9138,0,0), +(5515,256,4095,1,5,7,813,9138,0,0), +(5516,256,4095,1,5,8,813,9138,0,0), +(5517,256,4095,1,5,9,813,9138,0,0), +(5518,256,4095,1,5,10,813,9144,0,0), +(5519,256,4095,1,5,11,813,9143,0,0), +(5520,256,4095,1,5,12,813,9142,0,0), +(5521,256,4095,1,5,13,813,9141,0,0), +(5522,256,4095,1,5,14,813,9140,0,0), +(5523,256,4095,1,5,15,813,9139,0,0), +(5524,256,4095,1,5,16,813,9138,0,0), +(5525,256,4095,1,5,17,813,9138,0,0), +(5526,256,4095,1,5,18,813,9138,0,0), +(5527,256,4095,1,5,19,813,9138,0,0), +(5528,256,4095,1,5,20,813,9144,0,0), +(5529,256,4095,1,5,21,813,9143,0,0), +(5530,256,4095,1,5,22,813,9142,0,0), +(5531,256,4095,1,5,23,813,9141,0,0), +(5532,256,4095,1,5,24,813,9139,0,0), +(5533,256,4095,1,4,0,821,9195,0,0), +(5534,256,4095,1,4,1,821,9195,0,0), +(5535,256,4095,1,4,2,821,9195,0,0), +(5536,256,4095,1,4,3,821,9198,0,0), +(5537,256,4095,1,4,4,821,9199,0,0), +(5538,256,4095,1,4,5,821,9200,0,0), +(5539,256,4095,1,4,6,821,9201,0,0), +(5540,256,4095,1,4,7,821,9201,0,0), +(5541,256,4095,1,4,8,821,9196,0,0), +(5542,256,4095,1,4,9,821,9200,0,0), +(5543,256,4095,1,4,10,821,9197,0,0), +(5544,256,4095,1,4,11,821,9198,0,0), +(5545,256,4095,1,4,12,821,9199,0,0), +(5558,16,4095,0,1,0,567,6527,0,0), +(5559,16,4095,0,1,1,567,6527,0,0), +(5560,16,4095,0,1,2,567,6527,0,0), +(5561,16,4095,0,1,3,567,6527,0,0), +(5562,16,4095,0,1,4,567,6527,0,0), +(5563,16,4095,0,1,5,567,6527,0,0), +(5564,16,4095,0,1,6,567,6527,0,0), +(5565,16,4095,1,1,0,568,6524,0,0), +(5566,16,4095,1,1,1,568,6524,0,0), +(5567,16,4095,1,1,2,568,6524,0,0), +(5568,16,4095,1,1,3,568,6524,0,0), +(5569,16,4095,1,1,4,568,6524,0,0), +(5570,16,4095,1,1,5,568,6524,0,0), +(5571,16,4095,1,1,6,568,6524,0,0), +(5573,64,4095,1,5,1,786,8796,0,0), +(5574,64,4095,1,5,2,786,8796,0,0), +(5575,64,4095,1,5,3,786,8796,0,0), +(5576,64,4095,1,5,4,786,8796,0,0), +(5577,64,4095,1,5,5,786,8796,0,0), +(5578,64,4095,1,5,6,786,8796,0,0), +(5579,1024,4095,1,5,0,697,7764,0,0), +(5580,1024,4095,1,5,1,697,7764,0,0), +(5581,1024,4095,1,5,2,697,7764,0,0), +(5582,1024,4095,1,5,3,697,7764,0,0), +(5583,1024,4095,1,5,4,697,7764,0,0), +(5584,1024,4095,1,5,5,697,7764,0,0), +(5585,1024,4095,1,5,6,697,7764,0,0), +(5586,1024,4095,1,5,7,697,7764,0,0), +(5605,6291456,4095,0,5,8,890,9925,0,0), +(5606,6291456,4095,0,5,7,890,9925,0,0), +(5607,6291456,4095,0,5,6,890,9925,0,0), +(5608,6291456,4095,0,5,5,890,9925,0,0), +(5609,6291456,4095,0,5,4,890,9925,0,0), +(5610,6291456,4095,0,5,3,890,9925,0,0), +(5611,6291456,4095,0,5,2,890,9925,0,0), +(5612,6291456,4095,0,5,1,890,9925,0,0), +(5613,6291456,4095,0,5,0,890,9925,0,0), +(5614,1,4095,0,5,8,890,9925,0,0), +(5615,1,4095,0,5,7,890,9925,0,0), +(5616,1,4095,0,5,6,890,9925,0,0), +(5617,1,4095,0,5,5,890,9925,0,0), +(5618,1,4095,0,5,4,890,9925,0,0), +(5619,1,4095,0,5,3,890,9925,0,0), +(5620,1,4095,0,5,2,890,9925,0,0), +(5621,1,4095,0,5,1,890,9925,0,0), +(5622,1,4095,0,5,0,890,9925,0,0), +(5623,1,4095,0,5,0,888,9912,0,0), +(5624,1,4095,0,5,0,889,9914,0,0), +(5625,1,4095,0,5,1,888,9907,0,0), +(5626,1,4095,0,5,1,889,9913,0,0), +(5627,1,4095,0,5,2,888,9912,0,0), +(5628,1,4095,0,5,2,889,9913,0,0), +(5629,1,4095,0,5,3,888,9906,0,0), +(5630,1,4095,0,5,3,889,9914,0,0), +(5631,1,4095,0,5,4,888,9912,0,0), +(5632,1,4095,0,5,4,889,9929,0,0), +(5633,1,4095,0,5,5,888,9911,0,0), +(5634,1,4095,0,5,5,889,9929,0,0), +(5635,1,4095,0,5,6,888,9912,0,0), +(5636,1,4095,0,5,6,889,9913,0,0), +(5637,1,4095,0,5,7,888,9907,0,0), +(5638,1,4095,0,5,7,889,9913,0,0), +(5639,1,4095,0,5,8,888,9906,0,0), +(5640,1,4095,0,5,8,889,9913,0,0), +(5641,6291456,4095,0,5,0,888,9912,0,0), +(5642,6291456,4095,0,5,1,888,9907,0,0), +(5643,6291456,4095,0,5,2,888,9912,0,0), +(5644,6291456,4095,0,5,3,888,9906,0,0), +(5645,6291456,4095,0,5,4,888,9912,0,0), +(5646,6291456,4095,0,5,5,888,9911,0,0), +(5647,6291456,4095,0,5,6,888,9912,0,0), +(5648,6291456,4095,0,5,7,888,9907,0,0), +(5649,6291456,4095,0,5,8,888,9906,0,0), +(5650,6291456,4095,0,5,0,889,9914,0,0), +(5651,6291456,4095,0,5,1,889,9913,0,0), +(5652,6291456,4095,0,5,2,889,9913,0,0), +(5653,6291456,4095,0,5,3,889,9914,0,0), +(5654,6291456,4095,0,5,4,889,9914,0,0), +(5655,6291456,4095,0,5,5,889,9914,0,0), +(5656,6291456,4095,0,5,6,889,9913,0,0), +(5657,6291456,4095,0,5,7,889,9913,0,0), +(5658,6291456,4095,0,5,8,889,9913,0,0), +(5659,512,4095,1,5,21,891,9932,0,0), +(5660,512,4095,1,5,20,891,9932,0,0), +(5661,512,4095,1,5,19,891,9932,0,0), +(5662,512,4095,1,5,18,891,9932,0,0), +(5663,512,4095,1,5,17,891,9932,0,0), +(5664,512,4095,1,5,16,891,9932,0,0), +(5665,512,4095,1,5,15,891,9932,0,0), +(5666,512,4095,1,5,14,891,9932,0,0), +(5667,512,4095,1,5,13,891,9932,0,0), +(5668,512,4095,1,5,12,891,9932,0,0), +(5669,512,4095,1,5,11,891,9932,0,0), +(5670,512,4095,1,5,10,891,9932,0,0), +(5671,512,4095,1,5,9,891,9932,0,0), +(5672,512,4095,1,5,8,891,9932,0,0), +(5673,512,4095,1,5,7,891,9932,0,0), +(5674,512,4095,1,5,6,891,9932,0,0), +(5675,512,4095,1,5,5,891,9932,0,0), +(5676,512,4095,1,5,4,891,9932,0,0), +(5677,512,4095,1,5,3,891,9932,0,0), +(5678,512,4095,1,5,2,891,9932,0,0), +(5679,512,4095,1,5,1,891,9932,0,0), +(5680,512,4095,1,5,0,891,9932,0,0), +(5681,512,4095,1,5,21,575,6619,0,0), +(5682,512,4095,1,5,20,575,6619,0,0), +(5683,512,4095,1,5,19,575,6619,0,0), +(5684,512,4095,1,5,18,575,6619,0,0), +(5685,512,4095,1,5,17,575,6619,0,0), +(5686,512,4095,1,5,16,575,6619,0,0), +(5687,512,4095,1,5,15,575,6619,0,0), +(5688,512,4095,1,5,14,575,6619,0,0), +(5689,512,4095,1,5,13,575,6619,0,0), +(5690,512,4095,1,5,12,575,6619,0,0), +(5691,512,4095,1,5,11,575,6619,0,0), +(5692,512,4095,1,5,10,575,6619,0,0), +(5693,512,4095,1,5,9,575,6619,0,0), +(5694,512,4095,1,5,8,575,6619,0,0), +(5695,512,4095,1,5,7,575,6619,0,0), +(5696,512,4095,1,5,6,575,6619,0,0), +(5697,512,4095,1,5,5,575,6619,0,0), +(5698,512,4095,1,5,4,575,6619,0,0), +(5699,512,4095,1,5,3,575,6619,0,0), +(5700,512,4095,1,5,2,575,6619,0,0), +(5701,512,4095,1,5,1,575,6619,0,0), +(5702,512,4095,1,5,0,575,6619,0,0), +(5703,512,4095,1,5,21,776,8619,0,0), +(5704,512,4095,1,5,20,776,8619,0,0), +(5705,512,4095,1,5,19,776,8619,0,0), +(5706,512,4095,1,5,18,776,8619,0,0), +(5707,512,4095,1,5,17,776,8619,0,0), +(5708,512,4095,1,5,16,776,8619,0,0), +(5709,512,4095,1,5,15,776,8619,0,0), +(5710,512,4095,1,5,14,776,8619,0,0), +(5711,512,4095,1,5,13,776,8619,0,0), +(5712,512,4095,1,5,12,776,8619,0,0), +(5713,512,4095,1,5,11,776,8619,0,0), +(5714,512,4095,1,5,10,776,8619,0,0), +(5715,512,4095,1,5,9,776,8619,0,0), +(5716,512,4095,1,5,8,776,8619,0,0), +(5717,512,4095,1,5,7,776,8619,0,0), +(5718,512,4095,1,5,6,776,8619,0,0), +(5719,512,4095,1,5,5,776,8619,0,0), +(5720,512,4095,1,5,4,776,8619,0,0), +(5721,512,4095,1,5,3,776,8619,0,0), +(5722,512,4095,1,5,2,776,8619,0,0), +(5723,512,4095,1,5,1,776,8619,0,0), +(5724,512,4095,1,5,0,776,8619,0,0), +(5725,512,4095,1,5,21,631,7192,0,0), +(5726,512,4095,1,5,20,631,7192,0,0), +(5727,512,4095,1,5,19,631,7192,0,0), +(5728,512,4095,1,5,18,631,7192,0,0), +(5729,512,4095,1,5,17,631,7192,0,0), +(5730,512,4095,1,5,16,631,7192,0,0), +(5731,512,4095,1,5,15,631,7192,0,0), +(5732,512,4095,1,5,14,631,7192,0,0), +(5733,512,4095,1,5,13,631,7192,0,0), +(5734,512,4095,1,5,12,631,7192,0,0), +(5735,512,4095,1,5,11,631,7192,0,0), +(5736,512,4095,1,5,10,631,7192,0,0), +(5737,512,4095,1,5,9,631,7192,0,0), +(5738,512,4095,1,5,8,631,7192,0,0), +(5739,512,4095,1,5,7,631,7192,0,0), +(5740,512,4095,1,5,6,631,7192,0,0), +(5741,512,4095,1,5,5,631,7192,0,0), +(5742,512,4095,1,5,4,631,7192,0,0), +(5743,512,4095,1,5,3,631,7192,0,0), +(5744,512,4095,1,5,2,631,7192,0,0), +(5745,512,4095,1,5,1,631,7192,0,0), +(5746,512,4095,1,5,0,631,7192,0,0), +(5747,32,4095,0,5,0,801,9014,0,0), +(5748,32,4095,0,5,1,801,9014,0,0), +(5749,32,4095,0,5,2,801,9014,0,0), +(5750,32,4095,0,5,3,801,9014,0,0), +(5751,32,4095,0,5,4,801,9014,0,0), +(5752,32,4095,0,5,5,801,9014,0,0), +(5753,32,4095,0,5,6,801,9014,0,0), +(5754,32,4095,1,5,0,842,9477,0,0), +(5755,32,4095,1,5,1,842,9477,0,0), +(5756,32,4095,1,5,2,842,9477,0,0), +(5757,32,4095,1,5,3,842,9477,0,0), +(5758,32,4095,1,5,4,842,9477,0,0), +(5759,32,4095,1,5,0,655,7322,0,0), +(5760,32,4095,1,5,1,655,7322,0,0), +(5761,32,4095,1,5,2,655,7322,0,0), +(5762,32,4095,1,5,3,655,7322,0,0), +(5763,32,4095,1,5,4,655,7322,0,0), +(5764,32,4095,0,5,0,657,7328,0,0), +(5765,32,4095,0,5,1,657,7328,0,0), +(5766,32,4095,0,5,2,657,7328,0,0), +(5767,32,4095,0,5,3,657,7328,0,0), +(5768,32,4095,0,5,4,657,7328,0,0), +(5769,32,4095,0,5,5,657,7328,0,0), +(5770,32,4095,0,5,6,657,7328,0,0), +(5771,32,4095,0,5,0,653,7316,0,0), +(5772,32,4095,0,5,1,653,7316,0,0), +(5773,32,4095,0,5,2,653,7316,0,0), +(5774,32,4095,0,5,3,653,7316,0,0), +(5775,32,4095,0,5,4,653,7316,0,0), +(5776,32,4095,0,5,5,653,7316,0,0), +(5777,32,4095,0,5,6,653,7316,0,0), +(5785,32,4095,1,5,0,651,7309,0,0), +(5786,32,4095,1,5,1,651,7309,0,0), +(5787,32,4095,1,5,2,651,7309,0,0), +(5788,32,4095,1,5,3,651,7309,0,0), +(5789,32,4095,1,5,4,651,7309,0,0), +(5790,32,4095,1,5,0,659,7334,0,0), +(5791,32,4095,1,5,1,659,7334,0,0), +(5792,32,4095,1,5,2,659,7334,0,0), +(5793,32,4095,1,5,3,659,7334,0,0), +(5794,32,4095,1,5,4,659,7334,0,0), +(5795,32,4095,1,5,0,649,7300,0,0), +(5796,32,4095,1,5,1,649,7300,0,0), +(5797,32,4095,1,5,2,649,7300,0,0), +(5798,32,4095,1,5,3,649,7300,0,0), +(5799,32,4095,1,5,4,649,7300,0,0), +(5825,536870912,4063,1,2,0,846,9487,0,0), +(5826,536870912,4063,1,2,1,846,9487,0,0), +(5827,536870912,4063,1,2,2,846,9487,0,0), +(5828,536870912,4063,1,2,3,846,9487,0,0), +(5829,536870912,4063,1,2,4,846,9487,0,0), +(5830,536870912,4063,1,2,5,846,9487,0,0), +(5831,536870912,4063,1,2,6,846,9487,0,0), +(5832,536870912,4063,1,2,7,846,9487,0,0), +(5833,536870912,4063,1,2,8,846,9487,0,0), +(5834,536870912,4063,1,2,9,846,9487,0,0), +(5835,536870912,4063,0,2,0,845,9485,0,0), +(5836,536870912,4063,0,2,1,845,9485,0,0), +(5837,536870912,4063,0,2,2,845,9485,0,0), +(5838,536870912,4063,0,2,3,845,9485,0,0), +(5839,536870912,4063,0,2,4,845,9485,0,0), +(5840,536870912,4063,0,2,5,845,9485,0,0), +(5841,536870912,4063,0,2,6,845,9485,0,0), +(5842,536870912,4063,0,2,7,845,9485,0,0), +(5843,536870912,4063,0,2,8,845,9485,0,0), +(5844,536870912,4063,0,2,9,845,9485,0,0), +(5845,1,4095,1,5,0,510,4908,0,0), +(5846,1,4095,1,5,1,510,4908,0,0), +(5847,1,4095,1,5,2,510,4908,0,0), +(5848,1,4095,1,5,3,510,4908,0,0), +(5849,1,4095,1,5,4,510,4908,0,0), +(5850,1,4095,1,5,5,510,4908,0,0), +(5851,1,4095,1,5,6,510,4908,0,0), +(5852,1,4095,1,2,0,516,4963,0,0), +(5853,1,4095,1,2,1,516,4963,0,0), +(5854,1,4095,1,2,2,516,4963,0,0), +(5855,1,4095,1,2,3,516,4963,0,0), +(5856,1,4095,1,2,4,516,4963,0,0), +(5857,1,4095,1,2,5,516,4963,0,0), +(5858,1,4095,1,2,6,516,4963,0,0), +(5859,1,4095,1,2,7,516,4963,0,0), +(5860,1,4095,1,2,8,516,4963,0,0), +(5861,1,4095,1,2,9,516,4963,0,0), +(5862,1,4095,1,2,10,516,4963,0,0), +(5863,1,4095,1,2,11,516,4963,0,0), +(5864,1,4095,1,2,12,516,4963,0,0), +(5865,1,4095,1,2,13,516,4963,0,0), +(5866,1,4095,1,2,14,516,4963,0,0), +(5867,1,4095,1,2,15,516,4963,0,0), +(5868,1,4095,1,2,16,516,4963,0,0), +(5869,1,4095,1,2,17,516,4963,0,0), +(5870,1,4095,1,2,18,516,4963,0,0), +(5871,1,4095,1,2,19,516,4963,0,0), +(5872,1,4095,1,2,20,516,4963,0,0), +(5873,1,4095,1,2,21,516,4963,0,0), +(5874,1,4095,1,2,22,516,4963,0,0), +(5875,1,4095,1,2,23,516,4963,0,0), +(5876,1,4095,1,2,24,516,4963,0,0), +(5877,1,4095,1,2,25,516,4963,0,0), +(5878,1,4095,1,2,26,516,4963,0,0), +(5879,1,4095,1,2,27,516,4963,0,0), +(5880,1,4095,1,2,28,516,4963,0,0), +(5881,1,4095,1,2,29,516,4963,0,0), +(5882,4,4095,0,5,0,604,6817,0,0), +(5883,4,4095,0,5,1,604,6817,0,0), +(5884,4,4095,0,5,2,604,6817,0,0), +(5885,4,4095,0,5,3,604,6817,0,0), +(5886,4,4095,0,5,4,604,6817,0,0), +(5887,4,4095,0,5,5,604,6817,0,0), +(5888,4,4095,0,5,6,604,6817,0,0), +(5889,4,4095,0,5,7,604,6817,0,0), +(5890,4,4095,0,5,8,604,6817,0,0), +(5891,4,4095,0,5,9,604,6817,0,0), +(5892,4,4095,0,5,10,604,6817,0,0), +(5893,4,4095,0,5,0,600,6789,0,0), +(5894,4,4095,0,5,1,600,6789,0,0), +(5895,4,4095,0,5,2,600,6789,0,0), +(5896,4,4095,0,5,3,600,6789,0,0), +(5897,4,4095,0,5,4,600,6789,0,0), +(5898,4,4095,0,5,5,600,6789,0,0), +(5899,4,4095,0,5,6,600,6789,0,0), +(5900,4,4095,0,5,7,600,6789,0,0), +(5901,4,4095,0,5,8,600,6789,0,0), +(5902,4,4095,0,5,9,600,6789,0,0), +(5903,4,4095,0,5,10,600,6789,0,0), +(5904,4,4095,1,5,4,601,6797,0,0), +(5905,4,4095,1,5,0,605,6823,0,0), +(5906,4,4095,1,5,1,605,6823,0,0), +(5907,4,4095,1,5,2,605,6823,0,0), +(5908,4,4095,1,5,3,605,6823,0,0), +(5909,4,4095,1,5,5,605,6823,0,0), +(5910,8,4095,1,1,0,744,8130,0,0), +(5911,8,4095,1,1,1,744,8130,0,0), +(5912,8,4095,1,1,2,744,8130,0,0), +(5913,8,4095,1,1,3,744,8130,0,0), +(5914,8,4095,1,1,4,744,8130,0,0), +(5915,8,4095,1,1,5,744,8130,0,0), +(5916,8,4095,1,1,6,744,8130,0,0), +(5917,8,4095,1,1,7,744,8130,0,0), +(5918,8,4095,1,1,8,744,8130,0,0), +(5919,8,4095,1,1,9,744,8130,0,0), +(5920,8,4095,1,1,10,744,8130,0,0), +(5921,8,4095,1,1,11,744,8130,0,0), +(5922,8,4095,1,1,12,744,8130,0,0), +(5923,8,4095,1,1,13,744,8130,0,0), +(5924,8,4095,1,1,14,744,8130,0,0), +(5925,8,4095,1,1,15,744,8130,0,0), +(5926,8,4095,1,1,16,744,8130,0,0), +(5927,8,4095,1,1,17,744,8130,0,0), +(5928,8,4095,1,1,18,744,8130,0,0), +(5929,8,4095,1,1,19,744,8130,0,0), +(5930,8,4095,1,1,20,744,8130,0,0), +(5931,8,4095,1,1,21,744,8130,0,0), +(5932,8,4095,1,1,22,744,8130,0,0), +(5933,8,4095,1,1,23,744,8130,0,0), +(5934,8,4095,1,5,0,708,7845,0,0), +(5935,8,4095,1,5,1,708,7845,0,0), +(5936,8,4095,1,5,2,708,7845,0,0), +(5937,8,4095,1,5,3,708,7845,0,0), +(5938,8,4095,1,5,4,708,7845,0,0), +(5939,8,4095,1,5,5,708,7845,0,0), +(5940,8,4095,1,5,6,708,7845,0,0), +(5941,8,4095,1,5,7,708,7845,0,0), +(5942,8,4095,1,5,8,708,7845,0,0), +(5943,8,4095,1,5,9,708,7845,0,0), +(5944,8,4095,1,5,0,712,7861,0,0), +(5945,8,4095,1,5,1,712,7861,0,0), +(5946,8,4095,1,5,2,712,7861,0,0), +(5947,8,4095,1,5,3,712,7861,0,0), +(5948,8,4095,1,5,4,712,7861,0,0), +(5949,8,4095,1,5,5,712,7861,0,0), +(5950,8,4095,1,5,6,712,7861,0,0), +(5951,8,4095,1,5,7,712,7861,0,0), +(5952,8,4095,1,5,8,712,7861,0,0), +(5953,8,4095,1,5,9,712,7861,0,0), +(5954,8,4095,1,5,0,710,7853,0,0), +(5955,8,4095,1,5,1,710,7853,0,0), +(5956,8,4095,1,5,2,710,7853,0,0), +(5957,8,4095,1,5,3,710,7853,0,0), +(5958,8,4095,1,5,4,710,7853,0,0), +(5959,8,4095,1,5,5,710,7853,0,0), +(5960,8,4095,1,5,6,710,7853,0,0), +(5961,8,4095,1,5,7,710,7853,0,0), +(5962,8,4095,1,5,8,710,7853,0,0), +(5963,8,4095,1,5,9,710,7853,0,0), +(5964,8,4095,1,5,0,714,7868,0,0), +(5965,8,4095,1,5,1,714,7868,0,0), +(5966,8,4095,1,5,2,714,7868,0,0), +(5967,8,4095,1,5,3,714,7868,0,0), +(5968,8,4095,1,5,4,714,7868,0,0), +(5969,8,4095,1,5,5,714,7868,0,0), +(5970,8,4095,1,5,6,714,7868,0,0), +(5971,8,4095,1,5,7,714,7868,0,0), +(5972,8,4095,1,5,8,714,7868,0,0), +(5973,8,4095,1,5,9,714,7868,0,0), +(5974,8,4095,1,5,0,724,7963,0,0), +(5975,8,4095,1,5,1,724,7963,0,0), +(5976,8,4095,1,5,2,724,7963,0,0), +(5977,8,4095,1,5,3,724,7963,0,0), +(5978,8,4095,1,5,4,724,7963,0,0), +(5979,8,4095,1,5,5,724,7963,0,0), +(5980,8,4095,1,5,6,724,7963,0,0), +(5981,8,4095,1,5,7,724,7963,0,0), +(5982,8,4095,1,5,8,724,7963,0,0), +(5983,8,4095,1,5,9,724,7963,0,0), +(5984,8,4095,0,1,0,742,8129,0,0), +(5985,8,4095,0,1,1,742,8129,0,0), +(5986,8,4095,0,1,2,742,8129,0,0), +(5987,8,4095,0,1,3,742,8129,0,0), +(5988,8,4095,0,1,4,742,8129,0,0), +(5989,8,4095,0,1,5,742,8129,0,0), +(5990,8,4095,0,1,6,742,8129,0,0), +(5991,8,4095,0,1,7,742,8129,0,0), +(5992,8,4095,0,1,8,742,8129,0,0), +(5993,8,4095,0,1,9,742,8129,0,0), +(5994,8,4095,0,1,10,742,8129,0,0), +(5995,8,4095,0,1,11,742,8129,0,0), +(5996,8,4095,0,1,12,742,8129,0,0), +(5997,8,4095,0,1,13,742,8129,0,0), +(5998,8,4095,0,1,14,742,8129,0,0), +(5999,8,4095,0,1,15,742,8129,0,0), +(6000,8,4095,0,1,16,742,8129,0,0), +(6001,8,4095,0,1,17,742,8129,0,0), +(6002,8,4095,0,1,18,742,8129,0,0), +(6003,8,4095,0,1,19,742,8129,0,0), +(6004,8,4095,0,1,20,742,8129,0,0), +(6005,8,4095,0,1,21,742,8129,0,0), +(6006,8,4095,0,1,22,742,8129,0,0), +(6007,8,4095,0,1,23,742,8129,0,0), +(6008,8,4095,0,5,0,728,8018,0,0), +(6009,8,4095,0,5,1,728,8018,0,0), +(6010,8,4095,0,5,2,728,8018,0,0), +(6011,8,4095,0,5,3,728,8018,0,0), +(6012,8,4095,0,5,4,728,8018,0,0), +(6013,8,4095,0,5,5,728,8018,0,0), +(6014,2,4095,0,5,0,875,9808,0,0), +(6015,2,4095,0,5,1,875,9808,0,0), +(6016,2,4095,0,5,2,875,9808,0,0), +(6017,2,4095,0,5,3,875,9808,0,0), +(6018,2,4095,0,5,4,875,9808,0,0), +(6019,2,4095,0,5,5,875,9808,0,0), +(6020,2,4095,0,5,6,875,9808,0,0), +(6021,2,4095,0,5,7,875,9808,0,0), +(6022,2,4095,0,5,8,875,9808,0,0), +(6023,2,4095,0,5,9,875,9808,0,0), +(6024,2,4095,0,5,10,875,9808,0,0), +(6025,2,4095,0,1,0,826,9359,0,0), +(6026,2,4095,0,1,1,826,9359,0,0), +(6027,2,4095,0,1,2,826,9359,0,0), +(6028,2,4095,0,1,3,826,9359,0,0), +(6029,2,4095,0,1,4,826,9359,0,0), +(6030,2,4095,0,1,5,826,9359,0,0), +(6031,2,4095,0,1,6,826,9359,0,0), +(6032,2,4095,0,1,7,826,9359,0,0), +(6033,2,4095,0,1,8,826,9359,0,0), +(6034,2,4095,0,1,9,826,9359,0,0), +(6035,2,4095,0,1,10,826,9359,0,0), +(6036,2,4095,0,1,11,826,9359,0,0), +(6037,2,4095,0,1,12,826,9359,0,0), +(6038,2,4095,0,1,13,826,9359,0,0), +(6039,2,4095,0,1,14,826,9359,0,0), +(6040,2,4095,0,1,15,826,9359,0,0), +(6041,2,4095,0,1,16,826,9359,0,0), +(6042,2,4095,0,1,17,826,9359,0,0), +(6043,2,4095,0,1,18,826,9359,0,0), +(6044,2,4095,0,1,19,826,9359,0,0), +(6045,2,4095,0,1,20,826,9359,0,0), +(6046,2,4095,0,1,21,826,9359,0,0), +(6047,2,4095,0,1,22,826,9359,0,0), +(6048,2,4095,0,1,23,826,9359,0,0), +(6049,2,4095,0,1,24,826,9359,0,0), +(6050,2,4095,0,1,25,826,9359,0,0), +(6051,2,4095,0,1,26,826,9359,0,0), +(6052,2,4095,0,1,27,826,9359,0,0), +(6053,2,4095,0,1,28,826,9359,0,0), +(6054,2,4095,0,1,29,826,9359,0,0), +(6055,2,4095,0,1,30,826,9359,0,0), +(6056,2,4095,0,5,0,877,9825,0,0), +(6057,2,4095,0,5,1,877,9825,0,0), +(6058,2,4095,0,5,2,877,9825,0,0), +(6059,2,4095,0,5,3,877,9825,0,0), +(6060,2,4095,0,5,4,877,9825,0,0), +(6061,2,4095,0,5,5,877,9825,0,0), +(6062,2,4095,0,5,6,877,9825,0,0), +(6063,2,4095,0,5,7,877,9825,0,0), +(6064,2,4095,0,5,8,877,9825,0,0), +(6065,2,4095,0,5,9,877,9825,0,0), +(6066,2,4095,0,5,10,877,9825,0,0), +(6067,2,4095,0,1,0,827,9365,0,0), +(6068,2,4095,0,1,1,827,9365,0,0), +(6069,2,4095,0,1,2,827,9365,0,0), +(6070,2,4095,0,1,3,827,9365,0,0), +(6071,2,4095,0,1,4,827,9365,0,0), +(6072,2,4095,0,1,5,827,9365,0,0), +(6073,2,4095,0,1,6,827,9365,0,0), +(6074,2,4095,0,1,7,827,9365,0,0), +(6075,2,4095,0,1,8,827,9365,0,0), +(6076,2,4095,0,1,9,827,9365,0,0), +(6077,2,4095,0,1,10,827,9365,0,0), +(6078,2,4095,0,1,11,827,9365,0,0), +(6079,2,4095,0,1,12,827,9365,0,0), +(6080,2,4095,0,1,13,827,9365,0,0), +(6081,2,4095,0,1,14,827,9365,0,0), +(6082,2,4095,0,1,15,827,9365,0,0), +(6083,2,4095,0,1,16,827,9365,0,0), +(6084,2,4095,0,1,17,827,9365,0,0), +(6085,2,4095,0,1,18,827,9365,0,0), +(6086,2,4095,0,1,19,827,9365,0,0), +(6087,2,4095,0,1,20,827,9365,0,0), +(6088,2,4095,0,1,21,827,9365,0,0), +(6089,2,4095,0,1,22,827,9365,0,0), +(6090,2,4095,0,1,23,827,9365,0,0), +(6091,2,4095,0,1,24,827,9365,0,0), +(6092,2,4095,0,1,25,827,9365,0,0), +(6093,2,4095,0,1,26,827,9365,0,0), +(6094,2,4095,0,1,27,827,9365,0,0), +(6095,2,4095,0,1,28,827,9365,0,0), +(6096,2,4095,0,1,29,827,9365,0,0), +(6097,2,4095,0,1,30,827,9365,0,0), +(6098,2,4095,0,1,0,828,9369,0,0), +(6099,2,4095,0,1,1,828,9369,0,0), +(6100,2,4095,0,1,2,828,9369,0,0), +(6101,2,4095,0,1,3,828,9369,0,0), +(6102,2,4095,0,1,4,828,9369,0,0), +(6103,2,4095,0,1,5,828,9369,0,0), +(6104,2,4095,0,1,6,828,9369,0,0), +(6105,2,4095,0,1,7,828,9369,0,0), +(6106,2,4095,0,1,8,828,9369,0,0), +(6107,2,4095,0,1,9,828,9369,0,0), +(6108,2,4095,0,1,10,828,9369,0,0), +(6109,2,4095,0,1,11,828,9369,0,0), +(6110,2,4095,0,1,12,828,9369,0,0), +(6111,2,4095,0,1,13,828,9369,0,0), +(6112,2,4095,0,1,14,828,9369,0,0), +(6113,2,4095,0,1,15,828,9369,0,0), +(6114,2,4095,0,1,16,828,9369,0,0), +(6115,2,4095,0,1,17,828,9369,0,0), +(6116,2,4095,0,1,18,828,9369,0,0), +(6117,2,4095,0,1,19,828,9369,0,0), +(6118,2,4095,0,1,20,828,9369,0,0), +(6119,2,4095,0,1,21,828,9369,0,0), +(6120,2,4095,0,1,22,828,9369,0,0), +(6121,2,4095,0,1,23,828,9369,0,0), +(6122,2,4095,0,1,24,828,9369,0,0), +(6123,2,4095,0,1,25,828,9369,0,0), +(6124,2,4095,0,1,26,828,9369,0,0), +(6125,2,4095,0,1,27,828,9369,0,0), +(6126,2,4095,0,1,28,828,9369,0,0), +(6127,2,4095,0,1,29,828,9369,0,0), +(6128,2,4095,0,1,30,828,9369,0,0), +(6129,2,4095,1,1,0,830,9377,0,0), +(6130,2,4095,1,1,1,830,9377,0,0), +(6131,2,4095,1,1,2,830,9377,0,0), +(6132,2,4095,1,1,3,830,9377,0,0), +(6133,2,4095,1,1,4,830,9377,0,0), +(6134,2,4095,1,1,5,830,9377,0,0), +(6135,2,4095,1,1,6,830,9377,0,0), +(6136,2,4095,1,1,7,830,9377,0,0), +(6137,2,4095,1,1,8,830,9377,0,0), +(6138,2,4095,1,1,9,830,9377,0,0), +(6139,2,4095,1,1,10,830,9377,0,0), +(6140,2,4095,1,1,11,830,9377,0,0), +(6141,2,4095,1,1,12,830,9377,0,0), +(6142,2,4095,1,1,13,830,9377,0,0), +(6143,2,4095,1,1,14,830,9377,0,0), +(6144,2,4095,1,1,15,830,9377,0,0), +(6145,2,4095,1,1,16,830,9377,0,0), +(6146,2,4095,1,1,17,830,9377,0,0), +(6147,2,4095,1,1,18,830,9377,0,0), +(6148,2,4095,1,1,19,830,9377,0,0), +(6149,2,4095,1,1,20,830,9377,0,0), +(6150,2,4095,1,1,21,830,9377,0,0), +(6151,2,4095,1,1,22,830,9377,0,0), +(6152,2,4095,1,1,23,830,9377,0,0), +(6153,2,4095,1,1,24,830,9377,0,0), +(6154,2,4095,1,1,25,830,9377,0,0), +(6155,2,4095,1,1,26,830,9377,0,0), +(6156,2,4095,1,1,27,830,9377,0,0), +(6157,2,4095,1,1,28,830,9377,0,0), +(6158,2,4095,1,1,29,830,9377,0,0), +(6159,2,4095,1,1,30,830,9377,0,0), +(6160,2,4095,1,1,31,830,9377,0,0), +(6161,2,4095,1,1,0,831,9382,0,0), +(6162,2,4095,1,1,1,831,9382,0,0), +(6163,2,4095,1,1,2,831,9382,0,0), +(6164,2,4095,1,1,3,831,9382,0,0), +(6165,2,4095,1,1,4,831,9382,0,0), +(6166,2,4095,1,1,5,831,9382,0,0), +(6167,2,4095,1,1,6,831,9382,0,0), +(6168,2,4095,1,1,7,831,9382,0,0), +(6169,2,4095,1,1,8,831,9382,0,0), +(6170,2,4095,1,1,9,831,9382,0,0), +(6171,2,4095,1,1,10,831,9382,0,0), +(6172,2,4095,1,1,11,831,9382,0,0), +(6173,2,4095,1,1,12,831,9382,0,0), +(6174,2,4095,1,1,13,831,9382,0,0), +(6175,2,4095,1,1,14,831,9382,0,0), +(6176,2,4095,1,1,15,831,9382,0,0), +(6177,2,4095,1,1,16,831,9382,0,0), +(6178,2,4095,1,1,17,831,9382,0,0), +(6179,2,4095,1,1,18,831,9382,0,0), +(6180,2,4095,1,1,19,831,9382,0,0), +(6181,2,4095,1,1,20,831,9382,0,0), +(6182,2,4095,1,1,21,831,9382,0,0), +(6183,2,4095,1,1,22,831,9382,0,0), +(6184,2,4095,1,1,23,831,9382,0,0), +(6185,2,4095,1,1,24,831,9382,0,0), +(6186,2,4095,1,1,25,831,9382,0,0), +(6187,2,4095,1,1,26,831,9382,0,0), +(6188,2,4095,1,1,27,831,9382,0,0), +(6189,2,4095,1,1,28,831,9382,0,0), +(6190,2,4095,1,1,29,831,9382,0,0), +(6191,2,4095,1,1,30,831,9382,0,0), +(6192,2,4095,1,1,31,831,9382,0,0), +(6193,2,4095,1,1,0,832,9390,0,0), +(6194,2,4095,1,1,1,832,9390,0,0), +(6195,2,4095,1,1,2,832,9390,0,0), +(6196,2,4095,1,1,3,832,9390,0,0), +(6197,2,4095,1,1,4,832,9390,0,0), +(6198,2,4095,1,1,5,832,9390,0,0), +(6199,2,4095,1,1,6,832,9390,0,0), +(6200,2,4095,1,1,7,832,9390,0,0), +(6201,2,4095,1,1,8,832,9390,0,0), +(6202,2,4095,1,1,9,832,9390,0,0), +(6203,2,4095,1,1,10,832,9390,0,0), +(6204,2,4095,1,1,11,832,9390,0,0), +(6205,2,4095,1,1,12,832,9390,0,0), +(6206,2,4095,1,1,13,832,9390,0,0), +(6207,2,4095,1,1,14,832,9390,0,0), +(6208,2,4095,1,1,15,832,9390,0,0), +(6209,2,4095,1,1,16,832,9390,0,0), +(6210,2,4095,1,1,17,832,9390,0,0), +(6211,2,4095,1,1,18,832,9390,0,0), +(6212,2,4095,1,1,19,832,9390,0,0), +(6213,2,4095,1,1,20,832,9390,0,0), +(6214,2,4095,1,1,21,832,9390,0,0), +(6215,2,4095,1,1,22,832,9390,0,0), +(6216,2,4095,1,1,23,832,9390,0,0), +(6217,2,4095,1,1,24,832,9390,0,0), +(6218,2,4095,1,1,25,832,9390,0,0), +(6219,2,4095,1,1,26,832,9390,0,0), +(6220,2,4095,1,1,27,832,9390,0,0), +(6221,2,4095,1,1,28,832,9390,0,0), +(6222,2,4095,1,1,29,832,9390,0,0), +(6223,2,4095,1,1,30,832,9390,0,0), +(6224,2,4095,1,1,31,832,9390,0,0), +(6225,2,4095,1,5,0,847,9491,0,0), +(6226,2,4095,1,5,1,847,9491,0,0), +(6227,2,4095,1,5,2,847,9491,0,0), +(6228,2,4095,1,5,3,847,9491,0,0), +(6229,2,4095,1,5,4,847,9491,0,0), +(6230,2,4095,1,5,5,847,9491,0,0), +(6231,2,4095,1,5,6,847,9491,0,0), +(6232,16,4095,1,5,0,559,6275,0,0), +(6233,16,4095,1,5,1,559,6275,0,0), +(6234,16,4095,1,5,4,559,6275,0,0), +(6235,16,4095,1,5,5,559,6275,0,0), +(6236,16,4095,1,5,6,559,6275,0,0), +(6237,16,4095,0,5,0,563,6287,0,0), +(6238,16,4095,0,5,1,563,6287,0,0), +(6239,16,4095,0,5,8,563,6287,0,0), +(6240,16,4095,0,5,9,563,6287,0,0), +(6241,16,4095,0,5,10,563,6287,0,0), +(6242,16,4095,0,5,11,563,6287,0,0), +(6243,16,4095,0,5,12,563,6287,0,0), +(6244,16,4095,0,5,13,563,6287,0,0), +(6245,16,4095,0,5,16,563,6287,0,0), +(6246,32,4095,0,1,0,663,7349,0,0), +(6247,32,4095,0,1,1,663,7349,0,0), +(6248,32,4095,0,1,2,663,7349,0,0), +(6249,32,4095,0,1,3,663,7349,0,0), +(6250,32,4095,0,1,4,663,7349,0,0), +(6251,32,4095,0,1,5,663,7349,0,0), +(6252,32,4095,0,1,6,663,7349,0,0), +(6253,32,4095,0,1,7,663,7349,0,0), +(6254,32,4095,0,1,8,663,7349,0,0), +(6255,32,4095,0,1,9,663,7349,0,0), +(6256,32,4095,0,1,10,663,7349,0,0), +(6257,32,4095,0,1,11,663,7349,0,0), +(6258,32,4095,0,1,12,663,7349,0,0), +(6259,32,4095,0,1,13,663,7349,0,0), +(6260,32,4095,0,1,14,663,7349,0,0), +(6261,32,4095,0,1,15,663,7349,0,0), +(6262,32,4095,0,1,16,663,7349,0,0), +(6263,32,4095,0,1,17,663,7349,0,0), +(6264,32,4095,0,1,18,663,7349,0,0), +(6265,32,4095,0,1,19,663,7349,0,0), +(6266,32,4095,0,1,20,663,7349,0,0), +(6267,32,4095,0,1,21,663,7349,0,0), +(6268,32,4095,0,1,22,663,7349,0,0), +(6269,32,4095,0,1,23,663,7349,0,0), +(6270,32,4095,0,1,24,663,7349,0,0), +(6271,32,4095,0,1,25,663,7349,0,0), +(6272,32,4095,0,1,26,663,7349,0,0), +(6273,32,4095,0,1,27,663,7349,0,0), +(6274,32,4095,0,1,28,663,7349,0,0), +(6275,32,4095,0,1,0,667,7373,0,0), +(6276,32,4095,0,1,1,667,7373,0,0), +(6277,32,4095,0,1,2,667,7373,0,0), +(6278,32,4095,0,1,3,667,7373,0,0), +(6279,32,4095,0,1,4,667,7373,0,0), +(6280,32,4095,0,1,5,667,7373,0,0), +(6281,32,4095,0,1,6,667,7373,0,0), +(6282,32,4095,0,1,7,667,7373,0,0), +(6283,32,4095,0,1,8,667,7373,0,0), +(6284,32,4095,0,1,9,667,7373,0,0), +(6285,32,4095,0,1,10,667,7373,0,0), +(6286,32,4095,0,1,11,667,7373,0,0), +(6287,32,4095,0,1,12,667,7373,0,0), +(6288,32,4095,0,1,13,667,7373,0,0), +(6289,32,4095,0,1,14,667,7373,0,0), +(6290,32,4095,0,1,15,667,7373,0,0), +(6291,32,4095,0,1,16,667,7373,0,0), +(6292,32,4095,0,1,17,667,7373,0,0), +(6293,32,4095,0,1,18,667,7373,0,0), +(6294,32,4095,0,1,19,667,7373,0,0), +(6295,32,4095,0,1,20,667,7373,0,0), +(6296,32,4095,0,1,21,667,7373,0,0), +(6297,32,4095,0,1,22,667,7373,0,0), +(6298,32,4095,0,1,23,667,7373,0,0), +(6299,32,4095,0,1,24,667,7373,0,0), +(6300,32,4095,0,1,25,667,7373,0,0), +(6301,32,4095,0,1,26,667,7373,0,0), +(6302,32,4095,0,1,27,667,7373,0,0), +(6303,32,4095,0,1,28,667,7373,0,0), +(6304,32,4095,1,1,0,666,7369,0,0), +(6305,32,4095,1,1,1,666,7369,0,0), +(6306,32,4095,1,1,2,666,7369,0,0), +(6307,32,4095,1,1,3,666,7369,0,0), +(6308,32,4095,1,1,4,666,7369,0,0), +(6309,32,4095,1,1,5,666,7369,0,0), +(6310,32,4095,1,1,6,666,7369,0,0), +(6311,32,4095,1,1,7,666,7369,0,0), +(6312,32,4095,1,1,8,666,7369,0,0), +(6313,32,4095,1,1,9,666,7369,0,0), +(6314,32,4095,1,1,10,666,7369,0,0), +(6315,32,4095,1,1,11,666,7369,0,0), +(6316,32,4095,1,1,12,666,7369,0,0), +(6317,32,4095,1,1,13,666,7369,0,0), +(6318,32,4095,1,1,0,662,7353,0,0), +(6319,32,4095,1,1,1,662,7353,0,0), +(6320,32,4095,1,1,2,662,7353,0,0), +(6321,32,4095,1,1,3,662,7353,0,0), +(6322,32,4095,1,1,4,662,7353,0,0), +(6323,32,4095,1,1,5,662,7353,0,0), +(6324,32,4095,1,1,6,662,7353,0,0), +(6325,32,4095,1,1,7,662,7353,0,0), +(6326,32,4095,1,1,8,662,7353,0,0), +(6327,32,4095,1,1,9,662,7353,0,0), +(6328,32,4095,1,1,10,662,7353,0,0), +(6329,32,4095,1,1,11,662,7353,0,0), +(6330,32,4095,1,1,12,662,7353,0,0), +(6331,32,4095,1,1,13,662,7353,0,0), +(6332,128,4095,0,5,0,769,8548,0,0), +(6333,128,4095,0,5,1,769,8548,0,0), +(6334,128,4095,0,5,2,769,8548,0,0), +(6335,128,4095,0,5,3,769,8548,0,0), +(6336,128,4095,0,5,4,769,8548,0,0), +(6337,128,4095,0,5,5,769,8548,0,0), +(6338,128,4095,0,5,6,769,8548,0,0), +(6339,128,4095,0,5,7,769,8548,0,0), +(6340,128,4095,0,5,8,769,8548,0,0), +(6341,128,4095,0,5,9,769,8548,0,0), +(6342,128,4095,0,5,10,769,8548,0,0), +(6343,128,4095,0,5,0,761,8480,0,0), +(6344,128,4095,0,5,1,761,8480,0,0), +(6345,128,4095,0,5,2,761,8480,0,0), +(6346,128,4095,0,5,3,761,8480,0,0), +(6347,128,4095,0,5,4,761,8480,0,0), +(6348,128,4095,0,5,5,761,8480,0,0), +(6349,128,4095,0,5,6,761,8480,0,0), +(6350,128,4095,0,5,7,761,8480,0,0), +(6351,128,4095,0,5,8,761,8480,0,0), +(6352,128,4095,0,5,9,761,8480,0,0), +(6353,128,4095,0,5,10,761,8480,0,0), +(6354,128,4095,0,5,0,764,8495,0,0), +(6355,128,4095,0,5,1,764,8495,0,0), +(6356,128,4095,0,5,2,764,8495,0,0), +(6357,128,4095,0,5,3,764,8495,0,0), +(6358,128,4095,0,5,4,764,8495,0,0), +(6359,128,4095,0,5,5,764,8495,0,0), +(6360,128,4095,0,5,6,764,8495,0,0), +(6361,128,4095,0,5,7,764,8495,0,0), +(6362,128,4095,0,5,8,764,8495,0,0), +(6363,128,4095,0,5,9,764,8495,0,0), +(6364,128,4095,0,5,10,764,8495,0,0), +(6365,128,4095,1,5,0,771,8556,0,0), +(6366,128,4095,1,5,1,771,8556,0,0), +(6367,128,4095,1,5,2,771,8556,0,0), +(6368,128,4095,1,5,3,771,8556,0,0), +(6369,128,4095,1,5,4,771,8556,0,0), +(6370,128,4095,1,5,5,771,8556,0,0), +(6371,128,4095,1,5,0,773,8552,0,0), +(6372,128,4095,1,5,1,773,8552,0,0), +(6373,128,4095,1,5,2,773,8552,0,0), +(6374,128,4095,1,5,3,773,8552,0,0), +(6375,128,4095,1,5,4,773,8552,0,0), +(6376,128,4095,1,5,5,773,8552,0,0), +(6377,1024,4095,0,5,0,703,7801,0,0), +(6378,1024,4095,0,5,1,703,7801,0,0), +(6379,1024,4095,0,5,2,703,7801,0,0), +(6380,1024,4095,0,5,3,703,7801,0,0), +(6381,1024,4095,0,5,4,703,7801,0,0), +(6382,1024,4095,0,5,5,703,7801,0,0), +(6383,1024,4095,0,5,6,703,7801,0,0), +(6384,1024,4095,0,5,7,703,7801,0,0), +(6385,1024,4095,0,5,0,705,7806,0,0), +(6386,1024,4095,0,5,1,705,7806,0,0), +(6387,1024,4095,0,5,2,705,7806,0,0), +(6388,1024,4095,0,5,3,705,7806,0,0), +(6389,1024,4095,0,5,4,705,7806,0,0), +(6390,1024,4095,0,5,5,705,7806,0,0), +(6391,1024,4095,0,5,6,705,7806,0,0), +(6392,1024,4095,0,5,7,705,7806,0,0), +(6393,1024,4095,1,5,0,699,7791,0,0), +(6394,1024,4095,1,5,1,699,7791,0,0), +(6395,1024,4095,1,5,2,699,7791,0,0), +(6396,1024,4095,1,5,3,699,7791,0,0), +(6397,1024,4095,1,5,4,699,7791,0,0), +(6398,1024,4095,1,5,5,699,7791,0,0), +(6399,1024,4095,1,5,6,699,7791,0,0), +(6400,1024,4095,1,5,7,699,7791,0,0), +(6401,1024,4095,1,5,0,701,7796,0,0), +(6402,1024,4095,1,5,1,701,7796,0,0), +(6403,1024,4095,1,5,2,701,7796,0,0), +(6404,1024,4095,1,5,3,701,7796,0,0), +(6405,1024,4095,1,5,4,701,7796,0,0), +(6406,1024,4095,1,5,5,701,7796,0,0), +(6407,1024,4095,1,5,6,701,7796,0,0), +(6408,1024,4095,1,5,7,701,7796,0,0), +(6409,134217728,4095,1,5,0,864,9629,0,0), +(6410,134217728,4095,1,5,1,864,9629,0,0), +(6411,134217728,4095,1,5,2,864,9629,0,0), +(6412,134217728,4095,1,5,3,864,9629,0,0), +(6413,134217728,4095,1,5,4,864,9629,0,0), +(6414,17179869184,4063,0,2,0,852,9542,0,0), +(6415,17179869184,4063,0,2,1,852,9550,0,0), +(6416,17179869184,4063,0,2,2,852,9552,0,0), +(6417,17179869184,4063,0,2,3,852,9546,0,0), +(6418,17179869184,4063,0,2,4,852,9548,0,0), +(6419,17179869184,4063,0,2,5,852,9553,0,0), +(6420,17179869184,4063,1,2,0,853,9560,0,0), +(6421,17179869184,4063,1,2,1,853,9562,0,0), +(6422,17179869184,4063,1,2,2,853,9564,0,0), +(6423,17179869184,4063,1,2,3,853,9566,0,0), +(6424,17179869184,4063,1,2,4,853,9568,0,0), +(6425,17179869184,4063,1,2,5,853,9571,0,0), +(6426,67108864,4063,0,2,0,858,9589,0,0), +(6427,67108864,4063,0,2,1,858,9589,0,0), +(6428,67108864,4063,0,2,2,858,9589,0,0), +(6429,67108864,4063,0,2,3,858,9589,0,0), +(6430,67108864,4063,0,2,4,858,9589,0,0), +(6431,67108864,4063,0,2,5,858,9589,0,0), +(6432,67108864,4063,1,2,0,859,9591,0,0), +(6433,67108864,4063,1,2,1,859,9591,0,0), +(6434,67108864,4063,1,2,2,859,9591,0,0), +(6435,67108864,4063,1,2,3,859,9591,0,0), +(6436,67108864,4063,1,2,4,859,9591,0,0), +(6437,67108864,4063,1,2,5,859,9591,0,0), +(6440,8,1024,0,4,0,565,6623,0,0), +(6441,8,1024,0,4,1,565,6623,0,0), +(6442,8,1024,0,4,2,565,6623,0,0), +(6443,8,1024,0,4,3,565,6515,0,0), +(6444,8,1024,0,4,4,565,6516,0,0), +(6445,8,1024,0,4,5,565,6515,0,0), +(6446,8,1024,0,4,6,565,6514,0,0), +(6447,8,1024,0,4,7,565,6517,0,0), +(6448,8,1024,1,4,0,566,6624,0,0), +(6449,8,1024,1,4,1,566,6624,0,0), +(6450,8,1024,1,4,2,566,6624,0,0), +(6451,8,1024,1,4,3,566,6520,0,0), +(6452,8,1024,1,4,4,566,6521,0,0), +(6453,8,1024,1,4,5,566,6520,0,0), +(6454,8,1024,1,4,6,566,6519,0,0), +(6455,8,1024,1,4,7,566,6522,0,0), +(6456,32,1024,0,1,0,893,9944,0,0), +(6457,32,1024,0,1,1,893,9944,0,0), +(6458,32,1024,0,1,2,893,9944,0,0), +(6459,32,1024,0,1,3,893,9945,0,0), +(6460,32,1024,0,1,4,893,9945,0,0), +(6461,32,1024,0,1,5,893,9945,0,0), +(6462,32,1024,0,1,6,893,9947,0,0), +(6463,32,1024,0,1,7,893,9947,0,0), +(6464,32,1024,0,1,8,893,9947,0,0), +(6465,32,1024,0,1,9,893,9946,0,0), +(6466,32,1024,0,1,10,893,9946,0,0), +(6467,32,1024,0,1,11,893,9946,0,0), +(6468,32,1024,0,1,12,893,9945,0,0), +(6469,32,1024,0,1,13,893,9945,0,0), +(6470,32,1024,0,1,14,893,9945,0,0), +(6471,32,1024,0,1,15,893,9946,0,0), +(6472,32,1024,0,1,16,893,9946,0,0), +(6473,32,1024,0,1,17,893,9946,0,0), +(6474,32,1024,0,1,18,893,9948,0,0), +(6475,32,1024,1,1,0,894,9950,0,0), +(6476,32,1024,1,1,1,894,9950,0,0), +(6477,32,1024,1,1,2,894,9951,0,0), +(6478,32,1024,1,1,3,894,9951,0,0), +(6479,32,1024,1,1,4,894,9953,0,0), +(6480,32,1024,1,1,5,894,9953,0,0), +(6481,32,1024,1,1,6,894,9952,0,0), +(6482,32,1024,1,1,7,894,9952,0,0), +(6483,32,1024,1,1,8,894,9952,0,0), +(6484,32,1024,1,1,9,894,9952,0,0), +(6485,32,1024,1,1,10,894,9954,0,0), +(6486,128,1024,0,4,0,895,9956,0,0), +(6487,128,1024,0,4,1,895,9959,0,0), +(6488,128,1024,0,4,2,895,9959,0,0), +(6489,128,1024,0,4,3,895,9958,0,0), +(6490,128,1024,0,4,4,895,9957,0,0), +(6491,128,1024,0,4,5,895,9957,0,0), +(6492,128,1024,0,4,6,895,9957,0,0), +(6493,128,1024,0,4,7,895,9957,0,0), +(6494,128,1024,0,4,8,895,9960,0,0), +(6495,128,1024,0,4,9,895,9960,0,0), +(6496,128,1024,0,4,10,895,9960,0,0), +(6497,128,1024,0,4,11,895,9959,0,0), +(6498,128,1024,1,4,0,896,9962,0,0), +(6499,128,1024,1,4,1,896,9965,0,0), +(6500,128,1024,1,4,2,896,9965,0,0), +(6501,128,1024,1,4,3,896,9964,0,0), +(6502,128,1024,1,4,4,896,9963,0,0), +(6503,128,1024,1,4,5,896,9963,0,0), +(6504,128,1024,1,4,6,896,9963,0,0), +(6505,128,1024,1,4,7,896,9963,0,0), +(6506,128,1024,1,4,8,896,9966,0,0), +(6507,128,1024,1,4,9,896,9966,0,0), +(6508,128,1024,1,4,10,896,9966,0,0), +(6509,128,1024,1,4,11,896,9965,0,0), +(6510,2097152,1024,0,4,0,626,7158,0,0), +(6511,2097152,1024,0,4,1,626,7159,0,0), +(6512,2097152,1024,0,4,2,626,7160,0,0), +(6513,2097152,1024,0,4,3,626,7161,0,0), +(6514,2097152,1024,0,4,4,626,7157,0,0), +(6515,2097152,1024,1,4,0,627,7164,0,0), +(6516,2097152,1024,1,4,1,627,7165,0,0), +(6517,2097152,1024,1,4,2,627,7166,0,0), +(6518,2097152,1024,1,4,3,627,7167,0,0), +(6519,2097152,1024,1,4,4,627,7163,0,0), +(6520,134217728,1024,0,1,0,897,9968,0,0), +(6521,134217728,1024,0,1,1,897,9969,0,0), +(6522,134217728,1024,0,1,2,897,9970,0,0), +(6523,134217728,1024,0,1,3,897,9971,0,0), +(6524,134217728,1024,1,1,0,898,9973,0,0), +(6525,134217728,1024,1,1,1,898,9974,0,0), +(6526,134217728,1024,1,1,2,898,9975,0,0), +(6527,134217728,1024,1,1,3,898,9976,0,0), +(6528,1073741824,1024,0,4,0,899,9980,0,0), +(6529,1073741824,1024,0,4,1,899,9979,0,0), +(6530,1073741824,1024,0,4,2,899,9979,0,0), +(6531,1073741824,1024,0,4,3,899,9978,0,0), +(6532,1073741824,1024,0,4,4,899,9981,0,0), +(6533,1073741824,1024,0,4,5,899,9979,0,0), +(6534,1073741824,1024,1,4,0,900,9984,0,0), +(6535,1073741824,1024,1,4,1,900,9985,0,0), +(6536,1073741824,1024,1,4,2,900,9984,0,0), +(6537,1073741824,1024,1,4,3,900,9983,0,0), +(6538,1073741824,1024,1,4,4,900,9983,0,0), +(6539,1073741824,1024,1,4,5,900,9986,0,0), +(6540,2147483648,1024,0,4,0,901,9990,0,0), +(6541,2147483648,1024,0,4,1,901,9988,0,0), +(6542,2147483648,1024,0,4,2,901,9991,0,0), +(6543,2147483648,1024,0,4,3,901,9989,0,0), +(6544,2147483648,1024,0,4,4,901,9988,0,0), +(6545,2147483648,1024,0,4,5,901,9988,0,0), +(6546,2147483648,1024,0,4,6,901,9989,0,0), +(6547,2147483648,1024,1,4,0,902,9995,0,0), +(6548,2147483648,1024,1,4,1,902,9993,0,0), +(6549,2147483648,1024,1,4,2,902,9996,0,0), +(6550,2147483648,1024,1,4,3,902,9994,0,0), +(6551,2147483648,1024,1,4,4,902,9993,0,0), +(6552,2147483648,1024,1,4,5,902,9993,0,0), +(6553,2147483648,1024,1,4,6,902,9994,0,0), +(6554,8,1024,0,4,0,625,7154,0,0), +(6555,8,1024,0,4,1,625,7154,0,0), +(6556,8,1024,0,4,2,625,7154,0,0), +(6557,8,1024,0,4,3,625,7153,0,0), +(6558,8,1024,0,4,4,625,7155,0,0), +(6559,8,1024,0,4,5,625,7153,0,0), +(6560,8,1024,0,4,6,625,7151,0,0), +(6561,8,1024,0,4,7,625,7152,0,0), +(6562,8,1024,1,4,0,624,7148,0,0), +(6563,8,1024,1,4,1,624,7148,0,0), +(6564,8,1024,1,4,2,624,7148,0,0), +(6565,8,1024,1,4,3,624,7147,0,0), +(6566,8,1024,1,4,4,624,7149,0,0), +(6567,8,1024,1,4,5,624,7147,0,0), +(6568,8,1024,1,4,6,624,7145,0,0), +(6569,8,1024,1,4,7,624,7146,0,0), +(6570,32,1024,0,1,0,903,9998,0,0), +(6571,32,1024,0,1,1,903,9998,0,0), +(6572,32,1024,0,1,2,903,9998,0,0), +(6573,32,1024,0,1,3,903,9998,0,0), +(6574,32,1024,0,1,4,903,9998,0,0), +(6575,32,1024,0,1,5,903,9998,0,0), +(6576,32,1024,0,1,6,903,10001,0,0), +(6577,32,1024,0,1,7,903,10001,0,0), +(6578,32,1024,0,1,8,903,10001,0,0), +(6579,32,1024,0,1,9,903,10002,0,0), +(6580,32,1024,0,1,10,903,10002,0,0), +(6581,32,1024,0,1,11,903,10002,0,0), +(6582,32,1024,0,1,12,903,9999,0,0), +(6583,32,1024,0,1,13,903,9999,0,0), +(6584,32,1024,0,1,14,903,9999,0,0), +(6585,32,1024,0,1,15,903,10000,0,0), +(6586,32,1024,0,1,16,903,10000,0,0), +(6587,32,1024,0,1,17,903,10000,0,0), +(6588,32,1024,0,1,18,903,9999,0,0), +(6589,32,1024,1,1,0,904,10004,0,0), +(6590,32,1024,1,1,1,904,10004,0,0), +(6591,32,1024,1,1,2,904,10004,0,0), +(6592,32,1024,1,1,3,904,10004,0,0), +(6593,32,1024,1,1,4,904,10007,0,0), +(6594,32,1024,1,1,5,904,10007,0,0), +(6595,32,1024,1,1,6,904,10008,0,0), +(6596,32,1024,1,1,7,904,10008,0,0), +(6597,32,1024,1,1,8,904,10006,0,0), +(6598,32,1024,1,1,9,904,10006,0,0), +(6599,32,1024,1,1,10,904,10005,0,0), +(6600,128,1024,0,4,0,905,10010,0,0), +(6601,128,1024,0,4,1,905,10013,0,0), +(6602,128,1024,0,4,2,905,10013,0,0), +(6603,128,1024,0,4,3,905,10012,0,0), +(6604,128,1024,0,4,4,905,10011,0,0), +(6605,128,1024,0,4,5,905,10011,0,0), +(6606,128,1024,0,4,6,905,10011,0,0), +(6607,128,1024,0,4,7,905,10011,0,0), +(6608,128,1024,0,4,8,905,10014,0,0), +(6609,128,1024,0,4,9,905,10014,0,0), +(6610,128,1024,0,4,10,905,10014,0,0), +(6611,128,1024,0,4,11,905,10013,0,0), +(6612,128,1024,1,4,0,906,10016,0,0), +(6613,128,1024,1,4,1,906,10019,0,0), +(6614,128,1024,1,4,2,906,10019,0,0), +(6615,128,1024,1,4,3,906,10018,0,0), +(6616,128,1024,1,4,4,906,10017,0,0), +(6617,128,1024,1,4,5,906,10017,0,0), +(6618,128,1024,1,4,6,906,10017,0,0), +(6619,128,1024,1,4,7,906,10017,0,0), +(6620,128,1024,1,4,8,906,10020,0,0), +(6621,128,1024,1,4,9,906,10020,0,0), +(6622,128,1024,1,4,10,906,10020,0,0), +(6623,128,1024,1,4,11,906,10019,0,0), +(6624,2097152,1024,0,4,0,628,7176,0,0), +(6625,2097152,1024,0,4,1,628,7177,0,0), +(6626,2097152,1024,0,4,2,628,7179,0,0), +(6627,2097152,1024,0,4,3,628,7178,0,0), +(6628,2097152,1024,0,4,4,628,7175,0,0), +(6629,2097152,1024,1,4,0,629,7170,0,0), +(6630,2097152,1024,1,4,1,629,7171,0,0), +(6631,2097152,1024,1,4,2,629,7173,0,0), +(6632,2097152,1024,1,4,3,629,7172,0,0), +(6633,2097152,1024,1,4,4,629,7169,0,0), +(6634,134217728,1024,0,1,0,907,10024,0,0), +(6635,134217728,1024,0,1,1,907,10023,0,0), +(6636,134217728,1024,0,1,2,907,10025,0,0), +(6637,134217728,1024,0,1,3,907,10022,0,0), +(6638,134217728,1024,1,1,0,908,10029,0,0), +(6639,134217728,1024,1,1,1,908,10028,0,0), +(6640,134217728,1024,1,1,2,908,10030,0,0), +(6641,134217728,1024,1,1,3,908,10027,0,0), +(6642,1073741824,1024,0,4,0,909,10032,0,0), +(6643,1073741824,1024,0,4,1,909,10034,0,0), +(6644,1073741824,1024,0,4,2,909,10034,0,0), +(6645,1073741824,1024,0,4,3,909,10035,0,0), +(6646,1073741824,1024,0,4,4,909,10033,0,0), +(6647,1073741824,1024,0,4,5,909,10034,0,0), +(6648,1073741824,1024,1,4,0,910,10039,0,0), +(6649,1073741824,1024,1,4,1,910,10037,0,0), +(6650,1073741824,1024,1,4,2,910,10039,0,0), +(6651,1073741824,1024,1,4,3,910,10040,0,0), +(6652,1073741824,1024,1,4,4,910,10040,0,0), +(6653,1073741824,1024,1,4,5,910,10038,0,0), +(6654,2147483648,1024,0,4,0,911,10043,0,0), +(6655,2147483648,1024,0,4,1,911,10045,0,0), +(6656,2147483648,1024,0,4,2,911,10042,0,0), +(6657,2147483648,1024,0,4,3,911,10044,0,0), +(6658,2147483648,1024,0,4,4,911,10045,0,0), +(6659,2147483648,1024,0,4,5,911,10045,0,0), +(6660,2147483648,1024,0,4,6,911,10044,0,0), +(6661,2147483648,1024,1,4,0,912,10048,0,0), +(6662,2147483648,1024,1,4,1,912,10050,0,0), +(6663,2147483648,1024,1,4,2,912,10047,0,0), +(6664,2147483648,1024,1,4,3,912,10049,0,0), +(6665,2147483648,1024,1,4,4,912,10050,0,0), +(6666,2147483648,1024,1,4,5,912,10050,0,0), +(6667,2147483648,1024,1,4,6,912,10049,0,0), +(6668,4,4095,0,5,10,936,15450,0,0), +(6669,4,4095,0,5,9,936,15450,0,0), +(6670,4,4095,0,5,8,936,15449,0,0), +(6671,4,4095,0,5,7,936,15448,0,0), +(6672,4,4095,0,5,6,936,15447,0,0), +(6673,4,4095,0,5,5,936,15446,0,0), +(6674,4,4095,0,5,4,936,15445,0,0), +(6675,4,4095,0,5,3,936,15444,0,0), +(6676,4,4095,0,5,2,936,15443,0,0), +(6677,4,4095,0,5,1,936,15442,0,0), +(6678,4,4095,0,5,0,936,15441,0,0), +(6679,4,4095,0,5,10,937,15451,0,0), +(6680,4,4095,0,5,9,937,15451,0,0), +(6681,4,4095,0,5,8,937,15451,0,0), +(6682,4,4095,0,5,7,937,15451,0,0), +(6683,4,4095,0,5,6,937,15451,0,0), +(6684,4,4095,0,5,5,937,15451,0,0), +(6685,4,4095,0,5,4,937,15451,0,0), +(6686,4,4095,0,5,3,937,15451,0,0), +(6687,4,4095,0,5,2,937,15451,0,0), +(6688,4,4095,0,5,1,937,15451,0,0), +(6689,4,4095,0,5,0,937,15451,0,0), +(6690,1073741824,1024,0,4,0,944,15505,0,0), +(6691,1073741824,1024,0,4,1,944,15504,0,0), +(6692,1073741824,1024,0,4,2,944,15504,0,0), +(6693,1073741824,1024,0,4,3,944,15485,0,0), +(6694,1073741824,1024,0,4,4,944,15506,0,0), +(6695,1073741824,1024,0,4,5,944,15504,0,0), +(6696,1073741824,1024,1,4,0,945,15507,0,0), +(6697,1073741824,1024,1,4,1,945,15508,0,0), +(6698,1073741824,1024,1,4,2,945,15507,0,0), +(6699,1073741824,1024,1,4,3,945,15490,0,0), +(6700,1073741824,1024,1,4,4,945,15490,0,0), +(6701,1073741824,1024,1,4,5,945,15509,0,0), +(6702,2147483648,1024,0,4,0,946,15511,0,0), +(6703,2147483648,1024,0,4,1,946,15495,0,0), +(6704,2147483648,1024,0,4,2,946,15512,0,0), +(6705,2147483648,1024,0,4,3,946,15496,0,0), +(6706,2147483648,1024,0,4,4,946,15495,0,0), +(6707,2147483648,1024,0,4,5,946,15495,0,0), +(6708,2147483648,1024,0,4,6,946,15496,0,0), +(6709,2147483648,1024,1,4,0,947,15514,0,0), +(6710,2147483648,1024,1,4,1,947,15500,0,0), +(6711,2147483648,1024,1,4,2,947,15515,0,0), +(6712,2147483648,1024,1,4,3,947,15513,0,0), +(6713,2147483648,1024,1,4,4,947,15500,0,0), +(6714,2147483648,1024,1,4,5,947,15500,0,0), +(6715,2147483648,1024,1,4,6,947,15513,0,0), +(6716,2147483648,1024,0,4,0,956,15551,0,0), +(6717,2147483648,1024,0,4,1,956,15549,0,0), +(6718,2147483648,1024,0,4,2,956,15552,0,0), +(6719,2147483648,1024,0,4,3,956,15550,0,0), +(6720,2147483648,1024,0,4,4,956,15549,0,0), +(6721,2147483648,1024,0,4,5,956,15549,0,0), +(6722,2147483648,1024,0,4,6,956,15550,0,0), +(6723,2147483648,1024,1,4,0,957,15558,0,0), +(6724,2147483648,1024,1,4,1,957,15556,0,0), +(6725,2147483648,1024,1,4,2,957,15559,0,0), +(6726,2147483648,1024,1,4,3,957,15557,0,0), +(6727,2147483648,1024,1,4,4,957,15556,0,0), +(6728,2147483648,1024,1,4,5,957,15556,0,0), +(6729,2147483648,1024,1,4,6,957,15557,0,0), +(6730,64,4095,1,5,0,786,15671,0,0), +(6732,4,4095,1,1,0,608,6894,0,0), +(6733,4,4095,1,1,1,608,6894,0,0), +(6734,4,4095,1,1,2,608,6894,0,0), +(6735,4,4095,1,1,3,608,6894,0,0), +(6736,4,4095,1,1,4,608,6894,0,0), +(6737,4,4095,1,1,5,608,6894,0,0), +(6738,4,4095,1,1,6,608,6894,0,0), +(6739,4,4095,1,1,7,608,6894,0,0), +(6740,4,4095,1,1,8,608,6894,0,0), +(6741,4,4095,1,1,9,608,6894,0,0), +(6742,4,4095,1,1,10,608,6894,0,0), +(6743,4,4095,1,1,11,608,6894,0,0), +(6744,4,4095,1,1,12,608,6894,0,0), +(6745,4,4095,1,1,13,608,6894,0,0), +(6746,4,4095,1,1,14,608,6894,0,0), +(6747,4,4095,1,1,15,608,6894,0,0), +(6748,4,4095,1,1,16,608,6894,0,0), +(6749,4,4095,1,1,17,608,6894,0,0), +(6750,4,4095,1,1,18,608,6894,0,0), +(6751,1,4095,1,2,0,970,15672,0,0), +(6752,1,4095,1,2,1,970,15673,0,0), +(6753,1,4095,1,2,2,970,15674,0,0), +(6754,1,4095,1,2,3,970,15675,0,0), +(6755,1,4095,1,2,4,970,15676,0,0), +(6756,1,4095,1,2,5,970,15677,0,0), +(6757,1,4095,1,2,6,970,15678,0,0), +(6758,1,4095,1,2,7,970,15679,0,0), +(6759,1,4095,1,2,8,970,15680,0,0), +(6760,1,4095,1,2,9,970,15681,0,0), +(6761,1,4095,1,2,10,970,15682,0,0), +(6762,1,4095,1,2,11,970,15683,0,0), +(6763,1,4095,1,2,12,970,15684,0,0), +(6764,1,4095,1,2,13,970,15685,0,0), +(6765,1,4095,1,2,14,970,15686,0,0), +(6766,1,4095,1,2,15,970,15672,0,0), +(6767,1,4095,1,2,16,970,15673,0,0), +(6768,1,4095,1,2,17,970,15674,0,0), +(6769,1,4095,1,2,18,970,15675,0,0), +(6770,1,4095,1,2,19,970,15676,0,0), +(6771,1,4095,1,2,20,970,15677,0,0), +(6772,1,4095,1,2,21,970,15678,0,0), +(6773,1,4095,1,2,22,970,15679,0,0), +(6774,1,4095,1,2,23,970,15680,0,0), +(6775,1,4095,1,2,24,970,15681,0,0), +(6776,1,4095,1,2,25,970,15682,0,0), +(6777,1,4095,1,2,26,970,15683,0,0), +(6778,1,4095,1,2,27,970,15684,0,0), +(6779,1,4095,1,2,28,970,15685,0,0), +(6780,1,4095,1,2,29,970,15686,0,0), +(6781,128,32,0,4,10,768,8570,0,0), +(6782,128,32,0,4,11,768,8571,0,0), +(6783,128,32,0,4,12,768,8572,0,0), +(6784,256,4095,0,4,0,819,9179,0,0), +(6785,256,4095,0,4,1,819,9180,0,0), +(6786,256,4095,0,4,2,819,9181,0,0), +(6787,256,4095,0,4,3,819,9182,0,0), +(6788,256,4095,0,4,4,819,9183,0,0), +(6789,256,4095,0,4,5,819,9184,0,0), +(6790,256,4095,0,4,6,819,9182,0,0), +(6791,256,4095,0,4,7,819,9182,0,0), +(6792,256,4095,0,4,8,819,9179,0,0), +(6793,256,4095,0,4,9,819,9180,0,0), +(6794,256,4095,0,4,10,819,9181,0,0), +(6795,256,4095,0,4,11,819,9179,0,0), +(6796,256,4095,0,4,12,819,9182,0,0), +(6797,58720256,4063,1,2,0,750,8356,1,0), +(6798,58720256,4063,1,2,1,750,8354,1,0), +(6799,58720256,4063,1,2,2,750,8355,1,0), +(6800,58720256,4063,1,2,3,750,8350,1,0), +(6801,58720256,4063,1,2,4,750,8351,1,0), +(6802,58720256,4063,1,2,5,750,8356,1,0), +(6803,58720256,4063,1,2,6,750,8355,1,0), +(6804,58720256,4063,1,2,7,750,8351,1,0), +(6805,58720256,4063,1,2,8,750,8356,1,0), +(6806,58720256,4063,1,2,9,750,8354,1,0), +(6807,58720256,4063,1,2,10,750,8355,1,0), +(6808,58720256,4063,1,2,11,750,8351,1,0), +(6809,58720256,4063,1,2,12,750,8356,1,0), +(6810,58720256,4063,1,2,13,750,8354,1,0), +(6811,58720256,4063,1,2,14,750,8355,1,0), +(6812,58720256,4063,1,2,15,750,8351,1,0), +(6813,58720256,4063,1,2,16,750,8354,1,0), +(6814,58720256,4063,1,2,17,750,8355,1,0), +(6815,58720256,4063,1,2,18,750,8356,1,0), +(6816,58720256,4063,1,2,19,750,8351,1,0), +(6817,58720256,4063,1,2,19,750,8354,1,1), +(6818,58720256,4063,1,2,18,750,8356,1,1), +(6819,58720256,4063,1,2,17,750,8351,1,1), +(6820,58720256,4063,1,2,16,750,8355,1,1), +(6821,58720256,4063,1,2,15,750,8354,1,1), +(6822,58720256,4063,1,2,14,750,8356,1,1), +(6823,58720256,4063,1,2,13,750,8351,1,1), +(6824,58720256,4063,1,2,12,750,8355,1,1), +(6825,58720256,4063,1,2,11,750,8354,1,1), +(6826,58720256,4063,1,2,10,750,8356,1,1), +(6827,58720256,4063,1,2,9,750,8351,1,1), +(6828,58720256,4063,1,2,8,750,8355,1,1), +(6829,58720256,4063,1,2,7,750,8354,1,1), +(6830,58720256,4063,1,2,6,750,8351,1,1), +(6831,58720256,4063,1,2,5,750,8356,1,1), +(6832,58720256,4063,1,2,4,750,8354,1,1), +(6833,58720256,4063,1,2,3,750,8355,1,1), +(6834,58720256,4063,1,2,2,750,8351,1,1), +(6835,58720256,4063,1,2,1,750,8356,1,1), +(6836,58720256,4063,1,2,0,750,8354,1,1), +(6837,58720256,4063,1,2,0,750,8351,1,2), +(6838,58720256,4063,1,2,1,750,8354,1,2), +(6839,58720256,4063,1,2,2,750,8356,1,2), +(6840,58720256,4063,1,2,3,750,8355,1,2), +(6841,58720256,4063,1,2,4,750,8355,1,2), +(6842,58720256,4063,1,2,5,750,8354,1,2), +(6843,58720256,4063,1,2,6,750,8351,1,2), +(6844,58720256,4063,1,2,7,750,8356,1,2), +(6845,58720256,4063,1,2,8,750,8356,1,2), +(6846,58720256,4063,1,2,9,750,8355,1,2), +(6847,58720256,4063,1,2,10,750,8354,1,2), +(6848,58720256,4063,1,2,11,750,8356,1,2), +(6849,58720256,4063,1,2,12,750,8351,1,2), +(6850,58720256,4063,1,2,13,750,8351,1,2), +(6851,58720256,4063,1,2,14,750,8355,1,2), +(6852,58720256,4063,1,2,15,750,8354,1,2), +(6853,58720256,4063,1,2,16,750,8351,1,2), +(6854,58720256,4063,1,2,17,750,8354,1,2), +(6855,58720256,4063,1,2,18,750,8356,1,2), +(6856,58720256,4063,1,2,19,750,8355,1,2), +(6857,58720256,4063,1,2,0,750,8351,1,3), +(6858,58720256,4063,1,2,1,750,8354,1,3), +(6859,58720256,4063,1,2,2,750,8354,1,3), +(6860,58720256,4063,1,2,3,750,8356,1,3), +(6861,58720256,4063,1,2,4,750,8356,1,3), +(6862,58720256,4063,1,2,5,750,8351,1,3), +(6863,58720256,4063,1,2,6,750,8351,1,3), +(6864,58720256,4063,1,2,7,750,8355,1,3), +(6865,58720256,4063,1,2,8,750,8354,1,3), +(6866,58720256,4063,1,2,9,750,8351,1,3), +(6867,58720256,4063,1,2,10,750,8356,1,3), +(6868,58720256,4063,1,2,11,750,8354,1,3), +(6869,58720256,4063,1,2,12,750,8355,1,3), +(6870,58720256,4063,1,2,13,750,8351,1,3), +(6871,58720256,4063,1,2,14,750,8356,1,3), +(6872,58720256,4063,1,2,15,750,8351,1,3), +(6873,58720256,4063,1,2,16,750,8355,1,3), +(6874,58720256,4063,1,2,17,750,8355,1,3), +(6875,58720256,4063,1,2,18,750,8354,1,3), +(6876,58720256,4063,1,2,19,750,8356,1,3), +(6877,58720256,4063,1,2,0,750,8356,1,4), +(6878,58720256,4063,1,2,1,750,8354,1,4), +(6879,58720256,4063,1,2,2,750,8355,1,4), +(6880,58720256,4063,1,2,3,750,8350,1,4), +(6881,58720256,4063,1,2,4,750,8351,1,4), +(6882,58720256,4063,1,2,5,750,8356,1,4), +(6883,58720256,4063,1,2,6,750,8355,1,4), +(6884,58720256,4063,1,2,7,750,8351,1,4), +(6885,58720256,4063,1,2,8,750,8356,1,4), +(6886,58720256,4063,1,2,9,750,8354,1,4), +(6887,58720256,4063,1,2,10,750,8355,1,4), +(6888,58720256,4063,1,2,11,750,8351,1,4), +(6889,58720256,4063,1,2,12,750,8356,1,4), +(6890,58720256,4063,1,2,13,750,8354,1,4), +(6891,58720256,4063,1,2,14,750,8355,1,4), +(6892,58720256,4063,1,2,15,750,8351,1,4), +(6893,58720256,4063,1,2,16,750,8354,1,4), +(6894,58720256,4063,1,2,17,750,8355,1,4), +(6895,58720256,4063,1,2,18,750,8356,1,4), +(6896,58720256,4063,1,2,19,750,8351,1,4), +(6897,58720256,4063,1,2,0,750,8354,1,5), +(6898,58720256,4063,1,2,1,750,8356,1,5), +(6899,58720256,4063,1,2,2,750,8351,1,5), +(6900,58720256,4063,1,2,3,750,8355,1,5), +(6901,58720256,4063,1,2,4,750,8354,1,5), +(6902,58720256,4063,1,2,5,750,8356,1,5), +(6903,58720256,4063,1,2,6,750,8351,1,5), +(6904,58720256,4063,1,2,7,750,8354,1,5), +(6905,58720256,4063,1,2,8,750,8355,1,5), +(6906,58720256,4063,1,2,9,750,8351,1,5), +(6907,58720256,4063,1,2,10,750,8356,1,5), +(6908,58720256,4063,1,2,11,750,8354,1,5), +(6909,58720256,4063,1,2,12,750,8355,1,5), +(6910,58720256,4063,1,2,13,750,8351,1,5), +(6911,58720256,4063,1,2,14,750,8356,1,5), +(6912,58720256,4063,1,2,15,750,8354,1,5), +(6913,58720256,4063,1,2,16,750,8355,1,5), +(6914,58720256,4063,1,2,17,750,8351,1,5), +(6915,58720256,4063,1,2,18,750,8356,1,5), +(6916,58720256,4063,1,2,19,750,8354,1,5), +(6917,58720256,4063,1,2,0,750,8351,1,6), +(6918,58720256,4063,1,2,1,750,8354,1,6), +(6919,58720256,4063,1,2,2,750,8356,1,6), +(6920,58720256,4063,1,2,3,750,8355,1,6), +(6921,58720256,4063,1,2,4,750,8355,1,6), +(6922,58720256,4063,1,2,5,750,8354,1,6), +(6923,58720256,4063,1,2,6,750,8351,1,6), +(6924,58720256,4063,1,2,7,750,8356,1,6), +(6925,58720256,4063,1,2,8,750,8356,1,6), +(6926,58720256,4063,1,2,9,750,8355,1,6), +(6927,58720256,4063,1,2,10,750,8354,1,6), +(6928,58720256,4063,1,2,11,750,8356,1,6), +(6929,58720256,4063,1,2,12,750,8351,1,6), +(6930,58720256,4063,1,2,13,750,8351,1,6), +(6931,58720256,4063,1,2,14,750,8355,1,6), +(6932,58720256,4063,1,2,15,750,8354,1,6), +(6933,58720256,4063,1,2,16,750,8351,1,6), +(6934,58720256,4063,1,2,17,750,8354,1,6), +(6935,58720256,4063,1,2,18,750,8356,1,6), +(6936,58720256,4063,1,2,19,750,8355,1,6), +(6937,58720256,4063,1,2,0,750,8351,1,7), +(6938,58720256,4063,1,2,1,750,8354,1,7), +(6939,58720256,4063,1,2,2,750,8354,1,7), +(6940,58720256,4063,1,2,3,750,8356,1,7), +(6941,58720256,4063,1,2,4,750,8356,1,7), +(6942,58720256,4063,1,2,5,750,8351,1,7), +(6943,58720256,4063,1,2,6,750,8351,1,7), +(6944,58720256,4063,1,2,7,750,8355,1,7), +(6945,58720256,4063,1,2,8,750,8354,1,7), +(6946,58720256,4063,1,2,9,750,8351,1,7), +(6947,58720256,4063,1,2,10,750,8356,1,7), +(6948,58720256,4063,1,2,11,750,8354,1,7), +(6949,58720256,4063,1,2,12,750,8355,1,7), +(6950,58720256,4063,1,2,13,750,8351,1,7), +(6951,58720256,4063,1,2,14,750,8356,1,7), +(6952,58720256,4063,1,2,15,750,8351,1,7), +(6953,58720256,4063,1,2,16,750,8355,1,7), +(6954,58720256,4063,1,2,17,750,8355,1,7), +(6955,58720256,4063,1,2,18,750,8354,1,7), +(6956,58720256,4063,1,2,19,750,8356,1,7), +(6957,58720256,4063,1,2,0,750,8356,1,8), +(6958,58720256,4063,1,2,1,750,8354,1,8), +(6959,58720256,4063,1,2,2,750,8355,1,8), +(6960,58720256,4063,1,2,3,750,8350,1,8), +(6961,58720256,4063,1,2,4,750,8351,1,8), +(6962,58720256,4063,1,2,5,750,8356,1,8), +(6963,58720256,4063,1,2,6,750,8355,1,8), +(6964,58720256,4063,1,2,7,750,8351,1,8), +(6965,58720256,4063,1,2,8,750,8356,1,8), +(6966,58720256,4063,1,2,9,750,8354,1,8), +(6967,58720256,4063,1,2,10,750,8355,1,8), +(6968,58720256,4063,1,2,11,750,8351,1,8), +(6969,58720256,4063,1,2,12,750,8356,1,8), +(6970,58720256,4063,1,2,13,750,8354,1,8), +(6971,58720256,4063,1,2,14,750,8355,1,8), +(6972,58720256,4063,1,2,15,750,8351,1,8), +(6973,58720256,4063,1,2,16,750,8354,1,8), +(6974,58720256,4063,1,2,17,750,8355,1,8), +(6975,58720256,4063,1,2,18,750,8356,1,8), +(6976,58720256,4063,1,2,19,750,8351,1,8), +(6977,58720256,4063,1,2,0,750,8354,1,9), +(6978,58720256,4063,1,2,1,750,8356,1,9), +(6979,58720256,4063,1,2,2,750,8351,1,9), +(6980,58720256,4063,1,2,3,750,8355,1,9), +(6981,58720256,4063,1,2,4,750,8354,1,9), +(6982,58720256,4063,1,2,5,750,8356,1,9), +(6983,58720256,4063,1,2,6,750,8351,1,9), +(6984,58720256,4063,1,2,7,750,8354,1,9), +(6985,58720256,4063,1,2,8,750,8355,1,9), +(6986,58720256,4063,1,2,9,750,8351,1,9), +(6987,58720256,4063,1,2,10,750,8356,1,9), +(6988,58720256,4063,1,2,11,750,8354,1,9), +(6989,58720256,4063,1,2,12,750,8355,1,9), +(6990,58720256,4063,1,2,13,750,8351,1,9), +(6991,58720256,4063,1,2,14,750,8356,1,9), +(6992,58720256,4063,1,2,15,750,8354,1,9), +(6993,58720256,4063,1,2,16,750,8355,1,9), +(6994,58720256,4063,1,2,17,750,8351,1,9), +(6995,58720256,4063,1,2,18,750,8356,1,9), +(6996,58720256,4063,1,2,19,750,8354,1,9), +(6997,58720256,4063,1,2,0,750,8351,1,10), +(6998,58720256,4063,1,2,1,750,8354,1,10), +(6999,58720256,4063,1,2,2,750,8356,1,10), +(7000,58720256,4063,1,2,3,750,8355,1,10), +(7001,58720256,4063,1,2,4,750,8355,1,10), +(7002,58720256,4063,1,2,5,750,8354,1,10), +(7003,58720256,4063,1,2,6,750,8351,1,10), +(7004,58720256,4063,1,2,7,750,8356,1,10), +(7005,58720256,4063,1,2,8,750,8356,1,10), +(7006,58720256,4063,1,2,9,750,8355,1,10), +(7007,58720256,4063,1,2,10,750,8354,1,10), +(7008,58720256,4063,1,2,11,750,8356,1,10), +(7009,58720256,4063,1,2,12,750,8351,1,10), +(7010,58720256,4063,1,2,13,750,8351,1,10), +(7011,58720256,4063,1,2,14,750,8355,1,10), +(7012,58720256,4063,1,2,15,750,8354,1,10), +(7013,58720256,4063,1,2,16,750,8351,1,10), +(7014,58720256,4063,1,2,17,750,8354,1,10), +(7015,58720256,4063,1,2,18,750,8356,1,10), +(7016,58720256,4063,1,2,19,750,8355,1,10), +(7017,58720256,4063,1,2,0,750,8351,1,11), +(7018,58720256,4063,1,2,1,750,8354,1,11), +(7019,58720256,4063,1,2,2,750,8354,1,11), +(7020,58720256,4063,1,2,3,750,8356,1,11), +(7021,58720256,4063,1,2,4,750,8356,1,11), +(7022,58720256,4063,1,2,5,750,8351,1,11), +(7023,58720256,4063,1,2,6,750,8351,1,11), +(7024,58720256,4063,1,2,7,750,8355,1,11), +(7025,58720256,4063,1,2,8,750,8354,1,11), +(7026,58720256,4063,1,2,9,750,8351,1,11), +(7027,58720256,4063,1,2,10,750,8356,1,11), +(7028,58720256,4063,1,2,11,750,8354,1,11), +(7029,58720256,4063,1,2,12,750,8355,1,11), +(7030,58720256,4063,1,2,13,750,8351,1,11), +(7031,58720256,4063,1,2,14,750,8356,1,11), +(7032,58720256,4063,1,2,15,750,8351,1,11), +(7033,58720256,4063,1,2,16,750,8355,1,11), +(7034,58720256,4063,1,2,17,750,8355,1,11), +(7035,58720256,4063,1,2,18,750,8354,1,11), +(7036,58720256,4063,1,2,19,750,8356,1,11), +(7037,58720256,4063,1,2,0,750,8354,1,12), +(7038,58720256,4063,1,2,1,750,8356,1,12), +(7039,58720256,4063,1,2,2,750,8351,1,12), +(7040,58720256,4063,1,2,3,750,8355,1,12), +(7041,58720256,4063,1,2,4,750,8354,1,12), +(7042,58720256,4063,1,2,5,750,8356,1,12), +(7043,58720256,4063,1,2,6,750,8351,1,12), +(7044,58720256,4063,1,2,7,750,8354,1,12), +(7045,58720256,4063,1,2,8,750,8355,1,12), +(7046,58720256,4063,1,2,9,750,8351,1,12), +(7047,58720256,4063,1,2,10,750,8356,1,12), +(7048,58720256,4063,1,2,11,750,8354,1,12), +(7049,58720256,4063,1,2,12,750,8355,1,12), +(7050,58720256,4063,1,2,13,750,8351,1,12), +(7051,58720256,4063,1,2,14,750,8356,1,12), +(7052,58720256,4063,1,2,15,750,8354,1,12), +(7053,58720256,4063,1,2,16,750,8355,1,12), +(7054,58720256,4063,1,2,17,750,8351,1,12), +(7055,58720256,4063,1,2,18,750,8356,1,12), +(7056,58720256,4063,1,2,19,750,8354,1,12), +(7057,58720256,4063,1,2,0,750,8354,1,13), +(7058,58720256,4063,1,2,1,750,8356,1,13), +(7059,58720256,4063,1,2,2,750,8351,1,13), +(7060,58720256,4063,1,2,3,750,8355,1,13), +(7061,58720256,4063,1,2,4,750,8354,1,13), +(7062,58720256,4063,1,2,5,750,8356,1,13), +(7063,58720256,4063,1,2,6,750,8351,1,13), +(7064,58720256,4063,1,2,7,750,8354,1,13), +(7065,58720256,4063,1,2,8,750,8355,1,13), +(7066,58720256,4063,1,2,9,750,8351,1,13), +(7067,58720256,4063,1,2,10,750,8356,1,13), +(7068,58720256,4063,1,2,11,750,8354,1,13), +(7069,58720256,4063,1,2,12,750,8355,1,13), +(7070,58720256,4063,1,2,13,750,8351,1,13), +(7071,58720256,4063,1,2,14,750,8356,1,13), +(7072,58720256,4063,1,2,15,750,8354,1,13), +(7073,58720256,4063,1,2,16,750,8355,1,13), +(7074,58720256,4063,1,2,17,750,8351,1,13), +(7075,58720256,4063,1,2,18,750,8356,1,13), +(7076,58720256,4063,1,2,19,750,8354,1,13), +(7077,58720256,4095,1,2,0,750,8362,1,14), +(7078,58720256,4063,0,2,1,747,8321,1,0), +(7079,58720256,4063,0,2,1,747,8321,1,1), +(7080,58720256,4063,0,2,1,747,8321,1,2), +(7081,58720256,4063,0,2,1,747,8321,1,3), +(7082,58720256,4063,0,2,1,747,8321,1,4), +(7083,58720256,4063,0,2,1,747,8321,1,5), +(7084,58720256,4063,0,2,2,747,8325,1,0), +(7085,58720256,4063,0,2,2,747,8325,1,1), +(7086,58720256,4063,0,2,2,747,8325,1,2), +(7087,58720256,4063,0,2,2,747,8325,1,3), +(7088,58720256,4063,0,2,2,747,8325,1,4), +(7089,58720256,4063,0,2,2,747,8325,1,5), +(7090,58720256,4063,0,2,3,747,8325,1,0), +(7091,58720256,4063,0,2,3,747,8325,1,1), +(7092,58720256,4063,0,2,3,747,8325,1,2), +(7093,58720256,4063,0,2,3,747,8325,1,3), +(7094,58720256,4063,0,2,3,747,8325,1,4), +(7095,58720256,4063,0,2,3,747,8325,1,5), +(7096,58720256,4063,0,2,4,747,8321,1,0), +(7097,58720256,4063,0,2,4,747,8321,1,1), +(7098,58720256,4063,0,2,4,747,8324,1,2), +(7099,58720256,4063,0,2,4,747,8321,1,3), +(7100,58720256,4063,0,2,4,747,8321,1,4), +(7101,58720256,4063,0,2,4,747,8321,1,5), +(7102,58720256,4063,0,2,5,747,8322,1,0), +(7103,58720256,4063,0,2,5,747,8322,1,1), +(7104,58720256,4063,0,2,5,747,8322,1,2), +(7105,58720256,4063,0,2,5,747,8322,1,3), +(7106,58720256,4063,0,2,5,747,8322,1,4), +(7107,58720256,4063,0,2,5,747,8322,1,5), +(7108,58720256,4063,0,2,6,747,8318,1,0), +(7109,58720256,4063,0,2,6,747,8318,1,1), +(7110,58720256,4063,0,2,6,747,8318,1,2), +(7111,58720256,4063,0,2,6,747,8318,1,3), +(7112,58720256,4063,0,2,6,747,8318,1,4), +(7113,58720256,4063,0,2,6,747,8318,1,5), +(7114,58720256,4063,0,2,7,747,8322,1,0), +(7115,58720256,4063,0,2,7,747,8322,1,1), +(7116,58720256,4063,0,2,7,747,8322,1,2), +(7117,58720256,4063,0,2,7,747,8322,1,3), +(7118,58720256,4063,0,2,7,747,8322,1,4), +(7119,58720256,4063,0,2,7,747,8322,1,5), +(7120,58720256,4063,0,2,8,747,8321,1,0), +(7121,58720256,4063,0,2,8,747,8321,1,1), +(7122,58720256,4063,0,2,8,747,8321,1,2), +(7123,58720256,4063,0,2,8,747,8321,1,3), +(7124,58720256,4063,0,2,8,747,8321,1,4), +(7125,58720256,4063,0,2,8,747,8321,1,5), +(7126,58720256,4063,0,2,9,747,8325,1,0), +(7127,58720256,4063,0,2,9,747,8325,1,1), +(7128,58720256,4063,0,2,9,747,8325,1,2), +(7129,58720256,4063,0,2,9,747,8325,1,3), +(7130,58720256,4063,0,2,9,747,8325,1,4), +(7131,58720256,4063,0,2,9,747,8325,1,5), +(7132,58720256,4063,0,2,10,747,8325,1,0), +(7133,58720256,4063,0,2,10,747,8325,1,1), +(7134,58720256,4063,0,2,10,747,8325,1,2), +(7135,58720256,4063,0,2,10,747,8325,1,3), +(7136,58720256,4063,0,2,10,747,8325,1,4), +(7137,58720256,4063,0,2,10,747,8325,1,5), +(7138,58720256,4063,0,2,11,747,8321,1,0), +(7139,58720256,4063,0,2,11,747,8321,1,1), +(7140,58720256,4063,0,2,11,747,8321,1,2), +(7141,58720256,4063,0,2,11,747,8321,1,3), +(7142,58720256,4063,0,2,11,747,8321,1,4), +(7143,58720256,4063,0,2,11,747,8321,1,5), +(7144,58720256,4063,0,2,12,747,8322,1,0), +(7145,58720256,4063,0,2,12,747,8322,1,1), +(7146,58720256,4063,0,2,12,747,8322,1,2), +(7147,58720256,4063,0,2,12,747,8322,1,3), +(7148,58720256,4063,0,2,12,747,8322,1,4), +(7149,58720256,4063,0,2,12,747,8322,1,5), +(7150,58720256,4063,0,2,13,747,8318,1,0), +(7151,58720256,4063,0,2,13,747,8318,1,1), +(7152,58720256,4063,0,2,13,747,8318,1,2), +(7153,58720256,4063,0,2,13,747,8318,1,3), +(7154,58720256,4063,0,2,13,747,8318,1,4), +(7155,58720256,4063,0,2,13,747,8318,1,5), +(7156,58720256,4063,0,2,14,747,8322,1,0), +(7157,58720256,4063,0,2,14,747,8322,1,1), +(7158,58720256,4063,0,2,14,747,8322,1,2), +(7159,58720256,4063,0,2,14,747,8322,1,3), +(7160,58720256,4063,0,2,14,747,8322,1,4), +(7161,58720256,4063,0,2,14,747,8322,1,5), +(7162,58720256,4063,0,2,15,747,8324,1,0), +(7163,58720256,4063,0,2,15,747,8324,1,1), +(7164,58720256,4063,0,2,15,747,8324,1,2), +(7165,58720256,4063,0,2,15,747,8324,1,3), +(7166,58720256,4063,0,2,15,747,8324,1,4), +(7167,58720256,4063,0,2,15,747,8324,1,5), +(7168,58720256,4063,0,2,16,747,8324,1,0), +(7169,58720256,4063,0,2,16,747,8325,1,1), +(7170,58720256,4063,0,2,16,747,8325,1,2), +(7171,58720256,4063,0,2,16,747,8325,1,3), +(7172,58720256,4063,0,2,16,747,8325,1,4), +(7173,58720256,4063,0,2,16,747,8325,1,5), +(7174,58720256,4063,0,2,17,747,8325,1,0), +(7175,58720256,4063,0,2,17,747,8325,1,1), +(7176,58720256,4063,0,2,17,747,8325,1,2), +(7177,58720256,4063,0,2,17,747,8325,1,3), +(7178,58720256,4063,0,2,17,747,8325,1,4), +(7179,58720256,4063,0,2,17,747,8325,1,5), +(7180,58720256,4063,0,2,18,747,8321,1,0), +(7181,58720256,4063,0,2,18,747,8321,1,1), +(7182,58720256,4063,0,2,18,747,8321,1,2), +(7183,58720256,4063,0,2,18,747,8321,1,3), +(7184,58720256,4063,0,2,18,747,8321,1,4), +(7185,58720256,4063,0,2,18,747,8321,1,5), +(7186,58720256,4063,0,2,19,747,8322,1,0), +(7187,58720256,4063,0,2,19,747,8322,1,1), +(7188,58720256,4063,0,2,19,747,8322,1,2), +(7189,58720256,4063,0,2,19,747,8322,1,3), +(7190,58720256,4063,0,2,19,747,8322,1,4), +(7191,58720256,4063,0,2,19,747,8322,1,5), +(7192,58720256,4063,0,2,20,747,8318,1,0), +(7193,58720256,4063,0,2,20,747,8318,1,1), +(7194,58720256,4063,0,2,20,747,8318,1,2), +(7195,58720256,4063,0,2,20,747,8318,1,3), +(7196,58720256,4063,0,2,20,747,8318,1,4), +(7197,58720256,4063,0,2,20,747,8322,1,5), +(7198,58720256,4063,0,2,20,747,8318,1,10), +(7199,58720256,4063,0,2,19,747,8322,1,10), +(7200,58720256,4063,0,2,18,747,8321,1,10), +(7201,58720256,4063,0,2,17,747,8325,1,10), +(7202,58720256,4063,0,2,16,747,8325,1,10), +(7203,58720256,4063,0,2,15,747,8324,1,10), +(7204,58720256,4063,0,2,14,747,8322,1,10), +(7205,58720256,4063,0,2,13,747,8318,1,10), +(7206,58720256,4063,0,2,12,747,8322,1,10), +(7207,58720256,4063,0,2,11,747,8321,1,10), +(7208,58720256,4063,0,2,10,747,8325,1,10), +(7209,58720256,4063,0,2,9,747,8325,1,10), +(7210,58720256,4063,0,2,8,747,8321,1,10), +(7211,58720256,4063,0,2,7,747,8322,1,10), +(7212,58720256,4063,0,2,6,747,8318,1,10), +(7213,58720256,4063,0,2,5,747,8322,1,10), +(7214,58720256,4063,0,2,4,747,8321,1,10), +(7215,58720256,4063,0,2,3,747,8325,1,10), +(7216,58720256,4063,0,2,2,747,8325,1,10), +(7217,58720256,4063,0,2,1,747,8321,1,10), +(7218,58720256,4063,0,2,0,747,8323,1,10), +(7219,58720256,4063,0,2,20,747,8318,1,9), +(7220,58720256,4063,0,2,19,747,8322,1,9), +(7221,58720256,4063,0,2,18,747,8321,1,9), +(7222,58720256,4063,0,2,17,747,8325,1,9), +(7223,58720256,4063,0,2,16,747,8325,1,9), +(7224,58720256,4063,0,2,15,747,8324,1,9), +(7225,58720256,4063,0,2,14,747,8322,1,9), +(7226,58720256,4063,0,2,13,747,8318,1,9), +(7227,58720256,4063,0,2,12,747,8322,1,9), +(7228,58720256,4063,0,2,11,747,8321,1,9), +(7229,58720256,4063,0,2,10,747,8325,1,9), +(7230,58720256,4063,0,2,9,747,8325,1,9), +(7231,58720256,4063,0,2,8,747,8321,1,9), +(7232,58720256,4063,0,2,7,747,8322,1,9), +(7233,58720256,4063,0,2,6,747,8318,1,9), +(7234,58720256,4063,0,2,5,747,8322,1,9), +(7235,58720256,4063,0,2,4,747,8321,1,9), +(7236,58720256,4063,0,2,3,747,8325,1,9), +(7237,58720256,4063,0,2,2,747,8325,1,9), +(7238,58720256,4063,0,2,3,747,8325,1,7), +(7239,58720256,4063,0,2,1,747,8321,1,9), +(7240,58720256,4063,0,2,0,747,8323,1,9), +(7241,58720256,4063,0,2,20,747,8318,1,8), +(7242,58720256,4063,0,2,19,747,8322,1,8), +(7243,58720256,4063,0,2,18,747,8321,1,8), +(7244,58720256,4063,0,2,17,747,8325,1,8), +(7245,58720256,4063,0,2,16,747,8325,1,8), +(7246,58720256,4063,0,2,15,747,8324,1,8), +(7247,58720256,4063,0,2,14,747,8322,1,8), +(7248,58720256,4063,0,2,13,747,8318,1,8), +(7249,58720256,4063,0,2,12,747,8322,1,8), +(7250,58720256,4063,0,2,11,747,8321,1,8), +(7251,58720256,4063,0,2,10,747,8325,1,8), +(7252,58720256,4063,0,2,9,747,8325,1,8), +(7253,58720256,4063,0,2,8,747,8321,1,8), +(7254,58720256,4063,0,2,7,747,8322,1,8), +(7255,58720256,4063,0,2,6,747,8318,1,8), +(7256,58720256,4063,0,2,5,747,8322,1,8), +(7257,58720256,4063,0,2,4,747,8324,1,8), +(7258,58720256,4063,0,2,3,747,8325,1,8), +(7259,58720256,4063,0,2,2,747,8325,1,8), +(7260,58720256,4063,0,2,1,747,8321,1,8), +(7261,58720256,4063,0,2,0,747,8323,1,8), +(7262,58720256,4063,0,2,20,747,8318,1,7), +(7263,58720256,4063,0,2,19,747,8322,1,7), +(7264,58720256,4063,0,2,18,747,8321,1,7), +(7265,58720256,4063,0,2,17,747,8325,1,7), +(7266,58720256,4063,0,2,16,747,8325,1,7), +(7267,58720256,4063,0,2,15,747,8324,1,7), +(7268,58720256,4063,0,2,14,747,8322,1,7), +(7269,58720256,4063,0,2,13,747,8318,1,7), +(7270,58720256,4063,0,2,12,747,8322,1,7), +(7271,58720256,4063,0,2,11,747,8321,1,7), +(7272,58720256,4063,0,2,10,747,8325,1,7), +(7273,58720256,4063,0,2,9,747,8325,1,7), +(7274,58720256,4063,0,2,8,747,8321,1,7), +(7275,58720256,4063,0,2,7,747,8322,1,7), +(7276,58720256,4063,0,2,6,747,8318,1,7), +(7277,58720256,4063,0,2,5,747,8322,1,7), +(7278,58720256,4063,0,2,4,747,8321,1,7), +(7279,58720256,4063,0,2,2,747,8325,1,7), +(7280,58720256,4063,0,2,1,747,8321,1,7), +(7281,58720256,4063,0,2,0,747,8323,1,7), +(7282,58720256,4063,0,2,20,747,8318,1,6), +(7283,58720256,4063,0,2,19,747,8322,1,6), +(7284,58720256,4063,0,2,18,747,8321,1,6), +(7285,58720256,4063,0,2,17,747,8325,1,6), +(7286,58720256,4063,0,2,16,747,8324,1,6), +(7287,58720256,4063,0,2,15,747,8324,1,6), +(7288,58720256,4063,0,2,14,747,8322,1,6), +(7289,58720256,4063,0,2,13,747,8318,1,6), +(7290,58720256,4063,0,2,12,747,8322,1,6), +(7291,58720256,4063,0,2,11,747,8321,1,6), +(7292,58720256,4063,0,2,10,747,8325,1,6), +(7293,58720256,4063,0,2,9,747,8325,1,6), +(7294,58720256,4063,0,2,8,747,8321,1,6), +(7295,58720256,4063,0,2,7,747,8322,1,6), +(7296,58720256,4063,0,2,6,747,8318,1,6), +(7297,58720256,4063,0,2,5,747,8322,1,6), +(7298,58720256,4063,0,2,4,747,8321,1,6), +(7299,58720256,4063,0,2,3,747,8325,1,6), +(7300,58720256,4063,0,2,2,747,8325,1,6), +(7301,58720256,4063,0,2,1,747,8321,1,6), +(7302,58720256,4063,0,2,0,747,8318,1,6), +(7303,58720256,4063,0,2,0,747,8323,1,13), +(7304,58720256,4063,0,2,1,747,8321,1,13), +(7305,58720256,4063,0,2,2,747,8325,1,13), +(7306,58720256,4063,0,2,3,747,8325,1,13), +(7307,58720256,4063,0,2,4,747,8321,1,13), +(7308,58720256,4063,0,2,5,747,8322,1,13), +(7309,58720256,4063,0,2,6,747,8318,1,13), +(7310,58720256,4063,0,2,7,747,8322,1,13), +(7311,58720256,4063,0,2,8,747,8321,1,13), +(7312,58720256,4063,0,2,9,747,8325,1,13), +(7313,58720256,4063,0,2,10,747,8325,1,13), +(7314,58720256,4063,0,2,11,747,8321,1,13), +(7315,58720256,4063,0,2,12,747,8322,1,13), +(7316,58720256,4063,0,2,13,747,8318,1,13), +(7317,58720256,4063,0,2,14,747,8322,1,13), +(7318,58720256,4063,0,2,15,747,8324,1,13), +(7319,58720256,4063,0,2,16,747,8325,1,13), +(7320,58720256,4063,0,2,17,747,8325,1,13), +(7321,58720256,4063,0,2,18,747,8321,1,13), +(7322,58720256,4063,0,2,19,747,8322,1,13), +(7323,58720256,4063,0,2,20,747,8318,1,13), +(7324,58720256,4063,0,2,0,747,8323,1,12), +(7325,58720256,4063,0,2,1,747,8321,1,12), +(7326,58720256,4063,0,2,2,747,8325,1,12), +(7327,58720256,4063,0,2,3,747,8325,1,12), +(7328,58720256,4063,0,2,4,747,8324,1,12), +(7329,58720256,4063,0,2,5,747,8322,1,12), +(7330,58720256,4063,0,2,6,747,8318,1,12), +(7331,58720256,4063,0,2,7,747,8322,1,12), +(7332,58720256,4063,0,2,8,747,8321,1,12), +(7333,58720256,4063,0,2,9,747,8325,1,12), +(7334,58720256,4063,0,2,10,747,8325,1,12), +(7335,58720256,4063,0,2,11,747,8321,1,12), +(7336,58720256,4063,0,2,12,747,8322,1,12), +(7337,58720256,4063,0,2,13,747,8318,1,12), +(7338,58720256,4063,0,2,14,747,8322,1,12), +(7339,58720256,4063,0,2,15,747,8324,1,12), +(7340,58720256,4063,0,2,16,747,8325,1,12), +(7341,58720256,4063,0,2,17,747,8325,1,12), +(7342,58720256,4063,0,2,18,747,8321,1,12), +(7343,58720256,4063,0,2,19,747,8322,1,12), +(7344,58720256,4063,0,2,20,747,8318,1,12), +(7345,58720256,4063,0,2,0,747,8323,1,11), +(7346,58720256,4063,0,2,1,747,8321,1,11), +(7347,58720256,4063,0,2,2,747,8325,1,11), +(7348,58720256,4063,0,2,3,747,8325,1,11), +(7349,58720256,4063,0,2,4,747,8321,1,11), +(7350,58720256,4063,0,2,5,747,8322,1,11), +(7351,58720256,4063,0,2,6,747,8318,1,11), +(7352,58720256,4063,0,2,7,747,8322,1,11), +(7353,58720256,4063,0,2,8,747,8321,1,11), +(7354,58720256,4063,0,2,9,747,8325,1,11), +(7355,58720256,4063,0,2,10,747,8325,1,11), +(7356,58720256,4063,0,2,11,747,8321,1,11), +(7357,58720256,4063,0,2,12,747,8322,1,11), +(7358,58720256,4063,0,2,13,747,8318,1,11), +(7359,58720256,4063,0,2,14,747,8322,1,11), +(7360,58720256,4063,0,2,15,747,8324,1,11), +(7361,58720256,4063,0,2,16,747,8325,1,11), +(7362,58720256,4063,0,2,17,747,8325,1,11), +(7363,58720256,4063,0,2,18,747,8321,1,11), +(7364,58720256,4063,0,2,19,747,8322,1,11), +(7365,58720256,4063,0,2,20,747,8318,1,11), +(7366,58720256,4095,0,2,0,747,8361,1,14), +(7367,2147483648,4063,1,2,0,687,7682,1,1), +(7368,2147483648,4063,1,2,1,687,7684,1,1), +(7369,2147483648,4063,1,2,2,687,7686,1,1), +(7370,2147483648,4063,1,2,3,687,7688,1,1), +(7371,2147483648,4063,1,2,4,687,7683,1,1), +(7372,2147483648,4063,1,2,5,687,7690,1,1), +(7373,2147483648,4063,1,2,6,687,7686,1,1), +(7374,2147483648,4063,1,2,0,687,7682,1,2), +(7375,2147483648,4063,1,2,1,687,7684,1,2), +(7376,2147483648,4063,1,2,2,687,7686,1,2), +(7377,2147483648,4063,1,2,3,687,7688,1,2), +(7378,2147483648,4063,1,2,4,687,7683,1,2), +(7379,2147483648,4063,1,2,5,687,7690,1,2), +(7380,2147483648,4063,1,2,6,687,7686,1,2), +(7381,2147483648,4063,1,2,0,687,7692,1,3), +(7382,2147483648,4063,1,2,1,687,7688,1,3), +(7383,2147483648,4063,1,2,2,687,7690,1,3), +(7384,2147483648,4063,1,2,3,687,7692,1,3), +(7385,2147483648,4063,1,2,4,687,7693,1,3), +(7386,2147483648,4063,1,2,5,687,7688,1,3), +(7387,2147483648,4063,1,2,6,687,7690,1,3), +(7390,2147483648,4063,1,2,0,687,7692,1,4), +(7391,2147483648,4063,1,2,1,687,7688,1,4), +(7392,2147483648,4063,1,2,2,687,7690,1,4), +(7393,2147483648,4063,1,2,3,687,7690,1,4), +(7394,2147483648,4063,1,2,4,687,7693,1,4), +(7395,2147483648,4063,1,2,5,687,7688,1,4), +(7396,2147483648,4063,1,2,6,687,7688,1,4), +(7397,2147483648,4063,1,2,0,687,7692,1,5), +(7398,2147483648,4063,1,2,1,687,7690,1,5), +(7399,2147483648,4063,1,2,2,687,7690,1,5), +(7400,2147483648,4063,1,2,3,687,7692,1,5), +(7401,2147483648,4063,1,2,4,687,7693,1,5), +(7402,2147483648,4063,1,2,5,687,7690,1,5), +(7403,2147483648,4063,1,2,6,687,7690,1,5), +(7404,2147483648,4095,1,2,0,687,7696,1,6), +(7405,2147483648,4063,0,2,0,686,7669,1,1), +(7406,2147483648,4063,0,2,1,686,7670,1,1), +(7407,2147483648,4063,0,2,2,686,7671,1,1), +(7408,2147483648,4063,0,2,3,686,7673,1,1), +(7409,2147483648,4063,0,2,4,686,7675,1,1), +(7410,2147483648,4063,0,2,5,686,7677,1,1), +(7411,2147483648,4063,0,2,6,686,7673,1,1), +(7412,2147483648,4063,0,2,0,686,7669,1,2), +(7413,2147483648,4063,0,2,1,686,7670,1,2), +(7414,2147483648,4063,0,2,2,686,7671,1,2), +(7415,2147483648,4063,0,2,3,686,7673,1,2), +(7416,2147483648,4063,0,2,4,686,7675,1,2), +(7417,2147483648,4063,0,2,5,686,7677,1,2), +(7418,2147483648,4063,0,2,6,686,7673,1,2), +(7419,2147483648,4063,0,2,0,686,7679,1,3), +(7420,2147483648,4063,0,2,1,686,7680,1,3), +(7421,2147483648,4063,0,2,2,686,7675,1,3), +(7422,2147483648,4063,0,2,3,686,7679,1,3), +(7423,2147483648,4063,0,2,4,686,7679,1,3), +(7424,2147483648,4063,0,2,5,686,7679,1,3), +(7425,2147483648,4063,0,2,6,686,7679,1,3), +(7426,2147483648,4063,0,2,0,686,7679,1,4), +(7427,2147483648,4063,0,2,1,686,7680,1,4), +(7428,2147483648,4063,0,2,2,686,7675,1,4), +(7429,2147483648,4063,0,2,3,686,7679,1,4), +(7430,2147483648,4063,0,2,4,686,7679,1,4), +(7431,2147483648,4063,0,2,5,686,7679,1,4), +(7432,2147483648,4063,0,2,6,686,7679,1,4), +(7433,2147483648,4063,0,2,0,686,7679,1,5), +(7434,2147483648,4063,0,2,1,686,7680,1,5), +(7435,2147483648,4063,0,2,2,686,7675,1,5), +(7436,2147483648,4063,0,2,3,686,7679,1,5), +(7437,2147483648,4063,0,2,4,686,7679,1,5), +(7438,2147483648,4063,0,2,5,686,7679,1,5), +(7439,2147483648,4063,0,2,6,686,7679,1,5), +(7440,2147483648,4095,0,2,0,686,7695,1,6), +(7441,256,4095,1,5,0,811,9118,0,0), +(7442,256,4095,1,5,1,811,9118,0,0), +(7443,256,4095,1,5,2,811,9118,0,0), +(7444,256,4095,1,5,3,811,9119,0,0), +(7445,256,4095,1,5,4,811,9120,0,0), +(7446,256,4095,1,5,5,811,9121,0,0), +(7447,256,4095,1,5,6,811,9122,0,0), +(7448,256,4095,1,5,7,811,9123,0,0), +(7449,256,4095,1,5,8,811,9124,0,0), +(7450,256,4095,1,5,9,811,9125,0,0), +(7451,256,4095,1,5,10,811,9126,0,0), +(7452,256,4095,1,5,11,811,9127,0,0), +(7453,256,4095,1,5,12,811,9118,0,0), +(7454,256,4095,1,5,13,811,9118,0,0), +(7455,256,4095,1,5,14,811,9118,0,0), +(7456,256,4095,1,5,15,811,9119,0,0), +(7457,256,4095,1,5,16,811,9120,0,0), +(7458,256,4095,1,5,17,811,9121,0,0), +(7459,256,4095,1,5,18,811,9122,0,0), +(7460,256,4095,1,5,19,811,9123,0,0), +(7461,256,4095,1,5,20,811,9124,0,0), +(7462,256,4095,1,5,21,811,9125,0,0), +(7463,256,4095,1,5,22,811,9126,0,0), +(7464,256,4095,1,5,23,811,9127,0,0), +(7465,256,4095,1,5,24,811,9120,0,0), +(7466,4,4063,0,2,0,544,5533,1,1), +(7467,4,4063,0,2,1,544,5534,1,1), +(7468,4,4063,0,2,2,544,5535,1,1), +(7469,4,4063,0,2,3,544,5536,1,1), +(7470,4,4063,0,2,4,544,5537,1,1), +(7471,4,4063,0,2,5,544,5538,1,1), +(7472,4,4063,0,2,6,544,5539,1,1), +(7473,4,4063,0,2,7,544,5540,1,1), +(7474,4,4063,0,2,8,544,5541,1,1), +(7475,4,4063,0,2,9,544,5540,1,1), +(7476,4,4063,0,2,0,544,5533,1,2), +(7477,4,4063,0,2,1,544,5534,1,2), +(7478,4,4063,0,2,2,544,5535,1,2), +(7479,4,4063,0,2,3,544,5536,1,2), +(7480,4,4063,0,2,4,544,5537,1,2), +(7481,4,4063,0,2,5,544,5538,1,2), +(7482,4,4063,0,2,6,544,5539,1,2), +(7483,4,4063,0,2,7,544,5540,1,2), +(7484,4,4063,0,2,8,544,5541,1,2), +(7485,4,4063,0,2,9,544,5540,1,2), +(7486,4,4063,0,2,0,544,5533,1,3), +(7487,4,4063,0,2,1,544,5534,1,3), +(7488,4,4063,0,2,2,544,5535,1,3), +(7489,4,4063,0,2,3,544,5536,1,3), +(7490,4,4063,0,2,4,544,5537,1,3), +(7491,4,4063,0,2,5,544,5538,1,3), +(7492,4,4063,0,2,6,544,5539,1,3), +(7493,4,4063,0,2,7,544,5540,1,3), +(7494,4,4063,0,2,8,544,5541,1,3), +(7495,4,4063,0,2,9,544,5540,1,3), +(7496,4,4063,0,2,0,544,5534,1,4), +(7497,4,4063,0,2,1,544,5534,1,4), +(7498,4,4063,0,2,2,544,5535,1,4), +(7499,4,4063,0,2,3,544,5536,1,4), +(7500,4,4063,0,2,4,544,5537,1,4), +(7501,4,4063,0,2,5,544,5538,1,4), +(7502,4,4063,0,2,6,544,5539,1,4), +(7503,4,4063,0,2,7,544,5540,1,4), +(7504,4,4063,0,2,8,544,5541,1,4), +(7505,4,4063,0,2,9,544,5540,1,4), +(7506,4,4063,0,2,0,544,5533,1,5), +(7507,4,4063,0,2,1,544,5534,1,5), +(7508,4,4063,0,2,2,544,5535,1,5), +(7509,4,4063,0,2,3,544,5542,1,5), +(7510,4,4063,0,2,4,544,5537,1,5), +(7511,4,4063,0,2,5,544,5538,1,5), +(7512,4,4063,0,2,6,544,5539,1,5), +(7513,4,4063,0,2,7,544,5540,1,5), +(7514,4,4063,0,2,8,544,5541,1,5), +(7515,4,4063,0,2,9,544,5540,1,5), +(7516,4,4063,0,2,0,544,5539,1,6), +(7517,4,4063,0,2,1,544,5542,1,6), +(7518,4,4063,0,2,2,544,5544,1,6), +(7519,4,4063,0,2,3,544,5544,1,6), +(7520,4,4063,0,2,4,544,5537,1,6), +(7521,4,4063,0,2,5,544,5538,1,6), +(7522,4,4063,0,2,6,544,5539,1,6), +(7523,4,4063,0,2,7,544,5534,1,6), +(7524,4,4063,0,2,8,544,5542,1,6), +(7525,4,4063,0,2,9,544,5544,1,6), +(7526,4,4063,0,2,0,544,5540,1,7), +(7527,4,4063,0,2,1,544,5540,1,7), +(7528,4,4063,0,2,2,544,5540,1,7), +(7529,4,4063,0,2,3,544,5540,1,7), +(7530,4,4063,0,2,4,544,5540,1,7), +(7531,4,4063,0,2,5,544,5540,1,7), +(7532,4,4063,0,2,6,544,5533,1,7), +(7533,4,4063,0,2,7,544,5538,1,7), +(7534,4,4063,0,2,8,544,5540,1,7), +(7535,4,4063,0,2,9,544,5544,1,7), +(7536,4,4063,0,2,0,544,5542,1,8), +(7537,4,4063,0,2,1,544,5543,1,8), +(7538,4,4063,0,2,2,544,5542,1,8), +(7539,4,4063,0,2,3,544,5542,1,8), +(7540,4,4063,0,2,4,544,5541,1,8), +(7541,4,4063,0,2,5,544,5542,1,8), +(7542,4,4063,0,2,6,544,5542,1,8), +(7543,4,4063,0,2,7,544,5539,1,8), +(7544,4,4063,0,2,8,544,5541,1,8), +(7545,4,4063,0,2,9,544,5544,1,8), +(7546,4,4095,0,2,0,544,15731,1,26), +(7547,68719476736,4095,0,1,15,797,15733,0,0), +(7548,68719476736,4095,1,1,15,799,15734,0,0), +(7549,8,2047,0,8,0,48,789,2,1), +(7550,8,2047,0,8,0,48,789,2,2), +(7551,8,2047,0,8,0,48,789,2,3), +(7552,8,2047,0,8,0,48,789,2,4), +(7553,8,4095,0,8,0,48,795,2,5), +(7554,8,2047,0,8,0,48,789,2,6), +(7555,8,2047,0,8,0,48,789,2,7), +(7556,8,2047,0,8,0,48,789,2,8), +(7557,8,2047,0,8,0,48,789,2,9), +(7558,8,2047,0,8,0,48,789,2,10), +(7559,8,2047,0,8,0,48,789,2,11), +(7560,8,2047,0,8,0,48,789,2,12), +(7561,8,2047,0,8,0,48,789,2,13), +(7562,8,4095,0,8,0,48,795,2,14), +(7563,8,2047,0,8,0,48,789,2,15), +(7564,8,2047,0,8,0,48,789,2,16), +(7565,8,2047,0,8,0,48,789,2,17), +(7566,6291456,4063,1,2,0,464,4162,0,0), +(7567,6291456,4063,1,2,1,464,4153,0,0), +(7568,6291456,4063,1,2,2,464,4161,0,0), +(7569,6291456,4063,1,2,3,464,4163,0,0), +(7570,6291456,4063,1,2,4,464,4154,0,0), +(7571,6291456,4063,1,2,5,464,4160,0,0), +(7572,6291456,4063,1,2,6,464,4160,0,0), +(7573,6291456,4063,1,2,7,464,4156,0,0), +(7574,6291456,4063,1,2,8,464,4152,0,0), +(7575,6291456,4063,1,2,9,464,4154,0,0), +(7576,6291456,4063,1,2,10,464,4155,0,0), +(7577,6291456,4063,1,2,11,464,4165,0,0), +(7578,6291456,4063,1,2,12,464,4165,0,0), +(7579,6291456,4063,1,2,13,464,4155,0,0), +(7580,6291456,32,1,2,14,464,4535,0,0), +(7581,6291456,32,1,2,15,464,4535,0,0), +(7582,6291456,32,1,2,16,464,4535,0,0), +(7583,6291456,32,1,2,17,464,4535,0,0), +(7584,6291456,32,1,2,18,464,4535,0,0), +(7585,6291456,32,1,2,19,464,4535,0,0), +(7586,6291456,32,1,2,20,464,4535,0,0), +(7587,6291456,32,1,2,21,464,4535,0,0), +(7588,6291456,32,1,2,22,464,4535,0,0), +(7589,6291456,32,1,2,23,464,4535,0,0), +(7590,6291456,32,1,2,24,464,4535,0,0), +(7591,6291456,32,1,2,25,464,4535,0,0), +(7592,6291456,32,1,2,26,464,4535,0,0), +(7593,6291456,32,1,2,27,464,4535,0,0), +(7594,6291456,4063,1,2,28,464,4155,0,0), +(7595,6291456,32,1,2,29,464,4535,0,0), +(7596,6291456,4063,1,2,30,464,4165,0,0), +(7597,6291456,32,1,2,31,464,4535,0,0), +(7598,6291456,4063,0,2,0,463,4138,1,0), +(7599,6291456,4063,0,2,1,463,4140,1,0), +(7600,6291456,4063,0,2,2,463,4133,0,0), +(7601,6291456,4063,0,2,3,463,4135,1,0), +(7602,6291456,4063,0,2,4,463,4141,1,0), +(7603,6291456,32,0,2,5,463,4534,0,0), +(7604,6291456,32,0,2,6,463,4534,0,0), +(7605,6291456,32,0,2,7,463,4534,0,0), +(7606,6291456,32,0,2,8,463,4534,0,0), +(7607,6291456,32,0,2,9,463,4534,0,0), +(7608,6291456,32,0,2,10,463,4534,0,0), +(7609,6291456,32,0,2,11,463,4534,0,0), +(7610,6291456,32,0,2,12,463,4534,0,0), +(7611,6291456,32,0,2,13,463,4534,0,0), +(7612,6291456,32,0,2,14,463,4534,0,0), +(7613,6291456,32,0,2,17,463,4534,0,0), +(7614,6291456,32,0,2,18,463,4534,0,0), +(7615,6291456,4063,0,2,15,463,4140,1,0), +(7616,6291456,4063,0,2,16,463,4133,0,0), +(7617,32,4095,0,5,7,801,9014,0,0), +(7618,32,4095,0,5,7,73,1107,0,0), +(7619,32,4095,0,5,7,672,7425,0,0), +(7620,32,4095,0,5,7,671,7408,0,0), +(7621,32,4095,0,5,7,657,7328,0,0), +(7622,32,4095,0,5,7,803,9017,0,0), +(7623,32,4095,0,5,7,653,7316,0,0), +(7624,32,4095,0,5,7,661,7343,0,0), +(7625,32,4095,1,1,14,74,1128,0,0), +(7626,32,4095,1,1,15,74,1129,0,0), +(7627,32,4095,1,1,16,74,1130,0,0), +(7628,32,4095,1,1,17,74,1131,0,0), +(7629,32,4095,1,1,18,74,1132,0,0), +(7630,32,4095,1,1,19,74,1133,0,0), +(7631,32,4095,1,1,20,74,1134,0,0), +(7632,6291456,4095,0,2,0,10,20,1,1), +(7633,6291456,4095,0,2,0,10,20,1,2), +(7634,6291456,4095,0,2,0,10,20,1,3), +(7635,6291456,4095,0,2,0,10,20,1,4), +(7636,6291456,4095,0,2,0,10,20,1,5), +(7637,6291456,4095,0,2,0,10,22,1,6), +(7638,6291456,4095,0,2,0,10,31,1,7), +(7639,6291456,4095,0,2,0,10,20,1,8), +(7641,6291456,4095,0,2,10,10,22,1,7), +(7642,6291456,4095,0,2,10,10,31,1,6), +(7644,6291456,4095,0,2,11,10,31,1,6), +(7645,6291456,4095,0,2,11,10,22,1,7), +(7646,6291456,4095,0,2,12,10,20,1,6), +(7647,6291456,4095,0,2,12,10,20,1,7), +(7648,6291456,4095,0,2,13,10,22,1,6), +(7649,6291456,4095,0,2,13,10,22,1,7), +(7650,6291456,4095,0,2,14,10,31,1,6), +(7651,6291456,4095,0,2,14,10,31,1,7), +(7652,6291456,4095,1,2,7,15,109,1,0), +(7653,6291456,4095,1,2,7,15,109,1,1), +(7654,6291456,4095,1,2,7,15,109,1,2), +(7655,6291456,4095,1,2,7,15,109,1,3), +(7656,6291456,4095,1,2,7,15,109,1,4), +(7657,6291456,4095,1,2,7,15,109,1,5), +(7658,6291456,4095,1,2,7,15,109,1,6), +(7659,6291456,4095,1,2,7,15,109,1,7), +(7660,6291456,4095,1,2,7,15,109,1,8), +(7661,6291456,4095,1,2,7,15,102,1,9), +(7662,6291456,4095,1,2,7,15,102,1,10), +(7663,6291456,4095,1,2,7,15,102,1,11), +(7664,6291456,4095,1,2,9,15,111,1,0), +(7665,6291456,4095,1,2,9,15,111,1,1), +(7666,6291456,4095,1,2,9,15,111,1,2), +(7667,6291456,4095,1,2,9,15,111,1,3), +(7668,6291456,4095,1,2,9,15,111,1,4), +(7669,6291456,4095,1,2,9,15,111,1,5), +(7670,6291456,4095,1,2,9,15,111,1,6), +(7671,6291456,4095,1,2,9,15,111,1,7), +(7672,6291456,4095,1,2,9,15,111,1,8), +(7673,6291456,4095,1,2,9,15,103,1,9), +(7674,6291456,4095,1,2,9,15,103,1,10), +(7675,6291456,4095,1,2,9,15,103,1,11), +(7676,6291456,4095,1,2,13,15,115,1,0), +(7677,6291456,4095,1,2,13,15,115,1,1), +(7678,6291456,4095,1,2,13,15,115,1,2), +(7679,6291456,4095,1,2,13,15,115,1,3), +(7680,6291456,4095,1,2,13,15,115,1,4), +(7681,6291456,4095,1,2,13,15,115,1,5), +(7682,6291456,4095,1,2,13,15,115,1,6), +(7683,6291456,4095,1,2,13,15,115,1,7), +(7684,6291456,4095,1,2,13,15,115,1,8), +(7685,6291456,4095,1,2,13,15,112,1,9), +(7686,6291456,4095,1,2,13,15,112,1,10), +(7687,6291456,4095,1,2,13,15,112,1,11), +(7688,4,4063,0,2,0,31,551,1,1), +(7689,4,4063,0,2,0,31,551,1,2), +(7690,4,4063,0,2,0,31,551,1,3), +(7691,4,4063,0,2,0,31,551,1,4), +(7692,4,4063,0,2,0,31,551,1,5), +(7693,4,4063,0,2,0,31,551,1,6), +(7694,4,4063,0,2,0,31,551,1,7), +(7695,4,4063,0,2,0,31,551,1,8), +(7696,4,32,0,2,0,31,561,1,19), +(7697,4,32,0,2,0,31,561,1,20), +(7698,4,32,0,2,0,31,561,1,21), +(7699,4,4063,0,2,0,31,551,1,26), +(7700,4,4063,0,2,1,31,552,1,1), +(7701,4,4063,0,2,1,31,552,1,2), +(7702,4,4063,0,2,1,31,552,1,3), +(7703,4,4063,0,2,1,31,552,1,4), +(7704,4,4063,0,2,1,31,552,1,5), +(7705,4,4063,0,2,1,31,552,1,6), +(7706,4,4063,0,2,1,31,552,1,7), +(7707,4,4063,0,2,1,31,552,1,8), +(7708,4,32,0,2,1,31,562,1,19), +(7709,4,32,0,2,1,31,562,1,20), +(7710,4,32,0,2,1,31,562,1,21), +(7711,4,4063,0,2,9,31,560,1,1), +(7712,4,4063,0,2,9,31,560,1,2), +(7713,4,4063,0,2,9,31,560,1,3), +(7714,4,4063,0,2,9,31,560,1,4), +(7715,4,4063,0,2,9,31,560,1,5), +(7716,4,4063,0,2,9,31,560,1,6), +(7717,4,4063,0,2,9,31,560,1,7), +(7718,4,4063,0,2,9,31,560,1,8), +(7719,4,32,0,2,9,31,570,1,19), +(7720,4,32,0,2,9,31,570,1,20), +(7721,4,32,0,2,9,31,570,1,21), +(7722,4,4063,1,2,0,36,634,1,1), +(7723,4,4063,1,2,0,36,634,1,2), +(7724,4,4063,1,2,0,36,634,1,3), +(7725,4,4063,1,2,0,36,634,1,4), +(7726,4,4063,1,2,0,36,634,1,5), +(7727,4,4063,1,2,0,36,634,1,6), +(7728,4,4063,1,2,0,36,634,1,7), +(7729,4,4063,1,2,0,36,634,1,8), +(7730,4,32,1,2,0,36,644,1,11), +(7731,4,32,1,2,0,36,644,1,12), +(7732,4,32,1,2,0,36,644,1,13), +(7733,4,4063,1,2,0,36,634,1,18), +(7734,4,4063,1,2,5,36,639,1,1), +(7735,4,4063,1,2,5,36,639,1,2), +(7736,4,4063,1,2,5,36,639,1,3), +(7737,4,4063,1,2,5,36,639,1,4), +(7738,4,4063,1,2,5,36,639,1,5), +(7739,4,4063,1,2,5,36,639,1,6), +(7740,4,4063,1,2,5,36,639,1,7), +(7741,4,4063,1,2,5,36,639,1,8), +(7742,4,32,1,2,5,36,649,1,11), +(7743,4,32,1,2,5,36,649,1,12), +(7744,4,32,1,2,5,36,649,1,13), +(7745,4,4063,1,2,6,36,640,1,1), +(7746,4,4063,1,2,6,36,640,1,2), +(7747,4,4063,1,2,6,36,640,1,3), +(7748,4,4063,1,2,6,36,640,1,4), +(7749,4,4063,1,2,6,36,640,1,5), +(7750,4,4063,1,2,6,36,640,1,6), +(7751,4,4063,1,2,6,36,640,1,7), +(7752,4,4063,1,2,6,36,640,1,8), +(7753,4,32,1,2,6,36,650,1,11), +(7754,4,32,1,2,6,36,650,1,12), +(7755,4,32,1,2,6,36,650,1,13), +(7756,8,4063,0,2,0,41,719,1,1), +(7757,8,4063,0,2,0,41,719,1,2), +(7758,8,4063,0,2,0,41,719,1,3), +(7759,8,4063,0,2,0,41,719,1,4), +(7760,8,4063,0,2,0,41,719,1,5), +(7761,8,4063,0,2,0,41,719,1,6), +(7762,8,4063,0,2,0,41,719,1,7), +(7763,8,4063,0,2,0,41,719,1,8), +(7764,8,4063,0,2,0,41,719,1,14), +(7765,8,4063,0,2,0,41,719,1,15), +(7766,8,4063,0,2,0,41,719,1,16), +(7767,8,4063,0,2,0,41,719,1,17), +(7768,8,4063,0,2,0,41,719,1,18), +(7769,8,4063,0,2,0,41,719,1,19), +(7770,8,4063,0,2,0,41,719,1,20), +(7771,8,4063,0,2,0,41,719,1,21), +(7772,8,4063,0,2,0,41,719,1,22), +(7773,8,32,0,2,0,41,728,1,9), +(7774,8,32,0,2,0,41,728,1,10), +(7775,8,32,0,2,0,41,728,1,11), +(7776,8,4063,0,2,1,41,720,1,1), +(7777,8,4063,0,2,1,41,720,1,2), +(7778,8,4063,0,2,1,41,720,1,3), +(7779,8,4063,0,2,1,41,720,1,4), +(7780,8,4063,0,2,1,41,720,1,5), +(7781,8,4063,0,2,1,41,720,1,6), +(7782,8,4063,0,2,1,41,720,1,7), +(7783,8,4063,0,2,1,41,720,1,8), +(7784,8,4063,0,2,1,41,720,1,14), +(7785,8,4063,0,2,1,41,720,1,15), +(7786,8,4063,0,2,1,41,720,1,16), +(7787,8,4063,0,2,1,41,720,1,17), +(7788,8,4063,0,2,1,41,720,1,18), +(7789,8,4063,0,2,1,41,720,1,19), +(7790,8,4063,0,2,1,41,720,1,22), +(7791,8,32,0,2,1,41,729,1,9), +(7792,8,32,0,2,1,41,729,1,10), +(7793,8,32,0,2,1,41,729,1,11), +(7794,8,4063,0,2,4,41,723,1,1), +(7795,8,4063,0,2,4,41,723,1,2), +(7796,8,4063,0,2,4,41,723,1,3), +(7797,8,4063,0,2,4,41,723,1,4), +(7798,8,4063,0,2,4,41,723,1,5), +(7799,8,4063,0,2,4,41,723,1,6), +(7800,8,4063,0,2,4,41,723,1,7), +(7801,8,4063,0,2,4,41,723,1,8), +(7802,8,4063,0,2,4,41,723,1,14), +(7803,8,4063,0,2,4,41,723,1,15), +(7804,8,4063,0,2,4,41,723,1,16), +(7805,8,4063,0,2,4,41,723,1,17), +(7806,8,4063,0,2,4,41,723,1,18), +(7807,8,4063,0,2,4,41,723,1,19), +(7808,8,4063,0,2,4,41,723,1,22), +(7809,8,32,0,2,4,41,732,1,9), +(7810,8,32,0,2,4,41,732,1,10), +(7811,8,32,0,2,4,41,732,1,11), +(7812,8,4063,1,2,0,50,825,1,1), +(7813,8,4063,1,2,0,50,825,1,2), +(7814,8,4063,1,2,0,50,825,1,3), +(7815,8,4063,1,2,0,50,825,1,4), +(7816,8,4063,1,2,0,50,825,1,5), +(7817,8,4063,1,2,0,50,825,1,6), +(7818,8,4063,1,2,0,50,825,1,7), +(7819,8,4063,1,2,0,50,825,1,8), +(7820,8,4063,1,2,0,50,825,1,14), +(7821,8,4063,1,2,0,50,825,1,15), +(7822,8,4063,1,2,0,50,825,1,16), +(7823,8,4063,1,2,0,50,825,1,17), +(7824,8,4063,1,2,0,50,825,1,18), +(7825,8,4063,1,2,0,50,825,1,19), +(7826,8,4063,1,2,0,50,825,1,20), +(7827,8,4063,1,2,0,50,825,1,21), +(7828,8,4063,1,2,0,50,825,1,22), +(7829,8,32,1,2,0,50,834,1,9), +(7830,8,32,1,2,0,50,834,1,10), +(7831,8,32,1,2,0,50,834,1,11), +(7832,8,4063,1,2,6,50,831,1,1), +(7833,8,4063,1,2,6,50,831,1,2), +(7834,8,4063,1,2,6,50,831,1,3), +(7835,8,4063,1,2,6,50,831,1,4), +(7836,8,4063,1,2,6,50,831,1,5), +(7837,8,4063,1,2,6,50,831,1,6), +(7838,8,4063,1,2,6,50,831,1,7), +(7839,8,4063,1,2,6,50,831,1,8), +(7840,8,4063,1,2,6,50,831,1,22), +(7841,8,32,1,2,6,50,840,1,9), +(7842,8,32,1,2,6,50,840,1,10), +(7843,8,32,1,2,6,50,840,1,11), +(7844,8,4063,1,2,7,50,832,1,1), +(7845,8,4063,1,2,7,50,832,1,2), +(7846,8,4063,1,2,7,50,832,1,3), +(7847,8,4063,1,2,7,50,832,1,4), +(7848,8,4063,1,2,7,50,832,1,5), +(7849,8,4063,1,2,7,50,832,1,6), +(7850,8,4063,1,2,7,50,832,1,7), +(7851,8,4063,1,2,7,50,832,1,8), +(7852,8,4063,1,2,7,50,832,1,22), +(7853,8,32,1,2,7,50,841,1,9), +(7854,8,32,1,2,7,50,841,1,10), +(7855,8,32,1,2,7,50,841,1,11), +(7856,64,4063,0,2,0,81,1185,1,1), +(7857,64,4063,0,2,0,81,1185,1,2), +(7858,64,4063,0,2,0,81,1185,1,3), +(7859,64,4063,0,2,0,81,1185,1,4), +(7860,64,4063,0,2,0,81,1185,1,10), +(7861,64,32,0,2,0,81,1192,1,7), +(7862,64,32,0,2,0,81,1192,1,8), +(7863,64,32,0,2,0,81,1192,1,9), +(7864,64,4063,0,2,2,81,1187,1,1), +(7865,64,4063,0,2,2,81,1187,1,2), +(7866,64,4063,0,2,2,81,1187,1,3), +(7867,64,4063,0,2,2,81,1187,1,4), +(7868,64,32,0,2,2,81,1194,1,7), +(7869,64,32,0,2,2,81,1194,1,8), +(7870,64,32,0,2,2,81,1194,1,9), +(7871,64,4063,0,2,3,81,1188,1,1), +(7872,64,4063,0,2,3,81,1188,1,2), +(7873,64,4063,0,2,3,81,1188,1,3), +(7874,64,4063,0,2,3,81,1188,1,4), +(7875,64,32,0,2,3,81,1195,1,7), +(7876,64,32,0,2,3,81,1195,1,8), +(7877,64,32,0,2,3,81,1195,1,9), +(7878,64,4063,1,2,0,86,1246,1,1), +(7879,64,4063,1,2,0,86,1246,1,2), +(7880,64,4063,1,2,0,86,1246,1,3), +(7881,64,4063,1,2,0,86,1246,1,4), +(7882,64,4063,1,2,0,86,1246,1,10), +(7883,64,32,1,2,0,86,1253,1,7), +(7884,64,32,1,2,0,86,1253,1,8), +(7885,64,32,1,2,0,86,1253,1,9), +(7886,64,4063,1,2,3,86,1249,1,1), +(7887,64,4063,1,2,3,86,1249,1,2), +(7888,64,4063,1,2,3,86,1249,1,3), +(7889,64,4063,1,2,3,86,1249,1,4), +(7890,64,32,1,2,3,86,1256,1,7), +(7891,64,32,1,2,3,86,1256,1,8), +(7892,64,32,1,2,3,86,1256,1,9), +(7893,64,4063,1,2,5,86,1251,1,1), +(7894,64,4063,1,2,5,86,1251,1,2), +(7895,64,4063,1,2,5,86,1251,1,3), +(7896,64,4063,1,2,5,86,1251,1,4), +(7897,64,32,1,2,5,86,1258,1,7), +(7898,64,32,1,2,5,86,1258,1,8), +(7899,64,32,1,2,5,86,1258,1,9), +(7900,1024,4063,0,2,1,129,1891,1,1), +(7901,1024,4063,0,2,1,129,1891,1,2), +(7902,1024,4063,0,2,1,129,1891,1,3), +(7903,1024,4063,0,2,1,129,1891,1,4), +(7904,1024,4063,0,2,1,129,1891,1,5), +(7905,1024,4063,0,2,1,129,1891,1,6), +(7906,1024,4063,0,2,1,129,1891,1,7), +(7907,1024,4063,0,2,1,129,1891,1,8), +(7908,1024,4063,0,2,1,129,1891,1,9), +(7909,1024,4063,0,2,1,129,1891,1,10), +(7910,1024,4063,0,2,1,129,1891,1,11), +(7911,1024,4063,0,2,1,129,1891,1,12), +(7912,1024,4063,0,2,1,129,1891,1,13), +(7913,1024,32,0,2,1,129,1901,1,14), +(7914,1024,32,0,2,1,129,1901,1,15), +(7915,1024,32,0,2,1,129,1901,1,16), +(7916,1024,4063,0,2,4,129,1894,1,1), +(7917,1024,4063,0,2,4,129,1894,1,2), +(7918,1024,4063,0,2,4,129,1894,1,3), +(7919,1024,4063,0,2,4,129,1894,1,4), +(7920,1024,4063,0,2,4,129,1894,1,5), +(7921,1024,4063,0,2,4,129,1894,1,6), +(7922,1024,4063,0,2,4,129,1894,1,7), +(7923,1024,4063,0,2,4,129,1894,1,8), +(7924,1024,4063,0,2,4,129,1894,1,9), +(7925,1024,4063,0,2,4,129,1894,1,10), +(7926,1024,4063,0,2,4,129,1894,1,11), +(7927,1024,4063,0,2,4,129,1894,1,12), +(7928,1024,4063,0,2,4,129,1894,1,13), +(7929,1024,32,0,2,4,129,1904,1,14), +(7930,1024,32,0,2,4,129,1904,1,15), +(7931,1024,32,0,2,4,129,1904,1,16), +(7932,1024,4063,0,2,9,129,1899,1,1), +(7933,1024,4063,0,2,9,129,1899,1,2), +(7934,1024,4063,0,2,9,129,1899,1,3), +(7935,1024,4063,0,2,9,129,1899,1,4), +(7936,1024,4063,0,2,9,129,1899,1,5), +(7937,1024,4063,0,2,9,129,1899,1,6), +(7938,1024,4063,0,2,9,129,1899,1,7), +(7939,1024,4063,0,2,9,129,1899,1,8), +(7940,1024,4063,0,2,9,129,1899,1,9), +(7941,1024,4063,0,2,9,129,1899,1,10), +(7942,1024,4063,0,2,9,129,1899,1,11), +(7943,1024,4063,0,2,9,129,1899,1,12), +(7944,1024,4063,0,2,9,129,1899,1,13), +(7945,1024,32,0,2,9,129,1909,1,14), +(7946,1024,32,0,2,9,129,1909,1,15), +(7947,1024,32,0,2,9,129,1909,1,16), +(7948,1024,4063,1,2,0,134,1963,1,1), +(7949,1024,4063,1,2,0,134,1963,1,2), +(7950,1024,4063,1,2,0,134,1963,1,3), +(7951,1024,4063,1,2,0,134,1963,1,4), +(7952,1024,4063,1,2,0,134,1963,1,5), +(7953,1024,4063,1,2,0,134,1963,1,6), +(7954,1024,4063,1,2,0,134,1963,1,7), +(7955,1024,4063,1,2,0,134,1963,1,8), +(7956,1024,4063,1,2,0,134,1963,1,9), +(7957,1024,4063,1,2,0,134,1963,1,10), +(7958,1024,4063,1,2,0,134,1963,1,11), +(7959,1024,4063,1,2,0,134,1963,1,18), +(7960,1024,32,1,2,0,134,1973,1,12), +(7961,1024,32,1,2,0,134,1973,1,13), +(7962,1024,32,1,2,0,134,1973,1,14), +(7963,1024,4063,1,2,4,134,1967,1,1), +(7964,1024,4063,1,2,4,134,1967,1,2), +(7965,1024,4063,1,2,4,134,1967,1,3), +(7966,1024,4063,1,2,4,134,1967,1,4), +(7967,1024,4063,1,2,4,134,1967,1,5), +(7968,1024,4063,1,2,4,134,1967,1,6), +(7969,1024,4063,1,2,4,134,1967,1,7), +(7970,1024,4063,1,2,4,134,1967,1,8), +(7971,1024,4063,1,2,4,134,1967,1,9), +(7972,1024,4063,1,2,4,134,1967,1,10), +(7973,1024,4063,1,2,4,134,1967,1,11), +(7974,1024,32,1,2,4,134,1977,1,12), +(7975,1024,32,1,2,4,134,1977,1,13), +(7976,1024,32,1,2,4,134,1977,1,14), +(7977,1024,4063,1,2,8,134,1971,1,1), +(7978,1024,4063,1,2,8,134,1971,1,2), +(7979,1024,4063,1,2,8,134,1971,1,3), +(7980,1024,4063,1,2,8,134,1971,1,4), +(7981,1024,4063,1,2,8,134,1971,1,5), +(7982,1024,4063,1,2,8,134,1971,1,6), +(7983,1024,4063,1,2,8,134,1971,1,7), +(7984,1024,4063,1,2,8,134,1971,1,8), +(7985,1024,4063,1,2,8,134,1971,1,9), +(7986,1024,4063,1,2,8,134,1971,1,10), +(7987,1024,4063,1,2,8,134,1971,1,11), +(7988,1024,32,1,2,8,134,1981,1,12), +(7989,1024,32,1,2,8,134,1981,1,13), +(7990,1024,32,1,2,8,134,1981,1,14), +(7991,2097152,4063,0,2,0,204,2241,1,1), +(7992,2097152,4063,0,2,0,204,2241,1,2), +(7993,2097152,4063,0,2,0,204,2241,1,3), +(7994,2097152,4063,0,2,0,204,2241,1,4), +(7995,2097152,4063,0,2,0,204,2241,1,8), +(7996,2097152,32,0,2,0,204,2246,1,5), +(7997,2097152,32,0,2,0,204,2246,1,6), +(7998,2097152,32,0,2,0,204,2246,1,7), +(7999,2097152,4063,1,2,7,209,2323,1,1), +(8000,2097152,4063,1,2,7,209,2323,1,2), +(8001,2097152,4063,1,2,7,209,2323,1,3), +(8002,2097152,4063,1,2,7,209,2323,1,4), +(8003,2097152,4063,1,2,7,209,2323,1,5), +(8004,2097152,4063,1,2,7,209,2323,1,6), +(8005,2097152,4063,1,2,7,209,2323,1,7), +(8006,2097152,4063,1,2,7,209,2323,1,8), +(8007,2097152,32,1,2,7,209,2337,1,9), +(8008,2097152,32,1,2,7,209,2337,1,10), +(8009,2097152,32,1,2,7,209,2337,1,11), +(8010,2097152,4063,1,2,9,209,2325,1,1), +(8011,2097152,4063,1,2,9,209,2325,1,2), +(8012,2097152,4063,1,2,9,209,2325,1,3), +(8013,2097152,4063,1,2,9,209,2325,1,4), +(8014,2097152,4063,1,2,9,209,2325,1,5), +(8015,2097152,4063,1,2,9,209,2325,1,6), +(8016,2097152,4063,1,2,9,209,2325,1,7), +(8017,2097152,4063,1,2,9,209,2325,1,8), +(8018,2097152,32,1,2,9,209,2339,1,9), +(8019,2097152,32,1,2,9,209,2339,1,10), +(8020,2097152,32,1,2,9,209,2339,1,11), +(8021,2097152,4063,1,2,13,209,2329,1,1), +(8022,2097152,4063,1,2,13,209,2329,1,2), +(8023,2097152,4063,1,2,13,209,2329,1,3), +(8024,2097152,4063,1,2,13,209,2329,1,4), +(8025,2097152,4063,1,2,13,209,2329,1,5), +(8026,2097152,4063,1,2,13,209,2329,1,6), +(8027,2097152,4063,1,2,13,209,2329,1,7), +(8028,2097152,4063,1,2,13,209,2329,1,8), +(8029,2097152,32,1,2,13,209,2343,1,9), +(8030,2097152,32,1,2,13,209,2343,1,10), +(8031,2097152,32,1,2,13,209,2343,1,11), +(8032,2,4063,0,2,0,20,384,1,1), +(8033,2,4063,0,2,0,20,384,1,2), +(8034,2,4063,0,2,0,20,384,1,3), +(8035,2,4063,0,2,0,20,384,1,4), +(8036,2,4063,0,2,0,20,384,1,5), +(8037,2,4063,0,2,0,20,384,1,6), +(8038,2,4063,0,2,0,20,384,1,7), +(8039,2,4063,0,2,0,20,384,1,8), +(8040,2,4063,0,2,0,20,384,1,30), +(8041,2,32,0,2,0,20,393,1,15), +(8042,2,32,0,2,0,20,393,1,16), +(8043,2,32,0,2,0,20,393,1,17), +(8044,2,4063,0,2,1,20,385,1,1), +(8045,2,4063,0,2,1,20,385,1,2), +(8046,2,4063,0,2,1,20,385,1,3), +(8047,2,4063,0,2,1,20,385,1,4), +(8048,2,4063,0,2,1,20,385,1,5), +(8049,2,4063,0,2,1,20,385,1,6), +(8050,2,4063,0,2,1,20,385,1,7), +(8051,2,4063,0,2,1,20,385,1,8), +(8052,2,32,0,2,1,20,394,1,15), +(8053,2,32,0,2,1,20,394,1,16), +(8054,2,32,0,2,1,20,394,1,17), +(8055,2,4063,0,2,5,20,389,1,1), +(8056,2,4063,0,2,5,20,389,1,2), +(8057,2,4063,0,2,5,20,389,1,3), +(8058,2,4063,0,2,5,20,389,1,4), +(8059,2,4063,0,2,5,20,389,1,5), +(8060,2,4063,0,2,5,20,389,1,6), +(8061,2,4063,0,2,5,20,389,1,7), +(8062,2,4063,0,2,5,20,389,1,8), +(8063,2,32,0,2,5,20,398,1,15), +(8064,2,32,0,2,5,20,398,1,16), +(8065,2,32,0,2,5,20,398,1,17), +(8066,2,4063,1,2,0,26,472,1,1), +(8067,2,4063,1,2,0,26,472,1,2), +(8068,2,4063,1,2,0,26,472,1,3), +(8069,2,4063,1,2,0,26,472,1,4), +(8070,2,4063,1,2,0,26,472,1,5), +(8071,2,4063,1,2,0,26,472,1,6), +(8072,2,4063,1,2,0,26,472,1,7), +(8073,2,4063,1,2,0,26,472,1,8), +(8074,2,4063,1,2,0,26,472,1,31), +(8075,2,32,1,2,0,26,481,1,11), +(8076,2,32,1,2,0,26,481,1,12), +(8077,2,32,1,2,0,26,481,1,13), +(8078,2,4063,1,2,7,26,479,1,1), +(8079,2,4063,1,2,7,26,479,1,2), +(8080,2,4063,1,2,7,26,479,1,3), +(8081,2,4063,1,2,7,26,479,1,4), +(8082,2,4063,1,2,7,26,479,1,5), +(8083,2,4063,1,2,7,26,479,1,6), +(8084,2,4063,1,2,7,26,479,1,7), +(8085,2,4063,1,2,7,26,479,1,8), +(8086,2,32,1,2,7,26,488,1,11), +(8087,2,32,1,2,7,26,488,1,12), +(8088,2,32,1,2,7,26,488,1,13), +(8089,2,4063,1,2,8,26,480,1,1), +(8090,2,4063,1,2,8,26,480,1,2), +(8091,2,4063,1,2,8,26,480,1,3), +(8092,2,4063,1,2,8,26,480,1,4), +(8093,2,4063,1,2,8,26,480,1,5), +(8094,2,4063,1,2,8,26,480,1,6), +(8095,2,4063,1,2,8,26,480,1,7), +(8096,2,4063,1,2,8,26,480,1,8), +(8097,2,32,1,2,8,26,489,1,11), +(8098,2,32,1,2,8,26,489,1,12), +(8099,2,32,1,2,8,26,489,1,13), +(8100,32,4063,0,2,0,378,1074,1,1), +(8101,32,4063,0,2,0,378,1074,1,2), +(8102,32,4063,0,2,0,378,1074,1,3), +(8103,32,4063,0,2,0,378,1074,1,4), +(8104,32,4063,0,2,0,378,1074,1,5), +(8105,32,4063,0,2,0,378,1074,1,6), +(8106,32,4063,0,2,0,378,1074,1,7), +(8107,32,4063,0,2,0,378,1074,1,8), +(8108,32,4063,0,2,0,378,1074,1,9), +(8109,32,4063,0,2,0,378,1074,1,10), +(8110,32,4063,0,2,0,378,1074,1,11), +(8111,32,4063,0,2,0,378,1074,1,12), +(8112,32,4063,0,2,0,378,1074,1,13), +(8113,32,4063,0,2,0,378,1074,1,14), +(8114,32,4063,0,2,0,378,1074,1,15), +(8115,32,4063,0,2,0,378,1074,1,16), +(8116,32,4063,0,2,0,378,1074,1,17), +(8117,32,4063,0,2,0,378,1074,1,18), +(8118,32,4063,0,2,0,378,1074,1,28), +(8119,32,32,0,2,0,378,1079,1,19), +(8120,32,32,0,2,0,378,1079,1,20), +(8121,32,32,0,2,0,378,1079,1,21), +(8122,32,4063,0,2,2,378,1076,1,1), +(8123,32,4063,0,2,2,378,1076,1,2), +(8124,32,4063,0,2,2,378,1076,1,3), +(8125,32,4063,0,2,2,378,1076,1,4), +(8126,32,4063,0,2,2,378,1076,1,5), +(8127,32,4063,0,2,2,378,1076,1,6), +(8128,32,4063,0,2,2,378,1076,1,7), +(8129,32,4063,0,2,2,378,1076,1,8), +(8130,32,4063,0,2,2,378,1076,1,9), +(8131,32,4063,0,2,2,378,1076,1,10), +(8132,32,4063,0,2,2,378,1076,1,11), +(8133,32,4063,0,2,2,378,1076,1,12), +(8134,32,4063,0,2,2,378,1076,1,13), +(8135,32,4063,0,2,2,378,1076,1,14), +(8136,32,4063,0,2,2,378,1076,1,15), +(8137,32,4063,0,2,2,378,1076,1,16), +(8138,32,4063,0,2,2,378,1076,1,17), +(8139,32,4063,0,2,2,378,1076,1,18), +(8140,32,32,0,2,2,378,1081,1,19), +(8141,32,32,0,2,2,378,1081,1,20), +(8142,32,32,0,2,2,378,1081,1,21), +(8143,32,4063,0,2,4,378,1078,1,1), +(8144,32,4063,0,2,4,378,1078,1,2), +(8145,32,4063,0,2,4,378,1078,1,3), +(8146,32,4063,0,2,4,378,1078,1,4), +(8147,32,4063,0,2,4,378,1078,1,5), +(8148,32,4063,0,2,4,378,1078,1,6), +(8149,32,4063,0,2,4,378,1078,1,7), +(8150,32,4063,0,2,4,378,1078,1,8), +(8151,32,4063,0,2,4,378,1078,1,9), +(8152,32,4063,0,2,4,378,1078,1,10), +(8153,32,4063,0,2,4,378,1078,1,11), +(8154,32,4063,0,2,4,378,1078,1,12), +(8155,32,4063,0,2,4,378,1078,1,13), +(8156,32,4063,0,2,4,378,1078,1,14), +(8157,32,4063,0,2,4,378,1078,1,15), +(8158,32,4063,0,2,4,378,1078,1,16), +(8159,32,4063,0,2,4,378,1078,1,17), +(8160,32,4063,0,2,4,378,1078,1,18), +(8161,32,32,0,2,4,378,1083,1,19), +(8162,32,32,0,2,4,378,1083,1,20), +(8163,32,32,0,2,4,378,1083,1,21), +(8164,32,4063,1,2,0,379,1135,1,1), +(8165,32,4063,1,2,0,379,1135,1,2), +(8166,32,4063,1,2,0,379,1135,1,3), +(8167,32,4063,1,2,0,379,1135,1,4), +(8168,32,4063,1,2,0,379,1135,1,5), +(8169,32,4063,1,2,0,379,1135,1,6), +(8170,32,4063,1,2,0,379,1135,1,7), +(8171,32,4063,1,2,0,379,1135,1,8), +(8172,32,4063,1,2,0,379,1135,1,9), +(8173,32,4063,1,2,0,379,1135,1,10), +(8174,32,4063,1,2,0,379,1135,1,20), +(8175,32,32,1,2,0,379,1139,1,11), +(8176,32,32,1,2,0,379,1139,1,12), +(8177,32,32,1,2,0,379,1139,1,13), +(8178,32,4063,1,2,2,379,1137,1,1), +(8179,32,4063,1,2,2,379,1137,1,2), +(8180,32,4063,1,2,2,379,1137,1,3), +(8181,32,4063,1,2,2,379,1137,1,4), +(8182,32,4063,1,2,2,379,1137,1,5), +(8183,32,4063,1,2,2,379,1137,1,6), +(8184,32,4063,1,2,2,379,1137,1,7), +(8185,32,4063,1,2,2,379,1137,1,8), +(8186,32,4063,1,2,2,379,1137,1,9), +(8187,32,4063,1,2,2,379,1137,1,10), +(8188,32,32,1,2,2,379,1141,1,11), +(8189,32,32,1,2,2,379,1141,1,12), +(8190,32,32,1,2,2,379,1141,1,13), +(8191,32,4063,1,2,3,379,1138,1,1), +(8192,32,4063,1,2,3,379,1138,1,2), +(8193,32,4063,1,2,3,379,1138,1,3), +(8194,32,4063,1,2,3,379,1138,1,4), +(8195,32,4063,1,2,3,379,1138,1,5), +(8196,32,4063,1,2,3,379,1138,1,6), +(8197,32,4063,1,2,3,379,1138,1,7), +(8198,32,4063,1,2,3,379,1138,1,8), +(8199,32,4063,1,2,3,379,1138,1,9), +(8200,32,4063,1,2,3,379,1138,1,10), +(8201,32,32,1,2,3,379,1142,1,11), +(8202,32,32,1,2,3,379,1142,1,12), +(8203,32,32,1,2,3,379,1142,1,13), +(8204,128,4063,0,2,0,91,1315,1,1), +(8205,128,4063,0,2,0,91,1315,1,2), +(8206,128,4063,0,2,0,91,1315,1,3), +(8207,128,4063,0,2,0,91,1315,1,4), +(8208,128,4063,0,2,0,91,1315,1,5), +(8209,128,4063,0,2,0,91,1315,1,18), +(8210,128,32,0,2,0,91,1320,1,15), +(8211,128,32,0,2,0,91,1320,1,16), +(8212,128,32,0,2,0,91,1320,1,17), +(8213,128,4063,0,2,1,91,1316,1,1), +(8214,128,4063,0,2,1,91,1316,1,2), +(8215,128,4063,0,2,1,91,1316,1,3), +(8216,128,4063,0,2,1,91,1316,1,4), +(8217,128,4063,0,2,1,91,1316,1,5), +(8218,128,32,0,2,1,91,1321,1,15), +(8219,128,32,0,2,1,91,1321,1,16), +(8220,128,32,0,2,1,91,1321,1,17), +(8221,128,4063,0,2,3,91,1318,1,1), +(8222,128,4063,0,2,3,91,1318,1,2), +(8223,128,4063,0,2,3,91,1318,1,3), +(8224,128,4063,0,2,3,91,1318,1,4), +(8225,128,4063,0,2,3,91,1318,1,5), +(8226,128,32,0,2,3,91,1323,1,15), +(8227,128,32,0,2,3,91,1323,1,16), +(8228,128,32,0,2,3,91,1323,1,17), +(8229,128,4063,1,2,0,96,1382,1,1), +(8230,128,4063,1,2,0,96,1382,1,2), +(8231,128,4063,1,2,0,96,1382,1,3), +(8232,128,4063,1,2,0,96,1382,1,4), +(8233,128,4063,1,2,0,96,1382,1,5), +(8234,128,4063,1,2,0,96,1382,1,18), +(8235,128,32,1,2,0,96,1388,1,15), +(8236,128,32,1,2,0,96,1388,1,16), +(8237,128,32,1,2,0,96,1388,1,17), +(8238,128,4063,1,2,3,96,1385,1,1), +(8239,128,4063,1,2,3,96,1385,1,2), +(8240,128,4063,1,2,3,96,1385,1,3), +(8241,128,4063,1,2,3,96,1385,1,4), +(8242,128,4063,1,2,3,96,1385,1,5), +(8243,128,32,1,2,3,96,1391,1,15), +(8244,128,32,1,2,3,96,1391,1,16), +(8245,128,32,1,2,3,96,1391,1,17), +(8246,128,4063,1,2,5,96,1387,1,1), +(8247,128,4063,1,2,5,96,1387,1,2), +(8248,128,4063,1,2,5,96,1387,1,3), +(8249,128,4063,1,2,5,96,1387,1,4), +(8250,128,4063,1,2,5,96,1387,1,5), +(8251,128,32,1,2,5,96,1393,1,15), +(8252,128,32,1,2,5,96,1393,1,16), +(8253,128,32,1,2,5,96,1393,1,17), +(8254,512,4063,0,2,2,111,1628,1,1), +(8255,512,4063,0,2,2,111,1628,1,2), +(8256,512,4063,0,2,2,111,1628,1,3), +(8257,512,4063,0,2,2,111,1628,1,4), +(8258,512,4063,0,2,2,111,1628,1,5), +(8259,512,4063,0,2,2,111,1628,1,6), +(8260,512,4063,0,2,2,111,1628,1,7), +(8261,512,4063,0,2,2,111,1628,1,8), +(8262,512,4063,0,2,2,111,1628,1,9), +(8263,512,4063,0,2,2,111,1628,1,19), +(8264,512,4063,0,2,2,111,1628,1,20), +(8265,512,4063,0,2,2,111,1628,1,21), +(8266,512,4063,0,2,2,111,1628,1,22), +(8267,512,4063,0,2,2,111,1628,1,23), +(8268,512,4063,0,2,2,111,1628,1,24), +(8269,512,32,0,2,2,111,1638,1,16), +(8270,512,32,0,2,2,111,1638,1,17), +(8271,512,32,0,2,2,111,1638,1,18), +(8272,512,4063,0,2,4,111,1630,1,1), +(8273,512,4063,0,2,4,111,1630,1,2), +(8274,512,4063,0,2,4,111,1630,1,3), +(8275,512,4063,0,2,4,111,1630,1,4), +(8276,512,4063,0,2,4,111,1630,1,5), +(8277,512,4063,0,2,4,111,1630,1,6), +(8278,512,4063,0,2,4,111,1630,1,7), +(8279,512,4063,0,2,4,111,1630,1,8), +(8280,512,4063,0,2,4,111,1630,1,9), +(8281,512,4063,0,2,4,111,1630,1,19), +(8282,512,4063,0,2,4,111,1630,1,20), +(8283,512,4063,0,2,4,111,1630,1,21), +(8284,512,4063,0,2,4,111,1630,1,22), +(8285,512,4063,0,2,4,111,1630,1,23), +(8286,512,4063,0,2,4,111,1630,1,24), +(8287,512,32,0,2,4,111,1640,1,16), +(8288,512,32,0,2,4,111,1640,1,17), +(8289,512,32,0,2,4,111,1640,1,18), +(8290,512,2015,0,2,7,111,1633,1,1), +(8291,512,2015,0,2,7,111,1633,1,2), +(8292,512,2015,0,2,7,111,1633,1,3), +(8293,512,2015,0,2,7,111,1633,1,4), +(8294,512,2015,0,2,7,111,1633,1,5), +(8295,512,2015,0,2,7,111,1633,1,6), +(8296,512,2015,0,2,7,111,1633,1,7), +(8297,512,2015,0,2,7,111,1633,1,8), +(8298,512,2015,0,2,7,111,1633,1,9), +(8299,512,32,0,2,7,111,1643,1,16), +(8300,512,32,0,2,7,111,1643,1,17), +(8301,512,32,0,2,7,111,1643,1,18), +(8302,512,4063,1,2,0,120,1758,1,1), +(8303,512,4063,1,2,0,120,1758,1,2), +(8304,512,4063,1,2,0,120,1758,1,3), +(8305,512,4063,1,2,0,120,1758,1,4), +(8306,512,4063,1,2,0,120,1758,1,5), +(8307,512,4063,1,2,0,120,1758,1,6), +(8308,512,4063,1,2,0,120,1758,1,7), +(8309,512,4063,1,2,0,120,1758,1,8), +(8310,512,4063,1,2,0,120,1758,1,9), +(8311,512,4063,1,2,0,120,1758,1,19), +(8312,512,4063,1,2,0,120,1758,1,20), +(8313,512,4063,1,2,0,120,1758,1,21), +(8314,512,4063,1,2,0,120,1758,1,22), +(8315,512,4063,1,2,0,120,1758,1,23), +(8316,512,4063,1,2,0,120,1758,1,24), +(8317,512,4063,1,2,0,120,1758,1,25), +(8318,512,32,1,2,0,120,1768,1,16), +(8319,512,32,1,2,0,120,1768,1,17), +(8320,512,32,1,2,0,120,1768,1,18), +(8321,512,4063,1,2,3,120,1761,1,1), +(8322,512,4063,1,2,3,120,1761,1,2), +(8323,512,4063,1,2,3,120,1761,1,3), +(8324,512,4063,1,2,3,120,1761,1,4), +(8325,512,4063,1,2,3,120,1761,1,5), +(8326,512,4063,1,2,3,120,1761,1,6), +(8327,512,4063,1,2,3,120,1761,1,7), +(8328,512,4063,1,2,3,120,1761,1,8), +(8329,512,4063,1,2,3,120,1761,1,9), +(8330,512,4063,1,2,3,120,1761,1,19), +(8331,512,4063,1,2,3,120,1761,1,20), +(8332,512,4063,1,2,3,120,1761,1,21), +(8333,512,4063,1,2,3,120,1761,1,22), +(8334,512,4063,1,2,3,120,1761,1,23), +(8335,512,4063,1,2,3,120,1761,1,24), +(8336,512,32,1,2,3,120,1771,1,16), +(8337,512,32,1,2,3,120,1771,1,17), +(8338,512,32,1,2,3,120,1771,1,18), +(8339,512,2015,1,2,8,120,1766,1,1), +(8340,512,2015,1,2,8,120,1766,1,2), +(8341,512,2015,1,2,8,120,1766,1,3), +(8342,512,2015,1,2,8,120,1766,1,4), +(8343,512,2015,1,2,8,120,1766,1,5), +(8344,512,2015,1,2,8,120,1766,1,6), +(8345,512,2015,1,2,8,120,1766,1,7), +(8346,512,2015,1,2,8,120,1766,1,8), +(8347,512,2015,1,2,8,120,1766,1,9), +(8348,512,32,1,2,8,120,1776,1,16), +(8349,512,32,1,2,8,120,1776,1,17), +(8350,512,32,1,2,8,120,1776,1,18), +(8351,256,4063,0,2,0,101,1446,1,1), +(8352,256,4063,0,2,0,101,1446,1,2), +(8353,256,4063,0,2,0,101,1446,1,3), +(8354,256,4063,0,2,0,101,1446,1,4), +(8355,256,4063,0,2,0,101,1446,1,5), +(8356,256,4063,0,2,0,101,1446,1,6), +(8357,256,4063,0,2,0,101,1446,1,7), +(8358,256,4063,0,2,0,101,1446,1,8), +(8359,256,32,0,2,0,101,1451,1,9), +(8360,256,32,0,2,0,101,1451,1,10), +(8361,256,32,0,2,0,101,1451,1,11), +(8362,256,4063,0,2,0,101,1446,1,19), +(8363,256,4063,0,2,1,101,1447,1,1), +(8364,256,4063,0,2,1,101,1447,1,2), +(8365,256,4063,0,2,1,101,1447,1,3), +(8366,256,4063,0,2,1,101,1447,1,4), +(8367,256,4063,0,2,1,101,1447,1,5), +(8368,256,4063,0,2,1,101,1447,1,6), +(8369,256,4063,0,2,1,101,1447,1,7), +(8370,256,4063,0,2,1,101,1447,1,8), +(8371,256,32,0,2,1,101,1452,1,9), +(8372,256,32,0,2,1,101,1452,1,10), +(8373,256,32,0,2,1,101,1452,1,11), +(8374,256,4063,0,2,2,101,1448,1,1), +(8375,256,4063,0,2,2,101,1448,1,2), +(8376,256,4063,0,2,2,101,1448,1,3), +(8377,256,4063,0,2,2,101,1448,1,4), +(8378,256,4063,0,2,2,101,1448,1,5), +(8379,256,4063,0,2,2,101,1448,1,6), +(8380,256,4063,0,2,2,101,1448,1,7), +(8381,256,4063,0,2,2,101,1448,1,8), +(8382,256,32,0,2,2,101,1453,1,9), +(8383,256,32,0,2,2,101,1453,1,10), +(8384,256,32,0,2,2,101,1453,1,11), +(8385,256,4063,1,2,0,106,1526,1,1), +(8386,256,4063,1,2,0,106,1526,1,2), +(8387,256,4063,1,2,0,106,1526,1,3), +(8388,256,4063,1,2,0,106,1526,1,4), +(8389,256,4063,1,2,0,106,1526,1,5), +(8390,256,4063,1,2,0,106,1526,1,6), +(8391,256,4063,1,2,0,106,1526,1,7), +(8392,256,4063,1,2,0,106,1526,1,8), +(8393,256,4063,1,2,0,106,1526,1,12), +(8394,256,32,1,2,0,106,1536,1,9), +(8395,256,32,1,2,0,106,1536,1,10), +(8396,256,32,1,2,0,106,1536,1,11), +(8397,256,4063,1,2,6,106,1532,1,1), +(8398,256,4063,1,2,6,106,1532,1,2), +(8399,256,4063,1,2,6,106,1532,1,3), +(8400,256,4063,1,2,6,106,1532,1,4), +(8401,256,4063,1,2,6,106,1532,1,5), +(8402,256,4063,1,2,6,106,1532,1,6), +(8403,256,4063,1,2,6,106,1532,1,7), +(8404,256,4063,1,2,6,106,1532,1,8), +(8405,256,32,1,2,6,106,1542,1,9), +(8406,256,32,1,2,6,106,1542,1,10), +(8407,256,32,1,2,6,106,1542,1,11), +(8408,256,4063,1,2,9,106,1535,1,1), +(8409,256,4063,1,2,9,106,1535,1,2), +(8410,256,4063,1,2,9,106,1535,1,3), +(8411,256,4063,1,2,9,106,1535,1,4), +(8412,256,4063,1,2,9,106,1535,1,5), +(8413,256,4063,1,2,9,106,1535,1,6), +(8414,256,4063,1,2,9,106,1535,1,7), +(8415,256,4063,1,2,9,106,1535,1,8), +(8416,256,32,1,2,9,106,15730,1,9), +(8417,256,32,1,2,9,106,15730,1,10), +(8418,256,32,1,2,9,106,15730,1,11), +(8419,8,2015,1,2,0,683,7622,1,1), +(8420,8,2015,1,2,0,683,7622,1,2), +(8421,8,2015,1,2,0,683,7622,1,3), +(8422,8,2015,1,2,0,683,7622,1,4), +(8423,8,2015,1,2,0,683,7622,1,5), +(8424,8,2015,1,2,0,683,7622,1,6), +(8425,8,2015,1,2,0,683,7622,1,7), +(8426,8,2015,1,2,0,683,7622,1,8), +(8427,8,32,1,2,0,683,7634,1,9), +(8428,8,32,1,2,0,683,7634,1,10), +(8429,8,32,1,2,0,683,7634,1,11), +(8430,8,2048,1,2,0,683,7636,1,14), +(8431,8,2048,1,2,0,683,7636,1,15), +(8432,8,2048,1,2,0,683,7636,1,16), +(8433,8,2048,1,2,0,683,7636,1,17), +(8434,8,2048,1,2,0,683,7636,1,18), +(8435,8,2048,1,2,0,683,7636,1,19), +(8436,8,4095,1,2,0,683,7638,1,20), +(8437,8,4095,1,2,0,683,7633,1,21), +(8438,8,2047,1,2,0,683,7630,1,22), +(8439,8,2015,1,2,1,683,7622,1,1), +(8440,8,2015,1,2,1,683,7622,1,2), +(8441,8,2015,1,2,1,683,7622,1,3), +(8442,8,2015,1,2,1,683,7622,1,4), +(8443,8,2015,1,2,1,683,7622,1,5), +(8444,8,2015,1,2,1,683,7622,1,6), +(8445,8,2015,1,2,1,683,7622,1,7), +(8446,8,2015,1,2,1,683,7622,1,8), +(8447,8,2048,1,2,1,683,7636,1,14), +(8448,8,2048,1,2,1,683,7636,1,15), +(8449,8,2048,1,2,1,683,7636,1,16), +(8450,8,2048,1,2,1,683,7636,1,17), +(8451,8,2048,1,2,1,683,7636,1,18), +(8452,8,2048,1,2,1,683,7636,1,19), +(8453,8,2047,1,2,1,683,7630,1,22), +(8454,8,2015,1,2,2,683,7622,1,1), +(8455,8,2015,1,2,2,683,7622,1,2), +(8456,8,2015,1,2,2,683,7622,1,3), +(8457,8,2015,1,2,2,683,7622,1,4), +(8458,8,2015,1,2,2,683,7622,1,5), +(8459,8,2015,1,2,2,683,7622,1,6), +(8460,8,2015,1,2,2,683,7622,1,7), +(8461,8,2015,1,2,2,683,7622,1,8), +(8462,8,2048,1,2,2,683,7636,1,14), +(8463,8,2048,1,2,2,683,7636,1,15), +(8464,8,2048,1,2,2,683,7636,1,16), +(8465,8,2048,1,2,2,683,7636,1,17), +(8466,8,2048,1,2,2,683,7636,1,18), +(8467,8,2048,1,2,2,683,7636,1,19), +(8468,8,2047,1,2,2,683,7630,1,22), +(8469,8,2047,1,2,3,683,7630,1,22), +(8470,8,2048,1,2,3,683,7636,1,19), +(8471,8,2048,1,2,3,683,7636,1,18), +(8472,8,2048,1,2,3,683,7636,1,17), +(8473,8,2048,1,2,3,683,7636,1,16), +(8474,8,2048,1,2,3,683,7636,1,15), +(8475,8,2048,1,2,3,683,7636,1,14), +(8476,8,2015,1,2,3,683,7622,1,8), +(8477,8,2015,1,2,3,683,7622,1,7), +(8478,8,2015,1,2,3,683,7622,1,6), +(8479,8,2015,1,2,3,683,7622,1,5), +(8480,8,2015,1,2,3,683,7622,1,4), +(8481,8,2015,1,2,3,683,7622,1,3), +(8482,8,2015,1,2,3,683,7622,1,2), +(8483,8,2015,1,2,3,683,7622,1,1), +(8484,8,2047,1,2,4,683,7630,1,22), +(8485,8,2048,1,2,4,683,7636,1,19), +(8486,8,2048,1,2,4,683,7636,1,18), +(8487,8,2048,1,2,4,683,7636,1,17), +(8488,8,2048,1,2,4,683,7636,1,16), +(8489,8,2048,1,2,4,683,7636,1,15), +(8490,8,2048,1,2,4,683,7636,1,14), +(8491,8,2015,1,2,4,683,7622,1,8), +(8492,8,2015,1,2,4,683,7622,1,7), +(8493,8,2015,1,2,4,683,7622,1,6), +(8494,8,2015,1,2,4,683,7622,1,5), +(8495,8,2015,1,2,4,683,7622,1,4), +(8496,8,2015,1,2,4,683,7622,1,3), +(8497,8,2015,1,2,4,683,7622,1,2), +(8498,8,2015,1,2,4,683,7622,1,1), +(8499,8,2047,1,2,5,683,7630,1,22), +(8500,8,2048,1,2,5,683,7636,1,19), +(8501,8,2048,1,2,5,683,7636,1,18), +(8502,8,2048,1,2,5,683,7636,1,17), +(8503,8,2048,1,2,5,683,7636,1,16), +(8504,8,2048,1,2,5,683,7636,1,15), +(8505,8,2048,1,2,5,683,7636,1,14), +(8506,8,2015,1,2,5,683,7622,1,8), +(8507,8,2015,1,2,5,683,7622,1,7), +(8508,8,2015,1,2,5,683,7622,1,6), +(8509,8,2015,1,2,5,683,7622,1,5), +(8510,8,2015,1,2,5,683,7622,1,4), +(8511,8,2015,1,2,5,683,7622,1,3), +(8512,8,2015,1,2,5,683,7622,1,2), +(8513,8,2015,1,2,5,683,7622,1,1), +(8514,8,2047,1,2,6,683,7630,1,22), +(8515,8,32,1,2,6,683,7634,1,11), +(8516,8,32,1,2,6,683,7634,1,10), +(8517,8,32,1,2,6,683,7634,1,9), +(8518,8,2015,1,2,6,683,7622,1,8), +(8519,8,2015,1,2,6,683,7622,1,7), +(8520,8,2015,1,2,6,683,7622,1,6), +(8521,8,2015,1,2,6,683,7622,1,5), +(8522,8,2015,1,2,6,683,7622,1,4), +(8523,8,2015,1,2,6,683,7622,1,3), +(8524,8,2015,1,2,6,683,7622,1,2), +(8525,8,2015,1,2,6,683,7622,1,1), +(8526,8,2047,1,2,7,683,7630,1,22), +(8527,8,32,1,2,7,683,7634,1,11), +(8528,8,32,1,2,7,683,7634,1,10), +(8529,8,32,1,2,7,683,7634,1,9), +(8530,8,2015,1,2,7,683,7622,1,8), +(8531,8,2015,1,2,7,683,7622,1,7), +(8532,8,2015,1,2,7,683,7622,1,6), +(8533,8,2015,1,2,7,683,7622,1,5), +(8534,8,2015,1,2,7,683,7622,1,4), +(8535,8,2015,1,2,7,683,7622,1,3), +(8536,8,2015,1,2,7,683,7622,1,2), +(8537,8,2015,1,2,7,683,7622,1,1), +(8538,8,2047,1,2,8,683,7630,1,22), +(8539,8,2015,1,2,8,683,7622,1,8), +(8540,8,2015,1,2,8,683,7622,1,7), +(8541,8,2015,1,2,8,683,7622,1,6), +(8542,8,2015,1,2,8,683,7622,1,5), +(8543,8,2015,1,2,8,683,7622,1,4), +(8544,8,2015,1,2,8,683,7622,1,3), +(8545,8,2015,1,2,8,683,7622,1,2), +(8546,8,2015,1,2,8,683,7622,1,1), +(8547,8,2015,0,2,0,682,7610,1,1), +(8548,8,2015,0,2,0,682,7610,1,2), +(8549,8,2015,0,2,0,682,7610,1,3), +(8550,8,2015,0,2,0,682,7610,1,4), +(8551,8,2015,0,2,0,682,7610,1,5), +(8552,8,2015,0,2,0,682,7610,1,6), +(8553,8,2015,0,2,0,682,7610,1,7), +(8554,8,2015,0,2,0,682,7610,1,8), +(8555,8,32,0,2,0,682,7618,1,9), +(8556,8,32,0,2,0,682,7618,1,10), +(8557,8,32,0,2,0,682,7618,1,11), +(8558,8,2048,0,2,0,682,7635,1,14), +(8559,8,2048,0,2,0,682,7635,1,15), +(8560,8,2048,0,2,0,682,7635,1,16), +(8561,8,2048,0,2,0,682,7635,1,17), +(8562,8,2048,0,2,0,682,7635,1,18), +(8563,8,2048,0,2,0,682,7635,1,19), +(8564,8,4095,0,2,0,682,7637,1,20), +(8565,8,4095,0,2,0,682,7617,1,21), +(8566,8,2047,0,2,0,682,7614,1,22), +(8567,8,2047,0,2,1,682,7614,1,22), +(8568,8,2048,0,2,1,682,7635,1,19), +(8569,8,2048,0,2,1,682,7635,1,18), +(8570,8,2048,0,2,1,682,7635,1,17), +(8571,8,2048,0,2,1,682,7635,1,16), +(8572,8,2048,0,2,1,682,7635,1,15), +(8573,8,2048,0,2,1,682,7635,1,14), +(8574,8,32,0,2,1,682,7618,1,11), +(8575,8,32,0,2,1,682,7618,1,10), +(8576,8,32,0,2,1,682,7618,1,9), +(8577,8,2015,0,2,1,682,7610,1,8), +(8578,8,2015,0,2,1,682,7610,1,7), +(8579,8,2015,0,2,1,682,7610,1,6), +(8580,8,2015,0,2,1,682,7610,1,5), +(8581,8,2015,0,2,1,682,7610,1,4), +(8582,8,2015,0,2,1,682,7610,1,3), +(8583,8,2015,0,2,1,682,7610,1,2), +(8584,8,2015,0,2,1,682,7610,1,1), +(8585,8,2047,0,2,2,682,7614,1,22), +(8586,8,2048,0,2,2,682,7635,1,19), +(8587,8,2048,0,2,2,682,7635,1,18), +(8588,8,2048,0,2,2,682,7635,1,17), +(8589,8,2048,0,2,2,682,7635,1,16), +(8590,8,2048,0,2,2,682,7635,1,15), +(8591,8,2048,0,2,2,682,7635,1,14), +(8592,8,2015,0,2,2,682,7610,1,8), +(8593,8,2015,0,2,2,682,7610,1,7), +(8594,8,2015,0,2,2,682,7610,1,6), +(8595,8,2015,0,2,2,682,7610,1,5), +(8596,8,2015,0,2,2,682,7610,1,4), +(8597,8,2015,0,2,2,682,7610,1,3), +(8598,8,2015,0,2,2,682,7610,1,2), +(8599,8,2015,0,2,2,682,7610,1,1), +(8600,8,2047,0,2,3,682,7614,1,22), +(8601,8,2048,0,2,3,682,7635,1,19), +(8602,8,2048,0,2,3,682,7635,1,18), +(8603,8,2048,0,2,3,682,7635,1,17), +(8604,8,2048,0,2,3,682,7635,1,16), +(8605,8,2048,0,2,3,682,7635,1,15), +(8606,8,2048,0,2,3,682,7635,1,14), +(8607,8,2015,0,2,3,682,7610,1,8), +(8608,8,2015,0,2,3,682,7610,1,7), +(8609,8,2015,0,2,3,682,7610,1,6), +(8610,8,2015,0,2,3,682,7610,1,5), +(8611,8,2015,0,2,3,682,7610,1,4), +(8612,8,2015,0,2,3,682,7610,1,3), +(8613,8,2015,0,2,3,682,7610,1,2), +(8614,8,2015,0,2,3,682,7610,1,1), +(8615,8,2047,0,2,4,682,7614,1,22), +(8616,8,2048,0,2,4,682,7635,1,19), +(8617,8,2048,0,2,4,682,7635,1,18), +(8618,8,2048,0,2,4,682,7635,1,17), +(8619,8,2048,0,2,4,682,7635,1,16), +(8620,8,2048,0,2,4,682,7635,1,15), +(8621,8,2048,0,2,4,682,7635,1,14), +(8622,8,32,0,2,4,682,7618,1,11), +(8623,8,32,0,2,4,682,7618,1,10), +(8624,8,32,0,2,4,682,7618,1,9), +(8625,8,2015,0,2,4,682,7610,1,8), +(8626,8,2015,0,2,4,682,7610,1,7), +(8627,8,2015,0,2,4,682,7610,1,6), +(8628,8,2015,0,2,4,682,7610,1,5), +(8629,8,2015,0,2,4,682,7610,1,4), +(8630,8,2015,0,2,4,682,7610,1,3), +(8631,8,2015,0,2,4,682,7610,1,2), +(8632,8,2015,0,2,4,682,7610,1,1), +(8633,8,2047,0,2,5,682,7614,1,22), +(8634,8,2048,0,2,5,682,7635,1,19), +(8635,8,2048,0,2,5,682,7635,1,18), +(8636,8,2048,0,2,5,682,7635,1,17), +(8637,8,2048,0,2,5,682,7635,1,16), +(8638,8,2048,0,2,5,682,7635,1,15), +(8639,8,2048,0,2,5,682,7635,1,14), +(8640,8,2015,0,2,5,682,7610,1,8), +(8641,8,2015,0,2,5,682,7610,1,7), +(8642,8,2015,0,2,5,682,7610,1,6), +(8643,8,2015,0,2,5,682,7610,1,5), +(8644,8,2015,0,2,5,682,7610,1,4), +(8645,8,2015,0,2,5,682,7610,1,3), +(8646,8,2015,0,2,5,682,7610,1,2), +(8647,8,2015,0,2,5,682,7610,1,1), +(8648,8,2047,0,2,6,682,7614,1,22), +(8649,8,2015,0,2,6,682,7610,1,8), +(8650,8,2015,0,2,6,682,7610,1,7), +(8651,8,2015,0,2,6,682,7610,1,6), +(8652,8,2015,0,2,6,682,7610,1,5), +(8653,8,2015,0,2,6,682,7610,1,4), +(8654,8,2015,0,2,6,682,7610,1,3), +(8655,8,2015,0,2,6,682,7610,1,2), +(8656,8,2015,0,2,6,682,7610,1,1), +(8657,8,2047,0,2,7,682,7614,1,22), +(8658,8,2015,0,2,7,682,7610,1,8), +(8659,8,2015,0,2,7,682,7610,1,7), +(8660,8,2015,0,2,7,682,7610,1,6), +(8661,8,2015,0,2,7,682,7610,1,5), +(8662,8,2015,0,2,7,682,7610,1,4), +(8663,8,2015,0,2,7,682,7610,1,3), +(8664,8,2015,0,2,7,682,7610,1,2), +(8665,8,2015,0,2,7,682,7610,1,1), +(8666,8,2047,0,2,8,682,7614,1,22), +(8667,8,2015,0,2,8,682,7610,1,8), +(8668,8,2015,0,2,8,682,7610,1,7), +(8669,8,2015,0,2,8,682,7610,1,6), +(8670,8,2015,0,2,8,682,7610,1,5), +(8671,8,2015,0,2,8,682,7610,1,4), +(8672,8,2015,0,2,8,682,7610,1,3), +(8673,8,2015,0,2,8,682,7610,1,2), +(8674,8,2015,0,2,8,682,7610,1,1), +(8675,1,4063,0,2,0,463,4138,1,1), +(8676,1,4063,0,2,0,463,4138,1,2), +(8677,1,4063,0,2,0,463,4138,1,3), +(8678,1,4063,0,2,0,463,4138,1,4), +(8679,1,4063,0,2,0,463,4138,1,5), +(8680,1,4063,0,2,0,463,4138,1,6), +(8681,1,4063,0,2,0,463,4138,1,7), +(8682,1,4063,0,2,0,463,4138,1,8), +(8683,1,4063,0,2,0,463,4131,1,9), +(8684,1,32,0,2,0,463,4534,1,12), +(8685,1,32,0,2,0,463,4534,1,13), +(8686,1,32,0,2,0,463,4534,1,14), +(8687,1,4095,0,2,0,463,7200,1,15), +(8688,1,4095,0,2,0,463,7197,1,16), +(8689,1,4095,0,2,0,463,7199,1,17), +(8690,1,4063,0,2,1,463,4140,1,1), +(8691,1,4063,0,2,1,463,4140,1,2), +(8692,1,4063,0,2,1,463,4140,1,3), +(8693,1,4063,0,2,1,463,4140,1,4), +(8694,1,4063,0,2,1,463,4140,1,5), +(8695,1,4063,0,2,1,463,4140,1,6), +(8696,1,4063,0,2,1,463,4140,1,7), +(8697,1,4063,0,2,1,463,4140,1,8), +(8698,1,4063,0,2,1,463,4126,1,9), +(8699,1,4063,0,2,2,463,4133,1,1), +(8700,1,4063,0,2,2,463,4133,1,2), +(8701,1,4063,0,2,2,463,4133,1,3), +(8702,1,4063,0,2,2,463,4133,1,4), +(8703,1,4063,0,2,2,463,4133,1,5), +(8704,1,4063,0,2,2,463,4133,1,6), +(8705,1,4063,0,2,2,463,4133,1,7), +(8706,1,4063,0,2,2,463,4133,1,8), +(8707,1,4063,0,2,2,463,4133,1,9), +(8708,1,32,0,2,2,463,4534,1,12), +(8709,1,32,0,2,2,463,4534,1,13), +(8710,1,32,0,2,2,463,4534,1,14), +(8711,1,4063,0,2,3,463,4135,1,1), +(8712,1,4063,0,2,3,463,4135,1,2), +(8713,1,4063,0,2,3,463,4135,1,3), +(8714,1,4063,0,2,3,463,4135,1,4), +(8715,1,4063,0,2,3,463,4135,1,5), +(8716,1,4063,0,2,3,463,4135,1,6), +(8717,1,4063,0,2,3,463,4135,1,7), +(8718,1,4063,0,2,3,463,4135,1,8), +(8719,1,4063,0,2,3,463,4137,1,9), +(8720,1,4063,0,2,4,463,4141,1,1), +(8721,1,4063,0,2,4,463,4141,1,2), +(8722,1,4063,0,2,4,463,4141,1,3), +(8723,1,4063,0,2,4,463,4141,1,4), +(8724,1,4063,0,2,4,463,4141,1,5), +(8725,1,4063,0,2,4,463,4141,1,6), +(8726,1,4063,0,2,4,463,4141,1,7), +(8727,1,4063,0,2,4,463,4141,1,8), +(8728,1,4063,0,2,4,463,4126,1,9), +(8729,1,4063,0,2,7,463,4138,1,1), +(8730,1,4063,0,2,7,463,4138,1,2), +(8731,1,4063,0,2,7,463,4138,1,3), +(8732,1,4063,0,2,7,463,4138,1,4), +(8733,1,4063,0,2,7,463,4138,1,5), +(8734,1,4063,0,2,7,463,4138,1,6), +(8735,1,4063,0,2,7,463,4138,1,7), +(8736,1,4063,0,2,7,463,4138,1,8), +(8737,1,4063,0,2,7,463,4131,1,9), +(8738,1,4063,0,2,8,463,4140,1,1), +(8739,1,4063,0,2,8,463,4140,1,2), +(8740,1,4063,0,2,8,463,4140,1,3), +(8741,1,4063,0,2,8,463,4140,1,4), +(8742,1,4063,0,2,8,463,4140,1,5), +(8743,1,4063,0,2,8,463,4140,1,6), +(8744,1,4063,0,2,8,463,4140,1,7), +(8745,1,4063,0,2,8,463,4140,1,8), +(8746,1,4063,0,2,8,463,4126,1,9), +(8747,1,4063,0,2,9,463,4135,1,1), +(8748,1,4063,0,2,9,463,4135,1,2), +(8749,1,4063,0,2,9,463,4135,1,3), +(8750,1,4063,0,2,9,463,4135,1,4), +(8751,1,4063,0,2,9,463,4135,1,5), +(8752,1,4063,0,2,9,463,4135,1,6), +(8753,1,4063,0,2,9,463,4135,1,7), +(8754,1,4063,0,2,9,463,4135,1,8), +(8755,1,4063,0,2,9,463,4126,1,9), +(8756,1,4063,0,2,11,463,4136,1,1), +(8757,1,4063,0,2,11,463,4136,1,2), +(8758,1,4063,0,2,11,463,4136,1,3), +(8759,1,4063,0,2,11,463,4136,1,4), +(8760,1,4063,0,2,11,463,4136,1,5), +(8761,1,4063,0,2,11,463,4136,1,6), +(8762,1,4063,0,2,11,463,4136,1,7), +(8763,1,4063,0,2,11,463,4136,1,8), +(8764,1,4063,0,2,11,463,4126,1,9), +(8765,1,32,0,2,11,463,4534,1,12), +(8766,1,32,0,2,11,463,4534,1,13), +(8767,1,32,0,2,11,463,4534,1,14), +(8768,6291456,4063,0,2,0,463,4138,1,1), +(8769,6291456,4063,0,2,0,463,4138,1,2), +(8770,6291456,4063,0,2,0,463,4138,1,3), +(8771,6291456,4063,0,2,0,463,4131,1,4), +(8772,6291456,32,0,2,0,463,4534,1,5), +(8773,6291456,32,0,2,0,463,4534,1,6), +(8774,6291456,32,0,2,0,463,4534,1,7), +(8775,6291456,4095,0,2,0,464,7198,1,8), +(8776,6291456,4063,0,2,1,463,4140,1,1), +(8777,6291456,4063,0,2,1,463,4140,1,2), +(8778,6291456,4063,0,2,1,463,4140,1,3), +(8779,6291456,4063,0,2,1,463,4126,1,4), +(8784,6291456,4063,0,2,3,463,4135,1,1), +(8785,6291456,4063,0,2,3,463,4135,1,2), +(8786,6291456,4063,0,2,3,463,4135,1,3), +(8787,6291456,4063,0,2,3,463,4137,1,4), +(8788,6291456,4063,0,2,4,463,4141,1,1), +(8789,6291456,4063,0,2,4,463,4141,1,2), +(8790,6291456,4063,0,2,4,463,4141,1,3), +(8791,6291456,4063,0,2,4,463,4126,1,4), +(8792,6291456,4063,0,2,15,463,4140,1,1), +(8793,6291456,4063,0,2,15,463,4140,1,2), +(8794,6291456,4063,0,2,15,463,4140,1,3), +(8795,6291456,4063,0,2,15,463,4126,1,4), +(8796,6291456,4095,1,5,7,501,4752,0,0), +(8797,6291456,4095,1,5,8,501,4753,0,0), +(8798,6291456,4095,1,5,9,501,4754,0,0), +(8799,6291456,4095,1,5,10,501,4755,0,0), +(8800,6291456,4095,1,5,11,501,4756,0,0), +(8801,6291456,4095,1,2,27,970,15684,0,0), +(8802,6291456,4095,1,2,26,970,15683,0,0), +(8803,6291456,4095,1,2,25,970,15682,0,0), +(8804,6291456,4095,1,2,24,970,15681,0,0), +(8805,6291456,4095,1,2,23,970,15680,0,0), +(8806,6291456,4095,1,2,22,970,15679,0,0), +(8807,6291456,4095,1,2,21,970,15678,0,0), +(8808,6291456,4095,1,2,20,970,15677,0,0), +(8809,6291456,4095,1,2,19,970,15676,0,0), +(8810,6291456,4095,1,2,18,970,15675,0,0), +(8811,6291456,4095,1,2,17,970,15674,0,0), +(8812,6291456,4095,1,2,16,970,15673,0,0), +(8813,6291456,4095,1,2,15,970,15672,0,0), +(8814,6291456,4095,1,2,14,970,15686,0,0), +(8815,6291456,4095,1,2,13,970,15685,1,0), +(8816,6291456,4095,1,2,12,970,15684,0,0), +(8817,6291456,4095,1,2,11,970,15683,0,0), +(8818,6291456,4095,1,2,10,970,15682,0,0), +(8819,6291456,4095,1,2,9,970,15681,1,0), +(8820,6291456,4095,1,2,8,970,15680,0,0), +(8821,6291456,4095,1,2,7,970,15679,1,0), +(8822,6291456,4095,1,2,6,970,15678,0,0), +(8823,6291456,4095,1,2,5,970,15677,0,0), +(8824,6291456,4095,1,2,4,970,15676,0,0), +(8825,6291456,4095,1,2,3,970,15675,0,0), +(8826,6291456,4095,1,2,2,970,15674,0,0), +(8827,6291456,4095,1,2,1,970,15673,0,0), +(8828,6291456,4095,1,2,0,970,15672,0,0), +(8829,6291456,4095,1,2,28,970,15682,0,0), +(8830,6291456,4095,1,2,30,970,15684,0,0), +(8831,6291456,4095,1,2,29,970,15677,0,0), +(8832,6291456,4095,1,2,31,970,15680,0,0), +(8833,6291456,4095,1,2,7,970,15679,1,1), +(8834,6291456,4095,1,2,7,970,15679,1,2), +(8835,6291456,4095,1,2,7,970,15679,1,3), +(8836,6291456,4095,1,2,7,970,15679,1,4), +(8837,6291456,4095,1,2,7,970,15679,1,5), +(8838,6291456,4095,1,2,7,970,15679,1,6), +(8839,6291456,4095,1,2,7,970,15679,1,7), +(8840,6291456,4095,1,2,7,970,15679,1,8), +(8841,6291456,4095,1,2,7,970,15672,1,9), +(8842,6291456,4095,1,2,7,970,15672,1,10), +(8843,6291456,4095,1,2,7,970,15672,1,11), +(8844,6291456,4095,1,2,9,970,15681,1,1), +(8845,6291456,4095,1,2,9,970,15681,1,2), +(8846,6291456,4095,1,2,9,970,15681,1,3), +(8847,6291456,4095,1,2,9,970,15681,1,4), +(8848,6291456,4095,1,2,9,970,15681,1,5), +(8849,6291456,4095,1,2,9,970,15681,1,6), +(8850,6291456,4095,1,2,9,970,15681,1,7), +(8851,6291456,4095,1,2,9,970,15681,1,8), +(8852,6291456,4095,1,2,9,970,15673,1,9), +(8853,6291456,4095,1,2,9,970,15673,1,10), +(8854,6291456,4095,1,2,9,970,15673,1,11), +(8855,6291456,4095,1,2,13,970,15685,1,1), +(8856,6291456,4095,1,2,13,970,15685,1,2), +(8857,6291456,4095,1,2,13,970,15685,1,3), +(8858,6291456,4095,1,2,13,970,15685,1,4), +(8859,6291456,4095,1,2,13,970,15685,1,5), +(8860,6291456,4095,1,2,13,970,15685,1,6), +(8861,6291456,4095,1,2,13,970,15685,1,7), +(8862,6291456,4095,1,2,13,970,15685,1,8), +(8863,6291456,4095,1,2,13,970,15682,1,9), +(8864,6291456,4095,1,2,13,970,15682,1,10), +(8865,6291456,4095,1,2,13,970,15682,1,11); +ALTER TABLE `chr_customization_conversion` ENABLE KEYS; +UNLOCK TABLES; + +-- +-- Table structure for table `chr_level_conversion` +-- +DROP TABLE IF EXISTS `chr_level_conversion`; +CREATE TABLE `chr_level_conversion` ( + `OldLevel` int NOT NULL, + `NewLevel` int NOT NULL, + PRIMARY KEY (`OldLevel`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- +-- Dumping data for table `chr_level_conversion` +-- +INSERT INTO `chr_level_conversion` VALUES +(1,1), +(2,2), +(3,2), +(4,2), +(5,3), +(6,3), +(7,3), +(8,4), +(9,4), +(10,5), +(11,5), +(12,6), +(13,6), +(14,7), +(15,7), +(16,8), +(17,8), +(18,9), +(19,9), +(20,10), +(21,10), +(22,10), +(23,11), +(24,11), +(25,11), +(26,12), +(27,12), +(28,12), +(29,13), +(30,13), +(31,13), +(32,14), +(33,14), +(34,14), +(35,15), +(36,15), +(37,16), +(38,16), +(39,17), +(40,17), +(41,18), +(42,18), +(43,19), +(44,19), +(45,20), +(46,20), +(47,20), +(48,21), +(49,21), +(50,21), +(51,22), +(52,22), +(53,22), +(54,23), +(55,23), +(56,23), +(57,24), +(58,24), +(59,24), +(60,25), +(61,25), +(62,25), +(63,25), +(64,26), +(65,26), +(66,26), +(67,26), +(68,27), +(69,27), +(70,27), +(71,27), +(72,28), +(73,28), +(74,28), +(75,28), +(76,29), +(77,29), +(78,29), +(79,29), +(80,30), +(81,30), +(82,31), +(83,31), +(84,32), +(85,32), +(86,33), +(87,33), +(88,34), +(89,34), +(90,35), +(91,35), +(92,36), +(93,36), +(94,37), +(95,37), +(96,38), +(97,38), +(98,39), +(99,39), +(100,40), +(101,40), +(102,41), +(103,41), +(104,42), +(105,42), +(106,43), +(107,43), +(108,44), +(109,44), +(110,45), +(111,45), +(112,46), +(113,46), +(114,47), +(115,47), +(116,48), +(117,48), +(118,49), +(119,49), +(120,50); + +-- +-- Table structure for table `character_customizations` +-- +DROP TABLE IF EXISTS `character_customizations`; +CREATE TABLE `character_customizations` ( + `guid` bigint(20) unsigned NOT NULL, + `chrCustomizationOptionID` int(10) unsigned NOT NULL, + `chrCustomizationChoiceID` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`guid`,`chrCustomizationOptionID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- Skin +INSERT INTO `character_customizations` +SELECT c.guid, ccc.ChrCustomizationOptionID, ccc.ChrCustomizationChoiceID +FROM characters c +INNER JOIN chr_customization_conversion ccc ON c.skin = ccc.`Data` AND (ccc.RaceMask & (1 << (c.race - 1))) <> 0 AND c.gender = ccc.Sex AND (ccc.ClassMask & (1 << (c.class - 1))) <> 0 +WHERE ccc.OptionID = 1 AND ccc.DependentOptionID = 0; + +-- Face +INSERT INTO `character_customizations` +SELECT c.guid, ccc.ChrCustomizationOptionID, ccc.ChrCustomizationChoiceID +FROM characters c +INNER JOIN chr_customization_conversion ccc ON c.face = ccc.`Data` AND (ccc.RaceMask & (1 << (c.race - 1))) <> 0 AND c.gender = ccc.Sex AND (ccc.ClassMask & (1 << (c.class - 1))) <> 0 +WHERE ccc.OptionID = 2 AND ccc.DependentOptionID <> 1; + +INSERT INTO `character_customizations` +SELECT c.guid, ccc.ChrCustomizationOptionID, ccc.ChrCustomizationChoiceID +FROM characters c +INNER JOIN chr_customization_conversion ccc ON c.face = ccc.`Data` AND (ccc.RaceMask & (1 << (c.race - 1))) <> 0 AND c.gender = ccc.Sex AND (ccc.ClassMask & (1 << (c.class - 1))) <> 0 +WHERE ccc.OptionID = 2 AND ccc.DependentOptionID = 1 AND ccc.DependentData = c.skin; + +-- Hair style +INSERT INTO `character_customizations` +SELECT c.guid, ccc.ChrCustomizationOptionID, ccc.ChrCustomizationChoiceID +FROM characters c +INNER JOIN chr_customization_conversion ccc ON c.hairStyle = ccc.`Data` AND (ccc.RaceMask & (1 << (c.race - 1))) <> 0 AND c.gender = ccc.Sex AND (ccc.ClassMask & (1 << (c.class - 1))) <> 0 +WHERE ccc.OptionID = 3 AND ccc.DependentOptionID = 0; + +-- Hair color +INSERT INTO `character_customizations` +SELECT c.guid, ccc.ChrCustomizationOptionID, ccc.ChrCustomizationChoiceID +FROM characters c +INNER JOIN chr_customization_conversion ccc ON c.hairColor = ccc.`Data` AND (ccc.RaceMask & (1 << (c.race - 1))) <> 0 AND c.gender = ccc.Sex AND (ccc.ClassMask & (1 << (c.class - 1))) <> 0 +WHERE ccc.OptionID = 4 AND ccc.DependentOptionID = 0; + +-- Facial hair style +INSERT INTO `character_customizations` +SELECT c.guid, ccc.ChrCustomizationOptionID, ccc.ChrCustomizationChoiceID +FROM characters c +INNER JOIN chr_customization_conversion ccc ON c.facialStyle = ccc.`Data` AND (ccc.RaceMask & (1 << (c.race - 1))) <> 0 AND c.gender = ccc.Sex AND (ccc.ClassMask & (1 << (c.class - 1))) <> 0 +WHERE ccc.OptionID = 5 AND ccc.DependentOptionID = 0; + +-- Custom display option 1 +INSERT INTO `character_customizations` +SELECT c.guid, ccc.ChrCustomizationOptionID, ccc.ChrCustomizationChoiceID +FROM characters c +INNER JOIN chr_customization_conversion ccc ON c.customDisplay1 = ccc.`Data` AND (ccc.RaceMask & (1 << (c.race - 1))) <> 0 AND c.gender = ccc.Sex AND (ccc.ClassMask & (1 << (c.class - 1))) <> 0 +WHERE ccc.OptionID = 6 AND ccc.DependentOptionID <> 2; + +INSERT INTO `character_customizations` +SELECT c.guid, ccc.ChrCustomizationOptionID, ccc.ChrCustomizationChoiceID +FROM characters c +INNER JOIN chr_customization_conversion ccc ON c.customDisplay1 = ccc.`Data` AND (ccc.RaceMask & (1 << (c.race - 1))) <> 0 AND c.gender = ccc.Sex AND (ccc.ClassMask & (1 << (c.class - 1))) <> 0 +WHERE ccc.OptionID = 6 AND ccc.DependentOptionID = 2 AND ccc.DependentData = c.face; + +-- Custom display option 2 +INSERT INTO `character_customizations` +SELECT c.guid, ccc.ChrCustomizationOptionID, ccc.ChrCustomizationChoiceID +FROM characters c +INNER JOIN chr_customization_conversion ccc ON c.customDisplay2 = ccc.`Data` AND (ccc.RaceMask & (1 << (c.race - 1))) <> 0 AND c.gender = ccc.Sex AND (ccc.ClassMask & (1 << (c.class - 1))) <> 0 +WHERE ccc.OptionID = 7 AND ccc.DependentOptionID <> 2; + +INSERT INTO `character_customizations` +SELECT c.guid, ccc.ChrCustomizationOptionID, ccc.ChrCustomizationChoiceID +FROM characters c +INNER JOIN chr_customization_conversion ccc ON c.customDisplay2 = ccc.`Data` AND (ccc.RaceMask & (1 << (c.race - 1))) <> 0 AND c.gender = ccc.Sex AND (ccc.ClassMask & (1 << (c.class - 1))) <> 0 +WHERE ccc.OptionID = 7 AND ccc.DependentOptionID = 2 AND ccc.DependentData = c.face; + +-- Custom display option 3 +INSERT INTO `character_customizations` +SELECT c.guid, ccc.ChrCustomizationOptionID, ccc.ChrCustomizationChoiceID +FROM characters c +INNER JOIN chr_customization_conversion ccc ON c.customDisplay3 = ccc.`Data` AND (ccc.RaceMask & (1 << (c.race - 1))) <> 0 AND c.gender = ccc.Sex AND (ccc.ClassMask & (1 << (c.class - 1))) <> 0 +WHERE ccc.OptionID = 8 AND ccc.DependentOptionID <> 2; + +INSERT INTO `character_customizations` +SELECT c.guid, ccc.ChrCustomizationOptionID, ccc.ChrCustomizationChoiceID +FROM characters c +INNER JOIN chr_customization_conversion ccc ON c.customDisplay3 = ccc.`Data` AND (ccc.RaceMask & (1 << (c.race - 1))) <> 0 AND c.gender = ccc.Sex AND (ccc.ClassMask & (1 << (c.class - 1))) <> 0 +WHERE ccc.OptionID = 8 AND ccc.DependentOptionID = 2 AND ccc.DependentData = c.face; + +UPDATE `characters` SET `level`=COALESCE((SELECT `NewLevel` FROM `chr_level_conversion` WHERE `OldLevel`=`level`), `level`); + +ALTER TABLE `characters` + DROP `skin`, + DROP `face`, + DROP `hairStyle`, + DROP `hairColor`, + DROP `facialStyle`, + DROP `customDisplay1`, + DROP `customDisplay2`, + DROP `customDisplay3`; + +ALTER TABLE `corpse` + ADD `race` tinyint(3) unsigned NOT NULL DEFAULT '0' AFTER `itemCache`, + ADD `gender` tinyint(3) unsigned NOT NULL DEFAULT '0' AFTER `race`; + +UPDATE `corpse` SET `race`=(`bytes1`>>8)&255, `gender`=(`bytes1`>>16)&255; + +ALTER TABLE `corpse` + DROP `bytes1`, + DROP `bytes2`; + +-- +-- Table structure for table `corpse_customizations` +-- +DROP TABLE IF EXISTS `corpse_customizations`; +CREATE TABLE `corpse_customizations` ( + `ownerGuid` bigint(20) unsigned NOT NULL, + `chrCustomizationOptionID` int(10) unsigned NOT NULL, + `chrCustomizationChoiceID` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`ownerGuid`,`chrCustomizationOptionID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +INSERT INTO `corpse_customizations` +SELECT cc.guid, cc.chrCustomizationOptionID, cc.chrCustomizationChoiceID +FROM `character_customizations` cc +INNER JOIN `corpse` c ON cc.`guid` = c.`guid`; + +DROP TABLE `chr_customization_conversion`; +DROP TABLE `chr_level_conversion`; diff --git a/sql/updates/hotfixes/master/2020_11_30_00_hotfixes.sql b/sql/updates/hotfixes/master/2020_11_30_00_hotfixes.sql new file mode 100644 index 000000000..14999992a --- /dev/null +++ b/sql/updates/hotfixes/master/2020_11_30_00_hotfixes.sql @@ -0,0 +1,489 @@ +ALTER TABLE `achievement` ADD `CovenantID` int(11) NOT NULL DEFAULT '0' AFTER `SharesCriteria`; + +ALTER TABLE `area_table` ADD `ContentTuningID` int(11) NOT NULL DEFAULT '0' AFTER `WindSettingsID`; +ALTER TABLE `area_table` DROP `ExplorationLevel`; + +ALTER TABLE `battle_pet_breed_state` MODIFY `BattlePetStateID` int(11) NOT NULL DEFAULT '0' AFTER `ID`; + +ALTER TABLE `battle_pet_species` ADD `CovenantID` int(11) NOT NULL DEFAULT '0' AFTER `LoadoutUIModelSceneID`; + +ALTER TABLE `battlemaster_list` MODIFY `Flags` int(11) NOT NULL DEFAULT '0' AFTER `HolidayWorldState`; +ALTER TABLE `battlemaster_list` MODIFY `RequiredPlayerConditionID` int(11) NOT NULL DEFAULT '0' AFTER `IconFileDataID`; + +ALTER TABLE `broadcast_text` MODIFY `LanguageID` int(11) NOT NULL DEFAULT '0' AFTER `ID`; + +-- +-- Table structure for table `character_loadout` +-- +DROP TABLE IF EXISTS `character_loadout`; +CREATE TABLE `character_loadout` ( + `RaceMask` bigint(20) NOT NULL DEFAULT '0', + `ID` int(10) unsigned NOT NULL DEFAULT '0', + `ChrClassID` tinyint(4) NOT NULL DEFAULT '0', + `Purpose` tinyint(4) NOT NULL DEFAULT '0', + `VerifiedBuild` int(11) NOT NULL DEFAULT '0', + PRIMARY KEY (`ID`,`VerifiedBuild`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +-- +-- Table structure for table `character_loadout_item` +-- +DROP TABLE IF EXISTS `character_loadout_item`; +CREATE TABLE `character_loadout_item` ( + `ID` int(10) unsigned NOT NULL DEFAULT '0', + `CharacterLoadoutID` smallint(5) unsigned NOT NULL DEFAULT '0', + `ItemID` int(10) unsigned NOT NULL DEFAULT '0', + `VerifiedBuild` int(11) NOT NULL DEFAULT '0', + PRIMARY KEY (`ID`,`VerifiedBuild`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `chat_channels` ADD `Ruleset` int(11) NOT NULL DEFAULT '0' AFTER `FactionGroup`; +ALTER TABLE `chat_channels` MODIFY `ID` int(10) unsigned NOT NULL DEFAULT '0' AFTER `Shortcut`; + +ALTER TABLE `chr_classes` + ADD `Description` text AFTER `PetNameToken`, + ADD `RoleInfoString` text AFTER `Description`, + ADD `DisabledString` text AFTER `RoleInfoString`, + ADD `HyphenatedNameMale` text AFTER `DisabledString`, + ADD `HyphenatedNameFemale` text AFTER `HyphenatedNameMale`, + ADD `RolesMask` int(10) unsigned NOT NULL DEFAULT '0' AFTER `SpellTextureBlobFileDataID`, + ADD `ArmorTypeMask` int(10) unsigned NOT NULL DEFAULT '0' AFTER `RolesMask`, + ADD `CharStartKitUnknown901` int(11) NOT NULL DEFAULT '0' AFTER `ArmorTypeMask`, + ADD `MaleCharacterCreationVisualFallback` int(11) NOT NULL DEFAULT '0' AFTER `CharStartKitUnknown901`, + ADD `MaleCharacterCreationIdleVisualFallback` int(11) NOT NULL DEFAULT '0' AFTER `MaleCharacterCreationVisualFallback`, + ADD `FemaleCharacterCreationVisualFallback` int(11) NOT NULL DEFAULT '0' AFTER `MaleCharacterCreationIdleVisualFallback`, + ADD `FemaleCharacterCreationIdleVisualFallback` int(11) NOT NULL DEFAULT '0' AFTER `FemaleCharacterCreationVisualFallback`, + ADD `CharacterCreationIdleGroundVisualFallback` int(11) NOT NULL DEFAULT '0' AFTER `FemaleCharacterCreationIdleVisualFallback`, + ADD `CharacterCreationGroundVisualFallback` int(11) NOT NULL DEFAULT '0' AFTER `CharacterCreationIdleGroundVisualFallback`, + ADD `AlteredFormCharacterCreationIdleVisualFallback` int(11) NOT NULL DEFAULT '0' AFTER `CharacterCreationGroundVisualFallback`, + ADD `CharacterCreationAnimLoopWaitTimeMsFallback` int(11) NOT NULL DEFAULT '0' AFTER `AlteredFormCharacterCreationIdleVisualFallback`, + ADD `ChatColorR` tinyint(3) unsigned NOT NULL DEFAULT '0' AFTER `SpellClassSet`, + ADD `ChatColorG` tinyint(3) unsigned NOT NULL DEFAULT '0' AFTER `ChatColorR`, + ADD `ChatColorB` tinyint(3) unsigned NOT NULL DEFAULT '0' AFTER `ChatColorG`; + +ALTER TABLE `chr_classes` MODIFY `Flags` int(10) unsigned NOT NULL DEFAULT '0' AFTER `LowResScreenFileDataID`; +ALTER TABLE `chr_classes` DROP `StartingLevel`; + +ALTER TABLE `chr_classes_locale` + ADD `Description_lang` text AFTER `NameFemale_lang`, + ADD `RoleInfoString_lang` text AFTER `Description_lang`, + ADD `DisabledString_lang` text AFTER `RoleInfoString_lang`, + ADD `HyphenatedNameMale_lang` text AFTER `DisabledString_lang`, + ADD `HyphenatedNameFemale_lang` text AFTER `HyphenatedNameMale_lang`; + +-- +-- Table structure for table `chr_customization_choice` +-- +DROP TABLE IF EXISTS `chr_customization_choice`; +CREATE TABLE `chr_customization_choice` ( + `Name` text, + `ID` int(10) unsigned NOT NULL DEFAULT '0', + `ChrCustomizationOptionID` int(11) NOT NULL DEFAULT '0', + `ChrCustomizationReqID` int(11) NOT NULL DEFAULT '0', + `SortOrder` smallint(5) unsigned NOT NULL DEFAULT '0', + `SwatchColor1` int(11) NOT NULL DEFAULT '0', + `SwatchColor2` int(11) NOT NULL DEFAULT '0', + `UiOrderIndex` smallint(5) unsigned NOT NULL DEFAULT '0', + `Flags` int(11) NOT NULL DEFAULT '0', + `VerifiedBuild` int(11) NOT NULL DEFAULT '0', + PRIMARY KEY (`ID`,`VerifiedBuild`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +-- +-- Table structure for table `chr_customization_choice_locale` +-- +DROP TABLE IF EXISTS `chr_customization_choice_locale`; +CREATE TABLE `chr_customization_choice_locale` ( + `ID` int(10) unsigned NOT NULL DEFAULT '0', + `locale` varchar(4) NOT NULL, + `Name_lang` text, + `VerifiedBuild` int(11) NOT NULL DEFAULT '0', + PRIMARY KEY (`ID`,`locale`,`VerifiedBuild`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci +/*!50500 PARTITION BY LIST COLUMNS(locale) +(PARTITION deDE VALUES IN ('deDE') ENGINE = InnoDB, + PARTITION esES VALUES IN ('esES') ENGINE = InnoDB, + PARTITION esMX VALUES IN ('esMX') ENGINE = InnoDB, + PARTITION frFR VALUES IN ('frFR') ENGINE = InnoDB, + PARTITION itIT VALUES IN ('itIT') ENGINE = InnoDB, + PARTITION koKR VALUES IN ('koKR') ENGINE = InnoDB, + PARTITION ptBR VALUES IN ('ptBR') ENGINE = InnoDB, + PARTITION ruRU VALUES IN ('ruRU') ENGINE = InnoDB, + PARTITION zhCN VALUES IN ('zhCN') ENGINE = InnoDB, + PARTITION zhTW VALUES IN ('zhTW') ENGINE = InnoDB) */; + +-- +-- Table structure for table `chr_customization_display_info` +-- +DROP TABLE IF EXISTS `chr_customization_display_info`; +CREATE TABLE `chr_customization_display_info` ( + `ID` int(10) unsigned NOT NULL DEFAULT '0', + `ShapeshiftFormID` int(11) NOT NULL DEFAULT '0', + `DisplayID` int(11) NOT NULL DEFAULT '0', + `BarberShopMinCameraDistance` float NOT NULL DEFAULT '0', + `BarberShopHeightOffset` float NOT NULL DEFAULT '0', + `VerifiedBuild` int(11) NOT NULL DEFAULT '0', + PRIMARY KEY (`ID`,`VerifiedBuild`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +-- +-- Table structure for table `chr_customization_element` +-- +DROP TABLE IF EXISTS `chr_customization_element`; +CREATE TABLE `chr_customization_element` ( + `ID` int(10) unsigned NOT NULL DEFAULT '0', + `ChrCustomizationChoiceID` int(11) NOT NULL DEFAULT '0', + `RelatedChrCustomizationChoiceID` int(11) NOT NULL DEFAULT '0', + `ChrCustomizationGeosetID` int(11) NOT NULL DEFAULT '0', + `ChrCustomizationSkinnedModelID` int(11) NOT NULL DEFAULT '0', + `ChrCustomizationMaterialID` int(11) NOT NULL DEFAULT '0', + `ChrCustomizationBoneSetID` int(11) NOT NULL DEFAULT '0', + `ChrCustomizationCondModelID` int(11) NOT NULL DEFAULT '0', + `ChrCustomizationDisplayInfoID` int(11) NOT NULL DEFAULT '0', + `VerifiedBuild` int(11) NOT NULL DEFAULT '0', + PRIMARY KEY (`ID`,`VerifiedBuild`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +-- +-- Table structure for table `chr_customization_option` +-- +DROP TABLE IF EXISTS `chr_customization_option`; +CREATE TABLE `chr_customization_option` ( + `Name` text, + `ID` int(10) unsigned NOT NULL DEFAULT '0', + `SecondaryID` smallint(5) unsigned NOT NULL DEFAULT '0', + `Flags` int(11) NOT NULL DEFAULT '0', + `ChrModelID` int(11) NOT NULL DEFAULT '0', + `SortIndex` int(11) NOT NULL DEFAULT '0', + `ChrCustomizationCategoryID` int(11) NOT NULL DEFAULT '0', + `OptionType` int(11) NOT NULL DEFAULT '0', + `BarberShopCostModifier` float NOT NULL DEFAULT '0', + `ChrCustomizationID` int(11) NOT NULL DEFAULT '0', + `ChrCustomizationReqID` int(11) NOT NULL DEFAULT '0', + `UiOrderIndex` int(11) NOT NULL DEFAULT '0', + `VerifiedBuild` int(11) NOT NULL DEFAULT '0', + PRIMARY KEY (`ID`,`VerifiedBuild`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +-- +-- Table structure for table `chr_customization_option_locale` +-- +DROP TABLE IF EXISTS `chr_customization_option_locale`; +CREATE TABLE `chr_customization_option_locale` ( + `ID` int(10) unsigned NOT NULL DEFAULT '0', + `locale` varchar(4) NOT NULL, + `Name_lang` text, + `VerifiedBuild` int(11) NOT NULL DEFAULT '0', + PRIMARY KEY (`ID`,`locale`,`VerifiedBuild`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci +/*!50500 PARTITION BY LIST COLUMNS(locale) +(PARTITION deDE VALUES IN ('deDE') ENGINE = InnoDB, + PARTITION esES VALUES IN ('esES') ENGINE = InnoDB, + PARTITION esMX VALUES IN ('esMX') ENGINE = InnoDB, + PARTITION frFR VALUES IN ('frFR') ENGINE = InnoDB, + PARTITION itIT VALUES IN ('itIT') ENGINE = InnoDB, + PARTITION koKR VALUES IN ('koKR') ENGINE = InnoDB, + PARTITION ptBR VALUES IN ('ptBR') ENGINE = InnoDB, + PARTITION ruRU VALUES IN ('ruRU') ENGINE = InnoDB, + PARTITION zhCN VALUES IN ('zhCN') ENGINE = InnoDB, + PARTITION zhTW VALUES IN ('zhTW') ENGINE = InnoDB) */; + +-- +-- Table structure for table `chr_customization_req` +-- +DROP TABLE IF EXISTS `chr_customization_req`; +CREATE TABLE `chr_customization_req` ( + `ID` int(10) unsigned NOT NULL DEFAULT '0', + `Flags` int(11) NOT NULL DEFAULT '0', + `ClassMask` int(11) NOT NULL DEFAULT '0', + `AchievementID` int(11) NOT NULL DEFAULT '0', + `OverrideArchive` int(11) NOT NULL DEFAULT '0', + `ItemModifiedAppearanceID` int(11) NOT NULL DEFAULT '0', + `VerifiedBuild` int(11) NOT NULL DEFAULT '0', + PRIMARY KEY (`ID`,`VerifiedBuild`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +-- +-- Table structure for table `chr_customization_req_choice` +-- +DROP TABLE IF EXISTS `chr_customization_req_choice`; +CREATE TABLE `chr_customization_req_choice` ( + `ID` int(10) unsigned NOT NULL DEFAULT '0', + `ChrCustomizationChoiceID` int(11) NOT NULL DEFAULT '0', + `ChrCustomizationReqID` int(10) unsigned NOT NULL DEFAULT '0', + `VerifiedBuild` int(11) NOT NULL DEFAULT '0', + PRIMARY KEY (`ID`,`VerifiedBuild`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +-- +-- Table structure for table `chr_model` +-- +DROP TABLE IF EXISTS `chr_model`; +CREATE TABLE `chr_model` ( + `FaceCustomizationOffset1` float NOT NULL DEFAULT '0', + `FaceCustomizationOffset2` float NOT NULL DEFAULT '0', + `FaceCustomizationOffset3` float NOT NULL DEFAULT '0', + `CustomizeOffset1` float NOT NULL DEFAULT '0', + `CustomizeOffset2` float NOT NULL DEFAULT '0', + `CustomizeOffset3` float NOT NULL DEFAULT '0', + `ID` int(10) unsigned NOT NULL DEFAULT '0', + `Sex` int(11) NOT NULL DEFAULT '0', + `DisplayID` int(11) NOT NULL DEFAULT '0', + `CharComponentTextureLayoutID` int(11) NOT NULL DEFAULT '0', + `Flags` int(11) NOT NULL DEFAULT '0', + `SkeletonFileDataID` int(11) NOT NULL DEFAULT '0', + `ModelFallbackChrModelID` int(11) NOT NULL DEFAULT '0', + `TextureFallbackChrModelID` int(11) NOT NULL DEFAULT '0', + `HelmVisFallbackChrModelID` int(11) NOT NULL DEFAULT '0', + `CustomizeScale` float NOT NULL DEFAULT '0', + `CustomizeFacing` float NOT NULL DEFAULT '0', + `CameraDistanceOffset` float NOT NULL DEFAULT '0', + `BarberShopCameraOffsetScale` float NOT NULL DEFAULT '0', + `BarberShopCameraRotationOffset` float NOT NULL DEFAULT '0', + `VerifiedBuild` int(11) NOT NULL DEFAULT '0', + PRIMARY KEY (`ID`,`VerifiedBuild`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +-- +-- Table structure for table `chr_race_x_chr_model` +-- +DROP TABLE IF EXISTS `chr_race_x_chr_model`; +CREATE TABLE `chr_race_x_chr_model` ( + `ID` int(10) unsigned NOT NULL DEFAULT '0', + `ChrRacesID` int(11) NOT NULL DEFAULT '0', + `ChrModelID` int(11) NOT NULL DEFAULT '0', + `VerifiedBuild` int(11) NOT NULL DEFAULT '0', + PRIMARY KEY (`ID`,`VerifiedBuild`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `chr_races` + ADD `NameS` text AFTER `NameFemaleLowercase`, + ADD `NameFemaleS` text AFTER `NameS`, + ADD `NameLowercaseS` text AFTER `NameFemaleS`, + ADD `NameFemaleLowercaseS` text AFTER `NameLowercaseS`, + ADD `RaceFantasyDescription` text AFTER `NameFemaleLowercaseS`, + ADD `NameL` text AFTER `RaceFantasyDescription`, + ADD `NameFemaleL` text AFTER `NameL`, + ADD `NameLowercaseL` text AFTER `NameFemaleL`, + ADD `NameFemaleLowercaseL` text AFTER `NameLowercaseL`, + ADD `PlayableRaceBit` int(11) NOT NULL DEFAULT '0' AFTER `UiDisplayOrder`, + ADD `HelmetAnimScalingRaceID` int(11) NOT NULL DEFAULT '0' AFTER `PlayableRaceBit`, + ADD `AlteredFormCustomizeOffsetFallback1` float NOT NULL DEFAULT '0' AFTER `TransmogrifyDisabledSlotMask`, + ADD `AlteredFormCustomizeOffsetFallback2` float NOT NULL DEFAULT '0' AFTER `AlteredFormCustomizeOffsetFallback1`, + ADD `AlteredFormCustomizeOffsetFallback3` float NOT NULL DEFAULT '0' AFTER `AlteredFormCustomizeOffsetFallback2`, + ADD `AlteredFormCustomizeRotationFallback` float NOT NULL DEFAULT '0' AFTER `AlteredFormCustomizeOffsetFallback3`, + ADD `UnalteredVisualCustomizationRaceID` tinyint(3) NOT NULL DEFAULT '0' AFTER `FemaleTextureFallbackSex`; + +ALTER TABLE `chr_races` + MODIFY `BaseLanguage` int(11) NOT NULL DEFAULT '0' AFTER `Flags`, + MODIFY `ResSicknessSpellID` int(11) NOT NULL DEFAULT '0' AFTER `BaseLanguage`, + MODIFY `SplashSoundID` int(11) NOT NULL DEFAULT '0' AFTER `ResSicknessSpellID`; + +ALTER TABLE `chr_races` + DROP `MaleDisplayId`, + DROP `FemaleDisplayId`, + DROP `HighResMaleDisplayId`, + DROP `HighResFemaleDisplayId`, + DROP `MaleCustomizeOffset1`, + DROP `MaleCustomizeOffset2`, + DROP `MaleCustomizeOffset3`, + DROP `FemaleCustomizeOffset1`, + DROP `FemaleCustomizeOffset2`, + DROP `FemaleCustomizeOffset3`, + DROP `FemaleSkeletonFileDataID`, + DROP `MaleSkeletonFileDataID`, + DROP `HelmVisFallbackRaceID`, + DROP `CharComponentTextureLayoutID`, + DROP `CharComponentTexLayoutHiResID`; + +ALTER TABLE `chr_races_locale` + ADD `NameS_lang` text AFTER `NameFemaleLowercase_lang`, + ADD `NameFemaleS_lang` text AFTER `NameS_lang`, + ADD `NameLowercaseS_lang` text AFTER `NameFemaleS_lang`, + ADD `NameFemaleLowercaseS_lang` text AFTER `NameLowercaseS_lang`, + ADD `RaceFantasyDescription_lang` text AFTER `NameFemaleLowercaseS_lang`, + ADD `NameL_lang` text AFTER `RaceFantasyDescription_lang`, + ADD `NameFemaleL_lang` text AFTER `NameL_lang`, + ADD `NameLowercaseL_lang` text AFTER `NameFemaleL_lang`, + ADD `NameFemaleLowercaseL_lang` text AFTER `NameLowercaseL_lang`; + +ALTER TABLE `content_tuning` + ADD `MinLevelType` int(11) NOT NULL DEFAULT '0' AFTER `MaxLevel`, + ADD `MaxLevelType` int(11) NOT NULL DEFAULT '0' AFTER `MinLevelType`, + ADD `TargetLevelDelta` int(11) NOT NULL DEFAULT '0' AFTER `MaxLevelType`, + ADD `TargetLevelMaxDelta` int(11) NOT NULL DEFAULT '0' AFTER `TargetLevelDelta`, + ADD `TargetLevelMin` int(11) NOT NULL DEFAULT '0' AFTER `TargetLevelMaxDelta`, + ADD `TargetLevelMax` int(11) NOT NULL DEFAULT '0' AFTER `TargetLevelMin`, + ADD `MinItemLevel` int(11) NOT NULL DEFAULT '0' AFTER `TargetLevelMax`; + +ALTER TABLE `content_tuning` + MODIFY `Flags` int(11) NOT NULL DEFAULT '0' AFTER `ID`, + MODIFY `ExpansionID` int(11) NOT NULL DEFAULT '0' AFTER `Flags`; + +ALTER TABLE `creature_display_info_extra` + DROP `SkinID`, + DROP `FaceID`, + DROP `HairStyleID`, + DROP `HairColorID`, + DROP `FacialHairID`, + DROP `CustomDisplayOption1`, + DROP `CustomDisplayOption2`, + DROP `CustomDisplayOption3`; + +ALTER TABLE `currency_types` CHANGE `ConvertToPlayerExperience` `XpQuestDifficulty` int(11) NOT NULL DEFAULT '0' AFTER `ItemGroupSoundsID`; +ALTER TABLE `currency_types` CHANGE `PlayerConditionID` `AwardConditionID` int(11) NOT NULL DEFAULT '0' AFTER `XpQuestDifficulty`; +ALTER TABLE `currency_types` ADD `MaxQtyWorldStateID` int(11) NOT NULL DEFAULT '0' AFTER `AwardConditionID`; +ALTER TABLE `currency_types` CHANGE `Flags` `Flags1` int(11) NOT NULL DEFAULT '0' AFTER `MaxQtyWorldStateID`; +ALTER TABLE `currency_types` ADD `Flags2` int(11) NOT NULL DEFAULT '0' AFTER `Flags1`; +ALTER TABLE `currency_types` MODIFY `CategoryID` int(11) NOT NULL DEFAULT '0' AFTER `Description`; + +ALTER TABLE `curve_point` + ADD `PosPreSquishX` float NOT NULL DEFAULT '0' AFTER `PosY`, + ADD `PosPreSquishY` float NOT NULL DEFAULT '0' AFTER `PosPreSquishX`; + +ALTER TABLE `destructible_model_data` + MODIFY `State1Wmo` int(11) NOT NULL DEFAULT '0' AFTER `State0AmbientDoodadSet`, + MODIFY `State2Wmo` int(11) NOT NULL DEFAULT '0' AFTER `State1AmbientDoodadSet`, + MODIFY `State3Wmo` int(11) NOT NULL DEFAULT '0' AFTER `State2AmbientDoodadSet`, + MODIFY `State0Wmo` int(11) NOT NULL DEFAULT '0' AFTER `DoNotHighlight`; + +ALTER TABLE `dungeon_encounter` MODIFY `DifficultyID` int(11) NOT NULL DEFAULT '0' AFTER `MapID`; + +ALTER TABLE `gameobjects` + MODIFY `OwnerID` int(11) NOT NULL DEFAULT '0' AFTER `ID`, + MODIFY `DisplayID` int(11) NOT NULL DEFAULT '0' AFTER `OwnerID`, + MODIFY `TypeID` int(11) NOT NULL DEFAULT '0' AFTER `Scale`, + MODIFY `PhaseUseFlags` int(11) NOT NULL DEFAULT '0' AFTER `TypeID`, + MODIFY `PhaseID` int(11) NOT NULL DEFAULT '0' AFTER `PhaseUseFlags`, + MODIFY `PhaseGroupID` int(11) NOT NULL DEFAULT '0' AFTER `PhaseID`; + +ALTER TABLE `garr_building` MODIFY `GarrSiteID` int(11) NOT NULL DEFAULT '0' AFTER `AllianceGameObjectID`; + +ALTER TABLE `garr_follower` + ADD `AutoCombatantID` int(11) NOT NULL DEFAULT '0' AFTER `Gender`, + ADD `CovenantID` int(11) NOT NULL DEFAULT '0' AFTER `AutoCombatantID`; + +ALTER TABLE `gem_properties` DROP `MinItemLevel`; + +ALTER TABLE `item` ADD `ModifiedCraftingReagentItemID` int(11) NOT NULL DEFAULT '0' AFTER `ItemGroupSoundsID`; + +ALTER TABLE `item_appearance` ADD `PlayerConditionID` int(11) NOT NULL DEFAULT '0' AFTER `UiOrder`; + +ALTER TABLE `item_bonus` ADD `Value4` int(11) NOT NULL DEFAULT '0' AFTER `Value3`; + +ALTER TABLE `item_sparse` + ADD `ModifiedCraftingReagentItemID` int(11) NOT NULL DEFAULT '0' AFTER `FactionRelated`, + ADD `ContentTuningID` int(11) NOT NULL DEFAULT '0' AFTER `ModifiedCraftingReagentItemID`, + ADD `PlayerLevelToItemLevelCurveID` int(11) NOT NULL DEFAULT '0' AFTER `ContentTuningID`; + +ALTER TABLE `item_sparse` DROP `ScalingStatDistributionID`; + +ALTER TABLE `lfg_dungeons` ADD `ContentTuningID` int(11) NOT NULL DEFAULT '0' AFTER `MentorCharLevel`; + +ALTER TABLE `lfg_dungeons` + DROP `MinLevel`, + DROP `MaxLevel`, + DROP `TargetLevel`, + DROP `TargetLevelMin`, + DROP `TargetLevelMax`; + +ALTER TABLE `lock` ADD `Flags` int(11) NOT NULL DEFAULT '0' AFTER `ID`; + +ALTER TABLE `map` ADD `InternalName` text AFTER `MapName`; + +ALTER TABLE `player_condition` + ADD `ContentTuningID` int(11) NOT NULL DEFAULT '0' AFTER `MaxPVPRank`, + ADD `CovenantID` int(11) NOT NULL DEFAULT '0' AFTER `ContentTuningID`; + +ALTER TABLE `player_condition` + MODIFY `LanguageID` int(11) NOT NULL DEFAULT '0' AFTER `SkillLogic`, + MODIFY `WeatherID` int(11) NOT NULL DEFAULT '0' AFTER `WorldStateExpressionID`, + MODIFY `QuestKillID` int(11) NOT NULL DEFAULT '0' AFTER `CurrencyLogic`, + MODIFY `Flags` int(11) NOT NULL DEFAULT '0' AFTER `PhaseGroupID`, + MODIFY `PrevQuestID1` int(11) NOT NULL DEFAULT '0' AFTER `MinReputation3`, + MODIFY `PrevQuestID2` int(11) NOT NULL DEFAULT '0' AFTER `PrevQuestID1`, + MODIFY `PrevQuestID3` int(11) NOT NULL DEFAULT '0' AFTER `PrevQuestID2`, + MODIFY `PrevQuestID4` int(11) NOT NULL DEFAULT '0' AFTER `PrevQuestID3`, + MODIFY `CurrQuestID1` int(11) NOT NULL DEFAULT '0' AFTER `PrevQuestID4`, + MODIFY `CurrQuestID2` int(11) NOT NULL DEFAULT '0' AFTER `CurrQuestID1`, + MODIFY `CurrQuestID3` int(11) NOT NULL DEFAULT '0' AFTER `CurrQuestID2`, + MODIFY `CurrQuestID4` int(11) NOT NULL DEFAULT '0' AFTER `CurrQuestID3`, + MODIFY `CurrentCompletedQuestID1` int(11) NOT NULL DEFAULT '0' AFTER `CurrQuestID4`, + MODIFY `CurrentCompletedQuestID2` int(11) NOT NULL DEFAULT '0' AFTER `CurrentCompletedQuestID1`, + MODIFY `CurrentCompletedQuestID3` int(11) NOT NULL DEFAULT '0' AFTER `CurrentCompletedQuestID2`, + MODIFY `CurrentCompletedQuestID4` int(11) NOT NULL DEFAULT '0' AFTER `CurrentCompletedQuestID3`; + +ALTER TABLE `player_condition` + DROP `MinLevel`, + DROP `MaxLevel`; + +ALTER TABLE `scenario_step` MODIFY `RewardQuestID` int(11) NOT NULL DEFAULT '0' AFTER `Criteriatreeid`; + +ALTER TABLE `skill_line_ability` MODIFY `Flags` int(11) NOT NULL DEFAULT '0' AFTER `TrivialSkillLineRankLow`; + +ALTER TABLE `spell_cast_times` DROP `PerLevel`; + +ALTER TABLE `spell_duration` DROP `DurationPerLevel`; + +ALTER TABLE `spell_effect` MODIFY `Effect` int(11) NOT NULL DEFAULT '0' AFTER `EffectIndex`; + +ALTER TABLE `spell_item_enchantment` + ADD `MinItemLevel` int(11) NOT NULL DEFAULT '0' AFTER `IconFileDataID`, + ADD `MaxItemLevel` int(11) NOT NULL DEFAULT '0' AFTER `MinItemLevel`, + ADD `TransmogUseConditionID` int(10) unsigned NOT NULL DEFAULT '0' AFTER `MaxItemLevel`; + +ALTER TABLE `spell_item_enchantment` + MODIFY `ID` int(10) unsigned NOT NULL DEFAULT '0' AFTER `HordeName`, + MODIFY `IconFileDataID` int(10) unsigned NOT NULL DEFAULT '0' AFTER `EffectScalingPoints3`; + +ALTER TABLE `spell_item_enchantment` DROP `TransmogPlayerConditionID`; + +ALTER TABLE `spell_levels` + MODIFY `MaxPassiveAuraLevel` tinyint(3) unsigned NOT NULL DEFAULT '0' AFTER `MaxLevel`, + MODIFY `BaseLevel` int(11) NOT NULL DEFAULT '0' AFTER `MaxPassiveAuraLevel`, + MODIFY `SpellLevel` int(11) NOT NULL DEFAULT '0' AFTER `BaseLevel`; + +ALTER TABLE `spell_misc` + ADD `Attributes15` int(11) NOT NULL DEFAULT '0' AFTER `Attributes14`, + ADD `ShowFutureSpellPlayerConditionID` int(11) NOT NULL DEFAULT '0' AFTER `ContentTuningID`, + ADD `SpellVisualScript` int(11) NOT NULL DEFAULT '0' AFTER `ShowFutureSpellPlayerConditionID`, + ADD `ActiveSpellVisualScript` int(11) NOT NULL DEFAULT '0' AFTER `SpellVisualScript`; + +ALTER TABLE `spell_procs_per_minute_mod` MODIFY `Param` int(11) NOT NULL DEFAULT '0' AFTER `Type`; + +ALTER TABLE `spell_x_spell_visual` DROP `Flags`; + +-- +-- Table structure for table `transmog_illusion` +-- +DROP TABLE IF EXISTS `transmog_illusion`; +CREATE TABLE `transmog_illusion` ( + `ID` int(10) unsigned NOT NULL DEFAULT '0', + `UnlockConditionID` int(11) NOT NULL DEFAULT '0', + `TransmogCost` int(11) NOT NULL DEFAULT '0', + `SpellItemEnchantmentID` int(11) NOT NULL DEFAULT '0', + `Flags` int(11) NOT NULL DEFAULT '0', + `VerifiedBuild` int(11) NOT NULL DEFAULT '0', + PRIMARY KEY (`ID`,`VerifiedBuild`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `ui_map` ADD `ContentTuningID` int(11) NOT NULL DEFAULT '0' AFTER `AlternateUiMapGroup`; + +ALTER TABLE `ui_map` + DROP `LevelRangeMin`, + DROP `LevelRangeMax`; + +ALTER TABLE `ui_map_link` ADD `Flags` int(11) NOT NULL DEFAULT '0' AFTER `OverrideHighlightAtlasID`; + +ALTER TABLE `vehicle` ADD `VehiclePOITypeID` smallint(5) unsigned NOT NULL DEFAULT '0' AFTER `MissileTargetingID`; +ALTER TABLE `vehicle` DROP `UiLocomotionType`; + +DROP TABLE `char_base_section`; + +DROP TABLE `char_sections`; + +DROP TABLE `char_start_outfit`; + +DROP TABLE `character_facial_hair_styles`; + +DROP TABLE `scaling_stat_distribution`;