* deck: added Bitter Triumph, Fable of the Mirror-Breaker, and Slickshot Show-off to Store Championships set
* added Monstrous Rage and Trinket Mage to Wizards Play Network 2025 set
* add Year of the Snake 2025 expansion set
* add Year of the Dragon 2024 expansion set
* deck: add Dragon and Snake tokens for PL24 and PL25
* add Year of the Dragon 2024 and Year of the Snake 2025 expansion sets
* add Reflection of Kiki-Jiki to Store Championships set
* hasBasicLands true for Year of the Dragon 2024 and Year of the Snake 2025
* Update URLs and Land rarity
* add MagicFest 2024 expansion set
* add Love Your LGS 2024 expansion set
* add MKM Standard Showdown expansion set
* Set Full Art Lands to Full Art
* Add new expansion sets: MagicFest 2024, MKM Standard Showdown, and Love Your LGS 2024
* Fix Error
* Add new expansion sets: MagicFest 2023 and 30th Anniversary History Promos
* Add new expansion sets: Love Your LGS 2022 and Regional Championship Qualifiers 2022
* Add Love Your LGS 2020 set
* Add new cards to PURL
* Update MagicFest 2025 set: add new cards and reorder existing entries
* Add Magiccon Cards
* update SacrificeAttachmentCost to work with canPaySacrificeCost
* update SacrificeXTargetCost to use canPaySacrificeCost
* update SacrificeXManaValueCost to use canPaySacrificeCost and getMaxValue
* update Phyrexian Dreadnought to use canPaySacrificeCost
* enable testNahiriSacrificePrevented test
* Fix Angel of Jubilation and Yasharn, Implacable Earth
* canPaySacrificeCost filter was not checking if the source ability was a spell or activated ability
* Create common CantPayLifeOrSacrificeEffect
* add some docs for CantPayLifeOrSacrificeEffect
* change player pay life restrictions and remove player sacrifice cost filter
* pay life cost restriction is now an enum set so multiple effects apply together
* sacrifice cost filter was removed and replaced with PAY_SACRIFICE_COST event
* convert CantPayLifeEffect to CantPayLifeOrSacrificeAbility
* Changed to combine life restriction and sacrifice cost restriction
* update bargain ability cost adjustors using canPay
* fix Thran Portal
* Effect was incorrectly adjusting the cost of mana abilities on itself.
* Fixed ability adding type to itself during ETB
* Add additional tests
* update PayLifeCostRestrictions to be mutually exclusive
- refactor: simplified target implementation from a dozen canTarget, canChoose and possibleTargets methods to canTarget/possibleTargets only (part of #13638, #13766);
- refactor: fixed wrong target implementations in many cards (example: TargetCardInHand for opponent's hand, close#6210);
- AI: now human, AI and test players -- all use possibleTargets logic in most use cases instead filters or custom validation;
- AI: improved AI sims support for multiple targets abilities;
- AI: improved AI stability, freezes and targets errors in some use cases;
- now game logs will show stack ability on push and on resolve (before any choices);
- now game logs will show used choices made by cast/activate, setChoice, setMode and addTarget commands (not work for AI tests, part of #13832);
- improved choice logic for modes and yes/not dialogs (now it's use a more strictly checks, use TestPlayer.MODE_SKIP to stop mode selection);
- improved error logs and testable dialogs menu in cheat mode;
* add foretell tests
* rework foretell events and watcher
* refactor: not static inner classes
* refactor: move becomes foretold code from Ethereal Valkyrie to ForetellAbility
* add watcher for edge cases
* fix Ethereal Valkyrie to not leak face down card name in log
* fix some access modifiers
* refactor: make copy-pasted code common