{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/events/events.js","node_modules/handlebars/dist/cjs/handlebars.runtime.js","node_modules/handlebars/dist/cjs/handlebars/base.js","node_modules/handlebars/dist/cjs/handlebars/decorators.js","node_modules/handlebars/dist/cjs/handlebars/decorators/inline.js","node_modules/handlebars/dist/cjs/handlebars/exception.js","node_modules/handlebars/dist/cjs/handlebars/helpers.js","node_modules/handlebars/dist/cjs/handlebars/helpers/block-helper-missing.js","node_modules/handlebars/dist/cjs/handlebars/helpers/each.js","node_modules/handlebars/dist/cjs/handlebars/helpers/helper-missing.js","node_modules/handlebars/dist/cjs/handlebars/helpers/if.js","node_modules/handlebars/dist/cjs/handlebars/helpers/log.js","node_modules/handlebars/dist/cjs/handlebars/helpers/lookup.js","node_modules/handlebars/dist/cjs/handlebars/helpers/with.js","node_modules/handlebars/dist/cjs/handlebars/logger.js","node_modules/handlebars/dist/cjs/handlebars/no-conflict.js","node_modules/handlebars/dist/cjs/handlebars/runtime.js","node_modules/handlebars/dist/cjs/handlebars/safe-string.js","node_modules/handlebars/dist/cjs/handlebars/utils.js","node_modules/handlebars/runtime.js","node_modules/hbsfy/runtime.js","node_modules/moment/moment.js","src/js/EventsHub.js","src/js/History.js","src/js/config/Config.js","src/js/config/DopLines.js","src/js/config/GamesMappings.js","src/js/config/KeyValueMap.js","src/js/config/NSGLines.js","src/js/config/Texts.js","src/js/config/slotPartials.js","src/js/main.js","src/js/panels/CayScratchPanel.js","src/js/panels/CaySlotPanel.js","src/js/panels/CayTablePanel.js","src/js/panels/DefaultPanel.js","src/js/panels/DopSlotPanel.js","src/js/panels/DopTablePanel.js","src/js/panels/NSGSlotPanel.js","src/js/panels/Panel.js","src/js/panels/TigEntSlotPanel.js","src/js/parsers/DefaultParser.js","src/js/parsers/scratch/cayetano/CayScratchParser.js","src/js/parsers/scratch/cayetano/CayScratchParserFactory.js","src/js/parsers/scratch/cayetano/CayScratchParserLegacy.js","src/js/parsers/scratch/cayetano/games/FourInOneScratchStake10Parser.js","src/js/parsers/scratch/cayetano/games/FourInOneScratchStake1Parser.js","src/js/parsers/scratch/cayetano/games/FourInOneScratchStake2Parser.js","src/js/parsers/scratch/cayetano/games/FourInOneScratchStake5Parser.js","src/js/parsers/scratch/cayetano/games/Scr10pFootyFrenzy2020Parser.js","src/js/parsers/scratch/cayetano/games/Scr10pFootyFrenzy2022Parser.js","src/js/parsers/scratch/cayetano/games/Scr10pRubyWalshChampionsGoldParser.js","src/js/parsers/scratch/cayetano/games/ScrFootyFrenzy2020Parser.js","src/js/parsers/scratch/cayetano/games/ScrFootyFrenzy2022Parser.js","src/js/parsers/scratch/cayetano/games/ScrFootyFrenzyParser.js","src/js/parsers/scratch/cayetano/games/ScrRubyWalshChampionsGoldParser.js","src/js/parsers/slots/cayetano/CaySlotParser.js","src/js/parsers/slots/cayetano/CaySlotParserFactory.js","src/js/parsers/slots/cayetano/CaySlotParserLegacy.js","src/js/parsers/slots/cayetano/games/AgesOfFortuneSlotParser.js","src/js/parsers/slots/cayetano/games/AladinsLampSlotParser.js","src/js/parsers/slots/cayetano/games/AliBabasTreasureSlotParser.js","src/js/parsers/slots/cayetano/games/ArcticFishingParser.js","src/js/parsers/slots/cayetano/games/AsianRichesSlotParser.js","src/js/parsers/slots/cayetano/games/BallOfShameSlotParser.js","src/js/parsers/slots/cayetano/games/BarbarianTreasuresSlotParser.js","src/js/parsers/slots/cayetano/games/BeautysBeastSlotParser.js","src/js/parsers/slots/cayetano/games/BetfairsWildArcadeSlotParser.js","src/js/parsers/slots/cayetano/games/BianconeriWildsSlotParser.js","src/js/parsers/slots/cayetano/games/BigRacingSlotParser.js","src/js/parsers/slots/cayetano/games/BombTheJackpotSlotParser.js","src/js/parsers/slots/cayetano/games/BuffaloRespinSlotParser.js","src/js/parsers/slots/cayetano/games/BullfightSlotParser.js","src/js/parsers/slots/cayetano/games/CastlePillagerSlotParser.js","src/js/parsers/slots/cayetano/games/CaveMegaBlastSlotParser.js","src/js/parsers/slots/cayetano/games/ClassyVegasSlotParser.js","src/js/parsers/slots/cayetano/games/CloningSheepSlotParser.js","src/js/parsers/slots/cayetano/games/CrazySuper7sSlotParser.js","src/js/parsers/slots/cayetano/games/CrusadeSlotParser.js","src/js/parsers/slots/cayetano/games/DarkJungleSlotParser.js","src/js/parsers/slots/cayetano/games/DetectiveWilderSlotParser.js","src/js/parsers/slots/cayetano/games/DiamondRushSlotParser.js","src/js/parsers/slots/cayetano/games/DragonsWildSlotParser.js","src/js/parsers/slots/cayetano/games/EasterMoneySlotParser.js","src/js/parsers/slots/cayetano/games/EgyptianWildsSlotParser.js","src/js/parsers/slots/cayetano/games/FantasiaSlotParser.js","src/js/parsers/slots/cayetano/games/FlirtingTangSlotParser.js","src/js/parsers/slots/cayetano/games/FootyFrenzy2020SlotParser.js","src/js/parsers/slots/cayetano/games/FootyFrenzy2022SlotParser.js","src/js/parsers/slots/cayetano/games/FootyFrenzySlotParser.js","src/js/parsers/slots/cayetano/games/ForestRushSlotParser.js","src/js/parsers/slots/cayetano/games/FrootShootSlotParser.js","src/js/parsers/slots/cayetano/games/FruitPopsSlotParser.js","src/js/parsers/slots/cayetano/games/FruitStackBigSpinsSlotParser.js","src/js/parsers/slots/cayetano/games/FruitStackDeluxeSlotParser.js","src/js/parsers/slots/cayetano/games/FruitStackMysteryWinSlotParser.js","src/js/parsers/slots/cayetano/games/FruitStackOneSlotParser.js","src/js/parsers/slots/cayetano/games/FruitStackSlotParser.js","src/js/parsers/slots/cayetano/games/FruitStackSuperDoubleWildSlotParser.js","src/js/parsers/slots/cayetano/games/FunFairSlotParser.js","src/js/parsers/slots/cayetano/games/GemBlastSlotParser.js","src/js/parsers/slots/cayetano/games/GiftsOfRaSlotParser.js","src/js/parsers/slots/cayetano/games/GoldenKingdomSlotParser.js","src/js/parsers/slots/cayetano/games/GoldenPlanetSlotParser.js","src/js/parsers/slots/cayetano/games/GoldenPotSlotParser.js","src/js/parsers/slots/cayetano/games/GoldenThunderSlotParser.js","src/js/parsers/slots/cayetano/games/GolderadoSlotParser.js","src/js/parsers/slots/cayetano/games/GoldheadsSlotParser.js","src/js/parsers/slots/cayetano/games/GreatGemsSlotParser.js","src/js/parsers/slots/cayetano/games/GypsyLuckSlotParser.js","src/js/parsers/slots/cayetano/games/HalloWinSlotParser.js","src/js/parsers/slots/cayetano/games/HappyHourSlotParser.js","src/js/parsers/slots/cayetano/games/HappyRoosterSlotParser.js","src/js/parsers/slots/cayetano/games/HotSlotSlotParser.js","src/js/parsers/slots/cayetano/games/IndianPrincessSlotParser.js","src/js/parsers/slots/cayetano/games/IrishCloverSlotParser.js","src/js/parsers/slots/cayetano/games/JadeFortuneTempleSlotParser.js","src/js/parsers/slots/cayetano/games/JapaneseMysterySlotParser.js","src/js/parsers/slots/cayetano/games/JoustingWildsSlotParser.js","src/js/parsers/slots/cayetano/games/KeepingUpWithThePaddysSlotParser.js","src/js/parsers/slots/cayetano/games/LeagueOfWildsSlotParser.js","src/js/parsers/slots/cayetano/games/LittleRedRidingHoodSlotParser.js","src/js/parsers/slots/cayetano/games/LuckyCabaretSlotParser.js","src/js/parsers/slots/cayetano/games/LuckyMahjongSlotParser.js","src/js/parsers/slots/cayetano/games/MagicFairiesSlotParser.js","src/js/parsers/slots/cayetano/games/MagnificentWildSlotParser.js","src/js/parsers/slots/cayetano/games/ManekiGoldSlotParser.js","src/js/parsers/slots/cayetano/games/MaximusReelsSlotParser.js","src/js/parsers/slots/cayetano/games/MayanMysterySlotParser.js","src/js/parsers/slots/cayetano/games/MazeOfFortuneSlotParser.js","src/js/parsers/slots/cayetano/games/MineCrusherSlotParser.js","src/js/parsers/slots/cayetano/games/MississippiQueenSlotParser.js","src/js/parsers/slots/cayetano/games/MoneyMachineSlotParser.js","src/js/parsers/slots/cayetano/games/MoneyNightSlotParser.js","src/js/parsers/slots/cayetano/games/MoneyTowerSlotParser.js","src/js/parsers/slots/cayetano/games/MonteCarloRacingSlotParser.js","src/js/parsers/slots/cayetano/games/MrDiamondsSlotParser.js","src/js/parsers/slots/cayetano/games/NeonWildsSlotParser.js","src/js/parsers/slots/cayetano/games/NudgingGemsSlotParser.js","src/js/parsers/slots/cayetano/games/OstrichLuckSlotParser.js","src/js/parsers/slots/cayetano/games/PaddyPowerFanaticsSlotParser.js","src/js/parsers/slots/cayetano/games/PaddyPowerGoldBookOfLuckSlotParser.js","src/js/parsers/slots/cayetano/games/PaddyPowerGoldOnTourSlotParser.js","src/js/parsers/slots/cayetano/games/PaddyPowerGoldSlotParser.js","src/js/parsers/slots/cayetano/games/PaddyPowerMysteryGoldSlotParser.js","src/js/parsers/slots/cayetano/games/PaddyPowerShowtimeSlotParser.js","src/js/parsers/slots/cayetano/games/PaddysLuckyMineSlotParser.js","src/js/parsers/slots/cayetano/games/PaddysLuckyPigeonSlotParser.js","src/js/parsers/slots/cayetano/games/PaddysWonderWheelUnderConstructionSlotParser.js","src/js/parsers/slots/cayetano/games/ParadiseTreasuresSlotParser.js","src/js/parsers/slots/cayetano/games/PersianGlorySlotParser.js","src/js/parsers/slots/cayetano/games/PharaohsEternalGlorySlotParser.js","src/js/parsers/slots/cayetano/games/PiratesHoldDavyLockersCoinsSlotParser.js","src/js/parsers/slots/cayetano/games/PiratesHoldSlotParser.js","src/js/parsers/slots/cayetano/games/PoseidonFortuneSlotParser.js","src/js/parsers/slots/cayetano/games/PyramidGoldSlotParser.js","src/js/parsers/slots/cayetano/games/RacingWildsSlotParser.js","src/js/parsers/slots/cayetano/games/ReelsOfEgyptSlotParser.js","src/js/parsers/slots/cayetano/games/RhinoRumbleSlotParser.js","src/js/parsers/slots/cayetano/games/RobinHoodGoldenLootSlotParser.js","src/js/parsers/slots/cayetano/games/RoyalGooseSlotParser.js","src/js/parsers/slots/cayetano/games/RubyWalshChampionsGoldSlotParser.js","src/js/parsers/slots/cayetano/games/RussianGlorySlotParser.js","src/js/parsers/slots/cayetano/games/SafariDreamSlotParser.js","src/js/parsers/slots/cayetano/games/SantasChristmasGiftsSlotParser.js","src/js/parsers/slots/cayetano/games/SantasSpinsSlotParser.js","src/js/parsers/slots/cayetano/games/ShamanSpinsSlotParser.js","src/js/parsers/slots/cayetano/games/ShowtimeSpinnerSlotParser.js","src/js/parsers/slots/cayetano/games/SinbadsGoldSlotParser.js","src/js/parsers/slots/cayetano/games/SkullsSlotParser.js","src/js/parsers/slots/cayetano/games/SlottingSlopesSlotParser.js","src/js/parsers/slots/cayetano/games/SmoothieSmashSlotParser.js","src/js/parsers/slots/cayetano/games/SolarSnapSlotParser.js","src/js/parsers/slots/cayetano/games/SonsOfAsgardSlotParser.js","src/js/parsers/slots/cayetano/games/SparklingJackpotSlotParser.js","src/js/parsers/slots/cayetano/games/SphinxGoldSlotParser.js","src/js/parsers/slots/cayetano/games/SuperFuegoSlotParser.js","src/js/parsers/slots/cayetano/games/ThaiThaiSlotParser.js","src/js/parsers/slots/cayetano/games/TheGreatWildSlotParser.js","src/js/parsers/slots/cayetano/games/TheHeistSlotParser.js","src/js/parsers/slots/cayetano/games/TowerOfWealthSlotParser.js","src/js/parsers/slots/cayetano/games/TrickOTreatSlotParser.js","src/js/parsers/slots/cayetano/games/TumbleDwarfAndTheLibraryOfSecretsSlotParser.js","src/js/parsers/slots/cayetano/games/TumbleDwarfMysteryGoldSlotParser.js","src/js/parsers/slots/cayetano/games/TumbleDwarfSlotParser.js","src/js/parsers/slots/cayetano/games/WildEgyptSlotParser.js","src/js/parsers/slots/cayetano/games/WildSheriffSlotParser.js","src/js/parsers/slots/cayetano/games/WildStarsSlotParser.js","src/js/parsers/slots/cayetano/games/WishAWinSlotParser.js","src/js/parsers/slots/cayetano/games/WorldOfWizardsSlotParser.js","src/js/parsers/slots/cayetano/games/WormKingSlotParser.js","src/js/parsers/slots/dop/DopSlotParser.js","src/js/parsers/slots/dop/DopSlotParserFactory.js","src/js/parsers/slots/dop/games/AgeOfAkkadiaSlotParser.js","src/js/parsers/slots/dop/games/AgentRoyaleSlotParser.js","src/js/parsers/slots/dop/games/AlexanderTheGreatSlotParser.js","src/js/parsers/slots/dop/games/AncientDiscoSlotParser.js","src/js/parsers/slots/dop/games/AncientScriptSlotParser.js","src/js/parsers/slots/dop/games/AncientsBlessingSlotParser.js","src/js/parsers/slots/dop/games/ArcadeBombSlotParser.js","src/js/parsers/slots/dop/games/AstronautSlotParser.js","src/js/parsers/slots/dop/games/AstrosSlotParser.js","src/js/parsers/slots/dop/games/AthensMegaWaysSlotParser.js","src/js/parsers/slots/dop/games/AtlantisSlotParser.js","src/js/parsers/slots/dop/games/BabylonRichesSlotParser.js","src/js/parsers/slots/dop/games/BettyBorisAndBooSlotParser.js","src/js/parsers/slots/dop/games/BlobstersClusterbusterSlotParser.js","src/js/parsers/slots/dop/games/BloodSuckersMegaWaysSlotParser.js","src/js/parsers/slots/dop/games/BombusterSlotParser.js","src/js/parsers/slots/dop/games/BountyRaidSlotParser.js","src/js/parsers/slots/dop/games/BuffaloCollectorSlotParser.js","src/js/parsers/slots/dop/games/BuffaloManiaMegaWaysSlotParser.js","src/js/parsers/slots/dop/games/BullsRunWildSlotParser.js","src/js/parsers/slots/dop/games/CaiShen168SlotParser.js","src/js/parsers/slots/dop/games/CannonballCashSlotParser.js","src/js/parsers/slots/dop/games/CaptainRizkMegaWaysParser.js","src/js/parsers/slots/dop/games/CashExplorerSlotParser.js","src/js/parsers/slots/dop/games/CasinoNightSlotParser.js","src/js/parsers/slots/dop/games/ChristmasMorningSlotParser.js","src/js/parsers/slots/dop/games/CinderellaSlotParser.js","src/js/parsers/slots/dop/games/CirqueDeLaFortuneSlotParser.js","src/js/parsers/slots/dop/games/ClashOfTheBeastsSlotParser.js","src/js/parsers/slots/dop/games/CloverCrazeSlotParser.js","src/js/parsers/slots/dop/games/CrazyGenieSlotParser.js","src/js/parsers/slots/dop/games/CyberAttackSlotParser.js","src/js/parsers/slots/dop/games/DearSantaSlotParser.js","src/js/parsers/slots/dop/games/DevilsNumberSlotParser.js","src/js/parsers/slots/dop/games/DiamondBlitz2SlotParser.js","src/js/parsers/slots/dop/games/DiamondBlitzSlotParser.js","src/js/parsers/slots/dop/games/DiamondDoggiesSlotParser.js","src/js/parsers/slots/dop/games/DiamondRoyaleSlotParser.js","src/js/parsers/slots/dop/games/DiceDiceDiceSlotParser.js","src/js/parsers/slots/dop/games/DivineWaysSlotParser.js","src/js/parsers/slots/dop/games/DoggyRichesMegaWaysSlotParser.js","src/js/parsers/slots/dop/games/DragonKingLegendOfTheSeasSlotParser.js","src/js/parsers/slots/dop/games/DragonsClusterbusterSlotParser.js","src/js/parsers/slots/dop/games/DragonsFireInfiniReelsSlotParser.js","src/js/parsers/slots/dop/games/DragonsFireMegaWaysSlotParser.js","src/js/parsers/slots/dop/games/DragonsLockSlotParser.js","src/js/parsers/slots/dop/games/DragonsMirrorSlotParser.js","src/js/parsers/slots/dop/games/DragonsPlaygroundSlotParser.js","src/js/parsers/slots/dop/games/DruidsMagicSlotParser.js","src/js/parsers/slots/dop/games/DynamiteRichesMegaWaysSlotParser.js","src/js/parsers/slots/dop/games/DynamiteRichesSlotParser.js","src/js/parsers/slots/dop/games/EasyGoldSlotParser.js","src/js/parsers/slots/dop/games/EgyptClusterbusterSlotParser.js","src/js/parsers/slots/dop/games/EgyptMegaWaysSlotParser.js","src/js/parsers/slots/dop/games/ElvenMagicSlotParser.js","src/js/parsers/slots/dop/games/EmeraldDiamondSlotParser.js","src/js/parsers/slots/dop/games/EmperorOfIndiaSlotParser.js","src/js/parsers/slots/dop/games/EpicJourneySlotParser.js","src/js/parsers/slots/dop/games/EsqueletoMariachiSlotParser.js","src/js/parsers/slots/dop/games/FishtasticSlotParser.js","src/js/parsers/slots/dop/games/FlamingFoxSlotParser.js","src/js/parsers/slots/dop/games/FlodderSlotParser.js","src/js/parsers/slots/dop/games/FortuneCatSlotParser.js","src/js/parsers/slots/dop/games/FortuneCharmSlotParser.js","src/js/parsers/slots/dop/games/FortuneHouseSlotParser.js","src/js/parsers/slots/dop/games/FourSquadSlotParser.js","src/js/parsers/slots/dop/games/FruitFlashSlotParser.js","src/js/parsers/slots/dop/games/FruitShopFrenzySlotParser.js","src/js/parsers/slots/dop/games/GemCrushSlotParser.js","src/js/parsers/slots/dop/games/GemsGoneWildPowerReelsSlotParser.js","src/js/parsers/slots/dop/games/GemsGoneWildSlotParser.js","src/js/parsers/slots/dop/games/GemsInfernoMegaWaysSlotParser.js","src/js/parsers/slots/dop/games/GemtasticSlotParser.js","src/js/parsers/slots/dop/games/GenieNightsSlotParser.js","src/js/parsers/slots/dop/games/GetTheGoldInfiniReelsSlotParser.js","src/js/parsers/slots/dop/games/GigaBlastSlotParser.js","src/js/parsers/slots/dop/games/GladiatorClashSlotParser.js","src/js/parsers/slots/dop/games/GodsOfTroySlotParser.js","src/js/parsers/slots/dop/games/GoldMineMistressSlotParser.js","src/js/parsers/slots/dop/games/GoldenLeprechaunMegaWaysSlotParser.js","src/js/parsers/slots/dop/games/GoldenOfferSlotParser.js","src/js/parsers/slots/dop/games/GonzosQuestMegaWaysSlotParser.js","src/js/parsers/slots/dop/games/GoodLuckClusterbusterSlotParser.js","src/js/parsers/slots/dop/games/GrandWheelSlotParser.js","src/js/parsers/slots/dop/games/GreatGoldSlotParser.js","src/js/parsers/slots/dop/games/HammerGodsSlotParser.js","src/js/parsers/slots/dop/games/HappyApplesSlotParser.js","src/js/parsers/slots/dop/games/HarleCoinSlotParser.js","src/js/parsers/slots/dop/games/HereKittyKittySlotParser.js","src/js/parsers/slots/dop/games/HoardOfPoseidonSlotParser.js","src/js/parsers/slots/dop/games/HotHotChilliPotSlotParser.js","src/js/parsers/slots/dop/games/HundredKDropSlotParser.js","src/js/parsers/slots/dop/games/ImperialPalaceSlotParser.js","src/js/parsers/slots/dop/games/JackInAPotSlotParser.js","src/js/parsers/slots/dop/games/JellyBellyMegaWaysSlotParser.js","src/js/parsers/slots/dop/games/JewelScarabsSlotParser.js","src/js/parsers/slots/dop/games/JingleBellsBonanzaSlotParser.js","src/js/parsers/slots/dop/games/JingleBellsPowerReelsSlotParser.js","src/js/parsers/slots/dop/games/JingleWaysMegaWaysSlotParser.js","src/js/parsers/slots/dop/games/JoeExoticSlotParser.js","src/js/parsers/slots/dop/games/JudgementDayMegaWaysSlotParser.js","src/js/parsers/slots/dop/games/KnightsOfAvalonSlotParser.js","src/js/parsers/slots/dop/games/LaserFruitSlotParser.js","src/js/parsers/slots/dop/games/LastChanceSaloonSlotParser.js","src/js/parsers/slots/dop/games/LegendaryExcaliburSlotParser.js","src/js/parsers/slots/dop/games/LionDanceSlotParser.js","src/js/parsers/slots/dop/games/LionsHoardSlotParser.js","src/js/parsers/slots/dop/games/LondonTubeSlotParser.js","src/js/parsers/slots/dop/games/LostRelics2SlotParser.js","src/js/parsers/slots/dop/games/LuckyDevilSlotParser.js","src/js/parsers/slots/dop/games/LuckyMrGreenSlotParser.js","src/js/parsers/slots/dop/games/LuckyOktoberfestSlotParser.js","src/js/parsers/slots/dop/games/LunaFortunaSlotParser.js","src/js/parsers/slots/dop/games/MagicLabSlotParser.js","src/js/parsers/slots/dop/games/MagicPowersMegaWaysSlotParser.js","src/js/parsers/slots/dop/games/MajesticMysteriesPowerReelsSlotParser.js","src/js/parsers/slots/dop/games/MasqueradeSlotParser.js","src/js/parsers/slots/dop/games/MayanGodsSlotParser.js","src/js/parsers/slots/dop/games/MayhemSlotParser.js","src/js/parsers/slots/dop/games/MegaDragonSlotParser.js","src/js/parsers/slots/dop/games/MegaPyramidSlotParser.js","src/js/parsers/slots/dop/games/MermaidsSlotParser.js","src/js/parsers/slots/dop/games/MidasGoldSlotParser.js","src/js/parsers/slots/dop/games/MidnightRomanceSlotParser.js","src/js/parsers/slots/dop/games/MineBlownSlotParser.js","src/js/parsers/slots/dop/games/MixAndMatchSlotParser.js","src/js/parsers/slots/dop/games/MonstersUnchainedSlotParser.js","src/js/parsers/slots/dop/games/MoonSpellSlotParser.js","src/js/parsers/slots/dop/games/MsRobinHoodSlotParser.js","src/js/parsers/slots/dop/games/MultiplierRichesSlotParser.js","src/js/parsers/slots/dop/games/MummyMegaWaysSlotParser.js","src/js/parsers/slots/dop/games/MysteryFruitSlotParser.js","src/js/parsers/slots/dop/games/MysteryReelsDeluxeSlotParser.js","src/js/parsers/slots/dop/games/MysteryReelsMegaWaysSlotParser.js","src/js/parsers/slots/dop/games/MysticWheelSlotParser.js","src/js/parsers/slots/dop/games/NarcosMexicoSlotParser.js","src/js/parsers/slots/dop/games/NeonLinksSlotParser.js","src/js/parsers/slots/dop/games/NightRollerSlotParser.js","src/js/parsers/slots/dop/games/NinjaWaysSlotParser.js","src/js/parsers/slots/dop/games/PaddyPowerGoldMegaWaysSlotParser.js","src/js/parsers/slots/dop/games/PandorasTreasureSlotParser.js","src/js/parsers/slots/dop/games/PeggySweetsSlotParser.js","src/js/parsers/slots/dop/games/PersianFortuneSlotParser.js","src/js/parsers/slots/dop/games/PiggyPiratesSlotParser.js","src/js/parsers/slots/dop/games/PiggyRiches2MegaWaysSlotParser.js","src/js/parsers/slots/dop/games/PiratesPartySlotParser.js","src/js/parsers/slots/dop/games/PiratesPlentyBattleForGoldSlotParser.js","src/js/parsers/slots/dop/games/PiratesPlentyMegaWaysSlotParser.js","src/js/parsers/slots/dop/games/PiratesPlentySlotParser.js","src/js/parsers/slots/dop/games/PlayWithTheDevilSlotParser.js","src/js/parsers/slots/dop/games/PrimateKingMegaWaysSlotParser.js","src/js/parsers/slots/dop/games/PrimateKingSlotParser.js","src/js/parsers/slots/dop/games/PussNBootsSlotParser.js","src/js/parsers/slots/dop/games/RAsLegendSlotParser.js","src/js/parsers/slots/dop/games/RainbowJackpotsMegaWaysSlotParser.js","src/js/parsers/slots/dop/games/RainbowJackpotsPowerLinesSlotParser.js","src/js/parsers/slots/dop/games/RainbowJackpotsSlotParser.js","src/js/parsers/slots/dop/games/ReactorSlotParser.js","src/js/parsers/slots/dop/games/RedDiamondSlotParser.js","src/js/parsers/slots/dop/games/RedHotBBQSlotParser.js","src/js/parsers/slots/dop/games/ReelHeistSlotParser.js","src/js/parsers/slots/dop/games/ReelKeeperSlotParser.js","src/js/parsers/slots/dop/games/ReelKingMegaSlotParser.js","src/js/parsers/slots/dop/games/RegalBeastsSlotParser.js","src/js/parsers/slots/dop/games/ReptizillionsPowerReelsSlotParser.js","src/js/parsers/slots/dop/games/RiddleOfTheSphinxSlotParser.js","src/js/parsers/slots/dop/games/RisqueMegaWaysSlotParser.js","src/js/parsers/slots/dop/games/RobinHoodsWildForestSlotParser.js","src/js/parsers/slots/dop/games/RocketMenSlotParser.js","src/js/parsers/slots/dop/games/RomanEmperorsSlotParser.js","src/js/parsers/slots/dop/games/SakuraMasksSlotParser.js","src/js/parsers/slots/dop/games/SavannahPrideSlotParser.js","src/js/parsers/slots/dop/games/SevenSevenSevenStrikeSlotParser.js","src/js/parsers/slots/dop/games/SevenSevenSevenSuperStrikeSlotParser.js","src/js/parsers/slots/dop/games/SevensLuckSlotParser.js","src/js/parsers/slots/dop/games/ShadowSocietySlotParser.js","src/js/parsers/slots/dop/games/SheepGoneWildSlotParser.js","src/js/parsers/slots/dop/games/SirensRichesSlotParser.js","src/js/parsers/slots/dop/games/SnowWildAndThe7FeaturesSlotParser.js","src/js/parsers/slots/dop/games/SpinTownSlotParser.js","src/js/parsers/slots/dop/games/SteamSquadSlotParser.js","src/js/parsers/slots/dop/games/StolenTreasuresSlotParser.js","src/js/parsers/slots/dop/games/SugarliciousEveryWaySlotParser.js","src/js/parsers/slots/dop/games/SumoSpinsSlotParser.js","src/js/parsers/slots/dop/games/SunFortuneSlotParser.js","src/js/parsers/slots/dop/games/TenElementsSlotParser.js","src/js/parsers/slots/dop/games/TenThousandAndOneNightsMegaWaysSlotParser.js","src/js/parsers/slots/dop/games/TenThousandAndOneNightsSlotParser.js","src/js/parsers/slots/dop/games/TheEqualizerSlotParser.js","src/js/parsers/slots/dop/games/TheGoodTheBadAndTheRichSlotParser.js","src/js/parsers/slots/dop/games/TheGreatestTrainRobberySlotParser.js","src/js/parsers/slots/dop/games/TheWildHatterSlotParser.js","src/js/parsers/slots/dop/games/TheWildKissSlotParser.js","src/js/parsers/slots/dop/games/TheWishMasterMegaWaysSlotParser.js","src/js/parsers/slots/dop/games/ThorsLightningSlotParser.js","src/js/parsers/slots/dop/games/ThorsVengeanceSlotParser.js","src/js/parsers/slots/dop/games/ThreeKingdomsSlotParser.js","src/js/parsers/slots/dop/games/ThreeMusketeersSlotParser.js","src/js/parsers/slots/dop/games/TicketToWildSlotParser.js","src/js/parsers/slots/dop/games/TotemLightningPowerReelsSlotParser.js","src/js/parsers/slots/dop/games/TotemLightningSlotParser.js","src/js/parsers/slots/dop/games/TransylvaniaNightOfBloodSlotParser.js","src/js/parsers/slots/dop/games/TreasureMinePowerReelsSlotParser.js","src/js/parsers/slots/dop/games/TreasureMineSlotParser.js","src/js/parsers/slots/dop/games/TrillionaireMegaWaysSlotParser.js","src/js/parsers/slots/dop/games/TrillionaireSlotParser.js","src/js/parsers/slots/dop/games/TrophyFishSlotParser.js","src/js/parsers/slots/dop/games/TurtleParadiseSlotParser.js","src/js/parsers/slots/dop/games/TwentyFourHourGrandPrixSlotParser.js","src/js/parsers/slots/dop/games/VaultCrackerMegaWaysSlotParser.js","src/js/parsers/slots/dop/games/VaultCrackerSlotParser.js","src/js/parsers/slots/dop/games/VickyVenturaSlotParser.js","src/js/parsers/slots/dop/games/VikingsLegacyEveryWaySlotParser.js","src/js/parsers/slots/dop/games/ViralSpiralSlotParser.js","src/js/parsers/slots/dop/games/WarOfGodsSlotParser.js","src/js/parsers/slots/dop/games/WellOfWishesSlotParser.js","src/js/parsers/slots/dop/games/WheelOfAmpSlotParser.js","src/js/parsers/slots/dop/games/WildCircusSlotParser.js","src/js/parsers/slots/dop/games/WildElementsSlotParser.js","src/js/parsers/slots/dop/games/WildFightSlotParser.js","src/js/parsers/slots/dop/games/WildHotChilliReels2SlotParser.js","src/js/parsers/slots/dop/games/WildHotChilliReelsSlotParser.js","src/js/parsers/slots/dop/games/WildNordsSlotParser.js","src/js/parsers/slots/dop/games/WildTundraSlotParser.js","src/js/parsers/slots/dop/games/WildWildChestSlotParser.js","src/js/parsers/slots/dop/games/WinEscalatorSlotParser.js","src/js/parsers/slots/dop/games/WingsOfRaSlotParser.js","src/js/parsers/slots/dop/games/WinterWondersSlotParser.js","src/js/parsers/slots/dop/games/WolfStacksMegaWaysSlotParser.js","src/js/parsers/slots/dop/games/YearRoundRichesClusterbusterSlotParser.js","src/js/parsers/slots/dop/games/ZaidasFortuneSlotParser.js","src/js/parsers/slots/dop/games/ZeusLightningMegaWaysSlotParser.js","src/js/parsers/slots/dop/games/ZeusLightningPowerReelsSlotParser.js","src/js/parsers/slots/dop/games/ZillardKingSlotParser.js","src/js/parsers/slots/nsg/NSGSlotParser.js","src/js/parsers/slots/nsg/NSGSlotParserFactory.js","src/js/parsers/slots/nsg/games/AliBabasLuckMegawaysSlotParser.js","src/js/parsers/slots/nsg/games/AliBabasLuckPowerReelsSlotParser.js","src/js/parsers/slots/nsg/games/AliBabasLuckSlotParser.js","src/js/parsers/slots/nsg/games/AmazonIslandMegaWaysSlotParser.js","src/js/parsers/slots/nsg/games/ArcOfZeusSlotParser.js","src/js/parsers/slots/nsg/games/AsianFortuneSlotParser.js","src/js/parsers/slots/nsg/games/AztecShamansMegaWaysSlotParser.js","src/js/parsers/slots/nsg/games/CasinoSpinSlotParser.js","src/js/parsers/slots/nsg/games/ChineseWildsSlotParser.js","src/js/parsers/slots/nsg/games/ChristmasMULTIHOPSSlotParser.js","src/js/parsers/slots/nsg/games/CobraQueenSlotParser.js","src/js/parsers/slots/nsg/games/CottonGangAffairSlotParser.js","src/js/parsers/slots/nsg/games/DesertLegendsSpinsSlotParser.js","src/js/parsers/slots/nsg/games/DontHitPlzSlotParser.js","src/js/parsers/slots/nsg/games/DrFrancashsteinSlotParser.js","src/js/parsers/slots/nsg/games/DragonPearlSlotParser.js","src/js/parsers/slots/nsg/games/DreamDestinySlotParser.js","src/js/parsers/slots/nsg/games/EightysSpinsSlotParser.js","src/js/parsers/slots/nsg/games/ElephantTreasureSlotParser.js","src/js/parsers/slots/nsg/games/EpicTreasure2SlotParser.js","src/js/parsers/slots/nsg/games/EpicTreasureSlotParser.js","src/js/parsers/slots/nsg/games/FishNFishSlotParser.js","src/js/parsers/slots/nsg/games/GlowDigSlotParser.js","src/js/parsers/slots/nsg/games/GoldenLampsSlotParser.js","src/js/parsers/slots/nsg/games/GoldenToadSlotParser.js","src/js/parsers/slots/nsg/games/JellyMULTIHOPSSlotParser.js","src/js/parsers/slots/nsg/games/LeprechaunsMagicMegawaysSlotParser.js","src/js/parsers/slots/nsg/games/LeprechaunsMagicPowerReelsSlotParser.js","src/js/parsers/slots/nsg/games/LeprechaunsMagicSlotParser.js","src/js/parsers/slots/nsg/games/LosMuertosLocosSlotParser.js","src/js/parsers/slots/nsg/games/LuckyCarnivalSlotParser.js","src/js/parsers/slots/nsg/games/MacauRacingSlotParser.js","src/js/parsers/slots/nsg/games/MidnightThirstSlotParser.js","src/js/parsers/slots/nsg/games/NeptunesRichesSlotParser.js","src/js/parsers/slots/nsg/games/NightmareFamilyMegaWaysSlotParser.js","src/js/parsers/slots/nsg/games/PurrPowerSlotParser.js","src/js/parsers/slots/nsg/games/RedHotSlotSlotParser.js","src/js/parsers/slots/nsg/games/RumbleMuttsSlotParser.js","src/js/parsers/slots/nsg/games/SeaBoatAdventureMegaWaysSlotParser.js","src/js/parsers/slots/nsg/games/SeaBoatAdventureSlotParser.js","src/js/parsers/slots/nsg/games/SwordStompSlotParser.js","src/js/parsers/slots/nsg/games/WantedWildzExtremeSlotParser.js","src/js/parsers/slots/nsg/games/WantedWildzSlotParser.js","src/js/parsers/table/cayetano/CayTableParser.js","src/js/parsers/table/cayetano/CayTableParserFactory.js","src/js/parsers/table/cayetano/games/BlackJackParser.js","src/js/parsers/table/cayetano/games/ThreeCardBragParser.js","src/js/parsers/table/cayetano/games/VideoPokerParser.js","src/js/parsers/table/dop/DopTableParser.js","src/js/parsers/table/dop/DopTableParserFactory.js","src/js/parsers/table/dop/games/BlackJackParser.js","src/js/utils/AssetsHelper.js","src/js/utils/CacheHelper.js","src/js/utils/Currency.js","src/js/utils/FeatureBuyParser.js","src/js/utils/Format.js","src/js/utils/Language.js","src/js/utils/Overrides.js","src/js/utils/helpers.js","src/templates/Partials/cards.hbs","src/templates/Partials/hands.hbs","src/templates/Partials/infoBlackjack.hbs","src/templates/Partials/infoPuntoBanco.hbs","src/templates/Partials/infoRoulette.hbs","src/templates/Partials/infoVideoPoker.hbs","src/templates/Partials/number.hbs","src/templates/Partials/slot/demoRoundNote.hbs","src/templates/Partials/slot/freeRoundNote.hbs","src/templates/Partials/slot/gameDetails.hbs","src/templates/Partials/slot/jackpotDetails.hbs","src/templates/Partials/slot/spinDetails.hbs","src/templates/Partials/slot/spinScreen.hbs","src/templates/Partials/slot/tilesData.hbs","src/templates/Partials/slot/transactions.hbs","src/templates/Partials/slot/winLinesDetails.hbs","src/templates/init.hbs","src/templates/scratch.hbs","src/templates/slots.hbs","src/templates/table.hbs","src/templates/tigentSlots.hbs"],"names":["EventEmitter","this","_events","Object","prototype","hasOwnProperty","call","objectCreate","_eventsCount","_maxListeners","undefined","$getMaxListeners","that","defaultMaxListeners","emitNone","handler","isFn","self","len","length","listeners","arrayClone","i","emitOne","arg1","emitTwo","arg2","emitThree","arg3","emitMany","args","apply","_addListener","target","type","listener","prepend","m","events","existing","TypeError","newListener","emit","unshift","push","warned","w","Error","String","name","emitter","count","console","warn","message","onceWrapper","fired","removeListener","wrapFn","arguments","Array","_onceWrap","state","wrapped","bind","_listeners","unwrap","evlistener","unwrapListeners","listenerCount","spliceOne","list","index","k","n","pop","arr","copy","ret","objectCreatePolyfill","proto","F","objectKeysPolyfill","obj","keys","functionBindPolyfill","context","fn","create","objectKeys","Function","module","exports","hasDefineProperty","o","defineProperty","value","x","err","enumerable","get","set","arg","setMaxListeners","isNaN","getMaxListeners","er","doError","error","addListener","on","prependListener","once","prependOnceListener","position","originalListener","shift","removeAllListeners","key","rawListeners","eventNames","Reflect","ownKeys","hb","base","HandlebarsEnvironment","Utils","extend","SafeString","_handlebarsSafeString2","Exception","_handlebarsException2","escapeExpression","VM","runtime","template","spec","_interopRequireWildcard","_handlebarsBase","_handlebarsUtils","_handlebarsRuntime","inst","_handlebarsNoConflict2","helpers","partials","decorators","_helpers","registerDefaultHelpers","_decorators","registerDefaultDecorators","VERSION","COMPILER_REVISION","REVISION_CHANGES","1","2","3","4","5","6","7","objectType","constructor","logger","_logger2","log","registerHelper","_utils","toString","_exception2","unregisterHelper","registerPartial","partial","unregisterPartial","registerDecorator","unregisterDecorator","createFrame","instance","_decoratorsInline2","props","container","options","original","node","loc","line","column","start","tmp","idx","errorProps","captureStackTrace","lineNumber","nop","_helpersBlockHelperMissing2","_helpersEach2","_helpersHelperMissing2","_helpersIf2","_helpersLog2","_helpersLookup2","_helpersWith2","inverse","isArray","ids","each","data","contextPath","appendContextPath","execIteration","field","last","first","blockParams","isFunction","j","priorKey","conditional","hash","includeZero","isEmpty","level","methodMap","lookupLevel","levelMap","indexOf","toLowerCase","parseInt","method","_len","_key","Handlebars","root","global","window","$Handlebars","noConflict","checkRevision","compilerInfo","compilerRevision","currentRevision","_base","runtimeVersions","compilerVersions","templateSpec","env","invokePartialWrapper","resolvePartial","result","invokePartial","compile","compilerOptions","indent","lines","split","l","join","main","depths","_setup","useData","initData","useBlockParams","useDepths","concat","executeDecorators","decorator","main_d","compiler","strict","lookup","lambda","current","programs","program","declaredBlockParams","programWrapper","wrapProgram","depth","_parent","merge","param","common","nullContext","seal","noop","isTop","usePartial","useDecorators","_child","prog","currentDepths","currentPartialBlock","partialBlock","string","toHTML","escapeChar","chr","escape","array","possible","test","replace","badChars","object","frame","params","path","id","&","<",">","\"","'","`","=","require","factory","define","amd","moment","hooks","hookCallback","input","isObject","hasOwnProp","a","b","isObjectEmpty","getOwnPropertyNames","isUndefined","isNumber","isDate","Date","map","res","valueOf","createUTC","format","locale","createLocalOrUTC","utc","defaultParsingFlags","empty","unusedTokens","unusedInput","overflow","charsLeftOver","nullInput","invalidEra","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","era","meridiem","rfc2822","weekdayMismatch","getParsingFlags","_pf","isValid","_isValid","flags","parsedParts","some","isNowValid","_d","getTime","invalidWeekday","_strict","bigHour","isFrozen","createInvalid","NaN","copyConfig","to","from","prop","val","_isAMomentObject","_i","_f","_l","_tzm","_isUTC","_offset","_locale","momentProperties","Moment","config","updateInProgress","updateOffset","isMoment","msg","suppressDeprecationWarnings","deprecate","firstTime","deprecationHandler","slice","stack","deprecateSimple","deprecations","_config","_dayOfMonthOrdinalParseLenient","RegExp","_dayOfMonthOrdinalParse","source","_ordinalParse","mergeConfigs","parentConfig","childConfig","Locale","calendar","mom","now","output","_calendar","zeroFill","number","targetLength","forceSign","absNumber","Math","abs","zerosToFill","pow","max","substr","addFormatToken","token","padded","ordinal","callback","func","formatTokenFunctions","localeData","removeFormattingTokens","match","makeFormatFunction","formattingTokens","formatMoment","expandFormat","formatFunctions","invalidDate","replaceLongDateFormatTokens","longDateFormat","localFormattingTokens","lastIndex","_longDateFormat","formatUpper","toUpperCase","tok","_invalidDate","_ordinal","relativeTime","withoutSuffix","isFuture","_relativeTime","pastFuture","diff","addUnitAlias","unit","shorthand","lowerCase","aliases","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","addUnitPriority","priority","priorities","getPrioritizedUnits","unitsObj","u","sort","isLeapYear","year","absFloor","ceil","floor","toInt","argumentForCoercion","coercedNumber","isFinite","makeGetSet","keepTime","set$1","month","date","daysInMonth","stringGet","stringSet","prioritized","addRegexToken","regex","strictRegex","regexes","isStrict","getParseRegexForToken","unescapeFormat","s","regexEscape","matched","p1","p2","p3","p4","addParseToken","tokens","addWeekParseToken","_w","addTimeToArrayFromToken","_a","mod","modMonth","localeMonths","_months","isFormat","MONTHS_IN_FORMAT","localeMonthsShort","_monthsShort","handleStrictParse","monthName","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","monthsShort","months","localeMonthsParse","_monthsParseExact","setMonth","dayOfMonth","monthsParse","min","getSetMonth","getDaysInMonth","monthsShortRegex","computeMonthsParse","_monthsShortStrictRegex","_monthsShortRegex","defaultMonthsShortRegex","monthsRegex","_monthsStrictRegex","_monthsRegex","defaultMonthsRegex","cmpLenRev","shortPieces","longPieces","mixedPieces","daysInYear","getIsLeapYear","createDate","y","d","h","M","ms","getFullYear","setFullYear","createUTCDate","UTC","getUTCFullYear","setUTCFullYear","firstWeekOffset","dow","doy","fwd","getUTCDay","dayOfYearFromWeeks","week","weekday","resYear","resDayOfYear","localWeekday","weekOffset","dayOfYear","weekOfYear","resWeek","weeksInYear","weekOffsetNext","localeWeek","_week","localeFirstDayOfWeek","localeFirstDayOfYear","getSetWeek","add","getSetISOWeek","parseWeekday","weekdaysParse","parseIsoWeekday","shiftWeekdays","ws","localeWeekdays","weekdays","_weekdays","day","localeWeekdaysShort","_weekdaysShort","localeWeekdaysMin","_weekdaysMin","handleStrictParse$1","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","weekdaysMin","weekdaysShort","localeWeekdaysParse","_weekdaysParseExact","_fullWeekdaysParse","getSetDayOfWeek","getDay","getSetLocaleDayOfWeek","getSetISODayOfWeek","weekdaysRegex","computeWeekdaysParse","_weekdaysStrictRegex","_weekdaysRegex","defaultWeekdaysRegex","weekdaysShortRegex","_weekdaysShortStrictRegex","_weekdaysShortRegex","defaultWeekdaysShortRegex","weekdaysMinRegex","_weekdaysMinStrictRegex","_weekdaysMinRegex","defaultWeekdaysMinRegex","minp","shortp","longp","minPieces","hFormat","hours","kFormat","lowercase","minutes","matchMeridiem","_meridiemParse","localeIsPM","charAt","localeMeridiem","isLower","commonPrefix","arr1","arr2","minl","normalizeLocale","chooseLocale","names","next","loadLocale","globalLocale","aliasedRequire","oldLocale","locales","_abbr","getSetGlobalLocale","e","values","getLocale","defineLocale","baseConfig","abbr","parentLocale","localeFamilies","forEach","updateLocale","tmpLocale","listLocales","checkOverflow","MONTH","DATE","YEAR","HOUR","MINUTE","SECOND","MILLISECOND","_overflowDayOfYear","_overflowWeeks","WEEK","_overflowWeekday","WEEKDAY","configFromISO","allowTime","dateFormat","timeFormat","tzFormat","extendedIsoRegex","exec","basicIsoRegex","isoDates","isoTimes","tzRegex","configFromStringAndFormat","extractFromRFC2822Strings","yearStr","monthStr","dayStr","hourStr","minuteStr","secondStr","untruncateYear","defaultLocaleMonthsShort","preprocessRFC2822","checkWeekday","weekdayStr","parsedInput","defaultLocaleWeekdaysShort","calculateOffset","obsOffset","militaryOffset","numOffset","obsOffsets","hm","configFromRFC2822","parsedArray","setUTCMinutes","getUTCMinutes","configFromString","aspNetJsonRegex","createFromInputFallback","defaults","c","currentDateArray","nowValue","_useUTC","getUTCMonth","getUTCDate","getMonth","getDate","configFromArray","currentDate","expectedWeekday","yearToUse","dayOfYearFromWeekInfo","_dayOfYear","_nextDay","weekYear","temp","weekdayOverflow","curWeek","GG","W","E","createLocal","gg","ISO_8601","RFC_2822","skipped","stringLength","totalParsedInputLength","_meridiem","meridiemFixWrap","erasConvertYear","hour","isPm","meridiemHour","isPM","configFromStringAndArray","tempConfig","bestMoment","scoreToBeat","currentScore","validFormatFound","bestFormatIsValid","score","configFromObject","dayOrDate","minute","second","millisecond","createFromConfig","prepareConfig","preparse","configFromInput","isUTC","pickBy","moments","isDurationValid","unitHasDecimal","ordering","parseFloat","isValid$1","createInvalid$1","createDuration","Duration","duration","years","quarters","quarter","weeks","isoWeek","days","seconds","milliseconds","_milliseconds","_days","_data","_bubble","isDuration","absRound","round","compareArrays","array1","array2","dontConvert","lengthDiff","diffs","offset","separator","utcOffset","sign","offsetFromString","matcher","chunk","parts","matches","chunkOffset","cloneWithOffset","model","clone","setTime","local","getDateOffset","getTimezoneOffset","getSetOffset","keepLocalTime","keepMinutes","localAdjust","matchShortOffset","_changeInProgress","addSubtract","getSetZone","setOffsetToUTC","setOffsetToLocal","subtract","setOffsetToParsedOffset","tZone","matchOffset","hasAlignedHourOffset","isDaylightSavingTime","isDaylightSavingTimeShifted","_isDSTShifted","other","toArray","isLocal","isUtcOffset","isUtc","diffRes","aspNetRegex","isoRegex","parseIso","momentsDifference","inp","positiveMomentsDifference","isAfter","isBefore","createAdder","direction","period","dur","isAdding","isString","isMomentInput","isNumberOrStringArray","isMomentInputObject","property","objectTest","propertyTest","properties","arrayTest","dataTypeTest","filter","item","isCalendarSpec","getCalendarFormat","myMoment","calendar$1","time","formats","sod","startOf","calendarFormat","localInput","endOf","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","asFloat","zoneDelta","monthDiff","anchor2","adjust","wholeMonthDiff","anchor","toISOString","keepOffset","toDate","inspect","prefix","datetime","suffix","zone","inputString","defaultFormatUtc","defaultFormat","postformat","humanize","fromNow","toNow","newLocaleData","mod$1","dividend","divisor","localStartOfDate","MS_PER_400_YEARS","utcStartOfDate","startOfDate","isoWeekday","MS_PER_MINUTE","MS_PER_HOUR","MS_PER_SECOND","unix","toObject","toJSON","isValid$2","parsingFlags","invalidAt","creationData","localeEras","eras","_eras","since","until","Infinity","localeErasParse","eraName","narrow","localeErasConvertYear","dir","getEraName","getEraNarrow","getEraAbbr","getEraYear","erasNameRegex","computeErasParse","_erasNameRegex","_erasRegex","erasAbbrRegex","_erasAbbrRegex","erasNarrowRegex","_erasNarrowRegex","matchEraAbbr","matchEraName","matchEraNarrow","matchEraYearOrdinal","_eraYearOrdinalRegex","matchUnsigned","abbrPieces","namePieces","narrowPieces","addWeekYearFormatToken","getter","getSetWeekYear","getSetWeekYearHelper","getSetISOWeekYear","getISOWeeksInYear","getISOWeeksInISOWeekYear","isoWeekYear","getWeeksInYear","weekInfo","getWeeksInWeekYear","weeksTarget","setWeekAll","dayOfYearData","getSetQuarter","getSetDayOfYear","parseMs","getZoneAbbr","getZoneName","createUnix","createInZone","parseZone","preParsePostFormat","get$1","setter","listMonthsImpl","out","listWeekdaysImpl","localeSorted","listMonths","listMonthsShort","listWeekdays","listWeekdaysShort","listWeekdaysMin","mathAbs","addSubtract$1","add$1","subtract$1","absCeil","bubble","monthsFromDays","monthsToDays","daysToMonths","as","valueOf$1","makeAs","alias","clone$1","get$2","makeGetter","substituteTimeAgo","relativeTime$1","posNegDuration","thresholds","ss","getSetRelativeTimeRounding","roundingFunction","getSetRelativeTimeThreshold","threshold","limit","argWithSuffix","argThresholds","withSuffix","th","assign","toISOString$1","totalSign","ymSign","daysSign","hmsSign","abs$1","total","asSeconds","toFixed","fun","t","defaultCalendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","defaultLongDateFormat","LTS","LT","L","LL","LLL","LLLL","defaultDayOfMonthOrdinalParse","defaultRelativeTime","future","past","mm","hh","dd","ww","MM","yy","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchSigned","matchTimestamp","matchWord","defaultLocaleMonths","parseTwoDigitYear","getSetYear","defaultLocaleWeek","defaultLocaleWeekdays","defaultLocaleWeekdaysMin","kInput","_isPm","pos","pos1","pos2","defaultLocaleMeridiemParse","getSetHour","dayOfMonthOrdinalParse","meridiemParse","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","prototypeMin","prototypeMax","invalid","lang","erasParse","eraYearOrdinalParse","getSetDayOfMonth","getSetMinute","getSetSecond","getSetMillisecond","Symbol","for","eraNarrow","eraAbbr","eraYear","isoWeeks","weeksInWeekYear","isoWeeksInYear","isoWeeksInISOWeekYear","isDST","zoneAbbr","zoneName","dates","isDSTShifted","proto$1","firstDayOfYear","firstDayOfWeek","langData","asMilliseconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","proto$2","toIsoString","version","relativeTimeRounding","relativeTimeThreshold","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","TIME","TIME_SECONDS","TIME_MS","ASSETS_LOADED","EventsHub","_classCallCheck","_this","_possibleConstructorReturn","__proto__","getPrototypeOf","freeze","eventName","_get","Config","GamesMappings","Currency","Language","templateInit","DefaultPanel","DopSlotPanel","TigEntSlotPanel","DopTablePanel","CaySlotPanel","CayTablePanel","CayScratchPanel","NSGSlotPanel","panels","default","dopSlot","tigEntSlot","nsgSlot","dopBlackjack","dopRoulette","dopBaccarat","caySlot","cayScratch","cayRoulette","cayBlackjack","cay3CardBrag","cayVideoPoker","History","_basePath","basePath","_language","language","_assetsPath","assetsPath","_hideGameDetails","hideGameDetails","_hideTransactionDetails","hideTransactionDetails","document","createElement","className","$container","$","html","gameId","adapter","games","history","isNewPanel","panel","removeListeners","render","parsedData","cfg","_typeof","code","symbol","thousands","decimals","resize","respinWinEndOnly","ways","cluster","scatterWins","hasAdditionalWin","wayWin","scatterWin","multiline","hasMultipliers","resizableSlot","horizontalReels","top","bottom","topAndBottom","infiniReels","dontDrawLines","gameReelsOffsets","offsets","assembledFatTiles","noJackpotScreen","parsers","dop","BlackjackStandard3H","PlatinumBlackjack21Plus3PE","PlatinumBlackjackAnyPair","PlatinumBlackjackBustorama","PlatinumBlackjackSideBets","RouletteEuropean","RouletteMoneyBack","RoulettePremium","RoulettePremium2018","RoulettePremiumPlus","BerichedLimited","BountyRaidLimited","EasyGoldDecpoint","HoardOfPoseidonLimited","MysteryFruitLimited","PiggyRichesMegaWaysLimited","ReelKeeperLimited","TheWildHatterLimited","TigerKingJoeExotic","VaultOfAnubisLimited","ZeusLightningPowerReelsWheel","WellOfWildsMegaWaysWheel","PiratesPlentyMegaWaysWheel","GonzosQuestMegaWaysWheel","GonzosQuestMegaWaysLimited","ClassicBlackjackBetConstruct","ClassicBlackjackBetfair","ClassicBlackjackBetsson","ClassicBlackjackBetssonColor","ClassicBlackjackLeoVegas","ClassicBlackjackMrGreen","ClassicBlackjackPaddyPower","ClassicBlackjackRank","EuropeanRouletteBetConstruct","EuropeanRouletteBetfair","EuropeanRouletteLeoVegas","EuropeanRouletteMrGreen","EuropeanRoulettePaddyPower","EuropeanRouletteRank","EuropeanRouletteWilliamHill","PlatinumRoulettePlayStar","PuntoBancoBetfair","PuntoBancoBetsson","PuntoBancoLeoVegas","PuntoBancoMrGreen","PuntoBancoPaddyPower","PuntoBancoRank","keyValueMap","PlatinumRoulette","pre","red_0","black_0","even_0","odd_0","small_0","big_0","post","trio_0","trio_1","trio_2","straight_00","straight_0","straight_1","straight_2","straight_3","straight_4","straight_5","straight_6","straight_7","straight_8","straight_9","straight_10","straight_11","straight_12","straight_13","straight_14","straight_15","straight_16","straight_17","straight_18","straight_19","straight_20","straight_21","straight_22","straight_23","straight_24","straight_25","straight_26","straight_27","straight_28","straight_29","straight_30","straight_31","straight_32","straight_33","straight_34","straight_35","straight_36","split_0","split_1","split_2","split_3","split_4","split_5","split_6","split_7","split_8","split_9","split_10","split_11","split_12","split_13","split_14","split_15","split_16","split_17","split_18","split_19","split_20","split_21","split_22","split_23","split_24","split_25","split_26","split_27","split_28","split_29","split_30","split_31","split_32","split_33","split_34","split_35","split_36","split_37","split_38","split_39","split_40","split_41","split_42","split_43","split_44","split_45","split_46","split_47","split_48","split_49","split_50","split_51","split_52","split_53","split_54","split_55","split_56","split_57","split_58","split_59","street_0","street_1","street_2","street_3","street_4","street_5","street_6","street_7","street_8","street_9","street_10","street_11","corner_0","corner_1","corner_2","corner_3","corner_4","corner_5","corner_6","corner_7","corner_8","corner_9","corner_10","corner_11","corner_12","corner_13","corner_14","corner_15","corner_16","corner_17","corner_18","corner_19","corner_20","corner_21","basket_0","sixLine_0","sixLine_1","sixLine_2","sixLine_3","sixLine_4","sixLine_5","sixLine_6","sixLine_7","sixLine_8","sixLine_9","sixLine_10","column_0","column_1","column_2","dozen_0","dozen_1","dozen_2","color_0","color_1","evenOdd_0","evenOdd_1","smallBig_0","smallBig_1","EuropeanRoulette","corner_22","PlatinumRouletteSingleZero","GoldenLamps","11111","00000","22222","21012","01210","00122","22100","10001","12221","01010","21212","12121","10101","11011","11211","01110","21112","02020","20202","20102","GoldenToad","44444","55555","33333","34543","54345","55433","33455","45554","43334","54545","NeptunesRiches","34343","43434","45454","44544","44344","54445","34443","53535","35353","35453","ChineseWilds","77777","66666","65456","56765","77654","44567","67776","76544","45677","67656","54565","76767","65676","56545","76667","66544","55677","66766","55455","65554","56667","77677","76554","45667","77765","44456","67765","54456","76654","45567","67654","54567","76545","45676","ElephantTreasure","RedHotSlot","MacauRacing","LuckyCarnival","AsianFortune","DragonPearl","777","LeprechaunsMagic","43454","AliBabasLuck","CasinoSpin","LeprechaunsMagicMegaways","AliBabasLuckMegaways","CobraQueen","DreamDestiny","AmazonIslandMegaWays","EpicTreasure","23432","32123","11234","44321","12344","43211","21232","34323","23212","32343","22344","33211","22122","33433","23334","32221","12334","43221","11123","44432","21123","34432","12234","43321","21234","34321","12343","43212","EpicTreasure2","12321","43234","23332","32223","22322","33233","SeaBoatAdventure","80sSpins","AliBabasLuckPowerReels","1111111111111111","1010101010101010","99999999","88888888","77777777","66666666","1110111011101110","109109109109","98989898","87878787","76767676","1011101110111011","910910910910","89898989","78787878","67676767","1110987678","109876789","987678910","8767891011","76789101110","67891011109","78910111098","89101110987","91011109876","10111098767","111111109876","101010109877","7777891010","6667891011","LeprechaunsMagicPowerReels","WantedWildz","33533","55355","45434","SwordStomp","WantedWildzExtreme","CottonGangAffair","DesertLegendsSpins","JellyMULTIHOPS","NightmareFamilyMegaWays","ChristmasMULTIHOPS","MidnightThirst","DrFrancashstein","DontHitPlz","PurrPower","GlowDig","45654","76567","56665","65556","55655","66566","65656","67676","56565","44566","77655","FishNFish","LosMuertosLocos","SeaBoatAdventureMegaWays","AztecShamansMegaWays","RumbleMutts","ArcOfZeus","Texts","en","TOTAL_COINS_WIN","GH_HISTORY","GH_GAME_DETAILS","GH_GAME_ID","GH_ROUND_ID","GH_SERVER_TIME_START","GH_SERVER_TIME_END","aamsParticipationId","aamsSessionId","GH_WIN_WAYS_TITLE","GH_LENGTH","GH_MULTIPLIER","GH_WIN_WAYS","GH_CLUSTER_TITLE","GH_CLUSTER_COUNT","GH_SCATTER_WIN_TITLE","GH_HANDS","GH_SIDE_BETS","HAND_0","HAND_0_SIDE_0","HAND_0_SIDE_1","HAND_0_SIDE_2","HAND_0_SPLIT_0","HAND_1","HAND_1_SPLIT_0","HAND_1_SIDE_0","HAND_1_SIDE_1","HAND_1_SIDE_2","HAND_2","HAND_2_SPLIT_0","HAND_2_SIDE_0","HAND_2_SIDE_1","HAND_2_SIDE_2","INSURANCE_HAND_0","INSURANCE_HAND_1","INSURANCE_HAND_2","DEALER","ANTE","ANTE_BONUS","PAIR_BONUS","PLAY","STAKE","INSURANCE","GH_TRANSACTIONS","GH_TOTAL_STAKE","GH_TOTAL_BET","GH_TOTAL_WIN","GH_FEATURE_BUY_COST","GH_FEATURE_BUY_NAME","GH_BEFORE_STAKE","GH_AFTER_STAKE","GH_AT_END","GH_BALANCE","GH_FREEBETS_BALANCE","GH_SESSION_BALANCE","GH_SESSION_FREEBETS","GH_BONUS","GH_WIN_DETAILS","GH_SPIN_DETAILS","GH_ADDITIONAL_DETAILS","GH_GAME_RESULTS","GH_INITIAL_SPIN","GH_JACKPOT_WIN","GH_SYMBOL_WINS","GH_LINE","GH_FREE_SPIN_WINS","GH_FREE_SPIN","GH_RESPIN","GH_RESPIN_WINS","GH_NUDGE","GH_NUDGE_WINS","GH_MULTIPLIER_WINS","GH_MODIFIER_WIN","GH_BONUS_WIN","GH_INSTANT_WIN","GH_NO_HISTORY","GH_GAMBLE_WINS","GH_NO_WINS","GH_ROUND_CORRECTION","GH_LIMITED_WIN","WIN_EXCHANGE","HALF_COLLECT","FULL_COLLECT","GH_TABLE_ID","GH_PLAYER","GH_BANKER","GH_TIE","GH_PLAYER_PAIR","GH_BANKER_PAIR","GH_GAME_WINNER","GH_GAME_WINSUM","GH_GAME_TOTAL","GH_GAME_STAKE","GH_SPIN_TITLE","GH_FREE_SPINS_TITLE","GH_RESPINS_TITLE","GH_BALL_POSITION","GH_TRIO","GH_SPLIT","GH_STREET","GH_BASKET","GH_CORNER","GH_SIX_LINE","GH_COLUMN","GH_FIRST_COLUMN","GH_SECOND_COLUMN","GH_THIRD_COLUMN","GH_DOZEN","GH_FIRST_DOZEN","GH_SECOND_DOZEN","GH_THIRD_DOZEN","GH_STRAIGHT","GH_COLOR","GH_BLACK","GH_RED","GH_EVEN_ODD","GH_EVEN","GH_ODD","GH_SMALL_BIG","GH_SMALL","GH_BIG","GH_BLACKJACK","GH_DOUBLE_DOWN","GH_OFFER_ACCEPTED","GH_SURRENDERED","GH_SNEAK_PEEK_ACTIVE","GH_FREE_ROUNDS_ACTIVE","SCRATCH_MATCH_NUMBER_BONUS","SCRATCH_SUM_OF_SEVEN_BONUS","SCRATCH_MATCH_SYMBOLS_BONUS","SCRATCH_MATCH_AMOUNTS_BONUS","SCRATCH_FREE_CARD","SCRATCH_CASH_PRIZE","zh","zh-TW","ja","ko","vi","da","de","el","es","fi","fr","it","ka","nl","no","pl","pt-BR","ru","sv","tr","cs","pt","hy","es-PE","hr","hu","sk","sl","hi","bg","ro","fr-CA","lv","lt","et","sr","en-US","mk","en-SC","SpinScreenPartial","SpinDetailsPartial","GameDetailsPartial","TransactionsPartial","WinLinesDetailsPartial","DemoRoundNotePartial","FreeRoundNotePartial","JackpotDetailsPartial","TilesDataPartial","_","com","casino","versions","info","Panel","slotTemplate","CaySlotParserFactory","parserFactory","setAttribute","symbolsPath","parser","createParser","tableTemplate","CayTableParserFactory","head","appendChild","textContent","registerPartials","DefaultParser","DopSlotParserFactory","dopLines","gamesWinLines","winLines","_currentWinLineSet","_onAssetsLoadedCallback","_onAssetsLoaded","_attachListeners","currentGameId","_this2","reels","notWays","contains","notCluster","_ref","bundler","isBundlerV2Build","_fetchWinLines","then","_addClickListeners","_setWinLineSet","winDetails","winLineSet","_showSpinScreen","_drawLines","_highlightWinningLines","_setUpInfiniScreenWrapper","_fitLinesContainer","_scrollScreenWrapperToRight","screenId","_this3","_unselectTilesAndLineLabels","_this4","lineLabel","_this5","parentElement","getAttribute","_toggleLines","querySelectorAll","tileHighlight","classList","remove","lineDetail","winLine","highlightTilesOnly","_highlightTilesOnly","_highlightLineAndTiles","spinScreenId","screen","querySelector","hide","removeClass","style","display","screenLinks","screenLink","linesList","children","lineId","lineGraphic","selected","lineTilesData","lineStart","lineLen","lineTiles","selectedLine","itm","tileIndex","reel","tile","way","tiles","tilesIndex","reelContainer","tileContainer","tileImg","_toConsumableArray","naturalWidth","naturalHeight","clientWidth","clientHeight","addEventListener","_onLastTileLoaded","reelOffsets","lineSize","find","tileWidth","tileHeight","svgWidth","svgHeight","_resizeSVG","linesContainer","firstChild","removeChild","row","alignOffset","getVertOffset","reelOffset","linesPadding","linesOffsetBuffer","_calculateLinesBufferArray","winline","startX","startY","endX","pointsStr","endY","nextTileIndex","createElementNS","currentOffset","providerPath","_this6","checksum","game","fetch","response","ok","json","linesArr","_this7","offsetsData","_buildSVGLines","linesFirstTileCount","firstTileInLineArr","linesContainerHeight","lineOffset","width","height","svg","maxHeight","linesOverlay","mainScreen","offsetHeight","winLinesLabels","lineItem","_onLineLabelSelect","freespinScreenDetails","_changeSpinScreen","includes","screenWrapper","scrollIntoView","DopTableParserFactory","removeClassSVG","element","classValue","baseVal","addClassSVG","NSGSlotParserFactory","gameLines","currGameWinLines","_NSG2DopLines","_attachEventListeners","getGameConfig","Reels","_generateWinLinesSVG","setTimeout","NSGLines","DopLines","gameConfig","linesMap","p","DopLine","SCREEN_INDEX","lineScreenId","_highlightLine","_highlightTiles","lineArr","activeLines","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","iterator","done","return","cells","JSON","parse","cy","_buildLinesPolyline","scaleRatio","buffer","reelHeight","v","SlotPartials","AssetsHelper","FeatureBuyParser","_assetsHelper","featureBuyParser","_registerPartials","_adapter","sanitizeData","setOptions","cdn","hasGameData","getTiles","onComplete","texts","outputHtml","parseHTML","assetsToLoad","assetCount","counter","onload","requestAnimationFrame","onRendered","serverData","stringify","responses","transactions","regulations","gameDetails","roundId","prevRoundId","nextRoundId","serverTimeStart","startTime","serverTimeEnd","endTime","totalBet","totalWin","balance","cash","user","freeBets","sessionCash","sessionFreeBets","bonus","promo","Format","CayScratchParser","otherWins","scratchWins","jackpotWins","nonBonusDtoNames","stakeMultiplier","convertMoneyToNumber","_handleMaxPayout","_generateOutput","_beforeParseOperations","_afterParseOperations","_handleJackpots","_handleAdditionalResponse","win","limitedWin","_handleFeatures","stake","screens","symbols","symbolsScreen","amounts","amountsScreen","winAmount","amount","scratchWin","mainSpinHandled","sumOfSevenBonus","dices","dice","mySymbols","prizes","prize","matchNumbersBonus","luckySymbols","_getSymbolAmount","gameData","_parseScreens","_handlePayoutDataBonuses","slotGameArray","_handleRespins","col","currScreen","respins","_filterRespins","freeCard","respin","_getPayoutDataBonuses","entries","payoutData","_step$value","_slicedToArray","clsName","gameDto","bonuses","spin","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_step2","_iterator2","_step2$value","_scratchBonusDice","_scratchBonusMatchNumbers","SlotRespinWrapper","currentSpinWinAmount","jackpots","pots","pot","FourInOneScratchStake1Parser","FourInOneScratchStake2Parser","FourInOneScratchStake5Parser","FourInOneScratchStake10Parser","ScrFootyFrenzyParser","ScrFootyFrenzy2020Parser","Scr10pFootyFrenzy2020Parser","Scr10pRubyWalshChampionsGoldParser","ScrRubyWalshChampionsGoldParser","Scr10pFootyFrenzy2022Parser","ScrFootyFrenzy2022Parser","CayScratchParserFactory","FourInOneScratchStake1","FourInOneScratchStake2","FourInOneScratchStake5","FourInOneScratchStake10","ScrFootyFrenzy","ScrFootyFrenzy2020","Scr10pFootyFrenzy2020","Scr10pRubyWalshChampionsGold","ScrRubyWalshChampionsGold","ScrFootyFrenzy2022","Scr10pFootyFrenzy2022","CayScratchParserLegacy","_respinDtos","bonusDtos","cayetano.games.slots.dto.SlotContactDataDto","_handleContactBonus","cayetano.games.slots.dto.bonuses.SlotInstantWinBonusDataDto","cayetano.games.slots.scratchstakeone.dto.ScratchStakeOneBonus1Dto","_scratchBonus1Handler","cayetano.games.slots.scratchstakeone.dto.ScratchStakeOneBonus4Dto","_scratchBonus2Handler","cayetano.games.slots.scratchstaketwo.dto.ScratchStakeTwoBonus1Dto","cayetano.games.slots.scratchstaketwo.dto.ScratchStakeTwoBonus4Dto","cayetano.games.slots.scratchstakefive.dto.ScratchStakeFiveBonus1Dto","cayetano.games.slots.scratchstakefive.dto.ScratchStakeFiveBonus4Dto","cayetano.games.slots.scratchstaketen.dto.ScratchStakeTenBonus1Dto","cayetano.games.slots.scratchstaketen.dto.ScratchStakeTenBonus4Dto","symbolPositions","runScreenBonuses","multWin","CaySlotParser","finalScreen","featureHandlers","cb","_handleFreeSpins","parseAdditionalResponses","balanceAtStart","freebetAtStart","session","atStart","responseIndex","_splitScreen","reelsBuffer","_initReels","_handleWins","sga","screenCopy","parsedScr","rows","symbolId","_mapSymbol","fspins","currentSpin","isRespin","_handleSingleFreeSpin","freeSpins","_getWinLines","respinIndex","_handleSingleRespin","totalRespinsWinAmount","_flattenNudges","_handleGamble","featureHandler","symbolPayout","SymbolPayout","lineIndex","lineNum","CaySlotParserLegacy","SantasSpinsSlotParser","PaddyPowerGoldSlotParser","FrootShootSlotParser","LuckyCabaretSlotParser","RhinoRumbleSlotParser","GypsyLuckSlotParser","AladinsLampSlotParser","SparklingJackpotSlotParser","PaddysLuckyMineSlotParser","PaddysLuckyPigeonSlotParser","PaddyPowerFanaticsSlotParser","FantasiaSlotParser","AsianRichesSlotParser","IndianPrincessSlotParser","RubyWalshChampionsGoldSlotParser","MrDiamondsSlotParser","SafariDreamSlotParser","SantasChristmasGiftsSlotParser","WildSheriffSlotParser","JoustingWildsSlotParser","FruitPopsSlotParser","GemBlastSlotParser","ForestRushSlotParser","AliBabasTreasureSlotParser","BallOfShameSlotParser","TrickOTreatSlotParser","DarkJungleSlotParser","ShamanSpinsSlotParser","ReelsOfEgyptSlotParser","FruitStackBigSpinsSlotParser","FruitStackDeluxeSlotParser","BombTheJackpotSlotParser","GoldenKingdomSlotParser","DiamondRushSlotParser","SkullsSlotParser","RoyalGooseSlotParser","ClassyVegasSlotParser","BianconeriWildsSlotParser","WildEgyptSlotParser","FootyFrenzySlotParser","TumbleDwarfSlotParser","GolderadoSlotParser","EasterMoneySlotParser","SolarSnapSlotParser","HotSlotSlotParser","GreatGemsSlotParser","DetectiveWilderSlotParser","GoldenPlanetSlotParser","TheGreatWildSlotParser","BarbarianTreasuresSlotParser","SuperFuegoSlotParser","FunFairSlotParser","MaximusReelsSlotParser","GoldenThunderSlotParser","ManekiGoldSlotParser","HappyHourSlotParser","SonsOfAsgardSlotParser","JadeFortuneTempleSlotParser","WormKingSlotParser","FootyFrenzy2020SlotParser","FootyFrenzy2022SlotParser","GoldheadsSlotParser","GoldenPotSlotParser","CrusadeSlotParser","BuffaloRespinSlotParser","LeagueOfWildsSlotParser","FruitStackOneSlotParser","RacingWildsSlotParser","MagnificentWildSlotParser","PiratesHoldSlotParser","PiratesHoldDavyLockersCoinsSlotParser","MoneyMachineSlotParser","MoneyTowerSlotParser","LuckyMahjongSlotParser","BeautysBeastSlotParser","MagicFairiesSlotParser","MoneyNightSlotParser","MonteCarloRacingSlotParser","NudgingGemsSlotParser","ParadiseTreasuresSlotParser","PersianGlorySlotParser","PyramidGoldSlotParser","RussianGlorySlotParser","SinbadsGoldSlotParser","SphinxGoldSlotParser","ThaiThaiSlotParser","WildStarsSlotParser","CastlePillagerSlotParser","FruitStackSuperDoubleWildSlotParser","KeepingUpWithThePaddysSlotParser","PoseidonFortuneSlotParser","HappyRoosterSlotParser","PaddyPowerMysteryGoldSlotParser","FlirtingTangSlotParser","CaveMegaBlastSlotParser","CrazySuper7sSlotParser","NeonWildsSlotParser","FruitStackSlotParser","MississippiQueenSlotParser","HalloWinSlotParser","MayanMysterySlotParser","DragonsWildSlotParser","LittleRedRidingHoodSlotParser","JapaneseMysterySlotParser","EgyptianWildsSlotParser","IrishCloverSlotParser","FruitStackMysteryWinSlotParser","BullfightSlotParser","AgesOfFortuneSlotParser","PaddyPowerGoldOnTourSlotParser","MineCrusherSlotParser","BetfairsWildArcadeSlotParser","TheHeistSlotParser","PaddyPowerShowtimeSlotParser","ShowtimeSpinnerSlotParser","CloningSheepSlotParser","RobinHoodGoldenLootSlotParser","TumbleDwarfMysteryGoldSlotParser","SlottingSlopesSlotParser","SmoothieSmashSlotParser","PaddyPowerGoldBookOfLuckSlotParser","BigRacingSlotParser","WishAWinSlotParser","WorldOfWizardsSlotParser","GiftsOfRaSlotParser","OstrichLuckSlotParser","PaddysWonderWheelUnderConstructionSlotParser","MazeOfFortuneSlotParser","TowerOfWealthSlotParser","ArcticFishingParser","TumbleDwarfAndTheLibraryOfSecretsSlotParsers","PharaohsEternalGlorySlotParser","SantasSpins","PaddyPowerGold","PaddyPowerGoldHaxe","FrootShoot","LuckyCabaret","RhinoRumble","GypsyLuck","AladinsLamp","SparklingJackpot","PaddysLuckyMine","PaddysLuckyPigeon","PaddyPowerFanatics","Fantasia","AsianRiches","IndianPrincess","RubyWalshChampionsGold","MrDiamonds","SafariDream","SantasChristmasGifts","WildSheriff","JoustingWilds","FruitPops","GemBlast","ForestRush","AliBabasTreasure","BallOfShame","TrickOTreat","DarkJungle","ShamanSpins","ReelsOfEgypt","FruitStackBigSpins","BombTheJackpot","FruitStackDeluxe","GoldenKingdom","DiamondRush","Skulls","RoyalGoose","ClassyVegas","BianconeriWilds","WildEgypt","FootyFrenzy","TumbleDwarf","GoldErado","EasterMoney","SolarSnap","HotSlot","GreatGems","DetectiveWilder","GoldenPlanet","TheGreatWild","BarbarianTreasures","SuperFuego","FunFair","GoldenThunder","MaximusReels","ManekiGold","HappyHour","SonsOfAsgard","JadeDragon","WormKing","FootyFrenzy2020","FootyFrenzy2022","Goldheads","Crusade","GoldenPot","BuffaloRespin","LeagueOfWilds","RacingWilds","MagnificentWild","FruitStackOne","PiratesHold","PiratesHoldDavyLockersCoins","MoneyMachine","MoneyTower","LuckyMahjong","BeautysBeast","MagicFairies","MoneyNight","MonteCarloRacing","NudgingGems","ParadiseTreasures","PersianGlory","PyramidGold","RussianGlory","SinbadsGold","SphinxGold","ThaiThai","WildStars","CastlePillager","FruitStackSuperDoubleWild","KeepingUpWithThePaddys","PoseidonFortune","HappyRooster","PaddyPowerMysteryGold","FlirtingTang","CaveMegaBlast","CrazySuper7s","NeonWilds","FruitStack","MississippiQueen","HalloWin","MayanMystery","DragonsWild","LittleRedRidingHood","JapaneseMystery","EgyptianWilds","IrishClover","FruitStackMysteryWin","AgesOfFortune","PaddyPowerGoldOnTour","Bullfight","MineCrusher","BetfairsWildArcade","TheHeist","PaddyPowerShowtime","ShowtimeSpinner","CloningSheep","RobinHoodGoldenLoot","TumbleDwarfMysteryGold","SlottingSlopes","SmoothieSmash","BigRacing","PaddyPowerGoldBookOfLuck","WishAWin","WorldOfWizards","SpyAffairs","GiftsOfRa","OstrichLuck","PaddysWonderWheelUnderConstruction","MazeOfFortune","TowerOfWealth","ArcticFishing","TumbleDwarfAndTheLibraryOfSecrets","PharaohsEternalGlory93","PharaohsEternalGlory96","_handleStickyData","_handleNudges","cayetano.games.slots.dto.bonuses.SlotExtendedInstantWinBonusDataDto","cayetano.games.slots.dto.bonuses.SlotPrizeBonusDataDto","cayetano.games.slots.dto.bonuses.SlotWheelOfFortuneBonusDataDto","cayetano.games.slots.dto.bonuses.SlotPathBonusDataDto","cayetano.games.slots.dto.bonuses.SlotRespinWrapperDto","cayetano.games.slots.dto.bonuses.SlotStackedSymbolBonusDataDto","_handleStackedSymbol","cayetano.games.slots.dto.SlotGambleWinCardPickDataDto","cayetano.games.slots.dto.bonuses.SlotFreeSpinBonusDataDto","pd","pdata","bonusSpin","newGameData","dto","stickyData","slotGameStickyData","stickyPos","newData","stickyReels","stickySymbolIds","spinNum","nudges","currRespin","bonusesWin","_handleStackedWilds","_this8","linePos","SlotPrizeBonus","AladinsLampParser","AliBabasTreasureParser","AsianRichesParser","totalBonusesWin","replaceSymbols","modifiedReels","smallScatterPositionsByReel","smallScatterTypesByReel","scatterRow","scatterType","currentId","newId","BarbarianTreasuresParser","pdatabonuses","spinToUse","pData","scatterPositions","scatterTypes","BetfairsWildArcadePachinkoBonusDataDto","BetfairsWildArcadeClawMachineBonusDataDto","BetfairsWildArcadeCoinPusherBonusDataDto","BianconeriWildsParser","wildIds","horseIds","BigRacingHorseBeforeWildDto","horseBeforeWildPosition","horseId","horseBeforeWild","BigRacingRaceResultDto","BombTheJackpotParser","_handleWildRespins","fsWildRespins","bonusDto","inFreeSpins","substractRespinIndex","spins","ClassyVegasParser","symb","initialRespin","_extractRespins","_extractContactDto","slotGameDto","contactDto","lastSpin","_extractLastSpin","fsDto","bonusGameId","fsAsRespins","DarkJungleParser","respinLines","multiplier","DetectiveWilderParser","bonusSpins","DiamondRushParser","EasterMoneyParser","choices","FantasiaParser","reelIndex","FootyFrenzy2020Parser","FootyFrenzy2022Parser","FootyFrenzyParser","ForestRushParser","lastPayoutData","FrootShootParser","FruitPopsParser","FruitStackBigSpinsParser","wheelDto","afterParseOperationsCalled","bonusWheel","wheelValues","FruitStackDeluxeParser","gameObj","replaceReels","reelToReplace","replacementSymbol","toPos","lastSpinId","resultPosition","symbolAbove","getAdjustedSymbol","reelsIndex","symbolBelow","reelsArray","FunFairParser","GemBlastParser","finalReels","specialSymbol","determineSpecialSymbol","selectedSymbol","specialSymbolDto","linkedReels","transformedSymbol","wildTransform","transformSymbols","wildSticky","GoldenKingdomParser","cayetano.games.slots.dwarftreasures.dto.DwarfTreasuresBonus1Dto\"","cayetano.games.slots.dwarftreasures.dto.DwarfTreasuresBonus5Dto","hasFreeSpins","fs","hasRespins","_hasFreeSpins","_hasRespins","defaultR","_getDefaultRespin","GoldenPlanetParser","initialSpin","_handleGoldenPlanetRespins","returnResult","_getGoldenPlanetRespins","_handleGoldenPlanetContact","respinNum","respinData","GoldenPotParser","linesWinAmount","reduce","GolderadoParser","elem","cayetano.games.slots.goldheads.logic.dto.GoldheadsRespinWrapperDto","cayetano.games.slots.goldheads.logic.dto.GoldheadsSerpentWildInstantWinDto","mystery","wildType","wildSymbol","GreatGemsParser","GypsyLuckParser","HappyHourParser","HotSlotParser","IndianPrincessParser","JadeFortuneTempleParser","pendingMultiplier","superRes","newReels","featureName","currAmount","nextRespin","rData","respinCumulativeWinAmount","hasNextRespin","multiplierWin","JoustingWildsParser","_pendingData","respinCommon","_customStickyDataHandler","reelMargin","LeagueOfWildsParser","cayetano.games.slots.leagueofwilds.dto.LeagueOfWildsGreenWildBonusDataDto","spinFinal","cumulativeNumSpins","LuckyCabaretParser","_extractLineDto","cumulativeWinAmount","lineDto","cumulativeLinesWinAmount","ManekiGoldParser","MaximusReelsParser","_handleMaximusFreeSpinsDto","freeSpinsMultiplier","freeSpinParams","multWinAmount","spinData","MineCrusherAllSymbolPayouts","MineCrusherSymbolPayout","payout","_getWinLinesInitialSpin","multipliedWin","_handleMineCrusherSpin","payouts","_handleMineCrusherContact","MineCrusherRedFairyDto","MoneyMachineParser","MrDiamondsParser","generateOutput","totalEggsWinAmount","_handleEggsWin","accumulatedWinAmount","eggsWin","OstrichLuckSpinDto","PaddyPowerFanaticsParser","totalSpins","_handlePotOGoldWinLineDto","overrideLines","reelsParsed","notMultipliedAmount","_handleShowtimeSpin","_handleShowtimeContact","PaddysLuckyMineParser","PaddysLuckyPigeonParser","instantWinAmount","multAmount","hasRespin","URLSearchParams","location","search","_replaceBrandedSymbols","postSpinStates","preSpinStates","totalCoinsWinAmount","_handleCoinsWin","coinsWin","totalPrizeWinAmount","_defineProperty","_ret","PiratesHoldBonus2Dto","wildReels","RacingWildsGreenWildDto","greenWilds","RacingWildsBlueWildDto","blueWilds","RacingWildsPinkWildDto","pinkWilds","cumulativeWin","ReelsOfEgyptParser","_handlePyramidBonus","pyramidBonus","_handleLineWinDto","RobinHoodGoldenLootParser","RoyalGooseParser","RubyWalshChampionsGoldParser","SafariDreamParser","tourBonusDto","linkinBonusWinAmount","_handleLinkinBonus","giftinBonusWinAmount","_handleGiftinBonus","linkinBonusWin","SantasChristmasGiftsSpinDto","giftinBonusWin","SantasChristmatGiftsGiftinWinsDto","mapPresent","SantasChristmasGiftsGiftDescriptorDto","giftDescriptorDto","dataIndex","symbolIndex","indices","reelsSet","SantasSpinsParser","ShamanSpinsParser","_handleWildShowerBonus","linesParsed","useThisReels","useThisData","SkullsParser","_getFuegoRespins","accum","_flattenRespins","respinParsed","_getSingleRespin","linesAmount","_getLinesWinAmount","SolarSnapParser","lastRespinAmount","_handleSolarSnapRespins","_handleSolarSnapContact","_reelsInitialized","_winsHandled","_handleShuffleBonus","SparklingJackpotParser","SuperFuegoParser","TheGreatWildParser","_handleCarBonus","_handleWilds","blackSpinsPayouts","respinBonuses","TheHeistFreeSpinBonusDataDto","TowerOfWealthLinesMultipliersDto","multId","wildPositions","wildMultipliers","TrickOTreatParser","lastSlotGame","reelBuffer","TumbleDwarfParser","_handleLuckyLineBonus","overrideReels","WildEgyptParser","WildSheriffParser","spinId","bonusIds","wkSoloAttackDto","wkCallToArmsDto","wkFruitBombDto","wkKingBonusDto","_pendingBonusesToHandle","_handleWormKingRespins","wilds","wkRandomWildsDto","_handleRandomWilds","superFruits","_getWormKingRespins","_handleWormKingContact","dtos","superFruitsAmount","DopSlotParser","extraSpins","multipliers","initialLinesWin","totalWinCorrection","extraSpinCounter","instantWin","hide0s","_handleNudge","_handleFatTiles","_handleMysterySymbols","_handleFeature","_handleSwapReels","_handleMultipliers","_handleHorizontalReels","_flattenFreeSpins","atEnd","_roundingCorrection","_applyScreenMask","featureBuyCost","featureBuyName","spinMode","winLinesData","linesGroupIndex","gamble","_addOtherWins","showJackpotScreen","lastSpinData","_getLastSpinData","jackpot","_cloneReels","_handleJackpotTiles","jackpotTiles","_nudgeJackpotTiles","winType","winName","autofinish","autoFinishData","_convertNewFormat","responseData","nudgeData","nudge","flatten","startAt","distance","endAt","tileRight","targetPos","tileId","toTile","gridWidthIndex","tileBottom","gridHeightIndex","_applyReelsModifier","swapReelsData","swapReels","swaps","swap","A","B","mysterySymbolsData","mysterySymbols","multiply","previousMultiplier","bonusWin","pickerBonus","pathBonus","pathPickerBonus","multiPickerBonus","_hasMaxWin","feature","_this9","extraSpin","_freeSpinsBeforeParseOperations","_freeSpinsAfterParseOperations","_this10","freeSpin","_handleExtraSpin","lastRespin","_this11","_this12","_handleResponseCorrection","activator","features","jpTile","initialData","heldRespins","lastFreeSpin","jackpotNudgeData","jackpotNudge","nudgeDistance","jackpotNudgeDistance","_Config$horizontalRee","tilesCountOnReel","lastReelIndex","horizontalReelIndices","minCountEmptyPos","_getRedundantRowsCount","cleanIndexFrom","minEmptyPosOnReel","_ref2","reelMiddle","emptyTilesCount","screenMask","AgeOfAkkadiaSlotParser","AgentRoyaleSlotParser","AlexanderTheGreatSlotParser","AncientDiscoSlotParser","AncientScriptSlotParser","AncientsBlessingSlotParser","ArcadeBombSlotParser","AstronautSlotParser","AstrosSlotParser","AthensMegaWaysSlotParser","AtlantisSlotParser","BabylonRichesSlotParser","BettyBorisAndBooParser","BlobstersClusterbusterSlotParser","BloodSuckersMegaWaysSlotParser","BombusterSlotParser","BountyRaidSlotParser","BuffaloCollectorSlotParser","BuffaloManiaMegaWaysSlotParser","BullsRunWildSlotParser","CaiShen168SlotParser","CannonballCashSlotParser","CaptainRizkMegaWaysParser","CashExplorerSlotParser","CasinoNightSlotParser","ChristmasMorningSlotParser","CinderellaSlotParser","CirqueDeLaFortuneSlotParser","ClashOfTheBeastsSlotParser","CloverCrazeSlotParser","CrazyGenieSlotParser","CyberAttackSlotParser","DearSantaSlotParser","DevilsNumberSlotParser","DiamondBlitz2SlotParser","DiamondBlitzSlotParser","DiamondDoggiesSlotParser","DiamondRoyaleSlotParser","DiceDiceDiceSlotParser","DivineWaysSlotParser","DoggyRichesMegaWaysParser","DragonKingLegendOfTheSeasSlotParser","DragonsClusterbusterSlotParser","DragonsFireInfiniReelsSlotParser","DragonsFireMegaWaysSlotParser","DragonsLockSlotParser","DragonsMirrorSlotParser","DragonsPlaygroundSlotParser","DruidsMagicSlotParser","DynamiteRichesMegaWaysParser","DynamiteRichesSlotParser","EasyGoldSlotParser","EgyptClusterbusterSlotParser","EgyptMegaWaysSlotParser","ElvenMagicSlotParser","EmeraldDiamondSlotParser","EmperorOfIndiaSlotParser","EpicJourneySlotParser","EsqueletoMariachiSlotParser","FishtasticSlotParser","FlamingFoxSlotParser","FlodderSlotParser","FortuneCatSlotParser","FortuneCharmSlotParser","FortuneHouseSlotParser","FourSquadSlotParser","FruitFlashSlotParser","FruitShopFrenzySlotParser","GemCrushSlotParser","GemsGoneWildPowerReelsSlotParser","GemsGoneWildSlotParser","GemsInfernoMegaWaysSlotParser","GemtasticSlotParser","GenieNightsSlotParser","GetTheGoldInfiniReelsSlotParser","GigaBlastSlotParser","GladiatorClashSlotParser","GodsOfTroySlotParser","GoldMineMistressSlotParser","GoldenLeprechaunMegaWaysSlotParser","GoldenOfferSlotParser","GonzosQuestMegaWaysSlotParser","GoodLuckClusterbusterSlotParser","GrandWheelSlotParser","GreatGoldSlotParser","HammerGodsSlotParser","HappyApplesSlotParser","HarleCoinParser","HereKittyKittySlotParser","HoardOfPoseidonSlotParser","HotHotChilliPotSlotParser","HundredKDropSlotParser","ImperialPalaceSlotParser","JackInAPotSlotParser","JellyBellyMegaWaysSlotParser","JewelScarabsSlotParser","JingleBellsBonanzaSlotParser","JingleBellsPowerReelsSlotParser","JingleWaysMegaWaysSlotParser","JoeExoticSlotParser","JudgementDayMegaWaysSlotParser","KnightsOfAvalonSlotParser","LaserFruitSlotParser","LastChanceSaloonSlotParser","LegendaryExcaliburSlotParser","LionDanceSlotParser","LionsHoardSlotParser","LondonTubeSlotParser","LostRelics2SlotParser","LuckyDevilSlotParser","LuckyMrGreenSlotParser","LuckyOktoberfestSlotParser","LunaFortunaSlotParser","MagicLabSlotParser","MagicPowersMegaWaysSlotParser","MajesticMysteriesPowerReelsSlotParser","MasqueradeSlotParser","MayanGodsSlotParser","MayhemSlotParser","MegaDragonSlotParser","MegaPyramidSlotParser","MermaidsSlotParser","MidasGoldSlotParser","MidnightRomanceSlotParser","MineBlownSlotParser","MixAndMatchSlotParser","MonstersUnchainedSlotParser","MoonSpellSlotParser","MsRobinHoodSlotParser","MultiplierRichesSlotParser","MummyMegaWaysSlotParser","MysteryFruitSlotParser","MysteryReelsDeluxeSlotParser","MysteryReelsMegaWaysSlotParser","MysticWheelSlotParser","NarcosMexicoSlotParser","NeonLinksSlotParser","NightRollerSlotParser","NinjaWaysSlotParser","PaddyPowerGoldMegaWaysSlotParser","PandorasTreasureSlotParser","PeggySweetsSlotParser","PersianFortuneSlotParser","PiggyPiratesSlotParser","PiggyRiches2MegaWaysSlotParser","PiratesPartySlotParser","PiratesPlentyBattleForGoldSlotParser","PiratesPlentyMegaWaysSlotParser","PiratesPlentySlotParser","PlayWithTheDevilSlotParser","PrimateKingMegaWaysSlotParser","PrimateKingSlotParser","PussNBootsSlotParser","RAsLegendSlotParser","RainbowJackpotsMegaWaysSlotParser","RainbowJackpotsPowerLinesSlotParser","RainbowJackpotsSlotParser","ReactorSlotParser","RedDiamondSlotParser","RedHotBBQSlotParser","ReelHeistSlotParser","ReelKeeperSlotParser","ReelKingMegaSlotParser","RegalBeastsSlotParser","ReptizillionsPowerReelsSlotParser","RiddleOfTheSphinxSlotParser","RisqueMegaWaysSlotParser","RobinHoodsWildForestSlotParser","RocketMenSlotParser","RomanEmperorsSlotParser","SakuraMasksSlotParser","SavannahPrideSlotParser","SevenSevenSevenStrikeSlotParser","SevenSevenSevenSuperStrikeSlotParser","SevensLuckSlotParser","ShadowSocietySlotParser","SheepGoneWildSlotParser","SirensRichesSlotParser","SnowWildAndThe7FeaturesSlotParser","SpinTownSlotParser","SteamSquadSlotParser","StolenTreasuresSlotParser","SugarliciousEveryWaySlotParser","SumoSpinsSlotParser","SunFortuneSlotParser","TenElementsSlotParser","TenThousandAndOneNightsMegaWaysSlotParser","TenThousandAndOneNightsSlopParser","TheEqualizerSlotParser","TheGoodTheBadAndTheRichSlotParser","TheGreatestTrainRobberySlotParser","TheWildHatterSlotParser","TheWildKissSlotParser","TheWishMasterMegaWaysSlotParser","ThorsLightningSlotParser","ThorsVengeanceSlotParser","ThreeKingdomsSlotParser","ThreeMusketeersSlotParser","TicketToWildSlotParser","TotemLightningPowerReelsSlotParser","TotemLightningSlotParser","TransylvaniaNightOfBloodSlotParser","TreasureMinePowerReelsSlotParser","TreasureMineSlotParser","TrillionaireMegaWaysSlotParser","TrillionaireParser","TrophyFishSlotParser","TurtleParadiseSlotParser","TwentyFourHourGrandPrixSlotParser","VaultCrackerMegaWaysSlotParser","VaultCrackerSlotParser","VickyVenturaSlotParser","VikingsLegacyEveryWaySlotParser","ViralSpiralSlotParser","WarOfGodsSlotParser","WellOfWishesSlotParser","WheelOfAmpSlotParser","WildCircusSlotParser","WildElementsSlotParser","WildFightSlotParser","WildHotChilliReels2SlotParser","WildHotChilliReelsSlotParser","WildNordsSlotParser","WildTundraSlotParser","WildWildChestSlotParser","WinEscalatorSlotParser","WingsOfRaSlotParser","WinterWondersSlotParser","WolfStacksMegaWaysSlotParser","YearRoundRichesClusterbusterSlotParser","ZaidasFortuneSlotParser","ZeusLightningMegaWaysSlotParser","ZeusLightningPowerReelsSlotParser","ZillardKingSlotParser","10001Nights","10001NightsLimited","10001NightsMegaWays","24HourGrandPrix","25ERENMegaWays","4Squad","777Strike","777StrikeEDC","777SuperStrike","7sLuck","AdmiralBurstMegaWays","AgeOfAkkadia","AgentRoyale","AlexanderTheGreat","AlianzaLimaMegaWays","AlpacaVibeMegaWays","AncientDisco","AncientScript","AncientsBlessing","ArcadeBomb","Astronaut","Astros","AthensMegaWays","Atlantis","BabylonRiches","BabylonRichesLimited","BestOfSverigeMegaWays","BestOfSverigeVinterMegaWays","Bets10FarmMegaWays","BettyBorisAndBoo","BlobstersClusterbuster","BloodSuckersMegaWays","BlueJaysJackpotMegaWays","Bombuster","BosqueEncantadoMegaWays","BountyRaid","BuffaloCollector","BuffaloCollectorLimited","BuffaloManiaMegaWays","BullsRunWild","CaiShen168","CannonballCash","CaptainRizkMegaWays","CashExplorer","CasibomIstanbulMegaWays","CasinoNight","CasinomaxiFarmMegaWays","CasinometropolFarmMegaWays","ChristmasMorning","Cinderella","CirqueDeLaFortune","ClashOfTheBeasts","CloverCraze","ConmebolCopaAmerica2024BetanoMegaWays","CopacabanaMegaWays","CrazyGenie","CyberAttack","CyberFuryBonanzaMegaWays","DearSanta","DevilsNumber","DiamondBlitz2","DiamondBlitz","DiamondClubMegaWays","DiamondDoggies","DiamondRoyale","DiceDiceDice","DiscountCasinoFarmMegaWays","DivineWays","DoggyRichesMegaWays","DragonKingLegendOfTheSeas","DragonsClusterbuster","DragonsFireInfiniReels","DragonsFireMegaWays","DragonsLock","DragonsMirror","DragonsPlayground","DruidsMagic","DynamiteRiches","DynamiteRichesLimited","DynamiteRichesMegaWays","DynamiteRichesMegaWaysLimited","EUROEFSANELERiMegaWays","EasyGold","EasyGoldLimited","EgyptClusterbuster","EgyptMegaWays","ElitloppetMegaWays","ElvenMagic","EmeraldDiamond","EmperorOfIndia","EpicJourney","EsqueletoMariachi","FTNBonanzaMegaWays","FairyForestMegaWays","FilthyRichMegaWays","Fishtastic","FishtasticLimited","FlamingFox","Flodder","FonbetLollipopMegaWays","FortuneCat","FortuneCharm","FortuneHouse","FruitFlash","FruitShopFrenzy","FruitShopFrenzyLimited","FurballFeverMegaWays","GemCrush","GemsGoneWild","GemsGoneWildPowerReels","GemsInfernoMegaWays","Gemtastic","GenieNights","GetTheGoldInfiniReels","GigaBlast","GladiatorClash","GoddessOfTheMoonMegaWays","GodsOfTroy","GoldMineMistress","GoldenLeprechaunMegaWays","GoldenOffer","GonzosQuestMegaWays","GoodLuckClusterbuster","GrandWheel","GreatGold","GreatNationMegaWays","GronksTouchdownTreasuresMegaWays","HammerGods","HappyApples","HarleCoin","HereKittyKitty","HoardOfPoseidon","HotHotChilliPot","HundredKDrop","ImperialPalace","JackInAPot","JackpotPlanetMegaWays","JellyBellyMegaWays","JetbahisFarmMegaWays","JewelScarabs","JingleBellsBonanza","JingleBellsPowerReels","JingleWaysMegaWays","JoeExotic","JudgementDayMegaWays","JuegoUniversitarioMegaWays","JungleParadiseMegaWays","KnightsOfAvalon","LaserFruit","LastChanceSaloon","LegendaryExcalibur","LionDance","LionsHoard","LondonTube","LostRelics2","LuckyDevil","LuckyFortuneCat","LuckyMrGreen","LuckyOktoberfest","LuckyRadarMegaWays","LuckySkyMegaWays","LunaFortuna","MOMANGMegaWays","MagicLab","MagicNeuquenMegaWays","MagicPowersMegaWays","MajesticMysteriesPowerReels","Masquerade","MayanGods","Mayhem","MegaDragon","MegaPyramid","MermaidRockMegaWays","Mermaids","MidasGold","MidnightRomance","MineBlown","MixAndMatch","MobilbahisFarmMegaWays","MonstersUnchained","MoonSpell","MsRobinHood","MultiplierRiches","MummyMegaWays","MysteryFruit","MysteryReelsDeluxe","MysteryReelsMegaWays","MysticWheel","NarcosMexico","NeonLinks","NightRoller","NightmareCityMegaWays","NinjaWays","NovibetBasketOfRichesMegaWays","NovibetFreakBeatsMegaWays","NovibetTrophyQuestMegaWays","NovibetWinterFurballsMegaWays","OsmanliBonanzaMegaWays","PaddyPowerGoldMegaWays","PandorasTreasure","PeggySweets","PenguinsPowerplayMegaWays","PersianFortune","PiggyPirates","PiggyRiches2MegaWays","PiratesParty","PiratesPlenty","PiratesPlentyBattleForGold","PiratesPlentyMegaWays","PlayWithTheDevil","PokerdomAnniversaryMegaWays","PowerPathLuckyReelsMegaWays","PremioMayorMegaWays","PrimateKing","PrimateKingLimited","PrimateKingMegaWays","PrimateKingMegaWaysLimited","PussNBoots","RAsLegend","RainbowJackpots","RainbowJackpotsMegaWays","RainbowJackpotsPowerLines","RakiBonanzaMegaWays","Reactor","RedDiamond","RedHotBBQ","ReelHeist","ReelKeeper","ReelKingMega","RegalBeasts","ReptizillionsPowerReels","RiddleOfTheSphinx","RisqueMegaWays","RobinHoodsWildForest","RocketMen","RomanEmperors","RutschebanenMegaWays","SBOTOPRisingOfTheBeastMegaWays","SHOWMETHEHONEYMegaWays","SakuraMasks","SakuraMasksLimited","SantaExpressMegaWays","SavannahPride","SexyWashMegaWays","ShadowSociety","SheepGoneWild","SirensRiches","SirensRichesLimited","SnowWildAndThe7Features","SpinTown","SpringRaceMegaWays","StarvegasTombMegaWays","SteamSquad","StolenTreasures","SugarliciousEveryWay","SugarliciousEveryWayLimited","SukkerbagerenMegaWays","SultanBonanzaMegaWays","SumoSpins","SunFortune","TempleOfCresusMegaWays","TenElements","TheBigTenMegaWays","TheEqualizer","TheGoodTheBadAndTheRich","TheGreatestTrainRobbery","TheWildHatter","TheWildKiss","TheWishMasterMegaWays","ThorsLightning","ThorsVengeance","ThreeKingdoms","ThreeMusketeers","TicketToWild","TotemLightning","TotemLightningPowerReels","TransylvaniaNightOfBlood","TreasureMine","TreasureMinePowerReels","TrickOfTheDeadWildCandiesMegaWays","Trillionaire","TrillionaireMegaWays","TrophyFish","TurtleParadise","VaultCracker","VaultCrackerMegaWays","VaultCrackerMegaWaysLimited","VickyVentura","VikingsLegacyEveryWay","ViralSpiral","WarOfGods","WellOfWishes","WheelOfAmp","WildCircus","WildElements","WildFight","WildHotChilliReels2","WildHotChilliReels","WildNords","WildTouchdownMegaWays","WildTundra","WildWildChest","WinEscalator","WingsOfRa","WingsOfRaMegaWays","WinterBurstMegaWays","WinterWonders","WolfStacksMegaWays","YearRoundRichesClusterbuster","YearRoundRichesClusterbusterLimited","ZaidasFortune","ZeusLightningMegaWays","ZeusLightningPowerReels","ZillardKing","AgeOfAkkadiaParser","hasBonusTitle","scatters","bonusReels","wins","AGENT_TILE_ID","_handleLockedTiles","filteredData","MAX_MULTIPLIER","fatTiles","otherFeatures","AncientScriptParser","_handleExpandingTiles","expandingTiles","expandTile","filteredLockedTiles","lockedTile","ArcadeBombParser","bomb","explosions","explosion","positions","autoFinishRes","restResponses","parsedAutoFinishResponses","isInitialSpin","shouldAddToRespins","pendingWin","hasCollect","hasRedDiamond","collectedAmount","progress","nextWin","takeAll","JP_SPAWN_INDEX","AstrosParser","jpData","wildId","maxProgress","frameSpinOpen","winsMultipliers","randomWilds","symbolMultipliers","tileIdUnderFrame","startReelRow","startReelCol","_handleFatTilesExpand","_handleBanditTiles","MAX_DIGITS_LENGTH","tileData","mplr","_getMultiplierAssetNames","multiplierValues","num","Number","multiplierValuesImgSources","BullsRunWildParser","FEATURES","RANDOM_WILDS","LOCKED_TILES","specialPos","specialId","_addMultipliers","isFirst","isSpecial","featureId","featureData","featureWithMultipliers","_getFeatureReelData","reelData","tileOnePos","_getMultiplierAssetId","_tileOnePos$multiplie","MysteryReelsMegaWaysParser","_handleCloningTile","LinesConfig","PRIZE_TO_TEXTURE","10","50","TILE_TO_TEXTURE","_handleHiddenSymbols","symbolsData","winLinePositions","_generateLinePositions","flat","hiddenSymbolsOnLines","wonHiddenSymbols","discoverer","noWonHiddenSymbols","symbolData","entry","hasTile","_generatePositionData","lineOffsets","_response$game$win","_response$game$win$to","_response$game$win$fr","tileArray","CinderellaParser","_handleConnectingTiles","_handleExpandSymbols","expandData","ClashOfTheBeastsParser","_handleMultiDirectionalNudge","isVisible","feauteName","_handleHorizontalNudge","_handleVerticalNudge","topBuffer","bottomBuffer","verticalBuffer","startIndex","endIndex","leftBuffer","bufferLeft","rightBuffer","bufferRight","horizontalBuffer","newBuffer","GREEN_CLOVER","GOLDEN_CLOVER","FT_2X3_SUFFIX","FT_3X3_SUFFIX","_handleGoldenClover","_replaceAreaUnderFT","_handleGenieActivator","genieActivator","FS_SCREEN_ID","WAYS_MULTIPLIER","FILL_POSITION","_get$call","parsedMultipliers","singleData","jpTiles","jp","waysMultiplier","fillPositions","_removeMultipliers","_showFsWinScreen","_handlePresents","snowWhites","presents","_handleUpgradeTiles","upgradeTiles","instant","MOVING_TILES","_handleMovingWilds","DiamondBlitzParser","DOGGIE_MULTIPLIERS","multiplierNext","doggieMultipliers","randomWildsData","skipMulti","maxMultiplier","finalMultiplier","DiceDiceDiceParser","distanceMultiplier","DivineWaysParser","cloningTileData","cloningTile","toTileC","clones","fatTilesData","fill","DragonKingLegendOfTheSeasParser","FS_FAT_TILE_ID","DEFAULT_FAT_TILE_ID","dataId","DragonsFireMegaWaysParser","dragonKeys","flameId","frameId","_handleFlames","_handleFrames","flames","frames","isNew","_response$game","freeSpinData","_parseRandomWildsData","linkedWilds","expandWilds","randomTiles","_ref3","linkedWildsPositions","_getPositionsForLinked","expandWildsPositions","_getPositionsForExpand","_ref4","_ref5","DynamiteRichesParser","_handleFatWilds","_alterIndex","indexMap","MAX_PROGRESS","EMPTY_POS_ID","MIDDLE_REEL_INDEX","ASSETS_EXTENSIONS","allFatTiles","normal","reelCounter","addExtension","_getAssetNameExtension","tileAssetName","showNextLevel","lockedTiles","every","isFsUnlocked","_ASSETS_EXTENSIONS$fe","FEATURE_NAME","FAT_TILE_ID","TRANSPARENT_POS_ID","JP_TILE","fatTile","ft","ElvenMagicParser","_handleIceTiles","arrowsOrder","arrow","_addJackpotTiles","_Config","STANDARD_EMPEROR_TILE_ID","_currentReelLength","_hidePositionsUnderGrid","splice","reelLength","gridPosition","chainReactor","_isMaxReelLength","reelsMultiplier","reelsMultipliers","EpicJourneyParser","_goldBonusTileId","_journeyBonusTileId","featName","_hasBonusMismatch","_alterTilesOnBonusMismatch","bonusTileIndex","bonusType","_countTilesWithId","horizontalReel","EMPTY_DIVER_ID","bonusDiverProp","cashData","diverId","multiplierValue","formattedMultiplier","startsWith","substring","featureReelsData","FlodderParser","FortuneCatParser","randomWildsMega","randomWildsSuper","randomWildsBig","FortuneCharmParser","_wildTileId","_handleFortuneCharms","_alterWinWaysData","winWaysData","tileIdToRemove","_reCalcTilesMatrix","winWayData","tileMatrixCopy","activePosIndices","_getOnlyActivePosIndices","tileFlag","_reelHasMoreWilds","flag","tileIndices","wildsCount","FortuneHouseParser","_modifierFeaturesList","_generateRespinData","fortuneRespin","featureTiles","respinsCount","capitalizedFeature","featureRespin","_getModifiedBuffer","FRAME_PARTS","START","MIDDLE","END","FRAME","respinCount","expandFramePositions","multiPostfix","_handleSwapTiles","featuresData","swapTiles","GemsGoneWildPowerReelsParser","GemsGoneWildParser","lockedWildGems","lockedTilesData","rainbowGem","diamonds","_this2$_handleMultipl","_this2$_handleMultipl2","GemtasticParser","GenieNightsParser","hasLampBonus","SCATTERS","TEXT_SCATTERS_IDS","scatter","_replaceAreaUnderTiles","multiplierAssetName","wildsWithMultipliers","_getRandomWildsReelData","_assembleMultiplierTiles","bonusReel","_handleWreaths","MISTRESS_TILE_ID","FAT_HEIGHT","MIN_MULTIPLIER","_handleAppleTile","mistressTiles","isFat","hasMulti","appleTiles","_appleTiles$","GoldenLeprechaunMegaWaysParser","_handleLuckyLine","_handleWildStacks","wildStacksData","currentReel","GoldenOfferParser","GonzosQuestMegaWaysParser","_alterRespinsResult","indexOfEntryWithFs","findIndex","_handleInstantWinJackpot","bonusWheelSymbolsCount","_getBonusSymbolsCount","bonusSymbolsCount","HammerGodsParser","_handleSwapData","DIAMOND_APPLE_ID","_handleDiamondApples","HoardOfPoseidonParser","_handleExpandTiles","_handleCloningTiles","expandTiles","cloningTiles","HotHotChilliPotParser","ImperialPalaceParser","_handleRandomTilesBeer","_handlePipeTiles","randomTilesBeer","tileLeft","minBottomTile","JewelScarabsParser","reelsData","LOCKED_MULTIPLIERS","SWAP_TILES","WILD_FRAME_ID","JACKPOT_TILE","NOT_VISIBLE_INDEXES","currentTile","_data$game$lockedMult","lockedMultipliers","hasFrame","currentTileCopy","_parseReels","_hasCashDropFeature","lockedTilesOnReel","_getLockedReelData","isTileSwap","_data$game$bonusGames","bonusGames","JingleBellsPowerReelsParser","JingleWaysMegaWaysParser","JoeExoticParser","WILD","WILD_WITHOUT_TEXT","TILES_WITHOUT_MULTIPLIERS","MAX_REEL_HEIGHT","_handleTileSplit","_handleAllMultipliers","doublingTiles","bufferLengths","_ref3$allMultipliers","allMultipliers","_ref3$type","screenExpand","_trimEmpty","_trimEmptyColumns","_trimEmptyRows","firstColumn","lastColumn","_isEmpty","times","tilesPerReel","firstRow","lastRow","columnEmpty","_getFirstTile","LastChanceSaloonParser","_getSelectedChoice","hasJackpotWins","modifier","bonusAmount","LegendaryExcaliburParser","fatTilesOnReel","where","LionDanceParser","MYSTERY_TILE","LionsHoardParser","_handleMysterySwap","_data$featureName","swappedPositions","hasInstantWin","hasWaysMultiplier","hasBonus","prioritizedValue","multi","multiPrefix","f","_this3$_handleMultipl","MAX_LEVEL","_data$game","levelDiff","_parseWinLines","_data$game2","_parseReelsForLevel","startFrom","stopAt","acc","indexes","LuckyDevilParser","LuckyMrGreenParser","_handleactOfGenerosity","raogData","LunaFortunaParser","_moveTile","movedTile","_handleMplr","FAT_TILES_IDS","swapFatTiles","MajesticMysteriesPowerReelsParser","MasqueradeParser","tilesCount","MayanGodsParser","_handleFeatureTiles","featData","MegaDragonParser","flatData","_alterReelsTiles","_getStartReelIndex2","_getStartReelIndex","cloningData","_toWays","newWinLines","WILD_TILES_IDS","SHAKER_TILE","wildGlass","glass","shakerTile","_handleTNT","positionsData","tnt","flatMap","mainData","hasWheel","_hasFeature","selectedChoice","price","MOON_SYMBOLS","_tile$to","startTileIndex","endTileIndex","bufferFinal","_clearConsecutiveIndexes","PATCH_TYPE_IDS","0","PATCHES","_replaceAreaOverTiles","wild","patches","_getReelData","mysterySwap","_handleMysteryTiles","NarcosMexicoParser","zonesToTiles","8","9","hasWinExchange","freeSpinsPrice","winExchangeBonus","NeonLinksParser","_handleRandomRandomRows","randomRows","sequenceArray","PaddyPowerGoldMegaWaysParser","SPECIAL_SYMBOL","PeggySweetsParser","PersianFortuneParser","_handleMovingTiles","MISS_PIG_ID","FAT_TILE_MULTI_ASSEMBLE_THRESHOLD","MAX_WIN_ACTIVATOR","_data$screenMask","_data$progress","_data$lockedTiles","visibleRows","hasMaxWin","isAtFsEnd","locked","_locked$multiplier","action","subArray","mrPigFatTiles","_gameData$freeSpins","IDS_CHANGED_IN_FS","_handleFirstRow","unlocked","PiratesPlentyMegaWaysParser","_handleSixthReel","COIN_ID","BONUSES_IDS","IW_ACTIVATORS","LOCK_SUFFIX","_handleCoinSymbols","_handleUnlocks","progressReel","repeat","hasRespinProgress","lastProgress","PussNBootsParser","RAsLegendParser","freeSpinsMega","freeSpinMega","RainbowJackpotsParser","ReelHeistParser","_handleCop","_handleThieves","saveCop","copCheck","cop","reelTo","ReelKingSlotParser","_handleLinesLength","visible","ReptizillionsPowerReelsParser","_handleFsScatters","_ref$to","_getScatterData2","_getScatterData","_setTileIds","visibleTiles","EMPTY_TILES_ID","REDUNDANT_TILES_ID","TOP_HORIZONTAL_REEL_INDEX","BOTTOM_HORIZONTAL_REEL_INDEX","maxReelHeight","RobinHoodsWildForestParser","_applyTiles","locksData","_parseData","targetTiles","parsed","extraPositions","RocketMenParser","_donGolfClub","_handleNuclearSpins","respinArray","nukeSpinsData","kimsNukes","missiles","Kim","donsNukes","Don","explode","FAT_TILES","BONUS_SYMBOLS","MULTIPLIER_TILE_ID","FAT_DEFAULT_DATA","_handleNestedData","_parseFatLockedData","lock","_this5$_handleMultipl","WARRIOR_ID","PRINCESS_ID","_handlePrincess","movingTilesData","isSwapTile","swapTile","isFullReel","_ref2$to","tilesArray","bonusTypes","senior","reelType","rowType","currentReels","activeReels","currentRows","activeRows","_data$progressBonus","progressBonus","progressType","progressValue","_data$reels","TEMPLATE","dwarf","_handleDwarf","_handleDwarf3","dwarf3","SpinTownParser","_handleWildMultiplier","filterItem","PROGRESS","initialBooster","boosterPositions","SCATTER_TILE","EMPTY_FS_TILE","ACTIVATED_SCATTER_TILE","_replaceTiles","_handleScatters","fromId","toId","_handleScattersBomb","scattersBomb","SunFortuneParser","TenElementsParser","TenThousandAndOneNightsParser","mysteryTiles","hatterSwaps","lastSwapId","batchIndex","PRINCE_ID","FRAME_ID","hasPrincess","hasMultiplier","isPrincesTile","assetsArray","_handleLockedShields","lockedShields","shield","ThorsVengeanceParser","ThreeKingdomsParser","linesWin","porthosWilds","aramisWilds","athosWilds","JP_TILE_ID","FS_TILE_ID","_handleLongTermSymbols","fsTile","extras","TotemLightningPowerReelsParser","TotemLightningParser","RANDOM_WAYS","randomWays","_handleFatWild","fatWild","currReel","currIndex","WILD_ID","WILD_HEIGHT","_lockedCash","_handleCash","_handleFsWild","_handleVisibleTiles","cashCollector","initial","TROPHY_FISH_IDS","FISHERMAN_ID","_handleLocksAndMultipliers","isInFreeSpins","_locked$value","_locked$spins","_spins$to","showLocks","_value$multiplier","TURTLE","MARKERS","LEFT","RIGHT","TILE_ID","LEFT_MARKER_ID","RIGHT_MARKER_ID","NORMAL_ID","_handleTurtles","turtleWilds","turtleWild","marker","PREFIX_ID","VaultCrackerParser","SMALL_WILD_ID","WellOfWishesParser","EXPAND_TYPES","REEL","ROW","WheelOfAmpParser","wheelBonus","_ref$progress","expandType","visibleReelsCount","visibleRowsCount","WildCircusParser","_handleJesters","flameBreatherData","bearBalanceData","WildElementsParser","_handleSwapFatTiles","cachedLockedTiles","_cacheLockedTiles","cachedTile","_respinFatTilesData","WildHotChilliReelsParser","WildNordsParser","WildWildChestParser","maxChests","_handleNudgeFatTiles","respinId","lockedTilesId","nudgeFatTilesData","nudgeFatTiles","WinEscalatorParser","batchOfTiles","WinterWondersParser","SPECIAL_WILD_ID","WILDS_NAME","_handleWildFeature","specialWildLocks","destroy","_handleCloningFeature","_tileData$to","targetIndex","targetReel","targetHeight","targetId","reelSize","targetVisibleHeight","isPartial","inUpperBuffer","tilePiecesCounter","_expandReels","_data$expandReels","expandReels","expandedReels","NSGParser","_instance","_code","freespin_id","_gameConfig","_response","Manager","getTile","reelsConfig","getResponse","reelTypeFS","flip","sc","Y2X","setResponse","setGameData","nsp","mwg","raw","getLines","multiWays","reelsManager","isLinesGame","lineIds","highlighTiles","winningMul","winning","_calcLine","winSingleMul","winMul","lineCells","winStart","winCount","hit","injectReelPosition","injectReel","historyReelTiles","sy","mul","collectorReels","cols","reel_id","gameType","ReelsManager","isCollector","_convertCollectorToReels","extrasReelPosition","extrasReel","c1","c2","c3","screenType","overlayTile","randomWildOverlay","mysteryOverlay","randomSymbolsOverlay","lockedSymbolsOverlay","overlay","longTilesOverlay","fatTileOverlay","flipCoin","flipSymbol","reelsCashBefore","remapBonusSymbols","tileParse","scope","totalWinning","modifierWin","spinsLen","lastReels","_Manager","isMWG","success","_getOtherWins","noTilesModAccumulate","isInteger","_getReels","_getFreeSpins","reactions","types","accumulate","g","multiplierBonusWin","_getMultiplierBonus","expand","expandTileOverlayWin","tilesMod","oldValue","winAmounts","cashPotsAfter","gameResult","featureBuy","win_correction","collector","bundleSpins","collectorFreeSpins","collectorFreeSpinWinning","_getJackpotsWin","NSGSlotParser","LeprechaunsMagicSlotParser","GoldenLampsSlotParser","GoldenToadSlotParser","NeptunesRichesSlotParser","ChineseWildsSlotParser","ElephantTreasureSlotParser","RedHotSlotSlotParser","MacauRacingSlotParser","LuckyCarnivalSlotParser","AsianFortuneSlotParser","DragonPearlSlotParser","AliBabasLuckSlotParser","CasinoSpinSlotParser","LeprechaunsMagicMegawaysSlotParser","AliBabasLuckMegawaysSlotParser","AliBabasLuckPowerReelsSlotParser","LeprechaunsMagicPowerReelsSlotParser","CobraQueenSlotParser","DreamDestinySlotParser","AmazonIslandMegaWaysSlotParser","EpicTreasureSlotParser","EpicTreasure2SlotParser","EightysSpinsSlotParser","WantedWildzSlotParser","WantedWildzExtremeSlotParser","CottonGangAffairSlotParser","DesertLegendsSpinsSlotParser","JellyMULTIHOPSSlotParser","SeaBoatAdventureSlotParser","NightmareFamilyMegaWaysSlotParser","ChristmasMULTIHOPSSlotParser","MidnightThirstSlotParser","DrFrancashsteinSlotParser","DontHitPlzSlotParser","SwordStompSlotParser","PurrPowerSlotParser","GlowDigSlotParser","LosMuertosLocosSlotParser","RumbleMuttsSlotParser","SeaBoatAdventureMegaWaysSlotParser","FishNFishSlotParser","AztecShamansMegaWaysSlotParser","ArcOfZeusSlotParser","setGameConfig","translateTile","GottonGangAffairSlotParser","flippedReels","manager","Cards","InfoRoulette","KeyValueMap","CayTableParser","_getPartials","outcome","_mapKeys","_data$responses$","combine","actualWins","_filterWins","_extractSubKeys","_parseObject","winner","cards","ballPosition","stakes","groups","numbers","color","pattern","extractFn","orderIndex","small_big","even_odd","dozen","six_line","straight","street","trio","corner","lower","groupName","order","sortedGroups","totalStake","sub","group","_extractGroup","collection","BlackJackParser","ThreeCardBragParser","VideoPokerParser","Hands","InfoBlackJack","HANDS_ORDER","currData","nextResponse","hands","extractHands","extractWinDetails","sideBets","extractSideBets","handScores","extractHandInfo","extractTotalStake","totalSideBetsStake","totalWins","responseHandled","userData","dealer","dealerHand","lastPayouts","playersHand","handPosition","key_str","key_split","hasInsurance","isInsured","playersSplitHand","handsObj","sortHandsOrder","hand","uniqueAction","hasBlackjack","isDoubled","sum","handName","sideBet","winObj","mappedWinObj","splitted","insuranceArray","handObj","playerHand","ante","fixCardsFormat","fixedCards","card","HANDS_TYPE","something","playerHands","handId","combinationName","winningCombination","InfoPuntoBanco","DopTableParser","ClassicBlackjack","DONDBlackjack","PlatinumBlackjack","PlatinumBlackjackSideBetsPA","handsData","extractSidebetTotalStake","offerState","isSurrendered","Boolean","sidebetsArray","handType","CacheHelper","_args$lang","onProgress","onError","promises","override","parseGameName","getTranslationsFile","translations","subLang","Promise","all","catch","imageType","getManifestFile","file","images","localized","src","getImages","tilesDataParser","overrides","provider","timestamp","cache","resolve","manifest","RIGHT_POSITION_CURRENCIES","CURRENCIES","NOK","_symbol","_position","_thousands","_decimals","_digits","_formatting","_exists","singleton","digits","currency","assetsHelper","getTranslations","currenrFbName","EXCLUDED_PROPS","decPoint","thousandsSep","prec","sep","dec","tail","_texts","supported","_default","baseCode","trim","BlackjackOriginal","BlackjackOriginalSideBets","BlackjackOriginalCashOut","BlackjackClassic","RouletteClassic","RouletteOriginalMoneyBack","RouletteOriginalStats","paddyMars","BlackjackPremiumSideBets","toSlash","ROULETTE_COLORS","red","black","SUITS","v1","v2","hideDecimal","hideZero","lvalue","operator","rvalue","+","-","*","/","%","comparator",">=","<=","selectedIndex","currentIndex","timeStringUTC","keyword","loose","text","getCardSuit","suit","winPos","reelTiles","mode","_root$data$winDetails","_root$data$winDetails2","_options$type","getSpecific","_options$type2","_getSpecific2","image","asset","objects","found","suitCode","HandlebarsCompiler","depth0","stack1","alias1","alias2","helperMissing","alias3","translate","player","getCardAsset","banker","formatSum","unless","getCardSuitAsset","getCardRank","isBonusRound","transactionDetails","12","13","14","16","18","localTime","19","notUndefinedOrNull","20","translateTableWinner","translateFromKey","11","15","getNumberColor","limitedWinTotal","detailsData","ifNot","compactView","regulationsData","helper","alias4","label","winLinesDetails","lineIdPrefix","linesData","math","tilesData","hasHorizontalReels","gId","getTileAsset","hasMultiplierFeature","getMultipliers","afterBet","isVoucher","17","ifNum","validNumber","hasAdditionalWayWin","hasAdditionalScatterWin","isWays","compare","isCluster","isScatter","alias5","22","24","translateScratchGameText","25","26","27","translateOtherWin","29","30","31","33","34","36","37","38","40","41","42","44","46","47","49","spinScreen","aPath","21","23","isDemo","demoRoundNote","32","freeRoundNote","39","43","51","53","54","55","57","59","61","62","64","65","spinDetails","66","67","69","70","72","73","74","75","76","77","79","81","82","83","jackpotDetails","85","87","88","89","91","93","95","45","48","52","56","63","68","71","78","80","97","99","100"],"mappings":"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CA,6BACA,sBACA,aACA,yBACA,sBACA,sBACA,oBACA,yBACA,gCACA,yBACA,WACA,kBACA,gBACA,qBACA,iBACA,qBACA,cACA,sBACA,qBACA,yBACA,eACA,YACA,aACA,uBACA,sBACA,wBACA,gBACA,2BACA,2BACA,sBACA,YACA,sBACA,mCACA,4BACA,wBACA,qBACA,uBACA,qBACA,uBACA,6BACA,yBACA,kBACA,qBACA,aACA,2BACA,mBACA,aACA,qBACA,mBACA,iBACA,uBACA,sBACA,sBACA,YACA,cACA,yBACA,oBACA,cACA,gBACA,uBACA,cACA,qBACA,eACA,wBACA,0BACA,YACA,gCACA,4BACA,6BACA,gCACA,yBACA,yBACA,mBACA,4BACA,uBACA,sBACA,6BACA,eACA,wBACA,8BACA,8BACA,sBACA,sBACA,6BACA,0BACA,sBACA,iBACA,uBACA,iCACA,yBACA,uBACA,2BACA,mBACA,qBACA,wBACA,uBACA,8BACA,wBACA,wBACA,0BACA,gBACA,yBACA,oBACA,cACA,wBACA,iBACA,2BACA,oCACA,uBACA,uBACA,8BACA,eACA,wBACA,sBACA,qBACA,sBACA,wBACA,aACA,qBACA,oBACA,sBACA,qBACA,gBACA,yBAEFC,SACE,SACA,eACA,SACA,kBACA,yBACA,YACA,uBACA,qBACA,YACA,WACA,wBACA,cACA,iBACA,kBACA,aACA,cACA,cACA,WACA,aACA,cACA,mBACA,YACA,UACA,aACA,eACA,sBACA,iBACA,aACA,wBACA,gBACA,uBACA,+BACA,uCAEFC,aACE,SACA,cACA,iBACA,WACA,cACA,mBACA,cAEFC,kBACEC,QAAU,2BACVC,YACE,gBACA,uBACA,aACA,kBACA,cACA,kBAGJC,WAAa,4BAA6B,qBAC1CC,gBACE,gBACA,uBACA,cACA,iBACA,cACA,iBACA,aACA,sBACA,wBACA,YACA,iBACA,uBACA,kBACA,aACA,sBACA,YACA,uBACA,cACA,qBACA,aACA,cACA,2BACA,uBACA,aACA,iBACA,uBACA,8BACA,yBAEFC,eACE,oBACA,kBACA,iBACA,aACA,oBACA,cACA,gBACA,eACA,eACA,eACA,YACA,aACA,eACA,eAEFC,iBACEC,KACE,iBACA,uBACA,sBACA,qBACA,wBACA,8BACA,qBACA,0BACA,0BACA,0BACA,yBACA,6BACA,wCACA,qBACA,2BACA,sBACA,6BACA,yBACA,qBACA,qBACA,sBACA,qBACA,yBACA,uBACA,sBACA,2BACA,sBACA,mCACA,wBACA,uBACA,6BACA,yBACA,qBACA,mBACA,iBACA,uBACA,sBACA,cACA,yBACA,wBACA,gCACA,4BACA,6BACA,gCACA,yBACA,4BACA,8BACA,8BACA,sBACA,sBACA,uBACA,iCACA,yBACA,uBACA,mBACA,qBACA,wBACA,wBACA,wBACA,yBACA,oBACA,oCACA,wBACA,uBAEFC,UACAC,cAAgB,mBAElBC,aAAe,yBAA0B,yBACzCC,eACE,sBACA,iBACA,SACA,iBACA,uBACA,eACA,oBACA,uBACA,sBACA,qBACA,uBACA,SACA,iBACA,wBACA,8BACA,qBACA,uBACA,8BACA,kBACA,yBACA,uBACA,cACA,0BACA,YACA,0BACA,mBACA,0BACA,uBACA,aACA,iBACA,sBACA,0BACA,cACA,yBACA,6BACA,wCACA,qBACA,cACA,2BACA,gBACA,sBACA,6BACA,sBACA,uBACA,yBACA,sBACA,sBACA,oBACA,yBACA,gCACA,yBACA,WACA,kBACA,qBACA,gBACA,qBACA,iBACA,iBACA,qBACA,cACA,sBACA,qBACA,yBACA,YACA,eACA,YACA,aACA,YACA,uBACA,WACA,sBACA,wBACA,iBACA,gBACA,2BACA,2BACA,gBACA,sBACA,wBACA,YACA,aACA,sBACA,mCACA,4BACA,cACA,YACA,iBACA,kBACA,aACA,wBACA,qBACA,uBACA,qBACA,uBACA,6BACA,yBACA,kBACA,qBACA,aACA,2BACA,mBACA,aACA,cACA,qBACA,mBACA,cACA,iBACA,WACA,uBACA,sBACA,YACA,aACA,sBACA,YACA,cACA,yBACA,oBACA,cACA,mBACA,gBACA,uBACA,cACA,qBACA,eACA,wBACA,0BACA,YACA,gCACA,4BACA,6BACA,gCACA,yBACA,yBACA,mBACA,cACA,4BACA,uBACA,sBACA,6BACA,mBACA,eACA,wBACA,8BACA,8BACA,sBACA,sBACA,6BACA,0BACA,sBACA,aACA,cACA,iBACA,YACA,uBACA,iCACA,yBACA,uBACA,2BACA,mBACA,UACA,qBACA,wBACA,aACA,eACA,sBACA,uBACA,8BACA,wBACA,wBACA,0BACA,gBACA,yBACA,oBACA,cACA,wBACA,iBACA,iBACA,aACA,wBACA,2BACA,oCACA,uBACA,uBACA,8BACA,gBACA,uBACA,eACA,wBACA,sBACA,qBACA,sBACA,wBACA,aACA,qBACA,oBACA,sBACA,qBACA,gBACA,+BACA,sCACA,yBAEFC,mBAAsBhC,OAAQ,aAAciC,SAAW,EAAG,GAAK,EAAG,GAAK,KACvEC,mBACE,SACA,WACA,yBACA,aACA,cACA,sBACA,4BACA,uBACA,gBACA,qBACA,iBACA,UACA,yBACA,WACA,gBACA,aACA,kBACA,WACA,YACA,aACA,kBACA,uBACA,cACA,qBACA,gBACA,gBACA,eACA,sBACA,eACA,qBACA,2BACA,yBACA,uBACA,sBACA,+BACA,sCACA,yBAEFC,iBAAmB,aAAc,aAAc,aAC/CC,SACE,UAAgB,UAChB,cAAgB,cAChB,eAAgB,UAChB,UAAgB,cAChB,eAAgB,eAChB,aAAgB,iBAElBlC,OACEhC,SAAW,YACXC,SACE,cACA,qBACA,sBACA,iBACA,kBACA,iBACA,SACA,YACA,YACA,eACA,iBACA,SACA,uBACA,eACA,cACA,oBACA,sBACA,qBACA,eACA,gBACA,mBACA,YACA,aACA,4BACA,YACA,SACA,iBACA,WACA,aACA,uBACA,aACA,WACA,WACA,WACA,kBACA,wBACA,8BACA,qBACA,mBACA,uBACA,8BACA,kBACA,yBACA,uBACA,cACA,0BACA,YACA,0BACA,aACA,cACA,oBACA,mBACA,0BACA,uBACA,YACA,eACA,aACA,kBACA,iBACA,sBACA,aACA,eACA,gBACA,eACA,WACA,0BACA,yBACA,6BACA,mBACA,mBACA,aACA,oBACA,mBACA,cACA,wCACA,qBACA,aACA,gBACA,cACA,2BACA,kBACA,YACA,eACA,eACA,gBACA,sBACA,iBACA,gBACA,aACA,eACA,6BACA,aACA,sBACA,mBACA,4BACA,uBACA,cACA,yBACA,sBACA,cACA,cACA,oBACA,sBACA,oBACA,gBACA,iBACA,wBACA,yBACA,gCACA,yBACA,cACA,eACA,WACA,kBACA,qBACA,gBACA,qBACA,aACA,iBACA,iBACA,cACA,oBACA,qBACA,aACA,cACA,sBACA,qBACA,aACA,oBACA,WACA,qBACA,aACA,UACA,yBACA,YACA,aACA,eACA,cACA,eACA,yBACA,YACA,aACA,YACA,uBACA,eACA,yBACA,sBACA,YACA,cACA,wBACA,YACA,gBACA,cACA,2BACA,aACA,mBACA,WACA,gBACA,2BACA,cACA,cACA,aACA,gBACA,sBACA,wBACA,aACA,YACA,sBACA,mCACA,aACA,4BACA,iCACA,cACA,YACA,iBACA,kBACA,yBACA,iBACA,kBACA,eACA,WACA,iBACA,kBACA,aACA,wBACA,eACA,aACA,cACA,uBACA,eACA,cACA,qBACA,wBACA,qBACA,YACA,uBACA,6BACA,yBACA,kBACA,qBACA,aACA,mBACA,iBACA,qBACA,YACA,aACA,aACA,iBACA,cACA,aACA,cACA,kBACA,eACA,iBACA,eACA,mBACA,qBACA,mBACA,iBACA,cACA,cACA,iBACA,YACA,uBACA,sBACA,cACA,8BACA,aACA,YACA,SACA,aACA,WACA,cACA,WACA,sBACA,YACA,kBACA,cACA,yBACA,oBACA,YACA,mBACA,eACA,sBACA,qBACA,uBACA,yBACA,cACA,cACA,cACA,qBACA,eACA,YACA,cACA,wBACA,YACA,gCACA,4BACA,6BACA,gCACA,eACA,yBACA,yBACA,gBACA,cACA,4BACA,iBACA,wBACA,eACA,uBACA,sBACA,6BACA,mBACA,gBACA,6BACA,wBACA,mBACA,8BACA,8BACA,sBACA,cACA,qBACA,sBACA,6BACA,aACA,YACA,kBACA,0BACA,4BACA,sBACA,UACA,aACA,YACA,mBACA,cACA,YACA,aACA,oBACA,uBACA,eACA,cACA,cACA,0BACA,oBACA,WACA,iBACA,uBACA,YACA,YACA,gBACA,YACA,uBACA,iCACA,yBACA,cACA,qBACA,uBACA,aACA,gBACA,mBACA,gBACA,UACA,gBACA,eACA,sBACA,0BACA,WACA,iBACA,qBACA,WACA,YACA,wBACA,aACA,kBACA,eACA,sBACA,uBACA,8BACA,wBACA,wBACA,YACA,aACA,0BACA,gBACA,yBACA,eACA,cACA,oBACA,eACA,0BACA,0BACA,gBACA,uBACA,cACA,0BACA,iBACA,iBACA,gBACA,kBACA,qBACA,aACA,wBACA,iBACA,2BACA,2BACA,eACA,yBACA,oCACA,kBACA,eACA,uBACA,aACA,iBACA,YACA,eACA,uBACA,8BACA,gBACA,uBACA,eACA,wBACA,cACA,YACA,sBACA,eACA,qBACA,aACA,oBACA,aACA,eACA,iBACA,YACA,qBACA,sBACA,YACA,aACA,eACA,wBACA,aACA,gBACA,eACA,YACA,oBACA,sBACA,gBACA,qBACA,UACA,gBACA,+BACA,sCACA,kBACA,gBACA,wBACA,0BACA,eAEFC,YACE,gBACA,uBACA,gBACA,cACA,kBACA,oBACA,cACA,kBACA,yBACA,WACA,iBACA,YACA,qBACA,qBACA,gBACA,mBACA,cACA,WACA,WACA,YACA,cACA,gBACA,mBACA,eACA,iBACA,wBACA,eACA,sBAEFK,SACE,gBACA,cACA,mBACA,gBACA,iCACA,cACA,cACA,qBACA,eACA,qBACA,kBACA,aACA,YACA,iBACA,gBACA,gBACA,YACA,iBACA,gBACA,cACA,eACA,eACA,UACA,aACA,kBACA,cACA,cACA,cACA,cACA,gBACA,WACA,eACA,cACA,kBACA,kBACA,aACA,aACA,YACA,aACA,qBACA,wBACA,mBACA,uBACA,gBACA,4BACA,UACA,WACA,eACA,YACA,gBACA,eACA,YACA,gBACA,YACA,YACA,YACA,YACA,WACA,YACA,eACA,UACA,iBACA,cACA,aACA,kBACA,gBACA,eACA,yBACA,gBACA,sBACA,eACA,cACA,eACA,eACA,aACA,kBACA,aACA,eACA,eACA,gBACA,cACA,mBACA,eACA,aACA,aACA,mBACA,aACA,YACA,cACA,cACA,qBACA,iBACA,2BACA,qBACA,uBACA,wBACA,qBACA,kBACA,oBACA,qCACA,oBACA,eACA,eACA,yBACA,yBACA,cACA,8BACA,kBACA,cACA,cACA,aACA,eACA,cACA,sBACA,aACA,yBACA,eACA,cACA,uBACA,cACA,cACA,kBACA,cACA,SACA,iBACA,gBACA,YACA,YACA,eACA,mBACA,aACA,aACA,aACA,WACA,eACA,WACA,aACA,gBACA,cACA,cACA,oCACA,yBACA,cACA,WACA,YACA,cACA,YACA,cACA,WACA,iBACA,YAEFH,cACE,mBACA,gBACA,oBACA,+BAEFC,aACE,mBACA,mBACA,8BAEFC,aAAe,cACfH,SACE,uBACA,yBACA,uBACA,uBACA,mBACA,eACA,mBACA,eACA,gBACA,cACA,aACA,2BACA,6BACA,gBACA,cACA,iBACA,0BACA,aACA,eACA,cACA,eACA,aACA,aACA,eACA,cACA,qBACA,WACA,mBACA,qBACA,iBACA,mBACA,qBACA,iBACA,kBACA,aACA,aACA,YACA,UACA,kBACA,2BACA,YACA,cACA,aAEFO,cACE,sBACA,qBACA,yBACA,4BACA,mBACA,oBACA,2BACA,4BACA,4BAEFD,aACE,mBACA,kBACA,oBACA,sBACA,2BACA,sBACA,kBACA,4BACA,mBACA,yBAEFD,YACE,4BACA,+BACA,yBACA,yBACA,yBACA,0BACA,iBACA,qBACA,qBACA,yBAEFG,cAAgB,aAChBC,eAAiB,kCAEnB/6B,OACEs+B,KACE,cACA,qBACA,iBACA,kBACA,YACA,YACA,eACA,SACA,cACA,eACA,gBACA,mBACA,YACA,aACA,4BACA,YACA,WACA,aACA,aACA,gBACA,uBACA,WACA,WACA,gBACA,WACA,kBACA,mBACA,cACA,aACA,cACA,oBACA,YACA,eACA,kBACA,aACA,eACA,gBACA,eACA,WACA,mBACA,mBACA,aACA,oBACA,mBACA,cACA,aACA,gBACA,kBACA,YACA,eACA,eACA,iBACA,gBACA,aACA,eACA,aACA,kBACA,mBACA,4BACA,cACA,cACA,cACA,oBACA,oBACA,gBACA,cACA,iBACA,wBACA,cACA,eACA,WACA,kBACA,aACA,iBACA,cACA,oBACA,aACA,aACA,oBACA,WACA,qBACA,aACA,UACA,YACA,cACA,eACA,yBACA,kBACA,yBACA,eACA,yBACA,YACA,cACA,YACA,iBACA,cACA,aACA,mBACA,WACA,gBACA,cACA,cACA,aACA,gBACA,aACA,YACA,aACA,iCACA,YACA,kBACA,yBACA,iBACA,eACA,WACA,iBACA,kBACA,eACA,aACA,cACA,eACA,cACA,qBACA,qBACA,wBACA,YACA,mBACA,iBACA,qBACA,gBACA,YACA,aACA,iBACA,aACA,cACA,kBACA,eACA,iBACA,eACA,mBACA,iBACA,cACA,YACA,cACA,8BACA,aACA,YACA,SACA,WACA,cACA,WACA,WACA,YACA,kBACA,YACA,YACA,mBACA,eACA,sBACA,qBACA,uBACA,yBACA,cACA,cACA,YACA,cACA,eACA,gBACA,iBACA,wBACA,eACA,gBACA,6BACA,mBACA,cACA,qBACA,aACA,YACA,kBACA,4BACA,iBACA,UACA,aACA,YACA,mBACA,cACA,YACA,aACA,oBACA,uBACA,eACA,cACA,cACA,0BACA,oBACA,WACA,uBACA,YACA,YACA,gBACA,cACA,qBACA,aACA,gBACA,gBACA,gBACA,eACA,sBACA,0BACA,iBACA,WACA,kBACA,YACA,aACA,eACA,cACA,eACA,0BACA,0BACA,gBACA,uBACA,0BACA,gBACA,kBACA,eACA,qBACA,aACA,iBACA,2BACA,eACA,yBACA,kBACA,eACA,aACA,iBACA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","file":"bundle.js","sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar objectCreate = Object.create || objectCreatePolyfill\nvar objectKeys = Object.keys || objectKeysPolyfill\nvar bind = Function.prototype.bind || functionBindPolyfill\n\nfunction EventEmitter() {\n  if (!this._events || !Object.prototype.hasOwnProperty.call(this, '_events')) {\n    this._events = objectCreate(null);\n    this._eventsCount = 0;\n  }\n\n  this._maxListeners = this._maxListeners || undefined;\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nvar hasDefineProperty;\ntry {\n  var o = {};\n  if (Object.defineProperty) Object.defineProperty(o, 'x', { value: 0 });\n  hasDefineProperty = o.x === 0;\n} catch (err) { hasDefineProperty = false }\nif (hasDefineProperty) {\n  Object.defineProperty(EventEmitter, 'defaultMaxListeners', {\n    enumerable: true,\n    get: function() {\n      return defaultMaxListeners;\n    },\n    set: function(arg) {\n      // check whether the input is a positive number (whose value is zero or\n      // greater and not a NaN).\n      if (typeof arg !== 'number' || arg < 0 || arg !== arg)\n        throw new TypeError('\"defaultMaxListeners\" must be a positive number');\n      defaultMaxListeners = arg;\n    }\n  });\n} else {\n  EventEmitter.defaultMaxListeners = defaultMaxListeners;\n}\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n  if (typeof n !== 'number' || n < 0 || isNaN(n))\n    throw new TypeError('\"n\" argument must be a positive number');\n  this._maxListeners = n;\n  return this;\n};\n\nfunction $getMaxListeners(that) {\n  if (that._maxListeners === undefined)\n    return EventEmitter.defaultMaxListeners;\n  return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n  return $getMaxListeners(this);\n};\n\n// These standalone emit* functions are used to optimize calling of event\n// handlers for fast cases because emit() itself often has a variable number of\n// arguments and can be deoptimized because of that. These functions always have\n// the same number of arguments and thus do not get deoptimized, so the code\n// inside them can execute faster.\nfunction emitNone(handler, isFn, self) {\n  if (isFn)\n    handler.call(self);\n  else {\n    var len = handler.length;\n    var listeners = arrayClone(handler, len);\n    for (var i = 0; i < len; ++i)\n      listeners[i].call(self);\n  }\n}\nfunction emitOne(handler, isFn, self, arg1) {\n  if (isFn)\n    handler.call(self, arg1);\n  else {\n    var len = handler.length;\n    var listeners = arrayClone(handler, len);\n    for (var i = 0; i < len; ++i)\n      listeners[i].call(self, arg1);\n  }\n}\nfunction emitTwo(handler, isFn, self, arg1, arg2) {\n  if (isFn)\n    handler.call(self, arg1, arg2);\n  else {\n    var len = handler.length;\n    var listeners = arrayClone(handler, len);\n    for (var i = 0; i < len; ++i)\n      listeners[i].call(self, arg1, arg2);\n  }\n}\nfunction emitThree(handler, isFn, self, arg1, arg2, arg3) {\n  if (isFn)\n    handler.call(self, arg1, arg2, arg3);\n  else {\n    var len = handler.length;\n    var listeners = arrayClone(handler, len);\n    for (var i = 0; i < len; ++i)\n      listeners[i].call(self, arg1, arg2, arg3);\n  }\n}\n\nfunction emitMany(handler, isFn, self, args) {\n  if (isFn)\n    handler.apply(self, args);\n  else {\n    var len = handler.length;\n    var listeners = arrayClone(handler, len);\n    for (var i = 0; i < len; ++i)\n      listeners[i].apply(self, args);\n  }\n}\n\nEventEmitter.prototype.emit = function emit(type) {\n  var er, handler, len, args, i, events;\n  var doError = (type === 'error');\n\n  events = this._events;\n  if (events)\n    doError = (doError && events.error == null);\n  else if (!doError)\n    return false;\n\n  // If there is no 'error' event listener then throw.\n  if (doError) {\n    if (arguments.length > 1)\n      er = arguments[1];\n    if (er instanceof Error) {\n      throw er; // Unhandled 'error' event\n    } else {\n      // At least give some kind of context to the user\n      var err = new Error('Unhandled \"error\" event. (' + er + ')');\n      err.context = er;\n      throw err;\n    }\n    return false;\n  }\n\n  handler = events[type];\n\n  if (!handler)\n    return false;\n\n  var isFn = typeof handler === 'function';\n  len = arguments.length;\n  switch (len) {\n      // fast cases\n    case 1:\n      emitNone(handler, isFn, this);\n      break;\n    case 2:\n      emitOne(handler, isFn, this, arguments[1]);\n      break;\n    case 3:\n      emitTwo(handler, isFn, this, arguments[1], arguments[2]);\n      break;\n    case 4:\n      emitThree(handler, isFn, this, arguments[1], arguments[2], arguments[3]);\n      break;\n      // slower\n    default:\n      args = new Array(len - 1);\n      for (i = 1; i < len; i++)\n        args[i - 1] = arguments[i];\n      emitMany(handler, isFn, this, args);\n  }\n\n  return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n  var m;\n  var events;\n  var existing;\n\n  if (typeof listener !== 'function')\n    throw new TypeError('\"listener\" argument must be a function');\n\n  events = target._events;\n  if (!events) {\n    events = target._events = objectCreate(null);\n    target._eventsCount = 0;\n  } else {\n    // To avoid recursion in the case that type === \"newListener\"! Before\n    // adding it to the listeners, first emit \"newListener\".\n    if (events.newListener) {\n      target.emit('newListener', type,\n          listener.listener ? listener.listener : listener);\n\n      // Re-assign `events` because a newListener handler could have caused the\n      // this._events to be assigned to a new object\n      events = target._events;\n    }\n    existing = events[type];\n  }\n\n  if (!existing) {\n    // Optimize the case of one listener. Don't need the extra array object.\n    existing = events[type] = listener;\n    ++target._eventsCount;\n  } else {\n    if (typeof existing === 'function') {\n      // Adding the second element, need to change to array.\n      existing = events[type] =\n          prepend ? [listener, existing] : [existing, listener];\n    } else {\n      // If we've already got an array, just append.\n      if (prepend) {\n        existing.unshift(listener);\n      } else {\n        existing.push(listener);\n      }\n    }\n\n    // Check for listener leak\n    if (!existing.warned) {\n      m = $getMaxListeners(target);\n      if (m && m > 0 && existing.length > m) {\n        existing.warned = true;\n        var w = new Error('Possible EventEmitter memory leak detected. ' +\n            existing.length + ' \"' + String(type) + '\" listeners ' +\n            'added. Use emitter.setMaxListeners() to ' +\n            'increase limit.');\n        w.name = 'MaxListenersExceededWarning';\n        w.emitter = target;\n        w.type = type;\n        w.count = existing.length;\n        if (typeof console === 'object' && console.warn) {\n          console.warn('%s: %s', w.name, w.message);\n        }\n      }\n    }\n  }\n\n  return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n  return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n    function prependListener(type, listener) {\n      return _addListener(this, type, listener, true);\n    };\n\nfunction onceWrapper() {\n  if (!this.fired) {\n    this.target.removeListener(this.type, this.wrapFn);\n    this.fired = true;\n    switch (arguments.length) {\n      case 0:\n        return this.listener.call(this.target);\n      case 1:\n        return this.listener.call(this.target, arguments[0]);\n      case 2:\n        return this.listener.call(this.target, arguments[0], arguments[1]);\n      case 3:\n        return this.listener.call(this.target, arguments[0], arguments[1],\n            arguments[2]);\n      default:\n        var args = new Array(arguments.length);\n        for (var i = 0; i < args.length; ++i)\n          args[i] = arguments[i];\n        this.listener.apply(this.target, args);\n    }\n  }\n}\n\nfunction _onceWrap(target, type, listener) {\n  var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n  var wrapped = bind.call(onceWrapper, state);\n  wrapped.listener = listener;\n  state.wrapFn = wrapped;\n  return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n  if (typeof listener !== 'function')\n    throw new TypeError('\"listener\" argument must be a function');\n  this.on(type, _onceWrap(this, type, listener));\n  return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n    function prependOnceListener(type, listener) {\n      if (typeof listener !== 'function')\n        throw new TypeError('\"listener\" argument must be a function');\n      this.prependListener(type, _onceWrap(this, type, listener));\n      return this;\n    };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n    function removeListener(type, listener) {\n      var list, events, position, i, originalListener;\n\n      if (typeof listener !== 'function')\n        throw new TypeError('\"listener\" argument must be a function');\n\n      events = this._events;\n      if (!events)\n        return this;\n\n      list = events[type];\n      if (!list)\n        return this;\n\n      if (list === listener || list.listener === listener) {\n        if (--this._eventsCount === 0)\n          this._events = objectCreate(null);\n        else {\n          delete events[type];\n          if (events.removeListener)\n            this.emit('removeListener', type, list.listener || listener);\n        }\n      } else if (typeof list !== 'function') {\n        position = -1;\n\n        for (i = list.length - 1; i >= 0; i--) {\n          if (list[i] === listener || list[i].listener === listener) {\n            originalListener = list[i].listener;\n            position = i;\n            break;\n          }\n        }\n\n        if (position < 0)\n          return this;\n\n        if (position === 0)\n          list.shift();\n        else\n          spliceOne(list, position);\n\n        if (list.length === 1)\n          events[type] = list[0];\n\n        if (events.removeListener)\n          this.emit('removeListener', type, originalListener || listener);\n      }\n\n      return this;\n    };\n\nEventEmitter.prototype.removeAllListeners =\n    function removeAllListeners(type) {\n      var listeners, events, i;\n\n      events = this._events;\n      if (!events)\n        return this;\n\n      // not listening for removeListener, no need to emit\n      if (!events.removeListener) {\n        if (arguments.length === 0) {\n          this._events = objectCreate(null);\n          this._eventsCount = 0;\n        } else if (events[type]) {\n          if (--this._eventsCount === 0)\n            this._events = objectCreate(null);\n          else\n            delete events[type];\n        }\n        return this;\n      }\n\n      // emit removeListener for all listeners on all events\n      if (arguments.length === 0) {\n        var keys = objectKeys(events);\n        var key;\n        for (i = 0; i < keys.length; ++i) {\n          key = keys[i];\n          if (key === 'removeListener') continue;\n          this.removeAllListeners(key);\n        }\n        this.removeAllListeners('removeListener');\n        this._events = objectCreate(null);\n        this._eventsCount = 0;\n        return this;\n      }\n\n      listeners = events[type];\n\n      if (typeof listeners === 'function') {\n        this.removeListener(type, listeners);\n      } else if (listeners) {\n        // LIFO order\n        for (i = listeners.length - 1; i >= 0; i--) {\n          this.removeListener(type, listeners[i]);\n        }\n      }\n\n      return this;\n    };\n\nfunction _listeners(target, type, unwrap) {\n  var events = target._events;\n\n  if (!events)\n    return [];\n\n  var evlistener = events[type];\n  if (!evlistener)\n    return [];\n\n  if (typeof evlistener === 'function')\n    return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n  return unwrap ? unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n  return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n  return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n  if (typeof emitter.listenerCount === 'function') {\n    return emitter.listenerCount(type);\n  } else {\n    return listenerCount.call(emitter, type);\n  }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n  var events = this._events;\n\n  if (events) {\n    var evlistener = events[type];\n\n    if (typeof evlistener === 'function') {\n      return 1;\n    } else if (evlistener) {\n      return evlistener.length;\n    }\n  }\n\n  return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n  return this._eventsCount > 0 ? Reflect.ownKeys(this._events) : [];\n};\n\n// About 1.5x faster than the two-arg version of Array#splice().\nfunction spliceOne(list, index) {\n  for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1)\n    list[i] = list[k];\n  list.pop();\n}\n\nfunction arrayClone(arr, n) {\n  var copy = new Array(n);\n  for (var i = 0; i < n; ++i)\n    copy[i] = arr[i];\n  return copy;\n}\n\nfunction unwrapListeners(arr) {\n  var ret = new Array(arr.length);\n  for (var i = 0; i < ret.length; ++i) {\n    ret[i] = arr[i].listener || arr[i];\n  }\n  return ret;\n}\n\nfunction objectCreatePolyfill(proto) {\n  var F = function() {};\n  F.prototype = proto;\n  return new F;\n}\nfunction objectKeysPolyfill(obj) {\n  var keys = [];\n  for (var k in obj) if (Object.prototype.hasOwnProperty.call(obj, k)) {\n    keys.push(k);\n  }\n  return k;\n}\nfunction functionBindPolyfill(context) {\n  var fn = this;\n  return function () {\n    return fn.apply(context, arguments);\n  };\n}\n","import * as base from './handlebars/base';\n\n// Each of these augment the Handlebars object. No need to setup here.\n// (This is done to easily share code between commonjs and browse envs)\nimport SafeString from './handlebars/safe-string';\nimport Exception from './handlebars/exception';\nimport * as Utils from './handlebars/utils';\nimport * as runtime from './handlebars/runtime';\n\nimport noConflict from './handlebars/no-conflict';\n\n// For compatibility and usage outside of module systems, make the Handlebars object a namespace\nfunction create() {\n  let hb = new base.HandlebarsEnvironment();\n\n  Utils.extend(hb, base);\n  hb.SafeString = SafeString;\n  hb.Exception = Exception;\n  hb.Utils = Utils;\n  hb.escapeExpression = Utils.escapeExpression;\n\n  hb.VM = runtime;\n  hb.template = function(spec) {\n    return runtime.template(spec, hb);\n  };\n\n  return hb;\n}\n\nlet inst = create();\ninst.create = create;\n\nnoConflict(inst);\n\ninst['default'] = inst;\n\nexport default inst;\n","import {createFrame, extend, toString} from './utils';\nimport Exception from './exception';\nimport {registerDefaultHelpers} from './helpers';\nimport {registerDefaultDecorators} from './decorators';\nimport logger from './logger';\n\nexport const VERSION = '4.1.0';\nexport const COMPILER_REVISION = 7;\n\nexport const REVISION_CHANGES = {\n  1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it\n  2: '== 1.0.0-rc.3',\n  3: '== 1.0.0-rc.4',\n  4: '== 1.x.x',\n  5: '== 2.0.0-alpha.x',\n  6: '>= 2.0.0-beta.1',\n  7: '>= 4.0.0'\n};\n\nconst objectType = '[object Object]';\n\nexport function HandlebarsEnvironment(helpers, partials, decorators) {\n  this.helpers = helpers || {};\n  this.partials = partials || {};\n  this.decorators = decorators || {};\n\n  registerDefaultHelpers(this);\n  registerDefaultDecorators(this);\n}\n\nHandlebarsEnvironment.prototype = {\n  constructor: HandlebarsEnvironment,\n\n  logger: logger,\n  log: logger.log,\n\n  registerHelper: function(name, fn) {\n    if (toString.call(name) === objectType) {\n      if (fn) { throw new Exception('Arg not supported with multiple helpers'); }\n      extend(this.helpers, name);\n    } else {\n      this.helpers[name] = fn;\n    }\n  },\n  unregisterHelper: function(name) {\n    delete this.helpers[name];\n  },\n\n  registerPartial: function(name, partial) {\n    if (toString.call(name) === objectType) {\n      extend(this.partials, name);\n    } else {\n      if (typeof partial === 'undefined') {\n        throw new Exception(`Attempting to register a partial called \"${name}\" as undefined`);\n      }\n      this.partials[name] = partial;\n    }\n  },\n  unregisterPartial: function(name) {\n    delete this.partials[name];\n  },\n\n  registerDecorator: function(name, fn) {\n    if (toString.call(name) === objectType) {\n      if (fn) { throw new Exception('Arg not supported with multiple decorators'); }\n      extend(this.decorators, name);\n    } else {\n      this.decorators[name] = fn;\n    }\n  },\n  unregisterDecorator: function(name) {\n    delete this.decorators[name];\n  }\n};\n\nexport let log = logger.log;\n\nexport {createFrame, logger};\n","import registerInline from './decorators/inline';\n\nexport function registerDefaultDecorators(instance) {\n  registerInline(instance);\n}\n\n","import {extend} from '../utils';\n\nexport default function(instance) {\n  instance.registerDecorator('inline', function(fn, props, container, options) {\n    let ret = fn;\n    if (!props.partials) {\n      props.partials = {};\n      ret = function(context, options) {\n        // Create a new partials stack frame prior to exec.\n        let original = container.partials;\n        container.partials = extend({}, original, props.partials);\n        let ret = fn(context, options);\n        container.partials = original;\n        return ret;\n      };\n    }\n\n    props.partials[options.args[0]] = options.fn;\n\n    return ret;\n  });\n}\n","\nconst errorProps = ['description', 'fileName', 'lineNumber', 'message', 'name', 'number', 'stack'];\n\nfunction Exception(message, node) {\n  let loc = node && node.loc,\n      line,\n      column;\n  if (loc) {\n    line = loc.start.line;\n    column = loc.start.column;\n\n    message += ' - ' + line + ':' + column;\n  }\n\n  let tmp = Error.prototype.constructor.call(this, message);\n\n  // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.\n  for (let idx = 0; idx < errorProps.length; idx++) {\n    this[errorProps[idx]] = tmp[errorProps[idx]];\n  }\n\n  /* istanbul ignore else */\n  if (Error.captureStackTrace) {\n    Error.captureStackTrace(this, Exception);\n  }\n\n  try {\n    if (loc) {\n      this.lineNumber = line;\n\n      // Work around issue under safari where we can't directly set the column value\n      /* istanbul ignore next */\n      if (Object.defineProperty) {\n        Object.defineProperty(this, 'column', {\n          value: column,\n          enumerable: true\n        });\n      } else {\n        this.column = column;\n      }\n    }\n  } catch (nop) {\n    /* Ignore if the browser is very particular */\n  }\n}\n\nException.prototype = new Error();\n\nexport default Exception;\n","import registerBlockHelperMissing from './helpers/block-helper-missing';\nimport registerEach from './helpers/each';\nimport registerHelperMissing from './helpers/helper-missing';\nimport registerIf from './helpers/if';\nimport registerLog from './helpers/log';\nimport registerLookup from './helpers/lookup';\nimport registerWith from './helpers/with';\n\nexport function registerDefaultHelpers(instance) {\n  registerBlockHelperMissing(instance);\n  registerEach(instance);\n  registerHelperMissing(instance);\n  registerIf(instance);\n  registerLog(instance);\n  registerLookup(instance);\n  registerWith(instance);\n}\n","import {appendContextPath, createFrame, isArray} from '../utils';\n\nexport default function(instance) {\n  instance.registerHelper('blockHelperMissing', function(context, options) {\n    let inverse = options.inverse,\n        fn = options.fn;\n\n    if (context === true) {\n      return fn(this);\n    } else if (context === false || context == null) {\n      return inverse(this);\n    } else if (isArray(context)) {\n      if (context.length > 0) {\n        if (options.ids) {\n          options.ids = [options.name];\n        }\n\n        return instance.helpers.each(context, options);\n      } else {\n        return inverse(this);\n      }\n    } else {\n      if (options.data && options.ids) {\n        let data = createFrame(options.data);\n        data.contextPath = appendContextPath(options.data.contextPath, options.name);\n        options = {data: data};\n      }\n\n      return fn(context, options);\n    }\n  });\n}\n","import {appendContextPath, blockParams, createFrame, isArray, isFunction} from '../utils';\nimport Exception from '../exception';\n\nexport default function(instance) {\n  instance.registerHelper('each', function(context, options) {\n    if (!options) {\n      throw new Exception('Must pass iterator to #each');\n    }\n\n    let fn = options.fn,\n        inverse = options.inverse,\n        i = 0,\n        ret = '',\n        data,\n        contextPath;\n\n    if (options.data && options.ids) {\n      contextPath = appendContextPath(options.data.contextPath, options.ids[0]) + '.';\n    }\n\n    if (isFunction(context)) { context = context.call(this); }\n\n    if (options.data) {\n      data = createFrame(options.data);\n    }\n\n    function execIteration(field, index, last) {\n      if (data) {\n        data.key = field;\n        data.index = index;\n        data.first = index === 0;\n        data.last = !!last;\n\n        if (contextPath) {\n          data.contextPath = contextPath + field;\n        }\n      }\n\n      ret = ret + fn(context[field], {\n        data: data,\n        blockParams: blockParams([context[field], field], [contextPath + field, null])\n      });\n    }\n\n    if (context && typeof context === 'object') {\n      if (isArray(context)) {\n        for (let j = context.length; i < j; i++) {\n          if (i in context) {\n            execIteration(i, i, i === context.length - 1);\n          }\n        }\n      } else {\n        let priorKey;\n\n        for (let key in context) {\n          if (context.hasOwnProperty(key)) {\n            // We're running the iterations one step out of sync so we can detect\n            // the last iteration without have to scan the object twice and create\n            // an itermediate keys array.\n            if (priorKey !== undefined) {\n              execIteration(priorKey, i - 1);\n            }\n            priorKey = key;\n            i++;\n          }\n        }\n        if (priorKey !== undefined) {\n          execIteration(priorKey, i - 1, true);\n        }\n      }\n    }\n\n    if (i === 0) {\n      ret = inverse(this);\n    }\n\n    return ret;\n  });\n}\n","import Exception from '../exception';\n\nexport default function(instance) {\n  instance.registerHelper('helperMissing', function(/* [args, ]options */) {\n    if (arguments.length === 1) {\n      // A missing field in a {{foo}} construct.\n      return undefined;\n    } else {\n      // Someone is actually trying to call something, blow up.\n      throw new Exception('Missing helper: \"' + arguments[arguments.length - 1].name + '\"');\n    }\n  });\n}\n","import {isEmpty, isFunction} from '../utils';\n\nexport default function(instance) {\n  instance.registerHelper('if', function(conditional, options) {\n    if (isFunction(conditional)) { conditional = conditional.call(this); }\n\n    // Default behavior is to render the positive path if the value is truthy and not empty.\n    // The `includeZero` option may be set to treat the condtional as purely not empty based on the\n    // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative.\n    if ((!options.hash.includeZero && !conditional) || isEmpty(conditional)) {\n      return options.inverse(this);\n    } else {\n      return options.fn(this);\n    }\n  });\n\n  instance.registerHelper('unless', function(conditional, options) {\n    return instance.helpers['if'].call(this, conditional, {fn: options.inverse, inverse: options.fn, hash: options.hash});\n  });\n}\n","export default function(instance) {\n  instance.registerHelper('log', function(/* message, options */) {\n    let args = [undefined],\n        options = arguments[arguments.length - 1];\n    for (let i = 0; i < arguments.length - 1; i++) {\n      args.push(arguments[i]);\n    }\n\n    let level = 1;\n    if (options.hash.level != null) {\n      level = options.hash.level;\n    } else if (options.data && options.data.level != null) {\n      level = options.data.level;\n    }\n    args[0] = level;\n\n    instance.log(... args);\n  });\n}\n","export default function(instance) {\n  instance.registerHelper('lookup', function(obj, field) {\n    return obj && obj[field];\n  });\n}\n","import {appendContextPath, blockParams, createFrame, isEmpty, isFunction} from '../utils';\n\nexport default function(instance) {\n  instance.registerHelper('with', function(context, options) {\n    if (isFunction(context)) { context = context.call(this); }\n\n    let fn = options.fn;\n\n    if (!isEmpty(context)) {\n      let data = options.data;\n      if (options.data && options.ids) {\n        data = createFrame(options.data);\n        data.contextPath = appendContextPath(options.data.contextPath, options.ids[0]);\n      }\n\n      return fn(context, {\n        data: data,\n        blockParams: blockParams([context], [data && data.contextPath])\n      });\n    } else {\n      return options.inverse(this);\n    }\n  });\n}\n","import {indexOf} from './utils';\n\nlet logger = {\n  methodMap: ['debug', 'info', 'warn', 'error'],\n  level: 'info',\n\n  // Maps a given level value to the `methodMap` indexes above.\n  lookupLevel: function(level) {\n    if (typeof level === 'string') {\n      let levelMap = indexOf(logger.methodMap, level.toLowerCase());\n      if (levelMap >= 0) {\n        level = levelMap;\n      } else {\n        level = parseInt(level, 10);\n      }\n    }\n\n    return level;\n  },\n\n  // Can be overridden in the host environment\n  log: function(level, ...message) {\n    level = logger.lookupLevel(level);\n\n    if (typeof console !== 'undefined' && logger.lookupLevel(logger.level) <= level) {\n      let method = logger.methodMap[level];\n      if (!console[method]) { // eslint-disable-line no-console\n        method = 'log';\n      }\n      console[method](...message); // eslint-disable-line no-console\n    }\n  }\n};\n\nexport default logger;\n","/* global window */\nexport default function(Handlebars) {\n  /* istanbul ignore next */\n  let root = typeof global !== 'undefined' ? global : window,\n      $Handlebars = root.Handlebars;\n  /* istanbul ignore next */\n  Handlebars.noConflict = function() {\n    if (root.Handlebars === Handlebars) {\n      root.Handlebars = $Handlebars;\n    }\n    return Handlebars;\n  };\n}\n","import * as Utils from './utils';\nimport Exception from './exception';\nimport { COMPILER_REVISION, REVISION_CHANGES, createFrame } from './base';\n\nexport function checkRevision(compilerInfo) {\n  const compilerRevision = compilerInfo && compilerInfo[0] || 1,\n        currentRevision = COMPILER_REVISION;\n\n  if (compilerRevision !== currentRevision) {\n    if (compilerRevision < currentRevision) {\n      const runtimeVersions = REVISION_CHANGES[currentRevision],\n            compilerVersions = REVISION_CHANGES[compilerRevision];\n      throw new Exception('Template was precompiled with an older version of Handlebars than the current runtime. ' +\n            'Please update your precompiler to a newer version (' + runtimeVersions + ') or downgrade your runtime to an older version (' + compilerVersions + ').');\n    } else {\n      // Use the embedded version info since the runtime doesn't know about this revision yet\n      throw new Exception('Template was precompiled with a newer version of Handlebars than the current runtime. ' +\n            'Please update your runtime to a newer version (' + compilerInfo[1] + ').');\n    }\n  }\n}\n\nexport function template(templateSpec, env) {\n  /* istanbul ignore next */\n  if (!env) {\n    throw new Exception('No environment passed to template');\n  }\n  if (!templateSpec || !templateSpec.main) {\n    throw new Exception('Unknown template object: ' + typeof templateSpec);\n  }\n\n  templateSpec.main.decorator = templateSpec.main_d;\n\n  // Note: Using env.VM references rather than local var references throughout this section to allow\n  // for external users to override these as psuedo-supported APIs.\n  env.VM.checkRevision(templateSpec.compiler);\n\n  function invokePartialWrapper(partial, context, options) {\n    if (options.hash) {\n      context = Utils.extend({}, context, options.hash);\n      if (options.ids) {\n        options.ids[0] = true;\n      }\n    }\n\n    partial = env.VM.resolvePartial.call(this, partial, context, options);\n    let result = env.VM.invokePartial.call(this, partial, context, options);\n\n    if (result == null && env.compile) {\n      options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env);\n      result = options.partials[options.name](context, options);\n    }\n    if (result != null) {\n      if (options.indent) {\n        let lines = result.split('\\n');\n        for (let i = 0, l = lines.length; i < l; i++) {\n          if (!lines[i] && i + 1 === l) {\n            break;\n          }\n\n          lines[i] = options.indent + lines[i];\n        }\n        result = lines.join('\\n');\n      }\n      return result;\n    } else {\n      throw new Exception('The partial ' + options.name + ' could not be compiled when running in runtime-only mode');\n    }\n  }\n\n  // Just add water\n  let container = {\n    strict: function(obj, name) {\n      if (!(name in obj)) {\n        throw new Exception('\"' + name + '\" not defined in ' + obj);\n      }\n      return obj[name];\n    },\n    lookup: function(depths, name) {\n      const len = depths.length;\n      for (let i = 0; i < len; i++) {\n        if (depths[i] && depths[i][name] != null) {\n          return depths[i][name];\n        }\n      }\n    },\n    lambda: function(current, context) {\n      return typeof current === 'function' ? current.call(context) : current;\n    },\n\n    escapeExpression: Utils.escapeExpression,\n    invokePartial: invokePartialWrapper,\n\n    fn: function(i) {\n      let ret = templateSpec[i];\n      ret.decorator = templateSpec[i + '_d'];\n      return ret;\n    },\n\n    programs: [],\n    program: function(i, data, declaredBlockParams, blockParams, depths) {\n      let programWrapper = this.programs[i],\n          fn = this.fn(i);\n      if (data || depths || blockParams || declaredBlockParams) {\n        programWrapper = wrapProgram(this, i, fn, data, declaredBlockParams, blockParams, depths);\n      } else if (!programWrapper) {\n        programWrapper = this.programs[i] = wrapProgram(this, i, fn);\n      }\n      return programWrapper;\n    },\n\n    data: function(value, depth) {\n      while (value && depth--) {\n        value = value._parent;\n      }\n      return value;\n    },\n    merge: function(param, common) {\n      let obj = param || common;\n\n      if (param && common && (param !== common)) {\n        obj = Utils.extend({}, common, param);\n      }\n\n      return obj;\n    },\n    // An empty object to use as replacement for null-contexts\n    nullContext: Object.seal({}),\n\n    noop: env.VM.noop,\n    compilerInfo: templateSpec.compiler\n  };\n\n  function ret(context, options = {}) {\n    let data = options.data;\n\n    ret._setup(options);\n    if (!options.partial && templateSpec.useData) {\n      data = initData(context, data);\n    }\n    let depths,\n        blockParams = templateSpec.useBlockParams ? [] : undefined;\n    if (templateSpec.useDepths) {\n      if (options.depths) {\n        depths = context != options.depths[0] ? [context].concat(options.depths) : options.depths;\n      } else {\n        depths = [context];\n      }\n    }\n\n    function main(context/*, options*/) {\n      return '' + templateSpec.main(container, context, container.helpers, container.partials, data, blockParams, depths);\n    }\n    main = executeDecorators(templateSpec.main, main, container, options.depths || [], data, blockParams);\n    return main(context, options);\n  }\n  ret.isTop = true;\n\n  ret._setup = function(options) {\n    if (!options.partial) {\n      container.helpers = container.merge(options.helpers, env.helpers);\n\n      if (templateSpec.usePartial) {\n        container.partials = container.merge(options.partials, env.partials);\n      }\n      if (templateSpec.usePartial || templateSpec.useDecorators) {\n        container.decorators = container.merge(options.decorators, env.decorators);\n      }\n    } else {\n      container.helpers = options.helpers;\n      container.partials = options.partials;\n      container.decorators = options.decorators;\n    }\n  };\n\n  ret._child = function(i, data, blockParams, depths) {\n    if (templateSpec.useBlockParams && !blockParams) {\n      throw new Exception('must pass block params');\n    }\n    if (templateSpec.useDepths && !depths) {\n      throw new Exception('must pass parent depths');\n    }\n\n    return wrapProgram(container, i, templateSpec[i], data, 0, blockParams, depths);\n  };\n  return ret;\n}\n\nexport function wrapProgram(container, i, fn, data, declaredBlockParams, blockParams, depths) {\n  function prog(context, options = {}) {\n    let currentDepths = depths;\n    if (depths && context != depths[0] && !(context === container.nullContext && depths[0] === null)) {\n      currentDepths = [context].concat(depths);\n    }\n\n    return fn(container,\n        context,\n        container.helpers, container.partials,\n        options.data || data,\n        blockParams && [options.blockParams].concat(blockParams),\n        currentDepths);\n  }\n\n  prog = executeDecorators(fn, prog, container, depths, data, blockParams);\n\n  prog.program = i;\n  prog.depth = depths ? depths.length : 0;\n  prog.blockParams = declaredBlockParams || 0;\n  return prog;\n}\n\nexport function resolvePartial(partial, context, options) {\n  if (!partial) {\n    if (options.name === '@partial-block') {\n      partial = options.data['partial-block'];\n    } else {\n      partial = options.partials[options.name];\n    }\n  } else if (!partial.call && !options.name) {\n    // This is a dynamic partial that returned a string\n    options.name = partial;\n    partial = options.partials[partial];\n  }\n  return partial;\n}\n\nexport function invokePartial(partial, context, options) {\n  // Use the current closure context to save the partial-block if this partial\n  const currentPartialBlock = options.data && options.data['partial-block'];\n  options.partial = true;\n  if (options.ids) {\n    options.data.contextPath = options.ids[0] || options.data.contextPath;\n  }\n\n  let partialBlock;\n  if (options.fn && options.fn !== noop) {\n    options.data = createFrame(options.data);\n    // Wrapper function to get access to currentPartialBlock from the closure\n    let fn = options.fn;\n    partialBlock = options.data['partial-block'] = function partialBlockWrapper(context, options = {}) {\n\n      // Restore the partial-block from the closure for the execution of the block\n      // i.e. the part inside the block of the partial call.\n      options.data = createFrame(options.data);\n      options.data['partial-block'] = currentPartialBlock;\n      return fn(context, options);\n    };\n    if (fn.partials) {\n      options.partials = Utils.extend({}, options.partials, fn.partials);\n    }\n  }\n\n  if (partial === undefined && partialBlock) {\n    partial = partialBlock;\n  }\n\n  if (partial === undefined) {\n    throw new Exception('The partial ' + options.name + ' could not be found');\n  } else if (partial instanceof Function) {\n    return partial(context, options);\n  }\n}\n\nexport function noop() { return ''; }\n\nfunction initData(context, data) {\n  if (!data || !('root' in data)) {\n    data = data ? createFrame(data) : {};\n    data.root = context;\n  }\n  return data;\n}\n\nfunction executeDecorators(fn, prog, container, depths, data, blockParams) {\n  if (fn.decorator) {\n    let props = {};\n    prog = fn.decorator(prog, props, container, depths && depths[0], data, blockParams, depths);\n    Utils.extend(prog, props);\n  }\n  return prog;\n}\n","// Build out our basic SafeString type\nfunction SafeString(string) {\n  this.string = string;\n}\n\nSafeString.prototype.toString = SafeString.prototype.toHTML = function() {\n  return '' + this.string;\n};\n\nexport default SafeString;\n","const escape = {\n  '&': '&amp;',\n  '<': '&lt;',\n  '>': '&gt;',\n  '\"': '&quot;',\n  \"'\": '&#x27;',\n  '`': '&#x60;',\n  '=': '&#x3D;'\n};\n\nconst badChars = /[&<>\"'`=]/g,\n      possible = /[&<>\"'`=]/;\n\nfunction escapeChar(chr) {\n  return escape[chr];\n}\n\nexport function extend(obj/* , ...source */) {\n  for (let i = 1; i < arguments.length; i++) {\n    for (let key in arguments[i]) {\n      if (Object.prototype.hasOwnProperty.call(arguments[i], key)) {\n        obj[key] = arguments[i][key];\n      }\n    }\n  }\n\n  return obj;\n}\n\nexport let toString = Object.prototype.toString;\n\n// Sourced from lodash\n// https://github.com/bestiejs/lodash/blob/master/LICENSE.txt\n/* eslint-disable func-style */\nlet isFunction = function(value) {\n  return typeof value === 'function';\n};\n// fallback for older versions of Chrome and Safari\n/* istanbul ignore next */\nif (isFunction(/x/)) {\n  isFunction = function(value) {\n    return typeof value === 'function' && toString.call(value) === '[object Function]';\n  };\n}\nexport {isFunction};\n/* eslint-enable func-style */\n\n/* istanbul ignore next */\nexport const isArray = Array.isArray || function(value) {\n  return (value && typeof value === 'object') ? toString.call(value) === '[object Array]' : false;\n};\n\n// Older IE versions do not directly support indexOf so we must implement our own, sadly.\nexport function indexOf(array, value) {\n  for (let i = 0, len = array.length; i < len; i++) {\n    if (array[i] === value) {\n      return i;\n    }\n  }\n  return -1;\n}\n\n\nexport function escapeExpression(string) {\n  if (typeof string !== 'string') {\n    // don't escape SafeStrings, since they're already safe\n    if (string && string.toHTML) {\n      return string.toHTML();\n    } else if (string == null) {\n      return '';\n    } else if (!string) {\n      return string + '';\n    }\n\n    // Force a string conversion as this will be done by the append regardless and\n    // the regex test will do this transparently behind the scenes, causing issues if\n    // an object's to string has escaped characters in it.\n    string = '' + string;\n  }\n\n  if (!possible.test(string)) { return string; }\n  return string.replace(badChars, escapeChar);\n}\n\nexport function isEmpty(value) {\n  if (!value && value !== 0) {\n    return true;\n  } else if (isArray(value) && value.length === 0) {\n    return true;\n  } else {\n    return false;\n  }\n}\n\nexport function createFrame(object) {\n  let frame = extend({}, object);\n  frame._parent = object;\n  return frame;\n}\n\nexport function blockParams(params, ids) {\n  params.path = ids;\n  return params;\n}\n\nexport function appendContextPath(contextPath, id) {\n  return (contextPath ? contextPath + '.' : '') + id;\n}\n","// Create a simple path alias to allow browserify to resolve\n// the runtime on a supported path.\nmodule.exports = require('./dist/cjs/handlebars.runtime')['default'];\n","module.exports = require(\"handlebars/runtime\")[\"default\"];\n","//! moment.js\n//! version : 2.29.1\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n    typeof define === 'function' && define.amd ? define(factory) :\n    global.moment = factory()\n}(this, (function () { 'use strict';\n\n    var hookCallback;\n\n    function hooks() {\n        return hookCallback.apply(null, arguments);\n    }\n\n    // This is done to register the method called with moment()\n    // without creating circular dependencies.\n    function setHookCallback(callback) {\n        hookCallback = callback;\n    }\n\n    function isArray(input) {\n        return (\n            input instanceof Array ||\n            Object.prototype.toString.call(input) === '[object Array]'\n        );\n    }\n\n    function isObject(input) {\n        // IE8 will treat undefined and null as object if it wasn't for\n        // input != null\n        return (\n            input != null &&\n            Object.prototype.toString.call(input) === '[object Object]'\n        );\n    }\n\n    function hasOwnProp(a, b) {\n        return Object.prototype.hasOwnProperty.call(a, b);\n    }\n\n    function isObjectEmpty(obj) {\n        if (Object.getOwnPropertyNames) {\n            return Object.getOwnPropertyNames(obj).length === 0;\n        } else {\n            var k;\n            for (k in obj) {\n                if (hasOwnProp(obj, k)) {\n                    return false;\n                }\n            }\n            return true;\n        }\n    }\n\n    function isUndefined(input) {\n        return input === void 0;\n    }\n\n    function isNumber(input) {\n        return (\n            typeof input === 'number' ||\n            Object.prototype.toString.call(input) === '[object Number]'\n        );\n    }\n\n    function isDate(input) {\n        return (\n            input instanceof Date ||\n            Object.prototype.toString.call(input) === '[object Date]'\n        );\n    }\n\n    function map(arr, fn) {\n        var res = [],\n            i;\n        for (i = 0; i < arr.length; ++i) {\n            res.push(fn(arr[i], i));\n        }\n        return res;\n    }\n\n    function extend(a, b) {\n        for (var i in b) {\n            if (hasOwnProp(b, i)) {\n                a[i] = b[i];\n            }\n        }\n\n        if (hasOwnProp(b, 'toString')) {\n            a.toString = b.toString;\n        }\n\n        if (hasOwnProp(b, 'valueOf')) {\n            a.valueOf = b.valueOf;\n        }\n\n        return a;\n    }\n\n    function createUTC(input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, true).utc();\n    }\n\n    function defaultParsingFlags() {\n        // We need to deep clone this object.\n        return {\n            empty: false,\n            unusedTokens: [],\n            unusedInput: [],\n            overflow: -2,\n            charsLeftOver: 0,\n            nullInput: false,\n            invalidEra: null,\n            invalidMonth: null,\n            invalidFormat: false,\n            userInvalidated: false,\n            iso: false,\n            parsedDateParts: [],\n            era: null,\n            meridiem: null,\n            rfc2822: false,\n            weekdayMismatch: false,\n        };\n    }\n\n    function getParsingFlags(m) {\n        if (m._pf == null) {\n            m._pf = defaultParsingFlags();\n        }\n        return m._pf;\n    }\n\n    var some;\n    if (Array.prototype.some) {\n        some = Array.prototype.some;\n    } else {\n        some = function (fun) {\n            var t = Object(this),\n                len = t.length >>> 0,\n                i;\n\n            for (i = 0; i < len; i++) {\n                if (i in t && fun.call(this, t[i], i, t)) {\n                    return true;\n                }\n            }\n\n            return false;\n        };\n    }\n\n    function isValid(m) {\n        if (m._isValid == null) {\n            var flags = getParsingFlags(m),\n                parsedParts = some.call(flags.parsedDateParts, function (i) {\n                    return i != null;\n                }),\n                isNowValid =\n                    !isNaN(m._d.getTime()) &&\n                    flags.overflow < 0 &&\n                    !flags.empty &&\n                    !flags.invalidEra &&\n                    !flags.invalidMonth &&\n                    !flags.invalidWeekday &&\n                    !flags.weekdayMismatch &&\n                    !flags.nullInput &&\n                    !flags.invalidFormat &&\n                    !flags.userInvalidated &&\n                    (!flags.meridiem || (flags.meridiem && parsedParts));\n\n            if (m._strict) {\n                isNowValid =\n                    isNowValid &&\n                    flags.charsLeftOver === 0 &&\n                    flags.unusedTokens.length === 0 &&\n                    flags.bigHour === undefined;\n            }\n\n            if (Object.isFrozen == null || !Object.isFrozen(m)) {\n                m._isValid = isNowValid;\n            } else {\n                return isNowValid;\n            }\n        }\n        return m._isValid;\n    }\n\n    function createInvalid(flags) {\n        var m = createUTC(NaN);\n        if (flags != null) {\n            extend(getParsingFlags(m), flags);\n        } else {\n            getParsingFlags(m).userInvalidated = true;\n        }\n\n        return m;\n    }\n\n    // Plugins that add properties should also add the key here (null value),\n    // so we can properly clone ourselves.\n    var momentProperties = (hooks.momentProperties = []),\n        updateInProgress = false;\n\n    function copyConfig(to, from) {\n        var i, prop, val;\n\n        if (!isUndefined(from._isAMomentObject)) {\n            to._isAMomentObject = from._isAMomentObject;\n        }\n        if (!isUndefined(from._i)) {\n            to._i = from._i;\n        }\n        if (!isUndefined(from._f)) {\n            to._f = from._f;\n        }\n        if (!isUndefined(from._l)) {\n            to._l = from._l;\n        }\n        if (!isUndefined(from._strict)) {\n            to._strict = from._strict;\n        }\n        if (!isUndefined(from._tzm)) {\n            to._tzm = from._tzm;\n        }\n        if (!isUndefined(from._isUTC)) {\n            to._isUTC = from._isUTC;\n        }\n        if (!isUndefined(from._offset)) {\n            to._offset = from._offset;\n        }\n        if (!isUndefined(from._pf)) {\n            to._pf = getParsingFlags(from);\n        }\n        if (!isUndefined(from._locale)) {\n            to._locale = from._locale;\n        }\n\n        if (momentProperties.length > 0) {\n            for (i = 0; i < momentProperties.length; i++) {\n                prop = momentProperties[i];\n                val = from[prop];\n                if (!isUndefined(val)) {\n                    to[prop] = val;\n                }\n            }\n        }\n\n        return to;\n    }\n\n    // Moment prototype object\n    function Moment(config) {\n        copyConfig(this, config);\n        this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n        if (!this.isValid()) {\n            this._d = new Date(NaN);\n        }\n        // Prevent infinite loop in case updateOffset creates new moment\n        // objects.\n        if (updateInProgress === false) {\n            updateInProgress = true;\n            hooks.updateOffset(this);\n            updateInProgress = false;\n        }\n    }\n\n    function isMoment(obj) {\n        return (\n            obj instanceof Moment || (obj != null && obj._isAMomentObject != null)\n        );\n    }\n\n    function warn(msg) {\n        if (\n            hooks.suppressDeprecationWarnings === false &&\n            typeof console !== 'undefined' &&\n            console.warn\n        ) {\n            console.warn('Deprecation warning: ' + msg);\n        }\n    }\n\n    function deprecate(msg, fn) {\n        var firstTime = true;\n\n        return extend(function () {\n            if (hooks.deprecationHandler != null) {\n                hooks.deprecationHandler(null, msg);\n            }\n            if (firstTime) {\n                var args = [],\n                    arg,\n                    i,\n                    key;\n                for (i = 0; i < arguments.length; i++) {\n                    arg = '';\n                    if (typeof arguments[i] === 'object') {\n                        arg += '\\n[' + i + '] ';\n                        for (key in arguments[0]) {\n                            if (hasOwnProp(arguments[0], key)) {\n                                arg += key + ': ' + arguments[0][key] + ', ';\n                            }\n                        }\n                        arg = arg.slice(0, -2); // Remove trailing comma and space\n                    } else {\n                        arg = arguments[i];\n                    }\n                    args.push(arg);\n                }\n                warn(\n                    msg +\n                        '\\nArguments: ' +\n                        Array.prototype.slice.call(args).join('') +\n                        '\\n' +\n                        new Error().stack\n                );\n                firstTime = false;\n            }\n            return fn.apply(this, arguments);\n        }, fn);\n    }\n\n    var deprecations = {};\n\n    function deprecateSimple(name, msg) {\n        if (hooks.deprecationHandler != null) {\n            hooks.deprecationHandler(name, msg);\n        }\n        if (!deprecations[name]) {\n            warn(msg);\n            deprecations[name] = true;\n        }\n    }\n\n    hooks.suppressDeprecationWarnings = false;\n    hooks.deprecationHandler = null;\n\n    function isFunction(input) {\n        return (\n            (typeof Function !== 'undefined' && input instanceof Function) ||\n            Object.prototype.toString.call(input) === '[object Function]'\n        );\n    }\n\n    function set(config) {\n        var prop, i;\n        for (i in config) {\n            if (hasOwnProp(config, i)) {\n                prop = config[i];\n                if (isFunction(prop)) {\n                    this[i] = prop;\n                } else {\n                    this['_' + i] = prop;\n                }\n            }\n        }\n        this._config = config;\n        // Lenient ordinal parsing accepts just a number in addition to\n        // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n        // TODO: Remove \"ordinalParse\" fallback in next major release.\n        this._dayOfMonthOrdinalParseLenient = new RegExp(\n            (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n                '|' +\n                /\\d{1,2}/.source\n        );\n    }\n\n    function mergeConfigs(parentConfig, childConfig) {\n        var res = extend({}, parentConfig),\n            prop;\n        for (prop in childConfig) {\n            if (hasOwnProp(childConfig, prop)) {\n                if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n                    res[prop] = {};\n                    extend(res[prop], parentConfig[prop]);\n                    extend(res[prop], childConfig[prop]);\n                } else if (childConfig[prop] != null) {\n                    res[prop] = childConfig[prop];\n                } else {\n                    delete res[prop];\n                }\n            }\n        }\n        for (prop in parentConfig) {\n            if (\n                hasOwnProp(parentConfig, prop) &&\n                !hasOwnProp(childConfig, prop) &&\n                isObject(parentConfig[prop])\n            ) {\n                // make sure changes to properties don't modify parent config\n                res[prop] = extend({}, res[prop]);\n            }\n        }\n        return res;\n    }\n\n    function Locale(config) {\n        if (config != null) {\n            this.set(config);\n        }\n    }\n\n    var keys;\n\n    if (Object.keys) {\n        keys = Object.keys;\n    } else {\n        keys = function (obj) {\n            var i,\n                res = [];\n            for (i in obj) {\n                if (hasOwnProp(obj, i)) {\n                    res.push(i);\n                }\n            }\n            return res;\n        };\n    }\n\n    var defaultCalendar = {\n        sameDay: '[Today at] LT',\n        nextDay: '[Tomorrow at] LT',\n        nextWeek: 'dddd [at] LT',\n        lastDay: '[Yesterday at] LT',\n        lastWeek: '[Last] dddd [at] LT',\n        sameElse: 'L',\n    };\n\n    function calendar(key, mom, now) {\n        var output = this._calendar[key] || this._calendar['sameElse'];\n        return isFunction(output) ? output.call(mom, now) : output;\n    }\n\n    function zeroFill(number, targetLength, forceSign) {\n        var absNumber = '' + Math.abs(number),\n            zerosToFill = targetLength - absNumber.length,\n            sign = number >= 0;\n        return (\n            (sign ? (forceSign ? '+' : '') : '-') +\n            Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +\n            absNumber\n        );\n    }\n\n    var formattingTokens = /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,\n        localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n        formatFunctions = {},\n        formatTokenFunctions = {};\n\n    // token:    'M'\n    // padded:   ['MM', 2]\n    // ordinal:  'Mo'\n    // callback: function () { this.month() + 1 }\n    function addFormatToken(token, padded, ordinal, callback) {\n        var func = callback;\n        if (typeof callback === 'string') {\n            func = function () {\n                return this[callback]();\n            };\n        }\n        if (token) {\n            formatTokenFunctions[token] = func;\n        }\n        if (padded) {\n            formatTokenFunctions[padded[0]] = function () {\n                return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n            };\n        }\n        if (ordinal) {\n            formatTokenFunctions[ordinal] = function () {\n                return this.localeData().ordinal(\n                    func.apply(this, arguments),\n                    token\n                );\n            };\n        }\n    }\n\n    function removeFormattingTokens(input) {\n        if (input.match(/\\[[\\s\\S]/)) {\n            return input.replace(/^\\[|\\]$/g, '');\n        }\n        return input.replace(/\\\\/g, '');\n    }\n\n    function makeFormatFunction(format) {\n        var array = format.match(formattingTokens),\n            i,\n            length;\n\n        for (i = 0, length = array.length; i < length; i++) {\n            if (formatTokenFunctions[array[i]]) {\n                array[i] = formatTokenFunctions[array[i]];\n            } else {\n                array[i] = removeFormattingTokens(array[i]);\n            }\n        }\n\n        return function (mom) {\n            var output = '',\n                i;\n            for (i = 0; i < length; i++) {\n                output += isFunction(array[i])\n                    ? array[i].call(mom, format)\n                    : array[i];\n            }\n            return output;\n        };\n    }\n\n    // format date using native date object\n    function formatMoment(m, format) {\n        if (!m.isValid()) {\n            return m.localeData().invalidDate();\n        }\n\n        format = expandFormat(format, m.localeData());\n        formatFunctions[format] =\n            formatFunctions[format] || makeFormatFunction(format);\n\n        return formatFunctions[format](m);\n    }\n\n    function expandFormat(format, locale) {\n        var i = 5;\n\n        function replaceLongDateFormatTokens(input) {\n            return locale.longDateFormat(input) || input;\n        }\n\n        localFormattingTokens.lastIndex = 0;\n        while (i >= 0 && localFormattingTokens.test(format)) {\n            format = format.replace(\n                localFormattingTokens,\n                replaceLongDateFormatTokens\n            );\n            localFormattingTokens.lastIndex = 0;\n            i -= 1;\n        }\n\n        return format;\n    }\n\n    var defaultLongDateFormat = {\n        LTS: 'h:mm:ss A',\n        LT: 'h:mm A',\n        L: 'MM/DD/YYYY',\n        LL: 'MMMM D, YYYY',\n        LLL: 'MMMM D, YYYY h:mm A',\n        LLLL: 'dddd, MMMM D, YYYY h:mm A',\n    };\n\n    function longDateFormat(key) {\n        var format = this._longDateFormat[key],\n            formatUpper = this._longDateFormat[key.toUpperCase()];\n\n        if (format || !formatUpper) {\n            return format;\n        }\n\n        this._longDateFormat[key] = formatUpper\n            .match(formattingTokens)\n            .map(function (tok) {\n                if (\n                    tok === 'MMMM' ||\n                    tok === 'MM' ||\n                    tok === 'DD' ||\n                    tok === 'dddd'\n                ) {\n                    return tok.slice(1);\n                }\n                return tok;\n            })\n            .join('');\n\n        return this._longDateFormat[key];\n    }\n\n    var defaultInvalidDate = 'Invalid date';\n\n    function invalidDate() {\n        return this._invalidDate;\n    }\n\n    var defaultOrdinal = '%d',\n        defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n    function ordinal(number) {\n        return this._ordinal.replace('%d', number);\n    }\n\n    var defaultRelativeTime = {\n        future: 'in %s',\n        past: '%s ago',\n        s: 'a few seconds',\n        ss: '%d seconds',\n        m: 'a minute',\n        mm: '%d minutes',\n        h: 'an hour',\n        hh: '%d hours',\n        d: 'a day',\n        dd: '%d days',\n        w: 'a week',\n        ww: '%d weeks',\n        M: 'a month',\n        MM: '%d months',\n        y: 'a year',\n        yy: '%d years',\n    };\n\n    function relativeTime(number, withoutSuffix, string, isFuture) {\n        var output = this._relativeTime[string];\n        return isFunction(output)\n            ? output(number, withoutSuffix, string, isFuture)\n            : output.replace(/%d/i, number);\n    }\n\n    function pastFuture(diff, output) {\n        var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n        return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n    }\n\n    var aliases = {};\n\n    function addUnitAlias(unit, shorthand) {\n        var lowerCase = unit.toLowerCase();\n        aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n    }\n\n    function normalizeUnits(units) {\n        return typeof units === 'string'\n            ? aliases[units] || aliases[units.toLowerCase()]\n            : undefined;\n    }\n\n    function normalizeObjectUnits(inputObject) {\n        var normalizedInput = {},\n            normalizedProp,\n            prop;\n\n        for (prop in inputObject) {\n            if (hasOwnProp(inputObject, prop)) {\n                normalizedProp = normalizeUnits(prop);\n                if (normalizedProp) {\n                    normalizedInput[normalizedProp] = inputObject[prop];\n                }\n            }\n        }\n\n        return normalizedInput;\n    }\n\n    var priorities = {};\n\n    function addUnitPriority(unit, priority) {\n        priorities[unit] = priority;\n    }\n\n    function getPrioritizedUnits(unitsObj) {\n        var units = [],\n            u;\n        for (u in unitsObj) {\n            if (hasOwnProp(unitsObj, u)) {\n                units.push({ unit: u, priority: priorities[u] });\n            }\n        }\n        units.sort(function (a, b) {\n            return a.priority - b.priority;\n        });\n        return units;\n    }\n\n    function isLeapYear(year) {\n        return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n    }\n\n    function absFloor(number) {\n        if (number < 0) {\n            // -0 -> 0\n            return Math.ceil(number) || 0;\n        } else {\n            return Math.floor(number);\n        }\n    }\n\n    function toInt(argumentForCoercion) {\n        var coercedNumber = +argumentForCoercion,\n            value = 0;\n\n        if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n            value = absFloor(coercedNumber);\n        }\n\n        return value;\n    }\n\n    function makeGetSet(unit, keepTime) {\n        return function (value) {\n            if (value != null) {\n                set$1(this, unit, value);\n                hooks.updateOffset(this, keepTime);\n                return this;\n            } else {\n                return get(this, unit);\n            }\n        };\n    }\n\n    function get(mom, unit) {\n        return mom.isValid()\n            ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]()\n            : NaN;\n    }\n\n    function set$1(mom, unit, value) {\n        if (mom.isValid() && !isNaN(value)) {\n            if (\n                unit === 'FullYear' &&\n                isLeapYear(mom.year()) &&\n                mom.month() === 1 &&\n                mom.date() === 29\n            ) {\n                value = toInt(value);\n                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](\n                    value,\n                    mom.month(),\n                    daysInMonth(value, mom.month())\n                );\n            } else {\n                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function stringGet(units) {\n        units = normalizeUnits(units);\n        if (isFunction(this[units])) {\n            return this[units]();\n        }\n        return this;\n    }\n\n    function stringSet(units, value) {\n        if (typeof units === 'object') {\n            units = normalizeObjectUnits(units);\n            var prioritized = getPrioritizedUnits(units),\n                i;\n            for (i = 0; i < prioritized.length; i++) {\n                this[prioritized[i].unit](units[prioritized[i].unit]);\n            }\n        } else {\n            units = normalizeUnits(units);\n            if (isFunction(this[units])) {\n                return this[units](value);\n            }\n        }\n        return this;\n    }\n\n    var match1 = /\\d/, //       0 - 9\n        match2 = /\\d\\d/, //      00 - 99\n        match3 = /\\d{3}/, //     000 - 999\n        match4 = /\\d{4}/, //    0000 - 9999\n        match6 = /[+-]?\\d{6}/, // -999999 - 999999\n        match1to2 = /\\d\\d?/, //       0 - 99\n        match3to4 = /\\d\\d\\d\\d?/, //     999 - 9999\n        match5to6 = /\\d\\d\\d\\d\\d\\d?/, //   99999 - 999999\n        match1to3 = /\\d{1,3}/, //       0 - 999\n        match1to4 = /\\d{1,4}/, //       0 - 9999\n        match1to6 = /[+-]?\\d{1,6}/, // -999999 - 999999\n        matchUnsigned = /\\d+/, //       0 - inf\n        matchSigned = /[+-]?\\d+/, //    -inf - inf\n        matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, // +00:00 -00:00 +0000 -0000 or Z\n        matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n        matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, // 123456789 123456789.123\n        // any word (or two) characters or numbers including two/three word month in arabic.\n        // includes scottish gaelic two word and hyphenated months\n        matchWord = /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,\n        regexes;\n\n    regexes = {};\n\n    function addRegexToken(token, regex, strictRegex) {\n        regexes[token] = isFunction(regex)\n            ? regex\n            : function (isStrict, localeData) {\n                  return isStrict && strictRegex ? strictRegex : regex;\n              };\n    }\n\n    function getParseRegexForToken(token, config) {\n        if (!hasOwnProp(regexes, token)) {\n            return new RegExp(unescapeFormat(token));\n        }\n\n        return regexes[token](config._strict, config._locale);\n    }\n\n    // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n    function unescapeFormat(s) {\n        return regexEscape(\n            s\n                .replace('\\\\', '')\n                .replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g, function (\n                    matched,\n                    p1,\n                    p2,\n                    p3,\n                    p4\n                ) {\n                    return p1 || p2 || p3 || p4;\n                })\n        );\n    }\n\n    function regexEscape(s) {\n        return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n    }\n\n    var tokens = {};\n\n    function addParseToken(token, callback) {\n        var i,\n            func = callback;\n        if (typeof token === 'string') {\n            token = [token];\n        }\n        if (isNumber(callback)) {\n            func = function (input, array) {\n                array[callback] = toInt(input);\n            };\n        }\n        for (i = 0; i < token.length; i++) {\n            tokens[token[i]] = func;\n        }\n    }\n\n    function addWeekParseToken(token, callback) {\n        addParseToken(token, function (input, array, config, token) {\n            config._w = config._w || {};\n            callback(input, config._w, config, token);\n        });\n    }\n\n    function addTimeToArrayFromToken(token, input, config) {\n        if (input != null && hasOwnProp(tokens, token)) {\n            tokens[token](input, config._a, config, token);\n        }\n    }\n\n    var YEAR = 0,\n        MONTH = 1,\n        DATE = 2,\n        HOUR = 3,\n        MINUTE = 4,\n        SECOND = 5,\n        MILLISECOND = 6,\n        WEEK = 7,\n        WEEKDAY = 8;\n\n    function mod(n, x) {\n        return ((n % x) + x) % x;\n    }\n\n    var indexOf;\n\n    if (Array.prototype.indexOf) {\n        indexOf = Array.prototype.indexOf;\n    } else {\n        indexOf = function (o) {\n            // I know\n            var i;\n            for (i = 0; i < this.length; ++i) {\n                if (this[i] === o) {\n                    return i;\n                }\n            }\n            return -1;\n        };\n    }\n\n    function daysInMonth(year, month) {\n        if (isNaN(year) || isNaN(month)) {\n            return NaN;\n        }\n        var modMonth = mod(month, 12);\n        year += (month - modMonth) / 12;\n        return modMonth === 1\n            ? isLeapYear(year)\n                ? 29\n                : 28\n            : 31 - ((modMonth % 7) % 2);\n    }\n\n    // FORMATTING\n\n    addFormatToken('M', ['MM', 2], 'Mo', function () {\n        return this.month() + 1;\n    });\n\n    addFormatToken('MMM', 0, 0, function (format) {\n        return this.localeData().monthsShort(this, format);\n    });\n\n    addFormatToken('MMMM', 0, 0, function (format) {\n        return this.localeData().months(this, format);\n    });\n\n    // ALIASES\n\n    addUnitAlias('month', 'M');\n\n    // PRIORITY\n\n    addUnitPriority('month', 8);\n\n    // PARSING\n\n    addRegexToken('M', match1to2);\n    addRegexToken('MM', match1to2, match2);\n    addRegexToken('MMM', function (isStrict, locale) {\n        return locale.monthsShortRegex(isStrict);\n    });\n    addRegexToken('MMMM', function (isStrict, locale) {\n        return locale.monthsRegex(isStrict);\n    });\n\n    addParseToken(['M', 'MM'], function (input, array) {\n        array[MONTH] = toInt(input) - 1;\n    });\n\n    addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n        var month = config._locale.monthsParse(input, token, config._strict);\n        // if we didn't find a month name, mark the date as invalid.\n        if (month != null) {\n            array[MONTH] = month;\n        } else {\n            getParsingFlags(config).invalidMonth = input;\n        }\n    });\n\n    // LOCALES\n\n    var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split(\n            '_'\n        ),\n        MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n        defaultMonthsShortRegex = matchWord,\n        defaultMonthsRegex = matchWord;\n\n    function localeMonths(m, format) {\n        if (!m) {\n            return isArray(this._months)\n                ? this._months\n                : this._months['standalone'];\n        }\n        return isArray(this._months)\n            ? this._months[m.month()]\n            : this._months[\n                  (this._months.isFormat || MONTHS_IN_FORMAT).test(format)\n                      ? 'format'\n                      : 'standalone'\n              ][m.month()];\n    }\n\n    function localeMonthsShort(m, format) {\n        if (!m) {\n            return isArray(this._monthsShort)\n                ? this._monthsShort\n                : this._monthsShort['standalone'];\n        }\n        return isArray(this._monthsShort)\n            ? this._monthsShort[m.month()]\n            : this._monthsShort[\n                  MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'\n              ][m.month()];\n    }\n\n    function handleStrictParse(monthName, format, strict) {\n        var i,\n            ii,\n            mom,\n            llc = monthName.toLocaleLowerCase();\n        if (!this._monthsParse) {\n            // this is not used\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n            for (i = 0; i < 12; ++i) {\n                mom = createUTC([2000, i]);\n                this._shortMonthsParse[i] = this.monthsShort(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n            }\n        }\n\n        if (strict) {\n            if (format === 'MMM') {\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._longMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        } else {\n            if (format === 'MMM') {\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._longMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._longMonthsParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        }\n    }\n\n    function localeMonthsParse(monthName, format, strict) {\n        var i, mom, regex;\n\n        if (this._monthsParseExact) {\n            return handleStrictParse.call(this, monthName, format, strict);\n        }\n\n        if (!this._monthsParse) {\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n        }\n\n        // TODO: add sorting\n        // Sorting makes sure if one month (or abbr) is a prefix of another\n        // see sorting in computeMonthsParse\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, i]);\n            if (strict && !this._longMonthsParse[i]) {\n                this._longMonthsParse[i] = new RegExp(\n                    '^' + this.months(mom, '').replace('.', '') + '$',\n                    'i'\n                );\n                this._shortMonthsParse[i] = new RegExp(\n                    '^' + this.monthsShort(mom, '').replace('.', '') + '$',\n                    'i'\n                );\n            }\n            if (!strict && !this._monthsParse[i]) {\n                regex =\n                    '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n                this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (\n                strict &&\n                format === 'MMMM' &&\n                this._longMonthsParse[i].test(monthName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'MMM' &&\n                this._shortMonthsParse[i].test(monthName)\n            ) {\n                return i;\n            } else if (!strict && this._monthsParse[i].test(monthName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function setMonth(mom, value) {\n        var dayOfMonth;\n\n        if (!mom.isValid()) {\n            // No op\n            return mom;\n        }\n\n        if (typeof value === 'string') {\n            if (/^\\d+$/.test(value)) {\n                value = toInt(value);\n            } else {\n                value = mom.localeData().monthsParse(value);\n                // TODO: Another silent failure?\n                if (!isNumber(value)) {\n                    return mom;\n                }\n            }\n        }\n\n        dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n        mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n        return mom;\n    }\n\n    function getSetMonth(value) {\n        if (value != null) {\n            setMonth(this, value);\n            hooks.updateOffset(this, true);\n            return this;\n        } else {\n            return get(this, 'Month');\n        }\n    }\n\n    function getDaysInMonth() {\n        return daysInMonth(this.year(), this.month());\n    }\n\n    function monthsShortRegex(isStrict) {\n        if (this._monthsParseExact) {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                computeMonthsParse.call(this);\n            }\n            if (isStrict) {\n                return this._monthsShortStrictRegex;\n            } else {\n                return this._monthsShortRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_monthsShortRegex')) {\n                this._monthsShortRegex = defaultMonthsShortRegex;\n            }\n            return this._monthsShortStrictRegex && isStrict\n                ? this._monthsShortStrictRegex\n                : this._monthsShortRegex;\n        }\n    }\n\n    function monthsRegex(isStrict) {\n        if (this._monthsParseExact) {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                computeMonthsParse.call(this);\n            }\n            if (isStrict) {\n                return this._monthsStrictRegex;\n            } else {\n                return this._monthsRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                this._monthsRegex = defaultMonthsRegex;\n            }\n            return this._monthsStrictRegex && isStrict\n                ? this._monthsStrictRegex\n                : this._monthsRegex;\n        }\n    }\n\n    function computeMonthsParse() {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var shortPieces = [],\n            longPieces = [],\n            mixedPieces = [],\n            i,\n            mom;\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, i]);\n            shortPieces.push(this.monthsShort(mom, ''));\n            longPieces.push(this.months(mom, ''));\n            mixedPieces.push(this.months(mom, ''));\n            mixedPieces.push(this.monthsShort(mom, ''));\n        }\n        // Sorting makes sure if one month (or abbr) is a prefix of another it\n        // will match the longer piece.\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n        for (i = 0; i < 12; i++) {\n            shortPieces[i] = regexEscape(shortPieces[i]);\n            longPieces[i] = regexEscape(longPieces[i]);\n        }\n        for (i = 0; i < 24; i++) {\n            mixedPieces[i] = regexEscape(mixedPieces[i]);\n        }\n\n        this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._monthsShortRegex = this._monthsRegex;\n        this._monthsStrictRegex = new RegExp(\n            '^(' + longPieces.join('|') + ')',\n            'i'\n        );\n        this._monthsShortStrictRegex = new RegExp(\n            '^(' + shortPieces.join('|') + ')',\n            'i'\n        );\n    }\n\n    // FORMATTING\n\n    addFormatToken('Y', 0, 0, function () {\n        var y = this.year();\n        return y <= 9999 ? zeroFill(y, 4) : '+' + y;\n    });\n\n    addFormatToken(0, ['YY', 2], 0, function () {\n        return this.year() % 100;\n    });\n\n    addFormatToken(0, ['YYYY', 4], 0, 'year');\n    addFormatToken(0, ['YYYYY', 5], 0, 'year');\n    addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n    // ALIASES\n\n    addUnitAlias('year', 'y');\n\n    // PRIORITIES\n\n    addUnitPriority('year', 1);\n\n    // PARSING\n\n    addRegexToken('Y', matchSigned);\n    addRegexToken('YY', match1to2, match2);\n    addRegexToken('YYYY', match1to4, match4);\n    addRegexToken('YYYYY', match1to6, match6);\n    addRegexToken('YYYYYY', match1to6, match6);\n\n    addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n    addParseToken('YYYY', function (input, array) {\n        array[YEAR] =\n            input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n    });\n    addParseToken('YY', function (input, array) {\n        array[YEAR] = hooks.parseTwoDigitYear(input);\n    });\n    addParseToken('Y', function (input, array) {\n        array[YEAR] = parseInt(input, 10);\n    });\n\n    // HELPERS\n\n    function daysInYear(year) {\n        return isLeapYear(year) ? 366 : 365;\n    }\n\n    // HOOKS\n\n    hooks.parseTwoDigitYear = function (input) {\n        return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n    };\n\n    // MOMENTS\n\n    var getSetYear = makeGetSet('FullYear', true);\n\n    function getIsLeapYear() {\n        return isLeapYear(this.year());\n    }\n\n    function createDate(y, m, d, h, M, s, ms) {\n        // can't just apply() to create a date:\n        // https://stackoverflow.com/q/181348\n        var date;\n        // the date constructor remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            date = new Date(y + 400, m, d, h, M, s, ms);\n            if (isFinite(date.getFullYear())) {\n                date.setFullYear(y);\n            }\n        } else {\n            date = new Date(y, m, d, h, M, s, ms);\n        }\n\n        return date;\n    }\n\n    function createUTCDate(y) {\n        var date, args;\n        // the Date.UTC function remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            args = Array.prototype.slice.call(arguments);\n            // preserve leap years using a full 400 year cycle, then reset\n            args[0] = y + 400;\n            date = new Date(Date.UTC.apply(null, args));\n            if (isFinite(date.getUTCFullYear())) {\n                date.setUTCFullYear(y);\n            }\n        } else {\n            date = new Date(Date.UTC.apply(null, arguments));\n        }\n\n        return date;\n    }\n\n    // start-of-first-week - start-of-year\n    function firstWeekOffset(year, dow, doy) {\n        var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n            fwd = 7 + dow - doy,\n            // first-week day local weekday -- which local weekday is fwd\n            fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n        return -fwdlw + fwd - 1;\n    }\n\n    // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n    function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n        var localWeekday = (7 + weekday - dow) % 7,\n            weekOffset = firstWeekOffset(year, dow, doy),\n            dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n            resYear,\n            resDayOfYear;\n\n        if (dayOfYear <= 0) {\n            resYear = year - 1;\n            resDayOfYear = daysInYear(resYear) + dayOfYear;\n        } else if (dayOfYear > daysInYear(year)) {\n            resYear = year + 1;\n            resDayOfYear = dayOfYear - daysInYear(year);\n        } else {\n            resYear = year;\n            resDayOfYear = dayOfYear;\n        }\n\n        return {\n            year: resYear,\n            dayOfYear: resDayOfYear,\n        };\n    }\n\n    function weekOfYear(mom, dow, doy) {\n        var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n            week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n            resWeek,\n            resYear;\n\n        if (week < 1) {\n            resYear = mom.year() - 1;\n            resWeek = week + weeksInYear(resYear, dow, doy);\n        } else if (week > weeksInYear(mom.year(), dow, doy)) {\n            resWeek = week - weeksInYear(mom.year(), dow, doy);\n            resYear = mom.year() + 1;\n        } else {\n            resYear = mom.year();\n            resWeek = week;\n        }\n\n        return {\n            week: resWeek,\n            year: resYear,\n        };\n    }\n\n    function weeksInYear(year, dow, doy) {\n        var weekOffset = firstWeekOffset(year, dow, doy),\n            weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n        return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n    }\n\n    // FORMATTING\n\n    addFormatToken('w', ['ww', 2], 'wo', 'week');\n    addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n    // ALIASES\n\n    addUnitAlias('week', 'w');\n    addUnitAlias('isoWeek', 'W');\n\n    // PRIORITIES\n\n    addUnitPriority('week', 5);\n    addUnitPriority('isoWeek', 5);\n\n    // PARSING\n\n    addRegexToken('w', match1to2);\n    addRegexToken('ww', match1to2, match2);\n    addRegexToken('W', match1to2);\n    addRegexToken('WW', match1to2, match2);\n\n    addWeekParseToken(['w', 'ww', 'W', 'WW'], function (\n        input,\n        week,\n        config,\n        token\n    ) {\n        week[token.substr(0, 1)] = toInt(input);\n    });\n\n    // HELPERS\n\n    // LOCALES\n\n    function localeWeek(mom) {\n        return weekOfYear(mom, this._week.dow, this._week.doy).week;\n    }\n\n    var defaultLocaleWeek = {\n        dow: 0, // Sunday is the first day of the week.\n        doy: 6, // The week that contains Jan 6th is the first week of the year.\n    };\n\n    function localeFirstDayOfWeek() {\n        return this._week.dow;\n    }\n\n    function localeFirstDayOfYear() {\n        return this._week.doy;\n    }\n\n    // MOMENTS\n\n    function getSetWeek(input) {\n        var week = this.localeData().week(this);\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    function getSetISOWeek(input) {\n        var week = weekOfYear(this, 1, 4).week;\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    // FORMATTING\n\n    addFormatToken('d', 0, 'do', 'day');\n\n    addFormatToken('dd', 0, 0, function (format) {\n        return this.localeData().weekdaysMin(this, format);\n    });\n\n    addFormatToken('ddd', 0, 0, function (format) {\n        return this.localeData().weekdaysShort(this, format);\n    });\n\n    addFormatToken('dddd', 0, 0, function (format) {\n        return this.localeData().weekdays(this, format);\n    });\n\n    addFormatToken('e', 0, 0, 'weekday');\n    addFormatToken('E', 0, 0, 'isoWeekday');\n\n    // ALIASES\n\n    addUnitAlias('day', 'd');\n    addUnitAlias('weekday', 'e');\n    addUnitAlias('isoWeekday', 'E');\n\n    // PRIORITY\n    addUnitPriority('day', 11);\n    addUnitPriority('weekday', 11);\n    addUnitPriority('isoWeekday', 11);\n\n    // PARSING\n\n    addRegexToken('d', match1to2);\n    addRegexToken('e', match1to2);\n    addRegexToken('E', match1to2);\n    addRegexToken('dd', function (isStrict, locale) {\n        return locale.weekdaysMinRegex(isStrict);\n    });\n    addRegexToken('ddd', function (isStrict, locale) {\n        return locale.weekdaysShortRegex(isStrict);\n    });\n    addRegexToken('dddd', function (isStrict, locale) {\n        return locale.weekdaysRegex(isStrict);\n    });\n\n    addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n        var weekday = config._locale.weekdaysParse(input, token, config._strict);\n        // if we didn't get a weekday name, mark the date as invalid\n        if (weekday != null) {\n            week.d = weekday;\n        } else {\n            getParsingFlags(config).invalidWeekday = input;\n        }\n    });\n\n    addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n        week[token] = toInt(input);\n    });\n\n    // HELPERS\n\n    function parseWeekday(input, locale) {\n        if (typeof input !== 'string') {\n            return input;\n        }\n\n        if (!isNaN(input)) {\n            return parseInt(input, 10);\n        }\n\n        input = locale.weekdaysParse(input);\n        if (typeof input === 'number') {\n            return input;\n        }\n\n        return null;\n    }\n\n    function parseIsoWeekday(input, locale) {\n        if (typeof input === 'string') {\n            return locale.weekdaysParse(input) % 7 || 7;\n        }\n        return isNaN(input) ? null : input;\n    }\n\n    // LOCALES\n    function shiftWeekdays(ws, n) {\n        return ws.slice(n, 7).concat(ws.slice(0, n));\n    }\n\n    var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        defaultWeekdaysRegex = matchWord,\n        defaultWeekdaysShortRegex = matchWord,\n        defaultWeekdaysMinRegex = matchWord;\n\n    function localeWeekdays(m, format) {\n        var weekdays = isArray(this._weekdays)\n            ? this._weekdays\n            : this._weekdays[\n                  m && m !== true && this._weekdays.isFormat.test(format)\n                      ? 'format'\n                      : 'standalone'\n              ];\n        return m === true\n            ? shiftWeekdays(weekdays, this._week.dow)\n            : m\n            ? weekdays[m.day()]\n            : weekdays;\n    }\n\n    function localeWeekdaysShort(m) {\n        return m === true\n            ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n            : m\n            ? this._weekdaysShort[m.day()]\n            : this._weekdaysShort;\n    }\n\n    function localeWeekdaysMin(m) {\n        return m === true\n            ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n            : m\n            ? this._weekdaysMin[m.day()]\n            : this._weekdaysMin;\n    }\n\n    function handleStrictParse$1(weekdayName, format, strict) {\n        var i,\n            ii,\n            mom,\n            llc = weekdayName.toLocaleLowerCase();\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n            this._shortWeekdaysParse = [];\n            this._minWeekdaysParse = [];\n\n            for (i = 0; i < 7; ++i) {\n                mom = createUTC([2000, 1]).day(i);\n                this._minWeekdaysParse[i] = this.weekdaysMin(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._shortWeekdaysParse[i] = this.weekdaysShort(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n            }\n        }\n\n        if (strict) {\n            if (format === 'dddd') {\n                ii = indexOf.call(this._weekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else if (format === 'ddd') {\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        } else {\n            if (format === 'dddd') {\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else if (format === 'ddd') {\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        }\n    }\n\n    function localeWeekdaysParse(weekdayName, format, strict) {\n        var i, mom, regex;\n\n        if (this._weekdaysParseExact) {\n            return handleStrictParse$1.call(this, weekdayName, format, strict);\n        }\n\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n            this._minWeekdaysParse = [];\n            this._shortWeekdaysParse = [];\n            this._fullWeekdaysParse = [];\n        }\n\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n\n            mom = createUTC([2000, 1]).day(i);\n            if (strict && !this._fullWeekdaysParse[i]) {\n                this._fullWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n                this._shortWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n                this._minWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n            }\n            if (!this._weekdaysParse[i]) {\n                regex =\n                    '^' +\n                    this.weekdays(mom, '') +\n                    '|^' +\n                    this.weekdaysShort(mom, '') +\n                    '|^' +\n                    this.weekdaysMin(mom, '');\n                this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (\n                strict &&\n                format === 'dddd' &&\n                this._fullWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'ddd' &&\n                this._shortWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'dd' &&\n                this._minWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function getSetDayOfWeek(input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n        if (input != null) {\n            input = parseWeekday(input, this.localeData());\n            return this.add(input - day, 'd');\n        } else {\n            return day;\n        }\n    }\n\n    function getSetLocaleDayOfWeek(input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n        return input == null ? weekday : this.add(input - weekday, 'd');\n    }\n\n    function getSetISODayOfWeek(input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n\n        // behaves the same as moment#day except\n        // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n        // as a setter, sunday should belong to the previous week.\n\n        if (input != null) {\n            var weekday = parseIsoWeekday(input, this.localeData());\n            return this.day(this.day() % 7 ? weekday : weekday - 7);\n        } else {\n            return this.day() || 7;\n        }\n    }\n\n    function weekdaysRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysStrictRegex;\n            } else {\n                return this._weekdaysRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                this._weekdaysRegex = defaultWeekdaysRegex;\n            }\n            return this._weekdaysStrictRegex && isStrict\n                ? this._weekdaysStrictRegex\n                : this._weekdaysRegex;\n        }\n    }\n\n    function weekdaysShortRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysShortStrictRegex;\n            } else {\n                return this._weekdaysShortRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n                this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n            }\n            return this._weekdaysShortStrictRegex && isStrict\n                ? this._weekdaysShortStrictRegex\n                : this._weekdaysShortRegex;\n        }\n    }\n\n    function weekdaysMinRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysMinStrictRegex;\n            } else {\n                return this._weekdaysMinRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n                this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n            }\n            return this._weekdaysMinStrictRegex && isStrict\n                ? this._weekdaysMinStrictRegex\n                : this._weekdaysMinRegex;\n        }\n    }\n\n    function computeWeekdaysParse() {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var minPieces = [],\n            shortPieces = [],\n            longPieces = [],\n            mixedPieces = [],\n            i,\n            mom,\n            minp,\n            shortp,\n            longp;\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, 1]).day(i);\n            minp = regexEscape(this.weekdaysMin(mom, ''));\n            shortp = regexEscape(this.weekdaysShort(mom, ''));\n            longp = regexEscape(this.weekdays(mom, ''));\n            minPieces.push(minp);\n            shortPieces.push(shortp);\n            longPieces.push(longp);\n            mixedPieces.push(minp);\n            mixedPieces.push(shortp);\n            mixedPieces.push(longp);\n        }\n        // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n        // will match the longer piece.\n        minPieces.sort(cmpLenRev);\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n\n        this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._weekdaysShortRegex = this._weekdaysRegex;\n        this._weekdaysMinRegex = this._weekdaysRegex;\n\n        this._weekdaysStrictRegex = new RegExp(\n            '^(' + longPieces.join('|') + ')',\n            'i'\n        );\n        this._weekdaysShortStrictRegex = new RegExp(\n            '^(' + shortPieces.join('|') + ')',\n            'i'\n        );\n        this._weekdaysMinStrictRegex = new RegExp(\n            '^(' + minPieces.join('|') + ')',\n            'i'\n        );\n    }\n\n    // FORMATTING\n\n    function hFormat() {\n        return this.hours() % 12 || 12;\n    }\n\n    function kFormat() {\n        return this.hours() || 24;\n    }\n\n    addFormatToken('H', ['HH', 2], 0, 'hour');\n    addFormatToken('h', ['hh', 2], 0, hFormat);\n    addFormatToken('k', ['kk', 2], 0, kFormat);\n\n    addFormatToken('hmm', 0, 0, function () {\n        return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n    });\n\n    addFormatToken('hmmss', 0, 0, function () {\n        return (\n            '' +\n            hFormat.apply(this) +\n            zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2)\n        );\n    });\n\n    addFormatToken('Hmm', 0, 0, function () {\n        return '' + this.hours() + zeroFill(this.minutes(), 2);\n    });\n\n    addFormatToken('Hmmss', 0, 0, function () {\n        return (\n            '' +\n            this.hours() +\n            zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2)\n        );\n    });\n\n    function meridiem(token, lowercase) {\n        addFormatToken(token, 0, 0, function () {\n            return this.localeData().meridiem(\n                this.hours(),\n                this.minutes(),\n                lowercase\n            );\n        });\n    }\n\n    meridiem('a', true);\n    meridiem('A', false);\n\n    // ALIASES\n\n    addUnitAlias('hour', 'h');\n\n    // PRIORITY\n    addUnitPriority('hour', 13);\n\n    // PARSING\n\n    function matchMeridiem(isStrict, locale) {\n        return locale._meridiemParse;\n    }\n\n    addRegexToken('a', matchMeridiem);\n    addRegexToken('A', matchMeridiem);\n    addRegexToken('H', match1to2);\n    addRegexToken('h', match1to2);\n    addRegexToken('k', match1to2);\n    addRegexToken('HH', match1to2, match2);\n    addRegexToken('hh', match1to2, match2);\n    addRegexToken('kk', match1to2, match2);\n\n    addRegexToken('hmm', match3to4);\n    addRegexToken('hmmss', match5to6);\n    addRegexToken('Hmm', match3to4);\n    addRegexToken('Hmmss', match5to6);\n\n    addParseToken(['H', 'HH'], HOUR);\n    addParseToken(['k', 'kk'], function (input, array, config) {\n        var kInput = toInt(input);\n        array[HOUR] = kInput === 24 ? 0 : kInput;\n    });\n    addParseToken(['a', 'A'], function (input, array, config) {\n        config._isPm = config._locale.isPM(input);\n        config._meridiem = input;\n    });\n    addParseToken(['h', 'hh'], function (input, array, config) {\n        array[HOUR] = toInt(input);\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('hmm', function (input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('hmmss', function (input, array, config) {\n        var pos1 = input.length - 4,\n            pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('Hmm', function (input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n    });\n    addParseToken('Hmmss', function (input, array, config) {\n        var pos1 = input.length - 4,\n            pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n    });\n\n    // LOCALES\n\n    function localeIsPM(input) {\n        // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n        // Using charAt should be more compatible.\n        return (input + '').toLowerCase().charAt(0) === 'p';\n    }\n\n    var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i,\n        // Setting the hour should keep the time, because the user explicitly\n        // specified which hour they want. So trying to maintain the same hour (in\n        // a new timezone) makes sense. Adding/subtracting hours does not follow\n        // this rule.\n        getSetHour = makeGetSet('Hours', true);\n\n    function localeMeridiem(hours, minutes, isLower) {\n        if (hours > 11) {\n            return isLower ? 'pm' : 'PM';\n        } else {\n            return isLower ? 'am' : 'AM';\n        }\n    }\n\n    var baseConfig = {\n        calendar: defaultCalendar,\n        longDateFormat: defaultLongDateFormat,\n        invalidDate: defaultInvalidDate,\n        ordinal: defaultOrdinal,\n        dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n        relativeTime: defaultRelativeTime,\n\n        months: defaultLocaleMonths,\n        monthsShort: defaultLocaleMonthsShort,\n\n        week: defaultLocaleWeek,\n\n        weekdays: defaultLocaleWeekdays,\n        weekdaysMin: defaultLocaleWeekdaysMin,\n        weekdaysShort: defaultLocaleWeekdaysShort,\n\n        meridiemParse: defaultLocaleMeridiemParse,\n    };\n\n    // internal storage for locale config files\n    var locales = {},\n        localeFamilies = {},\n        globalLocale;\n\n    function commonPrefix(arr1, arr2) {\n        var i,\n            minl = Math.min(arr1.length, arr2.length);\n        for (i = 0; i < minl; i += 1) {\n            if (arr1[i] !== arr2[i]) {\n                return i;\n            }\n        }\n        return minl;\n    }\n\n    function normalizeLocale(key) {\n        return key ? key.toLowerCase().replace('_', '-') : key;\n    }\n\n    // pick the locale from the array\n    // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n    // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n    function chooseLocale(names) {\n        var i = 0,\n            j,\n            next,\n            locale,\n            split;\n\n        while (i < names.length) {\n            split = normalizeLocale(names[i]).split('-');\n            j = split.length;\n            next = normalizeLocale(names[i + 1]);\n            next = next ? next.split('-') : null;\n            while (j > 0) {\n                locale = loadLocale(split.slice(0, j).join('-'));\n                if (locale) {\n                    return locale;\n                }\n                if (\n                    next &&\n                    next.length >= j &&\n                    commonPrefix(split, next) >= j - 1\n                ) {\n                    //the next array item is better than a shallower substring of this one\n                    break;\n                }\n                j--;\n            }\n            i++;\n        }\n        return globalLocale;\n    }\n\n    function loadLocale(name) {\n        var oldLocale = null,\n            aliasedRequire;\n        // TODO: Find a better way to register and load all the locales in Node\n        if (\n            locales[name] === undefined &&\n            typeof module !== 'undefined' &&\n            module &&\n            module.exports\n        ) {\n            try {\n                oldLocale = globalLocale._abbr;\n                aliasedRequire = require;\n                aliasedRequire('./locale/' + name);\n                getSetGlobalLocale(oldLocale);\n            } catch (e) {\n                // mark as not found to avoid repeating expensive file require call causing high CPU\n                // when trying to find en-US, en_US, en-us for every format call\n                locales[name] = null; // null means not found\n            }\n        }\n        return locales[name];\n    }\n\n    // This function will load locale and then set the global locale.  If\n    // no arguments are passed in, it will simply return the current global\n    // locale key.\n    function getSetGlobalLocale(key, values) {\n        var data;\n        if (key) {\n            if (isUndefined(values)) {\n                data = getLocale(key);\n            } else {\n                data = defineLocale(key, values);\n            }\n\n            if (data) {\n                // moment.duration._locale = moment._locale = data;\n                globalLocale = data;\n            } else {\n                if (typeof console !== 'undefined' && console.warn) {\n                    //warn user if arguments are passed but the locale could not be set\n                    console.warn(\n                        'Locale ' + key + ' not found. Did you forget to load it?'\n                    );\n                }\n            }\n        }\n\n        return globalLocale._abbr;\n    }\n\n    function defineLocale(name, config) {\n        if (config !== null) {\n            var locale,\n                parentConfig = baseConfig;\n            config.abbr = name;\n            if (locales[name] != null) {\n                deprecateSimple(\n                    'defineLocaleOverride',\n                    'use moment.updateLocale(localeName, config) to change ' +\n                        'an existing locale. moment.defineLocale(localeName, ' +\n                        'config) should only be used for creating a new locale ' +\n                        'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'\n                );\n                parentConfig = locales[name]._config;\n            } else if (config.parentLocale != null) {\n                if (locales[config.parentLocale] != null) {\n                    parentConfig = locales[config.parentLocale]._config;\n                } else {\n                    locale = loadLocale(config.parentLocale);\n                    if (locale != null) {\n                        parentConfig = locale._config;\n                    } else {\n                        if (!localeFamilies[config.parentLocale]) {\n                            localeFamilies[config.parentLocale] = [];\n                        }\n                        localeFamilies[config.parentLocale].push({\n                            name: name,\n                            config: config,\n                        });\n                        return null;\n                    }\n                }\n            }\n            locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n            if (localeFamilies[name]) {\n                localeFamilies[name].forEach(function (x) {\n                    defineLocale(x.name, x.config);\n                });\n            }\n\n            // backwards compat for now: also set the locale\n            // make sure we set the locale AFTER all child locales have been\n            // created, so we won't end up with the child locale set.\n            getSetGlobalLocale(name);\n\n            return locales[name];\n        } else {\n            // useful for testing\n            delete locales[name];\n            return null;\n        }\n    }\n\n    function updateLocale(name, config) {\n        if (config != null) {\n            var locale,\n                tmpLocale,\n                parentConfig = baseConfig;\n\n            if (locales[name] != null && locales[name].parentLocale != null) {\n                // Update existing child locale in-place to avoid memory-leaks\n                locales[name].set(mergeConfigs(locales[name]._config, config));\n            } else {\n                // MERGE\n                tmpLocale = loadLocale(name);\n                if (tmpLocale != null) {\n                    parentConfig = tmpLocale._config;\n                }\n                config = mergeConfigs(parentConfig, config);\n                if (tmpLocale == null) {\n                    // updateLocale is called for creating a new locale\n                    // Set abbr so it will have a name (getters return\n                    // undefined otherwise).\n                    config.abbr = name;\n                }\n                locale = new Locale(config);\n                locale.parentLocale = locales[name];\n                locales[name] = locale;\n            }\n\n            // backwards compat for now: also set the locale\n            getSetGlobalLocale(name);\n        } else {\n            // pass null for config to unupdate, useful for tests\n            if (locales[name] != null) {\n                if (locales[name].parentLocale != null) {\n                    locales[name] = locales[name].parentLocale;\n                    if (name === getSetGlobalLocale()) {\n                        getSetGlobalLocale(name);\n                    }\n                } else if (locales[name] != null) {\n                    delete locales[name];\n                }\n            }\n        }\n        return locales[name];\n    }\n\n    // returns locale data\n    function getLocale(key) {\n        var locale;\n\n        if (key && key._locale && key._locale._abbr) {\n            key = key._locale._abbr;\n        }\n\n        if (!key) {\n            return globalLocale;\n        }\n\n        if (!isArray(key)) {\n            //short-circuit everything else\n            locale = loadLocale(key);\n            if (locale) {\n                return locale;\n            }\n            key = [key];\n        }\n\n        return chooseLocale(key);\n    }\n\n    function listLocales() {\n        return keys(locales);\n    }\n\n    function checkOverflow(m) {\n        var overflow,\n            a = m._a;\n\n        if (a && getParsingFlags(m).overflow === -2) {\n            overflow =\n                a[MONTH] < 0 || a[MONTH] > 11\n                    ? MONTH\n                    : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])\n                    ? DATE\n                    : a[HOUR] < 0 ||\n                      a[HOUR] > 24 ||\n                      (a[HOUR] === 24 &&\n                          (a[MINUTE] !== 0 ||\n                              a[SECOND] !== 0 ||\n                              a[MILLISECOND] !== 0))\n                    ? HOUR\n                    : a[MINUTE] < 0 || a[MINUTE] > 59\n                    ? MINUTE\n                    : a[SECOND] < 0 || a[SECOND] > 59\n                    ? SECOND\n                    : a[MILLISECOND] < 0 || a[MILLISECOND] > 999\n                    ? MILLISECOND\n                    : -1;\n\n            if (\n                getParsingFlags(m)._overflowDayOfYear &&\n                (overflow < YEAR || overflow > DATE)\n            ) {\n                overflow = DATE;\n            }\n            if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n                overflow = WEEK;\n            }\n            if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n                overflow = WEEKDAY;\n            }\n\n            getParsingFlags(m).overflow = overflow;\n        }\n\n        return m;\n    }\n\n    // iso 8601 regex\n    // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n    var extendedIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n        basicIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n        tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/,\n        isoDates = [\n            ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n            ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n            ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n            ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n            ['YYYY-DDD', /\\d{4}-\\d{3}/],\n            ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n            ['YYYYYYMMDD', /[+-]\\d{10}/],\n            ['YYYYMMDD', /\\d{8}/],\n            ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n            ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n            ['YYYYDDD', /\\d{7}/],\n            ['YYYYMM', /\\d{6}/, false],\n            ['YYYY', /\\d{4}/, false],\n        ],\n        // iso time formats and regexes\n        isoTimes = [\n            ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n            ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n            ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n            ['HH:mm', /\\d\\d:\\d\\d/],\n            ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n            ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n            ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n            ['HHmm', /\\d\\d\\d\\d/],\n            ['HH', /\\d\\d/],\n        ],\n        aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n        // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n        rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,\n        obsOffsets = {\n            UT: 0,\n            GMT: 0,\n            EDT: -4 * 60,\n            EST: -5 * 60,\n            CDT: -5 * 60,\n            CST: -6 * 60,\n            MDT: -6 * 60,\n            MST: -7 * 60,\n            PDT: -7 * 60,\n            PST: -8 * 60,\n        };\n\n    // date from iso format\n    function configFromISO(config) {\n        var i,\n            l,\n            string = config._i,\n            match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n            allowTime,\n            dateFormat,\n            timeFormat,\n            tzFormat;\n\n        if (match) {\n            getParsingFlags(config).iso = true;\n\n            for (i = 0, l = isoDates.length; i < l; i++) {\n                if (isoDates[i][1].exec(match[1])) {\n                    dateFormat = isoDates[i][0];\n                    allowTime = isoDates[i][2] !== false;\n                    break;\n                }\n            }\n            if (dateFormat == null) {\n                config._isValid = false;\n                return;\n            }\n            if (match[3]) {\n                for (i = 0, l = isoTimes.length; i < l; i++) {\n                    if (isoTimes[i][1].exec(match[3])) {\n                        // match[2] should be 'T' or space\n                        timeFormat = (match[2] || ' ') + isoTimes[i][0];\n                        break;\n                    }\n                }\n                if (timeFormat == null) {\n                    config._isValid = false;\n                    return;\n                }\n            }\n            if (!allowTime && timeFormat != null) {\n                config._isValid = false;\n                return;\n            }\n            if (match[4]) {\n                if (tzRegex.exec(match[4])) {\n                    tzFormat = 'Z';\n                } else {\n                    config._isValid = false;\n                    return;\n                }\n            }\n            config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n            configFromStringAndFormat(config);\n        } else {\n            config._isValid = false;\n        }\n    }\n\n    function extractFromRFC2822Strings(\n        yearStr,\n        monthStr,\n        dayStr,\n        hourStr,\n        minuteStr,\n        secondStr\n    ) {\n        var result = [\n            untruncateYear(yearStr),\n            defaultLocaleMonthsShort.indexOf(monthStr),\n            parseInt(dayStr, 10),\n            parseInt(hourStr, 10),\n            parseInt(minuteStr, 10),\n        ];\n\n        if (secondStr) {\n            result.push(parseInt(secondStr, 10));\n        }\n\n        return result;\n    }\n\n    function untruncateYear(yearStr) {\n        var year = parseInt(yearStr, 10);\n        if (year <= 49) {\n            return 2000 + year;\n        } else if (year <= 999) {\n            return 1900 + year;\n        }\n        return year;\n    }\n\n    function preprocessRFC2822(s) {\n        // Remove comments and folding whitespace and replace multiple-spaces with a single space\n        return s\n            .replace(/\\([^)]*\\)|[\\n\\t]/g, ' ')\n            .replace(/(\\s\\s+)/g, ' ')\n            .replace(/^\\s\\s*/, '')\n            .replace(/\\s\\s*$/, '');\n    }\n\n    function checkWeekday(weekdayStr, parsedInput, config) {\n        if (weekdayStr) {\n            // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\n            var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n                weekdayActual = new Date(\n                    parsedInput[0],\n                    parsedInput[1],\n                    parsedInput[2]\n                ).getDay();\n            if (weekdayProvided !== weekdayActual) {\n                getParsingFlags(config).weekdayMismatch = true;\n                config._isValid = false;\n                return false;\n            }\n        }\n        return true;\n    }\n\n    function calculateOffset(obsOffset, militaryOffset, numOffset) {\n        if (obsOffset) {\n            return obsOffsets[obsOffset];\n        } else if (militaryOffset) {\n            // the only allowed military tz is Z\n            return 0;\n        } else {\n            var hm = parseInt(numOffset, 10),\n                m = hm % 100,\n                h = (hm - m) / 100;\n            return h * 60 + m;\n        }\n    }\n\n    // date and time from ref 2822 format\n    function configFromRFC2822(config) {\n        var match = rfc2822.exec(preprocessRFC2822(config._i)),\n            parsedArray;\n        if (match) {\n            parsedArray = extractFromRFC2822Strings(\n                match[4],\n                match[3],\n                match[2],\n                match[5],\n                match[6],\n                match[7]\n            );\n            if (!checkWeekday(match[1], parsedArray, config)) {\n                return;\n            }\n\n            config._a = parsedArray;\n            config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n            config._d = createUTCDate.apply(null, config._a);\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n            getParsingFlags(config).rfc2822 = true;\n        } else {\n            config._isValid = false;\n        }\n    }\n\n    // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\n    function configFromString(config) {\n        var matched = aspNetJsonRegex.exec(config._i);\n        if (matched !== null) {\n            config._d = new Date(+matched[1]);\n            return;\n        }\n\n        configFromISO(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n        } else {\n            return;\n        }\n\n        configFromRFC2822(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n        } else {\n            return;\n        }\n\n        if (config._strict) {\n            config._isValid = false;\n        } else {\n            // Final attempt, use Input Fallback\n            hooks.createFromInputFallback(config);\n        }\n    }\n\n    hooks.createFromInputFallback = deprecate(\n        'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n            'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n            'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n        function (config) {\n            config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n        }\n    );\n\n    // Pick the first defined of two or three arguments.\n    function defaults(a, b, c) {\n        if (a != null) {\n            return a;\n        }\n        if (b != null) {\n            return b;\n        }\n        return c;\n    }\n\n    function currentDateArray(config) {\n        // hooks is actually the exported moment object\n        var nowValue = new Date(hooks.now());\n        if (config._useUTC) {\n            return [\n                nowValue.getUTCFullYear(),\n                nowValue.getUTCMonth(),\n                nowValue.getUTCDate(),\n            ];\n        }\n        return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n    }\n\n    // convert an array to a date.\n    // the array should mirror the parameters below\n    // note: all values past the year are optional and will default to the lowest possible value.\n    // [year, month, day , hour, minute, second, millisecond]\n    function configFromArray(config) {\n        var i,\n            date,\n            input = [],\n            currentDate,\n            expectedWeekday,\n            yearToUse;\n\n        if (config._d) {\n            return;\n        }\n\n        currentDate = currentDateArray(config);\n\n        //compute day of the year from weeks and weekdays\n        if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n            dayOfYearFromWeekInfo(config);\n        }\n\n        //if the day of the year is set, figure out what it is\n        if (config._dayOfYear != null) {\n            yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n            if (\n                config._dayOfYear > daysInYear(yearToUse) ||\n                config._dayOfYear === 0\n            ) {\n                getParsingFlags(config)._overflowDayOfYear = true;\n            }\n\n            date = createUTCDate(yearToUse, 0, config._dayOfYear);\n            config._a[MONTH] = date.getUTCMonth();\n            config._a[DATE] = date.getUTCDate();\n        }\n\n        // Default to current date.\n        // * if no year, month, day of month are given, default to today\n        // * if day of month is given, default month and year\n        // * if month is given, default only year\n        // * if year is given, don't default anything\n        for (i = 0; i < 3 && config._a[i] == null; ++i) {\n            config._a[i] = input[i] = currentDate[i];\n        }\n\n        // Zero out whatever was not defaulted, including time\n        for (; i < 7; i++) {\n            config._a[i] = input[i] =\n                config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];\n        }\n\n        // Check for 24:00:00.000\n        if (\n            config._a[HOUR] === 24 &&\n            config._a[MINUTE] === 0 &&\n            config._a[SECOND] === 0 &&\n            config._a[MILLISECOND] === 0\n        ) {\n            config._nextDay = true;\n            config._a[HOUR] = 0;\n        }\n\n        config._d = (config._useUTC ? createUTCDate : createDate).apply(\n            null,\n            input\n        );\n        expectedWeekday = config._useUTC\n            ? config._d.getUTCDay()\n            : config._d.getDay();\n\n        // Apply timezone offset from input. The actual utcOffset can be changed\n        // with parseZone.\n        if (config._tzm != null) {\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n        }\n\n        if (config._nextDay) {\n            config._a[HOUR] = 24;\n        }\n\n        // check for mismatching day of week\n        if (\n            config._w &&\n            typeof config._w.d !== 'undefined' &&\n            config._w.d !== expectedWeekday\n        ) {\n            getParsingFlags(config).weekdayMismatch = true;\n        }\n    }\n\n    function dayOfYearFromWeekInfo(config) {\n        var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n\n        w = config._w;\n        if (w.GG != null || w.W != null || w.E != null) {\n            dow = 1;\n            doy = 4;\n\n            // TODO: We need to take the current isoWeekYear, but that depends on\n            // how we interpret now (local, utc, fixed offset). So create\n            // a now version of current config (take local/utc/offset flags, and\n            // create now).\n            weekYear = defaults(\n                w.GG,\n                config._a[YEAR],\n                weekOfYear(createLocal(), 1, 4).year\n            );\n            week = defaults(w.W, 1);\n            weekday = defaults(w.E, 1);\n            if (weekday < 1 || weekday > 7) {\n                weekdayOverflow = true;\n            }\n        } else {\n            dow = config._locale._week.dow;\n            doy = config._locale._week.doy;\n\n            curWeek = weekOfYear(createLocal(), dow, doy);\n\n            weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n            // Default to current week.\n            week = defaults(w.w, curWeek.week);\n\n            if (w.d != null) {\n                // weekday -- low day numbers are considered next week\n                weekday = w.d;\n                if (weekday < 0 || weekday > 6) {\n                    weekdayOverflow = true;\n                }\n            } else if (w.e != null) {\n                // local weekday -- counting starts from beginning of week\n                weekday = w.e + dow;\n                if (w.e < 0 || w.e > 6) {\n                    weekdayOverflow = true;\n                }\n            } else {\n                // default to beginning of week\n                weekday = dow;\n            }\n        }\n        if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n            getParsingFlags(config)._overflowWeeks = true;\n        } else if (weekdayOverflow != null) {\n            getParsingFlags(config)._overflowWeekday = true;\n        } else {\n            temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n            config._a[YEAR] = temp.year;\n            config._dayOfYear = temp.dayOfYear;\n        }\n    }\n\n    // constant that refers to the ISO standard\n    hooks.ISO_8601 = function () {};\n\n    // constant that refers to the RFC 2822 form\n    hooks.RFC_2822 = function () {};\n\n    // date from string and format string\n    function configFromStringAndFormat(config) {\n        // TODO: Move this to another part of the creation flow to prevent circular deps\n        if (config._f === hooks.ISO_8601) {\n            configFromISO(config);\n            return;\n        }\n        if (config._f === hooks.RFC_2822) {\n            configFromRFC2822(config);\n            return;\n        }\n        config._a = [];\n        getParsingFlags(config).empty = true;\n\n        // This array is used to make a Date, either with `new Date` or `Date.UTC`\n        var string = '' + config._i,\n            i,\n            parsedInput,\n            tokens,\n            token,\n            skipped,\n            stringLength = string.length,\n            totalParsedInputLength = 0,\n            era;\n\n        tokens =\n            expandFormat(config._f, config._locale).match(formattingTokens) || [];\n\n        for (i = 0; i < tokens.length; i++) {\n            token = tokens[i];\n            parsedInput = (string.match(getParseRegexForToken(token, config)) ||\n                [])[0];\n            if (parsedInput) {\n                skipped = string.substr(0, string.indexOf(parsedInput));\n                if (skipped.length > 0) {\n                    getParsingFlags(config).unusedInput.push(skipped);\n                }\n                string = string.slice(\n                    string.indexOf(parsedInput) + parsedInput.length\n                );\n                totalParsedInputLength += parsedInput.length;\n            }\n            // don't parse if it's not a known token\n            if (formatTokenFunctions[token]) {\n                if (parsedInput) {\n                    getParsingFlags(config).empty = false;\n                } else {\n                    getParsingFlags(config).unusedTokens.push(token);\n                }\n                addTimeToArrayFromToken(token, parsedInput, config);\n            } else if (config._strict && !parsedInput) {\n                getParsingFlags(config).unusedTokens.push(token);\n            }\n        }\n\n        // add remaining unparsed input length to the string\n        getParsingFlags(config).charsLeftOver =\n            stringLength - totalParsedInputLength;\n        if (string.length > 0) {\n            getParsingFlags(config).unusedInput.push(string);\n        }\n\n        // clear _12h flag if hour is <= 12\n        if (\n            config._a[HOUR] <= 12 &&\n            getParsingFlags(config).bigHour === true &&\n            config._a[HOUR] > 0\n        ) {\n            getParsingFlags(config).bigHour = undefined;\n        }\n\n        getParsingFlags(config).parsedDateParts = config._a.slice(0);\n        getParsingFlags(config).meridiem = config._meridiem;\n        // handle meridiem\n        config._a[HOUR] = meridiemFixWrap(\n            config._locale,\n            config._a[HOUR],\n            config._meridiem\n        );\n\n        // handle era\n        era = getParsingFlags(config).era;\n        if (era !== null) {\n            config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n        }\n\n        configFromArray(config);\n        checkOverflow(config);\n    }\n\n    function meridiemFixWrap(locale, hour, meridiem) {\n        var isPm;\n\n        if (meridiem == null) {\n            // nothing to do\n            return hour;\n        }\n        if (locale.meridiemHour != null) {\n            return locale.meridiemHour(hour, meridiem);\n        } else if (locale.isPM != null) {\n            // Fallback\n            isPm = locale.isPM(meridiem);\n            if (isPm && hour < 12) {\n                hour += 12;\n            }\n            if (!isPm && hour === 12) {\n                hour = 0;\n            }\n            return hour;\n        } else {\n            // this is not supposed to happen\n            return hour;\n        }\n    }\n\n    // date from string and array of format strings\n    function configFromStringAndArray(config) {\n        var tempConfig,\n            bestMoment,\n            scoreToBeat,\n            i,\n            currentScore,\n            validFormatFound,\n            bestFormatIsValid = false;\n\n        if (config._f.length === 0) {\n            getParsingFlags(config).invalidFormat = true;\n            config._d = new Date(NaN);\n            return;\n        }\n\n        for (i = 0; i < config._f.length; i++) {\n            currentScore = 0;\n            validFormatFound = false;\n            tempConfig = copyConfig({}, config);\n            if (config._useUTC != null) {\n                tempConfig._useUTC = config._useUTC;\n            }\n            tempConfig._f = config._f[i];\n            configFromStringAndFormat(tempConfig);\n\n            if (isValid(tempConfig)) {\n                validFormatFound = true;\n            }\n\n            // if there is any input that was not parsed add a penalty for that format\n            currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n            //or tokens\n            currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n            getParsingFlags(tempConfig).score = currentScore;\n\n            if (!bestFormatIsValid) {\n                if (\n                    scoreToBeat == null ||\n                    currentScore < scoreToBeat ||\n                    validFormatFound\n                ) {\n                    scoreToBeat = currentScore;\n                    bestMoment = tempConfig;\n                    if (validFormatFound) {\n                        bestFormatIsValid = true;\n                    }\n                }\n            } else {\n                if (currentScore < scoreToBeat) {\n                    scoreToBeat = currentScore;\n                    bestMoment = tempConfig;\n                }\n            }\n        }\n\n        extend(config, bestMoment || tempConfig);\n    }\n\n    function configFromObject(config) {\n        if (config._d) {\n            return;\n        }\n\n        var i = normalizeObjectUnits(config._i),\n            dayOrDate = i.day === undefined ? i.date : i.day;\n        config._a = map(\n            [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\n            function (obj) {\n                return obj && parseInt(obj, 10);\n            }\n        );\n\n        configFromArray(config);\n    }\n\n    function createFromConfig(config) {\n        var res = new Moment(checkOverflow(prepareConfig(config)));\n        if (res._nextDay) {\n            // Adding is smart enough around DST\n            res.add(1, 'd');\n            res._nextDay = undefined;\n        }\n\n        return res;\n    }\n\n    function prepareConfig(config) {\n        var input = config._i,\n            format = config._f;\n\n        config._locale = config._locale || getLocale(config._l);\n\n        if (input === null || (format === undefined && input === '')) {\n            return createInvalid({ nullInput: true });\n        }\n\n        if (typeof input === 'string') {\n            config._i = input = config._locale.preparse(input);\n        }\n\n        if (isMoment(input)) {\n            return new Moment(checkOverflow(input));\n        } else if (isDate(input)) {\n            config._d = input;\n        } else if (isArray(format)) {\n            configFromStringAndArray(config);\n        } else if (format) {\n            configFromStringAndFormat(config);\n        } else {\n            configFromInput(config);\n        }\n\n        if (!isValid(config)) {\n            config._d = null;\n        }\n\n        return config;\n    }\n\n    function configFromInput(config) {\n        var input = config._i;\n        if (isUndefined(input)) {\n            config._d = new Date(hooks.now());\n        } else if (isDate(input)) {\n            config._d = new Date(input.valueOf());\n        } else if (typeof input === 'string') {\n            configFromString(config);\n        } else if (isArray(input)) {\n            config._a = map(input.slice(0), function (obj) {\n                return parseInt(obj, 10);\n            });\n            configFromArray(config);\n        } else if (isObject(input)) {\n            configFromObject(config);\n        } else if (isNumber(input)) {\n            // from milliseconds\n            config._d = new Date(input);\n        } else {\n            hooks.createFromInputFallback(config);\n        }\n    }\n\n    function createLocalOrUTC(input, format, locale, strict, isUTC) {\n        var c = {};\n\n        if (format === true || format === false) {\n            strict = format;\n            format = undefined;\n        }\n\n        if (locale === true || locale === false) {\n            strict = locale;\n            locale = undefined;\n        }\n\n        if (\n            (isObject(input) && isObjectEmpty(input)) ||\n            (isArray(input) && input.length === 0)\n        ) {\n            input = undefined;\n        }\n        // object construction must be done this way.\n        // https://github.com/moment/moment/issues/1423\n        c._isAMomentObject = true;\n        c._useUTC = c._isUTC = isUTC;\n        c._l = locale;\n        c._i = input;\n        c._f = format;\n        c._strict = strict;\n\n        return createFromConfig(c);\n    }\n\n    function createLocal(input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, false);\n    }\n\n    var prototypeMin = deprecate(\n            'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n            function () {\n                var other = createLocal.apply(null, arguments);\n                if (this.isValid() && other.isValid()) {\n                    return other < this ? this : other;\n                } else {\n                    return createInvalid();\n                }\n            }\n        ),\n        prototypeMax = deprecate(\n            'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n            function () {\n                var other = createLocal.apply(null, arguments);\n                if (this.isValid() && other.isValid()) {\n                    return other > this ? this : other;\n                } else {\n                    return createInvalid();\n                }\n            }\n        );\n\n    // Pick a moment m from moments so that m[fn](other) is true for all\n    // other. This relies on the function fn to be transitive.\n    //\n    // moments should either be an array of moment objects or an array, whose\n    // first element is an array of moment objects.\n    function pickBy(fn, moments) {\n        var res, i;\n        if (moments.length === 1 && isArray(moments[0])) {\n            moments = moments[0];\n        }\n        if (!moments.length) {\n            return createLocal();\n        }\n        res = moments[0];\n        for (i = 1; i < moments.length; ++i) {\n            if (!moments[i].isValid() || moments[i][fn](res)) {\n                res = moments[i];\n            }\n        }\n        return res;\n    }\n\n    // TODO: Use [].sort instead?\n    function min() {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isBefore', args);\n    }\n\n    function max() {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isAfter', args);\n    }\n\n    var now = function () {\n        return Date.now ? Date.now() : +new Date();\n    };\n\n    var ordering = [\n        'year',\n        'quarter',\n        'month',\n        'week',\n        'day',\n        'hour',\n        'minute',\n        'second',\n        'millisecond',\n    ];\n\n    function isDurationValid(m) {\n        var key,\n            unitHasDecimal = false,\n            i;\n        for (key in m) {\n            if (\n                hasOwnProp(m, key) &&\n                !(\n                    indexOf.call(ordering, key) !== -1 &&\n                    (m[key] == null || !isNaN(m[key]))\n                )\n            ) {\n                return false;\n            }\n        }\n\n        for (i = 0; i < ordering.length; ++i) {\n            if (m[ordering[i]]) {\n                if (unitHasDecimal) {\n                    return false; // only allow non-integers for smallest unit\n                }\n                if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n                    unitHasDecimal = true;\n                }\n            }\n        }\n\n        return true;\n    }\n\n    function isValid$1() {\n        return this._isValid;\n    }\n\n    function createInvalid$1() {\n        return createDuration(NaN);\n    }\n\n    function Duration(duration) {\n        var normalizedInput = normalizeObjectUnits(duration),\n            years = normalizedInput.year || 0,\n            quarters = normalizedInput.quarter || 0,\n            months = normalizedInput.month || 0,\n            weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n            days = normalizedInput.day || 0,\n            hours = normalizedInput.hour || 0,\n            minutes = normalizedInput.minute || 0,\n            seconds = normalizedInput.second || 0,\n            milliseconds = normalizedInput.millisecond || 0;\n\n        this._isValid = isDurationValid(normalizedInput);\n\n        // representation for dateAddRemove\n        this._milliseconds =\n            +milliseconds +\n            seconds * 1e3 + // 1000\n            minutes * 6e4 + // 1000 * 60\n            hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n        // Because of dateAddRemove treats 24 hours as different from a\n        // day when working around DST, we need to store them separately\n        this._days = +days + weeks * 7;\n        // It is impossible to translate months into days without knowing\n        // which months you are are talking about, so we have to store\n        // it separately.\n        this._months = +months + quarters * 3 + years * 12;\n\n        this._data = {};\n\n        this._locale = getLocale();\n\n        this._bubble();\n    }\n\n    function isDuration(obj) {\n        return obj instanceof Duration;\n    }\n\n    function absRound(number) {\n        if (number < 0) {\n            return Math.round(-1 * number) * -1;\n        } else {\n            return Math.round(number);\n        }\n    }\n\n    // compare two arrays, return the number of differences\n    function compareArrays(array1, array2, dontConvert) {\n        var len = Math.min(array1.length, array2.length),\n            lengthDiff = Math.abs(array1.length - array2.length),\n            diffs = 0,\n            i;\n        for (i = 0; i < len; i++) {\n            if (\n                (dontConvert && array1[i] !== array2[i]) ||\n                (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))\n            ) {\n                diffs++;\n            }\n        }\n        return diffs + lengthDiff;\n    }\n\n    // FORMATTING\n\n    function offset(token, separator) {\n        addFormatToken(token, 0, 0, function () {\n            var offset = this.utcOffset(),\n                sign = '+';\n            if (offset < 0) {\n                offset = -offset;\n                sign = '-';\n            }\n            return (\n                sign +\n                zeroFill(~~(offset / 60), 2) +\n                separator +\n                zeroFill(~~offset % 60, 2)\n            );\n        });\n    }\n\n    offset('Z', ':');\n    offset('ZZ', '');\n\n    // PARSING\n\n    addRegexToken('Z', matchShortOffset);\n    addRegexToken('ZZ', matchShortOffset);\n    addParseToken(['Z', 'ZZ'], function (input, array, config) {\n        config._useUTC = true;\n        config._tzm = offsetFromString(matchShortOffset, input);\n    });\n\n    // HELPERS\n\n    // timezone chunker\n    // '+10:00' > ['10',  '00']\n    // '-1530'  > ['-15', '30']\n    var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n    function offsetFromString(matcher, string) {\n        var matches = (string || '').match(matcher),\n            chunk,\n            parts,\n            minutes;\n\n        if (matches === null) {\n            return null;\n        }\n\n        chunk = matches[matches.length - 1] || [];\n        parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n        minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n        return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n    }\n\n    // Return a moment from input, that is local/utc/zone equivalent to model.\n    function cloneWithOffset(input, model) {\n        var res, diff;\n        if (model._isUTC) {\n            res = model.clone();\n            diff =\n                (isMoment(input) || isDate(input)\n                    ? input.valueOf()\n                    : createLocal(input).valueOf()) - res.valueOf();\n            // Use low-level api, because this fn is low-level api.\n            res._d.setTime(res._d.valueOf() + diff);\n            hooks.updateOffset(res, false);\n            return res;\n        } else {\n            return createLocal(input).local();\n        }\n    }\n\n    function getDateOffset(m) {\n        // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n        // https://github.com/moment/moment/pull/1871\n        return -Math.round(m._d.getTimezoneOffset());\n    }\n\n    // HOOKS\n\n    // This function will be called whenever a moment is mutated.\n    // It is intended to keep the offset in sync with the timezone.\n    hooks.updateOffset = function () {};\n\n    // MOMENTS\n\n    // keepLocalTime = true means only change the timezone, without\n    // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n    // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n    // +0200, so we adjust the time as needed, to be valid.\n    //\n    // Keeping the time actually adds/subtracts (one hour)\n    // from the actual represented time. That is why we call updateOffset\n    // a second time. In case it wants us to change the offset again\n    // _changeInProgress == true case, then we have to adjust, because\n    // there is no such time in the given timezone.\n    function getSetOffset(input, keepLocalTime, keepMinutes) {\n        var offset = this._offset || 0,\n            localAdjust;\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        if (input != null) {\n            if (typeof input === 'string') {\n                input = offsetFromString(matchShortOffset, input);\n                if (input === null) {\n                    return this;\n                }\n            } else if (Math.abs(input) < 16 && !keepMinutes) {\n                input = input * 60;\n            }\n            if (!this._isUTC && keepLocalTime) {\n                localAdjust = getDateOffset(this);\n            }\n            this._offset = input;\n            this._isUTC = true;\n            if (localAdjust != null) {\n                this.add(localAdjust, 'm');\n            }\n            if (offset !== input) {\n                if (!keepLocalTime || this._changeInProgress) {\n                    addSubtract(\n                        this,\n                        createDuration(input - offset, 'm'),\n                        1,\n                        false\n                    );\n                } else if (!this._changeInProgress) {\n                    this._changeInProgress = true;\n                    hooks.updateOffset(this, true);\n                    this._changeInProgress = null;\n                }\n            }\n            return this;\n        } else {\n            return this._isUTC ? offset : getDateOffset(this);\n        }\n    }\n\n    function getSetZone(input, keepLocalTime) {\n        if (input != null) {\n            if (typeof input !== 'string') {\n                input = -input;\n            }\n\n            this.utcOffset(input, keepLocalTime);\n\n            return this;\n        } else {\n            return -this.utcOffset();\n        }\n    }\n\n    function setOffsetToUTC(keepLocalTime) {\n        return this.utcOffset(0, keepLocalTime);\n    }\n\n    function setOffsetToLocal(keepLocalTime) {\n        if (this._isUTC) {\n            this.utcOffset(0, keepLocalTime);\n            this._isUTC = false;\n\n            if (keepLocalTime) {\n                this.subtract(getDateOffset(this), 'm');\n            }\n        }\n        return this;\n    }\n\n    function setOffsetToParsedOffset() {\n        if (this._tzm != null) {\n            this.utcOffset(this._tzm, false, true);\n        } else if (typeof this._i === 'string') {\n            var tZone = offsetFromString(matchOffset, this._i);\n            if (tZone != null) {\n                this.utcOffset(tZone);\n            } else {\n                this.utcOffset(0, true);\n            }\n        }\n        return this;\n    }\n\n    function hasAlignedHourOffset(input) {\n        if (!this.isValid()) {\n            return false;\n        }\n        input = input ? createLocal(input).utcOffset() : 0;\n\n        return (this.utcOffset() - input) % 60 === 0;\n    }\n\n    function isDaylightSavingTime() {\n        return (\n            this.utcOffset() > this.clone().month(0).utcOffset() ||\n            this.utcOffset() > this.clone().month(5).utcOffset()\n        );\n    }\n\n    function isDaylightSavingTimeShifted() {\n        if (!isUndefined(this._isDSTShifted)) {\n            return this._isDSTShifted;\n        }\n\n        var c = {},\n            other;\n\n        copyConfig(c, this);\n        c = prepareConfig(c);\n\n        if (c._a) {\n            other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n            this._isDSTShifted =\n                this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n        } else {\n            this._isDSTShifted = false;\n        }\n\n        return this._isDSTShifted;\n    }\n\n    function isLocal() {\n        return this.isValid() ? !this._isUTC : false;\n    }\n\n    function isUtcOffset() {\n        return this.isValid() ? this._isUTC : false;\n    }\n\n    function isUtc() {\n        return this.isValid() ? this._isUTC && this._offset === 0 : false;\n    }\n\n    // ASP.NET json date format regex\n    var aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,\n        // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n        // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n        // and further modified to allow for strings containing both week and day\n        isoRegex = /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n    function createDuration(input, key) {\n        var duration = input,\n            // matching against regexp is expensive, do it on demand\n            match = null,\n            sign,\n            ret,\n            diffRes;\n\n        if (isDuration(input)) {\n            duration = {\n                ms: input._milliseconds,\n                d: input._days,\n                M: input._months,\n            };\n        } else if (isNumber(input) || !isNaN(+input)) {\n            duration = {};\n            if (key) {\n                duration[key] = +input;\n            } else {\n                duration.milliseconds = +input;\n            }\n        } else if ((match = aspNetRegex.exec(input))) {\n            sign = match[1] === '-' ? -1 : 1;\n            duration = {\n                y: 0,\n                d: toInt(match[DATE]) * sign,\n                h: toInt(match[HOUR]) * sign,\n                m: toInt(match[MINUTE]) * sign,\n                s: toInt(match[SECOND]) * sign,\n                ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match\n            };\n        } else if ((match = isoRegex.exec(input))) {\n            sign = match[1] === '-' ? -1 : 1;\n            duration = {\n                y: parseIso(match[2], sign),\n                M: parseIso(match[3], sign),\n                w: parseIso(match[4], sign),\n                d: parseIso(match[5], sign),\n                h: parseIso(match[6], sign),\n                m: parseIso(match[7], sign),\n                s: parseIso(match[8], sign),\n            };\n        } else if (duration == null) {\n            // checks for null or undefined\n            duration = {};\n        } else if (\n            typeof duration === 'object' &&\n            ('from' in duration || 'to' in duration)\n        ) {\n            diffRes = momentsDifference(\n                createLocal(duration.from),\n                createLocal(duration.to)\n            );\n\n            duration = {};\n            duration.ms = diffRes.milliseconds;\n            duration.M = diffRes.months;\n        }\n\n        ret = new Duration(duration);\n\n        if (isDuration(input) && hasOwnProp(input, '_locale')) {\n            ret._locale = input._locale;\n        }\n\n        if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n            ret._isValid = input._isValid;\n        }\n\n        return ret;\n    }\n\n    createDuration.fn = Duration.prototype;\n    createDuration.invalid = createInvalid$1;\n\n    function parseIso(inp, sign) {\n        // We'd normally use ~~inp for this, but unfortunately it also\n        // converts floats to ints.\n        // inp may be undefined, so careful calling replace on it.\n        var res = inp && parseFloat(inp.replace(',', '.'));\n        // apply sign while we're at it\n        return (isNaN(res) ? 0 : res) * sign;\n    }\n\n    function positiveMomentsDifference(base, other) {\n        var res = {};\n\n        res.months =\n            other.month() - base.month() + (other.year() - base.year()) * 12;\n        if (base.clone().add(res.months, 'M').isAfter(other)) {\n            --res.months;\n        }\n\n        res.milliseconds = +other - +base.clone().add(res.months, 'M');\n\n        return res;\n    }\n\n    function momentsDifference(base, other) {\n        var res;\n        if (!(base.isValid() && other.isValid())) {\n            return { milliseconds: 0, months: 0 };\n        }\n\n        other = cloneWithOffset(other, base);\n        if (base.isBefore(other)) {\n            res = positiveMomentsDifference(base, other);\n        } else {\n            res = positiveMomentsDifference(other, base);\n            res.milliseconds = -res.milliseconds;\n            res.months = -res.months;\n        }\n\n        return res;\n    }\n\n    // TODO: remove 'name' arg after deprecation is removed\n    function createAdder(direction, name) {\n        return function (val, period) {\n            var dur, tmp;\n            //invert the arguments, but complain about it\n            if (period !== null && !isNaN(+period)) {\n                deprecateSimple(\n                    name,\n                    'moment().' +\n                        name +\n                        '(period, number) is deprecated. Please use moment().' +\n                        name +\n                        '(number, period). ' +\n                        'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'\n                );\n                tmp = val;\n                val = period;\n                period = tmp;\n            }\n\n            dur = createDuration(val, period);\n            addSubtract(this, dur, direction);\n            return this;\n        };\n    }\n\n    function addSubtract(mom, duration, isAdding, updateOffset) {\n        var milliseconds = duration._milliseconds,\n            days = absRound(duration._days),\n            months = absRound(duration._months);\n\n        if (!mom.isValid()) {\n            // No op\n            return;\n        }\n\n        updateOffset = updateOffset == null ? true : updateOffset;\n\n        if (months) {\n            setMonth(mom, get(mom, 'Month') + months * isAdding);\n        }\n        if (days) {\n            set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n        }\n        if (milliseconds) {\n            mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n        }\n        if (updateOffset) {\n            hooks.updateOffset(mom, days || months);\n        }\n    }\n\n    var add = createAdder(1, 'add'),\n        subtract = createAdder(-1, 'subtract');\n\n    function isString(input) {\n        return typeof input === 'string' || input instanceof String;\n    }\n\n    // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\n    function isMomentInput(input) {\n        return (\n            isMoment(input) ||\n            isDate(input) ||\n            isString(input) ||\n            isNumber(input) ||\n            isNumberOrStringArray(input) ||\n            isMomentInputObject(input) ||\n            input === null ||\n            input === undefined\n        );\n    }\n\n    function isMomentInputObject(input) {\n        var objectTest = isObject(input) && !isObjectEmpty(input),\n            propertyTest = false,\n            properties = [\n                'years',\n                'year',\n                'y',\n                'months',\n                'month',\n                'M',\n                'days',\n                'day',\n                'd',\n                'dates',\n                'date',\n                'D',\n                'hours',\n                'hour',\n                'h',\n                'minutes',\n                'minute',\n                'm',\n                'seconds',\n                'second',\n                's',\n                'milliseconds',\n                'millisecond',\n                'ms',\n            ],\n            i,\n            property;\n\n        for (i = 0; i < properties.length; i += 1) {\n            property = properties[i];\n            propertyTest = propertyTest || hasOwnProp(input, property);\n        }\n\n        return objectTest && propertyTest;\n    }\n\n    function isNumberOrStringArray(input) {\n        var arrayTest = isArray(input),\n            dataTypeTest = false;\n        if (arrayTest) {\n            dataTypeTest =\n                input.filter(function (item) {\n                    return !isNumber(item) && isString(input);\n                }).length === 0;\n        }\n        return arrayTest && dataTypeTest;\n    }\n\n    function isCalendarSpec(input) {\n        var objectTest = isObject(input) && !isObjectEmpty(input),\n            propertyTest = false,\n            properties = [\n                'sameDay',\n                'nextDay',\n                'lastDay',\n                'nextWeek',\n                'lastWeek',\n                'sameElse',\n            ],\n            i,\n            property;\n\n        for (i = 0; i < properties.length; i += 1) {\n            property = properties[i];\n            propertyTest = propertyTest || hasOwnProp(input, property);\n        }\n\n        return objectTest && propertyTest;\n    }\n\n    function getCalendarFormat(myMoment, now) {\n        var diff = myMoment.diff(now, 'days', true);\n        return diff < -6\n            ? 'sameElse'\n            : diff < -1\n            ? 'lastWeek'\n            : diff < 0\n            ? 'lastDay'\n            : diff < 1\n            ? 'sameDay'\n            : diff < 2\n            ? 'nextDay'\n            : diff < 7\n            ? 'nextWeek'\n            : 'sameElse';\n    }\n\n    function calendar$1(time, formats) {\n        // Support for single parameter, formats only overload to the calendar function\n        if (arguments.length === 1) {\n            if (!arguments[0]) {\n                time = undefined;\n                formats = undefined;\n            } else if (isMomentInput(arguments[0])) {\n                time = arguments[0];\n                formats = undefined;\n            } else if (isCalendarSpec(arguments[0])) {\n                formats = arguments[0];\n                time = undefined;\n            }\n        }\n        // We want to compare the start of today, vs this.\n        // Getting start-of-today depends on whether we're local/utc/offset or not.\n        var now = time || createLocal(),\n            sod = cloneWithOffset(now, this).startOf('day'),\n            format = hooks.calendarFormat(this, sod) || 'sameElse',\n            output =\n                formats &&\n                (isFunction(formats[format])\n                    ? formats[format].call(this, now)\n                    : formats[format]);\n\n        return this.format(\n            output || this.localeData().calendar(format, this, createLocal(now))\n        );\n    }\n\n    function clone() {\n        return new Moment(this);\n    }\n\n    function isAfter(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() > localInput.valueOf();\n        } else {\n            return localInput.valueOf() < this.clone().startOf(units).valueOf();\n        }\n    }\n\n    function isBefore(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() < localInput.valueOf();\n        } else {\n            return this.clone().endOf(units).valueOf() < localInput.valueOf();\n        }\n    }\n\n    function isBetween(from, to, units, inclusivity) {\n        var localFrom = isMoment(from) ? from : createLocal(from),\n            localTo = isMoment(to) ? to : createLocal(to);\n        if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n            return false;\n        }\n        inclusivity = inclusivity || '()';\n        return (\n            (inclusivity[0] === '('\n                ? this.isAfter(localFrom, units)\n                : !this.isBefore(localFrom, units)) &&\n            (inclusivity[1] === ')'\n                ? this.isBefore(localTo, units)\n                : !this.isAfter(localTo, units))\n        );\n    }\n\n    function isSame(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input),\n            inputMs;\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() === localInput.valueOf();\n        } else {\n            inputMs = localInput.valueOf();\n            return (\n                this.clone().startOf(units).valueOf() <= inputMs &&\n                inputMs <= this.clone().endOf(units).valueOf()\n            );\n        }\n    }\n\n    function isSameOrAfter(input, units) {\n        return this.isSame(input, units) || this.isAfter(input, units);\n    }\n\n    function isSameOrBefore(input, units) {\n        return this.isSame(input, units) || this.isBefore(input, units);\n    }\n\n    function diff(input, units, asFloat) {\n        var that, zoneDelta, output;\n\n        if (!this.isValid()) {\n            return NaN;\n        }\n\n        that = cloneWithOffset(input, this);\n\n        if (!that.isValid()) {\n            return NaN;\n        }\n\n        zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n        units = normalizeUnits(units);\n\n        switch (units) {\n            case 'year':\n                output = monthDiff(this, that) / 12;\n                break;\n            case 'month':\n                output = monthDiff(this, that);\n                break;\n            case 'quarter':\n                output = monthDiff(this, that) / 3;\n                break;\n            case 'second':\n                output = (this - that) / 1e3;\n                break; // 1000\n            case 'minute':\n                output = (this - that) / 6e4;\n                break; // 1000 * 60\n            case 'hour':\n                output = (this - that) / 36e5;\n                break; // 1000 * 60 * 60\n            case 'day':\n                output = (this - that - zoneDelta) / 864e5;\n                break; // 1000 * 60 * 60 * 24, negate dst\n            case 'week':\n                output = (this - that - zoneDelta) / 6048e5;\n                break; // 1000 * 60 * 60 * 24 * 7, negate dst\n            default:\n                output = this - that;\n        }\n\n        return asFloat ? output : absFloor(output);\n    }\n\n    function monthDiff(a, b) {\n        if (a.date() < b.date()) {\n            // end-of-month calculations work correct when the start month has more\n            // days than the end month.\n            return -monthDiff(b, a);\n        }\n        // difference in months\n        var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n            // b is in (anchor - 1 month, anchor + 1 month)\n            anchor = a.clone().add(wholeMonthDiff, 'months'),\n            anchor2,\n            adjust;\n\n        if (b - anchor < 0) {\n            anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor - anchor2);\n        } else {\n            anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor2 - anchor);\n        }\n\n        //check for negative zero, return zero if negative zero\n        return -(wholeMonthDiff + adjust) || 0;\n    }\n\n    hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n    hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n    function toString() {\n        return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n    }\n\n    function toISOString(keepOffset) {\n        if (!this.isValid()) {\n            return null;\n        }\n        var utc = keepOffset !== true,\n            m = utc ? this.clone().utc() : this;\n        if (m.year() < 0 || m.year() > 9999) {\n            return formatMoment(\n                m,\n                utc\n                    ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\n                    : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'\n            );\n        }\n        if (isFunction(Date.prototype.toISOString)) {\n            // native implementation is ~50x faster, use it when we can\n            if (utc) {\n                return this.toDate().toISOString();\n            } else {\n                return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)\n                    .toISOString()\n                    .replace('Z', formatMoment(m, 'Z'));\n            }\n        }\n        return formatMoment(\n            m,\n            utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'\n        );\n    }\n\n    /**\n     * Return a human readable representation of a moment that can\n     * also be evaluated to get a new moment which is the same\n     *\n     * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n     */\n    function inspect() {\n        if (!this.isValid()) {\n            return 'moment.invalid(/* ' + this._i + ' */)';\n        }\n        var func = 'moment',\n            zone = '',\n            prefix,\n            year,\n            datetime,\n            suffix;\n        if (!this.isLocal()) {\n            func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n            zone = 'Z';\n        }\n        prefix = '[' + func + '(\"]';\n        year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n        datetime = '-MM-DD[T]HH:mm:ss.SSS';\n        suffix = zone + '[\")]';\n\n        return this.format(prefix + year + datetime + suffix);\n    }\n\n    function format(inputString) {\n        if (!inputString) {\n            inputString = this.isUtc()\n                ? hooks.defaultFormatUtc\n                : hooks.defaultFormat;\n        }\n        var output = formatMoment(this, inputString);\n        return this.localeData().postformat(output);\n    }\n\n    function from(time, withoutSuffix) {\n        if (\n            this.isValid() &&\n            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n        ) {\n            return createDuration({ to: this, from: time })\n                .locale(this.locale())\n                .humanize(!withoutSuffix);\n        } else {\n            return this.localeData().invalidDate();\n        }\n    }\n\n    function fromNow(withoutSuffix) {\n        return this.from(createLocal(), withoutSuffix);\n    }\n\n    function to(time, withoutSuffix) {\n        if (\n            this.isValid() &&\n            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n        ) {\n            return createDuration({ from: this, to: time })\n                .locale(this.locale())\n                .humanize(!withoutSuffix);\n        } else {\n            return this.localeData().invalidDate();\n        }\n    }\n\n    function toNow(withoutSuffix) {\n        return this.to(createLocal(), withoutSuffix);\n    }\n\n    // If passed a locale key, it will set the locale for this\n    // instance.  Otherwise, it will return the locale configuration\n    // variables for this instance.\n    function locale(key) {\n        var newLocaleData;\n\n        if (key === undefined) {\n            return this._locale._abbr;\n        } else {\n            newLocaleData = getLocale(key);\n            if (newLocaleData != null) {\n                this._locale = newLocaleData;\n            }\n            return this;\n        }\n    }\n\n    var lang = deprecate(\n        'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n        function (key) {\n            if (key === undefined) {\n                return this.localeData();\n            } else {\n                return this.locale(key);\n            }\n        }\n    );\n\n    function localeData() {\n        return this._locale;\n    }\n\n    var MS_PER_SECOND = 1000,\n        MS_PER_MINUTE = 60 * MS_PER_SECOND,\n        MS_PER_HOUR = 60 * MS_PER_MINUTE,\n        MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n    // actual modulo - handles negative numbers (for dates before 1970):\n    function mod$1(dividend, divisor) {\n        return ((dividend % divisor) + divisor) % divisor;\n    }\n\n    function localStartOfDate(y, m, d) {\n        // the date constructor remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n        } else {\n            return new Date(y, m, d).valueOf();\n        }\n    }\n\n    function utcStartOfDate(y, m, d) {\n        // Date.UTC remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n        } else {\n            return Date.UTC(y, m, d);\n        }\n    }\n\n    function startOf(units) {\n        var time, startOfDate;\n        units = normalizeUnits(units);\n        if (units === undefined || units === 'millisecond' || !this.isValid()) {\n            return this;\n        }\n\n        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n        switch (units) {\n            case 'year':\n                time = startOfDate(this.year(), 0, 1);\n                break;\n            case 'quarter':\n                time = startOfDate(\n                    this.year(),\n                    this.month() - (this.month() % 3),\n                    1\n                );\n                break;\n            case 'month':\n                time = startOfDate(this.year(), this.month(), 1);\n                break;\n            case 'week':\n                time = startOfDate(\n                    this.year(),\n                    this.month(),\n                    this.date() - this.weekday()\n                );\n                break;\n            case 'isoWeek':\n                time = startOfDate(\n                    this.year(),\n                    this.month(),\n                    this.date() - (this.isoWeekday() - 1)\n                );\n                break;\n            case 'day':\n            case 'date':\n                time = startOfDate(this.year(), this.month(), this.date());\n                break;\n            case 'hour':\n                time = this._d.valueOf();\n                time -= mod$1(\n                    time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n                    MS_PER_HOUR\n                );\n                break;\n            case 'minute':\n                time = this._d.valueOf();\n                time -= mod$1(time, MS_PER_MINUTE);\n                break;\n            case 'second':\n                time = this._d.valueOf();\n                time -= mod$1(time, MS_PER_SECOND);\n                break;\n        }\n\n        this._d.setTime(time);\n        hooks.updateOffset(this, true);\n        return this;\n    }\n\n    function endOf(units) {\n        var time, startOfDate;\n        units = normalizeUnits(units);\n        if (units === undefined || units === 'millisecond' || !this.isValid()) {\n            return this;\n        }\n\n        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n        switch (units) {\n            case 'year':\n                time = startOfDate(this.year() + 1, 0, 1) - 1;\n                break;\n            case 'quarter':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month() - (this.month() % 3) + 3,\n                        1\n                    ) - 1;\n                break;\n            case 'month':\n                time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n                break;\n            case 'week':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month(),\n                        this.date() - this.weekday() + 7\n                    ) - 1;\n                break;\n            case 'isoWeek':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month(),\n                        this.date() - (this.isoWeekday() - 1) + 7\n                    ) - 1;\n                break;\n            case 'day':\n            case 'date':\n                time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n                break;\n            case 'hour':\n                time = this._d.valueOf();\n                time +=\n                    MS_PER_HOUR -\n                    mod$1(\n                        time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n                        MS_PER_HOUR\n                    ) -\n                    1;\n                break;\n            case 'minute':\n                time = this._d.valueOf();\n                time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n                break;\n            case 'second':\n                time = this._d.valueOf();\n                time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n                break;\n        }\n\n        this._d.setTime(time);\n        hooks.updateOffset(this, true);\n        return this;\n    }\n\n    function valueOf() {\n        return this._d.valueOf() - (this._offset || 0) * 60000;\n    }\n\n    function unix() {\n        return Math.floor(this.valueOf() / 1000);\n    }\n\n    function toDate() {\n        return new Date(this.valueOf());\n    }\n\n    function toArray() {\n        var m = this;\n        return [\n            m.year(),\n            m.month(),\n            m.date(),\n            m.hour(),\n            m.minute(),\n            m.second(),\n            m.millisecond(),\n        ];\n    }\n\n    function toObject() {\n        var m = this;\n        return {\n            years: m.year(),\n            months: m.month(),\n            date: m.date(),\n            hours: m.hours(),\n            minutes: m.minutes(),\n            seconds: m.seconds(),\n            milliseconds: m.milliseconds(),\n        };\n    }\n\n    function toJSON() {\n        // new Date(NaN).toJSON() === null\n        return this.isValid() ? this.toISOString() : null;\n    }\n\n    function isValid$2() {\n        return isValid(this);\n    }\n\n    function parsingFlags() {\n        return extend({}, getParsingFlags(this));\n    }\n\n    function invalidAt() {\n        return getParsingFlags(this).overflow;\n    }\n\n    function creationData() {\n        return {\n            input: this._i,\n            format: this._f,\n            locale: this._locale,\n            isUTC: this._isUTC,\n            strict: this._strict,\n        };\n    }\n\n    addFormatToken('N', 0, 0, 'eraAbbr');\n    addFormatToken('NN', 0, 0, 'eraAbbr');\n    addFormatToken('NNN', 0, 0, 'eraAbbr');\n    addFormatToken('NNNN', 0, 0, 'eraName');\n    addFormatToken('NNNNN', 0, 0, 'eraNarrow');\n\n    addFormatToken('y', ['y', 1], 'yo', 'eraYear');\n    addFormatToken('y', ['yy', 2], 0, 'eraYear');\n    addFormatToken('y', ['yyy', 3], 0, 'eraYear');\n    addFormatToken('y', ['yyyy', 4], 0, 'eraYear');\n\n    addRegexToken('N', matchEraAbbr);\n    addRegexToken('NN', matchEraAbbr);\n    addRegexToken('NNN', matchEraAbbr);\n    addRegexToken('NNNN', matchEraName);\n    addRegexToken('NNNNN', matchEraNarrow);\n\n    addParseToken(['N', 'NN', 'NNN', 'NNNN', 'NNNNN'], function (\n        input,\n        array,\n        config,\n        token\n    ) {\n        var era = config._locale.erasParse(input, token, config._strict);\n        if (era) {\n            getParsingFlags(config).era = era;\n        } else {\n            getParsingFlags(config).invalidEra = input;\n        }\n    });\n\n    addRegexToken('y', matchUnsigned);\n    addRegexToken('yy', matchUnsigned);\n    addRegexToken('yyy', matchUnsigned);\n    addRegexToken('yyyy', matchUnsigned);\n    addRegexToken('yo', matchEraYearOrdinal);\n\n    addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\n    addParseToken(['yo'], function (input, array, config, token) {\n        var match;\n        if (config._locale._eraYearOrdinalRegex) {\n            match = input.match(config._locale._eraYearOrdinalRegex);\n        }\n\n        if (config._locale.eraYearOrdinalParse) {\n            array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n        } else {\n            array[YEAR] = parseInt(input, 10);\n        }\n    });\n\n    function localeEras(m, format) {\n        var i,\n            l,\n            date,\n            eras = this._eras || getLocale('en')._eras;\n        for (i = 0, l = eras.length; i < l; ++i) {\n            switch (typeof eras[i].since) {\n                case 'string':\n                    // truncate time\n                    date = hooks(eras[i].since).startOf('day');\n                    eras[i].since = date.valueOf();\n                    break;\n            }\n\n            switch (typeof eras[i].until) {\n                case 'undefined':\n                    eras[i].until = +Infinity;\n                    break;\n                case 'string':\n                    // truncate time\n                    date = hooks(eras[i].until).startOf('day').valueOf();\n                    eras[i].until = date.valueOf();\n                    break;\n            }\n        }\n        return eras;\n    }\n\n    function localeErasParse(eraName, format, strict) {\n        var i,\n            l,\n            eras = this.eras(),\n            name,\n            abbr,\n            narrow;\n        eraName = eraName.toUpperCase();\n\n        for (i = 0, l = eras.length; i < l; ++i) {\n            name = eras[i].name.toUpperCase();\n            abbr = eras[i].abbr.toUpperCase();\n            narrow = eras[i].narrow.toUpperCase();\n\n            if (strict) {\n                switch (format) {\n                    case 'N':\n                    case 'NN':\n                    case 'NNN':\n                        if (abbr === eraName) {\n                            return eras[i];\n                        }\n                        break;\n\n                    case 'NNNN':\n                        if (name === eraName) {\n                            return eras[i];\n                        }\n                        break;\n\n                    case 'NNNNN':\n                        if (narrow === eraName) {\n                            return eras[i];\n                        }\n                        break;\n                }\n            } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n                return eras[i];\n            }\n        }\n    }\n\n    function localeErasConvertYear(era, year) {\n        var dir = era.since <= era.until ? +1 : -1;\n        if (year === undefined) {\n            return hooks(era.since).year();\n        } else {\n            return hooks(era.since).year() + (year - era.offset) * dir;\n        }\n    }\n\n    function getEraName() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].name;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].name;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraNarrow() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].narrow;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].narrow;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraAbbr() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].abbr;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].abbr;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraYear() {\n        var i,\n            l,\n            dir,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            dir = eras[i].since <= eras[i].until ? +1 : -1;\n\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (\n                (eras[i].since <= val && val <= eras[i].until) ||\n                (eras[i].until <= val && val <= eras[i].since)\n            ) {\n                return (\n                    (this.year() - hooks(eras[i].since).year()) * dir +\n                    eras[i].offset\n                );\n            }\n        }\n\n        return this.year();\n    }\n\n    function erasNameRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasNameRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasNameRegex : this._erasRegex;\n    }\n\n    function erasAbbrRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasAbbrRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasAbbrRegex : this._erasRegex;\n    }\n\n    function erasNarrowRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasNarrowRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasNarrowRegex : this._erasRegex;\n    }\n\n    function matchEraAbbr(isStrict, locale) {\n        return locale.erasAbbrRegex(isStrict);\n    }\n\n    function matchEraName(isStrict, locale) {\n        return locale.erasNameRegex(isStrict);\n    }\n\n    function matchEraNarrow(isStrict, locale) {\n        return locale.erasNarrowRegex(isStrict);\n    }\n\n    function matchEraYearOrdinal(isStrict, locale) {\n        return locale._eraYearOrdinalRegex || matchUnsigned;\n    }\n\n    function computeErasParse() {\n        var abbrPieces = [],\n            namePieces = [],\n            narrowPieces = [],\n            mixedPieces = [],\n            i,\n            l,\n            eras = this.eras();\n\n        for (i = 0, l = eras.length; i < l; ++i) {\n            namePieces.push(regexEscape(eras[i].name));\n            abbrPieces.push(regexEscape(eras[i].abbr));\n            narrowPieces.push(regexEscape(eras[i].narrow));\n\n            mixedPieces.push(regexEscape(eras[i].name));\n            mixedPieces.push(regexEscape(eras[i].abbr));\n            mixedPieces.push(regexEscape(eras[i].narrow));\n        }\n\n        this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');\n        this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');\n        this._erasNarrowRegex = new RegExp(\n            '^(' + narrowPieces.join('|') + ')',\n            'i'\n        );\n    }\n\n    // FORMATTING\n\n    addFormatToken(0, ['gg', 2], 0, function () {\n        return this.weekYear() % 100;\n    });\n\n    addFormatToken(0, ['GG', 2], 0, function () {\n        return this.isoWeekYear() % 100;\n    });\n\n    function addWeekYearFormatToken(token, getter) {\n        addFormatToken(0, [token, token.length], 0, getter);\n    }\n\n    addWeekYearFormatToken('gggg', 'weekYear');\n    addWeekYearFormatToken('ggggg', 'weekYear');\n    addWeekYearFormatToken('GGGG', 'isoWeekYear');\n    addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n    // ALIASES\n\n    addUnitAlias('weekYear', 'gg');\n    addUnitAlias('isoWeekYear', 'GG');\n\n    // PRIORITY\n\n    addUnitPriority('weekYear', 1);\n    addUnitPriority('isoWeekYear', 1);\n\n    // PARSING\n\n    addRegexToken('G', matchSigned);\n    addRegexToken('g', matchSigned);\n    addRegexToken('GG', match1to2, match2);\n    addRegexToken('gg', match1to2, match2);\n    addRegexToken('GGGG', match1to4, match4);\n    addRegexToken('gggg', match1to4, match4);\n    addRegexToken('GGGGG', match1to6, match6);\n    addRegexToken('ggggg', match1to6, match6);\n\n    addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (\n        input,\n        week,\n        config,\n        token\n    ) {\n        week[token.substr(0, 2)] = toInt(input);\n    });\n\n    addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n        week[token] = hooks.parseTwoDigitYear(input);\n    });\n\n    // MOMENTS\n\n    function getSetWeekYear(input) {\n        return getSetWeekYearHelper.call(\n            this,\n            input,\n            this.week(),\n            this.weekday(),\n            this.localeData()._week.dow,\n            this.localeData()._week.doy\n        );\n    }\n\n    function getSetISOWeekYear(input) {\n        return getSetWeekYearHelper.call(\n            this,\n            input,\n            this.isoWeek(),\n            this.isoWeekday(),\n            1,\n            4\n        );\n    }\n\n    function getISOWeeksInYear() {\n        return weeksInYear(this.year(), 1, 4);\n    }\n\n    function getISOWeeksInISOWeekYear() {\n        return weeksInYear(this.isoWeekYear(), 1, 4);\n    }\n\n    function getWeeksInYear() {\n        var weekInfo = this.localeData()._week;\n        return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n    }\n\n    function getWeeksInWeekYear() {\n        var weekInfo = this.localeData()._week;\n        return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\n    }\n\n    function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n        var weeksTarget;\n        if (input == null) {\n            return weekOfYear(this, dow, doy).year;\n        } else {\n            weeksTarget = weeksInYear(input, dow, doy);\n            if (week > weeksTarget) {\n                week = weeksTarget;\n            }\n            return setWeekAll.call(this, input, week, weekday, dow, doy);\n        }\n    }\n\n    function setWeekAll(weekYear, week, weekday, dow, doy) {\n        var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n            date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n        this.year(date.getUTCFullYear());\n        this.month(date.getUTCMonth());\n        this.date(date.getUTCDate());\n        return this;\n    }\n\n    // FORMATTING\n\n    addFormatToken('Q', 0, 'Qo', 'quarter');\n\n    // ALIASES\n\n    addUnitAlias('quarter', 'Q');\n\n    // PRIORITY\n\n    addUnitPriority('quarter', 7);\n\n    // PARSING\n\n    addRegexToken('Q', match1);\n    addParseToken('Q', function (input, array) {\n        array[MONTH] = (toInt(input) - 1) * 3;\n    });\n\n    // MOMENTS\n\n    function getSetQuarter(input) {\n        return input == null\n            ? Math.ceil((this.month() + 1) / 3)\n            : this.month((input - 1) * 3 + (this.month() % 3));\n    }\n\n    // FORMATTING\n\n    addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n    // ALIASES\n\n    addUnitAlias('date', 'D');\n\n    // PRIORITY\n    addUnitPriority('date', 9);\n\n    // PARSING\n\n    addRegexToken('D', match1to2);\n    addRegexToken('DD', match1to2, match2);\n    addRegexToken('Do', function (isStrict, locale) {\n        // TODO: Remove \"ordinalParse\" fallback in next major release.\n        return isStrict\n            ? locale._dayOfMonthOrdinalParse || locale._ordinalParse\n            : locale._dayOfMonthOrdinalParseLenient;\n    });\n\n    addParseToken(['D', 'DD'], DATE);\n    addParseToken('Do', function (input, array) {\n        array[DATE] = toInt(input.match(match1to2)[0]);\n    });\n\n    // MOMENTS\n\n    var getSetDayOfMonth = makeGetSet('Date', true);\n\n    // FORMATTING\n\n    addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n    // ALIASES\n\n    addUnitAlias('dayOfYear', 'DDD');\n\n    // PRIORITY\n    addUnitPriority('dayOfYear', 4);\n\n    // PARSING\n\n    addRegexToken('DDD', match1to3);\n    addRegexToken('DDDD', match3);\n    addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n        config._dayOfYear = toInt(input);\n    });\n\n    // HELPERS\n\n    // MOMENTS\n\n    function getSetDayOfYear(input) {\n        var dayOfYear =\n            Math.round(\n                (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5\n            ) + 1;\n        return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n    }\n\n    // FORMATTING\n\n    addFormatToken('m', ['mm', 2], 0, 'minute');\n\n    // ALIASES\n\n    addUnitAlias('minute', 'm');\n\n    // PRIORITY\n\n    addUnitPriority('minute', 14);\n\n    // PARSING\n\n    addRegexToken('m', match1to2);\n    addRegexToken('mm', match1to2, match2);\n    addParseToken(['m', 'mm'], MINUTE);\n\n    // MOMENTS\n\n    var getSetMinute = makeGetSet('Minutes', false);\n\n    // FORMATTING\n\n    addFormatToken('s', ['ss', 2], 0, 'second');\n\n    // ALIASES\n\n    addUnitAlias('second', 's');\n\n    // PRIORITY\n\n    addUnitPriority('second', 15);\n\n    // PARSING\n\n    addRegexToken('s', match1to2);\n    addRegexToken('ss', match1to2, match2);\n    addParseToken(['s', 'ss'], SECOND);\n\n    // MOMENTS\n\n    var getSetSecond = makeGetSet('Seconds', false);\n\n    // FORMATTING\n\n    addFormatToken('S', 0, 0, function () {\n        return ~~(this.millisecond() / 100);\n    });\n\n    addFormatToken(0, ['SS', 2], 0, function () {\n        return ~~(this.millisecond() / 10);\n    });\n\n    addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n    addFormatToken(0, ['SSSS', 4], 0, function () {\n        return this.millisecond() * 10;\n    });\n    addFormatToken(0, ['SSSSS', 5], 0, function () {\n        return this.millisecond() * 100;\n    });\n    addFormatToken(0, ['SSSSSS', 6], 0, function () {\n        return this.millisecond() * 1000;\n    });\n    addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n        return this.millisecond() * 10000;\n    });\n    addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n        return this.millisecond() * 100000;\n    });\n    addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n        return this.millisecond() * 1000000;\n    });\n\n    // ALIASES\n\n    addUnitAlias('millisecond', 'ms');\n\n    // PRIORITY\n\n    addUnitPriority('millisecond', 16);\n\n    // PARSING\n\n    addRegexToken('S', match1to3, match1);\n    addRegexToken('SS', match1to3, match2);\n    addRegexToken('SSS', match1to3, match3);\n\n    var token, getSetMillisecond;\n    for (token = 'SSSS'; token.length <= 9; token += 'S') {\n        addRegexToken(token, matchUnsigned);\n    }\n\n    function parseMs(input, array) {\n        array[MILLISECOND] = toInt(('0.' + input) * 1000);\n    }\n\n    for (token = 'S'; token.length <= 9; token += 'S') {\n        addParseToken(token, parseMs);\n    }\n\n    getSetMillisecond = makeGetSet('Milliseconds', false);\n\n    // FORMATTING\n\n    addFormatToken('z', 0, 0, 'zoneAbbr');\n    addFormatToken('zz', 0, 0, 'zoneName');\n\n    // MOMENTS\n\n    function getZoneAbbr() {\n        return this._isUTC ? 'UTC' : '';\n    }\n\n    function getZoneName() {\n        return this._isUTC ? 'Coordinated Universal Time' : '';\n    }\n\n    var proto = Moment.prototype;\n\n    proto.add = add;\n    proto.calendar = calendar$1;\n    proto.clone = clone;\n    proto.diff = diff;\n    proto.endOf = endOf;\n    proto.format = format;\n    proto.from = from;\n    proto.fromNow = fromNow;\n    proto.to = to;\n    proto.toNow = toNow;\n    proto.get = stringGet;\n    proto.invalidAt = invalidAt;\n    proto.isAfter = isAfter;\n    proto.isBefore = isBefore;\n    proto.isBetween = isBetween;\n    proto.isSame = isSame;\n    proto.isSameOrAfter = isSameOrAfter;\n    proto.isSameOrBefore = isSameOrBefore;\n    proto.isValid = isValid$2;\n    proto.lang = lang;\n    proto.locale = locale;\n    proto.localeData = localeData;\n    proto.max = prototypeMax;\n    proto.min = prototypeMin;\n    proto.parsingFlags = parsingFlags;\n    proto.set = stringSet;\n    proto.startOf = startOf;\n    proto.subtract = subtract;\n    proto.toArray = toArray;\n    proto.toObject = toObject;\n    proto.toDate = toDate;\n    proto.toISOString = toISOString;\n    proto.inspect = inspect;\n    if (typeof Symbol !== 'undefined' && Symbol.for != null) {\n        proto[Symbol.for('nodejs.util.inspect.custom')] = function () {\n            return 'Moment<' + this.format() + '>';\n        };\n    }\n    proto.toJSON = toJSON;\n    proto.toString = toString;\n    proto.unix = unix;\n    proto.valueOf = valueOf;\n    proto.creationData = creationData;\n    proto.eraName = getEraName;\n    proto.eraNarrow = getEraNarrow;\n    proto.eraAbbr = getEraAbbr;\n    proto.eraYear = getEraYear;\n    proto.year = getSetYear;\n    proto.isLeapYear = getIsLeapYear;\n    proto.weekYear = getSetWeekYear;\n    proto.isoWeekYear = getSetISOWeekYear;\n    proto.quarter = proto.quarters = getSetQuarter;\n    proto.month = getSetMonth;\n    proto.daysInMonth = getDaysInMonth;\n    proto.week = proto.weeks = getSetWeek;\n    proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n    proto.weeksInYear = getWeeksInYear;\n    proto.weeksInWeekYear = getWeeksInWeekYear;\n    proto.isoWeeksInYear = getISOWeeksInYear;\n    proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\n    proto.date = getSetDayOfMonth;\n    proto.day = proto.days = getSetDayOfWeek;\n    proto.weekday = getSetLocaleDayOfWeek;\n    proto.isoWeekday = getSetISODayOfWeek;\n    proto.dayOfYear = getSetDayOfYear;\n    proto.hour = proto.hours = getSetHour;\n    proto.minute = proto.minutes = getSetMinute;\n    proto.second = proto.seconds = getSetSecond;\n    proto.millisecond = proto.milliseconds = getSetMillisecond;\n    proto.utcOffset = getSetOffset;\n    proto.utc = setOffsetToUTC;\n    proto.local = setOffsetToLocal;\n    proto.parseZone = setOffsetToParsedOffset;\n    proto.hasAlignedHourOffset = hasAlignedHourOffset;\n    proto.isDST = isDaylightSavingTime;\n    proto.isLocal = isLocal;\n    proto.isUtcOffset = isUtcOffset;\n    proto.isUtc = isUtc;\n    proto.isUTC = isUtc;\n    proto.zoneAbbr = getZoneAbbr;\n    proto.zoneName = getZoneName;\n    proto.dates = deprecate(\n        'dates accessor is deprecated. Use date instead.',\n        getSetDayOfMonth\n    );\n    proto.months = deprecate(\n        'months accessor is deprecated. Use month instead',\n        getSetMonth\n    );\n    proto.years = deprecate(\n        'years accessor is deprecated. Use year instead',\n        getSetYear\n    );\n    proto.zone = deprecate(\n        'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',\n        getSetZone\n    );\n    proto.isDSTShifted = deprecate(\n        'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',\n        isDaylightSavingTimeShifted\n    );\n\n    function createUnix(input) {\n        return createLocal(input * 1000);\n    }\n\n    function createInZone() {\n        return createLocal.apply(null, arguments).parseZone();\n    }\n\n    function preParsePostFormat(string) {\n        return string;\n    }\n\n    var proto$1 = Locale.prototype;\n\n    proto$1.calendar = calendar;\n    proto$1.longDateFormat = longDateFormat;\n    proto$1.invalidDate = invalidDate;\n    proto$1.ordinal = ordinal;\n    proto$1.preparse = preParsePostFormat;\n    proto$1.postformat = preParsePostFormat;\n    proto$1.relativeTime = relativeTime;\n    proto$1.pastFuture = pastFuture;\n    proto$1.set = set;\n    proto$1.eras = localeEras;\n    proto$1.erasParse = localeErasParse;\n    proto$1.erasConvertYear = localeErasConvertYear;\n    proto$1.erasAbbrRegex = erasAbbrRegex;\n    proto$1.erasNameRegex = erasNameRegex;\n    proto$1.erasNarrowRegex = erasNarrowRegex;\n\n    proto$1.months = localeMonths;\n    proto$1.monthsShort = localeMonthsShort;\n    proto$1.monthsParse = localeMonthsParse;\n    proto$1.monthsRegex = monthsRegex;\n    proto$1.monthsShortRegex = monthsShortRegex;\n    proto$1.week = localeWeek;\n    proto$1.firstDayOfYear = localeFirstDayOfYear;\n    proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n    proto$1.weekdays = localeWeekdays;\n    proto$1.weekdaysMin = localeWeekdaysMin;\n    proto$1.weekdaysShort = localeWeekdaysShort;\n    proto$1.weekdaysParse = localeWeekdaysParse;\n\n    proto$1.weekdaysRegex = weekdaysRegex;\n    proto$1.weekdaysShortRegex = weekdaysShortRegex;\n    proto$1.weekdaysMinRegex = weekdaysMinRegex;\n\n    proto$1.isPM = localeIsPM;\n    proto$1.meridiem = localeMeridiem;\n\n    function get$1(format, index, field, setter) {\n        var locale = getLocale(),\n            utc = createUTC().set(setter, index);\n        return locale[field](utc, format);\n    }\n\n    function listMonthsImpl(format, index, field) {\n        if (isNumber(format)) {\n            index = format;\n            format = undefined;\n        }\n\n        format = format || '';\n\n        if (index != null) {\n            return get$1(format, index, field, 'month');\n        }\n\n        var i,\n            out = [];\n        for (i = 0; i < 12; i++) {\n            out[i] = get$1(format, i, field, 'month');\n        }\n        return out;\n    }\n\n    // ()\n    // (5)\n    // (fmt, 5)\n    // (fmt)\n    // (true)\n    // (true, 5)\n    // (true, fmt, 5)\n    // (true, fmt)\n    function listWeekdaysImpl(localeSorted, format, index, field) {\n        if (typeof localeSorted === 'boolean') {\n            if (isNumber(format)) {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        } else {\n            format = localeSorted;\n            index = format;\n            localeSorted = false;\n\n            if (isNumber(format)) {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        }\n\n        var locale = getLocale(),\n            shift = localeSorted ? locale._week.dow : 0,\n            i,\n            out = [];\n\n        if (index != null) {\n            return get$1(format, (index + shift) % 7, field, 'day');\n        }\n\n        for (i = 0; i < 7; i++) {\n            out[i] = get$1(format, (i + shift) % 7, field, 'day');\n        }\n        return out;\n    }\n\n    function listMonths(format, index) {\n        return listMonthsImpl(format, index, 'months');\n    }\n\n    function listMonthsShort(format, index) {\n        return listMonthsImpl(format, index, 'monthsShort');\n    }\n\n    function listWeekdays(localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n    }\n\n    function listWeekdaysShort(localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n    }\n\n    function listWeekdaysMin(localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n    }\n\n    getSetGlobalLocale('en', {\n        eras: [\n            {\n                since: '0001-01-01',\n                until: +Infinity,\n                offset: 1,\n                name: 'Anno Domini',\n                narrow: 'AD',\n                abbr: 'AD',\n            },\n            {\n                since: '0000-12-31',\n                until: -Infinity,\n                offset: 1,\n                name: 'Before Christ',\n                narrow: 'BC',\n                abbr: 'BC',\n            },\n        ],\n        dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    toInt((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                        ? 'st'\n                        : b === 2\n                        ? 'nd'\n                        : b === 3\n                        ? 'rd'\n                        : 'th';\n            return number + output;\n        },\n    });\n\n    // Side effect imports\n\n    hooks.lang = deprecate(\n        'moment.lang is deprecated. Use moment.locale instead.',\n        getSetGlobalLocale\n    );\n    hooks.langData = deprecate(\n        'moment.langData is deprecated. Use moment.localeData instead.',\n        getLocale\n    );\n\n    var mathAbs = Math.abs;\n\n    function abs() {\n        var data = this._data;\n\n        this._milliseconds = mathAbs(this._milliseconds);\n        this._days = mathAbs(this._days);\n        this._months = mathAbs(this._months);\n\n        data.milliseconds = mathAbs(data.milliseconds);\n        data.seconds = mathAbs(data.seconds);\n        data.minutes = mathAbs(data.minutes);\n        data.hours = mathAbs(data.hours);\n        data.months = mathAbs(data.months);\n        data.years = mathAbs(data.years);\n\n        return this;\n    }\n\n    function addSubtract$1(duration, input, value, direction) {\n        var other = createDuration(input, value);\n\n        duration._milliseconds += direction * other._milliseconds;\n        duration._days += direction * other._days;\n        duration._months += direction * other._months;\n\n        return duration._bubble();\n    }\n\n    // supports only 2.0-style add(1, 's') or add(duration)\n    function add$1(input, value) {\n        return addSubtract$1(this, input, value, 1);\n    }\n\n    // supports only 2.0-style subtract(1, 's') or subtract(duration)\n    function subtract$1(input, value) {\n        return addSubtract$1(this, input, value, -1);\n    }\n\n    function absCeil(number) {\n        if (number < 0) {\n            return Math.floor(number);\n        } else {\n            return Math.ceil(number);\n        }\n    }\n\n    function bubble() {\n        var milliseconds = this._milliseconds,\n            days = this._days,\n            months = this._months,\n            data = this._data,\n            seconds,\n            minutes,\n            hours,\n            years,\n            monthsFromDays;\n\n        // if we have a mix of positive and negative values, bubble down first\n        // check: https://github.com/moment/moment/issues/2166\n        if (\n            !(\n                (milliseconds >= 0 && days >= 0 && months >= 0) ||\n                (milliseconds <= 0 && days <= 0 && months <= 0)\n            )\n        ) {\n            milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n            days = 0;\n            months = 0;\n        }\n\n        // The following code bubbles up values, see the tests for\n        // examples of what that means.\n        data.milliseconds = milliseconds % 1000;\n\n        seconds = absFloor(milliseconds / 1000);\n        data.seconds = seconds % 60;\n\n        minutes = absFloor(seconds / 60);\n        data.minutes = minutes % 60;\n\n        hours = absFloor(minutes / 60);\n        data.hours = hours % 24;\n\n        days += absFloor(hours / 24);\n\n        // convert days to months\n        monthsFromDays = absFloor(daysToMonths(days));\n        months += monthsFromDays;\n        days -= absCeil(monthsToDays(monthsFromDays));\n\n        // 12 months -> 1 year\n        years = absFloor(months / 12);\n        months %= 12;\n\n        data.days = days;\n        data.months = months;\n        data.years = years;\n\n        return this;\n    }\n\n    function daysToMonths(days) {\n        // 400 years have 146097 days (taking into account leap year rules)\n        // 400 years have 12 months === 4800\n        return (days * 4800) / 146097;\n    }\n\n    function monthsToDays(months) {\n        // the reverse of daysToMonths\n        return (months * 146097) / 4800;\n    }\n\n    function as(units) {\n        if (!this.isValid()) {\n            return NaN;\n        }\n        var days,\n            months,\n            milliseconds = this._milliseconds;\n\n        units = normalizeUnits(units);\n\n        if (units === 'month' || units === 'quarter' || units === 'year') {\n            days = this._days + milliseconds / 864e5;\n            months = this._months + daysToMonths(days);\n            switch (units) {\n                case 'month':\n                    return months;\n                case 'quarter':\n                    return months / 3;\n                case 'year':\n                    return months / 12;\n            }\n        } else {\n            // handle milliseconds separately because of floating point math errors (issue #1867)\n            days = this._days + Math.round(monthsToDays(this._months));\n            switch (units) {\n                case 'week':\n                    return days / 7 + milliseconds / 6048e5;\n                case 'day':\n                    return days + milliseconds / 864e5;\n                case 'hour':\n                    return days * 24 + milliseconds / 36e5;\n                case 'minute':\n                    return days * 1440 + milliseconds / 6e4;\n                case 'second':\n                    return days * 86400 + milliseconds / 1000;\n                // Math.floor prevents floating point math errors here\n                case 'millisecond':\n                    return Math.floor(days * 864e5) + milliseconds;\n                default:\n                    throw new Error('Unknown unit ' + units);\n            }\n        }\n    }\n\n    // TODO: Use this.as('ms')?\n    function valueOf$1() {\n        if (!this.isValid()) {\n            return NaN;\n        }\n        return (\n            this._milliseconds +\n            this._days * 864e5 +\n            (this._months % 12) * 2592e6 +\n            toInt(this._months / 12) * 31536e6\n        );\n    }\n\n    function makeAs(alias) {\n        return function () {\n            return this.as(alias);\n        };\n    }\n\n    var asMilliseconds = makeAs('ms'),\n        asSeconds = makeAs('s'),\n        asMinutes = makeAs('m'),\n        asHours = makeAs('h'),\n        asDays = makeAs('d'),\n        asWeeks = makeAs('w'),\n        asMonths = makeAs('M'),\n        asQuarters = makeAs('Q'),\n        asYears = makeAs('y');\n\n    function clone$1() {\n        return createDuration(this);\n    }\n\n    function get$2(units) {\n        units = normalizeUnits(units);\n        return this.isValid() ? this[units + 's']() : NaN;\n    }\n\n    function makeGetter(name) {\n        return function () {\n            return this.isValid() ? this._data[name] : NaN;\n        };\n    }\n\n    var milliseconds = makeGetter('milliseconds'),\n        seconds = makeGetter('seconds'),\n        minutes = makeGetter('minutes'),\n        hours = makeGetter('hours'),\n        days = makeGetter('days'),\n        months = makeGetter('months'),\n        years = makeGetter('years');\n\n    function weeks() {\n        return absFloor(this.days() / 7);\n    }\n\n    var round = Math.round,\n        thresholds = {\n            ss: 44, // a few seconds to seconds\n            s: 45, // seconds to minute\n            m: 45, // minutes to hour\n            h: 22, // hours to day\n            d: 26, // days to month/week\n            w: null, // weeks to month\n            M: 11, // months to year\n        };\n\n    // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n    function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n        return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n    }\n\n    function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {\n        var duration = createDuration(posNegDuration).abs(),\n            seconds = round(duration.as('s')),\n            minutes = round(duration.as('m')),\n            hours = round(duration.as('h')),\n            days = round(duration.as('d')),\n            months = round(duration.as('M')),\n            weeks = round(duration.as('w')),\n            years = round(duration.as('y')),\n            a =\n                (seconds <= thresholds.ss && ['s', seconds]) ||\n                (seconds < thresholds.s && ['ss', seconds]) ||\n                (minutes <= 1 && ['m']) ||\n                (minutes < thresholds.m && ['mm', minutes]) ||\n                (hours <= 1 && ['h']) ||\n                (hours < thresholds.h && ['hh', hours]) ||\n                (days <= 1 && ['d']) ||\n                (days < thresholds.d && ['dd', days]);\n\n        if (thresholds.w != null) {\n            a =\n                a ||\n                (weeks <= 1 && ['w']) ||\n                (weeks < thresholds.w && ['ww', weeks]);\n        }\n        a = a ||\n            (months <= 1 && ['M']) ||\n            (months < thresholds.M && ['MM', months]) ||\n            (years <= 1 && ['y']) || ['yy', years];\n\n        a[2] = withoutSuffix;\n        a[3] = +posNegDuration > 0;\n        a[4] = locale;\n        return substituteTimeAgo.apply(null, a);\n    }\n\n    // This function allows you to set the rounding function for relative time strings\n    function getSetRelativeTimeRounding(roundingFunction) {\n        if (roundingFunction === undefined) {\n            return round;\n        }\n        if (typeof roundingFunction === 'function') {\n            round = roundingFunction;\n            return true;\n        }\n        return false;\n    }\n\n    // This function allows you to set a threshold for relative time strings\n    function getSetRelativeTimeThreshold(threshold, limit) {\n        if (thresholds[threshold] === undefined) {\n            return false;\n        }\n        if (limit === undefined) {\n            return thresholds[threshold];\n        }\n        thresholds[threshold] = limit;\n        if (threshold === 's') {\n            thresholds.ss = limit - 1;\n        }\n        return true;\n    }\n\n    function humanize(argWithSuffix, argThresholds) {\n        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n\n        var withSuffix = false,\n            th = thresholds,\n            locale,\n            output;\n\n        if (typeof argWithSuffix === 'object') {\n            argThresholds = argWithSuffix;\n            argWithSuffix = false;\n        }\n        if (typeof argWithSuffix === 'boolean') {\n            withSuffix = argWithSuffix;\n        }\n        if (typeof argThresholds === 'object') {\n            th = Object.assign({}, thresholds, argThresholds);\n            if (argThresholds.s != null && argThresholds.ss == null) {\n                th.ss = argThresholds.s - 1;\n            }\n        }\n\n        locale = this.localeData();\n        output = relativeTime$1(this, !withSuffix, th, locale);\n\n        if (withSuffix) {\n            output = locale.pastFuture(+this, output);\n        }\n\n        return locale.postformat(output);\n    }\n\n    var abs$1 = Math.abs;\n\n    function sign(x) {\n        return (x > 0) - (x < 0) || +x;\n    }\n\n    function toISOString$1() {\n        // for ISO strings we do not use the normal bubbling rules:\n        //  * milliseconds bubble up until they become hours\n        //  * days do not bubble at all\n        //  * months bubble up until they become years\n        // This is because there is no context-free conversion between hours and days\n        // (think of clock changes)\n        // and also not between days and months (28-31 days per month)\n        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n\n        var seconds = abs$1(this._milliseconds) / 1000,\n            days = abs$1(this._days),\n            months = abs$1(this._months),\n            minutes,\n            hours,\n            years,\n            s,\n            total = this.asSeconds(),\n            totalSign,\n            ymSign,\n            daysSign,\n            hmsSign;\n\n        if (!total) {\n            // this is the same as C#'s (Noda) and python (isodate)...\n            // but not other JS (goog.date)\n            return 'P0D';\n        }\n\n        // 3600 seconds -> 60 minutes -> 1 hour\n        minutes = absFloor(seconds / 60);\n        hours = absFloor(minutes / 60);\n        seconds %= 60;\n        minutes %= 60;\n\n        // 12 months -> 1 year\n        years = absFloor(months / 12);\n        months %= 12;\n\n        // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n        s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n\n        totalSign = total < 0 ? '-' : '';\n        ymSign = sign(this._months) !== sign(total) ? '-' : '';\n        daysSign = sign(this._days) !== sign(total) ? '-' : '';\n        hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n        return (\n            totalSign +\n            'P' +\n            (years ? ymSign + years + 'Y' : '') +\n            (months ? ymSign + months + 'M' : '') +\n            (days ? daysSign + days + 'D' : '') +\n            (hours || minutes || seconds ? 'T' : '') +\n            (hours ? hmsSign + hours + 'H' : '') +\n            (minutes ? hmsSign + minutes + 'M' : '') +\n            (seconds ? hmsSign + s + 'S' : '')\n        );\n    }\n\n    var proto$2 = Duration.prototype;\n\n    proto$2.isValid = isValid$1;\n    proto$2.abs = abs;\n    proto$2.add = add$1;\n    proto$2.subtract = subtract$1;\n    proto$2.as = as;\n    proto$2.asMilliseconds = asMilliseconds;\n    proto$2.asSeconds = asSeconds;\n    proto$2.asMinutes = asMinutes;\n    proto$2.asHours = asHours;\n    proto$2.asDays = asDays;\n    proto$2.asWeeks = asWeeks;\n    proto$2.asMonths = asMonths;\n    proto$2.asQuarters = asQuarters;\n    proto$2.asYears = asYears;\n    proto$2.valueOf = valueOf$1;\n    proto$2._bubble = bubble;\n    proto$2.clone = clone$1;\n    proto$2.get = get$2;\n    proto$2.milliseconds = milliseconds;\n    proto$2.seconds = seconds;\n    proto$2.minutes = minutes;\n    proto$2.hours = hours;\n    proto$2.days = days;\n    proto$2.weeks = weeks;\n    proto$2.months = months;\n    proto$2.years = years;\n    proto$2.humanize = humanize;\n    proto$2.toISOString = toISOString$1;\n    proto$2.toString = toISOString$1;\n    proto$2.toJSON = toISOString$1;\n    proto$2.locale = locale;\n    proto$2.localeData = localeData;\n\n    proto$2.toIsoString = deprecate(\n        'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',\n        toISOString$1\n    );\n    proto$2.lang = lang;\n\n    // FORMATTING\n\n    addFormatToken('X', 0, 0, 'unix');\n    addFormatToken('x', 0, 0, 'valueOf');\n\n    // PARSING\n\n    addRegexToken('x', matchSigned);\n    addRegexToken('X', matchTimestamp);\n    addParseToken('X', function (input, array, config) {\n        config._d = new Date(parseFloat(input) * 1000);\n    });\n    addParseToken('x', function (input, array, config) {\n        config._d = new Date(toInt(input));\n    });\n\n    //! moment.js\n\n    hooks.version = '2.29.1';\n\n    setHookCallback(createLocal);\n\n    hooks.fn = proto;\n    hooks.min = min;\n    hooks.max = max;\n    hooks.now = now;\n    hooks.utc = createUTC;\n    hooks.unix = createUnix;\n    hooks.months = listMonths;\n    hooks.isDate = isDate;\n    hooks.locale = getSetGlobalLocale;\n    hooks.invalid = createInvalid;\n    hooks.duration = createDuration;\n    hooks.isMoment = isMoment;\n    hooks.weekdays = listWeekdays;\n    hooks.parseZone = createInZone;\n    hooks.localeData = getLocale;\n    hooks.isDuration = isDuration;\n    hooks.monthsShort = listMonthsShort;\n    hooks.weekdaysMin = listWeekdaysMin;\n    hooks.defineLocale = defineLocale;\n    hooks.updateLocale = updateLocale;\n    hooks.locales = listLocales;\n    hooks.weekdaysShort = listWeekdaysShort;\n    hooks.normalizeUnits = normalizeUnits;\n    hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n    hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n    hooks.calendarFormat = getCalendarFormat;\n    hooks.prototype = proto;\n\n    // currently HTML5 input type only supports 24-hour formats\n    hooks.HTML5_FMT = {\n        DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type=\"datetime-local\" />\n        DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type=\"datetime-local\" step=\"1\" />\n        DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type=\"datetime-local\" step=\"0.001\" />\n        DATE: 'YYYY-MM-DD', // <input type=\"date\" />\n        TIME: 'HH:mm', // <input type=\"time\" />\n        TIME_SECONDS: 'HH:mm:ss', // <input type=\"time\" step=\"1\" />\n        TIME_MS: 'HH:mm:ss.SSS', // <input type=\"time\" step=\"0.001\" />\n        WEEK: 'GGGG-[W]WW', // <input type=\"week\" />\n        MONTH: 'YYYY-MM', // <input type=\"month\" />\n    };\n\n    return hooks;\n\n})));\n","const EventEmitter = require('events');\n\n/**\n * A list of all publicly emitted events. To listen to these events you must attach a listener to the History instance.\n * This class should not be used directly\n *\n * @property {String} ASSETS_LOADED         - assets in history panel are finished loading\n * @type {Object}\n */\nconst events = {\n    ASSETS_LOADED: 'assets_loaded',\n};\n\nclass EventsHub extends EventEmitter {\n\n    constructor(){\n        super();\n        this.events = Object.freeze(events);\n    }\n\n    /**\n     * @param {string} eventName\n     * @param {Object} params - the params.type is always added\n     *\n     * @return {Boolean} - Indication if we've emitted an event.\n     */\n    emit(eventName, params = {}) {\n        if(!eventName) throw Error('Trying to emit undefined event: ' + eventName);\n        if(typeof params.type !== 'undefined' && params.type !== eventName) throw Error('The \"type\" property is restricted and should be the same as the eventName. If you not pass it it will be automatically set!');\n        params.type = eventName;\n        return super.emit(eventName, params)\n    }\n}\n\n\nmodule.exports = new EventsHub();\n","const Config = require('./config/Config');\nconst GamesMappings = require('./config/GamesMappings');\nconst EventEmitter = require('events');\nconst EventsHub = require('./EventsHub');\nconst Currency = require ('./utils/Currency');\nconst Language = require('./utils/Language');\nconst templateInit = require('../templates/init.hbs');\n\nconst DefaultPanel = require('./panels/DefaultPanel');\nconst DopSlotPanel = require('./panels/DopSlotPanel');\nconst TigEntSlotPanel = require('./panels/TigEntSlotPanel');\nconst DopTablePanel = require('./panels/DopTablePanel');\nconst CaySlotPanel = require('./panels/CaySlotPanel');\nconst CayTablePanel = require('./panels/CayTablePanel');\nconst CayScratchPanel = require('./panels/CayScratchPanel');\nconst NSGSlotPanel = require('./panels/NSGSlotPanel');\n\nconst panels = {\n\tdefault: DefaultPanel,\n\tdopSlot: DopSlotPanel,\n\ttigEntSlot: TigEntSlotPanel,\n\tnsgSlot: NSGSlotPanel,\n\tdopBlackjack: DopTablePanel,\n\tdopRoulette: DopTablePanel,\n\tdopBaccarat: DopTablePanel,\n\tcaySlot: CaySlotPanel,\n\tcayScratch: CayScratchPanel,\n\tcayRoulette: CayTablePanel,\n\tcayBlackjack: CayTablePanel,\n\tcay3CardBrag: CayTablePanel,\n\tcayVideoPoker: CayTablePanel\n};\n\nclass History extends EventEmitter {\n\n\t/**\n\t * Create instance of the history app and render it inside the container\n\t * @param {Object} options\n\t * @param {String} options.basePath - the base path to the dist files (used for loading of the images)\n\t * @param {String} options.language - language code - like \"en\"\n\t * @param {String} options.assetsPath - the cdn path to the assets project\n\t * @param {Boolean} options.hideGameDetails - whether to hide Game Details\n\t * @param {Boolean} options.hideTransactionDetails - whether to hide Transaction Details\n\t */\n\tconstructor(options) {\n\t\tsuper();\n\n\t\tthis.config = Config;\n\t\tthis.events = EventsHub.events;\n\n\t\tthis._basePath = options.basePath || '';\n\t\tthis._language = options.language || '';\n\t\tthis._assetsPath = options.assetsPath || '';\n\t\tthis._hideGameDetails = options.hideGameDetails;\n\t\tthis._hideTransactionDetails = options.hideTransactionDetails;\n\n\t\tnew Language(options.language);\n\t\t/**\n\t\t * The container where the history will be rendered.\n\t\t * Note it should be appended inside some external DOM container\n\t\t * @type {HTMLElement}\n\t\t */\n\t\tthis.container = document.createElement('div');\n\t\tthis.container.className = 'history-component-container';\n\t\tthis.$container = $(this.container);\n\n\t\tEventsHub.removeAllListeners(EventsHub.events.ASSETS_LOADED);\n\t\tEventsHub.on(EventsHub.events.ASSETS_LOADED, (name, data) => this.emit(name.type, data));\n\n\t\tlet html = templateInit({});\n\n\t\tthis.$container.html(html);\n\t\tconsole.log('#History is initialized:', { basePath: options.basePath, container: this.container });\n\t}\n\n\t// Public methods -------------------------------------------------------\n\t\n\t/**\n\t * Parse data and display history visual representation\n\t * @param {string} gameId\n\t * @param {object} data\n\t * @returns {Object} parsed data - you could use for example gameDetails.prevRoundId / gameDetails.nextRoundId for button Next / Prev\n\t */\n\tshowHistory(gameId, data) {\n\t\tif (arguments[2]) console.warn('The third argument of showHistory(gameId, data) is deprecated and is not necessary to be provided anymore')\n\t\tif (!this.$container) return console.warn('#History is not initialized. Please call method \"init(container)\"');\n\n\t\t// skin to source game id\n\t\tif (GamesMappings.hasOwnProperty(gameId)) {\n\t\t\tgameId = GamesMappings[gameId].source;\n\t\t}\n\n\t\tlet adapter = '';\n\t\tfor (let name in Config.games) {\n\t\t\tif (Config.games[name].indexOf(gameId) !== -1) {\n\t\t\t\tadapter = name;\n\t\t\t}\n\t\t}\n\n\t\tif (!adapter) {\n\t\t\treturn console.warn(`The game \"${gameId}\" is not found in any of the available parsers. Please add it inside Config.games[parser] list`);\n\t\t}\n\n\t\t// TODO: this temporary here for backward compatibility. Remove it when the bars AND GPanel pass clean data\n\t\tif (data && data.result && data.result.history) data = data.result.history;\n\t\tif (data && data.result) data = data.result;\n\n\t\tconst isNewPanel = !(this.panel instanceof panels[adapter]);\n\n\t\tif (!this.panel || isNewPanel) {\n\t\t\tthis.panel && this.panel.removeListeners && this.panel.removeListeners();\n\t\t\tthis.panel = new panels[adapter]();\n\t\t}\n\n\t\tthis.$container.html(this.panel.render(\n\t\t\tgameId,\n\t\t\tdata,\n\t\t\tadapter,\n\t\t\tthis._basePath,\n\t\t\tthis._language,\n\t\t\tthis._assetsPath,\n\t\t\tthis._hideGameDetails,\n\t\t\tthis._hideTransactionDetails\n\t\t));\n\n\t\treturn this.panel.parsedData;\n\t}\n\n\t/**\n\t * Set correct currency format\n\t * @param {object} [cfg]\n\t * @param {String} [cfg.code] - like \"USD\"\n\t * @param {String} [cfg.symbol] - like \"$\"\n\t * @param {String} [cfg.thousands] - like \",\"\n\t * @param {String} [cfg.decimals] - like \".\"\n\t * @param {String} [cfg.position] - 'left' or 'right'\n\t */\n\tsetCurrencyFormat(cfg) {\n\t\t// temp backwards compatibility\n\t\tif(typeof cfg !== 'object') {\n\t\t\tcfg = {\n\t\t\t\tcode: arguments[0],\n\t\t\t\tsymbol: arguments[1],\n\t\t\t\tthousands: arguments[2],\n\t\t\t\tdecimals: arguments[3],\n\t\t\t}\n\t\t}\n\n\t\tCurrency.set(cfg);\n\t}\n\n\tresize(e) {\n\t\tif (!this.panel || !this.panel.resize) return;\n\n\t\tthis.panel.resize(e);\n\t}\n\n\t// Private methods ------------------------------------------------------\n}\n\nmodule.exports = History;\n","'use strict';\n\nconst Config = {\n  defaults: { lang: 'en' },\n  respinWinEndOnly: [\n    '7sLuck',\n    'ApacheWay',\n    'Astronaut',\n    'Astros',\n    'CashOrNothing',\n    'CloverCraze',\n    'DontEatTheCandy',\n    'EasyGold',\n    'EasyGoldLimited',\n    'MidnightRomance',\n    'GemCrush',\n    'GemsInfernoMegaWays',\n    'GigaBlast',\n    'JudgementDayMegaWays',\n    'MegaDragon',\n    'MidasGold',\n    'RomanEmperors',\n    'RockNLock',\n    'SakuraMasks',\n    'ShahMat',\n    'SteamSquad',\n    'StolenTreasures',\n    'ThorsLightning',\n    'WolfStacksMegaWays',\n  ],\n  ways: [\n    '10001NightsMegaWays',\n    '25ERENMegaWays',\n    '777SuperStrike',\n    '80sSpins',\n    'AdmiralBurstMegaWays',\n    'AlexanderTheGreat',\n    'AliBabasLuckMegaways',\n    'AlianzaLimaMegaWays',\n    'AlpacaVibeMegaWays',\n    'AmazonIslandMegaWays',\n    'AthensMegaWays',\n    'AztecShamansMegaWays',\n    'BestOfSverigeMegaWays',\n    'BestOfSverigeVinterMegaWays',\n    'Bets10FarmMegaWays',\n    'BigCatRescueMegaWays',\n    'BigCatRescueMegaWaysLimited',\n    'BloodSuckersMegaWays',\n    'BlueJaysJackpotMegaWays',\n    'BosqueEncantadoMegaWays',\n    'BuffaloCollector',\n    'BuffaloCollectorLimited',\n    'BuffaloManiaMegaWays',\n    'CaiShen168',\n    'CannonballCash',\n    'CaptainRizkMegaWays',\n    'CasibomIstanbulMegaWays',\n    'CasinoNight',\n    'CasinomaxiFarmMegaWays',\n    'CasinometropolFarmMegaWays',\n    'ConmebolCopaAmerica2024BetanoMegaWays',\n    'CopacabanaMegaWays',\n    'CyberAttack',\n    'CyberFuryBonanzaMegaWays',\n    'DiamondBlitz2',\n    'DiamondClubMegaWays',\n    'DiscountCasinoFarmMegaWays',\n    'DoggyRichesMegaWays',\n    'DontHitPlz',\n    'DragonsFireInfiniReels',\n    'DragonsFireMegaWays',\n    'DragonsLuckMegaWays',\n    'DragonsPlayground',\n    'DynamiteRichesMegaWays',\n    'DynamiteRichesMegaWaysLimited',\n    'EUROEFSANELERiMegaWays',\n    'EasyGold',\n    'EasyGoldLimited',\n    'EgyptMegaWays',\n    'ElitloppetMegaWays',\n    'EmperorOfIndia',\n    'FTNBonanzaMegaWays',\n    'FaFaBabies2',\n    'FairyForestMegaWays',\n    'FilthyRichMegaWays',\n    'FonbetLollipopMegaWays',\n    'FortuneCharm',\n    'FruitBlox',\n    'FruitFlash',\n    'FurballFeverMegaWays',\n    'GemsInfernoMegaWays',\n    'GetTheGoldInfiniReels',\n    'GladiatorWays',\n    'GoddessOfTheMoonMegaWays',\n    'GoldenLeprechaunMegaWays',\n    'GonzosQuestMegaWays',\n    'GoodOld7s',\n    'GreatNationMegaWays',\n    'GronksTouchdownTreasuresMegaWays',\n    'HanselAndGretelCandyhouse',\n    'JackpotPlanetMegaWays',\n    'JellyBellyMegaWays',\n    'JetbahisFarmMegaWays',\n    'JingleWaysMegaWays',\n    'JudgementDayMegaWays',\n    'JuegoUniversitarioMegaWays',\n    'JungleParadiseMegaWays',\n    'KnightsOfAvalon',\n    'KultaJaskaMegaWays',\n    'LaserFruit',\n    'LeprechaunsMagicMegaways',\n    'LightsCameraCash',\n    'LondonTube',\n    'LuckyRadarMegaWays',\n    'LuckySkyMegaWays',\n    'MOMANGMegaWays',\n    'MagicNeuquenMegaWays',\n    'MagicPowersMegaWays',\n    'MermaidRockMegaWays',\n    'MidasGold',\n    'MixAndMatch',\n    'MobilbahisFarmMegaWays',\n    'MonstersUnchained',\n    'MsRobinHood',\n    'MummyMegaWays',\n    'MysteryReelsMegaWays',\n    'NFTMegaWays',\n    'NFTMegaWaysLimited',\n    'NarcosMexico',\n    'NightmareCityMegaWays',\n    'NightmareFamilyMegaWays',\n    'NinjaWays',\n    'NovibetBasketOfRichesMegaWays',\n    'NovibetFreakBeatsMegaWays',\n    'NovibetTrophyQuestMegaWays',\n    'NovibetWinterFurballsMegaWays',\n    'OsmanliBonanzaMegaWays',\n    'PaddyPowerGoldMegaWays',\n    'PandorasTreasure',\n    'PenguinsPowerplayMegaWays',\n    'PiggyRiches2MegaWays',\n    'PiggyRichesMegaWays',\n    'PiggyRichesMegaWaysLimited',\n    'PiratesParty',\n    'PiratesPlentyMegaWays',\n    'PokerdomAnniversaryMegaWays',\n    'PowerPathLuckyReelsMegaWays',\n    'PremioMayorMegaWays',\n    'PrimateKingMegaWays',\n    'PrimateKingMegaWaysLimited',\n    'RainbowJackpotsMegaWays',\n    'RakiBonanzaMegaWays',\n    'RisqueMegaWays',\n    'RutschebanenMegaWays',\n    'SBOTOPRisingOfTheBeastMegaWays',\n    'SHOWMETHEHONEYMegaWays',\n    'SantaExpressMegaWays',\n    'SeaBoatAdventureMegaWays',\n    'SexyWashMegaWays',\n    'SpringRaceMegaWays',\n    'StarvegasTombMegaWays',\n    'SugarliciousEveryWay',\n    'SugarliciousEveryWayLimited',\n    'SukkerbagerenMegaWays',\n    'SultanBonanzaMegaWays',\n    'SupremoFortunesMegaWays',\n    'SylvanSpirits',\n    'TempleOfCresusMegaWays',\n    'TheBigTenMegaWays',\n    'TheWildKiss',\n    'TheWishMasterMegaWays',\n    'ThorsVengeance',\n    'TransylvaniaNightOfBlood',\n    'TrickOfTheDeadWildCandiesMegaWays',\n    'TrillionaireMegaWays',\n    'VaultCrackerMegaWays',\n    'VaultCrackerMegaWaysLimited',\n    'VickyVentura',\n    'VikingsLegacyEveryWay',\n    'WellOfWildsMegaWays',\n    'WhatTheFoxMegaWays',\n    'WildHotChilliReels2',\n    'WildTouchdownMegaWays',\n    'WildTundra',\n    'WildTurkeyMegaWays',\n    'WingsOfRaMegaWays',\n    'WinterBurstMegaWays',\n    'WolfStacksMegaWays',\n    'WrigleysWorld',\n    'ZeusLightningMegaWays'\n  ],\n  cluster: [\n    '4Squad',\n    'AgeOfAkkadia',\n    'Astros',\n    'BlazingClusters',\n    'BlobstersClusterbuster',\n    'Bombuster',\n    'DragonsClusterbuster',\n    'EgyptClusterbuster',\n    'FruitSnap',\n    'GemCrush',\n    'GoodLuckClusterbuster',\n    'HappyApples',\n    'HereKittyKitty',\n    'HotHotChilliPot',\n    'JackInAPot',\n    'LostRelics2',\n    'LunaFortuna',\n    'MagicLab',\n    'MegaDragon',\n    'PeggySweets',\n    'PinatasAndPonies',\n    'RoyalGems',\n    'ShahMat',\n    'SteamSquad',\n    'SugarMonster',\n    'SugarMonsterLimited',\n    'ThorsLightning',\n    'TikiFruits',\n    'TikiFruitsTotemFrenzy',\n    'VaultOfAnubis',\n    'VaultOfAnubisLimited',\n    'YearRoundRichesClusterbuster',\n    'YearRoundRichesClusterbusterLimited'\n  ],\n  scatterWins: [\n    'Astros',\n    'HappyApples',\n    'HereKittyKitty',\n    'MagicLab',\n    'PeggySweets',\n    'PinatasAndPonies',\n    'SteamSquad'\n  ],\n  hasAdditionalWin: {\n    wayWin: [ 'TheGoodTheBadAndTheRich' ],\n    scatterWin: [\n      'BabylonRiches',\n      'BabylonRichesLimited',\n      'DiamondsUp',\n      'DontEatTheCandy',\n      'RedlineRush',\n      'WrigleysWorld'\n    ]\n  },\n  multiline: [ 'RainbowJackpotsPowerLines', 'WildCatsMultiline' ],\n  hasMultipliers: [\n    'BabylonRiches',\n    'BabylonRichesLimited',\n    'CyberAttack',\n    'DiamondDoggies',\n    'DragonsLock',\n    'EmperorOfIndia',\n    'FruitFlash',\n    'GemsInfernoMegaWays',\n    'GetTheGoldInfiniReels',\n    'GigaBlast',\n    'GladiatorClash',\n    'JudgementDayMegaWays',\n    'KnightsOfAvalon',\n    'LondonTube',\n    'MagicPowersMegaWays',\n    'MoonSpell',\n    'PiggyRiches2MegaWays',\n    'SakuraMasks',\n    'SakuraMasksLimited',\n    'SteamSquad',\n    'TheWildKiss',\n    'TransylvaniaNightOfBlood',\n    'TrillionaireMegaWays',\n    'TrophyFish',\n    'TurtleParadise',\n    'VaultCrackerMegaWays',\n    'VaultCrackerMegaWaysLimited',\n    'VikingsLegacyEveryWay'\n  ],\n  resizableSlot: [\n    'AlexanderTheGreat',\n    'DontEatTheCandy',\n    'EmperorOfIndia',\n    'LaserFruit',\n    'MonstersUnchained',\n    'PrimateKing',\n    'ShadowSociety',\n    'TheEqualizer',\n    'TicketToWild',\n    'VickyVentura',\n    'WarOfGods',\n    'WheelOfAmp',\n    'WinEscalator',\n    'ZillardKing'\n  ],\n  horizontalReels: {\n    top: [\n      '25ERENMegaWays',\n      'AdmiralBurstMegaWays',\n      'AlianzaLimaMegaWays',\n      'AlpacaVibeMegaWays',\n      'BestOfSverigeMegaWays',\n      'BestOfSverigeVinterMegaWays',\n      'Bets10FarmMegaWays',\n      'BlueJaysJackpotMegaWays',\n      'BosqueEncantadoMegaWays',\n      'CasibomIstanbulMegaWays',\n      'CasinomaxiFarmMegaWays',\n      'CasinometropolFarmMegaWays',\n      'ConmebolCopaAmerica2024BetanoMegaWays',\n      'CopacabanaMegaWays',\n      'CyberFuryBonanzaMegaWays',\n      'DiamondClubMegaWays',\n      'DiscountCasinoFarmMegaWays',\n      'EUROEFSANELERiMegaWays',\n      'ElitloppetMegaWays',\n      'FTNBonanzaMegaWays',\n      'FairyForestMegaWays',\n      'FilthyRichMegaWays',\n      'FonbetLollipopMegaWays',\n      'FurballFeverMegaWays',\n      'GemsInfernoMegaWays',\n      'GoddessOfTheMoonMegaWays',\n      'GreatNationMegaWays',\n      'GronksTouchdownTreasuresMegaWays',\n      'JackpotPlanetMegaWays',\n      'JetbahisFarmMegaWays',\n      'JuegoUniversitarioMegaWays',\n      'JungleParadiseMegaWays',\n      'LuckyRadarMegaWays',\n      'LuckySkyMegaWays',\n      'MOMANGMegaWays',\n      'MagicNeuquenMegaWays',\n      'MermaidRockMegaWays',\n      'MixAndMatch',\n      'MobilbahisFarmMegaWays',\n      'NightmareCityMegaWays',\n      'NovibetBasketOfRichesMegaWays',\n      'NovibetFreakBeatsMegaWays',\n      'NovibetTrophyQuestMegaWays',\n      'NovibetWinterFurballsMegaWays',\n      'OsmanliBonanzaMegaWays',\n      'PenguinsPowerplayMegaWays',\n      'PokerdomAnniversaryMegaWays',\n      'PowerPathLuckyReelsMegaWays',\n      'PremioMayorMegaWays',\n      'RakiBonanzaMegaWays',\n      'RutschebanenMegaWays',\n      'SBOTOPRisingOfTheBeastMegaWays',\n      'SHOWMETHEHONEYMegaWays',\n      'SantaExpressMegaWays',\n      'SexyWashMegaWays',\n      'SpringRaceMegaWays',\n      'StarvegasTombMegaWays',\n      'SukkerbagerenMegaWays',\n      'SultanBonanzaMegaWays',\n      'TempleOfCresusMegaWays',\n      'TheBigTenMegaWays',\n      'TrickOfTheDeadWildCandiesMegaWays',\n      'WildTouchdownMegaWays',\n      'WinterBurstMegaWays'\n    ],\n    bottom: [],\n    topAndBottom: [ 'RisqueMegaWays' ]\n  },\n  infiniReels: [ 'DragonsFireInfiniReels', 'GetTheGoldInfiniReels' ],\n  dontDrawLines: [\n    '10001NightsMegaWays',\n    '25ERENMegaWays',\n    '4Squad',\n    '777SuperStrike',\n    'AdmiralBurstMegaWays',\n    'AgeOfAkkadia',\n    'AlexanderTheGreat',\n    'AliBabasLuckMegaways',\n    'AlianzaLimaMegaWays',\n    'AlpacaVibeMegaWays',\n    'AmazonIslandMegaWays',\n    'Astros',\n    'AthensMegaWays',\n    'BestOfSverigeMegaWays',\n    'BestOfSverigeVinterMegaWays',\n    'Bets10FarmMegaWays',\n    'BigCatRescueMegaWays',\n    'BigCatRescueMegaWaysLimited',\n    'BlazingClusters',\n    'BlobstersClusterbuster',\n    'BloodSuckersMegaWays',\n    'BlueDiamond',\n    'BlueJaysJackpotMegaWays',\n    'Bombuster',\n    'BosqueEncantadoMegaWays',\n    'BuffaloCollector',\n    'BuffaloCollectorLimited',\n    'BuffaloManiaMegaWays',\n    'CaiShen168',\n    'CannonballCash',\n    'CaptainRizkMegaWays',\n    'CasibomIstanbulMegaWays',\n    'CasinoNight',\n    'CasinomaxiFarmMegaWays',\n    'CasinometropolFarmMegaWays',\n    'ConmebolCopaAmerica2024BetanoMegaWays',\n    'CopacabanaMegaWays',\n    'CyberAttack',\n    'CyberFuryBonanzaMegaWays',\n    'DiamondBlitz2',\n    'DiamondClubMegaWays',\n    'DiscountCasinoFarmMegaWays',\n    'DoggyRichesMegaWays',\n    'DragonsClusterbuster',\n    'DragonsFireInfiniReels',\n    'DragonsFireMegaWays',\n    'DragonsLuckMegaWays',\n    'DragonsPlayground',\n    'DynamiteRichesMegaWays',\n    'DynamiteRichesMegaWaysLimited',\n    'EUROEFSANELERiMegaWays',\n    'EasyGold',\n    'EasyGoldLimited',\n    'EgyptClusterbuster',\n    'EgyptMegaWays',\n    'ElitloppetMegaWays',\n    'EmeraldDiamond',\n    'EmperorOfIndia',\n    'FTNBonanzaMegaWays',\n    'FaFaBabies2',\n    'FairyForestMegaWays',\n    'FilthyRichMegaWays',\n    'FonbetLollipopMegaWays',\n    'Forever7s',\n    'FortuneCharm',\n    'FruitBlox',\n    'FruitFlash',\n    'FruitSnap',\n    'FurballFeverMegaWays',\n    'GemCrush',\n    'GemsInfernoMegaWays',\n    'GetTheGoldInfiniReels',\n    'GladiatorClash',\n    'GladiatorWays',\n    'GoddessOfTheMoonMegaWays',\n    'GoldenLeprechaunMegaWays',\n    'GonzitasQuest',\n    'GonzosQuestMegaWays',\n    'GoodLuckClusterbuster',\n    'GoodOld7s',\n    'GrandWheel',\n    'GreatNationMegaWays',\n    'GronksTouchdownTreasuresMegaWays',\n    'HanselAndGretelCandyhouse',\n    'HappyApples',\n    'HarleCoin',\n    'HereKittyKitty',\n    'HotHotChilliPot',\n    'JackInAPot',\n    'JackpotPlanetMegaWays',\n    'JellyBellyMegaWays',\n    'JetbahisFarmMegaWays',\n    'JingleWaysMegaWays',\n    'JudgementDayMegaWays',\n    'JuegoUniversitarioMegaWays',\n    'JungleParadiseMegaWays',\n    'KnightsOfAvalon',\n    'KultaJaskaMegaWays',\n    'LaserFruit',\n    'LeprechaunsMagicMegaways',\n    'LightsCameraCash',\n    'LondonTube',\n    'LostRelics2',\n    'LuckyRadarMegaWays',\n    'LuckySkyMegaWays',\n    'LunaFortuna',\n    'MOMANGMegaWays',\n    'MagicLab',\n    'MagicNeuquenMegaWays',\n    'MagicPowersMegaWays',\n    'MayanGods',\n    'MegaDragon',\n    'MermaidRockMegaWays',\n    'MidasGold',\n    'MixAndMatch',\n    'MobilbahisFarmMegaWays',\n    'MonstersUnchained',\n    'MsRobinHood',\n    'MultiplierRiches',\n    'MummyMegaWays',\n    'MysteryReelsMegaWays',\n    'NFTMegaWays',\n    'NFTMegaWaysLimited',\n    'NarcosMexico',\n    'NightmareCityMegaWays',\n    'NightmareFamilyMegaWays',\n    'NinjaWays',\n    'NovibetBasketOfRichesMegaWays',\n    'NovibetFreakBeatsMegaWays',\n    'NovibetTrophyQuestMegaWays',\n    'NovibetWinterFurballsMegaWays',\n    'OsmanliBonanzaMegaWays',\n    'PaddyPowerGoldMegaWays',\n    'PandorasTreasure',\n    'PeggySweets',\n    'PenguinsPowerplayMegaWays',\n    'PiggyRiches2MegaWays',\n    'PiggyRichesMegaWays',\n    'PiggyRichesMegaWaysLimited',\n    'PinatasAndPonies',\n    'PiratesParty',\n    'PiratesPlentyMegaWays',\n    'PokerdomAnniversaryMegaWays',\n    'PowerPathLuckyReelsMegaWays',\n    'PremioMayorMegaWays',\n    'PrimateKingMegaWays',\n    'PrimateKingMegaWaysLimited',\n    'RainbowJackpotsMegaWays',\n    'RakiBonanzaMegaWays',\n    'RedDiamond',\n    'RedlineRush',\n    'RisqueMegaWays',\n    'RoyalGems',\n    'RutschebanenMegaWays',\n    'SBOTOPRisingOfTheBeastMegaWays',\n    'SHOWMETHEHONEYMegaWays',\n    'SantaExpressMegaWays',\n    'SeaBoatAdventureMegaWays',\n    'SexyWashMegaWays',\n    'ShahMat',\n    'SpringRaceMegaWays',\n    'StarvegasTombMegaWays',\n    'SteamSquad',\n    'SugarMonster',\n    'SugarMonsterLimited',\n    'SugarliciousEveryWay',\n    'SugarliciousEveryWayLimited',\n    'SukkerbagerenMegaWays',\n    'SultanBonanzaMegaWays',\n    'SupremoFortunesMegaWays',\n    'SylvanSpirits',\n    'TempleOfCresusMegaWays',\n    'TheBigTenMegaWays',\n    'TheWildKiss',\n    'TheWishMasterMegaWays',\n    'ThorsLightning',\n    'ThorsVengeance',\n    'TikiFruits',\n    'TikiFruitsTotemFrenzy',\n    'TransylvaniaNightOfBlood',\n    'TrickOfTheDeadWildCandiesMegaWays',\n    'TrillionaireMegaWays',\n    'VaultCrackerMegaWays',\n    'VaultCrackerMegaWaysLimited',\n    'VaultOfAnubis',\n    'VaultOfAnubisLimited',\n    'VickyVentura',\n    'VikingsLegacyEveryWay',\n    'WellOfWildsMegaWays',\n    'WhatTheFoxMegaWays',\n    'WildHotChilliReels2',\n    'WildTouchdownMegaWays',\n    'WildTundra',\n    'WildTurkeyMegaWays',\n    'WingsOfRaMegaWays',\n    'WinterBurstMegaWays',\n    'WolfStacksMegaWays',\n    'WrigleysWorld',\n    'YearRoundRichesClusterbuster',\n    'YearRoundRichesClusterbusterLimited',\n    'ZeusLightningMegaWays'\n  ],\n  gameReelsOffsets: [ { gameId: 'Masquerade', offsets: [ 1, 0.5, 0, 0.5, 1 ] } ],\n  assembledFatTiles: [\n    '7sLuck',\n    'BassBoss',\n    'BlobstersClusterbuster',\n    'CaiShen168',\n    'CloverCraze',\n    'DoggyRichesMegaWays',\n    'DragonKingLegendOfTheSeas',\n    'DragonsClusterbuster',\n    'DragonsMirror',\n    'EgyptClusterbuster',\n    'EmperorOfIndia',\n    'Flodder',\n    'FortuneHousePowerReels',\n    'GemCrush',\n    'GladiatorWays',\n    'HammerGods',\n    'HotHotChilliPot',\n    'Hustling',\n    'JoeExotic',\n    'LionsHoard',\n    'MidnightRomance',\n    'PiggyRiches2MegaWays',\n    'SakuraMasks',\n    'SakuraMasksLimited',\n    'SavannahPride',\n    'ShadowSociety',\n    'SugarMonster',\n    'SugarMonsterLimited',\n    'TicketToWild',\n    'TigerKingJoeExotic',\n    'TransylvaniaNightOfBlood',\n    'TreasureMinePowerReels',\n    'TrillionaireMegaWays',\n    'WildHotChilliReels2',\n    'YearRoundRichesClusterbuster',\n    'YearRoundRichesClusterbusterLimited',\n    'ZeusLightningMegaWays'\n  ],\n  noJackpotScreen: [ 'CrazyGenie', 'GrandWheel', 'RAsLegend' ],\n  parsers: [\n    'default',      'dopSlot',\n    'dopBaccarat',  'dopRoulette',\n    'dopBlackjack', 'nsgSlot',\n    'caySlot',      'cayRoulette',\n    'cayBlackjack', 'cay3CardBrag',\n    'cayScratch',   'cayVideoPoker'\n  ],\n  games: {\n    default: [ 'GameName' ],\n    dopSlot: [\n      '10001Nights',\n      '10001NightsLimited',\n      '10001NightsMegaWays',\n      '1942SkyWarrior',\n      '24HourGrandPrix',\n      '25ERENMegaWays',\n      '4Squad',\n      '5Families',\n      '777Strike',\n      '777StrikeEDC',\n      '777SuperStrike',\n      '7sLuck',\n      'AdmiralBurstMegaWays',\n      'AgeOfAkkadia',\n      'AgentRoyale',\n      'AlexanderTheGreat',\n      'AlianzaLimaMegaWays',\n      'AlpacaVibeMegaWays',\n      'AncientDisco',\n      'AncientScript',\n      'AncientsBlessing',\n      'ApacheWay',\n      'ArcadeBomb',\n      'ArchdragonsLuckPowerReels',\n      'Astronaut',\n      'Astros',\n      'AthensMegaWays',\n      'Atlantis',\n      'AurumCodex',\n      'AztecShamansMegaWays',\n      'AztecSpins',\n      'BaseGame',\n      'BassBoss',\n      'Beriched',\n      'BerichedLimited',\n      'BestOfSverigeMegaWays',\n      'BestOfSverigeVinterMegaWays',\n      'Bets10FarmMegaWays',\n      'BettyBorisAndBoo',\n      'BigCatRescueMegaWays',\n      'BigCatRescueMegaWaysLimited',\n      'BlazingClusters',\n      'BlobstersClusterbuster',\n      'BloodSuckersMegaWays',\n      'BlueDiamond',\n      'BlueJaysJackpotMegaWays',\n      'Bombuster',\n      'BosqueEncantadoMegaWays',\n      'BountyRaid',\n      'BountyRaid2',\n      'BountyRaidLimited',\n      'BuffaloCollector',\n      'BuffaloCollectorLimited',\n      'BuffaloManiaMegaWays',\n      'BugsysBar',\n      'BullsRunWild',\n      'CaiShen168',\n      'CakeAndIceCream',\n      'CannonballCash',\n      'CaptainRizkMegaWays',\n      'CaseClosed',\n      'CashExplorer',\n      'CashOrNothing',\n      'CashUltimate',\n      'CashVolt',\n      'CasibomIstanbulMegaWays',\n      'CasinomaxiFarmMegaWays',\n      'CasinometropolFarmMegaWays',\n      'ChineseTreasures',\n      'ChristmasMorning',\n      'Cinderella',\n      'CirqueDeLaFortune',\n      'ClashOfTheBeasts',\n      'CloverCraze',\n      'ConmebolCopaAmerica2024BetanoMegaWays',\n      'CopacabanaMegaWays',\n      'CrazyGenie',\n      'CrystalMirror',\n      'CyberAttack',\n      'CyberFuryBonanzaMegaWays',\n      'DaVincisMystery',\n      'DearSanta',\n      'DevilsNumber',\n      'DiamondBlitz',\n      'DiamondBlitz2',\n      'DiamondClubMegaWays',\n      'DiamondDoggies',\n      'DiamondRoyale',\n      'DiamondsUp',\n      'DiceDiceDice',\n      'DiscountCasinoFarmMegaWays',\n      'DivineWays',\n      'DoggyRichesMegaWays',\n      'DraculaAwakening',\n      'DragonKingLegendOfTheSeas',\n      'DragonsClusterbuster',\n      'DragonsFire',\n      'DragonsFireInfiniReels',\n      'DragonsFireMegaWays',\n      'DragonsLock',\n      'DragonsLuck',\n      'DragonsLuckDeluxe',\n      'DragonsLuckMegaWays',\n      'DragonsLuckStacks',\n      'DragonsMirror',\n      'DynamiteRiches',\n      'DynamiteRichesLimited',\n      'DynamiteRichesMegaWays',\n      'DynamiteRichesMegaWaysLimited',\n      'EUROEFSANELERiMegaWays',\n      'EagleRiches',\n      'EaglesStrike',\n      'EasyGold',\n      'EasyGoldLimited',\n      'EgyptClusterbuster',\n      'EgyptMegaWays',\n      'ElitloppetMegaWays',\n      'ElvenMagic',\n      'EmeraldDiamond',\n      'EmperorOfIndia',\n      'EpicJourney',\n      'EsqueletoMariachi',\n      'FTNBonanzaMegaWays',\n      'FaFaBabies',\n      'FaFaBabies2',\n      'FairyForestMegaWays',\n      'FilthyRichMegaWays',\n      'Fishtastic',\n      'FishtasticLimited',\n      'FiveStar',\n      'FiveStarPowerReels',\n      'FlamingFox',\n      'Flodder',\n      'FonbetLollipopMegaWays',\n      'Forever7s',\n      'FortuneCat',\n      'FortuneCharm',\n      'FortuneFest',\n      'FortuneHouse',\n      'FortuneHousePowerReels',\n      'FruitBlox',\n      'FruitFlash',\n      'FruitSnap',\n      'FurballFeverMegaWays',\n      'GemsGoneWild',\n      'GemsGoneWildPowerReels',\n      'GemsInfernoMegaWays',\n      'Gemtastic',\n      'GenieNights',\n      'GetTheGoldInfiniReels',\n      'GigaBlast',\n      'GladiatorWays',\n      'GodOfWealth',\n      'GoddessOfTheMoonMegaWays',\n      'GodsOfTroy',\n      'GoldMineMistress',\n      'GoldStar',\n      'GoldenCryptex',\n      'GoldenLeprechaunMegaWays',\n      'GoldenLotus',\n      'GoldenOffer',\n      'GoldenTsar',\n      'GonzitasQuest',\n      'GonzosQuestMegaWays',\n      'GoodLuckClusterbuster',\n      'GrandWheel',\n      'GreatGold',\n      'GreatNationMegaWays',\n      'GronksTouchdownTreasuresMegaWays',\n      'HammerGods',\n      'HanselAndGretelCandyhouse',\n      'HanselAndGretelCandyhouseLines',\n      'HappyApples',\n      'HarleCoin',\n      'HereKittyKitty',\n      'HoardOfPoseidon',\n      'HoardOfPoseidonLimited',\n      'HonoluluNights',\n      'HotHotChilliPot',\n      'HundredKDrop',\n      'Hustling',\n      'ImperialPalace',\n      'InTheRabbitHole',\n      'JackInAPot',\n      'JackpotPlanetMegaWays',\n      'JackpotQuest',\n      'JadeCharms',\n      'JesterSpins',\n      'JetbahisFarmMegaWays',\n      'JewelScarabs',\n      'JingleBells',\n      'JingleBellsLimited',\n      'JingleBellsPowerReels',\n      'JingleWaysMegaWays',\n      'JoeExotic',\n      'JudgementDayMegaWays',\n      'JuegoUniversitarioMegaWays',\n      'JungleParadiseMegaWays',\n      'KnightsOfAvalon',\n      'KultaJaskaMegaWays',\n      'LaserFruit',\n      'LastChanceSaloon',\n      'LegendOfAthena',\n      'LegendaryExcalibur',\n      'LionDance',\n      'LionsHoard',\n      'LondonTube',\n      'LordOfTheWilds',\n      'LostRelics2',\n      'LuckyDevil',\n      'LuckyEaster',\n      'LuckyFortuneCat',\n      'LuckyFridays',\n      'LuckyHalloween',\n      'LuckyMrGreen',\n      'LuckyOktoberfest',\n      'LuckyRadarMegaWays',\n      'LuckySkyMegaWays',\n      'LuckyValentine',\n      'LuckyWizard',\n      'LunaFortuna',\n      'MOMANGMegaWays',\n      'MagicGate',\n      'MagicNeuquenMegaWays',\n      'MagicPowersMegaWays',\n      'MagicTricks',\n      'MajesticMysteriesPowerReels',\n      'Masquerade',\n      'MayanGods',\n      'Mayhem',\n      'MegaDragon',\n      'MegaJade',\n      'MegaPyramid',\n      'MegaRise',\n      'MermaidRockMegaWays',\n      'MidasGold',\n      'MidnightRomance',\n      'MixAndMatch',\n      'MobilbahisFarmMegaWays',\n      'MonstersUnchained',\n      'MoonSpell',\n      'MultiplierRiches',\n      'MysteryFruit',\n      'MysteryFruitLimited',\n      'MysteryReelsDeluxe',\n      'MysteryReelsMegaWays',\n      'MysteryReelsPowerReels',\n      'MysticStaxx',\n      'MysticWheel',\n      'NFTMegaWays',\n      'NFTMegaWaysLimited',\n      'NarcosMexico',\n      'NeonLinks',\n      'NightRoller',\n      'NightmareCityMegaWays',\n      'NinjaWays',\n      'NovibetBasketOfRichesMegaWays',\n      'NovibetFreakBeatsMegaWays',\n      'NovibetTrophyQuestMegaWays',\n      'NovibetWinterFurballsMegaWays',\n      'OceanFortune',\n      'OsmanliBonanzaMegaWays',\n      'PaddyPowerGoldMegaWays',\n      'PathOfDestiny',\n      'PeggySweets',\n      'PenguinsPowerplayMegaWays',\n      'PersianFortune',\n      'PhoenixFirePowerReels',\n      'PiggyPirates',\n      'PiggyRiches2MegaWays',\n      'PiggyRichesMegaWays',\n      'PiggyRichesMegaWaysLimited',\n      'PinatasAndPonies',\n      'PiratesPlenty',\n      'PiratesPlentyBattleForGold',\n      'PiratesPlentyMegaWays',\n      'PlayWithTheDevil',\n      'PokerdomAnniversaryMegaWays',\n      'PowerPathLuckyReelsMegaWays',\n      'PremioMayorMegaWays',\n      'PrimateKing',\n      'PrimateKingLimited',\n      'PrimateKingMegaWays',\n      'PrimateKingMegaWaysLimited',\n      'PussNBoots',\n      'RAsLegend',\n      'RainbowJackpots',\n      'RainbowJackpotsMegaWays',\n      'RainbowJackpotsPowerLines',\n      'RakiBonanzaMegaWays',\n      'Reactor',\n      'RedDiamond',\n      'RedHotBBQ',\n      'RedPhoenixRising',\n      'RedlineRush',\n      'ReelHeist',\n      'ReelKeeper',\n      'ReelKeeperLimited',\n      'ReelKeeperPowerReels',\n      'ReelKingMega',\n      'RegalBeasts',\n      'RegalStreak',\n      'ReptizillionsPowerReels',\n      'RiddleOfTheSphinx',\n      'RioStars',\n      'RisqueMegaWays',\n      'RobinHoodsWildForest',\n      'RockNLock',\n      'RocketMen',\n      'RomanEmperors',\n      'RoyalGems',\n      'RutschebanenMegaWays',\n      'SBOTOPRisingOfTheBeastMegaWays',\n      'SHOWMETHEHONEYMegaWays',\n      'SakuraMasks',\n      'SakuraMasksLimited',\n      'SantaExpressMegaWays',\n      'SantaSpins',\n      'SavannahPride',\n      'SexyWashMegaWays',\n      'ShadowSociety',\n      'ShahMat',\n      'SheepGoneWild',\n      'SirensRiches',\n      'SirensRichesLimited',\n      'SnowWildAndThe7Features',\n      'SpinTown',\n      'SpookyCarnival',\n      'SpringRaceMegaWays',\n      'Stage888',\n      'StarsLuck',\n      'StarvegasTombMegaWays',\n      'SteamSquad',\n      'StolenTreasures',\n      'SugarMonster',\n      'SugarMonsterLimited',\n      'SugarliciousEveryWay',\n      'SugarliciousEveryWayLimited',\n      'SukkerbagerenMegaWays',\n      'SultanBonanzaMegaWays',\n      'SumoSpins',\n      'SunFortune',\n      'SupremoFortunesMegaWays',\n      'SylvanSpirits',\n      'TempleOfCresusMegaWays',\n      'TempleOfGold',\n      'TenElements',\n      'TheBigTenMegaWays',\n      'TheEqualizer',\n      'TheGoodTheBadAndTheRich',\n      'TheGreatestTrainRobbery',\n      'TheWildHatter',\n      'TheWildHatterLimited',\n      'TheWildKiss',\n      'TheWisecrackerLightning',\n      'ThorsLightning',\n      'ThorsVengeance',\n      'ThreeKingdoms',\n      'ThreeMusketeers',\n      'TigerKingJoeExotic',\n      'TikiFruits',\n      'TikiFruitsTotemFrenzy',\n      'TotemLightning',\n      'TotemLightningPowerReels',\n      'TransylvaniaNightOfBlood',\n      'TreasureMine',\n      'TreasureMinePowerReels',\n      'TrickOfTheDeadWildCandiesMegaWays',\n      'TricksAndTreats',\n      'Trillionaire',\n      'TrillionaireMegaWays',\n      'TrophyFish',\n      'TurtleParadise',\n      'UltraRich',\n      'VaultCracker',\n      'VaultCrackerMegaWays',\n      'VaultCrackerMegaWaysLimited',\n      'VaultOfAnubis',\n      'VaultOfAnubisLimited',\n      'VickyVentura',\n      'VikingsLegacyEveryWay',\n      'ViralSpiral',\n      'WarOfGods',\n      'WellOfWildsMegaWays',\n      'WellOfWishes',\n      'WhatTheFoxMegaWays',\n      'WheelOfAmp',\n      'WildCatsMultiline',\n      'WildCircus',\n      'WildElements',\n      'WildExpedition',\n      'WildFight',\n      'WildHotChilliReels',\n      'WildHotChilliReels2',\n      'WildNords',\n      'WildOClock',\n      'WildSpartans',\n      'WildTouchdownMegaWays',\n      'WildTundra',\n      'WildWildChest',\n      'WinEscalator',\n      'WingsOfRa',\n      'WingsOfRaMegaWays',\n      'WinterBurstMegaWays',\n      'WinterWonders',\n      'WolfStacksMegaWays',\n      'Wolfkin',\n      'WrigleysWorld',\n      'YearRoundRichesClusterbuster',\n      'YearRoundRichesClusterbusterLimited',\n      'YucatansMystery',\n      'ZaidasFortune',\n      'ZeusLightningMegaWays',\n      'ZeusLightningPowerReels',\n      'ZillardKing'\n    ],\n    tigEntSlot: [\n      'BabylonRiches',\n      'BabylonRichesLimited',\n      'BeachInvaders',\n      'CasinoNight',\n      'DontEatTheCandy',\n      'DragonsPlayground',\n      'DruidsMagic',\n      'FruitShopFrenzy',\n      'FruitShopFrenzyLimited',\n      'GemCrush',\n      'GladiatorClash',\n      'GoodOld7s',\n      'JellyBellyMegaWays',\n      'JingleBellsBonanza',\n      'LeprechaunJoy',\n      'LightsCameraCash',\n      'LostRelics2',\n      'MagicLab',\n      'Mermaids',\n      'MineBlown',\n      'MsRobinHood',\n      'MummyMegaWays',\n      'PandorasTreasure',\n      'PiratesParty',\n      'RainforestGold',\n      'TheWishMasterMegaWays',\n      'TicketToWild',\n      'WildTurkeyMegaWays'\n    ],\n    caySlot: [\n      'AgesOfFortune',\n      'AladinsLamp',\n      'AliBabasTreasure',\n      'ArcticFishing',\n      'ArmandoRicoAndTheBookOfDragons',\n      'AsianRiches',\n      'BallOfShame',\n      'BarbarianTreasures',\n      'BeautysBeast',\n      'BetfairsWildArcade',\n      'BianconeriWilds',\n      'BigFishing',\n      'BigRacing',\n      'BombTheJackpot',\n      'BookOfDragons',\n      'BuffaloRespin',\n      'Bullfight',\n      'CastlePillager',\n      'CaveMegaBlast',\n      'ClassyVegas',\n      'CloningSheep',\n      'CrazySuper7s',\n      'Crusade',\n      'DarkJungle',\n      'DetectiveWilder',\n      'DiamondRush',\n      'DiscoFruits',\n      'DragonsWild',\n      'EasterMoney',\n      'EgyptianWilds',\n      'Fantasia',\n      'FlirtingTang',\n      'FootyFrenzy',\n      'FootyFrenzy2020',\n      'FootyFrenzy2022',\n      'ForestRush',\n      'FrootShoot',\n      'FruitPops',\n      'FruitStack',\n      'FruitStackBigSpins',\n      'FruitStackCashMachine',\n      'FruitStackDeluxe',\n      'FruitStackMysteryWin',\n      'FruitStackOne',\n      'FruitStackSuperDoubleWild',\n      'FunFair',\n      'GemBlast',\n      'GhostsNReels',\n      'GiftsOfRa',\n      'GoldenKingdom',\n      'GoldenPlanet',\n      'GoldenPot',\n      'GoldenThunder',\n      'GoldErado',\n      'Goldheads',\n      'GreatGems',\n      'GypsyLuck',\n      'HalloWin',\n      'HappyHour',\n      'HappyRooster',\n      'HotSlot',\n      'IndianPrincess',\n      'IrishClover',\n      'JadeDragon',\n      'JapaneseMystery',\n      'JoustingWilds',\n      'JigsAndReels',\n      'KeepingUpWithThePaddys',\n      'LeagueOfWilds',\n      'LittleRedRidingHood',\n      'LuckyCabaret',\n      'LuckyLadies',\n      'LuckyMahjong',\n      'MagicFairies',\n      'MagicMoney',\n      'MagnificentWild',\n      'ManekiGold',\n      'MaximusReels',\n      'MayanMystery',\n      'MazeOfFortune',\n      'MineCrusher',\n      'MississippiQueen',\n      'MoneyMachine',\n      'MoneyNight',\n      'MoneyTower',\n      'MonteCarloRacing',\n      'MrDiamonds',\n      'NeonWilds',\n      'NudgingGems',\n      'OstrichLuck',\n      'PaddyPowerFanatics',\n      'PaddyPowerGold',\n      'PaddyPowerGoldBookOfLuck',\n      'PaddyPowerGoldHaxe',\n      'PaddyPowerGoldOnTour',\n      'PaddyPowerMysteryGold',\n      'PaddyPowerShowtime',\n      'PaddysLuckyMine',\n      'PaddysLuckyPigeon',\n      'PaddysWonderWheelUnderConstruction',\n      'ParadiseTreasures',\n      'PearlRespins',\n      'PersianGlory',\n      'PharaohsEternalGlory93',\n      'PharaohsEternalGlory96',\n      'PiratesHold',\n      'PiratesHoldDavyLockersCoins',\n      'PoseidonFortune',\n      'PyramidGold',\n      'RacingWilds',\n      'RedEmperor',\n      'ReelsOfEgypt',\n      'RhinoRumble',\n      'RobinHoodGoldenLoot',\n      'RoyalGoose',\n      'RubyWalshChampionsGold',\n      'RussianGlory',\n      'SafariDream',\n      'SantasChristmasGifts',\n      'SantasSpins',\n      'ShamanSpins',\n      'ShowtimeSpinner',\n      'SinbadsGold',\n      'Skulls',\n      'SlottingSlopes',\n      'SmoothieSmash',\n      'SnowWhite',\n      'SolarSnap',\n      'SonsOfAsgard',\n      'SparklingJackpot',\n      'SphinxGold',\n      'SpyAffairs',\n      'SuperFuego',\n      'ThaiThai',\n      'TheGreatWild',\n      'TheHeist',\n      'TotemsWild',\n      'TowerOfWealth',\n      'TrickOTreat',\n      'TumbleDwarf',\n      'TumbleDwarfAndTheLibraryOfSecrets',\n      'TumbleDwarfMysteryGold',\n      'WheelOrDeal',\n      'WildBugs',\n      'WildEgypt',\n      'WildSheriff',\n      'WildStars',\n      'WildWildWeb',\n      'WishAWin',\n      'WorldOfWizards',\n      'WormKing'\n    ],\n    dopBlackjack: [\n      'ClassicBlackjack',\n      'DONDBlackjack',\n      'PlatinumBlackjack',\n      'PlatinumBlackjackSideBetsPA'\n    ],\n    dopRoulette: [\n      'EuropeanRoulette',\n      'PlatinumRoulette',\n      'PlatinumRouletteSingleZero'\n    ],\n    dopBaccarat: [ 'PuntoBanco' ],\n    nsgSlot: [\n      'AliBabasLuckMegaways',\n      'AliBabasLuckPowerReels',\n      'AmazonIslandMegaWays',\n      'AztecShamansMegaWays',\n      'LeprechaunsMagic',\n      'ChineseWilds',\n      'ElephantTreasure',\n      'EpicTreasure',\n      'EpicTreasure2',\n      'GoldenLamps',\n      'GoldenToad',\n      'LeprechaunsMagicMegaways',\n      'LeprechaunsMagicPowerReels',\n      'LuckyCarnival',\n      'MacauRacing',\n      'NeptunesRiches',\n      'NightmareFamilyMegaWays',\n      'RedHotSlot',\n      'AsianFortune',\n      'DragonPearl',\n      'AliBabasLuck',\n      'CasinoSpin',\n      'CobraQueen',\n      'DreamDestiny',\n      'WantedWildz',\n      'WantedWildzExtreme',\n      '80sSpins',\n      'CottonGangAffair',\n      'DesertLegendsSpins',\n      'JellyMULTIHOPS',\n      'SeaBoatAdventure',\n      'ChristmasMULTIHOPS',\n      'MidnightThirst',\n      'DrFrancashstein',\n      'DontHitPlz',\n      'SwordStomp',\n      'PurrPower',\n      'GlowDig',\n      'LosMuertosLocos',\n      'SeaBoatAdventureMegaWays',\n      'FishNFish',\n      'RumbleMutts',\n      'ArcOfZeus'\n    ],\n    cayBlackjack: [\n      'BlackjackStandard3H',\n      'BlackjackPremium3H',\n      'BlackjackPremium3HPlus',\n      'BlackjackPremium3HCashOut',\n      'BlackjackClassic',\n      'BlackjackOriginal',\n      'BlackjackOriginalCashOut',\n      'BlackjackOriginalSideBets',\n      'BlackjackPremiumSideBets'\n    ],\n    cayRoulette: [\n      'RouletteEuropean',\n      'RoulettePremium',\n      'RouletteMoneyBack',\n      'RoulettePremiumPlus',\n      'RoulettePremiumMoneyBack',\n      'RoulettePremium2018',\n      'RouletteClassic',\n      'RouletteOriginalMoneyBack',\n      'RouletteOriginal',\n      'RouletteOriginalStats'\n    ],\n    cayScratch: [\n      'ScrRubyWalshChampionsGold',\n      'Scr10pRubyWalshChampionsGold',\n      'FourInOneScratchStake1',\n      'FourInOneScratchStake2',\n      'FourInOneScratchStake5',\n      'FourInOneScratchStake10',\n      'ScrFootyFrenzy',\n      'ScrFootyFrenzy2020',\n      'ScrFootyFrenzy2022',\n      'Scr10pFootyFrenzy2022'\n    ],\n    cay3CardBrag: [ '3CardBrag' ],\n    cayVideoPoker: [ 'VPJacksOrBetterCashoutPremium' ]\n  },\n  lines: {\n    dop: [\n      '10001Nights',\n      '10001NightsLimited',\n      '1942SkyWarrior',\n      '24HourGrandPrix',\n      '5Families',\n      '777Strike',\n      '777StrikeEDC',\n      '7sLuck',\n      'AgentRoyale',\n      'AncientDisco',\n      'AncientScript',\n      'AncientsBlessing',\n      'ApacheWay',\n      'ArcadeBomb',\n      'ArchdragonsLuckPowerReels',\n      'Astronaut',\n      'Atlantis',\n      'AurumCodex',\n      'AztecSpins',\n      'BabylonRiches',\n      'BabylonRichesLimited',\n      'BaseGame',\n      'BassBoss',\n      'BeachInvaders',\n      'Beriched',\n      'BerichedLimited',\n      'BettyBorisAndBoo',\n      'BlueDiamond',\n      'BountyRaid',\n      'BountyRaid2',\n      'BountyRaidLimited',\n      'BugsysBar',\n      'BullsRunWild',\n      'CakeAndIceCream',\n      'CaseClosed',\n      'CashExplorer',\n      'CashOrNothing',\n      'CashUltimate',\n      'CashVolt',\n      'ChineseTreasures',\n      'ChristmasMorning',\n      'Cinderella',\n      'CirqueDeLaFortune',\n      'ClashOfTheBeasts',\n      'CloverCraze',\n      'CrazyGenie',\n      'CrystalMirror',\n      'DaVincisMystery',\n      'DearSanta',\n      'DevilsNumber',\n      'DiamondBlitz',\n      'DiamondDoggies',\n      'DiamondRoyale',\n      'DiamondsUp',\n      'DiceDiceDice',\n      'DivineWays',\n      'DontEatTheCandy',\n      'DraculaAwakening',\n      'DragonKingLegendOfTheSeas',\n      'DragonsFire',\n      'DragonsLock',\n      'DragonsLuck',\n      'DragonsLuckDeluxe',\n      'DragonsLuckStacks',\n      'DragonsMirror',\n      'DruidsMagic',\n      'DynamiteRiches',\n      'DynamiteRichesLimited',\n      'EagleRiches',\n      'EaglesStrike',\n      'EasyGold',\n      'EasyGoldLimited',\n      'ElvenMagic',\n      'EmeraldDiamond',\n      'EpicJourney',\n      'EsqueletoMariachi',\n      'FaFaBabies',\n      'Fishtastic',\n      'FishtasticLimited',\n      'FiveStar',\n      'FiveStarPowerReels',\n      'FlamingFox',\n      'Flodder',\n      'Forever7s',\n      'FortuneFest',\n      'FortuneHouse',\n      'FortuneHousePowerReels',\n      'FruitShopFrenzy',\n      'FruitShopFrenzyLimited',\n      'GemsGoneWild',\n      'GemsGoneWildPowerReels',\n      'Gemtastic',\n      'GenieNights',\n      'GigaBlast',\n      'GladiatorClash',\n      'GodOfWealth',\n      'GodsOfTroy',\n      'GoldMineMistress',\n      'GoldStar',\n      'GoldenCryptex',\n      'GoldenLotus',\n      'GoldenOffer',\n      'GoldenTsar',\n      'GonzitasQuest',\n      'GrandWheel',\n      'GreatGold',\n      'HammerGods',\n      'HanselAndGretelCandyhouseLines',\n      'HarleCoin',\n      'HoardOfPoseidon',\n      'HoardOfPoseidonLimited',\n      'HonoluluNights',\n      'HundredKDrop',\n      'Hustling',\n      'ImperialPalace',\n      'InTheRabbitHole',\n      'JackpotQuest',\n      'JadeCharms',\n      'JesterSpins',\n      'JewelScarabs',\n      'JingleBells',\n      'JingleBellsBonanza',\n      'JingleBellsLimited',\n      'JingleBellsPowerReels',\n      'JoeExotic',\n      'LastChanceSaloon',\n      'LegendOfAthena',\n      'LegendaryExcalibur',\n      'LeprechaunJoy',\n      'LionDance',\n      'LionsHoard',\n      'LordOfTheWilds',\n      'LuckyDevil',\n      'LuckyEaster',\n      'LuckyFortuneCat',\n      'LuckyFridays',\n      'LuckyHalloween',\n      'LuckyMrGreen',\n      'LuckyOktoberfest',\n      'LuckyValentine',\n      'LuckyWizard',\n      'MagicGate',\n      'MagicTricks',\n      'MajesticMysteriesPowerReels',\n      'Masquerade',\n      'MayanGods',\n      'Mayhem',\n      'MegaJade',\n      'MegaPyramid',\n      'MegaRise',\n      'Mermaids',\n      'MidasGold',\n      'MidnightRomance',\n      'MineBlown',\n      'MoonSpell',\n      'MultiplierRiches',\n      'MysteryFruit',\n      'MysteryFruitLimited',\n      'MysteryReelsDeluxe',\n      'MysteryReelsMegaWays',\n      'MysteryReelsPowerReels',\n      'MysticStaxx',\n      'MysticWheel',\n      'NeonLinks',\n      'NightRoller',\n      'OceanFortune',\n      'PathOfDestiny',\n      'PersianFortune',\n      'PhoenixFirePowerReels',\n      'PiggyPirates',\n      'PiratesPlenty',\n      'PiratesPlentyBattleForGold',\n      'PlayWithTheDevil',\n      'PrimateKing',\n      'PrimateKingLimited',\n      'PussNBoots',\n      'RAsLegend',\n      'RainbowJackpots',\n      'RainbowJackpotsPowerLines',\n      'RainforestGold',\n      'Reactor',\n      'RedDiamond',\n      'RedHotBBQ',\n      'RedPhoenixRising',\n      'RedlineRush',\n      'ReelHeist',\n      'ReelKeeper',\n      'ReelKeeperLimited',\n      'ReelKeeperPowerReels',\n      'ReelKingMega',\n      'RegalBeasts',\n      'RegalStreak',\n      'ReptizillionsPowerReels',\n      'RiddleOfTheSphinx',\n      'RioStars',\n      'RobinHoodsWildForest',\n      'RockNLock',\n      'RocketMen',\n      'RomanEmperors',\n      'SakuraMasks',\n      'SakuraMasksLimited',\n      'SantaSpins',\n      'SavannahPride',\n      'ShadowSociety',\n      'SheepGoneWild',\n      'SirensRiches',\n      'SirensRichesLimited',\n      'SnowWildAndThe7Features',\n      'SpookyCarnival',\n      'Stage888',\n      'StolenTreasures',\n      'SumoSpins',\n      'SunFortune',\n      'TempleOfGold',\n      'TenElements',\n      'TheEqualizer',\n      'TheGoodTheBadAndTheRich',\n      'TheGreatestTrainRobbery',\n      'TheWildHatter',\n      'TheWildHatterLimited',\n      'TheWisecrackerLightning',\n      'ThreeKingdoms',\n      'ThreeMusketeers',\n      'TicketToWild',\n      'TigerKingJoeExotic',\n      'TikiFruits',\n      'TotemLightning',\n      'TotemLightningPowerReels',\n      'TreasureMine',\n      'TreasureMinePowerReels',\n      'TricksAndTreats',\n      'Trillionaire',\n      'TrophyFish',\n      'TurtleParadise',\n      'UltraRich',\n      'VaultCracker',\n      'ViralSpiral',\n      'WarOfGods',\n      'WellOfWishes',\n      'WheelOfAmp',\n      'WildCatsMultiline',\n      'WildCircus',\n      'WildElements',\n      'WildExpedition',\n      'WildFight',\n      'WildHotChilliReels',\n      'WildNords',\n      'WildOClock',\n      'WildSpartans',\n      'WildWildChest',\n      'WinEscalator',\n      'WingsOfRa',\n      'WinterWonders',\n      'Wolfkin',\n      'YucatansMystery',\n      'ZaidasFortune',\n      'ZeusLightningPowerReels',\n      'ZillardKing'\n    ]\n  }\n};\n\nmodule.exports = Config;","module.exports =\n {\n  lines: [\n    { id: '10001Nights', hash: '554c21fc88' },\n    { id: '10001NightsLimited', hash: '136fc4042f' },\n    { id: '1942SkyWarrior', hash: 'fd8c30b999' },\n    { id: '24HourGrandPrix', hash: 'abed1feca8' },\n    { id: '5Families', hash: '0e6ab42754' },\n    { id: '777Strike', hash: 'eaad0729de' },\n    { id: '777StrikeEDC', hash: 'ae0b8a32e7' },\n    { id: '7sLuck', hash: '28ef97c824' },\n    { id: 'AgentRoyale', hash: '636f4686e4' },\n    { id: 'AncientDisco', hash: 'ad1b025536' },\n    { id: 'AncientsBlessing', hash: '243e83a2e0' },\n    { id: 'AncientScript', hash: 'efbea6331a' },\n    { id: 'ApacheWay', hash: 'e6559beb50' },\n    { id: 'ArcadeBomb', hash: 'ad1b025536' },\n    { id: 'ArchdragonsLuckPowerReels', hash: '6e79a10af0' },\n    { id: 'Astronaut', hash: 'd751713988' },\n    { id: 'Atlantis', hash: '668c6cb757' },\n    { id: 'AurumCodex', hash: '2a129f69b0' },\n    { id: 'AztecSpins', hash: 'abed1feca8' },\n    { id: 'BabylonRiches', hash: '1203d65002' },\n    { id: 'BabylonRichesLimited', hash: '1203d65002' },\n    { id: 'BaseGame', hash: 'd7e7cac7b0' },\n    { id: 'BassBoss', hash: '9d20c9b4d3' },\n    { id: 'BeachInvaders', hash: '92882b4817' },\n    { id: 'Beriched', hash: 'f9fe55b48e' },\n    { id: 'BerichedLimited', hash: 'f9fe55b48e' },\n    { id: 'BettyBorisAndBoo', hash: 'e9335b0fe2' },\n    { id: 'BlueDiamond', hash: '28a54403ba' },\n    { id: 'BountyRaid', hash: '2adf474b9b' },\n    { id: 'BountyRaid2', hash: '3c935ab005' },\n    { id: 'BountyRaidLimited', hash: '2adf474b9b' },\n    { id: 'BugsysBar', hash: '4288a69cdd' },\n    { id: 'BullsRunWild', hash: 'c858c4efac' },\n    { id: 'CakeAndIceCream', hash: '01a877a880' },\n    { id: 'CaseClosed', hash: '0a039cb77a' },\n    { id: 'CashExplorer', hash: 'ce34773c91' },\n    { id: 'CashOrNothing', hash: 'b26c48bcfd' },\n    { id: 'CashUltimate', hash: '0196324c27' },\n    { id: 'CashVolt', hash: '57510a97b8' },\n    { id: 'ChineseTreasures', hash: 'ad1b025536' },\n    { id: 'ChristmasMorning', hash: 'ae0b8a32e7' },\n    { id: 'Cinderella', hash: 'ad1b025536' },\n    { id: 'CirqueDeLaFortune', hash: '883da0c260' },\n    { id: 'ClashOfTheBeasts', hash: '896cf6cfcf' },\n    { id: 'CloverCraze', hash: '28ef97c824' },\n    { id: 'CrazyGenie', hash: 'ad1b025536' },\n    { id: 'CrystalMirror', hash: 'd411731ad4' },\n    { id: 'DaVincisMystery', hash: '9e48f6213a' },\n    { id: 'DearSanta', hash: '788979f4eb' },\n    { id: 'DevilsNumber', hash: '383a0bec8f' },\n    { id: 'DiamondBlitz', hash: '54024c5d75' },\n    { id: 'DiamondDoggies', hash: 'ce34773c91' },\n    { id: 'DiamondRoyale', hash: '30557a4f78' },\n    { id: 'DiamondsUp', hash: '788979f4eb' },\n    { id: 'DiceDiceDice', hash: 'eaad0729de' },\n    { id: 'DivineWays', hash: 'ad1b025536' },\n    { id: 'DontEatTheCandy', hash: 'f687d2e78b' },\n    { id: 'DraculaAwakening', hash: '0196324c27' },\n    { id: 'DragonKingLegendOfTheSeas', hash: '16e06c4bb9' },\n    { id: 'DragonsFire', hash: '6d09ca2fae' },\n    { id: 'DragonsLock', hash: '7e3258a1ae' },\n    { id: 'DragonsLuck', hash: 'efbea6331a' },\n    { id: 'DragonsLuckDeluxe', hash: 'bb24bf1067' },\n    { id: 'DragonsLuckStacks', hash: 'd0a3fc8ac8' },\n    { id: 'DragonsMirror', hash: '788979f4eb' },\n    { id: 'DruidsMagic', hash: 'b0f4b8aca9' },\n    { id: 'DynamiteRiches', hash: '554c21fc88' },\n    { id: 'DynamiteRichesLimited', hash: '554c21fc88' },\n    { id: 'EagleRiches', hash: 'a737950291' },\n    { id: 'EaglesStrike', hash: '5d9299fad4' },\n    { id: 'EasyGold', hash: 'd751713988' },\n    { id: 'ElvenMagic', hash: 'ad1b025536' },\n    { id: 'EmeraldDiamond', hash: '28a54403ba' },\n    { id: 'EpicJourney', hash: 'ad1b025536' },\n    { id: 'EsqueletoMariachi', hash: '6d09ca2fae' },\n    { id: 'FaFaBabies', hash: 'b26c48bcfd' },\n    { id: 'Fishtastic', hash: '0c8b0480bf' },\n    { id: 'FishtasticLimited', hash: '0c8b0480bf' },\n    { id: 'FiveStar', hash: '3e4c202882' },\n    { id: 'FiveStarPowerReels', hash: '5577e9474c' },\n    { id: 'FlamingFox', hash: 'f89a1408f5' },\n    { id: 'Flodder', hash: '29ecc1fd04' },\n    { id: 'Forever7s', hash: '28a54403ba' },\n    { id: 'FortuneFest', hash: 'efbea6331a' },\n    { id: 'FortuneHouse', hash: 'ad1b025536' },\n    { id: 'FortuneHousePowerReels', hash: 'c4f6bb2b02' },\n    { id: 'FruitShopFrenzy', hash: '17223bc9bd' },\n    { id: 'FruitShopFrenzyLimited', hash: 'b90e5a00a6' },\n    { id: 'GemsGoneWild', hash: 'ad1b025536' },\n    { id: 'GemsGoneWildPowerReels', hash: 'c4f6bb2b02' },\n    { id: 'Gemtastic', hash: 'bbac199fe3' },\n    { id: 'GenieNights', hash: '764f990495' },\n    { id: 'GigaBlast', hash: 'a921a9cc12' },\n    { id: 'GladiatorClash', hash: '2196bcdd97' },\n    { id: 'GodOfWealth', hash: 'ad1b025536' },\n    { id: 'GodsOfTroy', hash: '4288a69cdd' },\n    { id: 'GoldenCryptex', hash: '337b424204' },\n    { id: 'GoldenLotus', hash: 'ad1b025536' },\n    { id: 'GoldenOffer', hash: '467cc2bb3a' },\n    { id: 'GoldenTsar', hash: 'dd3cea1145' },\n    { id: 'GoldMineMistress', hash: '70c73de8a9' },\n    { id: 'GoldStar', hash: 'ad1b025536' },\n    { id: 'GonzitasQuest', hash: '507d8c1503' },\n    { id: 'GrandWheel', hash: 'd2cd8dc755' },\n    { id: 'GreatGold', hash: '4bd82b091c' },\n    { id: 'HammerGods', hash: '3ddeefb8cb' },\n    { id: 'HanselAndGretelCandyhouseLines', hash: '788979f4eb' },\n    { id: 'HarleCoin', hash: '28a54403ba' },\n    { id: 'HoardOfPoseidon', hash: '0196324c27' },\n    { id: 'HoardOfPoseidonLimited', hash: '0196324c27' },\n    { id: 'HonoluluNights', hash: 'bac8238f30' },\n    { id: 'HundredKDrop', hash: 'ad1b025536' },\n    { id: 'Hustling', hash: 'bffd40a071' },\n    { id: 'ImperialPalace', hash: 'ad1b025536' },\n    { id: 'InTheRabbitHole', hash: '90e1e3781d' },\n    { id: 'JackpotQuest', hash: '67fa28073b' },\n    { id: 'JadeCharms', hash: 'ad1b025536' },\n    { id: 'JesterSpins', hash: 'bac8238f30' },\n    { id: 'JewelScarabs', hash: 'eb15e59be2' },\n    { id: 'JingleBells', hash: 'ad1b025536' },\n    { id: 'JingleBellsBonanza', hash: 'd8f0993429' },\n    { id: 'JingleBellsLimited', hash: 'ad1b025536' },\n    { id: 'JingleBellsPowerReels', hash: '3ec973f6f5' },\n    { id: 'JoeExotic', hash: 'ff26084ec3' },\n    { id: 'LastChanceSaloon', hash: 'fd8c30b999' },\n    { id: 'LegendaryExcalibur', hash: 'eaad0729de' },\n    { id: 'LegendOfAthena', hash: '0137f214dc' },\n    { id: 'LeprechaunJoy', hash: '493012fe12' },\n    { id: 'LionDance', hash: '6d09ca2fae' },\n    { id: 'LionsHoard', hash: 'f9fe55b48e' },\n    { id: 'LordOfTheWilds', hash: '0196324c27' },\n    { id: 'LuckyDevil', hash: 'efbea6331a' },\n    { id: 'LuckyEaster', hash: 'ad1b025536' },\n    { id: 'LuckyFortuneCat', hash: 'ad1b025536' },\n    { id: 'LuckyFridays', hash: '3ddeefb8cb' },\n    { id: 'LuckyHalloween', hash: 'ad1b025536' },\n    { id: 'LuckyMrGreen', hash: 'ad1b025536' },\n    { id: 'LuckyOktoberfest', hash: '90e1e3781d' },\n    { id: 'LuckyValentine', hash: 'ad1b025536' },\n    { id: 'LuckyWizard', hash: '6d09ca2fae' },\n    { id: 'MagicGate', hash: 'ad1b025536' },\n    { id: 'MagicTricks', hash: 'b3a0a8009e' },\n    { id: 'MajesticMysteriesPowerReels', hash: '2fde0ff29d' },\n    { id: 'Masquerade', hash: '6bb9f412e7' },\n    { id: 'MayanGods', hash: '989e9c66f1' },\n    { id: 'Mayhem', hash: 'faa30a2f52' },\n    { id: 'MegaJade', hash: 'efbea6331a' },\n    { id: 'MegaPyramid', hash: '383a0bec8f' },\n    { id: 'MegaRise', hash: 'bac8238f30' },\n    { id: 'Mermaids', hash: 'de7a692b35' },\n    { id: 'MidasGold', hash: '4677dd8218' },\n    { id: 'MidnightRomance', hash: 'ce34773c91' },\n    { id: 'MineBlown', hash: 'a561aabf9f' },\n    { id: 'MoonSpell', hash: '28ef97c824' },\n    { id: 'MultiplierRiches', hash: '799f378895' },\n    { id: 'MysteryFruit', hash: 'ad1b025536' },\n    { id: 'MysteryFruitLimited', hash: 'ad1b025536' },\n    { id: 'MysteryReelsDeluxe', hash: 'e6559beb50' },\n    { id: 'MysteryReelsMegaWays', hash: 'd751713988' },\n    { id: 'MysteryReelsPowerReels', hash: '763d398ba0' },\n    { id: 'MysticStaxx', hash: '7dc717d8c6' },\n    { id: 'MysticWheel', hash: '70aa7130f9' },\n    { id: 'NeonLinks', hash: '30557a4f78' },\n    { id: 'NightRoller', hash: 'ac86fec757' },\n    { id: 'OceanFortune', hash: 'ad1b025536' },\n    { id: 'PathOfDestiny', hash: 'f9fe55b48e' },\n    { id: 'PersianFortune', hash: 'ad1b025536' },\n    { id: 'PhoenixFirePowerReels', hash: 'eb9b1feada' },\n    { id: 'PiggyPirates', hash: '02fceeed54' },\n    { id: 'PiratesPlenty', hash: '16ce2bb2cd' },\n    { id: 'PiratesPlentyBattleForGold', hash: '51683b2821' },\n    { id: 'PlayWithTheDevil', hash: '978e9a1626' },\n    { id: 'PrimateKing', hash: '3b584f8515' },\n    { id: 'PrimateKingLimited', hash: 'dd3cea1145' },\n    { id: 'PussNBoots', hash: 'ad1b025536' },\n    { id: 'RainbowJackpots', hash: 'ad1b025536' },\n    { id: 'RainbowJackpotsPowerLines', hash: '251f835c6f' },\n    { id: 'RainforestGold', hash: '7c30fc7e95' },\n    { id: 'RAsLegend', hash: '6d09ca2fae' },\n    { id: 'Reactor', hash: '170725b0d8' },\n    { id: 'RedDiamond', hash: '28a54403ba' },\n    { id: 'RedHotBBQ', hash: 'ad1b025536' },\n    { id: 'RedlineRush', hash: 'ce34773c91' },\n    { id: 'RedPhoenixRising', hash: '6d09ca2fae' },\n    { id: 'ReelHeist', hash: 'b169281f06' },\n    { id: 'ReelKeeper', hash: '1ea1dd625b' },\n    { id: 'ReelKeeperLimited', hash: '1ea1dd625b' },\n    { id: 'ReelKeeperPowerReels', hash: 'c667665c62' },\n    { id: 'ReelKingMega', hash: '723c2b89c7' },\n    { id: 'RegalBeasts', hash: '037e87e0b9' },\n    { id: 'RegalStreak', hash: '3e4c202882' },\n    { id: 'ReptizillionsPowerReels', hash: '6c76d4f564' },\n    { id: 'RiddleOfTheSphinx', hash: 'f9fe55b48e' },\n    { id: 'RioStars', hash: '3ddeefb8cb' },\n    { id: 'RobinHoodsWildForest', hash: 'edbd8925ba' },\n    { id: 'RocketMen', hash: 'ad1b025536' },\n    { id: 'RockNLock', hash: '15e64e2d28' },\n    { id: 'RomanEmperors', hash: '788979f4eb' },\n    { id: 'SakuraMasks', hash: 'f30b4917e1' },\n    { id: 'SakuraMasksLimited', hash: 'f30b4917e1' },\n    { id: 'SantaSpins', hash: '3c935ab005' },\n    { id: 'SavannahPride', hash: 'ce34773c91' },\n    { id: 'ShadowSociety', hash: '711a31d699' },\n    { id: 'SheepGoneWild', hash: '15e64e2d28' },\n    { id: 'SirensRiches', hash: '05f147d9c6' },\n    { id: 'SirensRichesLimited', hash: '05f147d9c6' },\n    { id: 'SnowWildAndThe7Features', hash: 'ad1b025536' },\n    { id: 'SpinTown', hash: '6d09ca2fae' },\n    { id: 'SpookyCarnival', hash: '6ee05ed42c' },\n    { id: 'Stage888', hash: 'ad1b025536' },\n    { id: 'StarsLuck', hash: 'efbea6331a' },\n    { id: 'StolenTreasures', hash: 'b976323bb4' },\n    { id: 'SumoSpins', hash: '6d09ca2fae' },\n    { id: 'SunFortune', hash: 'efbea6331a' },\n    { id: 'TempleOfGold', hash: 'ad1b025536' },\n    { id: 'TenElements', hash: '6d09ca2fae' },\n    { id: 'TheEqualizer', hash: '904acdf3ab' },\n    { id: 'TheGoodTheBadAndTheRich', hash: '788979f4eb' },\n    { id: 'TheGreatestTrainRobbery', hash: '8989c4ae64' },\n    { id: 'TheWildHatter', hash: '3ddeefb8cb' },\n    { id: 'TheWildHatterLimited', hash: '3ddeefb8cb' },\n    { id: 'TheWisecrackerLightning', hash: '30557a4f78' },\n    { id: 'ThreeKingdoms', hash: 'ad1b025536' },\n    { id: 'ThreeMusketeers', hash: '6d09ca2fae' },\n    { id: 'TicketToWild', hash: 'ea58923559' },\n    { id: 'TigerKingJoeExotic', hash: 'ff26084ec3' },\n    { id: 'TotemLightning', hash: '6d09ca2fae' },\n    { id: 'TotemLightningPowerReels', hash: '956b922e69' },\n    { id: 'TreasureMine', hash: '6d09ca2fae' },\n    { id: 'TreasureMinePowerReels', hash: '6c76d4f564' },\n    { id: 'TricksAndTreats', hash: '39ff8fa646' },\n    { id: 'Trillionaire', hash: 'f9fe55b48e' },\n    { id: 'TrophyFish', hash: '28ef97c824' },\n    { id: 'TurtleParadise', hash: '24e7b4d5c3' },\n    { id: 'UltraRich', hash: '788979f4eb' },\n    { id: 'VaultCracker', hash: '16e06c4bb9' },\n    { id: 'ViralSpiral', hash: 'd751713988' },\n    { id: 'WarOfGods', hash: 'e561d99f31' },\n    { id: 'WellOfWishes', hash: '90e1e3781d' },\n    { id: 'WheelOfAmp', hash: 'a2f7ad42e6' },\n    { id: 'WildCatsMultiline', hash: 'c039ff9b37' },\n    { id: 'WildCircus', hash: '6d09ca2fae' },\n    { id: 'WildElements', hash: '3bcaaae6d6' },\n    { id: 'WildExpedition', hash: '0196324c27' },\n    { id: 'WildFight', hash: 'ad1b025536' },\n    { id: 'WildHotChilliReels', hash: '5a25247d01' },\n    { id: 'WildNords', hash: 'ad1b025536' },\n    { id: 'WildOClock', hash: 'cf0f2e3198' },\n    { id: 'WildSpartans', hash: 'efbea6331a' },\n    { id: 'WildWildChest', hash: 'ad1b025536' },\n    { id: 'WinEscalator', hash: '64d873ff50' },\n    { id: 'WingsOfRa', hash: 'e1ae4aea84' },\n    { id: 'WinterWonders', hash: '6d09ca2fae' },\n    { id: 'Wolfkin', hash: '2a041f87e2' },\n    { id: 'YucatansMystery', hash: '0196324c27' },\n    { id: 'ZaidasFortune', hash: '70b7a0978e' },\n    { id: 'ZeusLightningPowerReels', hash: 'c9ea3d4f55' },\n    { id: 'ZillardKing', hash: 'dd3cea1145' }\n  ]\n}","const GamesMappings = {\n    \"BlackjackStandard3H\": {\n        \"source\": \"BlackjackClassic\"\n    },\n    \"PlatinumBlackjack21Plus3PE\": {\n        \"source\": \"PlatinumBlackjack\"\n    },\n    \"PlatinumBlackjackAnyPair\": {\n        \"source\": \"PlatinumBlackjack\"\n    },\n    \"PlatinumBlackjackBustorama\": {\n        \"source\": \"PlatinumBlackjack\"\n    },\n    \"PlatinumBlackjackSideBets\": {\n        \"source\": \"PlatinumBlackjack\"\n    },\n    \"RouletteEuropean\": {\n        \"source\": \"RouletteClassic\"\n    },\n    \"RouletteMoneyBack\": {\n        \"source\": \"RouletteOriginalMoneyBack\"\n    },\n    \"RoulettePremium\": {\n        \"source\": \"RouletteOriginal\"\n    },\n    \"RoulettePremium2018\": {\n        \"source\": \"RoulettePremium\"\n    },\n    \"RoulettePremiumPlus\": {\n        \"source\": \"RouletteOriginalStats\"\n    },\n    \"BerichedLimited\": {\n        \"source\": \"BerichedLimited\"\n    },\n    \"BountyRaidLimited\": {\n        \"source\": \"BountyRaid\"\n    },\n    \"EasyGoldDecpoint\": {\n        \"source\":\"EasyGold\"\n    },\n    \"HoardOfPoseidonLimited\": {\n        \"source\": \"HoardOfPoseidon\"\n    },\n    \"MysteryFruitLimited\": {\n        \"source\": \"MysteryFruit\"\n    },\n    \"PiggyRichesMegaWaysLimited\": {\n        \"source\": \"PiggyRichesMegaWays\"\n    },\n    \"ReelKeeperLimited\": {\n        \"source\": \"ReelKeeper\"\n    },\n    \"TheWildHatterLimited\": {\n        \"source\": \"TheWildHatter\"\n    },\n    \"TigerKingJoeExotic\": {\n        \"source\": \"JoeExotic\"\n    },\n    \"VaultOfAnubisLimited\": {\n        \"source\": \"VaultOfAnubis\"\n    },\n    \"ZeusLightningPowerReelsWheel\": {\n        \"source\":\"ZeusLightningPowerReels\"\n    },\n    \"WellOfWildsMegaWaysWheel\": {\n        \"source\":\"WellOfWildsMegaWays\"\n    },\n    \"PiratesPlentyMegaWaysWheel\": {\n        \"source\":\"PiratesPlentyMegaWays\"\n    },\n    \"GonzosQuestMegaWaysWheel\": {\n        \"source\":\"GonzosQuestMegaWays\"\n    },\n    \"GonzosQuestMegaWaysLimited\": {\n        \"source\":\"GonzosQuestMegaWays\"\n    },\n    \"ClassicBlackjackBetConstruct\": {\n        \"source\":\"ClassicBlackjack\"\n    },\n    \"ClassicBlackjackBetfair\": {\n        \"source\":\"ClassicBlackjack\"\n    },\n    \"ClassicBlackjackBetsson\": {\n        \"source\":\"ClassicBlackjack\"\n    },\n    \"ClassicBlackjackBetssonColor\": {\n        \"source\":\"ClassicBlackjack\"\n    },\n    \"ClassicBlackjackLeoVegas\": {\n        \"source\":\"ClassicBlackjack\"\n    },\n    \"ClassicBlackjackMrGreen\": {\n        \"source\":\"ClassicBlackjack\"\n    },\n    \"ClassicBlackjackPaddyPower\": {\n        \"source\":\"ClassicBlackjack\"\n    },\n    \"ClassicBlackjackRank\": {\n        \"source\":\"ClassicBlackjack\"\n    },\n    \"EuropeanRouletteBetConstruct\": {\n        \"source\":\"EuropeanRoulette\"\n    },\n    \"EuropeanRouletteBetfair\": {\n        \"source\":\"EuropeanRoulette\"\n    },\n    \"EuropeanRouletteLeoVegas\": {\n        \"source\":\"EuropeanRoulette\"\n    },\n    \"EuropeanRouletteMrGreen\": {\n        \"source\":\"EuropeanRoulette\"\n    },\n    \"EuropeanRoulettePaddyPower\": {\n        \"source\":\"EuropeanRoulette\"\n    },\n    \"EuropeanRouletteRank\": {\n        \"source\":\"EuropeanRoulette\"\n    },\n    \"EuropeanRouletteWilliamHill\": {\n        \"source\":\"EuropeanRoulette\"\n    },\n    \"PlatinumRoulettePlayStar\": {\n        \"source\":\"PlatinumRoulette\"\n    },\n    \"PuntoBancoBetfair\": {\n        \"source\":\"PuntoBanco\"\n    },\n    \"PuntoBancoBetsson\": {\n        \"source\":\"PuntoBanco\"\n    },\n    \"PuntoBancoLeoVegas\": {\n        \"source\":\"PuntoBanco\"\n    },\n    \"PuntoBancoMrGreen\": {\n        \"source\":\"PuntoBanco\"\n    },\n    \"PuntoBancoPaddyPower\": {\n        \"source\":\"PuntoBanco\"\n    },\n    \"PuntoBancoRank\": {\n        \"source\":\"PuntoBanco\"\n    }\n};\n\nmodule.exports = GamesMappings;","const keyValueMap = {\n\tPlatinumRoulette: {\n\t\t//replacing server object keys with different values, e.g. red_0 becomes color_0, and  black_0 becomes color_1,\n\t\t//so the two values can be grouped\n\t\tpre: {\n\t\t\tred_0: 'color_0',\n\t\t\tblack_0: 'color_1',\n\t\t\teven_0: 'evenOdd_0',\n\t\t\todd_0: 'evenOdd_1',\n\t\t\tsmall_0: 'smallBig_0',\n\t\t\tbig_0: 'smallBig_1'\n\t\t},\n\t\t//replacing server object keys with more readable after parsing, e.g. split_0 becomes '1 - 2'\n\t\tpost: {\n\t\t\t//trios\n\t\t\ttrio_0: '0 - 1 - 2',\n\t\t\ttrio_1: '0 - 00 - 2',\n\t\t\ttrio_2: '00 - 2 - 3',\n\t\t\t//straights\n\t\t\tstraight_00 : '00',\n\t\t\tstraight_0 : '0',\n\t\t\tstraight_1 : '1',\n\t\t\tstraight_2 : '2',\n\t\t\tstraight_3 : '3',\n\t\t\tstraight_4 : '4',\n\t\t\tstraight_5 : '5',\n\t\t\tstraight_6 : '6',\n\t\t\tstraight_7 : '7',\n\t\t\tstraight_8 : '8',\n\t\t\tstraight_9 : '9',\n\t\t\tstraight_10 : '10',\n\t\t\tstraight_11 : '11',\n\t\t\tstraight_12 : '12',\n\t\t\tstraight_13 : '13',\n\t\t\tstraight_14 : '14',\n\t\t\tstraight_15 : '15',\n\t\t\tstraight_16 : '16',\n\t\t\tstraight_17 : '17',\n\t\t\tstraight_18 : '18',\n\t\t\tstraight_19 : '19',\n\t\t\tstraight_20 : '20',\n\t\t\tstraight_21 : '21',\n\t\t\tstraight_22 : '22',\n\t\t\tstraight_23 : '23',\n\t\t\tstraight_24 : '24',\n\t\t\tstraight_25 : '25',\n\t\t\tstraight_26 : '26',\n\t\t\tstraight_27 : '27',\n\t\t\tstraight_28 : '28',\n\t\t\tstraight_29 : '29',\n\t\t\tstraight_30 : '30',\n\t\t\tstraight_31 : '31',\n\t\t\tstraight_32 : '32',\n\t\t\tstraight_33 : '33',\n\t\t\tstraight_34 : '34',\n\t\t\tstraight_35 : '35',\n\t\t\tstraight_36 : '36',\n\t\t\t//splits\n\t\t\tsplit_0: '1 - 2',\n\t\t\tsplit_1: '2 - 3',\n\t\t\tsplit_2: '1 - 4',\n\t\t\tsplit_3: '2 - 5',\n\t\t\tsplit_4: '3 - 6',\n\t\t\tsplit_5: '4 - 5',\n\t\t\tsplit_6: '5 - 6',\n\t\t\tsplit_7: '4 - 7',\n\t\t\tsplit_8: '5 - 8',\n\t\t\tsplit_9: '6 - 9',\n\t\t\tsplit_10: '7 - 8',\n\t\t\tsplit_11: '8 - 9',\n\t\t\tsplit_12: '7 - 10',\n\t\t\tsplit_13: '8 - 11',\n\t\t\tsplit_14: '9 - 12',\n\t\t\tsplit_15: '10 - 11',\n\t\t\tsplit_16: '11 - 12',\n\t\t\tsplit_17: '10 - 13',\n\t\t\tsplit_18: '11 - 14',\n\t\t\tsplit_19: '12 - 15',\n\t\t\tsplit_20: '13 - 14',\n\t\t\tsplit_21: '14 - 15',\n\t\t\tsplit_22: '13 - 16',\n\t\t\tsplit_23: '14 - 17',\n\t\t\tsplit_24: '15 - 18',\n\t\t\tsplit_25: '16 - 17',\n\t\t\tsplit_26: '17 - 18',\n\t\t\tsplit_27: '16 - 19',\n\t\t\tsplit_28: '17 - 20',\n\t\t\tsplit_29: '18 - 21',\n\t\t\tsplit_30: '19 - 20',\n\t\t\tsplit_31: '20 - 21',\n\t\t\tsplit_32: '19 - 22',\n\t\t\tsplit_33: '20 - 23',\n\t\t\tsplit_34: '21 - 24',\n\t\t\tsplit_35: '22 - 23',\n\t\t\tsplit_36: '23 - 24',\n\t\t\tsplit_37: '22 - 25',\n\t\t\tsplit_38: '23 - 26',\n\t\t\tsplit_39: '24 - 27',\n\t\t\tsplit_40: '25 - 26',\n\t\t\tsplit_41: '26 - 27',\n\t\t\tsplit_42: '25 - 28',\n\t\t\tsplit_43: '26 - 29',\n\t\t\tsplit_44: '27 - 30',\n\t\t\tsplit_45: '28 - 29',\n\t\t\tsplit_46: '29 - 30',\n\t\t\tsplit_47: '28 - 31',\n\t\t\tsplit_48: '29 - 32',\n\t\t\tsplit_49: '30 - 33',\n\t\t\tsplit_50: '31 - 32',\n\t\t\tsplit_51: '32 - 33',\n\t\t\tsplit_52: '31 - 34',\n\t\t\tsplit_53: '32 - 35',\n\t\t\tsplit_54: '33 - 36',\n\t\t\tsplit_55: '34 - 35',\n\t\t\tsplit_56: '35 - 36',\n\t\t\tsplit_57: '0 - 1',\n\t\t\tsplit_58: '00 - 3',\n\t\t\tsplit_59: '0 - 00',\n\t\t\t\n\t\t\t//streets\n\t\t\tstreet_0 : '1 - 2 - 3',\n\t\t\tstreet_1 : '4 - 5 - 6',\n\t\t\tstreet_2 : '7 - 8 - 9',\n\t\t\tstreet_3 : '10 - 11 - 12',\n\t\t\tstreet_4 : '13 - 14 - 15',\n\t\t\tstreet_5 : '16 - 17 - 18',\n\t\t\tstreet_6 : '19 - 20 - 21',\n\t\t\tstreet_7 : '22 - 23 - 24',\n\t\t\tstreet_8 : '25 - 26 - 27',\n\t\t\tstreet_9 : '28 - 29 - 30',\n\t\t\tstreet_10: '31 - 32 - 33',\n\t\t\tstreet_11: '34 - 35 - 36',\n\t\t\t//corners\n\t\t\tcorner_0: '1 - 2 - 4 - 5 ',\n\t\t\tcorner_1: '2 - 3 - 5 - 6 ',\n\t\t\tcorner_2: '4 - 5 - 7 - 8 ',\n\t\t\tcorner_3: '5 - 6 - 8 - 9 ',\n\t\t\tcorner_4: '7 - 8 - 10 - 11',\n\t\t\tcorner_5: '8 - 9 - 11 - 12',\n\t\t\tcorner_6: '10 - 11 - 13 - 14',\n\t\t\tcorner_7: '11 - 12 - 14 - 15',\n\t\t\tcorner_8: '13 - 14 - 16 - 17',\n\t\t\tcorner_9: '14 - 15 - 17 - 18',\n\t\t\tcorner_10: '16 - 17 - 19 - 20',\n\t\t\tcorner_11: '17 - 18 - 20 - 21',\n\t\t\tcorner_12: '19 - 20 - 22 - 23',\n\t\t\tcorner_13: '20 - 21 - 23 - 24',\n\t\t\tcorner_14: '22 - 23 - 25 - 26',\n\t\t\tcorner_15: '23 - 24 - 26 - 27',\n\t\t\tcorner_16: '25 - 26 - 28 - 29',\n\t\t\tcorner_17: '26 - 27 - 29 - 30',\n\t\t\tcorner_18: '28 - 29 - 31 - 32',\n\t\t\tcorner_19: '29 - 30 - 32 - 33',\n\t\t\tcorner_20: '31 - 32 - 34 - 35',\n\t\t\tcorner_21: '32 - 33 - 35 - 36',\n\t\t\tbasket_0: ' 0 - 00 - 1 -  2 -  3',\n\t\t\t//sixLines\n\t\t\tsixLine_0: '1 - 2 - 3 - 4 - 5 - 6 ',\n\t\t\tsixLine_1: '4 - 5 - 6 - 7 - 8 - 9 ',\n\t\t\tsixLine_2: '7 - 8 - 9 - 10 - 11 - 12',\n\t\t\tsixLine_3: '10 - 11 - 12 - 13 - 14 - 15',\n\t\t\tsixLine_4: '13 - 14 - 15 - 16 - 17 - 18',\n\t\t\tsixLine_5: '16 - 17 - 18 - 19 - 20 - 21',\n\t\t\tsixLine_6: '19 - 20 - 21 - 22 - 23 - 24',\n\t\t\tsixLine_7: '22 - 23 - 24 - 25 - 26 - 27',\n\t\t\tsixLine_8: '25 - 26 - 27 - 28 - 29 - 30',\n\t\t\tsixLine_9: '28 - 29 - 30 - 31 - 32 - 33',\n\t\t\tsixLine_10: '31 - 32 - 33 - 34 - 35 - 36',\n\t\t\t//columns\n\t\t\tcolumn_0: 'firstColumn',\n\t\t\tcolumn_1: 'secondColumn',\n\t\t\tcolumn_2: 'thirdColumn',\n\t\t\tdozen_0: 'firstDozen',\n\t\t\tdozen_1: 'secondDozen',\n\t\t\tdozen_2: 'thirdDozen',\n\t\t\t//others\n\t\t\tcolor_0: 'red',\n\t\t\tcolor_1: 'black',\n\t\t\tevenOdd_0: 'even',\n\t\t\tevenOdd_1: 'odd',\n\t\t\tsmallBig_0: 'small',\n\t\t\tsmallBig_1: 'big'\n\t\t}\n\t},\n\tEuropeanRoulette: {\n\t\t//replacing server object keys with different values, e.g. red_0 becomes color_0, and  black_0 becomes color_1,\n\t\t//so the two values can be grouped\n\t\tpre: {\n\t\t\tred_0: 'color_0',\n\t\t\tblack_0: 'color_1',\n\t\t\teven_0: 'evenOdd_0',\n\t\t\todd_0: 'evenOdd_1',\n\t\t\tsmall_0: 'smallBig_0',\n\t\t\tbig_0: 'smallBig_1'\n\t\t},\n\t\t//replacing server object keys with more readable after parsing, e.g. split_0 becomes '1 - 2'\n\t\tpost: {\n\t\t\t//trios\n\t\t\ttrio_0: '0 - 1 - 2',\n\t\t\ttrio_1: '0 - 2 - 3',\n\t\t\t//straights\n\t\t\tstraight_0 : '0',\n\t\t\tstraight_1 : '1',\n\t\t\tstraight_2 : '2',\n\t\t\tstraight_3 : '3',\n\t\t\tstraight_4 : '4',\n\t\t\tstraight_5 : '5',\n\t\t\tstraight_6 : '6',\n\t\t\tstraight_7 : '7',\n\t\t\tstraight_8 : '8',\n\t\t\tstraight_9 : '9',\n\t\t\tstraight_10 : '10',\n\t\t\tstraight_11 : '11',\n\t\t\tstraight_12 : '12',\n\t\t\tstraight_13 : '13',\n\t\t\tstraight_14 : '14',\n\t\t\tstraight_15 : '15',\n\t\t\tstraight_16 : '16',\n\t\t\tstraight_17 : '17',\n\t\t\tstraight_18 : '18',\n\t\t\tstraight_19 : '19',\n\t\t\tstraight_20 : '20',\n\t\t\tstraight_21 : '21',\n\t\t\tstraight_22 : '22',\n\t\t\tstraight_23 : '23',\n\t\t\tstraight_24 : '24',\n\t\t\tstraight_25 : '25',\n\t\t\tstraight_26 : '26',\n\t\t\tstraight_27 : '27',\n\t\t\tstraight_28 : '28',\n\t\t\tstraight_29 : '29',\n\t\t\tstraight_30 : '30',\n\t\t\tstraight_31 : '31',\n\t\t\tstraight_32 : '32',\n\t\t\tstraight_33 : '33',\n\t\t\tstraight_34 : '34',\n\t\t\tstraight_35 : '35',\n\t\t\tstraight_36 : '36',\n\t\t\t//splits\n\t\t\tsplit_0: '1 - 2',\n\t\t\tsplit_1: '2 - 3',\n\t\t\tsplit_2: '1 - 4',\n\t\t\tsplit_3: '2 - 5',\n\t\t\tsplit_4: '3 - 6',\n\t\t\tsplit_5: '4 - 5',\n\t\t\tsplit_6: '5 - 6',\n\t\t\tsplit_7: '4 - 7',\n\t\t\tsplit_8: '5 - 8',\n\t\t\tsplit_9: '6 - 9',\n\t\t\tsplit_10: '7 - 8',\n\t\t\tsplit_11: '8 - 9',\n\t\t\tsplit_12: '7 - 10',\n\t\t\tsplit_13: '8 - 11',\n\t\t\tsplit_14: '9 - 12',\n\t\t\tsplit_15: '10 - 11',\n\t\t\tsplit_16: '11 - 12',\n\t\t\tsplit_17: '10 - 13',\n\t\t\tsplit_18: '11 - 14',\n\t\t\tsplit_19: '12 - 15',\n\t\t\tsplit_20: '13 - 14',\n\t\t\tsplit_21: '14 - 15',\n\t\t\tsplit_22: '13 - 16',\n\t\t\tsplit_23: '14 - 17',\n\t\t\tsplit_24: '15 - 18',\n\t\t\tsplit_25: '16 - 17',\n\t\t\tsplit_26: '17 - 18',\n\t\t\tsplit_27: '16 - 19',\n\t\t\tsplit_28: '17 - 20',\n\t\t\tsplit_29: '18 - 21',\n\t\t\tsplit_30: '19 - 20',\n\t\t\tsplit_31: '20 - 21',\n\t\t\tsplit_32: '19 - 22',\n\t\t\tsplit_33: '20 - 23',\n\t\t\tsplit_34: '21 - 24',\n\t\t\tsplit_35: '22 - 23',\n\t\t\tsplit_36: '23 - 24',\n\t\t\tsplit_37: '22 - 25',\n\t\t\tsplit_38: '23 - 26',\n\t\t\tsplit_39: '24 - 27',\n\t\t\tsplit_40: '25 - 26',\n\t\t\tsplit_41: '26 - 27',\n\t\t\tsplit_42: '25 - 28',\n\t\t\tsplit_43: '26 - 29',\n\t\t\tsplit_44: '27 - 30',\n\t\t\tsplit_45: '28 - 29',\n\t\t\tsplit_46: '29 - 30',\n\t\t\tsplit_47: '28 - 31',\n\t\t\tsplit_48: '29 - 32',\n\t\t\tsplit_49: '30 - 33',\n\t\t\tsplit_50: '31 - 32',\n\t\t\tsplit_51: '32 - 33',\n\t\t\tsplit_52: '31 - 34',\n\t\t\tsplit_53: '32 - 35',\n\t\t\tsplit_54: '33 - 36',\n\t\t\tsplit_55: '34 - 35',\n\t\t\tsplit_56: '35 - 36',\n\t\t\tsplit_57: '0 - 1',\n\t\t\tsplit_58: '0 - 2',\n\t\t\tsplit_59: '0 - 3',\n\t\t\t\n\t\t\t//streets\n\t\t\tstreet_0 : '1 - 2 - 3',\n\t\t\tstreet_1 : '4 - 5 - 6',\n\t\t\tstreet_2 : '7 - 8 - 9',\n\t\t\tstreet_3 : '10 - 11 - 12',\n\t\t\tstreet_4 : '13 - 14 - 15',\n\t\t\tstreet_5 : '16 - 17 - 18',\n\t\t\tstreet_6 : '19 - 20 - 21',\n\t\t\tstreet_7 : '22 - 23 - 24',\n\t\t\tstreet_8 : '25 - 26 - 27',\n\t\t\tstreet_9 : '28 - 29 - 30',\n\t\t\tstreet_10: '31 - 32 - 33',\n\t\t\tstreet_11: '34 - 35 - 36',\n\t\t\t//corners\n\t\t\tcorner_0: '1 - 2 - 4 - 5 ',\n\t\t\tcorner_1: '2 - 3 - 5 - 6 ',\n\t\t\tcorner_2: '4 - 5 - 7 - 8 ',\n\t\t\tcorner_3: '5 - 6 - 8 - 9 ',\n\t\t\tcorner_4: '7 - 8 - 10 - 11',\n\t\t\tcorner_5: '8 - 9 - 11 - 12',\n\t\t\tcorner_6: '10 - 11 - 13 - 14',\n\t\t\tcorner_7: '11 - 12 - 14 - 15',\n\t\t\tcorner_8: '13 - 14 - 16 - 17',\n\t\t\tcorner_9: '14 - 15 - 17 - 18',\n\t\t\tcorner_10: '16 - 17 - 19 - 20',\n\t\t\tcorner_11: '17 - 18 - 20 - 21',\n\t\t\tcorner_12: '19 - 20 - 22 - 23',\n\t\t\tcorner_13: '20 - 21 - 23 - 24',\n\t\t\tcorner_14: '22 - 23 - 25 - 26',\n\t\t\tcorner_15: '23 - 24 - 26 - 27',\n\t\t\tcorner_16: '25 - 26 - 28 - 29',\n\t\t\tcorner_17: '26 - 27 - 29 - 30',\n\t\t\tcorner_18: '28 - 29 - 31 - 32',\n\t\t\tcorner_19: '29 - 30 - 32 - 33',\n\t\t\tcorner_20: '31 - 32 - 34 - 35',\n\t\t\tcorner_21: '32 - 33 - 35 - 36',\n\t\t\tcorner_22: ' 0 - 1 -  2 -  3',\n\t\t\t//sixLines\n\t\t\tsixLine_0: '1 - 2 - 3 - 4 - 5 - 6 ',\n\t\t\tsixLine_1: '4 - 5 - 6 - 7 - 8 - 9 ',\n\t\t\tsixLine_2: '7 - 8 - 9 - 10 - 11 - 12',\n\t\t\tsixLine_3: '10 - 11 - 12 - 13 - 14 - 15',\n\t\t\tsixLine_4: '13 - 14 - 15 - 16 - 17 - 18',\n\t\t\tsixLine_5: '16 - 17 - 18 - 19 - 20 - 21',\n\t\t\tsixLine_6: '19 - 20 - 21 - 22 - 23 - 24',\n\t\t\tsixLine_7: '22 - 23 - 24 - 25 - 26 - 27',\n\t\t\tsixLine_8: '25 - 26 - 27 - 28 - 29 - 30',\n\t\t\tsixLine_9: '28 - 29 - 30 - 31 - 32 - 33',\n\t\t\tsixLine_10: '31 - 32 - 33 - 34 - 35 - 36',\n\t\t\t//columns\n\t\t\tcolumn_0: 'firstColumn',\n\t\t\tcolumn_1: 'secondColumn',\n\t\t\tcolumn_2: 'thirdColumn',\n\t\t\tdozen_0: 'firstDozen',\n\t\t\tdozen_1: 'secondDozen',\n\t\t\tdozen_2: 'thirdDozen',\n\t\t\t//others\n\t\t\tcolor_0: 'red',\n\t\t\tcolor_1: 'black',\n\t\t\tevenOdd_0: 'even',\n\t\t\tevenOdd_1: 'odd',\n\t\t\tsmallBig_0: 'small',\n\t\t\tsmallBig_1: 'big'\n\t\t}\n\t},\n\tPlatinumRouletteSingleZero: {\n\t\t//replacing server object keys with different values, e.g. red_0 becomes color_0, and  black_0 becomes color_1,\n\t\t//so the two values can be grouped\n\t\tpre: {\n\t\t\tred_0: 'color_0',\n\t\t\tblack_0: 'color_1',\n\t\t\teven_0: 'evenOdd_0',\n\t\t\todd_0: 'evenOdd_1',\n\t\t\tsmall_0: 'smallBig_0',\n\t\t\tbig_0: 'smallBig_1'\n\t\t},\n\t\t//replacing server object keys with more readable after parsing, e.g. split_0 becomes '1 - 2'\n\t\tpost: {\n\t\t\t//trios\n\t\t\ttrio_0: '0 - 1 - 2',\n\t\t\ttrio_1: '0 - 2 - 3',\n\t\t\t//straights\n\t\t\tstraight_0 : '0',\n\t\t\tstraight_1 : '1',\n\t\t\tstraight_2 : '2',\n\t\t\tstraight_3 : '3',\n\t\t\tstraight_4 : '4',\n\t\t\tstraight_5 : '5',\n\t\t\tstraight_6 : '6',\n\t\t\tstraight_7 : '7',\n\t\t\tstraight_8 : '8',\n\t\t\tstraight_9 : '9',\n\t\t\tstraight_10 : '10',\n\t\t\tstraight_11 : '11',\n\t\t\tstraight_12 : '12',\n\t\t\tstraight_13 : '13',\n\t\t\tstraight_14 : '14',\n\t\t\tstraight_15 : '15',\n\t\t\tstraight_16 : '16',\n\t\t\tstraight_17 : '17',\n\t\t\tstraight_18 : '18',\n\t\t\tstraight_19 : '19',\n\t\t\tstraight_20 : '20',\n\t\t\tstraight_21 : '21',\n\t\t\tstraight_22 : '22',\n\t\t\tstraight_23 : '23',\n\t\t\tstraight_24 : '24',\n\t\t\tstraight_25 : '25',\n\t\t\tstraight_26 : '26',\n\t\t\tstraight_27 : '27',\n\t\t\tstraight_28 : '28',\n\t\t\tstraight_29 : '29',\n\t\t\tstraight_30 : '30',\n\t\t\tstraight_31 : '31',\n\t\t\tstraight_32 : '32',\n\t\t\tstraight_33 : '33',\n\t\t\tstraight_34 : '34',\n\t\t\tstraight_35 : '35',\n\t\t\tstraight_36 : '36',\n\t\t\t//splits\n\t\t\tsplit_0: '1 - 2',\n\t\t\tsplit_1: '2 - 3',\n\t\t\tsplit_2: '1 - 4',\n\t\t\tsplit_3: '2 - 5',\n\t\t\tsplit_4: '3 - 6',\n\t\t\tsplit_5: '4 - 5',\n\t\t\tsplit_6: '5 - 6',\n\t\t\tsplit_7: '4 - 7',\n\t\t\tsplit_8: '5 - 8',\n\t\t\tsplit_9: '6 - 9',\n\t\t\tsplit_10: '7 - 8',\n\t\t\tsplit_11: '8 - 9',\n\t\t\tsplit_12: '7 - 10',\n\t\t\tsplit_13: '8 - 11',\n\t\t\tsplit_14: '9 - 12',\n\t\t\tsplit_15: '10 - 11',\n\t\t\tsplit_16: '11 - 12',\n\t\t\tsplit_17: '10 - 13',\n\t\t\tsplit_18: '11 - 14',\n\t\t\tsplit_19: '12 - 15',\n\t\t\tsplit_20: '13 - 14',\n\t\t\tsplit_21: '14 - 15',\n\t\t\tsplit_22: '13 - 16',\n\t\t\tsplit_23: '14 - 17',\n\t\t\tsplit_24: '15 - 18',\n\t\t\tsplit_25: '16 - 17',\n\t\t\tsplit_26: '17 - 18',\n\t\t\tsplit_27: '16 - 19',\n\t\t\tsplit_28: '17 - 20',\n\t\t\tsplit_29: '18 - 21',\n\t\t\tsplit_30: '19 - 20',\n\t\t\tsplit_31: '20 - 21',\n\t\t\tsplit_32: '19 - 22',\n\t\t\tsplit_33: '20 - 23',\n\t\t\tsplit_34: '21 - 24',\n\t\t\tsplit_35: '22 - 23',\n\t\t\tsplit_36: '23 - 24',\n\t\t\tsplit_37: '22 - 25',\n\t\t\tsplit_38: '23 - 26',\n\t\t\tsplit_39: '24 - 27',\n\t\t\tsplit_40: '25 - 26',\n\t\t\tsplit_41: '26 - 27',\n\t\t\tsplit_42: '25 - 28',\n\t\t\tsplit_43: '26 - 29',\n\t\t\tsplit_44: '27 - 30',\n\t\t\tsplit_45: '28 - 29',\n\t\t\tsplit_46: '29 - 30',\n\t\t\tsplit_47: '28 - 31',\n\t\t\tsplit_48: '29 - 32',\n\t\t\tsplit_49: '30 - 33',\n\t\t\tsplit_50: '31 - 32',\n\t\t\tsplit_51: '32 - 33',\n\t\t\tsplit_52: '31 - 34',\n\t\t\tsplit_53: '32 - 35',\n\t\t\tsplit_54: '33 - 36',\n\t\t\tsplit_55: '34 - 35',\n\t\t\tsplit_56: '35 - 36',\n\t\t\tsplit_57: '0 - 1',\n\t\t\tsplit_58: '0 - 2',\n\t\t\tsplit_59: '0 - 3',\n\t\t\t\n\t\t\t//streets\n\t\t\tstreet_0 : '1 - 2 - 3',\n\t\t\tstreet_1 : '4 - 5 - 6',\n\t\t\tstreet_2 : '7 - 8 - 9',\n\t\t\tstreet_3 : '10 - 11 - 12',\n\t\t\tstreet_4 : '13 - 14 - 15',\n\t\t\tstreet_5 : '16 - 17 - 18',\n\t\t\tstreet_6 : '19 - 20 - 21',\n\t\t\tstreet_7 : '22 - 23 - 24',\n\t\t\tstreet_8 : '25 - 26 - 27',\n\t\t\tstreet_9 : '28 - 29 - 30',\n\t\t\tstreet_10: '31 - 32 - 33',\n\t\t\tstreet_11: '34 - 35 - 36',\n\t\t\t//corners\n\t\t\tcorner_0: '1 - 2 - 4 - 5 ',\n\t\t\tcorner_1: '2 - 3 - 5 - 6 ',\n\t\t\tcorner_2: '4 - 5 - 7 - 8 ',\n\t\t\tcorner_3: '5 - 6 - 8 - 9 ',\n\t\t\tcorner_4: '7 - 8 - 10 - 11',\n\t\t\tcorner_5: '8 - 9 - 11 - 12',\n\t\t\tcorner_6: '10 - 11 - 13 - 14',\n\t\t\tcorner_7: '11 - 12 - 14 - 15',\n\t\t\tcorner_8: '13 - 14 - 16 - 17',\n\t\t\tcorner_9: '14 - 15 - 17 - 18',\n\t\t\tcorner_10: '16 - 17 - 19 - 20',\n\t\t\tcorner_11: '17 - 18 - 20 - 21',\n\t\t\tcorner_12: '19 - 20 - 22 - 23',\n\t\t\tcorner_13: '20 - 21 - 23 - 24',\n\t\t\tcorner_14: '22 - 23 - 25 - 26',\n\t\t\tcorner_15: '23 - 24 - 26 - 27',\n\t\t\tcorner_16: '25 - 26 - 28 - 29',\n\t\t\tcorner_17: '26 - 27 - 29 - 30',\n\t\t\tcorner_18: '28 - 29 - 31 - 32',\n\t\t\tcorner_19: '29 - 30 - 32 - 33',\n\t\t\tcorner_20: '31 - 32 - 34 - 35',\n\t\t\tcorner_21: '32 - 33 - 35 - 36',\n\t\t\tcorner_22: ' 0 - 1 -  2 -  3',\n\t\t\t//sixLines\n\t\t\tsixLine_0: '1 - 2 - 3 - 4 - 5 - 6 ',\n\t\t\tsixLine_1: '4 - 5 - 6 - 7 - 8 - 9 ',\n\t\t\tsixLine_2: '7 - 8 - 9 - 10 - 11 - 12',\n\t\t\tsixLine_3: '10 - 11 - 12 - 13 - 14 - 15',\n\t\t\tsixLine_4: '13 - 14 - 15 - 16 - 17 - 18',\n\t\t\tsixLine_5: '16 - 17 - 18 - 19 - 20 - 21',\n\t\t\tsixLine_6: '19 - 20 - 21 - 22 - 23 - 24',\n\t\t\tsixLine_7: '22 - 23 - 24 - 25 - 26 - 27',\n\t\t\tsixLine_8: '25 - 26 - 27 - 28 - 29 - 30',\n\t\t\tsixLine_9: '28 - 29 - 30 - 31 - 32 - 33',\n\t\t\tsixLine_10: '31 - 32 - 33 - 34 - 35 - 36',\n\t\t\t//columns\n\t\t\tcolumn_0: 'firstColumn',\n\t\t\tcolumn_1: 'secondColumn',\n\t\t\tcolumn_2: 'thirdColumn',\n\t\t\tdozen_0: 'firstDozen',\n\t\t\tdozen_1: 'secondDozen',\n\t\t\tdozen_2: 'thirdDozen',\n\t\t\t//others\n\t\t\tcolor_0: 'red',\n\t\t\tcolor_1: 'black',\n\t\t\tevenOdd_0: 'even',\n\t\t\tevenOdd_1: 'odd',\n\t\t\tsmallBig_0: 'small',\n\t\t\tsmallBig_1: 'big'\n\t\t}\n\t}\n};\n\nmodule.exports = keyValueMap;","module.exports = {\r\n    GoldenLamps:{\r\n        '11111': 1,\r\n        '00000': 2,\r\n        '22222': 3,\r\n        '21012': 4,\r\n        '01210': 5,\r\n        '00122': 6,\r\n        '22100': 7,\r\n        '10001': 8,\r\n        '12221': 9,\r\n        '01010': 10,\r\n        '21212': 11,\r\n        '12121': 12,\r\n        '10101': 13,\r\n        '11011': 14,\r\n        '11211': 15,\r\n        '01110': 16,\r\n        '21112': 17,\r\n        '02020': 18,\r\n        '20202': 19,\r\n        '20102': 20\r\n    },\r\n    GoldenToad:{\r\n        '44444':1,\r\n        '55555':2,\r\n        '33333':3,\r\n        '34543':4,\r\n        '54345':5,\r\n        '55433':6,\r\n        '33455':7,\r\n        '45554':8,\r\n        '43334':9,\r\n        '54545':10\r\n    },\r\n    NeptunesRiches:{\r\n        \"44444\":1,\r\n        \"55555\":2,\r\n        \"33333\":3,\r\n        \"34543\":4,\r\n        \"54345\":5,\r\n        \"55433\":6,\r\n        \"33455\":7,\r\n        \"45554\":8,\r\n        \"43334\":9,\r\n        \"54545\":10,\r\n        \"34343\":11,\r\n        \"43434\":12,\r\n        \"45454\":13,\r\n        \"44544\":14,\r\n        \"44344\":15,\r\n        \"54445\":16,\r\n        \"34443\":17,\r\n        \"53535\":18,\r\n        \"35353\":19,\r\n        \"35453\":20\r\n    },\r\n    \r\n    ChineseWilds:{\r\n        \"77777\":1,\r\n        \"66666\":2,\r\n        \"55555\":3,\r\n        \"44444\":4,\r\n        \"65456\":5,\r\n        \"56765\":6,\r\n        \"77654\":7,\r\n        \"44567\":8,\r\n        \"67776\":9,\r\n        \"54445\":10,\r\n        \"76544\":11,\r\n        \"45677\":12,\r\n        \"67656\":13,\r\n        \"54565\":14,\r\n        \"76767\":15,\r\n        \"45454\":16,\r\n        \"65676\":17,\r\n        \"56545\":18,\r\n        \"76667\":19,\r\n        \"45554\":20,\r\n        \"66544\":21,\r\n        \"55677\":22,\r\n        \"66766\":23,\r\n        \"55455\":24,\r\n        \"65554\":25,\r\n        \"56667\":26,\r\n        \"77677\":27,\r\n        \"44544\":28,\r\n        \"76554\":29,\r\n        \"45667\":30,\r\n        \"77765\":31,\r\n        \"44456\":32,\r\n        \"67765\":33,\r\n        \"54456\":34,\r\n        \"76654\":35,\r\n        \"45567\":36,\r\n        \"67654\":37,\r\n        \"54567\":38,\r\n        \"76545\":39,\r\n        \"45676\":40\r\n    },\r\n    ElephantTreasure:{\r\n        \"44444\":1,\r\n        \"55555\":2,\r\n        \"33333\":3,\r\n        \"34543\":4,\r\n        \"54345\":5,\r\n        \"55433\":6,\r\n        \"33455\":7,\r\n        \"45554\":8,\r\n        \"43334\":9,\r\n        \"54545\":10,\r\n        \"34343\":11,\r\n        \"43434\":12,\r\n        \"45454\":13,\r\n        \"44544\":14,\r\n        \"44344\":15,\r\n        \"54445\":16,\r\n        \"34443\":17,\r\n        \"53535\":18,\r\n        \"35353\":19,\r\n        \"35453\":20\r\n    },\r\n    RedHotSlot:{\r\n        \"44444\":1,\r\n        \"55555\":2,\r\n        \"33333\":3,\r\n        \"34543\":4,\r\n        \"54345\":5,\r\n        \"55433\":6,\r\n        \"33455\":7,\r\n        \"45554\":8,\r\n        \"43334\":9,\r\n        \"54545\":10,\r\n        \"34343\":11,\r\n        \"43434\":12,\r\n        \"45454\":13,\r\n        \"44544\":14,\r\n        \"44344\":15,\r\n        \"54445\":16,\r\n        \"34443\":17,\r\n        \"53535\":18,\r\n        \"35353\":19,\r\n        \"35453\":20\r\n    },\r\n    MacauRacing:{\r\n        \"44444\":1,\r\n        \"55555\":2,\r\n        \"33333\":3,\r\n        \"34543\":4,\r\n        \"54345\":5,\r\n        \"55433\":6,\r\n        \"33455\":7,\r\n        \"45554\":8,\r\n        \"43334\":9,\r\n        \"54545\":10,\r\n        \"34343\":11,\r\n        \"43434\":12,\r\n        \"45454\":13,\r\n        \"44544\":14,\r\n        \"44344\":15,\r\n        \"54445\":16,\r\n        \"34443\":17,\r\n        \"53535\":18,\r\n        \"35353\":19,\r\n        \"35453\":20\r\n    },\r\n    LuckyCarnival:{\r\n        '44444':1,\r\n        '55555':2,\r\n        '33333':3,\r\n        '34543':4,\r\n        '54345':5,\r\n        '55433':6,\r\n        '33455':7,\r\n        '45554':8,\r\n        '43334':9,\r\n        '54545':10\r\n    },\r\n    AsianFortune:{\r\n        '44444':1,\r\n        '55555':2,\r\n        '33333':3,\r\n        '34543':4,\r\n        '54345':5,\r\n        '55433':6,\r\n        '33455':7,\r\n        '54545':8\r\n    },\r\n    DragonPearl:{\r\n        '777': 1\r\n    },\r\n    LeprechaunsMagic:{\r\n        \"44444\":1,\r\n        \"55555\":2,\r\n        \"33333\":3,\r\n        \"34543\":5,\r\n        \"54345\":4,\r\n        \"43334\":7,\r\n        \"45554\":6,\r\n        \"55433\":8,\r\n        \"33455\":9,\r\n        \"43454\":10\r\n    },\r\n    AliBabasLuck:{\r\n        \"44444\":1,\r\n        \"55555\":2,\r\n        \"33333\":3,\r\n        \"34543\":5,\r\n        \"54345\":4,\r\n        \"43334\":7,\r\n        \"45554\":6,\r\n        \"55433\":8,\r\n        \"33455\":9,\r\n        \"43454\":10\r\n    },\r\n    CasinoSpin:{\r\n        \"44444\":1,\r\n        \"55555\":2,\r\n        \"33333\":3,\r\n        \"34543\":5,\r\n        \"54345\":4,\r\n        \"43334\":7,\r\n        \"45554\":6,\r\n        \"55433\":8,\r\n        \"33455\":9,\r\n        \"43454\":10\r\n    },\r\n    LeprechaunsMagicMegaways: {},\r\n    AliBabasLuckMegaways: {},\r\n    CobraQueen:{\r\n        \"44444\":1,\r\n        \"55555\":2,\r\n        \"33333\":3,\r\n        \"34543\":4,\r\n        \"54345\":5,\r\n        \"43334\":6,\r\n        \"45554\":7,\r\n        \"55433\":8,\r\n        \"33455\":9,\r\n        \"43454\":10\r\n    },\r\n    DreamDestiny:{\r\n        \"44444\":1,\r\n        \"55555\":2,\r\n        \"33333\":3,\r\n        \"34543\":4,\r\n        \"54345\":5,\r\n        \"55433\":6,\r\n        \"33455\":7,\r\n        \"45554\":8,\r\n        \"43334\":9,\r\n        \"54545\":10,\r\n        \"34343\":11,\r\n        \"43434\":12,\r\n        \"45454\":13,\r\n        \"44544\":14,\r\n        \"44344\":15,\r\n        \"54445\":16,\r\n        \"34443\":17,\r\n        \"53535\":18,\r\n        \"35353\":19,\r\n        \"35453\":20\r\n    },\r\n    AmazonIslandMegaWays: {},\r\n    \r\n    EpicTreasure: {\r\n        '11111': 1,\r\n        '22222': 2,\r\n        '33333': 3,\r\n        '44444': 4,\r\n        '23432': 5,\r\n        '32123': 6,\r\n        '11234': 7,\r\n        '44321': 8,\r\n        '21112': 9,\r\n        '34443': 10,\r\n        '12344': 11,\r\n        '43211': 12,\r\n        '21232': 13,\r\n        '34323': 14,\r\n        '12121': 15,\r\n        '43434': 16,\r\n        '23212': 17,\r\n        '32343': 18,\r\n        '12221': 19,\r\n        '43334': 20,\r\n        '22344': 21,\r\n        '33211': 22,\r\n        '22122': 23,\r\n        '33433': 24,\r\n        '23334': 25,\r\n        '32221': 26,\r\n        '11211': 27,\r\n        '44344': 28,\r\n        '12334': 29,\r\n        '43221': 30,\r\n        '11123': 31,\r\n        '44432': 32,        \r\n        '21123': 33,\r\n        '34432': 34,\r\n        '12234': 35,\r\n        '43321': 36,\r\n        '21234': 37,\r\n        '34321': 38,\r\n        '12343': 39,\r\n        '43212': 40\r\n    },\r\n    EpicTreasure2: {\r\n        '11111':1,\r\n        '22222':2,\r\n        '33333':3,\r\n        '44444':4,\r\n        '12321':5,\r\n        '23432':6,\r\n        '32123':7,\r\n        '43234':8,\r\n        '12221':9,\r\n        '23332':10,\r\n        '34443':11,\r\n        '21112':12,\r\n        '32223':13,\r\n        '43334':14,\r\n        '11211':15,\r\n        '22322':16,\r\n        '33433':17,\r\n        '22122':18,\r\n        '33233':19,\r\n        '44344':20\r\n    },\r\n\r\n    SeaBoatAdventure: {\r\n        '11111': 1,\r\n        '22222': 2,\r\n        '33333': 3,\r\n        '44444': 4,\r\n        '23432': 5,\r\n        '32123': 6,\r\n        '11234': 7,\r\n        '44321': 8,\r\n        '21112': 9,\r\n        '34443': 10,\r\n        '12344': 11,\r\n        '43211': 12,\r\n        '21232': 13,\r\n        '34323': 14,\r\n        '12121': 15,\r\n        '43434': 16,\r\n        '23212': 17,\r\n        '32343': 18,\r\n        '12221': 19,\r\n        '43334': 20,\r\n        '22344': 21,\r\n        '33211': 22,\r\n        '22122': 23,\r\n        '33433': 24,\r\n        '23334': 25,\r\n        '32221': 26,\r\n        '11211': 27,\r\n        '44344': 28,\r\n        '12334': 29,\r\n        '43221': 30,\r\n        '11123': 31,\r\n        '44432': 32,        \r\n        '21123': 33,\r\n        '34432': 34,\r\n        '12234': 35,\r\n        '43321': 36,\r\n        '21234': 37,\r\n        '34321': 38,\r\n        '12343': 39,\r\n        '43212': 40\r\n    },\r\n\r\n    '80sSpins':{\r\n\r\n    },\r\n\r\n    'AliBabasLuckPowerReels': {\r\n        \"1111111111111111\": 1,\r\n        \"1010101010101010\": 2,\r\n        \"99999999\": 3,\r\n        \"88888888\": 4,\r\n        \"77777777\": 5,\r\n        \"66666666\": 6,\r\n\r\n        \"1110111011101110\": 7,\r\n        \"109109109109\": 8,\r\n        \"98989898\": 9,\r\n        \"87878787\": 10,\r\n        \"76767676\": 11,\r\n        \"1011101110111011\": 12,\r\n        \r\n        \"910910910910\": 13,\r\n        \"89898989\": 14,\r\n        \"78787878\": 15,\r\n        \"67676767\": 16,\r\n        \"1110987678\": 17,\r\n        \"109876789\": 18,\r\n        \r\n        \"987678910\": 19,\r\n        \"8767891011\": 20,\r\n        \"76789101110\": 21,\r\n        \"67891011109\": 22,\r\n        \"78910111098\": 23,\r\n        \"89101110987\": 24,\r\n\r\n        \"91011109876\": 25,\r\n        \"10111098767\": 26,\r\n        \"111111109876\": 27,\r\n        \"101010109877\": 28,\r\n        \"7777891010\": 29,\r\n        \"6667891011\": 30\r\n    },\r\n\r\n    'LeprechaunsMagicPowerReels': {\r\n        \"1111111111111111\": 1,\r\n        \"1010101010101010\": 2,\r\n        \"99999999\": 3,\r\n        \"88888888\": 4,\r\n        \"77777777\": 5,\r\n        \"66666666\": 6,\r\n\r\n        \"1110111011101110\": 7,\r\n        \"109109109109\": 8,\r\n        \"98989898\": 9,\r\n        \"87878787\": 10,\r\n        \"76767676\": 11,\r\n        \"1011101110111011\": 12,\r\n        \r\n        \"910910910910\": 13,\r\n        \"89898989\": 14,\r\n        \"78787878\": 15,\r\n        \"67676767\": 16,\r\n        \"1110987678\": 17,\r\n        \"109876789\": 18,\r\n        \r\n        \"987678910\": 19,\r\n        \"8767891011\": 20,\r\n        \"76789101110\": 21,\r\n        \"67891011109\": 22,\r\n        \"78910111098\": 23,\r\n        \"89101110987\": 24,\r\n\r\n        \"91011109876\": 25,\r\n        \"10111098767\": 26,\r\n        \"111111109876\": 27,\r\n        \"101010109877\": 28,\r\n        \"7777891010\": 29,\r\n        \"6667891011\": 30\r\n    },\r\n\r\n    'WantedWildz': {\r\n        \"44444\": 1,\r\n        \"33333\": 2,\r\n        \"55555\": 3,\r\n        \"34543\": 4,\r\n        \"54345\": 5,\r\n        \"33533\": 6,\r\n        \"55355\": 7,\r\n        \"43334\": 8,\r\n        \"45554\": 9,\r\n        \"45434\": 10,\r\n        \"43454\": 11,\r\n        \"34343\": 12,\r\n        \"54545\": 13,\r\n        \"44344\": 14,\r\n        \"44544\": 15,\r\n        \"34443\": 16,\r\n        \"54445\": 17,\r\n        \"33455\": 18,\r\n        \"55433\": 19,\r\n        \"35353\": 20\r\n    },\r\n    \r\n    'SwordStomp': {\r\n        \"44444\": 1,\r\n        \"33333\": 2,\r\n        \"55555\": 3,\r\n        \"34543\": 4,\r\n        \"54345\": 5,\r\n        \"33455\": 6,\r\n        \"55433\": 7,\r\n        \"43334\": 8,\r\n        \"45554\": 9,\r\n        \"45434\": 10\r\n    },\r\n\r\n    'WantedWildzExtreme': {\r\n        \"44444\": 1,\r\n        \"33333\": 2,\r\n        \"55555\": 3,\r\n        \"34543\": 4,\r\n        \"54345\": 5,\r\n        \"33533\": 6,\r\n        \"55355\": 7,\r\n        \"43334\": 8,\r\n        \"45554\": 9,\r\n        \"45434\": 10,\r\n        \"43454\": 11,\r\n        \"34343\": 12,\r\n        \"54545\": 13,\r\n        \"44344\": 14,\r\n        \"44544\": 15,\r\n        \"34443\": 16,\r\n        \"54445\": 17,\r\n        \"33455\": 18,\r\n        \"55433\": 19,\r\n        \"35353\": 20\r\n    },\r\n\r\n    'CottonGangAffair' : {},\r\n\r\n    'DesertLegendsSpins':{\r\n        \"44444\":1,\r\n        \"55555\":2,\r\n        \"33333\":3,\r\n        \"34543\":5,\r\n        \"54345\":4,\r\n        \"43334\":7,\r\n        \"45554\":6,\r\n        \"55433\":8,\r\n        \"33455\":9,\r\n        \"43454\":10\r\n    },\r\n\r\n    'JellyMULTIHOPS': {},\r\n    \r\n    'NightmareFamilyMegaWays':{},\r\n    'ChristmasMULTIHOPS': {},\r\n    'MidnightThirst': {},\r\n    'DrFrancashstein': {},\r\n    'DontHitPlz': {},\r\n    'PurrPower': {},\r\n    'GlowDig': {\r\n        '44444': 1,\r\n        '55555': 2,\r\n        '66666': 3,\r\n        '77777': 4,\r\n        '45654': 5,\r\n        '56765': 6,\r\n        '65456': 7,\r\n        '76567': 8,\r\n        '45554': 9,\r\n        '56665': 10,\r\n        '67776': 11,\r\n        '54445': 12,\r\n        '65556': 13,\r\n        '76667': 14,\r\n        '44544': 15,\r\n        '55655': 16,\r\n        '66766': 17,\r\n        '55455': 18,\r\n        '66566': 19,\r\n        '77677': 20,\r\n        '54545': 21,\r\n        '65656': 22,\r\n        '76767': 23,\r\n        '67676': 24,\r\n        '56565': 25,\r\n        '45454': 26,\r\n        '44566': 27,\r\n        '55677': 28,\r\n        '77655': 29,\r\n        '66544': 30\r\n    },\r\n    'FishNFish': {\r\n        '44444': 1,\r\n        '55555': 2,\r\n        '66666': 3,\r\n        '77777': 4,\r\n        '45654': 5,\r\n        '56765': 6,\r\n        '65456': 7,\r\n        '76567': 8,\r\n        '45554': 9,\r\n        '56665': 10,\r\n        '67776': 11,\r\n        '54445': 12,\r\n        '65556': 13,\r\n        '76667': 14,\r\n        '44544': 15,\r\n        '55655': 16,\r\n        '66766': 17,\r\n        '55455': 18,\r\n        '66566': 19,\r\n        '77677': 20,\r\n        '54545': 21,\r\n        '65656': 22,\r\n        '76767': 23,\r\n        '67676': 24,\r\n        '56565': 25,\r\n        '45454': 26,\r\n        '44566': 27,\r\n        '55677': 28,\r\n        '77655': 29,\r\n        '66544': 30\r\n    },\r\n    'LosMuertosLocos':{\r\n        '44444': 1,\r\n        '55555': 2,\r\n        '66666': 3,\r\n        '77777': 4,\r\n        '45654': 5,\r\n        '56765': 6,\r\n        '65456': 7,\r\n        '76567': 8,\r\n        '45554': 9,\r\n        '56665': 10,\r\n        '67776': 11,\r\n        '54445': 12,\r\n        '65556': 13,\r\n        '76667': 14,\r\n        '44544': 15,\r\n        '55655': 16,\r\n        '66766': 17,\r\n        '55455': 18,\r\n        '66566': 19,\r\n        '77677': 20\r\n    },\r\n    'SeaBoatAdventureMegaWays': {},\r\n    'AztecShamansMegaWays': {},\r\n    'RumbleMutts':{\r\n        '44444': 1,\r\n        '55555': 2,\r\n        '66666': 3,\r\n        '77777': 4,\r\n        '45654': 5,\r\n        '56765': 6,\r\n        '65456': 7,\r\n        '76567': 8,\r\n        '45554': 9,\r\n        '56665': 10,\r\n        '67776': 11,\r\n        '54445': 12,\r\n        '65556': 13,\r\n        '76667': 14,\r\n        '44544': 15,\r\n        '55655': 16,\r\n        '66766': 17,\r\n        '55455': 18,\r\n        '66566': 19,\r\n        '77677': 20\r\n    },\r\n    'ArcOfZeus': {}\r\n}","'use strict';\n\nvar Texts = {\n\ten: {\n\t\t\"TOTAL_COINS_WIN\": \"Total coins win\",\n\t\t\"GH_HISTORY\": \"History\",\n\t\t\"GH_GAME_DETAILS\": \"Game details\",\n\t\t\"GH_GAME_ID\": \"Game ID\",\n\t\t\"GH_ROUND_ID\": \"Round ID\",\n\t\t\"GH_SERVER_TIME_START\": \"Server time start\",\n\t\t\"GH_SERVER_TIME_END\": \"Server time end\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Win Ways\",\n\t\t\"GH_LENGTH\": \"Symbol win length\",\n\t\t\"GH_MULTIPLIER\": \"Multiplier\",\n\t\t\"GH_WIN_WAYS\": \"Win Ways\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Cluster\",\n\t\t\"GH_CLUSTER_COUNT\": \"Symbol count\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Scatter win\",\n\n\t\t\"GH_HANDS\": \"Hands\",\n\t\t\"GH_SIDE_BETS\": \"Side bets\",\n\n\t\t\"HAND_0\": \"Hand [1]\",\n\t\t\"HAND_0_SIDE_0\": \"Hand [1] Sidebet - 21 Plus 3\",\n\t\t\"HAND_0_SIDE_1\": \"Hand [1] Sidebet - Any Pair\",\n\t\t\"HAND_0_SIDE_2\": \"Hand [1] Sidebet - Bustorama\",\n\n\t\t\"HAND_0_SPLIT_0\": \"Hand [1] (Split)\",\n\t\t\"HAND_1\": \"Hand [2]\",\n\t\t\"HAND_1_SPLIT_0\": \"Hand [2] (Split)\",\n\t\t\"HAND_1_SIDE_0\": \"Hand [2] Sidebet - 21 Plus 3\",\n\t\t\"HAND_1_SIDE_1\": \"Hand [2] Sidebet - Any Pair\",\n\t\t\"HAND_1_SIDE_2\": \"Hand [2] Sidebet - Bustorama\",\n\n\t\t\"HAND_2\": \"Hand [3]\",\n\t\t\"HAND_2_SPLIT_0\": \"Hand [3] (Split)\",\n\t\t\"HAND_2_SIDE_0\": \"Hand [3] Sidebet - 21 Plus 3\",\n\t\t\"HAND_2_SIDE_1\": \"Hand [3] Sidebet - Any Pair\",\n\t\t\"HAND_2_SIDE_2\": \"Hand [3] Sidebet - Bustorama\",\n\n\t\t\"INSURANCE_HAND_0\": \"Hand [1] (Insurance)\",\n\t\t\"INSURANCE_HAND_1\": \"Hand [2] (Insurance)\",\n\t\t\"INSURANCE_HAND_2\": \"Hand [3] (Insurance)\",\n\t\t\"DEALER\": \"Dealer\",\n\t\t\"ANTE\": \"Ante\",\n\t\t\"ANTE_BONUS\": \"Ante Bonus\",\n\t\t\"PAIR_BONUS\": \"Pair Bonus\",\n\t\t\"PLAY\": \"Play\",\n\t\t\n\t\t\"STAKE\": \"Stake\",\n\t\t\"INSURANCE\": 'Insurance',\n\n\t\t\"GH_TRANSACTIONS\": \"Transactions\",\n\t\t\"GH_TOTAL_STAKE\": \"Total stake\",\n\t\t\"GH_TOTAL_BET\": \"Total bet\",\n\t\t\"GH_TOTAL_WIN\": \"Total win\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Feature Buy cost\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Feature Buy name\",\n\t\t\"GH_BEFORE_STAKE\": \"before stake\",\n\t\t\"GH_AFTER_STAKE\": \"after stake\",\n\t\t\"GH_AT_END\": \"at end\",\n\t\t\"GH_BALANCE\": \"Main balance\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Bonus balance\",\n\t\t\"GH_SESSION_BALANCE\": \"Session balance\",\n\t\t\"GH_SESSION_FREEBETS\": \"Session bonus balance\",\n\t\t\"GH_BONUS\": \"Bonus\",\n\n\t\t\"GH_WIN_DETAILS\": \"Win details\",\n\t\t\"GH_SPIN_DETAILS\": \"Spin details\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Additional Details\",\n\t\t\"GH_GAME_RESULTS\": \"Game results\",\n\t\t\"GH_INITIAL_SPIN\": \"Initial spin\",\n\t\t\"GH_JACKPOT_WIN\": \"Jackpot win\",\n\t\t\"GH_SYMBOL_WINS\": \"Symbol wins\",\n\t\t\"GH_LINE\": \"Line\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Free spins wins\",\n\t\t\"GH_FREE_SPIN\": \"Free spin\",\n\t\t\"GH_RESPIN\": \"Respin\",\n\t\t\"GH_RESPIN_WINS\": \"Respin wins\",\n\t\t\"GH_NUDGE\": \"Nudge\",\n\t\t\"GH_NUDGE_WINS\": \"Nudge wins\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Multiplier win\",\n\t\t\"GH_MODIFIER_WIN\": \"Modifier win\",\n\t\t\"GH_BONUS_WIN\": \"Bonus win\",\n\t\t\"GH_INSTANT_WIN\": \"Instant win\",\n\t\t\"GH_NO_HISTORY\": \"No history available\",\n\t\t\"GH_GAMBLE_WINS\": \"Gamble wins\",\n\t\t\"GH_NO_WINS\": \"No wins\",\n\t\t\"GH_ROUND_CORRECTION\": \"Rounding correction\",\n\t\t\"GH_LIMITED_WIN\": \"Win (max limit)\",\n\t\t\"WIN_EXCHANGE\": \"Free spins price\",\n\t\t\"HALF_COLLECT\": \"Half collected win\",\n\t\t\"FULL_COLLECT\": \"Full collected win\",\n\n\t\t\"GH_TABLE_ID\": \"Table ID\",\n\t\t\"GH_PLAYER\": \"Player\",\n\t\t\"GH_BANKER\": \"Banker\",\n\t\t\"GH_TIE\": \"Tie\",\n\t\t\"GH_PLAYER_PAIR\": \"Player Pair\",\n\t\t\"GH_BANKER_PAIR\": \"Banker Pair\",\n\t\t\"GH_GAME_WINNER\": \"Winner\",\n\t\t\"GH_GAME_WINSUM\": \"Sum\",\n\t\t\"GH_GAME_TOTAL\": \"Total\",\n\t\t\"GH_GAME_STAKE\": \"Stake\",\n\n\t\t\"GH_SPIN_TITLE\": \"SPIN\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Free Spins\",\n\t\t\"GH_RESPINS_TITLE\": \"Respins\",\n\n\t\t\"GH_BALL_POSITION\": \"Ball Position:\",\n\t\t\"GH_TRIO\": \"Trio\",\n\t\t\"GH_SPLIT\": \"Split\",\n\t\t\"GH_STREET\": \"Street\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Corner\",\n\t\t\"GH_SIX_LINE\": \"Six Line\",\n\t\t\"GH_COLUMN\": \"Column\",\n\t\t\"GH_FIRST_COLUMN\": \"1st Column\",\n\t\t\"GH_SECOND_COLUMN\": \"2nd Column\",\n\t\t\"GH_THIRD_COLUMN\": \"3rd Column\",\n\t\t\"GH_DOZEN\": \"Dozen\",\n\t\t\"GH_FIRST_DOZEN\": \"1st 12\",\n\t\t\"GH_SECOND_DOZEN\": \"2nd 12\",\n\t\t\"GH_THIRD_DOZEN\": \"3rd 12\",\n\t\t\"GH_STRAIGHT\": \"Straight\",\n\t\t\"GH_COLOR\": \"Color\",\n\t\t\"GH_BLACK\": \"Black\",\n\t\t\"GH_RED\": \"Red\",\n\t\t\"GH_EVEN_ODD\": \"Even/Odd\",\n\t\t\"GH_EVEN\": \"Even\",\n\t\t\"GH_ODD\": \"Odd\",\n\t\t\"GH_SMALL_BIG\": \"1-18/19-36\",\n\t\t\"GH_SMALL\": \"1-18\",\n\t\t\"GH_BIG\": \"19-36\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Sneak peek was active for this round. All winnings and bets are demo money.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"Free rounds was active for this round.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Match your numbers\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Reveal sum of 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Match 3 symbols\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Match 3 amounts\",\n\t\t\"SCRATCH_FREE_CARD\": \"Free card\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tzh: {\n\t\t\"TOTAL_COINS_WIN\": \"总硬币奖\",\n\t\t\"GH_HISTORY\": \"历史记录\",\n\t\t\"GH_GAME_DETAILS\": \"游戏详情\",\n\t\t\"GH_GAME_ID\": \"游戏名称\",\n\t\t\"GH_ROUND_ID\": \"游戏ID\",\n\t\t\"GH_SERVER_TIME_START\": \"服务器时间开始\",\n\t\t\"GH_SERVER_TIME_END\": \"服务器时间结束\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"中奖方式\",\n\t\t\"GH_LENGTH\": \"中奖图案大小\",\n\t\t\"GH_MULTIPLIER\": \"奖金倍数\",\n\t\t\"GH_WIN_WAYS\": \"中奖方式\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"中奖区\",\n\t\t\"GH_CLUSTER_COUNT\": \"中奖图案个数\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"分散赢利\",\n\n\t\t\"GH_TRANSACTIONS\": \"交易记录\",\n\t\t\"GH_TOTAL_STAKE\": \"总投注金额\",\n\t\t\"GH_TOTAL_BET\": \"总投注\",\n\t\t\"GH_TOTAL_WIN\": \"总赢额\",\n\t\t\"GH_FEATURE_BUY_COST\": \"功能购买价格\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"功能购买名称\",\n\t\t\"GH_BEFORE_STAKE\": \"投注前\",\n\t\t\"GH_AFTER_STAKE\": \"投注后\",\n\t\t\"GH_AT_END\": \"最后\",\n\t\t\"GH_BALANCE\": \"主要余额\",\n\t\t\"GH_FREEBETS_BALANCE\": \"红利余额\",\n\t\t\"GH_SESSION_BALANCE\": \"游戏活动余额\",\n\t\t\"GH_SESSION_FREEBETS\": \"游戏活动红利余额\",\n\t\t\"GH_BONUS\": \"红利\",\n\n\t\t\"GH_WIN_DETAILS\": \"中奖详情\",\n\t\t\"GH_SPIN_DETAILS\": \"旋转明细\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"额外详情\",\n\t\t\"GH_GAME_RESULTS\": \"游戏结果\",\n\t\t\"GH_INITIAL_SPIN\": \"初始旋转\",\n\t\t\"GH_JACKPOT_WIN\": \"赢得头奖\",\n\t\t\"GH_SYMBOL_WINS\": \"中奖图案\",\n\t\t\"GH_LINE\": \"连线\",\n\t\t\"GH_FREE_SPIN_WINS\": \"赢得免费旋转机会\",\n\t\t\"GH_FREE_SPIN\": \"免费旋转\",\n\t\t\"GH_RESPIN\": \"重新旋转\",\n\t\t\"GH_RESPIN_WINS\": \"重新旋转盈利\",\n\t\t\"GH_NUDGE\": \"Nudge\",\n\t\t\"GH_NUDGE_WINS\": \"Nudge Wins\",\n\t\t\"GH_MULTIPLIER_WINS\": \"乘数胜\",\n\t\t\"GH_MODIFIER_WIN\": \"盈利调整\",\n\t\t\"GH_BONUS_WIN\": \"额外奖\",\n\t\t\"GH_INSTANT_WIN\": \"立即获胜\",\n\t\t\"GH_NO_HISTORY\": \"无历史记录\",\n\t\t\"GH_GAMBLE_WINS\": \"赌赢\",\n\t\t\"GH_NO_WINS\": \"无中奖信息\",\n\t\t\"GH_ROUND_CORRECTION\": \"四舍五入\",\n\t\t\"GH_LIMITED_WIN\": \"赢取（最大限制\",\n\t\t\"WIN_EXCHANGE\": \"免费旋转价格\",\n\t\t\"HALF_COLLECT\": \"已收集一半赢利\",\n\t\t\"FULL_COLLECT\": \"已收集全部赢利\",\n\n\t\t\"GH_TABLE_ID\": \"台桌号\",\n\t\t\"GH_PLAYER\": \"闲\",\n\t\t\"GH_BANKER\": \"庄\",\n\t\t\"GH_TIE\": \"和\",\n\t\t\"GH_PLAYER_PAIR\": \"闲对\",\n\t\t\"GH_BANKER_PAIR\": \"庄对\",\n\t\t\"GH_GAME_WINNER\": \"赢家\",\n\t\t\"GH_GAME_WINSUM\": \"总计\",\n\t\t\"GH_GAME_TOTAL\": \"总共\",\n\t\t\"GH_GAME_STAKE\": \"下注金额\",\n\n\t\t\"GH_SPIN_TITLE\": \"旋转\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"免费旋转\",\n\t\t\"GH_RESPINS_TITLE\": \"重新旋转\",\n\n\t\t\"GH_BALL_POSITION\": \"小球位置：\",\n\t\t\"GH_TRIO\": \"三数总数\",\n\t\t\"GH_SPLIT\": \"分注总数\",\n\t\t\"GH_STREET\": \"街注总数\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"角注总数\",\n\t\t\"GH_SIX_LINE\": \"两竖排\",\n\t\t\"GH_COLUMN\": \"列注总数\",\n\t\t\"GH_FIRST_COLUMN\": \"列注1\",\n\t\t\"GH_SECOND_COLUMN\": \"列注2\",\n\t\t\"GH_THIRD_COLUMN\": \"列注3\",\n\t\t\"GH_DOZEN\": \"12码总数\",\n\t\t\"GH_FIRST_DOZEN\": \"1-12\",\n\t\t\"GH_SECOND_DOZEN\": \"2nd 12\",\n\t\t\"GH_THIRD_DOZEN\": \"3rd 12\",\n\t\t\"GH_STRAIGHT\": \"孤丁总数\",\n\t\t\"GH_COLOR\": \"红/黑总数\",\n\t\t\"GH_BLACK\": \"黑\",\n\t\t\"GH_RED\": \"红\",\n\t\t\"GH_EVEN_ODD\": \"单/双总数\",\n\t\t\"GH_EVEN\": \"双\",\n\t\t\"GH_ODD\": \"单\",\n\t\t\"GH_SMALL_BIG\": \"大小总数\",\n\t\t\"GH_SMALL\": \"小\",\n\t\t\"GH_BIG\": \"大\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"这一轮为试玩模式，所有的奖金和赌注都是试玩金额。\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"此轮的免费回合已激活。\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"匹配您的数字\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"总和为7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"匹配3个符号\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"匹配3个金额\",\n\t\t\"SCRATCH_FREE_CARD\": \"免费卡\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\t'zh-TW': {\n\t\t\"TOTAL_COINS_WIN\": \"總硬幣獎\",\n\t\t\"GH_HISTORY\": \"歷史紀錄\",\n\t\t\"GH_GAME_DETAILS\": \"遊戲詳情\",\n\t\t\"GH_GAME_ID\": \"遊戲帳號\",\n\t\t\"GH_ROUND_ID\": \"回合數\",\n\t\t\"GH_SERVER_TIME_START\": \"伺服器計時開始\",\n\t\t\"GH_SERVER_TIME_END\": \"伺服器計時結束\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"中獎方式\",\n\t\t\"GH_LENGTH\": \"中奖图案大小\",\n\t\t\"GH_MULTIPLIER\": \"獎金倍數\",\n\t\t\"GH_WIN_WAYS\": \"中獎方式\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"中獎區\",\n\t\t\"GH_CLUSTER_COUNT\": \"中獎圖案個數\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"分散贏利\",\n\n\t\t\"GH_TRANSACTIONS\": \"交易\",\n\t\t\"GH_TOTAL_STAKE\": \"總投注金額\",\n\t\t\"GH_TOTAL_BET\": \"总投注\",\n\t\t\"GH_TOTAL_WIN\": \"中獎總計\",\n\t\t\"GH_FEATURE_BUY_COST\": \"購買功能花費\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"購買功能名稱\",\n\t\t\"GH_BEFORE_STAKE\": \"投注前\",\n\t\t\"GH_AFTER_STAKE\": \"投注後\",\n\t\t\"GH_AT_END\": \"最後\",\n\t\t\"GH_BALANCE\": \"主要餘額\",\n\t\t\"GH_FREEBETS_BALANCE\": \"紅利餘額\",\n\t\t\"GH_SESSION_BALANCE\": \"遊戲活動餘額\",\n\t\t\"GH_SESSION_FREEBETS\": \"遊戲活動紅利餘額\",\n\t\t\"GH_BONUS\": \"紅利\",\n\n\t\t\"GH_WIN_DETAILS\": \"中獎詳情\",\n\t\t\"GH_SPIN_DETAILS\": \"旋轉明細\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"補充說明\",\n\t\t\"GH_GAME_RESULTS\": \"遊戲結果\",\n\t\t\"GH_INITIAL_SPIN\": \"初始旋轉\",\n\t\t\"GH_JACKPOT_WIN\": \"贏得頭獎\",\n\t\t\"GH_SYMBOL_WINS\": \"中獎圖案\",\n\t\t\"GH_LINE\": \"連線\",\n\t\t\"GH_FREE_SPIN_WINS\": \"免費拉霸中獎\",\n\t\t\"GH_FREE_SPIN\": \"免費旋轉\",\n\t\t\"GH_RESPIN\": \"重新旋轉\",\n\t\t\"GH_RESPIN_WINS\": \"重新旋转盈利\",\n\t\t\"GH_NUDGE\": \"Nudge\",\n\t\t\"GH_NUDGE_WINS\": \"Nudge Wins\",\n\t\t\"GH_MULTIPLIER_WINS\": \"加倍獎勵\",\n\t\t\"GH_MODIFIER_WIN\": \"盈利調整\",\n\t\t\"GH_BONUS_WIN\": \"額外獎勵\",\n\t\t\"GH_INSTANT_WIN\": \"立即獎項\",\n\t\t\"GH_NO_HISTORY\": \"無歷史紀錄\",\n\t\t\"GH_GAMBLE_WINS\": \"賭注中獎\",\n\t\t\"GH_NO_WINS\": \"未中獎\",\n\t\t\"GH_ROUND_CORRECTION\": \"四舍五入\",\n\t\t\"GH_LIMITED_WIN\": \"贏取（最大限制\",\n\t\t\"WIN_EXCHANGE\": \"免費旋轉價格\",\n\t\t\"HALF_COLLECT\": \"已領取一半贏利\",\n\t\t\"FULL_COLLECT\": \"已領取全部贏利\",\n\n\t\t\"GH_TABLE_ID\": \"臺桌號\",\n\t\t\"GH_PLAYER\": \"閑\",\n\t\t\"GH_BANKER\": \"莊\",\n\t\t\"GH_TIE\": \"和\",\n\t\t\"GH_PLAYER_PAIR\": \"閑對\",\n\t\t\"GH_BANKER_PAIR\": \"莊對\",\n\t\t\"GH_GAME_WINNER\": \"贏家\",\n\t\t\"GH_GAME_WINSUM\": \"總計\",\n\t\t\"GH_GAME_TOTAL\": \"總共\",\n\t\t\"GH_GAME_STAKE\": \"下注金額\",\n\n\t\t\"GH_SPIN_TITLE\": \"旋轉\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"免費旋轉\",\n\t\t\"GH_RESPINS_TITLE\": \"重新旋轉\",\n\n\t\t\"GH_BALL_POSITION\": \"小球位置：\",\n\t\t\"GH_TRIO\": \"三數總數\",\n\t\t\"GH_SPLIT\": \"分注總數\",\n\t\t\"GH_STREET\": \"街注總數\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"角注總數\",\n\t\t\"GH_SIX_LINE\": \"兩豎排\",\n\t\t\"GH_COLUMN\": \"列注總數\",\n\t\t\"GH_FIRST_COLUMN\": \"列注1\",\n\t\t\"GH_SECOND_COLUMN\": \"列注2\",\n\t\t\"GH_THIRD_COLUMN\": \"列注3\",\n\t\t\"GH_DOZEN\": \"12碼總數\",\n\t\t\"GH_FIRST_DOZEN\": \"1-12\",\n\t\t\"GH_SECOND_DOZEN\": \"13-24\",\n\t\t\"GH_THIRD_DOZEN\": \"25-36\",\n\t\t\"GH_STRAIGHT\": \"孤丁總數\",\n\t\t\"GH_COLOR\": \"紅/黑總數\",\n\t\t\"GH_BLACK\": \"黑\",\n\t\t\"GH_RED\": \"紅\",\n\t\t\"GH_EVEN_ODD\": \"單/雙總數\",\n\t\t\"GH_EVEN\": \"雙\",\n\t\t\"GH_ODD\": \"單\",\n\t\t\"GH_SMALL_BIG\": \"大小總數\",\n\t\t\"GH_SMALL\": \"小\",\n\t\t\"GH_BIG\": \"大\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"這一輪為試玩模式，所有的獎金和賭注都是試玩金額。\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"本回合啟用免費回合功能。\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"匹配您的數字\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"總和為7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"匹配3個符號\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"匹配3個金額\",\n\t\t\"SCRATCH_FREE_CARD\": \"免費卡\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tja: {\n\t\t\"TOTAL_COINS_WIN\": \"合計獲得コイン\",\n\t\t\"GH_HISTORY\": \"履歴\",\n\t\t\"GH_GAME_DETAILS\": \"ゲームの詳細\",\n\t\t\"GH_GAME_ID\": \"ゲームID\",\n\t\t\"GH_ROUND_ID\": \"ラウンドID\",\n\t\t\"GH_SERVER_TIME_START\": \"サーバー時間開始\",\n\t\t\"GH_SERVER_TIME_END\": \"サーバー時間終了\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"ウィンウェイ\",\n\t\t\"GH_LENGTH\": \"シンボルの長さ\",\n\t\t\"GH_MULTIPLIER\": \"マルチプライヤー\",\n\t\t\"GH_WIN_WAYS\": \"ウィンウェイ\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"クラスター\",\n\t\t\"GH_CLUSTER_COUNT\": \"シンボルカウント\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"スキャッター当たり\",\n\n\t\t\"GH_TRANSACTIONS\": \"取引\",\n\t\t\"GH_TOTAL_STAKE\": \"合計賭け金\",\n\t\t\"GH_TOTAL_BET\": \"合計ベット額\",\n\t\t\"GH_TOTAL_WIN\": \"当たり合計\",\n\t\t\"GH_FEATURE_BUY_COST\": \"フィーチャー購入価格\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"購入フィーチャー名\",\n\t\t\"GH_BEFORE_STAKE\": \"ベット前\",\n\t\t\"GH_AFTER_STAKE\": \"ベット後\",\n\t\t\"GH_AT_END\": \"終了時\",\n\t\t\"GH_BALANCE\": \"メイン残高\",\n\t\t\"GH_FREEBETS_BALANCE\": \"ボーナス残高\",\n\t\t\"GH_SESSION_BALANCE\": \"セッション残高\",\n\t\t\"GH_SESSION_FREEBETS\": \"セッションボーナス残高\",\n\t\t\"GH_BONUS\": \"ボーナス\",\n\n\t\t\"GH_WIN_DETAILS\": \"勝ちの詳細\",\n\t\t\"GH_SPIN_DETAILS\": \"スピンの詳細\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"追加詳細\",\n\t\t\"GH_GAME_RESULTS\": \"ゲーム結果\",\n\t\t\"GH_INITIAL_SPIN\": \"初期スピン\",\n\t\t\"GH_JACKPOT_WIN\": \"大当たり\",\n\t\t\"GH_SYMBOL_WINS\": \"シンボル当たり\",\n\t\t\"GH_LINE\": \"ライン\",\n\t\t\"GH_FREE_SPIN_WINS\": \"無料スピン当たり\",\n\t\t\"GH_FREE_SPIN\": \"フリースピン\",\n\t\t\"GH_RESPIN\": \"リスピン\",\n\t\t\"GH_RESPIN_WINS\": \"リスピンの勝利\",\n\t\t\"GH_NUDGE\": \"ナッジ\",\n\t\t\"GH_NUDGE_WINS\": \"ナッジウイン\",\n\t\t\"GH_MULTIPLIER_WINS\": \"マルチプライヤーの賞金\",\n\t\t\"GH_MODIFIER_WIN\": \"バンカーの勝ち\",\n\t\t\"GH_BONUS_WIN\": \"ボーナスの賞金\",\n\t\t\"GH_INSTANT_WIN\": \"すぐ勝てる\",\n\t\t\"GH_NO_HISTORY\": \"履歴なし\",\n\t\t\"GH_GAMBLE_WINS\": \"ギャンブル当たり\",\n\t\t\"GH_NO_WINS\": \"勝ちなし\",\n\t\t\"GH_ROUND_CORRECTION\": \"四捨五入\",\n\t\t\"GH_LIMITED_WIN\": \"勝ち(最高リミット)\",\n\t\t\"WIN_EXCHANGE\": \"フリースピン価格\",\n\t\t\"HALF_COLLECT\": \"賞金半分回収済み\",\n\t\t\"FULL_COLLECT\": \"賞金全額回収済み\",\n\n\t\t\"GH_TABLE_ID\": \"テーブルID\",\n\t\t\"GH_PLAYER\": \"プレイヤー\",\n\t\t\"GH_BANKER\": \"バンカー\",\n\t\t\"GH_TIE\": \"タイ\",\n\t\t\"GH_PLAYER_PAIR\": \"プレイヤーペア\",\n\t\t\"GH_BANKER_PAIR\": \"バンカーペア\",\n\t\t\"GH_GAME_WINNER\": \"勝利者\",\n\t\t\"GH_GAME_WINSUM\": \"全額\",\n\t\t\"GH_GAME_TOTAL\": \"合計\",\n\t\t\"GH_GAME_STAKE\": \"ステーク\",\n\n\t\t\"GH_SPIN_TITLE\": \"回す\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"フリースピン\",\n\t\t\"GH_RESPINS_TITLE\": \"リスピン\",\n\n\t\t\"GH_BALL_POSITION\": \"ボールのポジション:\",\n\t\t\"GH_TRIO\": \"トリオ\",\n\t\t\"GH_SPLIT\": \"スプリット\",\n\t\t\"GH_STREET\": \"ストリート\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"コーナー\",\n\t\t\"GH_SIX_LINE\": \"6レーン\",\n\t\t\"GH_COLUMN\": \"コラムの合計\",\n\t\t\"GH_FIRST_COLUMN\": \"第一コラム\",\n\t\t\"GH_SECOND_COLUMN\": \"第二コラム\",\n\t\t\"GH_THIRD_COLUMN\": \"第三コラム\",\n\t\t\"GH_DOZEN\": \"ダーズ\",\n\t\t\"GH_FIRST_DOZEN\": \"1ダース\",\n\t\t\"GH_SECOND_DOZEN\": \"2ダーズ\",\n\t\t\"GH_THIRD_DOZEN\": \"3ダーズ\",\n\t\t\"GH_STRAIGHT\": \"ストレート\",\n\t\t\"GH_COLOR\": \"カラー\",\n\t\t\"GH_BLACK\": \"黒\",\n\t\t\"GH_RED\": \"赤\",\n\t\t\"GH_EVEN_ODD\": \"偶数/奇数\",\n\t\t\"GH_EVEN\": \"偶数\",\n\t\t\"GH_ODD\": \"奇数\",\n\t\t\"GH_SMALL_BIG\": \"小・大\",\n\t\t\"GH_SMALL\": \"小\",\n\t\t\"GH_BIG\": \"大\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"このラウンドではチラ見が起動していました。全賞金とベットはデモマネーとなります。\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"このラウンドではフリーラウンドが有効でした。\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"数字とマッチ\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"7の合計\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"3つのシンボルをマッチ\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"3つの金額をマッチ\",\n\t\t\"SCRATCH_FREE_CARD\": \"フリーカード\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tko: {\n\t\t\"TOTAL_COINS_WIN\": \"획득한 코인 합계\",\n\t\t\"GH_HISTORY\": \"기록\",\n\t\t\"GH_GAME_DETAILS\": \"게임 상세 정보\",\n\t\t\"GH_GAME_ID\": \"게임 ID\",\n\t\t\"GH_ROUND_ID\": \"라운드 ID\",\n\t\t\"GH_SERVER_TIME_START\": \"서버 시간 시작\",\n\t\t\"GH_SERVER_TIME_END\": \"서버 시간 종료\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"승리 방법\",\n\t\t\"GH_LENGTH\": \"심볼 승리 길이\",\n\t\t\"GH_MULTIPLIER\": \"멀티플라이어\",\n\t\t\"GH_WIN_WAYS\": \"승리 방법\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"클러스터\",\n\t\t\"GH_CLUSTER_COUNT\": \"심볼 개수\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"스캐터 상금\",\n\n\t\t\"GH_TRANSACTIONS\": \"거래\",\n\t\t\"GH_TOTAL_STAKE\": \"총 판돈\",\n\t\t\"GH_TOTAL_BET\": \"Total Bet\",\n\t\t\"GH_TOTAL_WIN\": \"총 승리\",\n\t\t\"GH_FEATURE_BUY_COST\": \"기능 구매 비용\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"기능 구매 이름\",\n\t\t\"GH_BEFORE_STAKE\": \"베팅 전\",\n\t\t\"GH_AFTER_STAKE\": \"베팅 후\",\n\t\t\"GH_AT_END\": \"종료 시\",\n\t\t\"GH_BALANCE\": \"메인 잔액\",\n\t\t\"GH_FREEBETS_BALANCE\": \"보너스 잔액\",\n\t\t\"GH_SESSION_BALANCE\": \"세션 잔액\",\n\t\t\"GH_SESSION_FREEBETS\": \"세션 보너스 잔액\",\n\t\t\"GH_BONUS\": \"보너스\",\n\n\t\t\"GH_WIN_DETAILS\": \"승리 상세 정보\",\n\t\t\"GH_SPIN_DETAILS\": \"스핀 상세 정보\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"추가 세부 정보\",\n\t\t\"GH_GAME_RESULTS\": \"Game Results\",\n\t\t\"GH_INITIAL_SPIN\": \"최초 스핀\",\n\t\t\"GH_JACKPOT_WIN\": \"잭팟 승리\",\n\t\t\"GH_SYMBOL_WINS\": \"우승 심볼\",\n\t\t\"GH_LINE\": \"라인\",\n\t\t\"GH_FREE_SPIN_WINS\": \"무료 스핀 승리\",\n\t\t\"GH_FREE_SPIN\": \"프리 스핀\",\n\t\t\"GH_RESPIN\": \"재스핀\",\n\t\t\"GH_RESPIN_WINS\": \"재스핀 승리\",\n\t\t\"GH_NUDGE\": \"Nudge\",\n\t\t\"GH_NUDGE_WINS\": \"Nudge Wins\",\n\t\t\"GH_MULTIPLIER_WINS\": \"배수 승리\",\n\t\t\"GH_MODIFIER_WIN\": \"배수 상금\",\n\t\t\"GH_BONUS_WIN\": \"보너스 승리\",\n\t\t\"GH_INSTANT_WIN\": \"즉시 승리\",\n\t\t\"GH_NO_HISTORY\": \"기록 없음\",\n\t\t\"GH_GAMBLE_WINS\": \"겜블 승리\",\n\t\t\"GH_NO_WINS\": \"승리 없음\",\n\t\t\"GH_ROUND_CORRECTION\": \"반올림 교정값\",\n\t\t\"GH_LIMITED_WIN\": \"승 (맥스제한)\",\n\t\t\"WIN_EXCHANGE\": \"무료 회전 비용\",\n\t\t\"HALF_COLLECT\": \"절반 상금 받음\",\n\t\t\"FULL_COLLECT\": \"전체 상금 받음\",\n\n\t\t\"GH_TABLE_ID\": \"Table ID\",\n\t\t\"GH_PLAYER\": \"Player\",\n\t\t\"GH_BANKER\": \"Banker\",\n\t\t\"GH_TIE\": \"Tie\",\n\t\t\"GH_PLAYER_PAIR\": \"Player Pair\",\n\t\t\"GH_BANKER_PAIR\": \"Banker Pair\",\n\t\t\"GH_GAME_WINNER\": \"Winner\",\n\t\t\"GH_GAME_WINSUM\": \"Sum\",\n\t\t\"GH_GAME_TOTAL\": \"Total\",\n\t\t\"GH_GAME_STAKE\": \"베팅\",\n\n\t\t\"GH_SPIN_TITLE\": \"스핀\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"프리 스핀\",\n\t\t\"GH_RESPINS_TITLE\": \"재스핀\",\n\n\t\t\"GH_BALL_POSITION\": \"볼 위치\",\n\t\t\"GH_TRIO\": \"트리오 합계\",\n\t\t\"GH_SPLIT\": \"스플릿 합계\",\n\t\t\"GH_STREET\": \"스플릿 합계\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"코너 합계\",\n\t\t\"GH_SIX_LINE\": \"6 라인 합계\",\n\t\t\"GH_COLUMN\": \"컬럼 합계\",\n\t\t\"GH_FIRST_COLUMN\": \"1번째 컬럼\",\n\t\t\"GH_SECOND_COLUMN\": \"2번째 컬럼\",\n\t\t\"GH_THIRD_COLUMN\": \"3번째 컬럼\",\n\t\t\"GH_DOZEN\": \"더즌 합계\",\n\t\t\"GH_FIRST_DOZEN\": \"1번째 12\",\n\t\t\"GH_SECOND_DOZEN\": \"2번째\",\n\t\t\"GH_THIRD_DOZEN\": \"3번째\",\n\t\t\"GH_STRAIGHT\": \"스트레이트 합계\",\n\t\t\"GH_COLOR\": \"컬러 합계\",\n\t\t\"GH_BLACK\": \"블랙\",\n\t\t\"GH_RED\": \"레드\",\n\t\t\"GH_EVEN_ODD\": \"짝/홀 합계\",\n\t\t\"GH_EVEN\": \"짝수\",\n\t\t\"GH_ODD\": \"홀수\",\n\t\t\"GH_SMALL_BIG\": \"스몰/빅 합계\",\n\t\t\"GH_SMALL\": \"소몰\",\n\t\t\"GH_BIG\": \"빅\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"이 라운드에 미리 보기가 활성화 되었습니다. 모든 상금과 베팅은 체험머니 입니다.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"이 라운드에 무료 라운드가 활성화되었습니다.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Match your numbers\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Reveal sum of 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Match 3 symbols\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Match 3 amounts\",\n\t\t\"SCRATCH_FREE_CARD\": \"Free ticket\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tth: {\n\t\t\"TOTAL_COINS_WIN\": \"รางวัลเหรียญรวม\",\n\t\t\"GH_HISTORY\": \"ประวัติ\",\n\t\t\"GH_GAME_DETAILS\": \"รายละเอียดเกม\",\n\t\t\"GH_GAME_ID\": \"ID เกม\",\n\t\t\"GH_ROUND_ID\": \"ID รอบ\",\n\t\t\"GH_SERVER_TIME_START\": \"เวลาเซิร์ฟเวอร์เริ่ม\",\n\t\t\"GH_SERVER_TIME_END\": \"เวลาเซิร์ฟเวอร์สิ้นสุด\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"จำนวนเส้นที่ชนะ\",\n\t\t\"GH_LENGTH\": \"สัญลักษณ์ที่ชนะ\",\n\t\t\"GH_MULTIPLIER\": \"ตัวคูณ\",\n\t\t\"GH_WIN_WAYS\": \"จำนวนเส้นที่ชนะ\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"กลุ่ม\",\n\t\t\"GH_CLUSTER_COUNT\": \"จำนวนสัญลักษณ์\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"รางวัลชนะสแคทเทอร์\",\n\n\t\t\"GH_TRANSACTIONS\": \"รายการเปลี่ยนแปลง\",\n\t\t\"GH_TOTAL_STAKE\": \"เดิมพันทั้งหมด\",\n\t\t\"GH_TOTAL_BET\": \"เงินเดิมพันรวม\",\n\t\t\"GH_TOTAL_WIN\": \"ได้รวม\",\n\t\t\"GH_FEATURE_BUY_COST\": \"ราคาฟีเจอร์ซื้อ\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"ชื่อฟีเจอร์ซื้อ\",\n\t\t\"GH_BEFORE_STAKE\": \"ก่อนเดิมพัน\",\n\t\t\"GH_AFTER_STAKE\": \"หลังเดิมพัน\",\n\t\t\"GH_AT_END\": \"หลังจบรอบ\",\n\t\t\"GH_BALANCE\": \"ยอดหลัก\",\n\t\t\"GH_FREEBETS_BALANCE\": \"ยอดโบนัส\",\n\t\t\"GH_SESSION_BALANCE\": \"ยอดเซสชัน\",\n\t\t\"GH_SESSION_FREEBETS\": \"ยอดโบนัสเซสชัน\",\n\t\t\"GH_BONUS\": \"โบนัส\",\n\n\t\t\"GH_WIN_DETAILS\": \"รายละเอียดการชนะ\",\n\t\t\"GH_SPIN_DETAILS\": \"รายละเอียดการสปิน\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"รายละเอียดเพิ่มเติม\",\n\t\t\"GH_GAME_RESULTS\": \"Game Results\",\n\t\t\"GH_INITIAL_SPIN\": \"การหมุนเริ่มแรก\",\n\t\t\"GH_JACKPOT_WIN\": \"ได้แจ็คพอต\",\n\t\t\"GH_SYMBOL_WINS\": \"สัญลักษณ์ชนะ\",\n\t\t\"GH_LINE\": \"ไลน์\",\n\t\t\"GH_FREE_SPIN_WINS\": \"ได้หมุนฟรี\",\n\t\t\"GH_FREE_SPIN\": \"หมุนฟรี\",\n\t\t\"GH_RESPIN\": \"หมุนอีกครั้ง\",\n\t\t\"GH_RESPIN_WINS\": \"รางวัลจากการหมุนอีกครั้ง\",\n\t\t\"GH_NUDGE\": \"Nudge\",\n\t\t\"GH_NUDGE_WINS\": \"Nudge Wins\",\n\t\t\"GH_MULTIPLIER_WINS\": \"การชนะตัวเพิ่มชัยชนะ\",\n\t\t\"GH_MODIFIER_WIN\": \"เพิ่มการชนะ\",\n\t\t\"GH_BONUS_WIN\": \"การชนะโบนัส\",\n\t\t\"GH_INSTANT_WIN\": \"ได้รางวัลทันที\",\n\t\t\"GH_NO_HISTORY\": \"ไม่พบประวัติ\",\n\t\t\"GH_GAMBLE_WINS\": \"เงินพนันที่ได้\",\n\t\t\"GH_NO_WINS\": \"ไม่มีการชนะ\",\n\t\t\"GH_ROUND_CORRECTION\": \"แก้ไขการปัดเศษ\",\n\t\t\"GH_LIMITED_WIN\": \"ชนะ (จำกัดสูงสุด)\",\n\t\t\"WIN_EXCHANGE\": \"ราคารอบหมุนฟรี\",\n\t\t\"HALF_COLLECT\": \"สะสมเงินรางวัลครึ่งหนึ่งแล้ว\",\n\t\t\"FULL_COLLECT\": \"สะสมเงินรางวัลทั้งหมดแล้ว\",\n\n\t\t\"GH_TABLE_ID\": \"รหัสโต๊ะเดิมพัน\",\n\t\t\"GH_PLAYER\": \"เพลเยอร์\",\n\t\t\"GH_BANKER\": \"แบงเกอร์\",\n\t\t\"GH_TIE\": \"เสมอ\",\n\t\t\"GH_PLAYER_PAIR\": \"เพลเยอร์คู่\",\n\t\t\"GH_BANKER_PAIR\": \"แบงเกอร์คู่\",\n\t\t\"GH_GAME_WINNER\": \"ผู้ชนะ\",\n\t\t\"GH_GAME_WINSUM\": \"รวม\",\n\t\t\"GH_GAME_TOTAL\": \"รวมทั้งหมด\",\n\t\t\"GH_GAME_STAKE\": \"เงินเดิมพัน\",\n\n\t\t\"GH_SPIN_TITLE\": \"หมุน\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"หมุนฟรี\",\n\t\t\"GH_RESPINS_TITLE\": \"หมุนอีกครั้ง\",\n\n\t\t\"GH_BALL_POSITION\": \"ตำแหน่งบอล:\",\n\t\t\"GH_TRIO\": \"ทริโอรวม\",\n\t\t\"GH_SPLIT\": \"รวมแยก\",\n\t\t\"GH_STREET\": \"รวมสตรีท\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"รวมมุม\",\n\t\t\"GH_SIX_LINE\": \"รวม 6 แถว\",\n\t\t\"GH_COLUMN\": \"คอลัมน์รวม:\",\n\t\t\"GH_FIRST_COLUMN\": \"คอลัมน์ที่หนึ่ง\",\n\t\t\"GH_SECOND_COLUMN\": \"คอลัมน์ที่สอง\",\n\t\t\"GH_THIRD_COLUMN\": \"คอลัมน์ที่สาม\",\n\t\t\"GH_DOZEN\": \"เดิมพันโหลรวม\",\n\t\t\"GH_FIRST_DOZEN\": \"12 ตัวแรก\",\n\t\t\"GH_SECOND_DOZEN\": \"สอง 12\",\n\t\t\"GH_THIRD_DOZEN\": \"สาม 12\",\n\t\t\"GH_STRAIGHT\": \"เดิมพันตรงรวม\",\n\t\t\"GH_COLOR\": \"สีรวม\",\n\t\t\"GH_BLACK\": \"ดำ\",\n\t\t\"GH_RED\": \"แดง\",\n\t\t\"GH_EVEN_ODD\": \"คู่/คี่รวม\",\n\t\t\"GH_EVEN\": \"คู่\",\n\t\t\"GH_ODD\": \"คี่\",\n\t\t\"GH_SMALL_BIG\": \"เล็ก/ใหญ่รวม\",\n\t\t\"GH_SMALL\": \"ใหญ่\",\n\t\t\"GH_BIG\": \"เล็ก\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"เปิดใช้งาน SNEAK PEEKในรอบนี้ เงินรางวัลและการเดิมพันทั้งหมดเป็นเงินทดลอง\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"รอบฟรีถูกเปิดใช้งานสำหรับรอบนี้แล้ว\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Match your numbers\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Reveal sum of 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Match 3 symbols\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Match 3 amounts\",\n\t\t\"SCRATCH_FREE_CARD\": \"Free ticket\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tvi: {\n\t\t\"TOTAL_COINS_WIN\": \"Tổng tiền thắng xu\",\n\t\t\"GH_HISTORY\": \"Lược sử\",\n\t\t\"GH_GAME_DETAILS\": \"Chi tiết trò chơi\",\n\t\t\"GH_GAME_ID\": \"Mã trò chơi\",\n\t\t\"GH_ROUND_ID\": \"Mã lượt chơi\",\n\t\t\"GH_SERVER_TIME_START\": \"Giờ bắt đầu của máy chủ\",\n\t\t\"GH_SERVER_TIME_END\": \"Giờ kết thúc của máy chủ\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Phương thức thắng\",\n\t\t\"GH_LENGTH\": \"Số lượng biểu tượng thắng\",\n\t\t\"GH_MULTIPLIER\": \"Hệ số\",\n\t\t\"GH_WIN_WAYS\": \"Phương thức thắng\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Nhóm chiến thắng\",\n\t\t\"GH_CLUSTER_COUNT\": \"Số lượng biểu tượng thắng.\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Chiến thắng Phân Tán\",\n\n\t\t\"GH_TRANSACTIONS\": \"Giao dịch\",\n\t\t\"GH_TOTAL_STAKE\": \"TỔNG CƯỢC\",\n\t\t\"GH_TOTAL_BET\": \"Tổng cược\",\n\t\t\"GH_TOTAL_WIN\": \"Tổng tiền thắng\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Chi phí Tính năng Mua\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Tên Tính năng Mua\",\n\t\t\"GH_BEFORE_STAKE\": \"trước khi cược\",\n\t\t\"GH_AFTER_STAKE\": \"sau khi cược\",\n\t\t\"GH_AT_END\": \"kết thúc vòng chơi\",\n\t\t\"GH_BALANCE\": \"Số dư chính\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Số dư thưởng\",\n\t\t\"GH_SESSION_BALANCE\": \"Số dư phiên\",\n\t\t\"GH_SESSION_FREEBETS\": \"Số dư thưởng phiên\",\n\t\t\"GH_BONUS\": \"Thưởng\",\n\n\t\t\"GH_WIN_DETAILS\": \"Chi tiết thắng\",\n\t\t\"GH_SPIN_DETAILS\": \"Chi tiết lượt quay\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Chi tiết bổ sung\",\n\t\t\"GH_GAME_RESULTS\": \"Game Results\",\n\t\t\"GH_INITIAL_SPIN\": \"Lượt quay ban đầu\",\n\t\t\"GH_JACKPOT_WIN\": \"Thắng lớn\",\n\t\t\"GH_SYMBOL_WINS\": \"Biểu Tượng Thắng\",\n\t\t\"GH_LINE\": \"Lượt quay\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Thắng quay tự do\",\n\t\t\"GH_FREE_SPIN\": \"Quay miễn phí\",\n\t\t\"GH_RESPIN\": \"Lượt quay lại\",\n\t\t\"GH_RESPIN_WINS\": \"Thắng trong lượt quay lại\",\n\t\t\"GH_NUDGE\": \"Nudge\",\n\t\t\"GH_NUDGE_WINS\": \"Nudge Wins\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Thắng nhân đôi\",\n\t\t\"GH_MODIFIER_WIN\": \"Điều chỉnh tiền thắng\",\n\t\t\"GH_BONUS_WIN\": \"Thắng tiền thưởng\",\n\t\t\"GH_INSTANT_WIN\": \"THẮNG NGAY\",\n\t\t\"GH_NO_HISTORY\": \"Không có sẵn lược sử\",\n\t\t\"GH_GAMBLE_WINS\": \"Thắng đánh bài\",\n\t\t\"GH_NO_WINS\": \"Không thắng\",\n\t\t\"GH_ROUND_CORRECTION\": \"Làm tròn số\",\n\t\t\"GH_LIMITED_WIN\": \"Thắng (Giới hạn tối đa\",\n\t\t\"WIN_EXCHANGE\": \"Giá kích hoạt vòng quay miễn phí\",\n\t\t\"HALF_COLLECT\": \"Thu thập một nửa tiền thắng\",\n\t\t\"FULL_COLLECT\": \"Thu thập toàn bộ tiền thắng\",\n\n\t\t\"GH_TABLE_ID\": \"ID bàn cược\",\n\t\t\"GH_PLAYER\": \"TỤ NGƯỜI CHƠI\",\n\t\t\"GH_BANKER\": \"TỤ CÁI\",\n\t\t\"GH_TIE\": \"HOÀ\",\n\t\t\"GH_PLAYER_PAIR\": \"TỤ NGƯỜI CHƠI ĐÔI\",\n\t\t\"GH_BANKER_PAIR\": \"TỤ CÁI ĐÔI\",\n\t\t\"GH_GAME_WINNER\": \"Thắng\",\n\t\t\"GH_GAME_WINSUM\": \"Tổng cược\",\n\t\t\"GH_GAME_TOTAL\": \"Tổng\",\n\t\t\"GH_GAME_STAKE\": \"TIỀN CƯỢC\",\n\n\t\t\"GH_SPIN_TITLE\": \"QUAY\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Quay miễn phí\",\n\t\t\"GH_RESPINS_TITLE\": \"LƯỢT QUAY LẠI\",\n\n\t\t\"GH_BALL_POSITION\": \"Vị trí banh:\",\n\t\t\"GH_TRIO\": \"Tổng nhóm 3 số\",\n\t\t\"GH_SPLIT\": \"Tổng 2 số\",\n\t\t\"GH_STREET\": \"Tổng hàng dọc 3 số\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Tổng góc 4 số\",\n\t\t\"GH_SIX_LINE\": \"Tổng 2 cột 6 số\",\n\t\t\"GH_COLUMN\": \"Tổng hàng\",\n\t\t\"GH_FIRST_COLUMN\": \"Hàng 1\",\n\t\t\"GH_SECOND_COLUMN\": \"Hàng 2\",\n\t\t\"GH_THIRD_COLUMN\": \"Hàng 3\",\n\t\t\"GH_DOZEN\": \"Tổng ô 12 số\",\n\t\t\"GH_FIRST_DOZEN\": \"1-12\",\n\t\t\"GH_SECOND_DOZEN\": \"13-24\",\n\t\t\"GH_THIRD_DOZEN\": \"25-36\",\n\t\t\"GH_STRAIGHT\": \"Tổng cược số\",\n\t\t\"GH_COLOR\": \"Tổng màu sắc\",\n\t\t\"GH_BLACK\": \"Đen\",\n\t\t\"GH_RED\": \"Đỏ\",\n\t\t\"GH_EVEN_ODD\": \"Tổng Chẵn / Lẻ\",\n\t\t\"GH_EVEN\": \"Chẵn\",\n\t\t\"GH_ODD\": \"Lẻ\",\n\t\t\"GH_SMALL_BIG\": \"Tổng Lớn / Nhỏ\",\n\t\t\"GH_SMALL\": \"Nhỏ\",\n\t\t\"GH_BIG\": \"Lớn\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"SNEAK PEEK được hoạt động trong vòng chơi này. Tất cả tiền thắng và tiền cược là tiền chơi thử.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"Vòng chơi miễn phí đã kích hoạt cho vòng này.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Match your numbers\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Reveal sum of 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Match 3 symbols\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Match 3 amounts\",\n\t\t\"SCRATCH_FREE_CARD\": \"Free ticket\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tid: {\n\t\t\"TOTAL_COINS_WIN\": \"Total koin yang dimenangkan\",\n\t\t\"GH_HISTORY\": \"Riwayat\",\n\t\t\"GH_GAME_DETAILS\": \"Rincian Game\",\n\t\t\"GH_GAME_ID\": \"ID Game\",\n\t\t\"GH_ROUND_ID\": \"ID Babak\",\n\t\t\"GH_SERVER_TIME_START\": \"Waktu Server Mulai\",\n\t\t\"GH_SERVER_TIME_END\": \"Waktu Server Akhir\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Cara kemenangan\",\n\t\t\"GH_LENGTH\": \"Lamanya Simbol Menang\",\n\t\t\"GH_MULTIPLIER\": \"Pengganda\",\n\t\t\"GH_WIN_WAYS\": \"Cara kemenangan\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Cluster\",\n\t\t\"GH_CLUSTER_COUNT\": \"Hitungan Simbol\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Kemenangan Scatter\",\n\n\t\t\"GH_TRANSACTIONS\": \"Transaksi\",\n\t\t\"GH_TOTAL_STAKE\": \"Taruhan Total\",\n\t\t\"GH_TOTAL_BET\": \"Total Taruhan\",\n\t\t\"GH_TOTAL_WIN\": \"Menang Total\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Harga Fitur Beli\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Nama Fitur Beli\",\n\t\t\"GH_BEFORE_STAKE\": \"sebelum taruhan\",\n\t\t\"GH_AFTER_STAKE\": \"setelah taruhan\",\n\t\t\"GH_AT_END\": \"di akhir\",\n\t\t\"GH_BALANCE\": \"Saldo utama\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Saldo bonus\",\n\t\t\"GH_SESSION_BALANCE\": \"Saldo sesi\",\n\t\t\"GH_SESSION_FREEBETS\": \"Saldo bonus sesi\",\n\t\t\"GH_BONUS\": \"Bonus\",\n\n\t\t\"GH_WIN_DETAILS\": \"Rincian Kemenangan\",\n\t\t\"GH_SPIN_DETAILS\": \"Detail Spin\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Detail Tambahan\",\n\t\t\"GH_GAME_RESULTS\": \"Game Results\",\n\t\t\"GH_INITIAL_SPIN\": \"Spin Awal\",\n\t\t\"GH_JACKPOT_WIN\": \"Menang Jackpot\",\n\t\t\"GH_SYMBOL_WINS\": \"Simbol Kemenangan\",\n\t\t\"GH_LINE\": \"Jalur\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Menang Putar Gratis\",\n\t\t\"GH_FREE_SPIN\": \"Putaran Gratis\",\n\t\t\"GH_RESPIN\": \"Respin\",\n\t\t\"GH_RESPIN_WINS\": \"Kemenangan Respin\",\n\t\t\"GH_NUDGE\": \"Nudge\",\n\t\t\"GH_NUDGE_WINS\": \"Nudge Wins\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Kemenangan Pengganda\",\n\t\t\"GH_MODIFIER_WIN\": \"Pengubah Kemenangan\",\n\t\t\"GH_BONUS_WIN\": \"Kemenangan bonus\",\n\t\t\"GH_INSTANT_WIN\": \"Kemenangan Instan\",\n\t\t\"GH_NO_HISTORY\": \"Riwayat tidak tersedia\",\n\t\t\"GH_GAMBLE_WINS\": \"Menang judi\",\n\t\t\"GH_NO_WINS\": \"Tanpa kemenangan\",\n\t\t\"GH_ROUND_CORRECTION\": \"Koreksi Pembulatan\",\n\t\t\"GH_LIMITED_WIN\": \"Menang (limit maks)\",\n\t\t\"WIN_EXCHANGE\": \"Harga spin gratis\",\n\t\t\"HALF_COLLECT\": \"Separuh kemenangan dikumpulkan\",\n\t\t\"FULL_COLLECT\": \"Seluruh kemenangan dikumpulkan\",\n\n\t\t\"GH_TABLE_ID\": \"ID Meja\",\n\t\t\"GH_PLAYER\": \"Player\",\n\t\t\"GH_BANKER\": \"Banker\",\n\t\t\"GH_TIE\": \"Seri\",\n\t\t\"GH_PLAYER_PAIR\": \"Pasangan Player\",\n\t\t\"GH_BANKER_PAIR\": \"Pasangan Banker\",\n\t\t\"GH_GAME_WINNER\": \"Pemenang\",\n\t\t\"GH_GAME_WINSUM\": \"Jumlah\",\n\t\t\"GH_GAME_TOTAL\": \"Total\",\n\t\t\"GH_GAME_STAKE\": \"Taruhan\",\n\n\t\t\"GH_SPIN_TITLE\": \"PUTAR\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Putaran Gratis\",\n\t\t\"GH_RESPINS_TITLE\": \"RESPINS\",\n\n\t\t\"GH_BALL_POSITION\": \"Posisi Bola:\",\n\t\t\"GH_TRIO\": \"Total Trio\",\n\t\t\"GH_SPLIT\": \"Total Split\",\n\t\t\"GH_STREET\": \"Total Street\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Total Corner\",\n\t\t\"GH_SIX_LINE\": \"Total 6 Baris\",\n\t\t\"GH_COLUMN\": \"Total Kolom\",\n\t\t\"GH_FIRST_COLUMN\": \"Kolom pertama\",\n\t\t\"GH_SECOND_COLUMN\": \"Kolom kedua\",\n\t\t\"GH_THIRD_COLUMN\": \"Kolom ketiga\",\n\t\t\"GH_DOZEN\": \"Total Dozen\",\n\t\t\"GH_FIRST_DOZEN\": \"12 pertama\",\n\t\t\"GH_SECOND_DOZEN\": \"2nd\",\n\t\t\"GH_THIRD_DOZEN\": \"3rd\",\n\t\t\"GH_STRAIGHT\": \"Total Straight\",\n\t\t\"GH_COLOR\": \"Total Warna\",\n\t\t\"GH_BLACK\": \"Hitam\",\n\t\t\"GH_RED\": \"Merah\",\n\t\t\"GH_EVEN_ODD\": \"Total Genap/Ganjil\",\n\t\t\"GH_EVEN\": \"Genap\",\n\t\t\"GH_ODD\": \"Ganjil\",\n\t\t\"GH_SMALL_BIG\": \"Total Kecil/Besar\",\n\t\t\"GH_SMALL\": \"Kecil\",\n\t\t\"GH_BIG\": \"Besar\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Sneak peek sudah aktif untuk ronde ini. semua kemenangan dan taruhan menggunakan uang demo.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"Babak gratis aktif untuk babak ini.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Match your numbers\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Reveal sum of 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Match 3 symbols\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Match 3 amounts\",\n\t\t\"SCRATCH_FREE_CARD\": \"Free ticket\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tda: {\n\t\t\"TOTAL_COINS_WIN\": \"Samlet møntgevinst\",\n\t\t\"GH_HISTORY\": \"Historik\",\n\t\t\"GH_GAME_DETAILS\": \"Spiloplysninger\",\n\t\t\"GH_GAME_ID\": \"Spil-id\",\n\t\t\"GH_ROUND_ID\": \"Runde-id\",\n\t\t\"GH_SERVER_TIME_START\": \"Servertid start\",\n\t\t\"GH_SERVER_TIME_END\": \"Servertid slut\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Vindermåder\",\n\t\t\"GH_LENGTH\": \"Længde\",\n\t\t\"GH_MULTIPLIER\": \"Multiplikator\",\n\t\t\"GH_WIN_WAYS\": \"Vindermåder\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Klynge\",\n\t\t\"GH_CLUSTER_COUNT\": \"Symbol antal\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Scatter-gevinst\",\n\n\t\t\"GH_TRANSACTIONS\": \"Transaktioner\",\n\t\t\"GH_TOTAL_STAKE\": \"Samlet Indsats\",\n\t\t\"GH_TOTAL_BET\": \"Samlet Indsats\",\n\t\t\"GH_TOTAL_WIN\": \"Samlet gevinst\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Pris af Købsfunktion\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Navn på Købsfunktion\",\n\t\t\"GH_BEFORE_STAKE\": \"før indsats\",\n\t\t\"GH_AFTER_STAKE\": \"efter indsats\",\n\t\t\"GH_AT_END\": \"ved afslutning\",\n\t\t\"GH_BALANCE\": \"Hovedsaldo\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Bonussaldo\",\n\t\t\"GH_SESSION_BALANCE\": \"Session saldo\",\n\t\t\"GH_SESSION_FREEBETS\": \"Session bonussaldo\",\n\t\t\"GH_BONUS\": \"Bonus\",\n\n\t\t\"GH_WIN_DETAILS\": \"Gevinstoplysninger\",\n\t\t\"GH_SPIN_DETAILS\": \"Spindetaljer\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Yderligere oplysninger\",\n\t\t\"GH_GAME_RESULTS\": \"Spilresultater\",\n\t\t\"GH_INITIAL_SPIN\": \"Første Spin\",\n\t\t\"GH_JACKPOT_WIN\": \"Jackpot-gevinst\",\n\t\t\"GH_SYMBOL_WINS\": \"Symbolgevinster\",\n\t\t\"GH_LINE\": \"Linje\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Gratis spin-gevinster\",\n\t\t\"GH_FREE_SPIN\": \"Gratis spin\",\n\t\t\"GH_RESPIN\": \"Genspin\",\n\t\t\"GH_RESPIN_WINS\": \"Genspin Gevinster\",\n\t\t\"GH_NUDGE\": \"Skub\",\n\t\t\"GH_NUDGE_WINS\": \"Skub-gevinster\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Multiplikatorgevinster\",\n\t\t\"GH_MODIFIER_WIN\": \"Modifikatorgevinst\",\n\t\t\"GH_BONUS_WIN\": \"Bonusgevinst\",\n\t\t\"GH_INSTANT_WIN\": \"Øjeblikkelig gevinst\",\n\t\t\"GH_NO_HISTORY\": \"Ingen historik tilgængelig\",\n\t\t\"GH_GAMBLE_WINS\": \"Gamble-gevinster\",\n\t\t\"GH_NO_WINS\": \"Ingen gevinster\",\n\t\t\"GH_ROUND_CORRECTION\": \"Afrundingsrettelse\",\n\t\t\"GH_LIMITED_WIN\": \"Gevinst (maks. grænse)\",\n\t\t\"WIN_EXCHANGE\": \"Pris for free spins\",\n\t\t\"HALF_COLLECT\": \"Halv gevinst indsamlet\",\n\t\t\"FULL_COLLECT\": \"Hel gevinst indsamlet\",\n\n\t\t\"GH_TABLE_ID\": \"Bord-ID\",\n\t\t\"GH_PLAYER\": \"SPILLER\",\n\t\t\"GH_BANKER\": \"BANKØR\",\n\t\t\"GH_TIE\": \"Uafgjort\",\n\t\t\"GH_PLAYER_PAIR\": \"Spiller Par\",\n\t\t\"GH_BANKER_PAIR\": \"Bankør Par\",\n\t\t\"GH_GAME_WINNER\": \"Vinder\",\n\t\t\"GH_GAME_WINSUM\": \"Sum\",\n\t\t\"GH_GAME_TOTAL\": \"I Alt\",\n\t\t\"GH_GAME_STAKE\": \"INDSATS\",\n\n\t\t\"GH_SPIN_TITLE\": \"SPIN\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Gratis spin\",\n\t\t\"GH_RESPINS_TITLE\": \"GENSPIN\",\n\n\t\t\"GH_BALL_POSITION\": \"Kugleplacering:\",\n\t\t\"GH_TRIO\": \"Trio Total\",\n\t\t\"GH_SPLIT\": \"Split Total\",\n\t\t\"GH_STREET\": \"Street Total\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Hjørne Total\",\n\t\t\"GH_SIX_LINE\": \"Linje Total\",\n\t\t\"GH_COLUMN\": \"Kolonne Total\",\n\t\t\"GH_FIRST_COLUMN\": \"1. Kolonne\",\n\t\t\"GH_SECOND_COLUMN\": \"2. Kolonne\",\n\t\t\"GH_THIRD_COLUMN\": \"3. Kolonne\",\n\t\t\"GH_DOZEN\": \"Dusin Total\",\n\t\t\"GH_FIRST_DOZEN\": \"Første 12\",\n\t\t\"GH_SECOND_DOZEN\": \"Midterste\",\n\t\t\"GH_THIRD_DOZEN\": \"Sidste\",\n\t\t\"GH_STRAIGHT\": \"Straght Total\",\n\t\t\"GH_COLOR\": \"Farve Total\",\n\t\t\"GH_BLACK\": \"Sort\",\n\t\t\"GH_RED\": \"Rød\",\n\t\t\"GH_EVEN_ODD\": \"Lige/Ulige Total\",\n\t\t\"GH_EVEN\": \"Lige\",\n\t\t\"GH_ODD\": \"Ulige\",\n\t\t\"GH_SMALL_BIG\": \"Lille/Stor Total\",\n\t\t\"GH_SMALL\": \"Lille\",\n\t\t\"GH_BIG\": \"Stor\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Smugkig var aktiv i denne runde. Alle gevinster og indsatser er demo penge.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"De gratis runder var aktive i denne runde.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"MATCH DINE NUMRE\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"SUM PÅ 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"MATCH 3 SYMBOLER\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"MATCH 3 BELØB\",\n\t\t\"SCRATCH_FREE_CARD\": \"GRATIS LOD\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tde: {\n\t\t\"TOTAL_COINS_WIN\": \"Gesamter Münzgewinn\",\n\t\t\"GH_HISTORY\": \"Verlauf\",\n\t\t\"GH_GAME_DETAILS\": \"Spieldaten\",\n\t\t\"GH_GAME_ID\": \"Spiel-ID\",\n\t\t\"GH_ROUND_ID\": \"Runden-ID\",\n\t\t\"GH_SERVER_TIME_START\": \"Serverzeit Start\",\n\t\t\"GH_SERVER_TIME_END\": \"Serverzeit Ende\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Gewinnkombinationen\",\n\t\t\"GH_LENGTH\": \"Symbol-Gewinnlänge\",\n\t\t\"GH_MULTIPLIER\": \"Multiplikator\",\n\t\t\"GH_WIN_WAYS\": \"Gewinnkombinationen\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Cluster\",\n\t\t\"GH_CLUSTER_COUNT\": \"Anzahl der Symbole\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Scatter-Gewinn\",\n\n\t\t\"GH_HANDS\": \"Hände\",\n\t\t\"GH_SIDE_BETS\": \"Nebeneinsätze\",\n\n\t\t\"HAND_0\": \"Hand [1]\",\n\t\t\"HAND_0_SPLIT_0\": \"Hand [1] (Geteilt)\",\n\t\t\"HAND_1\": \"Hand [2]\",\n\t\t\"HAND_1_SPLIT_0\": \"Hand [2] (Geteilt)\",\n\t\t\"HAND_2\": \"Hand [3]\",\n\t\t\"HAND_2_SPLIT_0\": \"Hand [3] (Geteilt)\",\n\t\t\"INSURANCE_HAND_0\": \"Hand [1] (Versicherung)\",\n\t\t\"INSURANCE_HAND_1\": \"Hand [2] (Versicherung)\",\n\t\t\"INSURANCE_HAND_2\": \"Hand [3] (Versicherung)\",\n\t\t\"DEALER\": \"Dealer\",\n\n\t\t\"STAKE\": \"Einsatz\",\n\t\t\"INSURANCE\": 'Versicherung',\n\n\t\t\"GH_TRANSACTIONS\": \"Transaktionen\",\n\t\t\"GH_TOTAL_STAKE\": \"Gesamteinsatz\",\n\t\t\"GH_TOTAL_BET\": \"Gesamtwette\",\n\t\t\"GH_TOTAL_WIN\": \"Gesamtgewinn\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Kosten des Kaufen-Features\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Name des Kaufen-Features\",\n\t\t\"GH_BEFORE_STAKE\": \"vor dem Einsatz\",\n\t\t\"GH_AFTER_STAKE\": \"nach dem Einsatz\",\n\t\t\"GH_AT_END\": \"Endguthaben\",\n\t\t\"GH_BALANCE\": \"Hauptguthaben\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Bonusguthaben\",\n\t\t\"GH_SESSION_BALANCE\": \"Sessionguthaben\",\n\t\t\"GH_SESSION_FREEBETS\": \"Session-Bonusguthaben\",\n\t\t\"GH_BONUS\": \"Bonus\",\n\n\t\t\"GH_WIN_DETAILS\": \"Gewinndaten\",\n\t\t\"GH_SPIN_DETAILS\": \"Dreh-Details\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Weitere Einzelheiten\",\n\t\t\"GH_GAME_RESULTS\": \"Ergebnis des Spiels\",\n\t\t\"GH_INITIAL_SPIN\": \"Anfangsdreh\",\n\t\t\"GH_JACKPOT_WIN\": \"Jackpot-Gewinn\",\n\t\t\"GH_SYMBOL_WINS\": \"Symbol Gewinne\",\n\t\t\"GH_LINE\": \"Linie\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Freispielgewinne\",\n\t\t\"GH_FREE_SPIN\": \"Freispiel\",\n\t\t\"GH_RESPIN\": \"Neudreh\",\n\t\t\"GH_RESPIN_WINS\": \"Neudreh-Gewinne\",\n\t\t\"GH_NUDGE\": \"Hüpfer\",\n\t\t\"GH_NUDGE_WINS\": \"Hüpfer-Gewinne\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Multiplikatorgewinne\",\n\t\t\"GH_MODIFIER_WIN\": \"Modifikatorgewinn\",\n\t\t\"GH_BONUS_WIN\": \"Bonusgewinn\",\n\t\t\"GH_INSTANT_WIN\": \"Sofortgewinn\",\n\t\t\"GH_NO_HISTORY\": \"Kein Verlauf verfügbar\",\n\t\t\"GH_GAMBLE_WINS\": \"Risikospielgewinne\",\n\t\t\"GH_NO_WINS\": \"Keine Gewinne\",\n\t\t\"GH_ROUND_CORRECTION\": \"Rundungskorrektur\",\n\t\t\"GH_LIMITED_WIN\": \"Gewinn (max. Limit)\",\n\t\t\"WIN_EXCHANGE\": \"Kosten für Gratis Drehs\",\n\t\t\"HALF_COLLECT\": \"Halber Gewinn gesammelt\",\n\t\t\"FULL_COLLECT\": \"Ganzer Gewinn gesammelt\",\n\n\t\t\"GH_TABLE_ID\": \"Tabellen ID\",\n\t\t\"GH_PLAYER\": \"Spieler\",\n\t\t\"GH_BANKER\": \"Banker\",\n\t\t\"GH_TIE\": \"Gleichstand\",\n\t\t\"GH_PLAYER_PAIR\": \"Spielerpaar\",\n\t\t\"GH_BANKER_PAIR\": \"Bankerpaar\",\n\t\t\"GH_GAME_WINNER\": \"Gewinner\",\n\t\t\"GH_GAME_WINSUM\": \"Summe\",\n\t\t\"GH_GAME_TOTAL\": \"Summe\",\n\t\t\"GH_GAME_STAKE\": \"Einsatz\",\n\n\t\t\"GH_SPIN_TITLE\": \"DREHEN\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Freispiel\",\n\t\t\"GH_RESPINS_TITLE\": \"NEUDREHE\",\n\n\t\t\"GH_BALL_POSITION\": \"Kugelposition:\",\n\t\t\"GH_TRIO\": \"Trio gesamt\",\n\t\t\"GH_SPLIT\": \"Split gesamt\",\n\t\t\"GH_STREET\": \"Street gesamt\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Corner gesamt\",\n\t\t\"GH_SIX_LINE\": \"Six Line gesamt\",\n\t\t\"GH_COLUMN\": \"Kolonne gesamt\",\n\t\t\"GH_FIRST_COLUMN\": \"1. Kolonne\",\n\t\t\"GH_SECOND_COLUMN\": \"2. Kolonne\",\n\t\t\"GH_THIRD_COLUMN\": \"3. Kolonne\",\n\t\t\"GH_DOZEN\": \"Dutzend gesamt\",\n\t\t\"GH_FIRST_DOZEN\": \"1. 12\",\n\t\t\"GH_SECOND_DOZEN\": \"2\",\n\t\t\"GH_THIRD_DOZEN\": \"3\",\n\t\t\"GH_STRAIGHT\": \"Zahl gesamt\",\n\t\t\"GH_COLOR\": \"Farbe gesamt\",\n\t\t\"GH_BLACK\": \"Schwarz\",\n\t\t\"GH_RED\": \"Rot\",\n\t\t\"GH_EVEN_ODD\": \"Gerade/Ungerade gesamt\",\n\t\t\"GH_EVEN\": \"Gerade\",\n\t\t\"GH_ODD\": \"Ungerade\",\n\t\t\"GH_SMALL_BIG\": \"Niedrig/Hoch gesamt\",\n\t\t\"GH_SMALL\": \"Niedrig\",\n\t\t\"GH_BIG\": \"Hoch\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Verdoppeln\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Angebot angenommen\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Für diese Runde war das Probespiel aktiv. Alle Gewinne und Einsätze werden in Demogeld angezeigt.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"Während dieser Runde war das Gratis Runden-Feature aktiv.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Übereinstimmung mit deinen zahlen\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Summe 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"3 gleiche symbole\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"3 gleiche beträge\",\n\t\t\"SCRATCH_FREE_CARD\": \"GRATISLOS\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tel: {\n\t\t\"TOTAL_COINS_WIN\": \"Συνολικό κέρδος νομισμάτων\",\n\t\t\"GH_HISTORY\": \"Ιστορικό\",\n\t\t\"GH_GAME_DETAILS\": \"Λεπτομέρειες παιχνιδιού\",\n\t\t\"GH_GAME_ID\": \"Αναγνωριστικό παιχνιδιού\",\n\t\t\"GH_ROUND_ID\": \"ID γύρου\",\n\t\t\"GH_SERVER_TIME_START\": \"Έναρξη χρόνου διακομιστή\",\n\t\t\"GH_SERVER_TIME_END\": \"Λήξη χρόνου διακομιστή\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"τρόποι κέρδους\",\n\t\t\"GH_LENGTH\": \"Μήκος κέρδους συμβόλου\",\n\t\t\"GH_MULTIPLIER\": \"Πολλαπλασιαστής\",\n\t\t\"GH_WIN_WAYS\": \"Τρόποι κέρδους\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Πλέγμα\",\n\t\t\"GH_CLUSTER_COUNT\": \"Αριθμός Συμβόλων\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Κέρδος διασποράς\",\n\n\t\t\"GH_TRANSACTIONS\": \"Συναλλαγές\",\n\t\t\"GH_TOTAL_STAKE\": \"ΣΥΝΟΛΙΚΟ ΠΟΣΟ ΠΟΝΤΑΡΙΣΜΑΤΟΣ\",\n\t\t\"GH_TOTAL_BET\": \"ΣΥΝΟΛΙΚΟ ΠΟΝΤΑΡ.\",\n\t\t\"GH_TOTAL_WIN\": \"Συνολικό κέρδος\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Κόστος Λειτουργίας Αγοράς\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Όνομα Λειτουργίας Αγοράς\",\n\t\t\"GH_BEFORE_STAKE\": \"πριν το ποντάρισμα\",\n\t\t\"GH_AFTER_STAKE\": \"μετά το ποντάρισμα\",\n\t\t\"GH_AT_END\": \"στο τέλος\",\n\t\t\"GH_BALANCE\": \"Βασικό υπόλοιπο\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Υπόλοιπο μπόνους\",\n\t\t\"GH_SESSION_BALANCE\": \"Υπόλοιπο περιόδου παιχνιδιού\",\n\t\t\"GH_SESSION_FREEBETS\": \"Υπόλοιπο μπόνους περιόδου παιχνιδιού\",\n\t\t\"GH_BONUS\": \"Μπόνους\",\n\n\t\t\"GH_WIN_DETAILS\": \"Λεπτομέρειες κέρδους\",\n\t\t\"GH_SPIN_DETAILS\": \"Λεπτομέρειες περιστροφής\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Πρόσθετες Λεπτομέρειες\",\n\t\t\"GH_GAME_RESULTS\": \"Αποτελέσματα παιχνιδιού\",\n\t\t\"GH_INITIAL_SPIN\": \"Αρχική περιστροφή\",\n\t\t\"GH_JACKPOT_WIN\": \"Κέρδος Τζακπότ\",\n\t\t\"GH_SYMBOL_WINS\": \"Κερδη Συμβολου\",\n\t\t\"GH_LINE\": \"Γραμμή\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Κέρδη δωρεάν περιστροφών\",\n\t\t\"GH_FREE_SPIN\": \"Δωρεάν περιστροφή\",\n\t\t\"GH_RESPIN\": \"ΕΠΑΝΑΠΕΡΙΣΤΡΟΦΗ\",\n\t\t\"GH_RESPIN_WINS\": \"Κέρδη εκ νέων περιστροφών\",\n\t\t\"GH_NUDGE\": \"Σκούντημα\",\n\t\t\"GH_NUDGE_WINS\": \"Κέρδη σκουντήματος\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Κέρδη πολλαπλασιαστή\",\n\t\t\"GH_MODIFIER_WIN\": \"Κέρδος τροποποιητή\",\n\t\t\"GH_BONUS_WIN\": \"Κέρδος μπόνους\",\n\t\t\"GH_INSTANT_WIN\": \"Άμεσο κέρδος\",\n\t\t\"GH_NO_HISTORY\": \"Δεν υπάρχει διαθέσιμο ιστορικό\",\n\t\t\"GH_GAMBLE_WINS\": \"Κέρδη πονταρίσματος\",\n\t\t\"GH_NO_WINS\": \"Δεν υπάρχουν κέρδη\",\n\t\t\"GH_ROUND_CORRECTION\": \"Στρογγυλοποίηση\",\n\t\t\"GH_LIMITED_WIN\": \"Κέρδος (μέγιστο όριο)\",\n\t\t\"WIN_EXCHANGE\": \"Κόστος δωρεάν στροφών\",\n\t\t\"HALF_COLLECT\": \"Μισό κέρδος συλλέχθηκε\",\n\t\t\"FULL_COLLECT\": \"Ολόκληρο κέρδος συλλέχθηκε\",\n\n\t\t\"GH_TABLE_ID\": \"Αναγνωριστικό τραπεζιού\",\n\t\t\"GH_PLAYER\": \"ΠΑΙΚΤΗΣ\",\n\t\t\"GH_BANKER\": \"ΜΠΑΝΚΑ\",\n\t\t\"GH_TIE\": \"Ισοπαλία\",\n\t\t\"GH_PLAYER_PAIR\": \"Ζεύγος παίκτη\",\n\t\t\"GH_BANKER_PAIR\": \"Ζεύγος μπάνκας\",\n\t\t\"GH_GAME_WINNER\": \"Νικητής\",\n\t\t\"GH_GAME_WINSUM\": \"Ποσό\",\n\t\t\"GH_GAME_TOTAL\": \"Σύνολο\",\n\t\t\"GH_GAME_STAKE\": \"ΠΟΣΟ ΠΟΝΤΑΡΙΣΜΑΤΟΣ\",\n\n\t\t\"GH_SPIN_TITLE\": \"ΠΕΡΙΣΤΡ.\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Δωρεάν περιστροφή\",\n\t\t\"GH_RESPINS_TITLE\": \"ΕΠΑΝΑΠΕΡΙΣΤΡΟΦΕΣ\",\n\n\t\t\"GH_BALL_POSITION\": \"Θέση μπίλιας:\",\n\t\t\"GH_TRIO\": \"Σύνολο τριπλέτας\",\n\t\t\"GH_SPLIT\": \"Σύνολο δυάδας\",\n\t\t\"GH_STREET\": \"Σύνολο τριάδας\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Σύνολο γωνίας\",\n\t\t\"GH_SIX_LINE\": \"Σύνολο εξάδας\",\n\t\t\"GH_COLUMN\": \"Σύνολο στήλης\",\n\t\t\"GH_FIRST_COLUMN\": \"1η στήλη\",\n\t\t\"GH_SECOND_COLUMN\": \"2η στήλη\",\n\t\t\"GH_THIRD_COLUMN\": \"3η στήλη\",\n\t\t\"GH_DOZEN\": \"Σύνολο 12άδας\",\n\t\t\"GH_FIRST_DOZEN\": \"1η 12άδα\",\n\t\t\"GH_SECOND_DOZEN\": \"2η 12άδα\",\n\t\t\"GH_THIRD_DOZEN\": \"3η 12άδα\",\n\t\t\"GH_STRAIGHT\": \"Σύνολο Απευθείας\",\n\t\t\"GH_COLOR\": \"Σύνολο χρώματος\",\n\t\t\"GH_BLACK\": \"Μαύρο\",\n\t\t\"GH_RED\": \"Κόκκινο\",\n\t\t\"GH_EVEN_ODD\": \"Σύνολο ζυγού/μονού\",\n\t\t\"GH_EVEN\": \"Ζυγός\",\n\t\t\"GH_ODD\": \"Μονός\",\n\t\t\"GH_SMALL_BIG\": \"Σύνολο Μικρών/Μεγάλων\",\n\t\t\"GH_SMALL\": \"Μικρό\",\n\t\t\"GH_BIG\": \"Μεγάλο\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Η λειτουργία κρυφής ματιάς ήταν ενεργή για αυτόν τον γύρο. Όλα τα κέρδη και τα στοιχήματα είναι εικονικά χρήματα.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"Δωρεάν γύροι ήταν ενεργοί για αυτόν τον γύρο.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Αντιστοιχίστε με τους αριθμούς σας\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Σύνολο 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Αντιστοιχίστε 3 συμβολα\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Αντιστοιχίστε 3 ποσά\",\n\t\t\"SCRATCH_FREE_CARD\": \"ΔΩΡΕΑΝ ΔΕΛΤΙΟ\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tes: {\n\t\t\"TOTAL_COINS_WIN\": \"Monedas totales ganadas\",\n\t\t\"GH_HISTORY\": \"Historial\",\n\t\t\"GH_GAME_DETAILS\": \"Información del juego\",\n\t\t\"GH_GAME_ID\": \"ID del juego\",\n\t\t\"GH_ROUND_ID\": \"ID de ronda\",\n\t\t\"GH_SERVER_TIME_START\": \"Inicio de la hora del servidor\",\n\t\t\"GH_SERVER_TIME_END\": \"Fin de la hora del servidor\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Formas de ganar\",\n\t\t\"GH_LENGTH\": \"Longitud del premio del símbolo\",\n\t\t\"GH_MULTIPLIER\": \"Multiplicador\",\n\t\t\"GH_WIN_WAYS\": \"Formas de ganar\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Grupo\",\n\t\t\"GH_CLUSTER_COUNT\": \"Número de símbolos\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Premio Scatter\",\n\t\t\n\t\t\"GH_HANDS\": \"Manos\",\n\t\t\"GH_SIDE_BETS\": \"Apuestas adicionales\",\n\n\t\t\"HAND_0\": \"Mano [1]\",\n\t\t\"HAND_0_SIDE_0\": \"Mano [1] Apuesta adicional - 21 más 3\",\n\t\t\"HAND_0_SIDE_1\": \"Mano [1] Apuesta adicional - Cualquier par\",\n\t\t\"HAND_0_SIDE_2\": \"Mano [1] Apuesta adicional - Bustorama\",\n\n\t\t\"HAND_0_SPLIT_0\": \"Mano [1] (Dividir)\",\n\t\t\"HAND_1\": \"Mano [2]\",\n\t\t\"HAND_1_SPLIT_0\": \"Mano [2] (Dividir)\",\n\t\t\"HAND_1_SIDE_0\": \"Mano [2] Apuesta adicional - 21 más 3\",\n\t\t\"HAND_1_SIDE_1\": \"Mano [2] Apuesta adicional - Cualquier par\",\n\t\t\"HAND_1_SIDE_2\": \"Mano [2] Apuesta adicional - Bustorama\",\n\n\t\t\"HAND_2\": \"Mano [3]\",\n\t\t\"HAND_2_SPLIT_0\": \"Mano [3] (Dividir)\",\n\t\t\"HAND_2_SIDE_0\": \"Mano [3] Apuesta adicional - 21 más 3\",\n\t\t\"HAND_2_SIDE_1\": \"Mano [3] Apuesta adicional - Cualquier par\",\n\t\t\"HAND_2_SIDE_2\": \"Mano [3] Apuesta adicional - Bustorama\",\n\n\t\t\"INSURANCE_HAND_0\": \"Mano [1] (Seguro)\",\n\t\t\"INSURANCE_HAND_1\": \"Mano [2] (Seguro)\",\n\t\t\"INSURANCE_HAND_2\": \"Mano [3] (Seguro)\",\n\t\t\"DEALER\": \"Croupier\",\n\t\t\"ANTE\": \"Ante\",\n\t\t\"ANTE_BONUS\": \"Bono Ante\",\n\t\t\"PAIR_BONUS\": \"Bono Par\",\n\t\t\"PLAY\": \"Jugar\",\n\t\t\n\t\t\"STAKE\": \"Apuesta\",\n\t\t\"INSURANCE\": 'Seguro',\n\n\t\t\"GH_TRANSACTIONS\": \"Transacciones\",\n\t\t\"GH_TOTAL_STAKE\": \"Apuesta Total\",\n\t\t\"GH_TOTAL_BET\": \"Apuesta Total\",\n\t\t\"GH_TOTAL_WIN\": \"Premio total\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Precio de la Función Comprar\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Nombre de la Función Comprar\",\n\t\t\"GH_BEFORE_STAKE\": \"antes de la apuesta\",\n\t\t\"GH_AFTER_STAKE\": \"después de la apuesta\",\n\t\t\"GH_AT_END\": \"final\",\n\t\t\"GH_BALANCE\": \"Saldo principal\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Saldo de bono\",\n\t\t\"GH_SESSION_BALANCE\": \"Saldo de la sesión\",\n\t\t\"GH_SESSION_FREEBETS\": \"Saldo de bono de la sesión\",\n\t\t\"GH_BONUS\": \"Bonus\",\n\n\t\t\"GH_WIN_DETAILS\": \"Información del premio\",\n\t\t\"GH_SPIN_DETAILS\": \"Detalles del giro\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Detalles adicionales\",\n\t\t\"GH_GAME_RESULTS\": \"Resultados del juego\",\n\t\t\"GH_INITIAL_SPIN\": \"Giro inicial\",\n\t\t\"GH_JACKPOT_WIN\": \"Premio del bote\",\n\t\t\"GH_SYMBOL_WINS\": \"Premios por Símbolos\",\n\t\t\"GH_LINE\": \"Línea\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Premios de giros gratis\",\n\t\t\"GH_FREE_SPIN\": \"Giro Gratis\",\n\t\t\"GH_RESPIN\": \"Regiro\",\n\t\t\"GH_RESPIN_WINS\": \"Premios del regiro\",\n\t\t\"GH_NUDGE\": \"Avance\",\n\t\t\"GH_NUDGE_WINS\": \"Premios de Avances\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Premios con multiplicador\",\n\t\t\"GH_MODIFIER_WIN\": \"Modificador al premio\",\n\t\t\"GH_BONUS_WIN\": \"Premio del bono\",\n\t\t\"GH_INSTANT_WIN\": \"Premio instantáneo\",\n\t\t\"GH_NO_HISTORY\": \"Sin historial disponible\",\n\t\t\"GH_GAMBLE_WINS\": \"Premios de apuesta\",\n\t\t\"GH_NO_WINS\": \"Ningún premio\",\n\t\t\"GH_ROUND_CORRECTION\": \"Corrección de redondeo\",\n\t\t\"GH_LIMITED_WIN\": \"Premio (límite máx)\",\n\t\t\"WIN_EXCHANGE\": \"Precio de giros gratis\",\n\t\t\"HALF_COLLECT\": \"Mitad del premio acumulado\",\n\t\t\"FULL_COLLECT\": \"Todo el premio acumulado\",\n\n\t\t\"GH_TABLE_ID\": \"ID de la mesa\",\n\t\t\"GH_PLAYER\": \"Jugador\",\n\t\t\"GH_BANKER\": \"Banka\",\n\t\t\"GH_TIE\": \"Empate\",\n\t\t\"GH_PLAYER_PAIR\": \"Par del Jugador\",\n\t\t\"GH_BANKER_PAIR\": \"Par de la Banca\",\n\t\t\"GH_GAME_WINNER\": \"Ganador\",\n\t\t\"GH_GAME_WINSUM\": \"Suma\",\n\t\t\"GH_GAME_TOTAL\": \"Total\",\n\t\t\"GH_GAME_STAKE\": \"Apuesta\",\n\n\t\t\"GH_SPIN_TITLE\": \"GIRAR\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Giro Gratis\",\n\t\t\"GH_RESPINS_TITLE\": \"REGIROS\",\n\n\t\t\"GH_BALL_POSITION\": \"Posición de la bola:\",\n\t\t\"GH_TRIO\": \"Total de trío\",\n\t\t\"GH_SPLIT\": \"Total dividido\",\n\t\t\"GH_STREET\": \"Total de calle\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Total de esquina\",\n\t\t\"GH_SIX_LINE\": \"Total de la línea de seis\",\n\t\t\"GH_COLUMN\": \"Total de la columna\",\n\t\t\"GH_FIRST_COLUMN\": \"1.ª columna\",\n\t\t\"GH_SECOND_COLUMN\": \"2.ª columna\",\n\t\t\"GH_THIRD_COLUMN\": \"3.ª columna\",\n\t\t\"GH_DOZEN\": \"Total de docena\",\n\t\t\"GH_FIRST_DOZEN\": \"1.º 12\",\n\t\t\"GH_SECOND_DOZEN\": \"2.º 12\",\n\t\t\"GH_THIRD_DOZEN\": \"3.º 12\",\n\t\t\"GH_STRAIGHT\": \"Total de apuesta normal\",\n\t\t\"GH_COLOR\": \"Total color\",\n\t\t\"GH_BLACK\": \"Negro\",\n\t\t\"GH_RED\": \"Rojo\",\n\t\t\"GH_EVEN_ODD\": \"Total par/impar\",\n\t\t\"GH_EVEN\": \"Par\",\n\t\t\"GH_ODD\": \"Impar\",\n\t\t\"GH_SMALL_BIG\": \"Total pequeño/grande\",\n\t\t\"GH_SMALL\": \"Pequeño\",\n\t\t\"GH_BIG\": \"Grande\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Doblar\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"El modo “Écha un vistazo” estaba activo durante esta ronda. Todos los premios y apuestas son en dinero demo.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"En esta ronda estaban activadas las rondas gratis.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Empareja con tus números\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Suma de 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Empareja 3 símbolos\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Empareja 3 cantidades\",\n\t\t\"SCRATCH_FREE_CARD\": \"TARJETA GRATIS\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tfi: {\n\t\t\"TOTAL_COINS_WIN\": \"Kokonaiskolikkovoitot\",\n\t\t\"GH_HISTORY\": \"Historia\",\n\t\t\"GH_GAME_DETAILS\": \"Pelitiedot\",\n\t\t\"GH_GAME_ID\": \"Pelitunnus\",\n\t\t\"GH_ROUND_ID\": \"KIERROKSEN ID\",\n\t\t\"GH_SERVER_TIME_START\": \"Palvelinajan alku\",\n\t\t\"GH_SERVER_TIME_END\": \"Palvelinajan loppu\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Voittotavat\",\n\t\t\"GH_LENGTH\": \"Symbolivoiton pituus\",\n\t\t\"GH_MULTIPLIER\": \"Kerroin\",\n\t\t\"GH_WIN_WAYS\": \"Voittotavat\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Rykelmä\",\n\t\t\"GH_CLUSTER_COUNT\": \"Symbolimäärä\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Scatter-voitto\",\n\n\t\t\"GH_TRANSACTIONS\": \"Rahansiirrot\",\n\t\t\"GH_TOTAL_STAKE\": \"Kokonaispanos\",\n\t\t\"GH_TOTAL_BET\": \"Kokonaispanos\",\n\t\t\"GH_TOTAL_WIN\": \"Kokonaisvoitto\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Ostotoiminnon hinta\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Ostotoiminnon nimi\",\n\t\t\"GH_BEFORE_STAKE\": \"ennen panosta\",\n\t\t\"GH_AFTER_STAKE\": \"panoksen jälkeen\",\n\t\t\"GH_AT_END\": \"lopussa\",\n\t\t\"GH_BALANCE\": \"Pääsaldo\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Bonussaldo\",\n\t\t\"GH_SESSION_BALANCE\": \"Istunnon saldo\",\n\t\t\"GH_SESSION_FREEBETS\": \"Istunnon bonussaldo\",\n\t\t\"GH_BONUS\": \"Bonus\",\n\n\t\t\"GH_WIN_DETAILS\": \"Voittotiedot\",\n\t\t\"GH_SPIN_DETAILS\": \"Kierroksen tiedot\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Lisätiedot\",\n\t\t\"GH_GAME_RESULTS\": \"Pelien tulokset\",\n\t\t\"GH_INITIAL_SPIN\": \"Ensimmäinen kierros\",\n\t\t\"GH_JACKPOT_WIN\": \"Jättipottivoitto\",\n\t\t\"GH_SYMBOL_WINS\": \"Symbolivoitot\",\n\t\t\"GH_LINE\": \"Linja\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Ilmaispelivoitot\",\n\t\t\"GH_FREE_SPIN\": \"Ilmainen pyöritys\",\n\t\t\"GH_RESPIN\": \"Uudelleenpyöräytys\",\n\t\t\"GH_RESPIN_WINS\": \"Voitot uudelleenpyöräytyksistä\",\n\t\t\"GH_NUDGE\": \"Liikahdus\",\n\t\t\"GH_NUDGE_WINS\": \"Liikahdusvoitot\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Kerroinvoitot\",\n\t\t\"GH_MODIFIER_WIN\": \"Muuttajavoitto\",\n\t\t\"GH_BONUS_WIN\": \"Bonusvoitot\",\n\t\t\"GH_INSTANT_WIN\": \"Pikavoitto\",\n\t\t\"GH_NO_HISTORY\": \"Historiatietoja ei ole saatavilla\",\n\t\t\"GH_GAMBLE_WINS\": \"Tuplausvoitot\",\n\t\t\"GH_NO_WINS\": \"Ei voittoja\",\n\t\t\"GH_ROUND_CORRECTION\": \"Pyöristyksen oikaisu\",\n\t\t\"GH_LIMITED_WIN\": \"Voitto (max. raja)\",\n\t\t\"WIN_EXCHANGE\": \"Ilmaispyöräytysten hinta\",\n\t\t\"HALF_COLLECT\": \"Puolet voitosta lunastettu\",\n\t\t\"FULL_COLLECT\": \"Koko voitto lunastettu\",\n\n\t\t\"GH_TABLE_ID\": \"Pöydän tunnus\",\n\t\t\"GH_PLAYER\": \"Pelaaja\",\n\t\t\"GH_BANKER\": \"Pankkiiri\",\n\t\t\"GH_TIE\": \"Tasan\",\n\t\t\"GH_PLAYER_PAIR\": \"Pelaajan pari\",\n\t\t\"GH_BANKER_PAIR\": \"Pankkirin pari\",\n\t\t\"GH_GAME_WINNER\": \"Voittaja\",\n\t\t\"GH_GAME_WINSUM\": \"Summa\",\n\t\t\"GH_GAME_TOTAL\": \"Yhteensä\",\n\t\t\"GH_GAME_STAKE\": \"Panos\",\n\n\t\t\"GH_SPIN_TITLE\": \"PELAA\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Ilmainen pyöritys\",\n\t\t\"GH_RESPINS_TITLE\": \"Uudelleenpyöräytykset\",\n\n\t\t\"GH_BALL_POSITION\": \"Pallon paikka:\",\n\t\t\"GH_TRIO\": \"Triot yhteensä\",\n\t\t\"GH_SPLIT\": \"2 numeroa yhteensä\",\n\t\t\"GH_STREET\": \"3 numeroa yhteensä\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"4 numeroa yhteensä\",\n\t\t\"GH_SIX_LINE\": \"Six Line Total\",\n\t\t\"GH_COLUMN\": \"Sarakkeet yhteensä\",\n\t\t\"GH_FIRST_COLUMN\": \"1. sarake\",\n\t\t\"GH_SECOND_COLUMN\": \"2. sarake\",\n\t\t\"GH_THIRD_COLUMN\": \"3. sarake\",\n\t\t\"GH_DOZEN\": \"Tusinat yhteensä\",\n\t\t\"GH_FIRST_DOZEN\": \"1. tusina\",\n\t\t\"GH_SECOND_DOZEN\": \"2. tusina\",\n\t\t\"GH_THIRD_DOZEN\": \"3. tusina\",\n\t\t\"GH_STRAIGHT\": \"1 numero yhteensä\",\n\t\t\"GH_COLOR\": \"Värilliset yhteensä\",\n\t\t\"GH_BLACK\": \"Musta\",\n\t\t\"GH_RED\": \"Punainen\",\n\t\t\"GH_EVEN_ODD\": \"Parilliset/Parittomat yhteensä\",\n\t\t\"GH_EVEN\": \"Parillinen\",\n\t\t\"GH_ODD\": \"Pariton\",\n\t\t\"GH_SMALL_BIG\": \"Pienet/Isot yhteensä\",\n\t\t\"GH_SMALL\": \"Pieni\",\n\t\t\"GH_BIG\": \"Iso\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Ennakkokokeilu oli käynnissä tämän kierroksen ajan. Kaikki maksetut voitot ja asetetut vedot ovat kokeilurahoja.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"Ilmaiskierrostoiminto oli aktiivinen tällä kierroksella.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Löydä samat luvut\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"7 summa\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Löydä 3 samaa kuviota\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Löydä 3 samaa summaa\",\n\t\t\"SCRATCH_FREE_CARD\": \"ILMAINEN ARPA\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tfr: {\n\t\t\"TOTAL_COINS_WIN\": \"Montant total des gains en pièces\",\n\t\t\"GH_HISTORY\": \"Historique\",\n\t\t\"GH_GAME_DETAILS\": \"Détails du jeu\",\n\t\t\"GH_GAME_ID\": \"Identifiant de jeu\",\n\t\t\"GH_ROUND_ID\": \"Identifiant de partie\",\n\t\t\"GH_SERVER_TIME_START\": \"Début (heure du serveur)\",\n\t\t\"GH_SERVER_TIME_END\": \"Fin (heure du serveur)\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Nb trajectoires\",\n\t\t\"GH_LENGTH\": \"Taille des symboles gagnants\",\n\t\t\"GH_MULTIPLIER\": \"Multiplicateur\",\n\t\t\"GH_WIN_WAYS\": \"Trajectoires\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Regroupement\",\n\t\t\"GH_CLUSTER_COUNT\": \"Nombre de symboles\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Gain de Scatter\",\n\n\t\t\"GH_TRANSACTIONS\": \"Transactions\",\n\t\t\"GH_TOTAL_STAKE\": \"Mise Totale\",\n\t\t\"GH_TOTAL_BET\": \"Mise Totale\",\n\t\t\"GH_TOTAL_WIN\": \"Gain total\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Prix d’achat de la fonction\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Nom de la fonction à acheter\",\n\t\t\"GH_BEFORE_STAKE\": \"avant mise\",\n\t\t\"GH_AFTER_STAKE\": \"après mise\",\n\t\t\"GH_AT_END\": \"final\",\n\t\t\"GH_BALANCE\": \"Solde principal\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Solde bonus\",\n\t\t\"GH_SESSION_BALANCE\": \"Solde de la session\",\n\t\t\"GH_SESSION_FREEBETS\": \"Solde bonus de la session\",\n\t\t\"GH_BONUS\": \"Bonus\",\n\n\t\t\"GH_WIN_DETAILS\": \"Détails des gains\",\n\t\t\"GH_SPIN_DETAILS\": \"Détails des tours\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Informations complémentaires\",\n\t\t\"GH_GAME_RESULTS\": \"Résultats du jeu\",\n\t\t\"GH_INITIAL_SPIN\": \"Tour initial\",\n\t\t\"GH_JACKPOT_WIN\": \"Gain jackpot\",\n\t\t\"GH_SYMBOL_WINS\": \"Gains de symboles\",\n\t\t\"GH_LINE\": \"Ligne\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Gains des tours gratuits\",\n\t\t\"GH_FREE_SPIN\": \"Tour gratuit\",\n\t\t\"GH_RESPIN\": \"Relance\",\n\t\t\"GH_RESPIN_WINS\": \"Gains Relances\",\n\t\t\"GH_NUDGE\": \"Coup de pouce\",\n\t\t\"GH_NUDGE_WINS\": \"Gains coup de pouce\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Gains multiplicateurs\",\n\t\t\"GH_MODIFIER_WIN\": \"Modificateur de gain\",\n\t\t\"GH_BONUS_WIN\": \"Gain bonus\",\n\t\t\"GH_INSTANT_WIN\": \"Gain instantané\",\n\t\t\"GH_NO_HISTORY\": \"Aucun historique disponible\",\n\t\t\"GH_GAMBLE_WINS\": \"Gains Quitte ou double\",\n\t\t\"GH_NO_WINS\": \"Aucun gain\",\n\t\t\"GH_ROUND_CORRECTION\": \"Arrondir\",\n\t\t\"GH_LIMITED_WIN\": \"Gain (limite max)\",\n\t\t\"WIN_EXCHANGE\": \"Coût des tours gratuits\",\n\t\t\"HALF_COLLECT\": \"Moitié du gain collectée\",\n\t\t\"FULL_COLLECT\": \"Gain collecté en entier\",\n\n\t\t\"GH_TABLE_ID\": \"ID de la table\",\n\t\t\"GH_PLAYER\": \"Joueur\",\n\t\t\"GH_BANKER\": \"Banquier\",\n\t\t\"GH_TIE\": \"Égalité\",\n\t\t\"GH_PLAYER_PAIR\": \"Paire du joueur\",\n\t\t\"GH_BANKER_PAIR\": \"Paire du banquier\",\n\t\t\"GH_GAME_WINNER\": \"Gagnant\",\n\t\t\"GH_GAME_WINSUM\": \"Sum\",\n\t\t\"GH_GAME_TOTAL\": \"Somme\",\n\t\t\"GH_GAME_STAKE\": \"Mise\",\n\n\t\t\"GH_SPIN_TITLE\": \"LANCER\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Tour gratuit\",\n\t\t\"GH_RESPINS_TITLE\": \"RELANCES\",\n\n\t\t\"GH_BALL_POSITION\": \"Position de la bille:\",\n\t\t\"GH_TRIO\": \"Total trio\",\n\t\t\"GH_SPLIT\": \"Total cheval\",\n\t\t\"GH_STREET\": \"Total transversale\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Total carré\",\n\t\t\"GH_SIX_LINE\": \"Total sixain\",\n\t\t\"GH_COLUMN\": \"Total de la colonne\",\n\t\t\"GH_FIRST_COLUMN\": \"1ère colonne\",\n\t\t\"GH_SECOND_COLUMN\": \"2ème colonne\",\n\t\t\"GH_THIRD_COLUMN\": \"3ème colonne\",\n\t\t\"GH_DOZEN\": \"Total douzaine\",\n\t\t\"GH_FIRST_DOZEN\": \"1ère douzaine \",\n\t\t\"GH_SECOND_DOZEN\": \"2ème douzaine\",\n\t\t\"GH_THIRD_DOZEN\": \"3ème douzaine\",\n\t\t\"GH_STRAIGHT\": \"Total plein\",\n\t\t\"GH_COLOR\": \"Total couleur\",\n\t\t\"GH_BLACK\": \"Noir\",\n\t\t\"GH_RED\": \"Rouge\",\n\t\t\"GH_EVEN_ODD\": \"Total pair/impair\",\n\t\t\"GH_EVEN\": \"Pair\",\n\t\t\"GH_ODD\": \"Impair\",\n\t\t\"GH_SMALL_BIG\": \"Total petit/grand\",\n\t\t\"GH_SMALL\": \"Petit\",\n\t\t\"GH_BIG\": \"Grand\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Le mode sneak peek était activé pour ce tour. Tous les gains et paris sont de l'argent de démo.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"Des parties gratuites étaient actives lors de cette session de jeu.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Révélez des numéros identiques aux vôtres\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Faites 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Révélez 3 symboles identiques\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Révélez 3 montants identiques\",\n\t\t\"SCRATCH_FREE_CARD\": \"CARTE GRATUITE\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tit: {\n\t\t\"TOTAL_COINS_WIN\": \"Vincita totale in gettoni\",\n\t\t\"GH_HISTORY\": \"Cronologia\",\n\t\t\"GH_GAME_DETAILS\": \"Dettagli di gioco\",\n\t\t\"GH_GAME_ID\": \"ID Gioco\",\n\t\t\"GH_ROUND_ID\": \"ID Partita\",\n\t\t\"GH_SERVER_TIME_START\": \"Orario Server - Inizio\",\n\t\t\"GH_SERVER_TIME_END\": \"Orario Server - Fine\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Modalità di vincita\",\n\t\t\"GH_LENGTH\": \"Numero di Simboli Vincenti\",\n\t\t\"GH_MULTIPLIER\": \"Moltiplicatore\",\n\t\t\"GH_WIN_WAYS\": \"Modalità di vincita\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Cluster\",\n\t\t\"GH_CLUSTER_COUNT\": \"Numero di simboli\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Vincita del simbolo scatter\",\n\n\t\t\"GH_HANDS\": \"Mani\",\n\t\t\"GH_SIDE_BETS\": \"Puntate Collaterali\",\n\n\t\t\"HAND_0\": \"Mano [1]\",\n\t\t\"HAND_0_SPLIT_0\": \"Mano [1] (Divisa)\",\n\t\t\"HAND_1\": \"Mano [2]\",\n\t\t\"HAND_1_SPLIT_0\": \"Mano [2] (Divisa)\",\n\t\t\"HAND_2\": \"Mano [3]\",\n\t\t\"HAND_2_SPLIT_0\": \"Mano [3] (Divisa)\",\n\t\t\"INSURANCE_HAND_0\": \"Mano [1] (Assicurazione)\",\n\t\t\"INSURANCE_HAND_1\": \"Mano [2] (Assicurazione)\",\n\t\t\"INSURANCE_HAND_2\": \"Mano [3] (Assicurazione)\",\n\t\t\"DEALER\": \"CROUPIER\",\n\n\t\t\"STAKE\": \"Puntata\",\n\t\t\"INSURANCE\": 'Assicurazione',\n\n\t\t\"GH_TRANSACTIONS\": \"Transazioni\",\n\t\t\"GH_TOTAL_STAKE\": \"Puntata Totale\",\n\t\t\"GH_TOTAL_BET\": \"Puntata Totale\",\n\t\t\"GH_TOTAL_WIN\": \"Vincita Totale\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Prezzo di acquisto della funzione\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Nome della funzione da acquistare\",\n\t\t\"GH_BEFORE_STAKE\": \"prima della puntata\",\n\t\t\"GH_AFTER_STAKE\": \"dopo la puntata\",\n\t\t\"GH_AT_END\": \"saldo finale\",\n\t\t\"GH_BALANCE\": \"Saldo principale\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Saldo bonus\",\n\t\t\"GH_SESSION_BALANCE\": \"Saldo della sessione\",\n\t\t\"GH_SESSION_FREEBETS\": \"Saldo bonus della sessione\",\n\t\t\"GH_BONUS\": \"Bonus\",\n\n\t\t\"GH_WIN_DETAILS\": \"Dettagli della vincita\",\n\t\t\"GH_SPIN_DETAILS\": \"Dati del giro\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Ulteriori dettagli\",\n\t\t\"GH_GAME_RESULTS\": \"Risultati del Gioco\",\n\t\t\"GH_INITIAL_SPIN\": \"Giro iniziale\",\n\t\t\"GH_JACKPOT_WIN\": \"Vincita Jackpot\",\n\t\t\"GH_SYMBOL_WINS\": \"Vincite da Simbolo\",\n\t\t\"GH_LINE\": \"Linea\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Vincite dei Giri Gratis\",\n\t\t\"GH_FREE_SPIN\": \"Giro Gratis\",\n\t\t\"GH_RESPIN\": \"Respin\",\n\t\t\"GH_RESPIN_WINS\": \"Vincite del Respin\",\n\t\t\"GH_NUDGE\": \"Spostamento\",\n\t\t\"GH_NUDGE_WINS\": \"Vincite da spostamento\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Vincite con moltiplicatore\",\n\t\t\"GH_MODIFIER_WIN\": \"Vincita Modificatore\",\n\t\t\"GH_BONUS_WIN\": \"Vincite Bonus\",\n\t\t\"GH_INSTANT_WIN\": \"Vincite Istantanee\",\n\t\t\"GH_NO_HISTORY\": \"Cronologia non disponibile\",\n\t\t\"GH_GAMBLE_WINS\": \"Vincite da Scommessa\",\n\t\t\"GH_NO_WINS\": \"Nessuna vincita\",\n\t\t\"GH_ROUND_CORRECTION\": \"Arrotondamento\",\n\t\t\"GH_LIMITED_WIN\": \"Vincita (limite max)\",\n\t\t\"WIN_EXCHANGE\": \"Prezzo dei giri gratis\",\n\t\t\"HALF_COLLECT\": \"Metà vincita riscossa\",\n\t\t\"FULL_COLLECT\": \"Vincita totale riscossa\",\n\n\t\t\"GH_TABLE_ID\": \"ID Tavolo\",\n\t\t\"GH_PLAYER\": \"Giocatore\",\n\t\t\"GH_BANKER\": \"Banco\",\n\t\t\"GH_TIE\": \"Pareggio\",\n\t\t\"GH_PLAYER_PAIR\": \"Coppia del Giocatore\",\n\t\t\"GH_BANKER_PAIR\": \"Coppia del Banco\",\n\t\t\"GH_GAME_WINNER\": \"Vincitore\",\n\t\t\"GH_GAME_WINSUM\": \"Somma\",\n\t\t\"GH_GAME_TOTAL\": \"Totale\",\n\t\t\"GH_GAME_STAKE\": \"Puntata\",\n\n\t\t\"GH_SPIN_TITLE\": \"GIRA\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Giro Gratis\",\n\t\t\"GH_RESPINS_TITLE\": \"RESPIN\",\n\n\t\t\"GH_BALL_POSITION\": \"Posizione Pallina:\",\n\t\t\"GH_TRIO\": \"Trio\",\n\t\t\"GH_SPLIT\": \"A Cavallo\",\n\t\t\"GH_STREET\": \"Terzina\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Carré\",\n\t\t\"GH_SIX_LINE\": \"Sestina\",\n\t\t\"GH_COLUMN\": \"Colonna\",\n\t\t\"GH_FIRST_COLUMN\": \"1ª Colonna\",\n\t\t\"GH_SECOND_COLUMN\": \"2ª Colonna\",\n\t\t\"GH_THIRD_COLUMN\": \"3ª Colonna\",\n\t\t\"GH_DOZEN\": \"Dozzina\",\n\t\t\"GH_FIRST_DOZEN\": \"1ª Dozzina\",\n\t\t\"GH_SECOND_DOZEN\": \"2ª Dozzina\",\n\t\t\"GH_THIRD_DOZEN\": \"3ª Dozzina\",\n\t\t\"GH_STRAIGHT\": \"En plein\",\n\t\t\"GH_COLOR\": \"Colore\",\n\t\t\"GH_BLACK\": \"Nero\",\n\t\t\"GH_RED\": \"Rosso\",\n\t\t\"GH_EVEN_ODD\": \"Pari/Dispari\",\n\t\t\"GH_EVEN\": \"Pari\",\n\t\t\"GH_ODD\": \"Dispari\",\n\t\t\"GH_SMALL_BIG\": \"Basso/Alto\",\n\t\t\"GH_SMALL\": \"Basso\",\n\t\t\"GH_BIG\": \"Alto\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Raddoppia\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offerta Accettata\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"La modalità anteprima era attiva per questo turno. Tutte le puntate e le vincite sono in denaro virtuale.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"Durante questa partita erano attivi i round di gioco gratuiti.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Abbina i tuoi numeri\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"La somma di 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Abbina 3 simboli\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Abbina 3 importi\",\n\t\t\"SCRATCH_FREE_CARD\": \"CARTOLINA GRATIS\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tka: {\n\t\t\"TOTAL_COINS_WIN\": \"Total coins win\",\n\t\t\"GH_HISTORY\": \"ისტორია\",\n\t\t\"GH_GAME_DETAILS\": \"თამაშის დეტალები\",\n\t\t\"GH_GAME_ID\": \"თამაშის ID\",\n\t\t\"GH_ROUND_ID\": \"რაუნდის ID\",\n\t\t\"GH_SERVER_TIME_START\": \"სერვერის დროის დასაწყისი\",\n\t\t\"GH_SERVER_TIME_END\": \"სერვერის დროის დასასრული\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"მოგების გზები\",\n\t\t\"GH_LENGTH\": \"მოგების სიმბოლოს სიგრძე\",\n\t\t\"GH_MULTIPLIER\": \"კოეფიციენტი\",\n\t\t\"GH_WIN_WAYS\": \"მოგების გზები\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"დაგროვების ჯგუფი\",\n\t\t\"GH_CLUSTER_COUNT\": \"სიმბოლოს რაოდენობა\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"სკატერის მოგება\",\n\n\t\t\"GH_TRANSACTIONS\": \"ტრანზაქციები\",\n\t\t\"GH_TOTAL_STAKE\": \"სრული ფსონი\",\n\t\t\"GH_TOTAL_BET\": \"სრულ.ფს.\",\n\t\t\"GH_TOTAL_WIN\": \"სრული მოგება\",\n\t\t\"GH_FEATURE_BUY_COST\": \"ფუნქციის ყიდვის ფასი\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"ფუნქციის ყიდვის სახელი\",\n\t\t\"GH_BEFORE_STAKE\": \"ფსონამდე\",\n\t\t\"GH_AFTER_STAKE\": \"ფსონის შემდეგ\",\n\t\t\"GH_AT_END\": \"დასასრულს\",\n\t\t\"GH_BALANCE\": \"მთავარი ბალანსი\",\n\t\t\"GH_FREEBETS_BALANCE\": \"ბონუსის ბალანსი\",\n\t\t\"GH_SESSION_BALANCE\": \"სესიის ბალანსი\",\n\t\t\"GH_SESSION_FREEBETS\": \"სესიის ბონუსის ბალანსი\",\n\t\t\"GH_BONUS\": \"ბონუსი\",\n\n\t\t\"GH_WIN_DETAILS\": \"მოგების დეტალები\",\n\t\t\"GH_SPIN_DETAILS\": \"დატრიალების დეტალები\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"დამატებითი დეტალები\",\n\t\t\"GH_GAME_RESULTS\": \"Game Results\",\n\t\t\"GH_INITIAL_SPIN\": \"საწყისი დატრიალება\",\n\t\t\"GH_JACKPOT_WIN\": \"ჯეკპოტის მოგება\",\n\t\t\"GH_SYMBOL_WINS\": \"სიმბოლოს მოგებები\",\n\t\t\"GH_LINE\": \"ხაზი\",\n\t\t\"GH_FREE_SPIN_WINS\": \"უფასო დატრიალებების მოგებები\",\n\t\t\"GH_FREE_SPIN\": \"უფასო დატრიალება\",\n\t\t\"GH_RESPIN\": \"ხელახლა დატრიალება\",\n\t\t\"GH_RESPIN_WINS\": \"ხელახლა დატრიალების მოგებები\",\n\t\t\"GH_NUDGE\": \"Nudge\",\n\t\t\"GH_NUDGE_WINS\": \"Nudge Wins\",\n\t\t\"GH_MULTIPLIER_WINS\": \"მამრავლით მიღებული მოგებები\",\n\t\t\"GH_MODIFIER_WIN\": \"მოდიფიკატორი მოგება\",\n\t\t\"GH_BONUS_WIN\": \"ბონუსური მოგება\",\n\t\t\"GH_INSTANT_WIN\": \"მომენტალური მოგება\",\n\t\t\"GH_NO_HISTORY\": \"ისტორია მიუწვდომელია\",\n\t\t\"GH_GAMBLE_WINS\": \"აზარტული თამაშების მოგებები\",\n\t\t\"GH_NO_WINS\": \"მოგებები არ არის\",\n\t\t\"GH_ROUND_CORRECTION\": \"დამრგვალების კორექტირება\",\n\t\t\"GH_LIMITED_WIN\": \"მოგება (მაქსიმალური ლიმიტი)\",\n\t\t\"WIN_EXCHANGE\": \"უფასო სპინების ფასი\",\n\t\t\"HALF_COLLECT\": \"შეგროვებულია მოგების ნახევარი\",\n\t\t\"FULL_COLLECT\": \"შეგროვებულია მთლიანი მოგება\",\n\n\t\t\"GH_TABLE_ID\": \"მაგიდის იდენტიფიკატორი\",\n\t\t\"GH_PLAYER\": \"მოთამაშე\",\n\t\t\"GH_BANKER\": \"ბანკირი\",\n\t\t\"GH_TIE\": \"კავშირი\",\n\t\t\"GH_PLAYER_PAIR\": \"მოთამაშის წყვილი\",\n\t\t\"GH_BANKER_PAIR\": \"ბანკირის წყვილი\",\n\t\t\"GH_GAME_WINNER\": \"გამარჯვებული\",\n\t\t\"GH_GAME_WINSUM\": \"ჯამი\",\n\t\t\"GH_GAME_TOTAL\": \"სულ\",\n\t\t\"GH_GAME_STAKE\": \"ფსონი\",\n\n\t\t\"GH_SPIN_TITLE\": \"SPIN\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"უფასო დატრიალება\",\n\t\t\"GH_RESPINS_TITLE\": \"ხელახლა დატრიალებები\",\n\n\t\t\"GH_BALL_POSITION\": \"ბურთის მდებარეობა:\",\n\t\t\"GH_TRIO\": \"„Trio“ სულ\",\n\t\t\"GH_SPLIT\": \"გაყოფილია სულ\",\n\t\t\"GH_STREET\": \"სულ „სტრიტი“\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"კუთხის სულ\",\n\t\t\"GH_SIX_LINE\": \"სულ ექვს ხაზზე\",\n\t\t\"GH_COLUMN\": \"სვეტის სრული ოდენობა\",\n\t\t\"GH_FIRST_COLUMN\": \"1-ლი სვეტი\",\n\t\t\"GH_SECOND_COLUMN\": \"მე-2 სვეტი\",\n\t\t\"GH_THIRD_COLUMN\": \"მე-3 სვეტი\",\n\t\t\"GH_DOZEN\": \"თორმეტი სულ\",\n\t\t\"GH_FIRST_DOZEN\": \"1-ლი 12\",\n\t\t\"GH_SECOND_DOZEN\": \"მე-2 12\",\n\t\t\"GH_THIRD_DOZEN\": \"მე-3 12\",\n\t\t\"GH_STRAIGHT\": \"სთრეით სულ\",\n\t\t\"GH_COLOR\": \"ფერადი სულ\",\n\t\t\"GH_BLACK\": \"შავი\",\n\t\t\"GH_RED\": \"წითელი\",\n\t\t\"GH_EVEN_ODD\": \"ლუწი/კენტი სულ\",\n\t\t\"GH_EVEN\": \"ლუწი\",\n\t\t\"GH_ODD\": \"კენტი\",\n\t\t\"GH_SMALL_BIG\": \"პატარა/დიდი სულ\",\n\t\t\"GH_SMALL\": \"პატარა\",\n\t\t\"GH_BIG\": \"დიდი\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Sneak peek აქტიური იყო ამ რაუნდისთვის. ყველა მოგება და ფსონი დემო ფულს წარმოადგენს.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"უფასო რაუნდები აქტიური იყო ამ რაუნდისთვის.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Match your numbers\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Reveal sum of 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Match 3 symbols\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Match 3 amounts\",\n\t\t\"SCRATCH_FREE_CARD\": \"Free ticket\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tnl: {\n\t\t\"TOTAL_COINS_WIN\": \"Totaal aantal gewonnen munten\",\n\t\t\"GH_HISTORY\": \"Geschiedenis\",\n\t\t\"GH_GAME_DETAILS\": \"Speldetails\",\n\t\t\"GH_GAME_ID\": \"Spel-id\",\n\t\t\"GH_ROUND_ID\": \"Ronde-id\",\n\t\t\"GH_SERVER_TIME_START\": \"Start servertijd\",\n\t\t\"GH_SERVER_TIME_END\": \"Einde servertijd\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Winstpaden\",\n\t\t\"GH_LENGTH\": \"Lengte symboolwinst\",\n\t\t\"GH_MULTIPLIER\": \"Vermenigvuldiger\",\n\t\t\"GH_WIN_WAYS\": \"Winstpaden\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Cluster\",\n\t\t\"GH_CLUSTER_COUNT\": \"Symboolteller\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Scatter-winst\",\n\n\t\t\"GH_TRANSACTIONS\": \"Transacties\",\n\t\t\"GH_TOTAL_STAKE\": \"Totale Inzet\",\n\t\t\"GH_TOTAL_BET\": \"Totale inzet\",\n\t\t\"GH_TOTAL_WIN\": \"Totale prijs\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Kosten van koopfunctie\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Naam van koopfunctie\",\n\t\t\"GH_BEFORE_STAKE\": \"voor inzet\",\n\t\t\"GH_AFTER_STAKE\": \"na inzet\",\n\t\t\"GH_AT_END\": \"op einde\",\n\t\t\"GH_BALANCE\": \"Hoofdsaldo\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Bonussaldo\",\n\t\t\"GH_SESSION_BALANCE\": \"Sessiesaldo\",\n\t\t\"GH_SESSION_FREEBETS\": \"Bonussaldo sessie\",\n\t\t\"GH_BONUS\": \"Bonus\",\n\n\t\t\"GH_WIN_DETAILS\": \"Prijsdetails\",\n\t\t\"GH_SPIN_DETAILS\": \"Rondedetails\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Aanvullende informatie\",\n\t\t\"GH_GAME_RESULTS\": \"Spelresultaten\",\n\t\t\"GH_INITIAL_SPIN\": \"Eerste ronde\",\n\t\t\"GH_JACKPOT_WIN\": \"Jackpotprijs\",\n\t\t\"GH_SYMBOL_WINS\": \"Symboolwinst\",\n\t\t\"GH_LINE\": \"Lijn\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Winst uit gratis rondes\",\n\t\t\"GH_FREE_SPIN\": \"Gratis ronde\",\n\t\t\"GH_RESPIN\": \"Respin\",\n\t\t\"GH_RESPIN_WINS\": \"Winst respins\",\n\t\t\"GH_NUDGE\": \"Zetje\",\n\t\t\"GH_NUDGE_WINS\": \"Winst na een zetje\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Vermenigvuldigerprijzen\",\n\t\t\"GH_MODIFIER_WIN\": \"Modifier-prijs\",\n\t\t\"GH_BONUS_WIN\": \"Bonusprijs\",\n\t\t\"GH_INSTANT_WIN\": \"Directe prijs\",\n\t\t\"GH_NO_HISTORY\": \"Geen geschiedenis beschikbaar\",\n\t\t\"GH_GAMBLE_WINS\": \"Gokwinst\",\n\t\t\"GH_NO_WINS\": \"Geen prijzen\",\n\t\t\"GH_ROUND_CORRECTION\": \"Afrondingscorrectie\",\n\t\t\"GH_LIMITED_WIN\": \"Winst (max. limiet)\",\n\t\t\"WIN_EXCHANGE\": \"Prijs gratis spins\",\n\t\t\"HALF_COLLECT\": \"Helft van winst geïnd\",\n\t\t\"FULL_COLLECT\": \"Volledige winst geïnd\",\n\n\t\t\"GH_TABLE_ID\": \"Tafel-ID\",\n\t\t\"GH_PLAYER\": \"Speler\",\n\t\t\"GH_BANKER\": \"Bankier\",\n\t\t\"GH_TIE\": \"Gelijkspel\",\n\t\t\"GH_PLAYER_PAIR\": \"Speler Pair\",\n\t\t\"GH_BANKER_PAIR\": \"Bankier Pair\",\n\t\t\"GH_GAME_WINNER\": \"Winnaar\",\n\t\t\"GH_GAME_WINSUM\": \"Som\",\n\t\t\"GH_GAME_TOTAL\": \"Totaal\",\n\t\t\"GH_GAME_STAKE\": \"Inzet\",\n\n\t\t\"GH_SPIN_TITLE\": \"DRAAIEN\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Gratis ronde\",\n\t\t\"GH_RESPINS_TITLE\": \"RESPINS\",\n\n\t\t\"GH_BALL_POSITION\": \"Positie van de bal:\",\n\t\t\"GH_TRIO\": \"Totaal trio\",\n\t\t\"GH_SPLIT\": \"Totaal split\",\n\t\t\"GH_STREET\": \"Totaal straat\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Totaal hoek\",\n\t\t\"GH_SIX_LINE\": \"Totaal zes lijnen\",\n\t\t\"GH_COLUMN\": \"Totaal kolom\",\n\t\t\"GH_FIRST_COLUMN\": \"1e kolom\",\n\t\t\"GH_SECOND_COLUMN\": \"2e kolom\",\n\t\t\"GH_THIRD_COLUMN\": \"3e kolom\",\n\t\t\"GH_DOZEN\": \"Totaal dozijn\",\n\t\t\"GH_FIRST_DOZEN\": \"1e 12\",\n\t\t\"GH_SECOND_DOZEN\": \"2e 12\",\n\t\t\"GH_THIRD_DOZEN\": \"3e 12\",\n\t\t\"GH_STRAIGHT\": \"Totaal enkel nummer\",\n\t\t\"GH_COLOR\": \"Totaal kleur\",\n\t\t\"GH_BLACK\": \"Zwart\",\n\t\t\"GH_RED\": \"Rood\",\n\t\t\"GH_EVEN_ODD\": \"Totaal even/oneven\",\n\t\t\"GH_EVEN\": \"Even\",\n\t\t\"GH_ODD\": \"Oneven\",\n\t\t\"GH_SMALL_BIG\": \"Totaal laag/hoog\",\n\t\t\"GH_SMALL\": \"Laag\",\n\t\t\"GH_BIG\": \"Hoog\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Voor deze ronde was het voorproefje actief. Alle winsten en inzetten zijn in demogeld.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"Gratis rondes waren actief gedurende deze ronde.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Match met je nummers\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"7 in totaal\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Match 3 symbolen\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Match 3 bedragen\",\n\t\t\"SCRATCH_FREE_CARD\": \"GRATIS KAART\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tno: {\n\t\t\"TOTAL_COINS_WIN\": \"Totale myntgevinster\",\n\t\t\"GH_HISTORY\": \"Historikk\",\n\t\t\"GH_GAME_DETAILS\": \"Spillopplysninger\",\n\t\t\"GH_GAME_ID\": \"Spill-ID\",\n\t\t\"GH_ROUND_ID\": \"Runde-ID\",\n\t\t\"GH_SERVER_TIME_START\": \"Servertid – start\",\n\t\t\"GH_SERVER_TIME_END\": \"Servertid – slutt\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Vinnerveier\",\n\t\t\"GH_LENGTH\": \"Lengde på symbolgevinst\",\n\t\t\"GH_MULTIPLIER\": \"Multiplikator\",\n\t\t\"GH_WIN_WAYS\": \"Vinnerveier\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Klynge\",\n\t\t\"GH_CLUSTER_COUNT\": \"Symbolteller\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Utdelergevinst\",\n\n\t\t\"GH_TRANSACTIONS\": \"Transaksjoner\",\n\t\t\"GH_TOTAL_STAKE\": \"Totalinnsats\",\n\t\t\"GH_TOTAL_BET\": \"Totalinnsats\",\n\t\t\"GH_TOTAL_WIN\": \"Total gevinst\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Funksjonskjøpskostnad\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Funksjonskjøpsnavn\",\n\t\t\"GH_BEFORE_STAKE\": \"før innsats\",\n\t\t\"GH_AFTER_STAKE\": \"etter innsats\",\n\t\t\"GH_AT_END\": \"etter runde\",\n\t\t\"GH_BALANCE\": \"Hovedsaldo\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Bonussaldo\",\n\t\t\"GH_SESSION_BALANCE\": \"Øktsaldo\",\n\t\t\"GH_SESSION_FREEBETS\": \"Øktbonussaldo\",\n\t\t\"GH_BONUS\": \"Bonus\",\n\n\t\t\"GH_WIN_DETAILS\": \"Gevinstopplysninger\",\n\t\t\"GH_SPIN_DETAILS\": \"Spinn-detaljer\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Ytterligere detaljer\",\n\t\t\"GH_GAME_RESULTS\": \"Spillresultater\",\n\t\t\"GH_INITIAL_SPIN\": \"Innledende spinn\",\n\t\t\"GH_JACKPOT_WIN\": \"Jackpotgevinst\",\n\t\t\"GH_SYMBOL_WINS\": \"Symbolgevinster\",\n\t\t\"GH_LINE\": \"Linje\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Gratisspinn-gevinster\",\n\t\t\"GH_FREE_SPIN\": \"Gratisspinn\",\n\t\t\"GH_RESPIN\": \"Respinn\",\n\t\t\"GH_RESPIN_WINS\": \"Respinn-gevinster\",\n\t\t\"GH_NUDGE\": \"Dytt\",\n\t\t\"GH_NUDGE_WINS\": \"Dyttgevinster\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Multiplikatorgevinster\",\n\t\t\"GH_MODIFIER_WIN\": \"Justert gevinst\",\n\t\t\"GH_BONUS_WIN\": \"Bonusgevinst\",\n\t\t\"GH_INSTANT_WIN\": \"Umiddelbar gevinst\",\n\t\t\"GH_NO_HISTORY\": \"Ingen historikk tilgjengelig\",\n\t\t\"GH_GAMBLE_WINS\": \"Veddegevinster\",\n\t\t\"GH_NO_WINS\": \"Ingen gevinster\",\n\t\t\"GH_ROUND_CORRECTION\": \"Avrundingskorrigering\",\n\t\t\"GH_LIMITED_WIN\": \"Gevinst (maksgrense)\",\n\t\t\"WIN_EXCHANGE\": \"Gratisspinn pris\",\n\t\t\"HALF_COLLECT\": \"Halvgevinst samlet\",\n\t\t\"FULL_COLLECT\": \"Fullgevinst samlet\",\n\n\t\t\"GH_TABLE_ID\": \"Bord-ID\",\n\t\t\"GH_PLAYER\": \"Spiller\",\n\t\t\"GH_BANKER\": \"Banken\",\n\t\t\"GH_TIE\": \"Uavgjort\",\n\t\t\"GH_PLAYER_PAIR\": \"Spiller par\",\n\t\t\"GH_BANKER_PAIR\": \"Banken par\",\n\t\t\"GH_GAME_WINNER\": \"Vinner\",\n\t\t\"GH_GAME_WINSUM\": \"Sum\",\n\t\t\"GH_GAME_TOTAL\": \"Totalt\",\n\t\t\"GH_GAME_STAKE\": \"Innsats\",\n\n\t\t\"GH_SPIN_TITLE\": \"SPINN\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Gratisspinn\",\n\t\t\"GH_RESPINS_TITLE\": \"RESPINN\",\n\n\t\t\"GH_BALL_POSITION\": \"Ballposisjon:\",\n\t\t\"GH_TRIO\": \"Trio totalt\",\n\t\t\"GH_SPLIT\": \"Splitt totalt\",\n\t\t\"GH_STREET\": \"Street totalt\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Hjørne totalt\",\n\t\t\"GH_SIX_LINE\": \"Linje av seks totalt\",\n\t\t\"GH_COLUMN\": \"Kolonne totalt\",\n\t\t\"GH_FIRST_COLUMN\": \"1. kolonne\",\n\t\t\"GH_SECOND_COLUMN\": \"2. kolonne\",\n\t\t\"GH_THIRD_COLUMN\": \"3. kolonne\",\n\t\t\"GH_DOZEN\": \"Dusin totalt\",\n\t\t\"GH_FIRST_DOZEN\": \"Første dusin\",\n\t\t\"GH_SECOND_DOZEN\": \"2\",\n\t\t\"GH_THIRD_DOZEN\": \"3\",\n\t\t\"GH_STRAIGHT\": \"Direkte totalt\",\n\t\t\"GH_COLOR\": \"Farge totalt\",\n\t\t\"GH_BLACK\": \"Svart\",\n\t\t\"GH_RED\": \"Rød\",\n\t\t\"GH_EVEN_ODD\": \"Par/Odde totalt\",\n\t\t\"GH_EVEN\": \"Par\",\n\t\t\"GH_ODD\": \"Odde\",\n\t\t\"GH_SMALL_BIG\": \"Liten/Stor totalt\",\n\t\t\"GH_SMALL\": \"Liten\",\n\t\t\"GH_BIG\": \"Stor\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Sniktitt var aktiv denne runden. Alle gevinster og spill er demopenger.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"Gratisrunder var aktive for denne runden.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Match med tallene dine\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Sum av 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Match 3 symboler\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Match 3 beløp\",\n\t\t\"SCRATCH_FREE_CARD\": \"GRATISLODD\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tpl: {\n\t\t\"TOTAL_COINS_WIN\": \"Całkowita liczba wygranych monet\",\n\t\t\"GH_HISTORY\": \"Historia\",\n\t\t\"GH_GAME_DETAILS\": \"Szczegóły gry\",\n\t\t\"GH_GAME_ID\": \"ID gry\",\n\t\t\"GH_ROUND_ID\": \"ID rundy\",\n\t\t\"GH_SERVER_TIME_START\": \"Czas rozpoczęcia serwera\",\n\t\t\"GH_SERVER_TIME_END\": \"Czas zakończenia serwera\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Wariacje wygranych\",\n\t\t\"GH_LENGTH\": \"Długość wygranej symbolu\",\n\t\t\"GH_MULTIPLIER\": \"Mnożnik\",\n\t\t\"GH_WIN_WAYS\": \"Wariacje wygranych\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Klaster\",\n\t\t\"GH_CLUSTER_COUNT\": \"Liczba Symboli\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Wygrana Scatter\",\n\n\t\t\"GH_TRANSACTIONS\": \"Transakcje\",\n\t\t\"GH_TOTAL_STAKE\": \"Łączna Stawka\",\n\t\t\"GH_TOTAL_BET\": \"Łączna Stawka\",\n\t\t\"GH_TOTAL_WIN\": \"Łączna wygrana\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Koszt Zakupu Funkcji\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Nazwa Zakupionej Funkcji\",\n\t\t\"GH_BEFORE_STAKE\": \"przed postawieniem stawki\",\n\t\t\"GH_AFTER_STAKE\": \"po postawieniu stawki\",\n\t\t\"GH_AT_END\": \"końcowe\",\n\t\t\"GH_BALANCE\": \"Saldo główne\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Saldo bonusowe\",\n\t\t\"GH_SESSION_BALANCE\": \"Saldo sesji\",\n\t\t\"GH_SESSION_FREEBETS\": \"Saldo bonusowe sesji\",\n\t\t\"GH_BONUS\": \"Bonus\",\n\n\t\t\"GH_WIN_DETAILS\": \"Szczegóły wygranej\",\n\t\t\"GH_SPIN_DETAILS\": \"Szczegóły obrotu\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Informacje dodatkowe\",\n\t\t\"GH_GAME_RESULTS\": \"Wyniki gry\",\n\t\t\"GH_INITIAL_SPIN\": \"Obrót początkowy\",\n\t\t\"GH_JACKPOT_WIN\": \"Wygrana jackpota\",\n\t\t\"GH_SYMBOL_WINS\": \"Wygrane Symbolów\",\n\t\t\"GH_LINE\": \"Linia\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Wygrane z darmowych obrotów\",\n\t\t\"GH_FREE_SPIN\": \"Darmowy obrót\",\n\t\t\"GH_RESPIN\": \"Obrót ponowny\",\n\t\t\"GH_RESPIN_WINS\": \"Wygrane obrotu ponownego\",\n\t\t\"GH_NUDGE\": \"Przesunięcie\",\n\t\t\"GH_NUDGE_WINS\": \"Wygrane z przesunięcia\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Wygrane mnożnika\",\n\t\t\"GH_MODIFIER_WIN\": \"Modyfikator wygranej\",\n\t\t\"GH_BONUS_WIN\": \"Wygrana bonusowa\",\n\t\t\"GH_INSTANT_WIN\": \"Błyskawiczna wygrana\",\n\t\t\"GH_NO_HISTORY\": \"Historia jest niedostępna\",\n\t\t\"GH_GAMBLE_WINS\": \"Wygrane z funkcji ryzyko\",\n\t\t\"GH_NO_WINS\": \"Brak wygranych\",\n\t\t\"GH_ROUND_CORRECTION\": \"Korekta zaokrąglająca\",\n\t\t\"GH_LIMITED_WIN\": \"Wygrana (maks. Limit)\",\n\t\t\"WIN_EXCHANGE\": \"Cena za Darmowe Obroty\",\n\t\t\"HALF_COLLECT\": \"Odebrano połowę wygranej\",\n\t\t\"FULL_COLLECT\": \"Odebrano całą wygraną\",\n\n\t\t\"GH_TABLE_ID\": \"ID stołu\",\n\t\t\"GH_PLAYER\": \"Gracz\",\n\t\t\"GH_BANKER\": \"Bankier\",\n\t\t\"GH_TIE\": \"Remis\",\n\t\t\"GH_PLAYER_PAIR\": \"Para gracza\",\n\t\t\"GH_BANKER_PAIR\": \"Para bankiera\",\n\t\t\"GH_GAME_WINNER\": \"Zwycięzca\",\n\t\t\"GH_GAME_WINSUM\": \"Suma\",\n\t\t\"GH_GAME_TOTAL\": \"Łącznie\",\n\t\t\"GH_GAME_STAKE\": \"Stawka\",\n\n\t\t\"GH_SPIN_TITLE\": \"OBRÓT\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Darmowy obrót\",\n\t\t\"GH_RESPINS_TITLE\": \"Obroty ponowne\",\n\n\t\t\"GH_BALL_POSITION\": \"Pozycja kulki:\",\n\t\t\"GH_TRIO\": \"Trio łącznie\",\n\t\t\"GH_SPLIT\": \"Split łącznie\",\n\t\t\"GH_STREET\": \"Street łącznie\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Narożnik łącznie\",\n\t\t\"GH_SIX_LINE\": \"Sześć linii łącznie\",\n\t\t\"GH_COLUMN\": \"Suma kolumny\",\n\t\t\"GH_FIRST_COLUMN\": \"1. kolumna\",\n\t\t\"GH_SECOND_COLUMN\": \"2. kolumna\",\n\t\t\"GH_THIRD_COLUMN\": \"3. kolumna\",\n\t\t\"GH_DOZEN\": \"Tuzin łącznie\",\n\t\t\"GH_FIRST_DOZEN\": \"1. 12\",\n\t\t\"GH_SECOND_DOZEN\": \"2. 12\",\n\t\t\"GH_THIRD_DOZEN\": \"3. 12\",\n\t\t\"GH_STRAIGHT\": \"Zakład prosty łącznie\",\n\t\t\"GH_COLOR\": \"Kolor łącznie\",\n\t\t\"GH_BLACK\": \"Czarne\",\n\t\t\"GH_RED\": \"Czerwone\",\n\t\t\"GH_EVEN_ODD\": \"Parzyste/Nieparzyste łącznie\",\n\t\t\"GH_EVEN\": \"Parzyste\",\n\t\t\"GH_ODD\": \"Nieparzyste\",\n\t\t\"GH_SMALL_BIG\": \"Niskie/Wysokie łącznie\",\n\t\t\"GH_SMALL\": \"Niskie\",\n\t\t\"GH_BIG\": \"Wysokie\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Ta runda została rozegrana w trybie demo. Wszystkie zakłady oraz wygrane mają wartość wirtualną.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"W tej rundzie aktywna była funkcja darmowych rund.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Dopasuj swoje numery\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Suma równa 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Dopasuj 3 symbole\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Dopasuj 3 kwoty\",\n\t\t\"SCRATCH_FREE_CARD\": \"DARMOWA KARTA\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\t'pt-BR': {\n\t\t\"TOTAL_COINS_WIN\": \"Total de moedas ganhas\",\n\t\t\"GH_HISTORY\": \"Histórico\",\n\t\t\"GH_GAME_DETAILS\": \"Detalhes de Jogo\",\n\t\t\"GH_GAME_ID\": \"ID de jogo\",\n\t\t\"GH_ROUND_ID\": \"Id de Ronda\",\n\t\t\"GH_SERVER_TIME_START\": \"Hora de Início de Servidor\",\n\t\t\"GH_SERVER_TIME_END\": \"Hora de Fim de Servidor\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Formas de ganhar\",\n\t\t\"GH_LENGTH\": \"Comprimento da Combinação Ganhadora\",\n\t\t\"GH_MULTIPLIER\": \"Multiplicador\",\n\t\t\"GH_WIN_WAYS\": \"Formas de ganhar\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Cluster\",\n\t\t\"GH_CLUSTER_COUNT\": \"Quantidade de Símbolos\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Prêmio de Scatter\",\n\n\t\t\"GH_HANDS\": \"Mãos\",\n\t\t\"GH_SIDE_BETS\": \"Apostas Paralelas\",\n\n\t\t\"HAND_0\": \"Mão [1]\",\n\t\t\"HAND_0_SIDE_0\": \"Mão [1] Aposta paralela - 21 Mais 3\",\n\t\t\"HAND_0_SIDE_1\": \"Mão [1] Aposta paralela – Qualquer par\",\n\t\t\"HAND_0_SIDE_2\": \"Mão [1] Aposta paralela - Bustorama\",\n\n\t\t\"HAND_0_SPLIT_0\": \"Mão [1] (Dividida)\",\n\t\t\"HAND_1\": \"Mão [2]\",\n\t\t\"HAND_1_SPLIT_0\": \"Mão [2] (Dividida)\",\n\t\t\"HAND_1_SIDE_0\": \"Mão [2] Aposta paralela - 21 Mais 3\",\n\t\t\"HAND_1_SIDE_1\": \"Mão [2] Aposta paralela – Qualquer par\",\n\t\t\"HAND_1_SIDE_2\": \"Mão [2] Aposta paralela - Bustorama\",\n\n\t\t\"HAND_2\": \"Mão [3]\",\n\t\t\"HAND_2_SPLIT_0\": \"Mão [3] (Dividida)\",\n\t\t\"HAND_2_SIDE_0\": \"Mão [3] Aposta paralela - 21 Mais 3\",\n\t\t\"HAND_2_SIDE_1\": \"Mão [3] Aposta paralela – Qualquer par\",\n\t\t\"HAND_2_SIDE_2\": \"Mão [3] Aposta paralela - Bustorama\",\n\n\t\t\"INSURANCE_HAND_0\": \"Mão [1] (Seguro)\",\n\t\t\"INSURANCE_HAND_1\": \"Mão [2] (Seguro)\",\n\t\t\"INSURANCE_HAND_2\": \"Mão [3] (Seguro)\",\n\t\t\"DEALER\": \"Crupiê\",\n\t\t\"ANTE\": \"Ante\",\n\t\t\"ANTE_BONUS\": \"Bônus da aposta Ante\",\n\t\t\"PAIR_BONUS\": \"Bônus do par\",\n\t\t\"PLAY\": \"Jogar\",\n\t\t\n\t\t\"STAKE\": \"Aposta\",\n\t\t\"INSURANCE\": 'Seguro',\n\n\t\t\"GH_TRANSACTIONS\": \"Transações\",\n\t\t\"GH_TOTAL_STAKE\": \"Aposta Total\",\n\t\t\"GH_TOTAL_BET\": \"Aposta Total\",\n\t\t\"GH_TOTAL_WIN\": \"Prémio Total\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Custo de Recurso de Compra\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Nome de Recurso de Compra\",\n\t\t\"GH_BEFORE_STAKE\": \"antes da aposta\",\n\t\t\"GH_AFTER_STAKE\": \"depois da aposta\",\n\t\t\"GH_AT_END\": \"resultado\",\n\t\t\"GH_BALANCE\": \"Saldo principal\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Saldo de bónus\",\n\t\t\"GH_SESSION_BALANCE\": \"Saldo da sessão\",\n\t\t\"GH_SESSION_FREEBETS\": \"Saldo de bónus da sessão\",\n\t\t\"GH_BONUS\": \"Bónus\",\n\n\t\t\"GH_WIN_DETAILS\": \"Detalhes de Prémio\",\n\t\t\"GH_SPIN_DETAILS\": \"Detalhes da Partida\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Detalhes adicionais\",\n\t\t\"GH_GAME_RESULTS\": \"Resultados do jogo\",\n\t\t\"GH_INITIAL_SPIN\": \"Partida Inicial\",\n\t\t\"GH_JACKPOT_WIN\": \"Prémio de Jackpot\",\n\t\t\"GH_SYMBOL_WINS\": \"Prêmios dos Símbolos\",\n\t\t\"GH_LINE\": \"Linha\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Prémios de Rodadas Grátis\",\n\t\t\"GH_FREE_SPIN\": \"Rodada Grátis\",\n\t\t\"GH_RESPIN\": \"Giro Extra\",\n\t\t\"GH_RESPIN_WINS\": \"Prêmios de Giro Extra\",\n\t\t\"GH_NUDGE\": \"Empurrão\",\n\t\t\"GH_NUDGE_WINS\": \"Prêmios do empurrão\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Prémios de Multiplicador\",\n\t\t\"GH_MODIFIER_WIN\": \"Prémio Modificador\",\n\t\t\"GH_BONUS_WIN\": \"Prémio de Bónus\",\n\t\t\"GH_INSTANT_WIN\": \"Prémio Instantâneo\",\n\t\t\"GH_NO_HISTORY\": \"Sem histórico disponível\",\n\t\t\"GH_GAMBLE_WINS\": \"Prémios de Aposta\",\n\t\t\"GH_NO_WINS\": \"Sem prémios\",\n\t\t\"GH_ROUND_CORRECTION\": \"Correção de arredondamento\",\n\t\t\"GH_LIMITED_WIN\": \"Ganho (limite máx)\",\n\t\t\"WIN_EXCHANGE\": \"Preço dos giros grátis\",\n\t\t\"HALF_COLLECT\": \"Metade do prêmio coletado\",\n\t\t\"FULL_COLLECT\": \"Prêmio coletado por inteiro\",\n\n\t\t\"GH_TABLE_ID\": \"ID de Mesa\",\n\t\t\"GH_PLAYER\": \"Jogador\",\n\t\t\"GH_BANKER\": \"Banka\",\n\t\t\"GH_TIE\": \"Empate\",\n\t\t\"GH_PLAYER_PAIR\": \"Par do Jogador\",\n\t\t\"GH_BANKER_PAIR\": \"Par da Banca\",\n\t\t\"GH_GAME_WINNER\": \"Vencedor\",\n\t\t\"GH_GAME_WINSUM\": \"Soma\",\n\t\t\"GH_GAME_TOTAL\": \"Total\",\n\t\t\"GH_GAME_STAKE\": \"Aposta\",\n\n\t\t\"GH_SPIN_TITLE\": \"RODAR\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Rodada Grátis\",\n\t\t\"GH_RESPINS_TITLE\": \"GIROS EXTRAS\",\n\n\t\t\"GH_BALL_POSITION\": \"Posição da Bola:\",\n\t\t\"GH_TRIO\": \"Total de Trio\",\n\t\t\"GH_SPLIT\": \"Total de Dividida\",\n\t\t\"GH_STREET\": \"Total de Rua\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Total de Canto\",\n\t\t\"GH_SIX_LINE\": \"Total de Linha de Seis\",\n\t\t\"GH_COLUMN\": \"Total de Coluna\",\n\t\t\"GH_FIRST_COLUMN\": \"1ª Coluna\",\n\t\t\"GH_SECOND_COLUMN\": \"2ª Coluna\",\n\t\t\"GH_THIRD_COLUMN\": \"3ª Coluna\",\n\t\t\"GH_DOZEN\": \"Total de Dúzia\",\n\t\t\"GH_FIRST_DOZEN\": \"1ª 12\",\n\t\t\"GH_SECOND_DOZEN\": \"2ª 12\",\n\t\t\"GH_THIRD_DOZEN\": \"3ª 12\",\n\t\t\"GH_STRAIGHT\": \"Total de Direta\",\n\t\t\"GH_COLOR\": \"Total de Cor\",\n\t\t\"GH_BLACK\": \"Preto\",\n\t\t\"GH_RED\": \"Vermelho\",\n\t\t\"GH_EVEN_ODD\": \"Total de Par/Ímpar\",\n\t\t\"GH_EVEN\": \"Par\",\n\t\t\"GH_ODD\": \"Ímpar\",\n\t\t\"GH_SMALL_BIG\": \"1-18/19-36\",\n\t\t\"GH_SMALL\": \"1-18\",\n\t\t\"GH_BIG\": \"19-36\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Dobrar\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Oferta Aceita\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Olhadela estava ativa para esta rodada. Todos os prêmios e apostas são dinheiro de demonstração.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"O recurso de rodadas grátis estava ativo nesta rodada.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Corresponda com os seus números\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Soma de 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Corresponda 3 símbolos\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Corresponda 3 quantias\",\n\t\t\"SCRATCH_FREE_CARD\": \"CARTELA GRÁTIS\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tru: {\n\t\t\"TOTAL_COINS_WIN\": \"Всего выиграно монет\",\n\t\t\"GH_HISTORY\": \"Результаты\",\n\t\t\"GH_GAME_DETAILS\": \"Информация по игре\",\n\t\t\"GH_GAME_ID\": \"ID игры\",\n\t\t\"GH_ROUND_ID\": \"ID кона\",\n\t\t\"GH_SERVER_TIME_START\": \"Начало серверного времени\",\n\t\t\"GH_SERVER_TIME_END\": \"Завершение серверного времени\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Выигрышные комбинации\",\n\t\t\"GH_LENGTH\": \"Длина выигрышной комбинации из символов\",\n\t\t\"GH_MULTIPLIER\": \"Множитель\",\n\t\t\"GH_WIN_WAYS\": \"Выигрышные комбинации\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Кластер\",\n\t\t\"GH_CLUSTER_COUNT\": \"Количество Символов\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Выигрыш со скаттером\",\n\n\t\t\"GH_TRANSACTIONS\": \"Транзакции\",\n\t\t\"GH_TOTAL_STAKE\": \"Суммарная Ставка\",\n\t\t\"GH_TOTAL_BET\": \"Сум. Ставка\",\n\t\t\"GH_TOTAL_WIN\": \"Суммарный выигрыш\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Стоимость покупки функции\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Название покупаемой функции\",\n\t\t\"GH_BEFORE_STAKE\": \"перед ставкой\",\n\t\t\"GH_AFTER_STAKE\": \"после ставки\",\n\t\t\"GH_AT_END\": \"в конечном счете\",\n\t\t\"GH_BALANCE\": \"Основной баланс\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Бонусный баланс\",\n\t\t\"GH_SESSION_BALANCE\": \"Баланс сессии\",\n\t\t\"GH_SESSION_FREEBETS\": \"Бонусный баланс сессии\",\n\t\t\"GH_BONUS\": \"Бонус\",\n\n\t\t\"GH_WIN_DETAILS\": \"Информация по выигрышу\",\n\t\t\"GH_SPIN_DETAILS\": \"Статистика вращения\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Дополнительные сведения\",\n\t\t\"GH_GAME_RESULTS\": \"Результаты Игры\",\n\t\t\"GH_INITIAL_SPIN\": \"Первое вращение\",\n\t\t\"GH_JACKPOT_WIN\": \"Выигрыш джекпота!\",\n\t\t\"GH_SYMBOL_WINS\": \"Выигрыши за Символ\",\n\t\t\"GH_LINE\": \"Линия\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Выигрыши за бесплатные спины\",\n\t\t\"GH_FREE_SPIN\": \"Бесплатный спин\",\n\t\t\"GH_RESPIN\": \"Повторное вращение\",\n\t\t\"GH_RESPIN_WINS\": \"Выигрыши на повторных вращениях\",\n\t\t\"GH_NUDGE\": \"Сдвиг\",\n\t\t\"GH_NUDGE_WINS\": \"Выигрыши со сдвигом\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Выигрыши множителя\",\n\t\t\"GH_MODIFIER_WIN\": \"Выигрыш модификатора\",\n\t\t\"GH_BONUS_WIN\": \"Выигрыш бонуса\",\n\t\t\"GH_INSTANT_WIN\": \"Мгновенный выигрыш\",\n\t\t\"GH_NO_HISTORY\": \"Предыдущие результаты недоступны\",\n\t\t\"GH_GAMBLE_WINS\": \"Выигрыши за рискованную игру\",\n\t\t\"GH_NO_WINS\": \"Нет выигрышей\",\n\t\t\"GH_ROUND_CORRECTION\": \"Коррекция с округлением\",\n\t\t\"GH_LIMITED_WIN\": \"Выигрыш (максимальный лимит)\",\n\t\t\"WIN_EXCHANGE\": \"Стоимость бесплатных вращений\",\n\t\t\"HALF_COLLECT\": \"Вы забрали половину выигрыша\",\n\t\t\"FULL_COLLECT\": \"Вы забрали весь выигрыш\",\n\n\t\t\"GH_TABLE_ID\": \"ID стола\",\n\t\t\"GH_PLAYER\": \"ИГРОК\",\n\t\t\"GH_BANKER\": \"БАНКИР\",\n\t\t\"GH_TIE\": \"Ничья\",\n\t\t\"GH_PLAYER_PAIR\": \"Пара Игрока\",\n\t\t\"GH_BANKER_PAIR\": \"Пара Банкира\",\n\t\t\"GH_GAME_WINNER\": \"Победитель\",\n\t\t\"GH_GAME_WINSUM\": \"Сумма\",\n\t\t\"GH_GAME_TOTAL\": \"Всего\",\n\t\t\"GH_GAME_STAKE\": \"Ставка\",\n\n\t\t\"GH_SPIN_TITLE\": \"СПИН\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Бесплатный спин\",\n\t\t\"GH_RESPINS_TITLE\": \"Повторные вращения\",\n\n\t\t\"GH_BALL_POSITION\": \"Позиция шарика:\",\n\t\t\"GH_TRIO\": \"Трио, всего\",\n\t\t\"GH_SPLIT\": \"Сплит, всего\",\n\t\t\"GH_STREET\": \"Стрит, всего\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Угол, всего\",\n\t\t\"GH_SIX_LINE\": \"Линия из шести, всего\",\n\t\t\"GH_COLUMN\": \"Колонка, всего\",\n\t\t\"GH_FIRST_COLUMN\": \"1-я колонка\",\n\t\t\"GH_SECOND_COLUMN\": \"2-я колонка\",\n\t\t\"GH_THIRD_COLUMN\": \"33-я колонка\",\n\t\t\"GH_DOZEN\": \"Дюжина, всего\",\n\t\t\"GH_FIRST_DOZEN\": \"1-е 12\",\n\t\t\"GH_SECOND_DOZEN\": \"2-е 12\",\n\t\t\"GH_THIRD_DOZEN\": \"3-е 12\",\n\t\t\"GH_STRAIGHT\": \"Ставка на одно число, всего\",\n\t\t\"GH_COLOR\": \"Цвет, всего\",\n\t\t\"GH_BLACK\": \"Черное\",\n\t\t\"GH_RED\": \"Красное\",\n\t\t\"GH_EVEN_ODD\": \"Чет/Нечет, всего\",\n\t\t\"GH_EVEN\": \"Чет\",\n\t\t\"GH_ODD\": \"Нечет\",\n\t\t\"GH_SMALL_BIG\": \"Маленькое/Большое число, всего\",\n\t\t\"GH_SMALL\": \"Маленькое\",\n\t\t\"GH_BIG\": \"Большое\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"В этом раунде была активирована демоверсия. Все выигрыши и ставки указаны в демоденьгах.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"В этом раунде действовала функция Бесплатных Раундов.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Откройте совпадающие числа\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"В сумме 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Откройте 3 одинаковых символа\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Откройте 3 одинаковые суммы\",\n\t\t\"SCRATCH_FREE_CARD\": \"БЕСПЛАТНАЯ КАРТА\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tsv: {\n\t\t\"TOTAL_COINS_WIN\": \"Totala myntvinster\",\n\t\t\"GH_HISTORY\": \"Historik\",\n\t\t\"GH_GAME_DETAILS\": \"Spelinformation\",\n\t\t\"GH_GAME_ID\": \"Spel-ID\",\n\t\t\"GH_ROUND_ID\": \"Omgångs-ID\",\n\t\t\"GH_SERVER_TIME_START\": \"Servertid startade\",\n\t\t\"GH_SERVER_TIME_END\": \"Servertid slutade\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Vinstsätt\",\n\t\t\"GH_LENGTH\": \"Symbolvinstlängd\",\n\t\t\"GH_MULTIPLIER\": \"Multiplikator\",\n\t\t\"GH_WIN_WAYS\": \"Vinstsätt\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Kluster\",\n\t\t\"GH_CLUSTER_COUNT\": \"Antal symboler\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Scatter-vinst\",\n\n\t\t\"GH_HANDS\": \"Händer\",\n\t\t\"GH_SIDE_BETS\": \"Sidospel\",\n\n\t\t\"HAND_0\": \"Hand [1]\",\n\t\t\"HAND_0_SPLIT_0\": \"Hand [1] (Splitt)\",\n\t\t\"HAND_1\": \"Hand [2]\",\n\t\t\"HAND_1_SPLIT_0\": \"Hand [2] (Splitt)\",\n\t\t\"HAND_2\": \"Hand [3]\",\n\t\t\"HAND_2_SPLIT_0\": \"Hand [3] (Splitt)\",\n\t\t\"INSURANCE_HAND_0\": \"Hand [1] (Försäkring)\",\n\t\t\"INSURANCE_HAND_1\": \"Hand [2] (Försäkring)\",\n\t\t\"INSURANCE_HAND_2\": \"Hand [3] (Försäkring)\",\n\t\t\"DEALER\": \"Dealer\",\n\n\t\t\"STAKE\": \"Insats\",\n\t\t\"INSURANCE\": 'FÖRSÄKRING',\n\n\t\t\"GH_TRANSACTIONS\": \"Transaktioner\",\n\t\t\"GH_TOTAL_STAKE\": \"Totalinsats\",\n\t\t\"GH_TOTAL_BET\": \"Totalinsats\",\n\t\t\"GH_TOTAL_WIN\": \"Totalvinst\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Kostnad för funktionsköp\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Namn på funktionsköp\",\n\t\t\"GH_BEFORE_STAKE\": \"innan satsning\",\n\t\t\"GH_AFTER_STAKE\": \"efter satsning\",\n\t\t\"GH_AT_END\": \"i slutet\",\n\t\t\"GH_BALANCE\": \"Huvudsaldo\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Bonussaldo\",\n\t\t\"GH_SESSION_BALANCE\": \"Sessionsaldo\",\n\t\t\"GH_SESSION_FREEBETS\": \"Sessionbonussaldo\",\n\t\t\"GH_BONUS\": \"Bonus\",\n\n\t\t\"GH_WIN_DETAILS\": \"Vinstinformation\",\n\t\t\"GH_SPIN_DETAILS\": \"Snurrinformation\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Ytterligare detaljer\",\n\t\t\"GH_GAME_RESULTS\": \"Spelresultat\",\n\t\t\"GH_INITIAL_SPIN\": \"Första snurret\",\n\t\t\"GH_JACKPOT_WIN\": \"Jackpottvinst\",\n\t\t\"GH_SYMBOL_WINS\": \"Symbolvinster\",\n\t\t\"GH_LINE\": \"Rad\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Gratissnurr-vinster\",\n\t\t\"GH_FREE_SPIN\": \"Gratissnurr\",\n\t\t\"GH_RESPIN\": \"Omsnurr\",\n\t\t\"GH_RESPIN_WINS\": \"Omsnurrsvinster\",\n\t\t\"GH_NUDGE\": \"Nudge\",\n\t\t\"GH_NUDGE_WINS\": \"Nudge-vinster\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Multiplikator-vinster\",\n\t\t\"GH_MODIFIER_WIN\": \"Modifikatorvinst\",\n\t\t\"GH_BONUS_WIN\": \"Bonusvinst\",\n\t\t\"GH_INSTANT_WIN\": \"Direktvinst\",\n\t\t\"GH_NO_HISTORY\": \"Ingen historik tillgänglig\",\n\t\t\"GH_GAMBLE_WINS\": \"Riskspel-vinster\",\n\t\t\"GH_NO_WINS\": \"Inga vinster\",\n\t\t\"GH_ROUND_CORRECTION\": \"Korrigering efter avrundning\",\n\t\t\"GH_LIMITED_WIN\": \"Vinst (maxgräns)\",\n\t\t\"WIN_EXCHANGE\": \"Pris för free spins\",\n\t\t\"HALF_COLLECT\": \"Halv vinst samlad\",\n\t\t\"FULL_COLLECT\": \"Full vinst samlad\",\n\n\t\t\"GH_TABLE_ID\": \"Bords-ID\",\n\t\t\"GH_PLAYER\": \"Spelare\",\n\t\t\"GH_BANKER\": \"Dealer\",\n\t\t\"GH_TIE\": \"Lika\",\n\t\t\"GH_PLAYER_PAIR\": \"Spelarpar\",\n\t\t\"GH_BANKER_PAIR\": \"Dealerpar\",\n\t\t\"GH_GAME_WINNER\": \"Vinnare\",\n\t\t\"GH_GAME_WINSUM\": \"Summa\",\n\t\t\"GH_GAME_TOTAL\": \"Totalt\",\n\t\t\"GH_GAME_STAKE\": \"Insats\",\n\n\t\t\"GH_SPIN_TITLE\": \"SNURRA\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Gratissnurr\",\n\t\t\"GH_RESPINS_TITLE\": \"OMSNURR\",\n\n\t\t\"GH_BALL_POSITION\": \"Kulposition:\",\n\t\t\"GH_TRIO\": \"Trio\",\n\t\t\"GH_SPLIT\": \"Splitt\",\n\t\t\"GH_STREET\": \"Gata\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Hörn\",\n\t\t\"GH_SIX_LINE\": \"Sexrad\",\n\t\t\"GH_COLUMN\": \"Kolumn\",\n\t\t\"GH_FIRST_COLUMN\": \"1:a kolumnen\",\n\t\t\"GH_SECOND_COLUMN\": \"2:a kolumnen\",\n\t\t\"GH_THIRD_COLUMN\": \"3:e kolumnen\",\n\t\t\"GH_DOZEN\": \"Dussin\",\n\t\t\"GH_FIRST_DOZEN\": \"1:a 12\",\n\t\t\"GH_SECOND_DOZEN\": \"2:a 12\",\n\t\t\"GH_THIRD_DOZEN\": \"3:a 12\",\n\t\t\"GH_STRAIGHT\": \"Enkelnummer\",\n\t\t\"GH_COLOR\": \"Färg\",\n\t\t\"GH_BLACK\": \"Svart\",\n\t\t\"GH_RED\": \"Rött\",\n\t\t\"GH_EVEN_ODD\": \"Jämnt/udda\",\n\t\t\"GH_EVEN\": \"Jämnt\",\n\t\t\"GH_ODD\": \"Udda\",\n\t\t\"GH_SMALL_BIG\": \"Liten/stor\",\n\t\t\"GH_SMALL\": \"Liten\",\n\t\t\"GH_BIG\": \"Stor\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Dubbla ner\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Erbjudande accepterat\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Tjuvkik var aktiverat för denna runda. Alla vinster och insatser är demopengar.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"Gratisrundor var aktiverade i den här rundan.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Matcha med dina nummer\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Summa på 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Matcha 3 symboler\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Matcha 3 belopp\",\n\t\t\"SCRATCH_FREE_CARD\": \"GRATISLOTT\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\ttr: {\n\t\t\"TOTAL_COINS_WIN\": \"Toplam jeton kazancı\",\n\t\t\"GH_HISTORY\": \"Geçmiş\",\n\t\t\"GH_GAME_DETAILS\": \"Oyun Ayrıntıları\",\n\t\t\"GH_GAME_ID\": \"Oyun ID\",\n\t\t\"GH_ROUND_ID\": \"Tur ID\",\n\t\t\"GH_SERVER_TIME_START\": \"Sunucu Başlangıç Saati\",\n\t\t\"GH_SERVER_TIME_END\": \"Sunucu Bitiş Saati\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Kazanç yönleri\",\n\t\t\"GH_LENGTH\": \"Sembol Kazanç Uzunluğu\",\n\t\t\"GH_MULTIPLIER\": \"Çarpan\",\n\t\t\"GH_WIN_WAYS\": \"Kazanç yönleri\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Küme\",\n\t\t\"GH_CLUSTER_COUNT\": \"Sembol Sayısı\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Saçılım kazancı\",\n\n\t\t\"GH_HANDS\": \"El\",\n\t\t\"GH_SIDE_BETS\": \"Yan Bahisler\",\n\n\t\t\"HAND_0\": \"El [1]\",\n\t\t\"HAND_0_SPLIT_0\": \"El [1] (Bölünmüş)\",\n\t\t\"HAND_1\": \"El [2]\",\n\t\t\"HAND_1_SPLIT_0\": \"El [2] (Bölünmüş)\",\n\t\t\"HAND_2\": \"El [3]\",\n\t\t\"HAND_2_SPLIT_0\": \"El [3] (Bölünmüş)\",\n\t\t\"INSURANCE_HAND_0\": \"El [1] (Sigorta)\",\n\t\t\"INSURANCE_HAND_1\": \"El [2] (Sigorta)\",\n\t\t\"INSURANCE_HAND_2\": \"El [3] (Sigorta)\",\n\t\t\"DEALER\": \"Krupi̇ye\",\n\n\t\t\"STAKE\": \"Bahis\",\n\t\t\"INSURANCE\": 'Si̇gorta',\n\n\t\t\"GH_TRANSACTIONS\": \"İşlemler\",\n\t\t\"GH_TOTAL_STAKE\": \"Toplam Bahis Tutari\",\n\t\t\"GH_TOTAL_BET\": \"Toplam Bahis\",\n\t\t\"GH_TOTAL_WIN\": \"Toplam Kazanç\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Özellik Satın Al Fiyatı\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Özellik Satın Al Adı\",\n\t\t\"GH_BEFORE_STAKE\": \"bahisten önce\",\n\t\t\"GH_AFTER_STAKE\": \"bahisten sonra\",\n\t\t\"GH_AT_END\": \"en sonunda\",\n\t\t\"GH_BALANCE\": \"Ana bakiye\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Bonus bakiyesi\",\n\t\t\"GH_SESSION_BALANCE\": \"Oturum bakiyesi\",\n\t\t\"GH_SESSION_FREEBETS\": \"Oturum bonus bakiyesi\",\n\t\t\"GH_BONUS\": \"Bonus\",\n\n\t\t\"GH_WIN_DETAILS\": \"Kazanç Ayrıntıları\",\n\t\t\"GH_SPIN_DETAILS\": \"Döndürme Ayrıntıları\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Ek Detaylar\",\n\t\t\"GH_GAME_RESULTS\": \"Oyun Sonuçları\",\n\t\t\"GH_INITIAL_SPIN\": \"İlk Döndürme\",\n\t\t\"GH_JACKPOT_WIN\": \"Jackpot Kazancı\",\n\t\t\"GH_SYMBOL_WINS\": \"Sembol Kazançlari\",\n\t\t\"GH_LINE\": \"Satır\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Ücretsiz Döndürme Kazançları\",\n\t\t\"GH_FREE_SPIN\": \"Ücretsiz Döndürme\",\n\t\t\"GH_RESPIN\": \"Yeniden Döndürme\",\n\t\t\"GH_RESPIN_WINS\": \"Yeniden Döndürme Kazançları\",\n\t\t\"GH_NUDGE\": \"Sarsma\",\n\t\t\"GH_NUDGE_WINS\": \"Sarsma Kazançları\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Çarpan Kazançları\",\n\t\t\"GH_MODIFIER_WIN\": \"Çarpan Kazancı\",\n\t\t\"GH_BONUS_WIN\": \"Bonus kazancı\",\n\t\t\"GH_INSTANT_WIN\": \"Anlık Kazanç\",\n\t\t\"GH_NO_HISTORY\": \"Geçmiş bilgisi yok\",\n\t\t\"GH_GAMBLE_WINS\": \"Kumar kazançları\",\n\t\t\"GH_NO_WINS\": \"Kazanç yok\",\n\t\t\"GH_ROUND_CORRECTION\": \"Yuvarlama düzeltmesi\",\n\t\t\"GH_LIMITED_WIN\": \"Kazanç (maks. limit)\",\n\t\t\"WIN_EXCHANGE\": \"Ücretsiz çevirme fiyatı\",\n\t\t\"HALF_COLLECT\": \"Kazancın yarısı toplandı\",\n\t\t\"FULL_COLLECT\": \"Kazancın tamamı toplandı\",\n\n\t\t\"GH_TABLE_ID\": \"Masa ID\",\n\t\t\"GH_PLAYER\": \"Oyuncu\",\n\t\t\"GH_BANKER\": \"Kasa\",\n\t\t\"GH_TIE\": \"Lika\",\n\t\t\"GH_PLAYER_PAIR\": \"Oyuncu Çifti\",\n\t\t\"GH_BANKER_PAIR\": \"Kasa Çifti\",\n\t\t\"GH_GAME_WINNER\": \"Kazanan\",\n\t\t\"GH_GAME_WINSUM\": \"Genel Toplam\",\n\t\t\"GH_GAME_TOTAL\": \"Toplam\",\n\t\t\"GH_GAME_STAKE\": \"Bahis\",\n\n\t\t\"GH_SPIN_TITLE\": \"DÖNDÜR\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Ücretsiz Döndürme\",\n\t\t\"GH_RESPINS_TITLE\": \"YENİDEN DÖNDÜRMELER\",\n\n\t\t\"GH_BALL_POSITION\": \"Top Konumu:\",\n\t\t\"GH_TRIO\": \"Üçlü Toplamı\",\n\t\t\"GH_SPLIT\": \"Bölünmüş Toplamı\",\n\t\t\"GH_STREET\": \"Sokak Toplamı\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Köşe Toplamı\",\n\t\t\"GH_SIX_LINE\": \"Altılı Satır Toplamı\",\n\t\t\"GH_COLUMN\": \"Sütun Toplamı\",\n\t\t\"GH_FIRST_COLUMN\": \"1. Sütun\",\n\t\t\"GH_SECOND_COLUMN\": \"2. Sütun\",\n\t\t\"GH_THIRD_COLUMN\": \"3. Sütun\",\n\t\t\"GH_DOZEN\": \"Düzine Toplamı\",\n\t\t\"GH_FIRST_DOZEN\": \"İlk 12\",\n\t\t\"GH_SECOND_DOZEN\": \"2\",\n\t\t\"GH_THIRD_DOZEN\": \"3\",\n\t\t\"GH_STRAIGHT\": \"Doğrudan Toplamı\",\n\t\t\"GH_COLOR\": \"Renk Toplamı\",\n\t\t\"GH_BLACK\": \"Siyah\",\n\t\t\"GH_RED\": \"Kırmızı\",\n\t\t\"GH_EVEN_ODD\": \"Çift/Tek Toplamı\",\n\t\t\"GH_EVEN\": \"Çift\",\n\t\t\"GH_ODD\": \"Tek\",\n\t\t\"GH_SMALL_BIG\": \"Küçük/Büyük Toplamı\",\n\t\t\"GH_SMALL\": \"Küçük\",\n\t\t\"GH_BIG\": \"Büyük\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Sneak peek bu raunt için aktifti. Tüm kazançlar ve bahisler demo parasıdır.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"Bu raunt için ücretsiz rauntlar aktifti.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Sayılarıyla eşleştir\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Toplam 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"3 sembolü eşleştir\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"3 tutari eşleştir\",\n\t\t\"SCRATCH_FREE_CARD\": \"ÜCRETSİZ KART\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tcs: {\n\t\t\"TOTAL_COINS_WIN\": \"Total coins win\",\n\t\t\"GH_HISTORY\": \"Historie\",\n\t\t\"GH_GAME_DETAILS\": \"Herní údaje\",\n\t\t\"GH_GAME_ID\": \"Číslo hry\",\n\t\t\"GH_ROUND_ID\": \"Číslo kola\",\n\t\t\"GH_SERVER_TIME_START\": \"Čas zahájení na serveru\",\n\t\t\"GH_SERVER_TIME_END\": \"Čas ukončení na serveru\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Výherní způsoby\",\n\t\t\"GH_LENGTH\": \"Délka výherních symbolů\",\n\t\t\"GH_MULTIPLIER\": \"Násobitel\",\n\t\t\"GH_WIN_WAYS\": \"Výherní způsoby\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Shluk\",\n\t\t\"GH_CLUSTER_COUNT\": \"Počet symbolů\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Výhra za symboly Scatter\",\n\n\t\t\"GH_TRANSACTIONS\": \"Transakce\",\n\t\t\"GH_TOTAL_STAKE\": \"Celkový Vklad\",\n\t\t\"GH_TOTAL_BET\": \"Cel. Vklad\",\n\t\t\"GH_TOTAL_WIN\": \"Celková výhra\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Cena za nákup funkce\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Název funkce k nákupu\",\n\t\t\"GH_BEFORE_STAKE\": \"před sázkou\",\n\t\t\"GH_AFTER_STAKE\": \"po sázce\",\n\t\t\"GH_AT_END\": \"na konci kola\",\n\t\t\"GH_BALANCE\": \"Zůstatek hlavního účtu\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Zůstatek bonusu\",\n\t\t\"GH_SESSION_BALANCE\": \"Zůstatek účtu v relaci\",\n\t\t\"GH_SESSION_FREEBETS\": \"Zůstatek bonusu v relaci\",\n\t\t\"GH_BONUS\": \"Bonus\",\n\n\t\t\"GH_WIN_DETAILS\": \"Podrobnosti výhry\",\n\t\t\"GH_SPIN_DETAILS\": \"Podrobnosti roztočení\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Další údaje\",\n\t\t\"GH_GAME_RESULTS\": \"Game Results\",\n\t\t\"GH_INITIAL_SPIN\": \"Počáteční roztočení\",\n\t\t\"GH_JACKPOT_WIN\": \"Výhra jackpotu\",\n\t\t\"GH_SYMBOL_WINS\": \"Výhry ze symbolů\",\n\t\t\"GH_LINE\": \"Linie\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Výhra roztočení zdarma\",\n\t\t\"GH_FREE_SPIN\": \"Roztočení zdarma\",\n\t\t\"GH_RESPIN\": \"Opakované roztočení\",\n\t\t\"GH_RESPIN_WINS\": \"Výhry z opakovaných roztočení\",\n\t\t\"GH_NUDGE\": \"Nudge\",\n\t\t\"GH_NUDGE_WINS\": \"Nudge Wins\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Výhra násobitele\",\n\t\t\"GH_MODIFIER_WIN\": \"Modifikátor výhry\",\n\t\t\"GH_BONUS_WIN\": \"Bonusová výhra\",\n\t\t\"GH_INSTANT_WIN\": \"Okamžitá výhra\",\n\t\t\"GH_NO_HISTORY\": \"Žádné záznamy k dispozici\",\n\t\t\"GH_GAMBLE_WINS\": \"Výhra z rizika\",\n\t\t\"GH_NO_WINS\": \"Bez výhry\",\n\t\t\"GH_ROUND_CORRECTION\": \"Opravné zaokrouhlení\",\n\t\t\"GH_LIMITED_WIN\": \"Výhra (maximální limit)\",\n\t\t\"WIN_EXCHANGE\": \"Cena za zatočení zdarma\",\n\t\t\"HALF_COLLECT\": \"Získaná polovina výhry\",\n\t\t\"FULL_COLLECT\": \"Získaná plná výhra\",\n\n\t\t\"GH_TABLE_ID\": \"Číslo stolu\",\n\t\t\"GH_PLAYER\": \"Hráč\",\n\t\t\"GH_BANKER\": \"Bankéř\",\n\t\t\"GH_TIE\": \"Nerozhodně\",\n\t\t\"GH_PLAYER_PAIR\": \"Pár hráče\",\n\t\t\"GH_BANKER_PAIR\": \"Pár bankéře\",\n\t\t\"GH_GAME_WINNER\": \"Vítěz\",\n\t\t\"GH_GAME_WINSUM\": \"Částka\",\n\t\t\"GH_GAME_TOTAL\": \"Celkem\",\n\t\t\"GH_GAME_STAKE\": \"Vklad\",\n\n\t\t\"GH_SPIN_TITLE\": \"ROZTOČIT\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Roztočení zdarma\",\n\t\t\"GH_RESPINS_TITLE\": \"OPAKOVANÁ ROZTOČENÍ\",\n\n\t\t\"GH_BALL_POSITION\": \"Pozice kuličky:\",\n\t\t\"GH_TRIO\": \"Trio celkem\",\n\t\t\"GH_SPLIT\": \"Split celkem\",\n\t\t\"GH_STREET\": \"Street celkem\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Roh celkem\",\n\t\t\"GH_SIX_LINE\": \"Six Line celkem\",\n\t\t\"GH_COLUMN\": \"Sloupec celkem\",\n\t\t\"GH_FIRST_COLUMN\": \"1. sloupec\",\n\t\t\"GH_SECOND_COLUMN\": \"2. sloupec\",\n\t\t\"GH_THIRD_COLUMN\": \"3. sloupec\",\n\t\t\"GH_DOZEN\": \"Tucet celkem\",\n\t\t\"GH_FIRST_DOZEN\": \"1. 12\",\n\t\t\"GH_SECOND_DOZEN\": \"2.12\",\n\t\t\"GH_THIRD_DOZEN\": \"3.12\",\n\t\t\"GH_STRAIGHT\": \"Straight celkem\",\n\t\t\"GH_COLOR\": \"Barva celkem\",\n\t\t\"GH_BLACK\": \"Černá\",\n\t\t\"GH_RED\": \"Červená\",\n\t\t\"GH_EVEN_ODD\": \"Sudá/lichá celkem\",\n\t\t\"GH_EVEN\": \"Sudá\",\n\t\t\"GH_ODD\": \"Lichá\",\n\t\t\"GH_SMALL_BIG\": \"1-18/19-36 celkem\",\n\t\t\"GH_SMALL\": \"1-18\",\n\t\t\"GH_BIG\": \"19-36\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Toto kolo proběhlo jako tajná ukázka! Všechny výhry a sázky jsou demo peníze.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"V tomto kole byla aktivní kola zdarma.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Match your numbers\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Reveal sum of 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Match 3 symbols\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Match 3 amounts\",\n\t\t\"SCRATCH_FREE_CARD\": \"Free ticket\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tpt: {\n\t\t\"TOTAL_COINS_WIN\": \"Prémio total de moedas\",\n\t\t\"GH_HISTORY\": \"Histórico\",\n\t\t\"GH_GAME_DETAILS\": \"Informações do jogo\",\n\t\t\"GH_GAME_ID\": \"ID do jogo\",\n\t\t\"GH_ROUND_ID\": \"ID da ronda\",\n\t\t\"GH_SERVER_TIME_START\": \"Hora de início do servidor\",\n\t\t\"GH_SERVER_TIME_END\": \"Hora de fim do servidor\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Formas de ganhar\",\n\t\t\"GH_LENGTH\": \"Comprimento do prémio de símbolo\",\n\t\t\"GH_MULTIPLIER\": \"Multiplicador\",\n\t\t\"GH_WIN_WAYS\": \"Formas de ganhar\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Aglomerado\",\n\t\t\"GH_CLUSTER_COUNT\": \"Contagem de símbolos\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Prémio scatter\",\n\n\t\t\"GH_TRANSACTIONS\": \"Transações\",\n\t\t\"GH_TOTAL_STAKE\": \"Aposta Total\",\n\t\t\"GH_TOTAL_BET\": \"Aposta Total\",\n\t\t\"GH_TOTAL_WIN\": \"Prémio total\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Custo do Recurso Comprar\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Nome do Recurso Comprar\",\n\t\t\"GH_BEFORE_STAKE\": \"antes da aposta\",\n\t\t\"GH_AFTER_STAKE\": \"depois da aposta\",\n\t\t\"GH_AT_END\": \"no final\",\n\t\t\"GH_BALANCE\": \"Saldo principal\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Saldo de bónus\",\n\t\t\"GH_SESSION_BALANCE\": \"Saldo da sessão\",\n\t\t\"GH_SESSION_FREEBETS\": \"Saldo de bónus da sessão\",\n\t\t\"GH_BONUS\": \"Bónus\",\n\n\t\t\"GH_WIN_DETAILS\": \"Detalhes do prémio\",\n\t\t\"GH_SPIN_DETAILS\": \"Detalhes da rodada\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Informações Adicionais\",\n\t\t\"GH_GAME_RESULTS\": \"Resultados do jogo\",\n\t\t\"GH_INITIAL_SPIN\": \"Rodada inicial\",\n\t\t\"GH_JACKPOT_WIN\": \"Prémio do jackpot\",\n\t\t\"GH_SYMBOL_WINS\": \"Prémios dos símbolos\",\n\t\t\"GH_LINE\": \"Linha\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Prémios de rodadas grátis\",\n\t\t\"GH_FREE_SPIN\": \"Rodada grátis\",\n\t\t\"GH_RESPIN\": \"Rodada extra\",\n\t\t\"GH_RESPIN_WINS\": \"Prémios de rodadas extra\",\n\t\t\"GH_NUDGE\": \"Movimento\",\n\t\t\"GH_NUDGE_WINS\": \"Prémios de Movimentos\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Prémio de multiplicador\",\n\t\t\"GH_MODIFIER_WIN\": \"Prémio de modificador\",\n\t\t\"GH_BONUS_WIN\": \"Prémio de bónus\",\n\t\t\"GH_INSTANT_WIN\": \"Prémio instantâneo\",\n\t\t\"GH_NO_HISTORY\": \"Sem histórico disponível\",\n\t\t\"GH_GAMBLE_WINS\": \"Prémios de risco\",\n\t\t\"GH_NO_WINS\": \"Sem prémios\",\n\t\t\"GH_ROUND_CORRECTION\": \"Correção das rondas\",\n\t\t\"GH_LIMITED_WIN\": \"Prémio (limite máx)\",\n\t\t\"WIN_EXCHANGE\": \"Preço das rodadas grátis\",\n\t\t\"HALF_COLLECT\": \"Meio prémio recolhido\",\n\t\t\"FULL_COLLECT\": \"Prémio inteiro recolhido\",\n\n\t\t\"GH_TABLE_ID\": \"ID de Mesa\",\n\t\t\"GH_PLAYER\": \"Jogador\",\n\t\t\"GH_BANKER\": \"Banca\",\n\t\t\"GH_TIE\": \"Empate\",\n\t\t\"GH_PLAYER_PAIR\": \"Par do Jogador\",\n\t\t\"GH_BANKER_PAIR\": \"Par da Banca\",\n\t\t\"GH_GAME_WINNER\": \"Vencedor\",\n\t\t\"GH_GAME_WINSUM\": \"Soma\",\n\t\t\"GH_GAME_TOTAL\": \"Total\",\n\t\t\"GH_GAME_STAKE\": \"Aposta\",\n\n\t\t\"GH_SPIN_TITLE\": \"RODAR\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Rodada grátis\",\n\t\t\"GH_RESPINS_TITLE\": \"RODADAS EXTRA\",\n\n\t\t\"GH_BALL_POSITION\": \"Posição da bola:\",\n\t\t\"GH_TRIO\": \"Total de Trio\",\n\t\t\"GH_SPLIT\": \"Total de Dividida\",\n\t\t\"GH_STREET\": \"Total de Rua\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Total de Canto\",\n\t\t\"GH_SIX_LINE\": \"Total de Linha de Seis\",\n\t\t\"GH_COLUMN\": \"Total de Coluna\",\n\t\t\"GH_FIRST_COLUMN\": \"1ª Coluna\",\n\t\t\"GH_SECOND_COLUMN\": \"2ª Coluna\",\n\t\t\"GH_THIRD_COLUMN\": \"3ª Coluna\",\n\t\t\"GH_DOZEN\": \"Total de Dúzia\",\n\t\t\"GH_FIRST_DOZEN\": \"1ª 12\",\n\t\t\"GH_SECOND_DOZEN\": \"2ª 12\",\n\t\t\"GH_THIRD_DOZEN\": \"3ª 12\",\n\t\t\"GH_STRAIGHT\": \"Total de Direta\",\n\t\t\"GH_COLOR\": \"Total de Cor\",\n\t\t\"GH_BLACK\": \"Preto\",\n\t\t\"GH_RED\": \"Vermelho\",\n\t\t\"GH_EVEN_ODD\": \"Total de Par/Ímpar\",\n\t\t\"GH_EVEN\": \"Par\",\n\t\t\"GH_ODD\": \"Ímpar\",\n\t\t\"GH_SMALL_BIG\": \"Total de Baixo/Alto\",\n\t\t\"GH_SMALL\": \"Baixo\",\n\t\t\"GH_BIG\": \"Alto\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Espreitadela esteve activa durante esta ronda. Todos os ganhos e apostas são dinheiro demo.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"As rondas grátis estiveram activas nesta ronda.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Encontre a combinação para seus números\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Soma de 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Combine 3 símbolos\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Combine 3 valores\",\n\t\t\"SCRATCH_FREE_CARD\": \"RASPADINHA GRÁTIS\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\thy: {\n\t\t\"TOTAL_COINS_WIN\": \"Total coins win\",\n\t\t\"GH_HISTORY\": \"Պատմություն\",\n\t\t\"GH_GAME_DETAILS\": \"Խաղի մանրամասներ\",\n\t\t\"GH_GAME_ID\": \"Խաղի ID\",\n\t\t\"GH_ROUND_ID\": \"Խաղաշրջանի ID\",\n\t\t\"GH_SERVER_TIME_START\": \"Սերվերի ժամանակի սկիզբ\",\n\t\t\"GH_SERVER_TIME_END\": \"Սերվերի ժամանակի ավարտ\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Շահող գծեր՝\",\n\t\t\"GH_LENGTH\": \"Շահող նշաններ\",\n\t\t\"GH_MULTIPLIER\": \"Բազմապատկիչ\",\n\t\t\"GH_WIN_WAYS\": \"Շահող գծեր՝\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Քլասթեր\",\n\t\t\"GH_CLUSTER_COUNT\": \"Նշանների քանակ\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Շահող scatter\",\n\n\t\t\"GH_TRANSACTIONS\": \"Գործարքներ\",\n\t\t\"GH_TOTAL_STAKE\": \"Ընդհանուր Խաղադրույք\",\n\t\t\"GH_TOTAL_BET\": \"ԸՆԴՀԱՆՈՒՐ ԴՐՈՒՅՔ`\",\n\t\t\"GH_TOTAL_WIN\": \"Ընդհանուր շահում\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Գնման Գործառույթի արժեքը\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Գնման Գործառույթի անվանումը\",\n\t\t\"GH_BEFORE_STAKE\": \"խաղադրույքից առաջ\",\n\t\t\"GH_AFTER_STAKE\": \"խաղադրույքից հետո\",\n\t\t\"GH_AT_END\": \"վերջում\",\n\t\t\"GH_BALANCE\": \"Հիմնական մնացորդ\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Բոնուսային մնացորդ\",\n\t\t\"GH_SESSION_BALANCE\": \"Սեսիայի մնացորդ\",\n\t\t\"GH_SESSION_FREEBETS\": \"Սեսիայի բոնուսային մնացորդ\",\n\t\t\"GH_BONUS\": \"ԲՈՆՈՒՍ\",\n\n\t\t\"GH_WIN_DETAILS\": \"Շահման մանրամասներ\",\n\t\t\"GH_SPIN_DETAILS\": \"Պտույտների մանրամասներ\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Լրացուցիչ մանրամասներ\",\n\t\t\"GH_GAME_RESULTS\": \"Game Results\",\n\t\t\"GH_INITIAL_SPIN\": \"Սկզբնական պտույտ\",\n\t\t\"GH_JACKPOT_WIN\": \"Ջեքփոթի շահում\",\n\t\t\"GH_SYMBOL_WINS\": \"Շահող նշաններ\",\n\t\t\"GH_LINE\": \"Գիծ\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Անվճար պտույտների շահումներ\",\n\t\t\"GH_FREE_SPIN\": \"Անվճար պտույտ\",\n\t\t\"GH_RESPIN\": \"Կրկնակի պտույտ\",\n\t\t\"GH_RESPIN_WINS\": \"Կրկնակի պտույտների շահումներ\",\n\t\t\"GH_NUDGE\": \"Nudge\",\n\t\t\"GH_NUDGE_WINS\": \"Nudge Wins\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Բազմապատկիչով շահում\",\n\t\t\"GH_MODIFIER_WIN\": \"Մոդիֆիկատորով շահում\",\n\t\t\"GH_BONUS_WIN\": \"Բոնուսային շահում\",\n\t\t\"GH_INSTANT_WIN\": \"Ակնթարթային շահում\",\n\t\t\"GH_NO_HISTORY\": \"Պատմություն չկա\",\n\t\t\"GH_GAMBLE_WINS\": \"Դրամախաղի շահումներ\",\n\t\t\"GH_NO_WINS\": \"Շահումներ չկան\",\n\t\t\"GH_ROUND_CORRECTION\": \"Շրջանի շտկում\",\n\t\t\"GH_LIMITED_WIN\": \"Շահում (առավ. սահմ.)\",\n\t\t\"WIN_EXCHANGE\": \"Անվճար պտույտների գինը\",\n\t\t\"HALF_COLLECT\": \"Շահումի կեսը վերցված է\",\n\t\t\"FULL_COLLECT\": \"Ամբողջական շահումը վերցված է\",\n\n\t\t\"GH_TABLE_ID\": \"Սեղանի ID\",\n\t\t\"GH_PLAYER\": \"ԽԱՂԱՑՈՂ\",\n\t\t\"GH_BANKER\": \"ԲԱՆԿ\",\n\t\t\"GH_TIE\": \"Ոչ ոքի`\",\n\t\t\"GH_PLAYER_PAIR\": \"Խաղացողի զույգ՝\",\n\t\t\"GH_BANKER_PAIR\": \"Բանկի զույգ՝\",\n\t\t\"GH_GAME_WINNER\": \"Հաղթող\",\n\t\t\"GH_GAME_WINSUM\": \"Ընդհանուր գումար\",\n\t\t\"GH_GAME_TOTAL\": \"Ընդամենը\",\n\t\t\"GH_GAME_STAKE\": \"ԽԱՂԱԴՐՈՒՅՔ\",\n\n\t\t\"GH_SPIN_TITLE\": \"ՊՏՏԵԼ\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Անվճար պտույտ\",\n\t\t\"GH_RESPINS_TITLE\": \"Կրկնակի պտույտներ\",\n\n\t\t\"GH_BALL_POSITION\": \"Գնդակի դիրք:\",\n\t\t\"GH_TRIO\": \"Ընդամենը տրիո՝\",\n\t\t\"GH_SPLIT\": \"Ընդամենը պտույտ՝\",\n\t\t\"GH_STREET\": \"Ընդամենը սթրիթ՝\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Ընդամենը քորներ՝\",\n\t\t\"GH_SIX_LINE\": \"Ընդամենը սիքս լայն՝\",\n\t\t\"GH_COLUMN\": \"Ընդամենը սյունակ՝\",\n\t\t\"GH_FIRST_COLUMN\": \"1-ին սյունակ՝\",\n\t\t\"GH_SECOND_COLUMN\": \"2-րդ սյունակ՝\",\n\t\t\"GH_THIRD_COLUMN\": \"3-րդ սյունակ՝\",\n\t\t\"GH_DOZEN\": \"Ընդամենը դյուժին՝\",\n\t\t\"GH_FIRST_DOZEN\": \"1-ին 12\",\n\t\t\"GH_SECOND_DOZEN\": \"2-րդ 12\",\n\t\t\"GH_THIRD_DOZEN\": \"3-րդ 12\",\n\t\t\"GH_STRAIGHT\": \"Ընդամենը սթրեյթ՝\",\n\t\t\"GH_COLOR\": \"Ընդամենը գույն՝\",\n\t\t\"GH_BLACK\": \"Սև՝\",\n\t\t\"GH_RED\": \"Կարմիր\",\n\t\t\"GH_EVEN_ODD\": \"Ընդամենը զույգ/կենտ՝\",\n\t\t\"GH_EVEN\": \"Զույգ\",\n\t\t\"GH_ODD\": \"Կենտ\",\n\t\t\"GH_SMALL_BIG\": \"Ընդամենը փոքր/մեծ\",\n\t\t\"GH_SMALL\": \"Փոքր\",\n\t\t\"GH_BIG\": \"Մեծ\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Այս ռաունդի ընթացքում սնիք փիքը ակտիվ էր։ Բոլոր շահումներն ու խաղադրույքները դեմո գումարներ են։\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"Անվճար խաղափուլի գործառույթն ակտիվ է այս խաղափուլի ընթացքում:\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Match your numbers\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Reveal sum of 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Match 3 symbols\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Match 3 amounts\",\n\t\t\"SCRATCH_FREE_CARD\": \"Free ticket\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\t'es-PE': {\n\t\t\"TOTAL_COINS_WIN\": \"Total coins win\",\n\t\t\"GH_HISTORY\": \"Historial\",\n\t\t\"GH_GAME_DETAILS\": \"Detalles del juego\",\n\t\t\"GH_GAME_ID\": \"ID del juego\",\n\t\t\"GH_ROUND_ID\": \"ID de ronda\",\n\t\t\"GH_SERVER_TIME_START\": \"Inicio del tiempo del servidor\",\n\t\t\"GH_SERVER_TIME_END\": \"Final del tiempo del servidor\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Formas de ganar\",\n\t\t\"GH_LENGTH\": \"Longitud de los premios de los símbolos\",\n\t\t\"GH_MULTIPLIER\": \"Multiplicador\",\n\t\t\"GH_WIN_WAYS\": \"Formas de ganar\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Grupo\",\n\t\t\"GH_CLUSTER_COUNT\": \"Número de símbolos\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Premio Scatter\",\n\n\t\t\"GH_TRANSACTIONS\": \"Transacciones\",\n\t\t\"GH_TOTAL_STAKE\": \"APUESTA TOTAL\",\n\t\t\"GH_TOTAL_BET\": \"APUESTA TOTAL\",\n\t\t\"GH_TOTAL_WIN\": \"Premio total\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Costo de compra de función\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Nombre de compra de función\",\n\t\t\"GH_BEFORE_STAKE\": \"antes de la apuesta\",\n\t\t\"GH_AFTER_STAKE\": \"después de la apuesta\",\n\t\t\"GH_AT_END\": \"final\",\n\t\t\"GH_BALANCE\": \"Saldo principal\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Saldo de bono\",\n\t\t\"GH_SESSION_BALANCE\": \"Saldo de la sesión\",\n\t\t\"GH_SESSION_FREEBETS\": \"Saldo de bono de la sesión\",\n\t\t\"GH_BONUS\": \"Bonificación\",\n\n\t\t\"GH_WIN_DETAILS\": \"Detalles del premio\",\n\t\t\"GH_SPIN_DETAILS\": \"Detalles del giro\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Información adicional\",\n\t\t\"GH_GAME_RESULTS\": \"Game Results\",\n\t\t\"GH_INITIAL_SPIN\": \"Giro inicial\",\n\t\t\"GH_JACKPOT_WIN\": \"Premio del Premio Mayor\",\n\t\t\"GH_SYMBOL_WINS\": \"Premios de símbolos\",\n\t\t\"GH_LINE\": \"Línea\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Premio en giros gratis\",\n\t\t\"GH_FREE_SPIN\": \"Giro gratis\",\n\t\t\"GH_RESPIN\": \"Regiro\",\n\t\t\"GH_RESPIN_WINS\": \"Premios del regiro\",\n\t\t\"GH_NUDGE\": \"Nudge\",\n\t\t\"GH_NUDGE_WINS\": \"Nudge Wins\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Premio con multiplicador\",\n\t\t\"GH_MODIFIER_WIN\": \"Premio con modificador\",\n\t\t\"GH_BONUS_WIN\": \"Premio de bonificación\",\n\t\t\"GH_INSTANT_WIN\": \"Premio instantáneo\",\n\t\t\"GH_NO_HISTORY\": \"No hay historial disponible\",\n\t\t\"GH_GAMBLE_WINS\": \"Premios de apuestas\",\n\t\t\"GH_NO_WINS\": \"No hay premios\",\n\t\t\"GH_ROUND_CORRECTION\": \"Corrección por redondeo\",\n\t\t\"GH_LIMITED_WIN\": \"Premio (límite máx)\",\n\t\t\"WIN_EXCHANGE\": \"Precio de los giros gratis\",\n\t\t\"HALF_COLLECT\": \"Mitad de premio recaudado\",\n\t\t\"FULL_COLLECT\": \"Premio total recaudado\",\n\n\t\t\"GH_TABLE_ID\": \"ID de mesa\",\n\t\t\"GH_PLAYER\": \"JUGADOR\",\n\t\t\"GH_BANKER\": \"BANCA\",\n\t\t\"GH_TIE\": \"Empate\",\n\t\t\"GH_PLAYER_PAIR\": \"Par del jugador\",\n\t\t\"GH_BANKER_PAIR\": \"Par de la banca\",\n\t\t\"GH_GAME_WINNER\": \"Ganador\",\n\t\t\"GH_GAME_WINSUM\": \"Suma\",\n\t\t\"GH_GAME_TOTAL\": \"Total\",\n\t\t\"GH_GAME_STAKE\": \"APUESTA\",\n\n\t\t\"GH_SPIN_TITLE\": \"GIRAR\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Giro gratis\",\n\t\t\"GH_RESPINS_TITLE\": \"REGIROS\",\n\n\t\t\"GH_BALL_POSITION\": \"Posición de la bola:\",\n\t\t\"GH_TRIO\": \"Total de la tercia\",\n\t\t\"GH_SPLIT\": \"Total de la división\",\n\t\t\"GH_STREET\": \"Total de la transversal\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Total de la esquina\",\n\t\t\"GH_SIX_LINE\": \"Total de seis líneas\",\n\t\t\"GH_COLUMN\": \"Total de columnas\",\n\t\t\"GH_FIRST_COLUMN\": \"1.ª Columna\",\n\t\t\"GH_SECOND_COLUMN\": \"2.ª Columna\",\n\t\t\"GH_THIRD_COLUMN\": \"3.ª Columna\",\n\t\t\"GH_DOZEN\": \"Total de docenas\",\n\t\t\"GH_FIRST_DOZEN\": \"1.ª 12\",\n\t\t\"GH_SECOND_DOZEN\": \"2.ª 12\",\n\t\t\"GH_THIRD_DOZEN\": \"3.ª 12\",\n\t\t\"GH_STRAIGHT\": \"Total de escalera\",\n\t\t\"GH_COLOR\": \"Total de color\",\n\t\t\"GH_BLACK\": \"Negro\",\n\t\t\"GH_RED\": \"Rojo\",\n\t\t\"GH_EVEN_ODD\": \"Total de par/impar\",\n\t\t\"GH_EVEN\": \"Par\",\n\t\t\"GH_ODD\": \"Impar\",\n\t\t\"GH_SMALL_BIG\": \"Total pequeño/grande\",\n\t\t\"GH_SMALL\": \"Pequeño\",\n\t\t\"GH_BIG\": \"Grande\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"El modo “Échale un vistazo” estaba activo durante esta ronda. Todos los premios y apuestas son en dinero demo.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"La función de rondas gratis estuvo activa durante esta ronda.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Match your numbers\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Reveal sum of 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Match 3 symbols\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Match 3 amounts\",\n\t\t\"SCRATCH_FREE_CARD\": \"Free ticket\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\thr: {\n\t\t\"TOTAL_COINS_WIN\": \"Total coins win\",\n\t\t\"GH_HISTORY\": \"Povijest\",\n\t\t\"GH_GAME_DETAILS\": \"Detalji igre\",\n\t\t\"GH_GAME_ID\": \"ID igre\",\n\t\t\"GH_ROUND_ID\": \"ID runde\",\n\t\t\"GH_SERVER_TIME_START\": \"Vrijeme na poslužitelju na početku\",\n\t\t\"GH_SERVER_TIME_END\": \"Vrijeme na poslužitelju na kraju\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Načini za dobitak\",\n\t\t\"GH_LENGTH\": \"Duljina dobitka simbola\",\n\t\t\"GH_MULTIPLIER\": \"Množitelj\",\n\t\t\"GH_WIN_WAYS\": \"Načini za dobitak\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Niz\",\n\t\t\"GH_CLUSTER_COUNT\": \"Broj simbola\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Dobitak Rasprskavajućeg simbola\",\n\n\t\t\"GH_HANDS\": \"Ruke\",\n\t\t\"GH_SIDE_BETS\": \"Dodatni ulozi\",\n\n\t\t\"HAND_0\": \"Ruka [1]\",\n\t\t\"HAND_0_SIDE_0\": \"Ruka [1] Dodatna oklada - 21+3\",\n\t\t\"HAND_0_SIDE_1\": \"Ruka [1] Dodatna oklada - Bilo koji par\",\n\t\t\"HAND_0_SIDE_2\": \"Ruka [1] Dodatna oklada - Bustorama\",\n\n\t\t\"HAND_0_SPLIT_0\": \"Ruka [1] (Podijeljeno)\",\n\t\t\"HAND_1\": \"Ruka [2]\",\n\t\t\"HAND_1_SPLIT_0\": \"Ruka [2] (Podijeljeno)\",\n\t\t\"HAND_1_SIDE_0\": \"Ruka [2] Dodatna oklada - 21+3\",\n\t\t\"HAND_1_SIDE_1\": \"Ruka [2] Dodatna oklada - Bilo koji par\",\n\t\t\"HAND_1_SIDE_2\": \"Ruka [2] Dodatna oklada - Bustorama\",\n\n\t\t\"HAND_2\": \"Ruka [3]\",\n\t\t\"HAND_2_SPLIT_0\": \"Ruka [3] (Podijeljeno)\",\n\t\t\"HAND_2_SIDE_0\": \"Ruka [3] Dodatna oklada - 21+3\",\n\t\t\"HAND_2_SIDE_1\": \"Ruka [3] Dodatna oklada - Bilo koji par\",\n\t\t\"HAND_2_SIDE_2\": \"Ruka [3] Dodatna oklada - Bustorama\",\n\n\t\t\"INSURANCE_HAND_0\": \"Ruka [1] (Osiguranje)\",\n\t\t\"INSURANCE_HAND_1\": \"Ruka [2] (Osiguranje)\",\n\t\t\"INSURANCE_HAND_2\": \"Ruka [3] (Osiguranje)\",\n\t\t\"DEALER\": \"Djelitelj\",\n\t\t\"ANTE\": \"Ante\",\n\t\t\"ANTE_BONUS\": \"Ante bonus\",\n\t\t\"PAIR_BONUS\": \"Parni bonus\",\n\t\t\"PLAY\": \"Igraj\",\n\n\t\t\"STAKE\": \"Ulog\",\n\t\t\"INSURANCE\": 'Osiguranje',\n\n\t\t\"GH_TRANSACTIONS\": \"Transakcije\",\n\t\t\"GH_TOTAL_STAKE\": \"Ukupan ulog\",\n\t\t\"GH_TOTAL_BET\": \"Ukupan ulog\",\n\t\t\"GH_TOTAL_WIN\": \"Ukupan dobitak\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Cijena značajke „Kupi“\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Ime značajke „Kupi“\",\n\t\t\"GH_BEFORE_STAKE\": \"prije uloga\",\n\t\t\"GH_AFTER_STAKE\": \"poslije uloga\",\n\t\t\"GH_AT_END\": \"na kraju\",\n\t\t\"GH_BALANCE\": \"Glavni saldo\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Bonus saldo\",\n\t\t\"GH_SESSION_BALANCE\": \"Saldo sesije\",\n\t\t\"GH_SESSION_FREEBETS\": \"Bonus saldo sesije\",\n\t\t\"GH_BONUS\": \"Bonus\",\n\n\t\t\"GH_WIN_DETAILS\": \"Detalji dobitka\",\n\t\t\"GH_SPIN_DETAILS\": \"Detalji okretanja\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Dodatni detalji\",\n\t\t\"GH_GAME_RESULTS\": \"Rezultati igre\",\n\t\t\"GH_INITIAL_SPIN\": \"Početno okretanje\",\n\t\t\"GH_JACKPOT_WIN\": \"Jackpot dobitak\",\n\t\t\"GH_SYMBOL_WINS\": \"Dobici Simbola\",\n\t\t\"GH_LINE\": \"Linija\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Dobici besplatnih okretanja\",\n\t\t\"GH_FREE_SPIN\": \"Besplatno okretanje\",\n\t\t\"GH_RESPIN\": \"Ponovno okretanje\",\n\t\t\"GH_RESPIN_WINS\": \"Dobici ponovnog okretanja\",\n\t\t\"GH_NUDGE\": \"Poguravanje\",\n\t\t\"GH_NUDGE_WINS\": \"Nudge dobici\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Dobitak množitelja\",\n\t\t\"GH_MODIFIER_WIN\": \"Dobici modifikatora\",\n\t\t\"GH_BONUS_WIN\": \"Bonus dobitak\",\n\t\t\"GH_INSTANT_WIN\": \"Trenutačni dobitak\",\n\t\t\"GH_NO_HISTORY\": \"Povijest nije dostupna\",\n\t\t\"GH_GAMBLE_WINS\": \"Dobici kockanja\",\n\t\t\"GH_NO_WINS\": \"Bez dobitaka\",\n\t\t\"GH_ROUND_CORRECTION\": \"Korekcija zaokruživanja\",\n\t\t\"GH_LIMITED_WIN\": \"Dobitak (maksimalni limit)\",\n\t\t\"WIN_EXCHANGE\": \"Cijena Gratis vrtnji\",\n\t\t\"HALF_COLLECT\": \"Prikupljeno pola dobitka\",\n\t\t\"FULL_COLLECT\": \"Cijeli dobitak prikupljen\",\n\n\t\t\"GH_TABLE_ID\": \"ID stola\",\n\t\t\"GH_PLAYER\": \"IGRAČ\",\n\t\t\"GH_BANKER\": \"BANKA\",\n\t\t\"GH_TIE\": \"Neriješeno\",\n\t\t\"GH_PLAYER_PAIR\": \"Igračev par\",\n\t\t\"GH_BANKER_PAIR\": \"Bankin par\",\n\t\t\"GH_GAME_WINNER\": \"Dobitnik\",\n\t\t\"GH_GAME_WINSUM\": \"Zbroj\",\n\t\t\"GH_GAME_TOTAL\": \"Ukupno\",\n\t\t\"GH_GAME_STAKE\": \"Ulog\",\n\n\t\t\"GH_SPIN_TITLE\": \"Okretanje\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Besplatna okretanja\",\n\t\t\"GH_RESPINS_TITLE\": \"Ponovna okretanja\",\n\n\t\t\"GH_BALL_POSITION\": \"Položaj kuglice:\",\n\t\t\"GH_TRIO\": \"Trio\",\n\t\t\"GH_SPLIT\": \"Razdvajanje\",\n\t\t\"GH_STREET\": \"Red\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Kut\",\n\t\t\"GH_SIX_LINE\": \"Linija od šest\",\n\t\t\"GH_COLUMN\": \"Stupac\",\n\t\t\"GH_FIRST_COLUMN\": \"Prvi stupac\",\n\t\t\"GH_SECOND_COLUMN\": \"Drugi stupac\",\n\t\t\"GH_THIRD_COLUMN\": \"Treći stupac\",\n\t\t\"GH_DOZEN\": \"Tucet\",\n\t\t\"GH_FIRST_DOZEN\": \"Prvih 12\",\n\t\t\"GH_SECOND_DOZEN\": \"Drugih 12\",\n\t\t\"GH_THIRD_DOZEN\": \"Trećih 12\",\n\t\t\"GH_STRAIGHT\": \"Broj\",\n\t\t\"GH_COLOR\": \"Boja\",\n\t\t\"GH_BLACK\": \"Crno\",\n\t\t\"GH_RED\": \"Crveno\",\n\t\t\"GH_EVEN_ODD\": \"Par/Nepar\",\n\t\t\"GH_EVEN\": \"Par\",\n\t\t\"GH_ODD\": \"Nepar\",\n\t\t\"GH_SMALL_BIG\": \"Mali/Veliki\",\n\t\t\"GH_SMALL\": \"Mali\",\n\t\t\"GH_BIG\": \"Veliki\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Duplázás\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Ponuda prihvaćena\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Kratki pregled je bio aktivan za ovaj krug. Za sve dobitke i oklade korišten je demo novac.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"U ovoj rundi bila je aktivna značajka Gratis runde.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Match your numbers\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Reveal sum of 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Match 3 symbols\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Match 3 amounts\",\n\t\t\"SCRATCH_FREE_CARD\": \"Free ticket\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\thu: {\n\t\t\"TOTAL_COINS_WIN\": \"Total coins win\",\n\t\t\"GH_HISTORY\": \"Előzmények\",\n\t\t\"GH_GAME_DETAILS\": \"Játékadatok\",\n\t\t\"GH_GAME_ID\": \"Játékazonosító\",\n\t\t\"GH_ROUND_ID\": \"Fordulóazonosító\",\n\t\t\"GH_SERVER_TIME_START\": \"Szerveridő kezdete\",\n\t\t\"GH_SERVER_TIME_END\": \"Szerveridő vége\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Nyerőutak\",\n\t\t\"GH_LENGTH\": \"Szimbólumnyeremény hossza\",\n\t\t\"GH_MULTIPLIER\": \"Szorzó\",\n\t\t\"GH_WIN_WAYS\": \"Nyerőutak\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Cluster\",\n\t\t\"GH_CLUSTER_COUNT\": \"Symbol count\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Scatter-nyeremény\",\n\n\t\t\"GH_HANDS\": \"Leosztások\",\n\t\t\"GH_SIDE_BETS\": \"Melléktétek\",\n\n\t\t\"HAND_0\": \"Leosztás [1]\",\n\t\t\"HAND_0_SPLIT_0\": \"Leosztás [1] (Split)\",\n\t\t\"HAND_1\": \"Leosztás [2]\",\n\t\t\"HAND_1_SPLIT_0\": \"Leosztás [2] (Split)\",\n\t\t\"HAND_2\": \"Leosztás [3]\",\n\t\t\"HAND_2_SPLIT_0\": \"Leosztás [3] (Split)\",\n\t\t\"INSURANCE_HAND_0\": \"Leosztás [1] (Biztosítás)\",\n\t\t\"INSURANCE_HAND_1\": \"Leosztás [2] (Biztosítás)\",\n\t\t\"INSURANCE_HAND_2\": \"Leosztás [3] (Biztosítás)\",\n\t\t\"DEALER\": \"Osztó\",\n\n\t\t\"STAKE\": \"Tét\",\n\t\t\"INSURANCE\": 'Biztosítás',\n\n\t\t\"GH_TRANSACTIONS\": \"Tranzakciók\",\n\t\t\"GH_TOTAL_STAKE\": \"Összes tét\",\n\t\t\"GH_TOTAL_BET\": \"Módosító nyeremény\",\n\t\t\"GH_TOTAL_WIN\": \"Teljes nyeremény\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Funkcióvásárlás ára\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Funkcióvásárlás neve\",\n\t\t\"GH_BEFORE_STAKE\": \"tét előtt\",\n\t\t\"GH_AFTER_STAKE\": \"tét után\",\n\t\t\"GH_AT_END\": \"a végén\",\n\t\t\"GH_BALANCE\": \"Főegyenleg\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Bónuszegyenleg\",\n\t\t\"GH_SESSION_BALANCE\": \"Aktuális belépés egyenlege\",\n\t\t\"GH_SESSION_FREEBETS\": \"Aktuális belépés bónuszegyenlege\",\n\t\t\"GH_BONUS\": \"Bónusz\",\n\n\t\t\"GH_WIN_DETAILS\": \"Nyeremény részletei\",\n\t\t\"GH_SPIN_DETAILS\": \"Pörgetés részletei\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"További részletek\",\n\t\t\"GH_GAME_RESULTS\": \"Game Results\",\n\t\t\"GH_INITIAL_SPIN\": \"Kezdeti pörgetés\",\n\t\t\"GH_JACKPOT_WIN\": \"Jackpot nyeremény\",\n\t\t\"GH_SYMBOL_WINS\": \"Szimbólumnyeremények\",\n\t\t\"GH_LINE\": \"Vonal\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Ingyenes pörgetések nyereményei\",\n\t\t\"GH_FREE_SPIN\": \"Ingyenes pörgetés\",\n\t\t\"GH_RESPIN\": \"Újrapörgetés\",\n\t\t\"GH_RESPIN_WINS\": \"Újrapörgetés nyereményei\",\n\t\t\"GH_NUDGE\": \"Bökés\",\n\t\t\"GH_NUDGE_WINS\": \"Bökés nyeremények\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Szorzónyeremény\",\n\t\t\"GH_MODIFIER_WIN\": \"Módosító nyeremény\",\n\t\t\"GH_BONUS_WIN\": \"Bónusznyeremény\",\n\t\t\"GH_INSTANT_WIN\": \"Azonnali nyeremény\",\n\t\t\"GH_NO_HISTORY\": \"Nincs elérhető előzmény\",\n\t\t\"GH_GAMBLE_WINS\": \"Kockáztatás nyereményei\",\n\t\t\"GH_NO_WINS\": \"Nincs nyeremény\",\n\t\t\"GH_ROUND_CORRECTION\": \"Kerekítési korrekció\",\n\t\t\"GH_LIMITED_WIN\": \"Nyeremény (max limit)\",\n\t\t\"WIN_EXCHANGE\": \"Az ingyenes pörgetések ára\",\n\t\t\"HALF_COLLECT\": \"Felvetted a nyeremény felét\",\n\t\t\"FULL_COLLECT\": \"Felvetted a teljes nyereményt\",\n\n\t\t\"GH_TABLE_ID\": \"Asztalazonosító\",\n\t\t\"GH_PLAYER\": \"Játékos\",\n\t\t\"GH_BANKER\": \"Bank\",\n\t\t\"GH_TIE\": \"Egál\",\n\t\t\"GH_PLAYER_PAIR\": \"Játékos pár\",\n\t\t\"GH_BANKER_PAIR\": \"Bank pár\",\n\t\t\"GH_GAME_WINNER\": \"Nyertes\",\n\t\t\"GH_GAME_WINSUM\": \"Összeg\",\n\t\t\"GH_GAME_TOTAL\": \"Összesen\",\n\t\t\"GH_GAME_STAKE\": \"Tét\",\n\n\t\t\"GH_SPIN_TITLE\": \"TOČIŤ\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"INGYENES PÖRGETÉSEK\",\n\t\t\"GH_RESPINS_TITLE\": \"ÚJRAPÖRGETÉSEK\",\n\n\t\t\"GH_BALL_POSITION\": \"Golyó helyzete:\",\n\t\t\"GH_TRIO\": \"Trio\",\n\t\t\"GH_SPLIT\": \"Split\",\n\t\t\"GH_STREET\": \"Street\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Corner\",\n\t\t\"GH_SIX_LINE\": \"Six Line\",\n\t\t\"GH_COLUMN\": \"Oszlop\",\n\t\t\"GH_FIRST_COLUMN\": \"1. oszlop\",\n\t\t\"GH_SECOND_COLUMN\": \"2. oszlop\",\n\t\t\"GH_THIRD_COLUMN\": \"3. oszlop\",\n\t\t\"GH_DOZEN\": \"Tucat\",\n\t\t\"GH_FIRST_DOZEN\": \"Első 12 szám\",\n\t\t\"GH_SECOND_DOZEN\": \"Második tucatra\",\n\t\t\"GH_THIRD_DOZEN\": \"Harmadik tucatra\",\n\t\t\"GH_STRAIGHT\": \"Egy számra\",\n\t\t\"GH_COLOR\": \"Szín\",\n\t\t\"GH_BLACK\": \"Fekete\",\n\t\t\"GH_RED\": \"Piros\",\n\t\t\"GH_EVEN_ODD\": \"Páros/páratlan\",\n\t\t\"GH_EVEN\": \"Páros\",\n\t\t\"GH_ODD\": \"Páratlan\",\n\t\t\"GH_SMALL_BIG\": \"1-18/19-36\",\n\t\t\"GH_SMALL\": \"1-18\",\n\t\t\"GH_BIG\": \"19-36\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Duplázás\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Ajánlat elfogadva\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Az ízelítő aktív a jelenlegi menethez. Az összes nyeremény és fogadás demó pénzben értendő.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"Ebben a körben aktívak voltak az ingyenkörök.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Match your numbers\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Reveal sum of 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Match 3 symbols\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Match 3 amounts\",\n\t\t\"SCRATCH_FREE_CARD\": \"Free ticket\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tsk: {\n\t\t\"TOTAL_COINS_WIN\": \"Total coins win\",\n\t\t\"GH_HISTORY\": \"História\",\n\t\t\"GH_GAME_DETAILS\": \"Podrobnosti o hre\",\n\t\t\"GH_GAME_ID\": \"ID hry\",\n\t\t\"GH_ROUND_ID\": \"ID Kola\",\n\t\t\"GH_SERVER_TIME_START\": \"Serverový čas začatia\",\n\t\t\"GH_SERVER_TIME_END\": \"Serverový čas ukončenia\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Možnosti výhry\",\n\t\t\"GH_LENGTH\": \"Dĺžka výhry za symboly\",\n\t\t\"GH_MULTIPLIER\": \"Násobiteľ\",\n\t\t\"GH_WIN_WAYS\": \"Možnosti výhry\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Zhluk\",\n\t\t\"GH_CLUSTER_COUNT\": \"Počet symbolov\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Scatter výhra\",\n\n\t\t\"GH_HANDS\": \"Karty v rukách\",\n\t\t\"GH_SIDE_BETS\": \"Bočné stávky\",\n\n\t\t\"HAND_0\": \"Ruka [1]\",\n\t\t\"HAND_0_SPLIT_0\": \"Ruka [1] (Rozdelenie)\",\n\t\t\"HAND_1\": \"Ruka [2]\",\n\t\t\"HAND_1_SPLIT_0\": \"Ruka [2] (Rozdelenie)\",\n\t\t\"HAND_2\": \"Ruka [3]\",\n\t\t\"HAND_2_SPLIT_0\": \"Ruka [3] (Rozdelenie)\",\n\t\t\"INSURANCE_HAND_0\": \"Ruka [1] (Poistenie)\",\n\t\t\"INSURANCE_HAND_1\": \"Ruka [2] (Poistenie)\",\n\t\t\"INSURANCE_HAND_2\": \"Ruka [3] (Poistenie)\",\n\t\t\"DEALER\": \"Bankár\",\n\n\t\t\"STAKE\": \"Stávka\",\n\t\t\"INSURANCE\": 'Poistenie',\n\n\t\t\"GH_TRANSACTIONS\": \"Transakcie\",\n\t\t\"GH_TOTAL_STAKE\": \"Celková stávka\",\n\t\t\"GH_TOTAL_BET\": \"Celková stávka\",\n\t\t\"GH_TOTAL_WIN\": \"Celková výhra\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Cena kúpy funkcie\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Meno kúpy funkcie\",\n\t\t\"GH_BEFORE_STAKE\": \"pred stávkou\",\n\t\t\"GH_AFTER_STAKE\": \"po stávke\",\n\t\t\"GH_AT_END\": \"na konci\",\n\t\t\"GH_BALANCE\": \"Hlavný zostatok\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Bonusový zostatok\",\n\t\t\"GH_SESSION_BALANCE\": \"Zostatok partie\",\n\t\t\"GH_SESSION_FREEBETS\": \"Zostatok bonusovej partie\",\n\t\t\"GH_BONUS\": \"Bonus\",\n\n\t\t\"GH_WIN_DETAILS\": \"Podrobnosti o výhre\",\n\t\t\"GH_SPIN_DETAILS\": \"Podrobnosti o spine\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Dodatočné detaily\",\n\t\t\"GH_GAME_RESULTS\": \"Výsledky hier\",\n\t\t\"GH_INITIAL_SPIN\": \"Úvodný spin\",\n\t\t\"GH_JACKPOT_WIN\": \"Výhra jackpotu\",\n\t\t\"GH_SYMBOL_WINS\": \"Výhry za symboly\",\n\t\t\"GH_LINE\": \"Línia\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Výhry počas free spinov\",\n\t\t\"GH_FREE_SPIN\": \"Free spin\",\n\t\t\"GH_RESPIN\": \"Respin\",\n\t\t\"GH_RESPIN_WINS\": \"Výhry počas respinov\",\n\t\t\"GH_NUDGE\": \"Štuchnutie\",\n\t\t\"GH_NUDGE_WINS\": \"Výhry so štuchnutiami\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Výhra s násobiteľom\",\n\t\t\"GH_MODIFIER_WIN\": \"Výhra s modifikátorom\",\n\t\t\"GH_BONUS_WIN\": \"Bonusová výhra\",\n\t\t\"GH_INSTANT_WIN\": \"Okamžitá výhra\",\n\t\t\"GH_NO_HISTORY\": \"K dispozícii nie je žiadna história\",\n\t\t\"GH_GAMBLE_WINS\": \"Hazardné výhry\",\n\t\t\"GH_NO_WINS\": \"Žiadne výhry\",\n\t\t\"GH_ROUND_CORRECTION\": \"Korekcia zaokrúhlenia\",\n\t\t\"GH_LIMITED_WIN\": \"Výhra (max. limit)\",\n\t\t\"WIN_EXCHANGE\": \"Cena točení zdarma\",\n\t\t\"HALF_COLLECT\": \"Získaná polovičná výhra\",\n\t\t\"FULL_COLLECT\": \"Získaná plná výhra\",\n\n\t\t\"GH_TABLE_ID\": \"ID stola\",\n\t\t\"GH_PLAYER\": \"Hráč\",\n\t\t\"GH_BANKER\": \"Bankár\",\n\t\t\"GH_TIE\": \"Remíza\",\n\t\t\"GH_PLAYER_PAIR\": \"Hráč – pár:\",\n\t\t\"GH_BANKER_PAIR\": \"Krupiér – pár:\",\n\t\t\"GH_GAME_WINNER\": \"Víťaz\",\n\t\t\"GH_GAME_WINSUM\": \"Súčet\",\n\t\t\"GH_GAME_TOTAL\": \"Spolu\",\n\t\t\"GH_GAME_STAKE\": \"Stávka\",\n\n\t\t\"GH_SPIN_TITLE\": \"TOČIŤ\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Free Spiny\",\n\t\t\"GH_RESPINS_TITLE\": \"RESPINY\",\n\n\t\t\"GH_BALL_POSITION\": \"Pozícia guličky:\",\n\t\t\"GH_TRIO\": \"Tri čísla\",\n\t\t\"GH_SPLIT\": \"Dve čísla\",\n\t\t\"GH_STREET\": \"Riadok\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Roh\",\n\t\t\"GH_SIX_LINE\": \"Šesť riadkov\",\n\t\t\"GH_COLUMN\": \"Stĺpec\",\n\t\t\"GH_FIRST_COLUMN\": \"1. stĺpec\",\n\t\t\"GH_SECOND_COLUMN\": \"2. stĺpec\",\n\t\t\"GH_THIRD_COLUMN\": \"3. stĺpec\",\n\t\t\"GH_DOZEN\": \"Tucet\",\n\t\t\"GH_FIRST_DOZEN\": \"1. tucet\",\n\t\t\"GH_SECOND_DOZEN\": \"2. tucet\",\n\t\t\"GH_THIRD_DOZEN\": \"3. tucet\",\n\t\t\"GH_STRAIGHT\": \"Priame stávky\",\n\t\t\"GH_COLOR\": \"Farba\",\n\t\t\"GH_BLACK\": \"Čierna\",\n\t\t\"GH_RED\": \"Červená\",\n\t\t\"GH_EVEN_ODD\": \"Párne/Nepárne\",\n\t\t\"GH_EVEN\": \"Párne\",\n\t\t\"GH_ODD\": \"Nepárne\",\n\t\t\"GH_SMALL_BIG\": \"Malé/veľké čísla\",\n\t\t\"GH_SMALL\": \"Malé\",\n\t\t\"GH_BIG\": \"Veľké\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Sneak peek bol pre toto kolo aktívny. Všetky výhry a stávky sú demo peniaze.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"V tomto kole boli aktívne kolá zdarma.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Match your numbers\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Reveal sum of 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Match 3 symbols\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Match 3 amounts\",\n\t\t\"SCRATCH_FREE_CARD\": \"Free ticket\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Zdvojnásobiť stávku\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Ponuka bola prijatá\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\t},\n\tsl: {\n\t\t\"TOTAL_COINS_WIN\": \"Total coins win\",\n\t\t\"GH_HISTORY\": \"Zgodovina\",\n\t\t\"GH_GAME_DETAILS\": \"Podrobnosti igre\",\n\t\t\"GH_GAME_ID\": \"ID igre\",\n\t\t\"GH_ROUND_ID\": \"ID Kroga\",\n\t\t\"GH_SERVER_TIME_START\": \"Začetni čas strežnika\",\n\t\t\"GH_SERVER_TIME_END\": \"Končni čas strežnika\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Načini dobitkov\",\n\t\t\"GH_LENGTH\": \"Dolžina dobitka s simboli\",\n\t\t\"GH_MULTIPLIER\": \"Večkratnik\",\n\t\t\"GH_WIN_WAYS\": \"Načini dobitkov\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Sveženj\",\n\t\t\"GH_CLUSTER_COUNT\": \"Število simbolov\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Razpršeni dobitek\",\n\n\t\t\"GH_HANDS\": \"Kombinacije kart\",\n\t\t\"GH_SIDE_BETS\": \"Stranske stave\",\n\n\t\t\"HAND_0\": \"Kombinacije kart [1]\",\n\t\t\"HAND_0_SPLIT_0\": \"Kombinacije kart [1] (Razdeljeno)\",\n\t\t\"HAND_1\": \"Kombinacije kart [2]\",\n\t\t\"HAND_1_SPLIT_0\": \"Kombinacije kart [2] (Razdeljeno)\",\n\t\t\"HAND_2\": \"Kombinacije kart [3]\",\n\t\t\"HAND_2_SPLIT_0\": \"Kombinacije kart [3] (Razdeljeno)\",\n\t\t\"INSURANCE_HAND_0\": \"Kombinacije kart [1] (Zavarovanje)\",\n\t\t\"INSURANCE_HAND_1\": \"Kombinacije kart [2] (Zavarovanje)\",\n\t\t\"INSURANCE_HAND_2\": \"Kombinacije kart [3] (Zavarovanje)\",\n\t\t\"DEALER\": \"Delilec\",\n\n\t\t\"STAKE\": \"Vložek\",\n\t\t\"INSURANCE\": 'Zavarovanje',\n\n\t\t\"GH_TRANSACTIONS\": \"Transakcije\",\n\t\t\"GH_TOTAL_STAKE\": \"Skupni vložek\",\n\t\t\"GH_TOTAL_BET\": \"Skupna stava\",\n\t\t\"GH_TOTAL_WIN\": \"Skupni dobitek\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Cena nakupa funkcije\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Ime nakupa funkcije\",\n\t\t\"GH_BEFORE_STAKE\": \"pred stavo\",\n\t\t\"GH_AFTER_STAKE\": \"po stavi\",\n\t\t\"GH_AT_END\": \"na koncu\",\n\t\t\"GH_BALANCE\": \"Glavno stanje\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Stanje bonusa\",\n\t\t\"GH_SESSION_BALANCE\": \"Stanje seje\",\n\t\t\"GH_SESSION_FREEBETS\": \"Stanje bonusa seje\",\n\t\t\"GH_BONUS\": \"Bonus\",\n\n\t\t\"GH_WIN_DETAILS\": \"Podrobnosti o dobitku\",\n\t\t\"GH_SPIN_DETAILS\": \"Podrobnosti o vrtenju\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Dodatne podrobnosti\",\n\t\t\"GH_GAME_RESULTS\": \"Game Results\",\n\t\t\"GH_INITIAL_SPIN\": \"Začetno vrtenje\",\n\t\t\"GH_JACKPOT_WIN\": \"Dobitek Jackpot\",\n\t\t\"GH_SYMBOL_WINS\": \"Dobitki Simbolov\",\n\t\t\"GH_LINE\": \"Vrstica\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Dobitki pri brezplačnih vrtenjih\",\n\t\t\"GH_FREE_SPIN\": \"Brezplačno vrtenje\",\n\t\t\"GH_RESPIN\": \"Ponovno vrtenje\",\n\t\t\"GH_RESPIN_WINS\": \"Dobitki s ponovnim vrtenjem\",\n\t\t\"GH_NUDGE\": \"Dregni\",\n\t\t\"GH_NUDGE_WINS\": \"Dobitki z dregljajem\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Dobitek z množiteljem\",\n\t\t\"GH_MODIFIER_WIN\": \"Dobitek s spreminjevalcem\",\n\t\t\"GH_BONUS_WIN\": \"Bonusni dobitek\",\n\t\t\"GH_INSTANT_WIN\": \"Takojšnji dobitek\",\n\t\t\"GH_NO_HISTORY\": \"Zgodovina ni na voljo\",\n\t\t\"GH_GAMBLE_WINS\": \"Dobitki pri tveganju\",\n\t\t\"GH_NO_WINS\": \"Brez dobitkov\",\n\t\t\"GH_ROUND_CORRECTION\": \"Popravek zaokrožanja\",\n\t\t\"GH_LIMITED_WIN\": \"Dobitek (maks. limit)\",\n\t\t\"WIN_EXCHANGE\": \"Cena zastonj vrtenj\",\n\t\t\"HALF_COLLECT\": \"Zbran prepolovljen dobitek\",\n\t\t\"FULL_COLLECT\": \"Zbran celoten dobitek\",\n\n\t\t\"GH_TABLE_ID\": \"ID plošče\",\n\t\t\"GH_PLAYER\": \"Igralec\",\n\t\t\"GH_BANKER\": \"Bankir\",\n\t\t\"GH_TIE\": \"Neodločeno\",\n\t\t\"GH_PLAYER_PAIR\": \"Igralčev par\",\n\t\t\"GH_BANKER_PAIR\": \"Bankirjev par\",\n\t\t\"GH_GAME_WINNER\": \"Dobitnik\",\n\t\t\"GH_GAME_WINSUM\": \"Vsota\",\n\t\t\"GH_GAME_TOTAL\": \"Skupaj\",\n\t\t\"GH_GAME_STAKE\": \"VložeK\",\n\n\t\t\"GH_SPIN_TITLE\": \"ZAVRTI\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"BREZPLAČNA VRTENJA\",\n\t\t\"GH_RESPINS_TITLE\": \"PONOVNA VRTENJA\",\n\n\t\t\"GH_BALL_POSITION\": \"Položaj kroglice:\",\n\t\t\"GH_TRIO\": \"Trio\",\n\t\t\"GH_SPLIT\": \"Razdeli\",\n\t\t\"GH_STREET\": \"Ulica\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Vogal\",\n\t\t\"GH_SIX_LINE\": \"Šest v vrsti\",\n\t\t\"GH_COLUMN\": \"Stolpec\",\n\t\t\"GH_FIRST_COLUMN\": \"1. stolpec\",\n\t\t\"GH_SECOND_COLUMN\": \"2. stolpec\",\n\t\t\"GH_THIRD_COLUMN\": \"3. stolpec\",\n\t\t\"GH_DOZEN\": \"Ducat\",\n\t\t\"GH_FIRST_DOZEN\": \"Prvih 12\",\n\t\t\"GH_SECOND_DOZEN\": \"Drugih 12\",\n\t\t\"GH_THIRD_DOZEN\": \"3Tretjih 12\",\n\t\t\"GH_STRAIGHT\": \"Lestvica\",\n\t\t\"GH_COLOR\": \"Barva\",\n\t\t\"GH_BLACK\": \"Črna\",\n\t\t\"GH_RED\": \"Rdeča\",\n\t\t\"GH_EVEN_ODD\": \"Par/Nepar\",\n\t\t\"GH_EVEN\": \"Par\",\n\t\t\"GH_ODD\": \"Nepar\",\n\t\t\"GH_SMALL_BIG\": \"Mala/Velika\",\n\t\t\"GH_SMALL\": \"Mala\",\n\t\t\"GH_BIG\": \"Velika\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Sneak peek je bil aktiven za to serijo. Vsi dobitki in stave so navidezni denar.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"V tej seriji so bile aktivne zastonj serije.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Match your numbers\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Reveal sum of 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Match 3 symbols\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Match 3 amounts\",\n\t\t\"SCRATCH_FREE_CARD\": \"Free ticket\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Podvojena stava\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\t},\n\thi: {\n\t\t\"TOTAL_COINS_WIN\": \"Total coins win\",\n\t\t\"GH_HISTORY\": \"हिस् ट्री\",\n\t\t\"GH_GAME_DETAILS\": \"गेम का विवरण\",\n\t\t\"GH_GAME_ID\": \"गेम ID\",\n\t\t\"GH_ROUND_ID\": \"राउंड ID\",\n\t\t\"GH_SERVER_TIME_START\": \"सर्वर समय शुरू\",\n\t\t\"GH_SERVER_TIME_END\": \"सर्वर समय समाप् त\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"जीत के तरीके\",\n\t\t\"GH_LENGTH\": \"सिंबल विन की लंबाई\",\n\t\t\"GH_MULTIPLIER\": \"मल् टीप् लायर\",\n\t\t\"GH_WIN_WAYS\": \"जीत के तरीके\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"क् लस् टर\",\n\t\t\"GH_CLUSTER_COUNT\": \"सिंबल काउंट\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"स्कैटर विन\",\n\n\t\t\"GH_HANDS\": \"Hands\",\n\t\t\"GH_SIDE_BETS\": \"Side bets\",\n\n\t\t\"HAND_0\": \"Hand [1]\",\n\t\t\"HAND_0_SPLIT_0\": \"Hand [1] (Split)\",\n\t\t\"HAND_1\": \"Hand [2]\",\n\t\t\"HAND_1_SPLIT_0\": \"Hand [2] (Split)\",\n\t\t\"HAND_2\": \"Hand [3]\",\n\t\t\"HAND_2_SPLIT_0\": \"Hand [3] (Split)\",\n\t\t\"INSURANCE_HAND_0\": \"Hand [1] (Insurance)\",\n\t\t\"INSURANCE_HAND_1\": \"Hand [2] (Insurance)\",\n\t\t\"INSURANCE_HAND_2\": \"Hand [3] (Insurance)\",\n\t\t\"DEALER\": \"Dealer\",\n\n\t\t\"STAKE\": \"Stake\",\n\t\t\"INSURANCE\": 'Insurance',\n\n\t\t\"GH_TRANSACTIONS\": \"लेन-देन\",\n\t\t\"GH_TOTAL_STAKE\": \"कुल दांव\",\n\t\t\"GH_TOTAL_BET\": \"कुल बेट\",\n\t\t\"GH_TOTAL_WIN\": \"कुल जीत\",\n\t\t\"GH_FEATURE_BUY_COST\": \"फीचर खरीदें मूल्य\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"फीचर खरीदें नाम\",\n\t\t\"GH_BEFORE_STAKE\": \"दांव से पहले\",\n\t\t\"GH_AFTER_STAKE\": \"दांव के बाद\",\n\t\t\"GH_AT_END\": \"अंत में\",\n\t\t\"GH_BALANCE\": \"मुख् य शेष राशि (बैलेंस)\",\n\t\t\"GH_FREEBETS_BALANCE\": \"शेष बोनस\",\n\t\t\"GH_SESSION_BALANCE\": \"शेष सेशन\",\n\t\t\"GH_SESSION_FREEBETS\": \"सेशन बोनस बैलेंस\",\n\t\t\"GH_BONUS\": \"बोनस\",\n\n\t\t\"GH_WIN_DETAILS\": \"जीत का विवरण\",\n\t\t\"GH_SPIN_DETAILS\": \"स्पिन का विवरण\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"अतिरिक्त विवरण\",\n\t\t\"GH_GAME_RESULTS\": \"गेम के नजीते\",\n\t\t\"GH_INITIAL_SPIN\": \"प्रारंभिक स्पिन\",\n\t\t\"GH_JACKPOT_WIN\": \"जैकपॉट जीत\",\n\t\t\"GH_SYMBOL_WINS\": \"सिंबल विंस\",\n\t\t\"GH_LINE\": \"लाइन\",\n\t\t\"GH_FREE_SPIN_WINS\": \"मुफ़्त स्पिन् स की जीत\",\n\t\t\"GH_FREE_SPIN\": \"मुफ़्त स्पिन\",\n\t\t\"GH_RESPIN\": \"रीस्पिन\",\n\t\t\"GH_RESPIN_WINS\": \"रीस्पिन् स जीत\",\n\t\t\"GH_NUDGE\": \"झटका देना (हिलाना)\",\n\t\t\"GH_NUDGE_WINS\": \"झटके (हिलाने) से जीत\",\n\t\t\"GH_MULTIPLIER_WINS\": \"मल् टीप् लायर जीत\",\n\t\t\"GH_MODIFIER_WIN\": \"मॉडिफायर विन\",\n\t\t\"GH_BONUS_WIN\": \"बोनस की जीत\",\n\t\t\"GH_INSTANT_WIN\": \"इंस्टेंट जीत\",\n\t\t\"GH_NO_HISTORY\": \"कोई हिस् ट्री उपलब् ध नहीं है\",\n\t\t\"GH_GAMBLE_WINS\": \"गैम् बल में जीत\",\n\t\t\"GH_NO_WINS\": \"कोई जीत नहीं\",\n\t\t\"GH_ROUND_CORRECTION\": \"राउंडिंग करेक् शन\",\n\t\t\"GH_LIMITED_WIN\": \"जीत (अधिकतम सीमा)\",\n\t\t\"WIN_EXCHANGE\": \"मुफ्त स्पिन्स शुल्क\",\n\t\t\"HALF_COLLECT\": \"हॉफ विन कलेक्ट किया गया\",\n\t\t\"FULL_COLLECT\": \"फुल विन कलेक्ट किया गया\",\n\n\t\t\"GH_TABLE_ID\": \"Table ID\",\n\t\t\"GH_PLAYER\": \"Player\",\n\t\t\"GH_BANKER\": \"Banker\",\n\t\t\"GH_TIE\": \"Tie\",\n\t\t\"GH_PLAYER_PAIR\": \"Player Pair\",\n\t\t\"GH_BANKER_PAIR\": \"Banker Pair\",\n\t\t\"GH_GAME_WINNER\": \"Winner\",\n\t\t\"GH_GAME_WINSUM\": \"Sum\",\n\t\t\"GH_GAME_TOTAL\": \"Total\",\n\t\t\"GH_GAME_STAKE\": \"Stake\",\n\n\t\t\"GH_SPIN_TITLE\": \"स्पिन\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"मुफ्त स्पिन् स\",\n\t\t\"GH_RESPINS_TITLE\": \"रीस्पिन् स\",\n\n\t\t\"GH_BALL_POSITION\": \"Ball Position:\",\n\t\t\"GH_TRIO\": \"Trio\",\n\t\t\"GH_SPLIT\": \"Split\",\n\t\t\"GH_STREET\": \"Street\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Corner\",\n\t\t\"GH_SIX_LINE\": \"Six Line\",\n\t\t\"GH_COLUMN\": \"Column\",\n\t\t\"GH_FIRST_COLUMN\": \"1st Column\",\n\t\t\"GH_SECOND_COLUMN\": \"2nd Column\",\n\t\t\"GH_THIRD_COLUMN\": \"3rd Column\",\n\t\t\"GH_DOZEN\": \"Dozen\",\n\t\t\"GH_FIRST_DOZEN\": \"1st 12\",\n\t\t\"GH_SECOND_DOZEN\": \"2nd 12\",\n\t\t\"GH_THIRD_DOZEN\": \"3rd 12\",\n\t\t\"GH_STRAIGHT\": \"Straight\",\n\t\t\"GH_COLOR\": \"Color\",\n\t\t\"GH_BLACK\": \"Black\",\n\t\t\"GH_RED\": \"Red\",\n\t\t\"GH_EVEN_ODD\": \"Even/Odd\",\n\t\t\"GH_EVEN\": \"Even\",\n\t\t\"GH_ODD\": \"Odd\",\n\t\t\"GH_SMALL_BIG\": \"1-18/19-36\",\n\t\t\"GH_SMALL\": \"1-18\",\n\t\t\"GH_BIG\": \"19-36\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"ऑफर स् वीकृत\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"इस राउंड के लिए स् नीक पीक एक्टिव था। सभी जीत और बेट्स डेमो मनी हैं।\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"इस राउंड के लिए मुफ़्त राउंड सक्रिय थे।\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Match your numbers\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Reveal sum of 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Match 3 symbols\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Match 3 amounts\",\n\t\t\"SCRATCH_FREE_CARD\": \"Free card\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tms: {\n\t\t\"TOTAL_COINS_WIN\": \"Total coins win\",\n\t\t\"GH_HISTORY\": \"Sejarah\",\n\t\t\"GH_GAME_DETAILS\": \"Butiran Permainan\",\n\t\t\"GH_GAME_ID\": \"ID Permainan\",\n\t\t\"GH_ROUND_ID\": \"ID Pusingan\",\n\t\t\"GH_SERVER_TIME_START\": \"Masa Pelayan Bermula\",\n\t\t\"GH_SERVER_TIME_END\": \"Masa Pelayan Tamat\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Cara Menang\",\n\t\t\"GH_LENGTH\": \"Kepanjangan Simbol Kemenangan\",\n\t\t\"GH_MULTIPLIER\": \"Pengganda\",\n\t\t\"GH_WIN_WAYS\": \"Cara Menang\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Kluster\",\n\t\t\"GH_CLUSTER_COUNT\": \"Kiraan Simbol\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Kemenangan selerak\",\n\n\t\t\"GH_HANDS\": \"Hands\",\n\t\t\"GH_SIDE_BETS\": \"Side bets\",\n\n\t\t\"HAND_0\": \"Hand [1]\",\n\t\t\"HAND_0_SPLIT_0\": \"Hand [1] (Split)\",\n\t\t\"HAND_1\": \"Hand [2]\",\n\t\t\"HAND_1_SPLIT_0\": \"Hand [2] (Split)\",\n\t\t\"HAND_2\": \"Hand [3]\",\n\t\t\"HAND_2_SPLIT_0\": \"Hand [3] (Split)\",\n\t\t\"INSURANCE_HAND_0\": \"Hand [1] (Insurance)\",\n\t\t\"INSURANCE_HAND_1\": \"Hand [2] (Insurance)\",\n\t\t\"INSURANCE_HAND_2\": \"Hand [3] (Insurance)\",\n\t\t\"DEALER\": \"Dealer\",\n\n\t\t\"STAKE\": \"Stake\",\n\t\t\"INSURANCE\": 'Insurance',\n\n\t\t\"GH_TRANSACTIONS\": \"Transaksi\",\n\t\t\"GH_TOTAL_STAKE\": \"Jumlah Pertaruhan\",\n\t\t\"GH_TOTAL_BET\": \"Jumlah Pertaruhan\",\n\t\t\"GH_TOTAL_WIN\": \"Jumlah Kemenangan\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Harga Ciri Beli\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Nama Ciri Beli\",\n\t\t\"GH_BEFORE_STAKE\": \"sebelum taruhan\",\n\t\t\"GH_AFTER_STAKE\": \"selepas taruhan\",\n\t\t\"GH_AT_END\": \"pada akhir\",\n\t\t\"GH_BALANCE\": \"Baki utama\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Baki bonus\",\n\t\t\"GH_SESSION_BALANCE\": \"Baki sesi\",\n\t\t\"GH_SESSION_FREEBETS\": \"Baki sesi bonus\",\n\t\t\"GH_BONUS\": \"Bonus\",\n\n\t\t\"GH_WIN_DETAILS\": \"Butiran Kemenangan\",\n\t\t\"GH_SPIN_DETAILS\": \"Butiran Putaran\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Butiran Tambahan\",\n\t\t\"GH_GAME_RESULTS\": \"Keputusan Permainan\",\n\t\t\"GH_INITIAL_SPIN\": \"Putaran Permulaan\",\n\t\t\"GH_JACKPOT_WIN\": \"Kemenangan Jackpot\",\n\t\t\"GH_SYMBOL_WINS\": \"Simbol Kemenangan\",\n\t\t\"GH_LINE\": \"Garisan\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Kemenangan Putar Percuma\",\n\t\t\"GH_FREE_SPIN\": \"Putar Percuma\",\n\t\t\"GH_RESPIN\": \"Putar Semula\",\n\t\t\"GH_RESPIN_WINS\": \"Kemenangan Putar Semula\",\n\t\t\"GH_NUDGE\": \"Goncangan\",\n\t\t\"GH_NUDGE_WINS\": \"Kemenangan Goncangan\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Kemenangan Pengganda\",\n\t\t\"GH_MODIFIER_WIN\": \"Pengubah Kemenangan\",\n\t\t\"GH_BONUS_WIN\": \"Kemenangan bonus\",\n\t\t\"GH_INSTANT_WIN\": \"Menang Segera\",\n\t\t\"GH_NO_HISTORY\": \"Tiada sejarah tersedia\",\n\t\t\"GH_GAMBLE_WINS\": \"Kemenangan Taruh\",\n\t\t\"GH_NO_WINS\": \"Tiada kemenangan\",\n\t\t\"GH_ROUND_CORRECTION\": \"Pembetulan pembundaran\",\n\t\t\"GH_LIMITED_WIN\": \"Kemenangan (had maks)\",\n\t\t\"WIN_EXCHANGE\": \"Harga putar percuma\",\n\t\t\"HALF_COLLECT\": \"Separuh daripada kemenangan dikumpulkan\",\n\t\t\"FULL_COLLECT\": \"Kemenangan penuh dikumpulkan\",\n\n\t\t\"GH_TABLE_ID\": \"Table ID\",\n\t\t\"GH_PLAYER\": \"Player\",\n\t\t\"GH_BANKER\": \"Banker\",\n\t\t\"GH_TIE\": \"Tie\",\n\t\t\"GH_PLAYER_PAIR\": \"Player Pair\",\n\t\t\"GH_BANKER_PAIR\": \"Banker Pair\",\n\t\t\"GH_GAME_WINNER\": \"Winner\",\n\t\t\"GH_GAME_WINSUM\": \"Sum\",\n\t\t\"GH_GAME_TOTAL\": \"Total\",\n\t\t\"GH_GAME_STAKE\": \"Stake\",\n\n\t\t\"GH_SPIN_TITLE\": \"PUTAR\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"PUTAR PERCUMA\",\n\t\t\"GH_RESPINS_TITLE\": \"PUTAR SEMULA\",\n\n\t\t\"GH_BALL_POSITION\": \"Ball Position:\",\n\t\t\"GH_TRIO\": \"Trio\",\n\t\t\"GH_SPLIT\": \"Split\",\n\t\t\"GH_STREET\": \"Street\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Corner\",\n\t\t\"GH_SIX_LINE\": \"Six Line\",\n\t\t\"GH_COLUMN\": \"Column\",\n\t\t\"GH_FIRST_COLUMN\": \"1st Column\",\n\t\t\"GH_SECOND_COLUMN\": \"2nd Column\",\n\t\t\"GH_THIRD_COLUMN\": \"3rd Column\",\n\t\t\"GH_DOZEN\": \"Dozen\",\n\t\t\"GH_FIRST_DOZEN\": \"1st 12\",\n\t\t\"GH_SECOND_DOZEN\": \"2nd 12\",\n\t\t\"GH_THIRD_DOZEN\": \"3rd 12\",\n\t\t\"GH_STRAIGHT\": \"Straight\",\n\t\t\"GH_COLOR\": \"Color\",\n\t\t\"GH_BLACK\": \"Black\",\n\t\t\"GH_RED\": \"Red\",\n\t\t\"GH_EVEN_ODD\": \"Even/Odd\",\n\t\t\"GH_EVEN\": \"Even\",\n\t\t\"GH_ODD\": \"Odd\",\n\t\t\"GH_SMALL_BIG\": \"1-18/19-36\",\n\t\t\"GH_SMALL\": \"1-18\",\n\t\t\"GH_BIG\": \"19-36\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Previu telah aktif untuk pusingan ini. Semua kemenangan dan pertaruhan adalah wang demo.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"Pusingan percuma telah aktif untuk pusingan ini.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Match your numbers\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Reveal sum of 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Match 3 symbols\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Match 3 amounts\",\n\t\t\"SCRATCH_FREE_CARD\": \"Free card\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tbg: {\n\t\t\"TOTAL_COINS_WIN\": \"Total coins win\",\n\t\t\"GH_HISTORY\": \"Хронология\",\n\t\t\"GH_GAME_DETAILS\": \"Параметри на Играта\",\n\t\t\"GH_GAME_ID\": \"ИД на Играта\",\n\t\t\"GH_ROUND_ID\": \"ИД на кръга\",\n\t\t\"GH_SERVER_TIME_START\": \"Начало на Сървърно Време\",\n\t\t\"GH_SERVER_TIME_END\": \"Край на Сървърно Време\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Печеливши линии\",\n\t\t\"GH_LENGTH\": \"Дължина на Печеливш Символ\",\n\t\t\"GH_MULTIPLIER\": \"Множител\",\n\t\t\"GH_WIN_WAYS\": \"Печеливши линии\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Клъстър\",\n\t\t\"GH_CLUSTER_COUNT\": \"Брой Символи\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Скатер печалба\",\n\n\t\t\"GH_HANDS\": \"Hands\",\n\t\t\"GH_SIDE_BETS\": \"Side bets\",\n\n\t\t\"HAND_0\": \"Hand [1]\",\n\t\t\"HAND_0_SPLIT_0\": \"Hand [1] (Split)\",\n\t\t\"HAND_1\": \"Hand [2]\",\n\t\t\"HAND_1_SPLIT_0\": \"Hand [2] (Split)\",\n\t\t\"HAND_2\": \"Hand [3]\",\n\t\t\"HAND_2_SPLIT_0\": \"Hand [3] (Split)\",\n\t\t\"INSURANCE_HAND_0\": \"Hand [1] (Insurance)\",\n\t\t\"INSURANCE_HAND_1\": \"Hand [2] (Insurance)\",\n\t\t\"INSURANCE_HAND_2\": \"Hand [3] (Insurance)\",\n\t\t\"DEALER\": \"Dealer\",\n\t\t\"ANTE\": \"Ante\",\n\t\t\"ANTE_BONUS\": \"Ante Bonus\",\n\t\t\"PAIR_BONUS\": \"Pair Bonus\",\n\t\t\"PLAY\": \"ИГРАЙ\",\n\t\t\n\t\t\"STAKE\": \"Залог\",\n\t\t\"INSURANCE\": 'Insurance',\n\n\t\t\"GH_TRANSACTIONS\": \"Трансакции\",\n\t\t\"GH_TOTAL_STAKE\": \"Общ Залог\",\n\t\t\"GH_TOTAL_BET\": \"Общ Залог\",\n\t\t\"GH_TOTAL_WIN\": \"Обща печалба\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Цена на Купуване на функция\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Име на Купуване на функция\",\n\t\t\"GH_BEFORE_STAKE\": \"преди залог\",\n\t\t\"GH_AFTER_STAKE\": \"след залог\",\n\t\t\"GH_AT_END\": \"в края\",\n\t\t\"GH_BALANCE\": \"Основно салдо\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Бонус салдо\",\n\t\t\"GH_SESSION_BALANCE\": \"Салдо на сесията\",\n\t\t\"GH_SESSION_FREEBETS\": \"Бонус салдо на сесията\",\n\t\t\"GH_BONUS\": \"БОНУС\",\n\n\t\t\"GH_WIN_DETAILS\": \"Подробности за Печалбата\",\n\t\t\"GH_SPIN_DETAILS\": \"Подробности за Завъртането\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Допълнителни данни\",\n\t\t\"GH_GAME_RESULTS\": \"Резултати от играта\",\n\t\t\"GH_INITIAL_SPIN\": \"Първоначално Завъртане\",\n\t\t\"GH_JACKPOT_WIN\": \"Джакпот печалба\",\n\t\t\"GH_SYMBOL_WINS\": \"Печалби от Символи\",\n\t\t\"GH_LINE\": \"Линия\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Печалби от Безплатни Завъртания\",\n\t\t\"GH_FREE_SPIN\": \"Безплатно Завъртане\",\n\t\t\"GH_RESPIN\": \"Повторно завъртане\",\n\t\t\"GH_RESPIN_WINS\": \"Печалби от Повторно Завъртане\",\n\t\t\"GH_NUDGE\": \"Побутване\",\n\t\t\"GH_NUDGE_WINS\": \"Печалба от Побутване\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Множител Печалба\",\n\t\t\"GH_MODIFIER_WIN\": \"Модификатор Печалба\",\n\t\t\"GH_BONUS_WIN\": \"Бонус печалба\",\n\t\t\"GH_INSTANT_WIN\": \"Незабавна Печалба\",\n\t\t\"GH_NO_HISTORY\": \"Няма налична хронология\",\n\t\t\"GH_GAMBLE_WINS\": \"Залогът печели\",\n\t\t\"GH_NO_WINS\": \"Няма печалби\",\n\t\t\"GH_ROUND_CORRECTION\": \"Корекция за закръгляне\",\n\t\t\"GH_LIMITED_WIN\": \"Печалба (макс. ограничение)\",\n\t\t\"WIN_EXCHANGE\": \"Цена на безплатните завъртания\",\n\t\t\"HALF_COLLECT\": \"Половин печалба събрана\",\n\t\t\"FULL_COLLECT\": \"Пълна печалба събрана\",\n\n\t\t\"GH_TABLE_ID\": \"Table ID\",\n\t\t\"GH_PLAYER\": \"Player\",\n\t\t\"GH_BANKER\": \"Banker\",\n\t\t\"GH_TIE\": \"Tie\",\n\t\t\"GH_PLAYER_PAIR\": \"Player Pair\",\n\t\t\"GH_BANKER_PAIR\": \"Banker Pair\",\n\t\t\"GH_GAME_WINNER\": \"Winner\",\n\t\t\"GH_GAME_WINSUM\": \"Sum\",\n\t\t\"GH_GAME_TOTAL\": \"Total\",\n\t\t\"GH_GAME_STAKE\": \"Stake\",\n\n\t\t\"GH_SPIN_TITLE\": \"Завърти\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Безплатни Завъртания\",\n\t\t\"GH_RESPINS_TITLE\": \"Повторни Завъртания\",\n\n\t\t\"GH_BALL_POSITION\": \"Ball Position:\",\n\t\t\"GH_TRIO\": \"Trio\",\n\t\t\"GH_SPLIT\": \"Split\",\n\t\t\"GH_STREET\": \"Street\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Corner\",\n\t\t\"GH_SIX_LINE\": \"Six Line\",\n\t\t\"GH_COLUMN\": \"Column\",\n\t\t\"GH_FIRST_COLUMN\": \"1st Column\",\n\t\t\"GH_SECOND_COLUMN\": \"2nd Column\",\n\t\t\"GH_THIRD_COLUMN\": \"3rd Column\",\n\t\t\"GH_DOZEN\": \"Dozen\",\n\t\t\"GH_FIRST_DOZEN\": \"1st 12\",\n\t\t\"GH_SECOND_DOZEN\": \"2nd 12\",\n\t\t\"GH_THIRD_DOZEN\": \"3rd 12\",\n\t\t\"GH_STRAIGHT\": \"Straight\",\n\t\t\"GH_COLOR\": \"Color\",\n\t\t\"GH_BLACK\": \"Black\",\n\t\t\"GH_RED\": \"Red\",\n\t\t\"GH_EVEN_ODD\": \"Even/Odd\",\n\t\t\"GH_EVEN\": \"Even\",\n\t\t\"GH_ODD\": \"Odd\",\n\t\t\"GH_SMALL_BIG\": \"Small/Big\",\n\t\t\"GH_SMALL\": \"Small\",\n\t\t\"GH_BIG\": \"Big\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Имаше безплатен преглед на този кръг. Всички печалби и залози са с демо пари.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"За този кръг бяха активни \\\"Безплатни кръгове\\\".\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Match your numbers\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Reveal sum of 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Match 3 symbols\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Match 3 amounts\",\n\t\t\"SCRATCH_FREE_CARD\": \"Free card\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tro: {\n\t\t\"TOTAL_COINS_WIN\": \"Total coins win\",\n\t\t\"GH_HISTORY\": \"Istoric\",\n\t\t\"GH_GAME_DETAILS\": \"Detaliile jocului\",\n\t\t\"GH_GAME_ID\": \"ID-ul jocului\",\n\t\t\"GH_ROUND_ID\": \"ID rundă\",\n\t\t\"GH_SERVER_TIME_START\": \"Timpul de început al serverului\",\n\t\t\"GH_SERVER_TIME_END\": \"Timpul de sfârșit al serverului\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Modalități de câștig\",\n\t\t\"GH_LENGTH\": \"Mărimea tabelului de plăți\",\n\t\t\"GH_MULTIPLIER\": \"Multiplicator\",\n\t\t\"GH_WIN_WAYS\": \"Modalități de câștig\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Grup\",\n\t\t\"GH_CLUSTER_COUNT\": \"Număr de simboluri\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Câștig Scatter\",\n\n\t\t\"GH_HANDS\": \"Hands\",\n\t\t\"GH_SIDE_BETS\": \"Side bets\",\n\n\t\t\"HAND_0\": \"Hand [1]\",\n\t\t\"HAND_0_SPLIT_0\": \"Hand [1] (Split)\",\n\t\t\"HAND_1\": \"Hand [2]\",\n\t\t\"HAND_1_SPLIT_0\": \"Hand [2] (Split)\",\n\t\t\"HAND_2\": \"Hand [3]\",\n\t\t\"HAND_2_SPLIT_0\": \"Hand [3] (Split)\",\n\t\t\"INSURANCE_HAND_0\": \"Hand [1] (Insurance)\",\n\t\t\"INSURANCE_HAND_1\": \"Hand [2] (Insurance)\",\n\t\t\"INSURANCE_HAND_2\": \"Hand [3] (Insurance)\",\n\t\t\"DEALER\": \"Dealer\",\n\t\t\"ANTE\": \"Ante\",\n\t\t\"ANTE_BONUS\": \"Ante Bonus\",\n\t\t\"PAIR_BONUS\": \"Pair Bonus\",\n\t\t\"PLAY\": \"Jucați\",\n\t\t\n\t\t\"STAKE\": \"Miză\",\n\t\t\"INSURANCE\": 'Insurance',\n\n\t\t\"GH_TRANSACTIONS\": \"Tranzacții\",\n\t\t\"GH_TOTAL_STAKE\": \"Miza Totală\",\n\t\t\"GH_TOTAL_BET\": \"Pariu Total\",\n\t\t\"GH_TOTAL_WIN\": \"Câștig Total\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Cost Cumpărare Funcție\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Nume Cumpărare Funcție\",\n\t\t\"GH_BEFORE_STAKE\": \"înainte de miză\",\n\t\t\"GH_AFTER_STAKE\": \"după miză\",\n\t\t\"GH_AT_END\": \"la sfârșit\",\n\t\t\"GH_BALANCE\": \"Sold principal\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Sold bonus\",\n\t\t\"GH_SESSION_BALANCE\": \"Sold sesiune\",\n\t\t\"GH_SESSION_FREEBETS\": \"Sold bonus sesiune\",\n\t\t\"GH_BONUS\": \"Bonus\",\n\n\t\t\"GH_WIN_DETAILS\": \"Detaliile câștigului\",\n\t\t\"GH_SPIN_DETAILS\": \"Detaliile rotirii\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Detalii suplimentare\",\n\t\t\"GH_GAME_RESULTS\": \"Rezultatele jocului\",\n\t\t\"GH_INITIAL_SPIN\": \"Rotire inițială\",\n\t\t\"GH_JACKPOT_WIN\": \"Câștig Jackpot\",\n\t\t\"GH_SYMBOL_WINS\": \"Tabel de plăți\",\n\t\t\"GH_LINE\": \"Linie\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Câștiguri din Rotiri Gratuite\",\n\t\t\"GH_FREE_SPIN\": \"Rotire gratuită\",\n\t\t\"GH_RESPIN\": \"Reluarea rotirii\",\n\t\t\"GH_RESPIN_WINS\": \"Câștiguri din reluarea rotirii\",\n\t\t\"GH_NUDGE\": \"Imbold\",\n\t\t\"GH_NUDGE_WINS\": \"Câștiguri din Imbold\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Câștig multiplicator\",\n\t\t\"GH_MODIFIER_WIN\": \"Câștig modificator\",\n\t\t\"GH_BONUS_WIN\": \"Câștig bonus\",\n\t\t\"GH_INSTANT_WIN\": \"Câștig instantaneu\",\n\t\t\"GH_NO_HISTORY\": \"Niciun istoric disponibil\",\n\t\t\"GH_GAMBLE_WINS\": \"Câștiguri din Pariere\",\n\t\t\"GH_NO_WINS\": \"Niciun câștig\",\n\t\t\"GH_ROUND_CORRECTION\": \"Corecție prin rotunjire\",\n\t\t\"GH_LIMITED_WIN\": \"Câștig (limita max.)\",\n\t\t\"WIN_EXCHANGE\": \"Preț Rotiri gratuite\",\n\t\t\"HALF_COLLECT\": \"Jumătate de câștig colectat\",\n\t\t\"FULL_COLLECT\": \"Câștig întreg colectat\",\n\n\t\t\"GH_TABLE_ID\": \"Table ID\",\n\t\t\"GH_PLAYER\": \"Player\",\n\t\t\"GH_BANKER\": \"Banker\",\n\t\t\"GH_TIE\": \"Tie\",\n\t\t\"GH_PLAYER_PAIR\": \"Player Pair\",\n\t\t\"GH_BANKER_PAIR\": \"Banker Pair\",\n\t\t\"GH_GAME_WINNER\": \"Winner\",\n\t\t\"GH_GAME_WINSUM\": \"Sum\",\n\t\t\"GH_GAME_TOTAL\": \"Total\",\n\t\t\"GH_GAME_STAKE\": \"Miză\",\n\n\t\t\"GH_SPIN_TITLE\": \"Rotiți\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Rotiri Gratuite\",\n\t\t\"GH_RESPINS_TITLE\": \"Reluări ale Rotirii\",\n\n\t\t\"GH_BALL_POSITION\": \"Ball Position:\",\n\t\t\"GH_TRIO\": \"Trio\",\n\t\t\"GH_SPLIT\": \"Split\",\n\t\t\"GH_STREET\": \"Street\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Corner\",\n\t\t\"GH_SIX_LINE\": \"Six Line\",\n\t\t\"GH_COLUMN\": \"Column\",\n\t\t\"GH_FIRST_COLUMN\": \"1st Column\",\n\t\t\"GH_SECOND_COLUMN\": \"2nd Column\",\n\t\t\"GH_THIRD_COLUMN\": \"3rd Column\",\n\t\t\"GH_DOZEN\": \"Dozen\",\n\t\t\"GH_FIRST_DOZEN\": \"1st 12\",\n\t\t\"GH_SECOND_DOZEN\": \"2nd 12\",\n\t\t\"GH_THIRD_DOZEN\": \"3rd 12\",\n\t\t\"GH_STRAIGHT\": \"Straight\",\n\t\t\"GH_COLOR\": \"Color\",\n\t\t\"GH_BLACK\": \"Black\",\n\t\t\"GH_RED\": \"Red\",\n\t\t\"GH_EVEN_ODD\": \"Even/Odd\",\n\t\t\"GH_EVEN\": \"Even\",\n\t\t\"GH_ODD\": \"Odd\",\n\t\t\"GH_SMALL_BIG\": \"Small/Big\",\n\t\t\"GH_SMALL\": \"Small\",\n\t\t\"GH_BIG\": \"Big\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Avanpremiera era activă în această rundă. Toate câștigurile și pariurile sunt în bani demo.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"A fost activă funcția Runde gratuite pentru această rundă.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Match your numbers\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Reveal sum of 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Match 3 symbols\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Match 3 amounts\",\n\t\t\"SCRATCH_FREE_CARD\": \"Free card\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\t'fr-CA': {\n\t\t\"TOTAL_COINS_WIN\": \"Total coins win\",\n\t\t\"GH_HISTORY\": \"Historique\",\n\t\t\"GH_GAME_DETAILS\": \"Détails du jeu\",\n\t\t\"GH_GAME_ID\": \"Identifiant de jeu\",\n\t\t\"GH_ROUND_ID\": \"Identifiant de partie\",\n\t\t\"GH_SERVER_TIME_START\": \"Début (heure du serveur)\",\n\t\t\"GH_SERVER_TIME_END\": \"Fin (heure du serveur)\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Voies gagnantes\",\n\t\t\"GH_LENGTH\": \"Longueur de la combinaison gagnante\",\n\t\t\"GH_MULTIPLIER\": \"Multiplicateur\",\n\t\t\"GH_WIN_WAYS\": \"Voies gagnantes\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Regroupement\",\n\t\t\"GH_CLUSTER_COUNT\": \"Nombre de symboles\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Gain Scatter\",\n\n\t\t\"GH_HANDS\": \"Hands\",\n\t\t\"GH_SIDE_BETS\": \"Paris annexes\",\n\n\t\t\"HAND_0\": \"Main [1]\",\n\t\t\"HAND_0_SPLIT_0\": \"Main [1] (Séparation)\",\n\t\t\"HAND_1\": \"Main [2]\",\n\t\t\"HAND_1_SPLIT_0\": \"Main [2] (Séparation)\",\n\t\t\"HAND_2\": \"Main [3]\",\n\t\t\"HAND_2_SPLIT_0\": \"Main [3] (Séparation)\",\n\t\t\"INSURANCE_HAND_0\": \"Main [1] (Assurance)\",\n\t\t\"INSURANCE_HAND_1\": \"Main [2] (Assurance)\",\n\t\t\"INSURANCE_HAND_2\": \"Main [3] (Assurance)\",\n\t\t\"DEALER\": \"CROUPIER\",\n\t\t\"ANTE\": \"Ante\",\n\t\t\"ANTE_BONUS\": \"Ante Bonus\",\n\t\t\"PAIR_BONUS\": \"Pair Bonus\",\n\t\t\"PLAY\": \"Jouer\",\n\t\t\n\t\t\"STAKE\": \"Mise\",\n\t\t\"INSURANCE\": 'Assurance',\n\n\t\t\"GH_TRANSACTIONS\": \"Transactions\",\n\t\t\"GH_TOTAL_STAKE\": \"Mise Totale\",\n\t\t\"GH_TOTAL_BET\": \"Mise Totale\",\n\t\t\"GH_TOTAL_WIN\": \"Gain total\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Prix d’achat de la fonction\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Nom de la fonction à acheter\",\n\t\t\"GH_BEFORE_STAKE\": \"avant mise\",\n\t\t\"GH_AFTER_STAKE\": \"après mise\",\n\t\t\"GH_AT_END\": \"final\",\n\t\t\"GH_BALANCE\": \"Solde principal\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Solde bonus\",\n\t\t\"GH_SESSION_BALANCE\": \"Solde de la session\",\n\t\t\"GH_SESSION_FREEBETS\": \"Solde bonus de la session\",\n\t\t\"GH_BONUS\": \"Bonus\",\n\n\t\t\"GH_WIN_DETAILS\": \"Détails des gains\",\n\t\t\"GH_SPIN_DETAILS\": \"Détails des tours\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Détails supplémentaires\",\n\t\t\"GH_GAME_RESULTS\": \"Résultats du jeu\",\n\t\t\"GH_INITIAL_SPIN\": \"Tour initial\",\n\t\t\"GH_JACKPOT_WIN\": \"Gain jackpot\",\n\t\t\"GH_SYMBOL_WINS\": \"Gains de symboles\",\n\t\t\"GH_LINE\": \"Ligne\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Gains des tours gratuits\",\n\t\t\"GH_FREE_SPIN\": \"Tour gratuit\",\n\t\t\"GH_RESPIN\": \"Relance\",\n\t\t\"GH_RESPIN_WINS\": \"Gains Relances\",\n\t\t\"GH_NUDGE\": \"Coup de pouce\",\n\t\t\"GH_NUDGE_WINS\": \"Gains du coup de pouce\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Gains multiplicateurs\",\n\t\t\"GH_MODIFIER_WIN\": \"Modificateur de gain\",\n\t\t\"GH_BONUS_WIN\": \"Gain bonus\",\n\t\t\"GH_INSTANT_WIN\": \"Gain instantané\",\n\t\t\"GH_NO_HISTORY\": \"Aucun historique disponible\",\n\t\t\"GH_GAMBLE_WINS\": \"Gains Quitte ou double\",\n\t\t\"GH_NO_WINS\": \"Aucun gain\",\n\t\t\"GH_ROUND_CORRECTION\": \"Arrondir\",\n\t\t\"GH_LIMITED_WIN\": \"Gain (limite max)\",\n\t\t\"WIN_EXCHANGE\": \"Coût des tours gratuits\",\n\t\t\"HALF_COLLECT\": \"Moitié du gain collectée\",\n\t\t\"FULL_COLLECT\": \"Gain collecté en entier\",\n\n\t\t\"GH_TABLE_ID\": \"ID de la table\",\n\t\t\"GH_PLAYER\": \"Joueur\",\n\t\t\"GH_BANKER\": \"Croupier\",\n\t\t\"GH_TIE\": \"Égalité\",\n\t\t\"GH_PLAYER_PAIR\": \"Paire du joueur\",\n\t\t\"GH_BANKER_PAIR\": \"Paire du croupier\",\n\t\t\"GH_GAME_WINNER\": \"Gagnant\",\n\t\t\"GH_GAME_WINSUM\": \"Somme\",\n\t\t\"GH_GAME_TOTAL\": \"Total\",\n\t\t\"GH_GAME_STAKE\": \"Mise\",\n\n\t\t\"GH_SPIN_TITLE\": \"Lancer\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Tours Gratuits\",\n\t\t\"GH_RESPINS_TITLE\": \"Relances\",\n\n\t\t\"GH_BALL_POSITION\": \"Position de la bille :\",\n\t\t\"GH_TRIO\": \"Trio\",\n\t\t\"GH_SPLIT\": \"Cheval\",\n\t\t\"GH_STREET\": \"Transversale\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Carré\",\n\t\t\"GH_SIX_LINE\": \"Sixain\",\n\t\t\"GH_COLUMN\": \"Colonne\",\n\t\t\"GH_FIRST_COLUMN\": \"1re colonne\",\n\t\t\"GH_SECOND_COLUMN\": \"2e colonne\",\n\t\t\"GH_THIRD_COLUMN\": \"3e colonne\",\n\t\t\"GH_DOZEN\": \"Douzaine\",\n\t\t\"GH_FIRST_DOZEN\": \"1re douzaine\",\n\t\t\"GH_SECOND_DOZEN\": \"2e douzaine\",\n\t\t\"GH_THIRD_DOZEN\": \"3e douzaine\",\n\t\t\"GH_STRAIGHT\": \"Plein\",\n\t\t\"GH_COLOR\": \"Couleur\",\n\t\t\"GH_BLACK\": \"Noir\",\n\t\t\"GH_RED\": \"Rouge\",\n\t\t\"GH_EVEN_ODD\": \"Pair/Impair\",\n\t\t\"GH_EVEN\": \"Pair\",\n\t\t\"GH_ODD\": \"Impair\",\n\t\t\"GH_SMALL_BIG\": \"Petit/Grand\",\n\t\t\"GH_SMALL\": \"Petit\",\n\t\t\"GH_BIG\": \"Grand\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Doubler\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Le mode Aperçu était activé pour ce tour. Tous les gains et paris sont en argent de démo.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"La fonctionnalité « Tours gratuits » était active pour ce tour.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Match your numbers\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Reveal sum of 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Match 3 symbols\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Match 3 amounts\",\n\t\t\"SCRATCH_FREE_CARD\": \"Free card\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tlv: {\n\t\t\"TOTAL_COINS_WIN\": \"Total coins win\",\n\t\t\"GH_HISTORY\": \"Vēsture\",\n\t\t\"GH_GAME_DETAILS\": \"Informācija par spēli\",\n\t\t\"GH_GAME_ID\": \"Spēles ID\",\n\t\t\"GH_ROUND_ID\": \"Raunda ID\",\n\t\t\"GH_SERVER_TIME_START\": \"Servera laika sākums\",\n\t\t\"GH_SERVER_TIME_END\": \"Servera laika beigas\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Laimestu varianti\",\n\t\t\"GH_LENGTH\": \"Laimējušās simbolu virknes garums\",\n\t\t\"GH_MULTIPLIER\": \"Reizinātājs\",\n\t\t\"GH_WIN_WAYS\": \"Laimestu varianti\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Simbolu bloks\",\n\t\t\"GH_CLUSTER_COUNT\": \"Simbolu skaits\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Scatter simbola laimests\",\n\n\t\t\"GH_HANDS\": \"Hands\",\n\t\t\"GH_SIDE_BETS\": \"Papildlikmes\",\n\n\t\t\"HAND_0\": \"Roka [1]\",\n\t\t\"HAND_0_SIDE_0\": \"Roka [1] Sidebet - 21 Plus 3\",\n\t\t\"HAND_0_SIDE_1\": \"Roka [1] Sidebet - Any Pair\",\n\t\t\"HAND_0_SIDE_2\": \"Roka [1] Sidebet - Bustorama\",\n\n\t\t\"HAND_0_SPLIT_0\": \"Roka [1] (Sadalīt)\",\n\t\t\"HAND_1\": \"Roka [2]\",\n\t\t\"HAND_1_SPLIT_0\": \"Roka [2] (Sadalīt)\",\n\t\t\"HAND_1_SIDE_0\": \"Roka [2] Sidebet - 21 Plus 3\",\n\t\t\"HAND_1_SIDE_1\": \"Roka [2] Sidebet - Any Pair\",\n\t\t\"HAND_1_SIDE_2\": \"Roka [2] Sidebet - Bustorama\",\n\n\t\t\"HAND_2\": \"Roka [3]\",\n\t\t\"HAND_2_SPLIT_0\": \"Roka [3] (Sadalīt)\",\n\t\t\"HAND_2_SIDE_0\": \"Roka [3] Sidebet - 21 Plus 3\",\n\t\t\"HAND_2_SIDE_1\": \"Roka [3] Sidebet - Any Pair\",\n\t\t\"HAND_2_SIDE_2\": \"Roka [3] Sidebet - Bustorama\",\n\n\t\t\"INSURANCE_HAND_0\": \"Roka [1] (Apdrošināšana)\",\n\t\t\"INSURANCE_HAND_1\": \"Roka [2] (Apdrošināšana)\",\n\t\t\"INSURANCE_HAND_2\": \"Roka [3] (Apdrošināšana)\",\n\t\t\"DEALER\": \"DĪLERA\",\n\t\t\"ANTE\": \"Ante\",\n\t\t\"ANTE_BONUS\": \"Ante Bonus\",\n\t\t\"PAIR_BONUS\": \"Pair Bonus\",\n\t\t\"PLAY\": \"Spēlēt\",\n\t\t\n\t\t\"STAKE\": \"Likme\",\n\t\t\"INSURANCE\": 'Apdrošināšana',\n\n\t\t\"GH_TRANSACTIONS\": \"Darījumi\",\n\t\t\"GH_TOTAL_STAKE\": \"Kopējā Likme\",\n\t\t\"GH_TOTAL_BET\": \"Kopējā Likme\",\n\t\t\"GH_TOTAL_WIN\": \"Kopējais laimests\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Funkcijas cena\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Pirktās funkcijas nosaukums\",\n\t\t\"GH_BEFORE_STAKE\": \"pirms likmes veikšanas\",\n\t\t\"GH_AFTER_STAKE\": \"pēc likmes veikšanas\",\n\t\t\"GH_AT_END\": \"beigās\",\n\t\t\"GH_BALANCE\": \"Pamatspēles atlikums\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Bonusa atlikums\",\n\t\t\"GH_SESSION_BALANCE\": \"Sesijas atlikums\",\n\t\t\"GH_SESSION_FREEBETS\": \"Sesijas bonusa atlikums\",\n\t\t\"GH_BONUS\": \"Bonuss\",\n\n\t\t\"GH_WIN_DETAILS\": \"Informācija par laimestu\",\n\t\t\"GH_SPIN_DETAILS\": \"Informācija par griezienu\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Papildu informācija\",\n\t\t\"GH_GAME_RESULTS\": \"Spēles rezultāti\",\n\t\t\"GH_INITIAL_SPIN\": \"Sākotnējais grieziens\",\n\t\t\"GH_JACKPOT_WIN\": \"Džekpota laimests\",\n\t\t\"GH_SYMBOL_WINS\": \"Simbolu laimesti\",\n\t\t\"GH_LINE\": \"Līnija\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Bezmaksas griezienu laimesti\",\n\t\t\"GH_FREE_SPIN\": \"Bezmaksas grieziens\",\n\t\t\"GH_RESPIN\": \"Atkārtots grieziens\",\n\t\t\"GH_RESPIN_WINS\": \"Atkārtoto griezienu laimesti\",\n\t\t\"GH_NUDGE\": \"Simbolu pārbīdīšana\",\n\t\t\"GH_NUDGE_WINS\": \"Pārbīdīto simbolu laimesti\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Reizinātāja laimests\",\n\t\t\"GH_MODIFIER_WIN\": \"Modifikatora laimests\",\n\t\t\"GH_BONUS_WIN\": \"Bonusa laimests\",\n\t\t\"GH_INSTANT_WIN\": \"Tūlītējs laimests\",\n\t\t\"GH_NO_HISTORY\": \"Vēsture nav pieejama\",\n\t\t\"GH_GAMBLE_WINS\": \"Riska spēles laimesti\",\n\t\t\"GH_NO_WINS\": \"Nav laimestu\",\n\t\t\"GH_ROUND_CORRECTION\": \"Noapaļošanas kļūda\",\n\t\t\"GH_LIMITED_WIN\": \"Laimests (maks. limits)\",\n\t\t\"WIN_EXCHANGE\": \"Bezmaksas griezienu cena\",\n\t\t\"HALF_COLLECT\": \"Paņemta puse laimesta\",\n\t\t\"FULL_COLLECT\": \"Paņemts viss laimests\",\n\n\t\t\"GH_TABLE_ID\": \"Galda ID\",\n\t\t\"GH_PLAYER\": \"Spēlētājs\",\n\t\t\"GH_BANKER\": \"Baņķieris\",\n\t\t\"GH_TIE\": \"Neizšķirts\",\n\t\t\"GH_PLAYER_PAIR\": \"Spēlētāja pāris:\",\n\t\t\"GH_BANKER_PAIR\": \"Baņķiera pāris:\",\n\t\t\"GH_GAME_WINNER\": \"Uzvarētājs\",\n\t\t\"GH_GAME_WINSUM\": \"Summa\",\n\t\t\"GH_GAME_TOTAL\": \"Kopā\",\n\t\t\"GH_GAME_STAKE\": \"Likme\",\n\n\t\t\"GH_SPIN_TITLE\": \"GRIEZIENS\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Bezmaksas Griezieni\",\n\t\t\"GH_RESPINS_TITLE\": \"Atkārtotie Griezieni\",\n\n\t\t\"GH_BALL_POSITION\": \"Bumbiņas pozīcija:\",\n\t\t\"GH_TRIO\": \"Trio\",\n\t\t\"GH_SPLIT\": \"Sadalīt\",\n\t\t\"GH_STREET\": \"Street\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Stūris\",\n\t\t\"GH_SIX_LINE\": \"Sešlīnija\",\n\t\t\"GH_COLUMN\": \"Kolonna\",\n\t\t\"GH_FIRST_COLUMN\": \"1. kolonna\",\n\t\t\"GH_SECOND_COLUMN\": \"2. kolonna\",\n\t\t\"GH_THIRD_COLUMN\": \"3. kolonna\",\n\t\t\"GH_DOZEN\": \"Ducis\",\n\t\t\"GH_FIRST_DOZEN\": \"Pirmie 12\",\n\t\t\"GH_SECOND_DOZEN\": \"Otrie 12\",\n\t\t\"GH_THIRD_DOZEN\": \"Trešie 12\",\n\t\t\"GH_STRAIGHT\": \"Viens skaitlis\",\n\t\t\"GH_COLOR\": \"Krāsa\",\n\t\t\"GH_BLACK\": \"Melns\",\n\t\t\"GH_RED\": \"Sarkans\",\n\t\t\"GH_EVEN_ODD\": \"Pāra/nepāra\",\n\t\t\"GH_EVEN\": \"Pāra\",\n\t\t\"GH_ODD\": \"Nepāra\",\n\t\t\"GH_SMALL_BIG\": \"1-18/19-36\",\n\t\t\"GH_SMALL\": \"1-18\",\n\t\t\"GH_BIG\": \"19-36\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Šim raundam bija aktivizēts īss pārskats. Visi laimesti un likmes ir demo naudā.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"Šajā raundā bija aktivizēti bezmaksas raundi.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Match your numbers\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Reveal sum of 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Match 3 symbols\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Match 3 amounts\",\n\t\t\"SCRATCH_FREE_CARD\": \"Free card\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tlt: {\n\t\t\"TOTAL_COINS_WIN\": \"Total coins win\",\n\t\t\"GH_HISTORY\": \"Istorija\",\n\t\t\"GH_GAME_DETAILS\": \"Išsami informacija apie žaidimą\",\n\t\t\"GH_GAME_ID\": \"Žaidimo ID\",\n\t\t\"GH_ROUND_ID\": \"Turo ID\",\n\t\t\"GH_SERVER_TIME_START\": \"Serverio laiko pradžia\",\n\t\t\"GH_SERVER_TIME_END\": \"Serverio laiko pabaiga\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Laiminčių kombinacijų\",\n\t\t\"GH_LENGTH\": \"Simbolių laimėjimo ilgis\",\n\t\t\"GH_MULTIPLIER\": \"Daugiklis\",\n\t\t\"GH_WIN_WAYS\": \"Laiminčios kombinacijos\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Sankaupa\",\n\t\t\"GH_CLUSTER_COUNT\": \"Simbolių skaičius\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Sklaidos simbolio laimėjimas\",\n\n\t\t\"GH_HANDS\": \"Hands\",\n\t\t\"GH_SIDE_BETS\": \"Papildomi statymai\",\n\n\t\t\"HAND_0\": \"[1] ranka\",\n\t\t\"HAND_0_SIDE_0\": \"Hand [1] Sidebet - 21 Plus 3\",\n\t\t\"HAND_0_SIDE_1\": \"Hand [1] Sidebet - Any Pair\",\n\t\t\"HAND_0_SIDE_2\": \"Hand [1] Sidebet - Bustorama\",\n\n\t\t\"HAND_0_SPLIT_0\": \"Hand [1] (Split)\",\n\t\t\"HAND_1\": \"[2] ranka\",\n\t\t\"HAND_1_SPLIT_0\": \"[2] ranka (išskaidyta)\",\n\t\t\"HAND_1_SIDE_0\": \"Hand [2] Sidebet - 21 Plus 3\",\n\t\t\"HAND_1_SIDE_1\": \"Hand [2] Sidebet - Any Pair\",\n\t\t\"HAND_1_SIDE_2\": \"Hand [2] Sidebet - Bustorama\",\n\n\t\t\"HAND_2\": \"[3] ranka\",\n\t\t\"HAND_2_SPLIT_0\": \"[3] ranka (išskaidyta)\",\n\t\t\"HAND_2_SIDE_0\": \"Hand [3] Sidebet - 21 Plus 3\",\n\t\t\"HAND_2_SIDE_1\": \"Hand [3] Sidebet - Any Pair\",\n\t\t\"HAND_2_SIDE_2\": \"Hand [3] Sidebet - Bustorama\",\n\n\t\t\"INSURANCE_HAND_0\": \"[1] ranka (draudimas)\",\n\t\t\"INSURANCE_HAND_1\": \"[2] ranka (draudimas)\",\n\t\t\"INSURANCE_HAND_2\": \"[3] ranka (draudimas)\",\n\t\t\"DEALER\": \"Dalintojo\",\n\t\t\"ANTE\": \"Ante\",\n\t\t\"ANTE_BONUS\": \"Ante Bonus\",\n\t\t\"PAIR_BONUS\": \"Pair Bonus\",\n\t\t\"PLAY\": \"Žaisti\",\n\t\t\n\t\t\"STAKE\": \"Statymas\",\n\t\t\"INSURANCE\": 'Draudimas',\n\n\t\t\"GH_TRANSACTIONS\": \"Operacijos\",\n\t\t\"GH_TOTAL_STAKE\": \"Statymų Suma\",\n\t\t\"GH_TOTAL_BET\": \"Statymų Suma\",\n\t\t\"GH_TOTAL_WIN\": \"Laimėta suma\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Funkcijos pirkimo kaina\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Perkamos funkcijos pavadinimas\",\n\t\t\"GH_BEFORE_STAKE\": \"prieš statymą\",\n\t\t\"GH_AFTER_STAKE\": \"po statymo\",\n\t\t\"GH_AT_END\": \"pabaigoje\",\n\t\t\"GH_BALANCE\": \"Pagrindinis likutis\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Premijos likutis\",\n\t\t\"GH_SESSION_BALANCE\": \"Seanso likutis\",\n\t\t\"GH_SESSION_FREEBETS\": \"Seanso premijos likutis\",\n\t\t\"GH_BONUS\": \"Premija\",\n\n\t\t\"GH_WIN_DETAILS\": \"Išsami informacija apie laimėjimą\",\n\t\t\"GH_SPIN_DETAILS\": \"Išsami informacija apie sukimą\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Papildoma informacija\",\n\t\t\"GH_GAME_RESULTS\": \"Žaidimo rezultatai\",\n\t\t\"GH_INITIAL_SPIN\": \"Pradinis sukimas\",\n\t\t\"GH_JACKPOT_WIN\": \"Pagrindinio prizo laimėjimas\",\n\t\t\"GH_SYMBOL_WINS\": \"Simbolių laimėjimai\",\n\t\t\"GH_LINE\": \"Linija\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Nemokamų sukimų laimėjimai\",\n\t\t\"GH_FREE_SPIN\": \"Nemokamas sukimas\",\n\t\t\"GH_RESPIN\": \"Pakartotinis sukimas\",\n\t\t\"GH_RESPIN_WINS\": \"Pakartotinių sukimų laimėjimai\",\n\t\t\"GH_NUDGE\": \"Stumtelėjimas\",\n\t\t\"GH_NUDGE_WINS\": \"Stumtelėjimo laimėjimai\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Daugiklio laimėjimas\",\n\t\t\"GH_MODIFIER_WIN\": \"Modifikatoriaus laimėjimas\",\n\t\t\"GH_BONUS_WIN\": \"Premijos laimėjimas\",\n\t\t\"GH_INSTANT_WIN\": \"Momentinis laimėjimas\",\n\t\t\"GH_NO_HISTORY\": \"Istorijos nėra\",\n\t\t\"GH_GAMBLE_WINS\": \"Lažybų laimėjimai\",\n\t\t\"GH_NO_WINS\": \"Laimėjimų nėra\",\n\t\t\"GH_ROUND_CORRECTION\": \"Apvalinimo korekcija\",\n\t\t\"GH_LIMITED_WIN\": \"Laimėjimas (maks. limitas)\",\n\t\t\"WIN_EXCHANGE\": \"Nemokamų sukimų kaina\",\n\t\t\"HALF_COLLECT\": \"Paimta pusė laimėjimo\",\n\t\t\"FULL_COLLECT\": \"Paimtas visas laimėjimas\",\n\n\t\t\"GH_TABLE_ID\": \"Stalo ID\",\n\t\t\"GH_PLAYER\": \"Žaidėjas\",\n\t\t\"GH_BANKER\": \"Bankininkas\",\n\t\t\"GH_TIE\": \"Lygiosios\",\n\t\t\"GH_PLAYER_PAIR\": \"Žaidėjo pora\",\n\t\t\"GH_BANKER_PAIR\": \"Bankininko pora\",\n\t\t\"GH_GAME_WINNER\": \"Laimėtojas\",\n\t\t\"GH_GAME_WINSUM\": \"Suma\",\n\t\t\"GH_GAME_TOTAL\": \"Iš viso\",\n\t\t\"GH_GAME_STAKE\": \"Statymas\",\n\n\t\t\"GH_SPIN_TITLE\": \"SUKIMAS\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Nemokami Sukimai\",\n\t\t\"GH_RESPINS_TITLE\": \"Pakartotiniai Sukimai\",\n\n\t\t\"GH_BALL_POSITION\": \"Kamuoliuko padėtis:\",\n\t\t\"GH_TRIO\": \"Trejetų\",\n\t\t\"GH_SPLIT\": \"Išskaidymų\",\n\t\t\"GH_STREET\": \"Gatvės\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Kampų\",\n\t\t\"GH_SIX_LINE\": \"Šešių linijų\",\n\t\t\"GH_COLUMN\": \"Stulpelių\",\n\t\t\"GH_FIRST_COLUMN\": \"1-as stulpelis\",\n\t\t\"GH_SECOND_COLUMN\": \"2-as stulpelis\",\n\t\t\"GH_THIRD_COLUMN\": \"3-as stulpelis\",\n\t\t\"GH_DOZEN\": \"Tuzino\",\n\t\t\"GH_FIRST_DOZEN\": \"Pirmi 12\",\n\t\t\"GH_SECOND_DOZEN\": \"Antri 12\",\n\t\t\"GH_THIRD_DOZEN\": \"Treti 12\",\n\t\t\"GH_STRAIGHT\": \"Tiesioginių statymų\",\n\t\t\"GH_COLOR\": \"Spalvų\",\n\t\t\"GH_BLACK\": \"Juoda\",\n\t\t\"GH_RED\": \"Raudona\",\n\t\t\"GH_EVEN_ODD\": \"Lyginių / nelyginių suma\",\n\t\t\"GH_EVEN\": \"Lyginis\",\n\t\t\"GH_ODD\": \"Nelyginis\",\n\t\t\"GH_SMALL_BIG\": \"1-18/19-36\",\n\t\t\"GH_SMALL\": \"1-18\",\n\t\t\"GH_BIG\": \"19-36\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Šį turą buvo įjungtas žvilgčiojimas. Visiems laimėjimams ir statymams naudojami demonstraciniai pinigai.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"Ši turą buvo aktyvūs nemokami turai.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Match your numbers\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Reveal sum of 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Match 3 symbols\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Match 3 amounts\",\n\t\t\"SCRATCH_FREE_CARD\": \"Free card\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tet: {\n\t\t\"TOTAL_COINS_WIN\": \"Total coins win\",\n\t\t\"GH_HISTORY\": \"Ajalugu\",\n\t\t\"GH_GAME_DETAILS\": \"Mängu üksikasjad\",\n\t\t\"GH_GAME_ID\": \"Mängu ID\",\n\t\t\"GH_ROUND_ID\": \"Vooru ID\",\n\t\t\"GH_SERVER_TIME_START\": \"Serveri aja algus\",\n\t\t\"GH_SERVER_TIME_END\": \"Serveri aja lõpp\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Võiduliinid\",\n\t\t\"GH_LENGTH\": \"Sümbolivõidu pikkus\",\n\t\t\"GH_MULTIPLIER\": \"Kordaja\",\n\t\t\"GH_WIN_WAYS\": \"Võiduliinid\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Kobar\",\n\t\t\"GH_CLUSTER_COUNT\": \"Sümbolite arv\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Scatteri võit\",\n\n\t\t\"GH_HANDS\": \"Hands\",\n\t\t\"GH_SIDE_BETS\": \"Lisapanused\",\n\n\t\t\"HAND_0\": \"Käsi [1]\",\n\t\t\"HAND_0_SIDE_0\": \"Hand [1] Sidebet - 21 Plus 3\",\n\t\t\"HAND_0_SIDE_1\": \"Hand [1] Sidebet - Any Pair\",\n\t\t\"HAND_0_SIDE_2\": \"Hand [1] Sidebet - Bustorama\",\n\n\t\t\"HAND_0_SPLIT_0\": \"Käsi [1] (Split)\",\n\t\t\"HAND_1\": \"Käsi [2]\",\n\t\t\"HAND_1_SPLIT_0\": \"Käsi [2] (Split)\",\n\t\t\"HAND_1_SIDE_0\": \"Hand [2] Sidebet - 21 Plus 3\",\n\t\t\"HAND_1_SIDE_1\": \"Hand [2] Sidebet - Any Pair\",\n\t\t\"HAND_1_SIDE_2\": \"Hand [2] Sidebet - Bustorama\",\n\n\t\t\"HAND_2\": \"Käsi [3]\",\n\t\t\"HAND_2_SPLIT_0\": \"Käsi [3] (Split)\",\n\t\t\"HAND_2_SIDE_0\": \"Hand [3] Sidebet - 21 Plus 3\",\n\t\t\"HAND_2_SIDE_1\": \"Hand [3] Sidebet - Any Pair\",\n\t\t\"HAND_2_SIDE_2\": \"Hand [3] Sidebet - Bustorama\",\n\n\t\t\"INSURANCE_HAND_0\": \"Käsi [1] (Kindlustus)\",\n\t\t\"INSURANCE_HAND_1\": \"Käsi [2] (Kindlustus)\",\n\t\t\"INSURANCE_HAND_2\": \"Käsi [3] (Kindlustus)\",\n\t\t\"DEALER\": \"Diileri\",\n\t\t\"ANTE\": \"Ante\",\n\t\t\"ANTE_BONUS\": \"Ante Bonus\",\n\t\t\"PAIR_BONUS\": \"Pair Bonus\",\n\t\t\"PLAY\": \"Mängi\",\n\t\t\n\t\t\"STAKE\": \"Panus\",\n\t\t\"INSURANCE\": 'Kindlustus',\n\n\t\t\"GH_TRANSACTIONS\": \"Tehingud\",\n\t\t\"GH_TOTAL_STAKE\": \"Kogupanus\",\n\t\t\"GH_TOTAL_BET\": \"Kogupanus\",\n\t\t\"GH_TOTAL_WIN\": \"Koguvõit\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Ostufunktsiooni maksumus\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Ostufunktsiooni nimi\",\n\t\t\"GH_BEFORE_STAKE\": \"enne panust\",\n\t\t\"GH_AFTER_STAKE\": \"pärast panust\",\n\t\t\"GH_AT_END\": \"lõpus\",\n\t\t\"GH_BALANCE\": \"Põhisaldo\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Boonussaldo\",\n\t\t\"GH_SESSION_BALANCE\": \"Sessiooni saldo\",\n\t\t\"GH_SESSION_FREEBETS\": \"Sessiooni boonussaldo\",\n\t\t\"GH_BONUS\": \"Boonus\",\n\n\t\t\"GH_WIN_DETAILS\": \"Võidu üksikasjad\",\n\t\t\"GH_SPIN_DETAILS\": \"Keerutuse üksikasjad\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Lisateave\",\n\t\t\"GH_GAME_RESULTS\": \"Mängutulemused\",\n\t\t\"GH_INITIAL_SPIN\": \"Esialgne keerutus\",\n\t\t\"GH_JACKPOT_WIN\": \"Jackpoti võit\",\n\t\t\"GH_SYMBOL_WINS\": \"Sümbolivõidud\",\n\t\t\"GH_LINE\": \"Liin\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Tasuta keerutuste võidud\",\n\t\t\"GH_FREE_SPIN\": \"Tasuta keerutus\",\n\t\t\"GH_RESPIN\": \"Korduskeerutus\",\n\t\t\"GH_RESPIN_WINS\": \"Korduskeerutuste võidud\",\n\t\t\"GH_NUDGE\": \"Nudge\",\n\t\t\"GH_NUDGE_WINS\": \"Nudge võidud\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Kordaja võit\",\n\t\t\"GH_MODIFIER_WIN\": \"Modifikaatori võit\",\n\t\t\"GH_BONUS_WIN\": \"Boonusvõit\",\n\t\t\"GH_INSTANT_WIN\": \"Kohene võit\",\n\t\t\"GH_NO_HISTORY\": \"Ajalugu ei ole saadaval\",\n\t\t\"GH_GAMBLE_WINS\": \"Õnnemängu võidud\",\n\t\t\"GH_NO_WINS\": \"Võite ei ole\",\n\t\t\"GH_ROUND_CORRECTION\": \"Ümardamine\",\n\t\t\"GH_LIMITED_WIN\": \"Võit (maks. limiit)\",\n\t\t\"WIN_EXCHANGE\": \"Tasuta keerutuste hind\",\n\t\t\"HALF_COLLECT\": \"Pool võidusummat on kogutud\",\n\t\t\"FULL_COLLECT\": \"Täielik võidusumma on kogutud\",\n\n\t\t\"GH_TABLE_ID\": \"Laua ID\",\n\t\t\"GH_PLAYER\": \"Mängija\",\n\t\t\"GH_BANKER\": \"Pankur\",\n\t\t\"GH_TIE\": \"Viik\",\n\t\t\"GH_PLAYER_PAIR\": \"Mängija paar\",\n\t\t\"GH_BANKER_PAIR\": \"Pankuri paar\",\n\t\t\"GH_GAME_WINNER\": \"Võitja\",\n\t\t\"GH_GAME_WINSUM\": \"Summa\",\n\t\t\"GH_GAME_TOTAL\": \"Total\",\n\t\t\"GH_GAME_STAKE\": \"Panus\",\n\n\t\t\"GH_SPIN_TITLE\": \"KEERUTUS\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Tasuta Keerutused\",\n\t\t\"GH_RESPINS_TITLE\": \"Korduskeerutused\",\n\n\t\t\"GH_BALL_POSITION\": \"Kuuli positsioon:\",\n\t\t\"GH_TRIO\": \"Trio\",\n\t\t\"GH_SPLIT\": \"Kahe numbri\",\n\t\t\"GH_STREET\": \"Rea\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Nurga\",\n\t\t\"GH_SIX_LINE\": \"Six Line\",\n\t\t\"GH_COLUMN\": \"Veeru\",\n\t\t\"GH_FIRST_COLUMN\": \"1. veerg\",\n\t\t\"GH_SECOND_COLUMN\": \"2. veerg\",\n\t\t\"GH_THIRD_COLUMN\": \"3. veerg\",\n\t\t\"GH_DOZEN\": \"Tosina\",\n\t\t\"GH_FIRST_DOZEN\": \"1. 12\",\n\t\t\"GH_SECOND_DOZEN\": \"2. 12\",\n\t\t\"GH_THIRD_DOZEN\": \"3. 12\",\n\t\t\"GH_STRAIGHT\": \"Üksiknumbri total\",\n\t\t\"GH_COLOR\": \"Värvi\",\n\t\t\"GH_BLACK\": \"Must\",\n\t\t\"GH_RED\": \"Punane\",\n\t\t\"GH_EVEN_ODD\": \"Paaris/Paaritu total\",\n\t\t\"GH_EVEN\": \"Paaris\",\n\t\t\"GH_ODD\": \"Paaritu\",\n\t\t\"GH_SMALL_BIG\": \"1-18/19-36\",\n\t\t\"GH_SMALL\": \"1-18\",\n\t\t\"GH_BIG\": \"19-36\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Eelvaade oli aktiivne selle vooru jaoks. Kõik võidud ja panused on demorahas.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"Selles voorus olid tasuta voorud aktiivsed.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Match your numbers\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Reveal sum of 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Match 3 symbols\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Match 3 amounts\",\n\t\t\"SCRATCH_FREE_CARD\": \"Free card\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tsr: {\n\t\t\"TOTAL_COINS_WIN\": \"Total coins win\",\n\t\t\"GH_HISTORY\": \"Istorija\",\n\t\t\"GH_GAME_DETAILS\": \"Podaci o igri\",\n\t\t\"GH_GAME_ID\": \"ID igre\",\n\t\t\"GH_ROUND_ID\": \"Id zaokruživanja\",\n\t\t\"GH_SERVER_TIME_START\": \"Početak vremena servera\",\n\t\t\"GH_SERVER_TIME_END\": \"Kraj vremena servera\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Dobitne linije\",\n\t\t\"GH_LENGTH\": \"Dužina dobitka simbola\",\n\t\t\"GH_MULTIPLIER\": \"Multiplikator\",\n\t\t\"GH_WIN_WAYS\": \"Dobitne linije\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Skup\",\n\t\t\"GH_CLUSTER_COUNT\": \"Broj simbola\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"„Scatter“ dobitak\",\n\n\t\t\"GH_HANDS\": \"Hands\",\n\t\t\"GH_SIDE_BETS\": \"Dodatne opklade\",\n\n\t\t\"HAND_0\": \"Ruka [1]\",\n\t\t\"HAND_0_SIDE_0\": \"Hand [1] Sidebet - 21 Plus 3\",\n\t\t\"HAND_0_SIDE_1\": \"Hand [1] Sidebet - Any Pair\",\n\t\t\"HAND_0_SIDE_2\": \"Hand [1] Sidebet - Bustorama\",\n\n\t\t\"HAND_0_SPLIT_0\": \"Hand [1] (Split)\",\n\t\t\"HAND_1\": \"Ruka [2]\",\n\t\t\"HAND_1_SPLIT_0\": \"Ruka [2] (Razdvajanje)\",\n\t\t\"HAND_1_SIDE_0\": \"Hand [2] Sidebet - 21 Plus 3\",\n\t\t\"HAND_1_SIDE_1\": \"Hand [2] Sidebet - Any Pair\",\n\t\t\"HAND_1_SIDE_2\": \"Hand [2] Sidebet - Bustorama\",\n\n\t\t\"HAND_2\": \"Ruka [3]\",\n\t\t\"HAND_2_SPLIT_0\": \"Ruka [3] (Razdvajanje)\",\n\t\t\"HAND_2_SIDE_0\": \"Hand [3] Sidebet - 21 Plus 3\",\n\t\t\"HAND_2_SIDE_1\": \"Hand [3] Sidebet - Any Pair\",\n\t\t\"HAND_2_SIDE_2\": \"Hand [3] Sidebet - Bustorama\",\n\n\t\t\"INSURANCE_HAND_0\": \"Ruka [1] (Osiguranje)\",\n\t\t\"INSURANCE_HAND_1\": \"Ruka [2] (Osiguranje)\",\n\t\t\"INSURANCE_HAND_2\": \"Ruka [3] (Osiguranje)\",\n\t\t\"DEALER\": \"Krupijea\",\n\t\t\"ANTE\": \"Ante\",\n\t\t\"ANTE_BONUS\": \"Ante Bonus\",\n\t\t\"PAIR_BONUS\": \"Pair Bonus\",\n\t\t\"PLAY\": \"Igraj\",\n\t\t\n\t\t\"STAKE\": \"Ulog\",\n\t\t\"INSURANCE\": 'Osiguranje',\n\n\t\t\"GH_TRANSACTIONS\": \"Transakcije\",\n\t\t\"GH_TOTAL_STAKE\": \"Ukupni Ulog\",\n\t\t\"GH_TOTAL_BET\": \"Ukupna Opklada\",\n\t\t\"GH_TOTAL_WIN\": \"Ukupni dobitak\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Cena funkcije Kupovine\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Naziv funkcije Kupovine\",\n\t\t\"GH_BEFORE_STAKE\": \"pre uloga\",\n\t\t\"GH_AFTER_STAKE\": \"nakon uloga\",\n\t\t\"GH_AT_END\": \"na kraju\",\n\t\t\"GH_BALANCE\": \"Glavni račun\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Bonus račun\",\n\t\t\"GH_SESSION_BALANCE\": \"Račun sesije\",\n\t\t\"GH_SESSION_FREEBETS\": \"Bonus račun sesije\",\n\t\t\"GH_BONUS\": \"Bonus\",\n\n\t\t\"GH_WIN_DETAILS\": \"Podaci o dobitku\",\n\t\t\"GH_SPIN_DETAILS\": \"Podaci o okretanju\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Dodatni podaci\",\n\t\t\"GH_GAME_RESULTS\": \"Rezultati igre\",\n\t\t\"GH_INITIAL_SPIN\": \"Početno okretanje\",\n\t\t\"GH_JACKPOT_WIN\": \"Dobitak džekpota\",\n\t\t\"GH_SYMBOL_WINS\": \"Dobici simbola\",\n\t\t\"GH_LINE\": \"Linija\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Dobici od Besplatnih okretanja\",\n\t\t\"GH_FREE_SPIN\": \"Besplatno okretanje\",\n\t\t\"GH_RESPIN\": \"Ponovno okretanje\",\n\t\t\"GH_RESPIN_WINS\": \"Dobici od ponovnih okretanja\",\n\t\t\"GH_NUDGE\": \"Guranje\",\n\t\t\"GH_NUDGE_WINS\": \"Dobici od poguranih simbola\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Dobitak multiplikatora\",\n\t\t\"GH_MODIFIER_WIN\": \"Dobitak modifikatora\",\n\t\t\"GH_BONUS_WIN\": \"Bonus dobitak\",\n\t\t\"GH_INSTANT_WIN\": \"Instant dobitak\",\n\t\t\"GH_NO_HISTORY\": \"Nema dostupne istorije\",\n\t\t\"GH_GAMBLE_WINS\": \"Dobici od Kockanja\",\n\t\t\"GH_NO_WINS\": \"Nema dobitaka\",\n\t\t\"GH_ROUND_CORRECTION\": \"Ispravka zaokruživanja\",\n\t\t\"GH_LIMITED_WIN\": \"Dobitak (maks. ograničenje)\",\n\t\t\"WIN_EXCHANGE\": \"Cena besplatnih okretanja\",\n\t\t\"HALF_COLLECT\": \"Preuzeto je pola dobitka\",\n\t\t\"FULL_COLLECT\": \"Preuzet je ceo dobitak\",\n\n\t\t\"GH_TABLE_ID\": \"ID stola\",\n\t\t\"GH_PLAYER\": \"Igrač\",\n\t\t\"GH_BANKER\": \"Bankar\",\n\t\t\"GH_TIE\": \"Nerešeno\",\n\t\t\"GH_PLAYER_PAIR\": \"Igračev par\",\n\t\t\"GH_BANKER_PAIR\": \"Bankarev par\",\n\t\t\"GH_GAME_WINNER\": \"Dobitnik\",\n\t\t\"GH_GAME_WINSUM\": \"Zbir\",\n\t\t\"GH_GAME_TOTAL\": \"Ukupno\",\n\t\t\"GH_GAME_STAKE\": \"Ulog\",\n\n\t\t\"GH_SPIN_TITLE\": \"OKRETANJE\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Besplatnih Okretanja\",\n\t\t\"GH_RESPINS_TITLE\": \"Ponovna Okretanja\",\n\n\t\t\"GH_BALL_POSITION\": \"Pozicija kuglice:\",\n\t\t\"GH_TRIO\": \"Trio\",\n\t\t\"GH_SPLIT\": \"Split\",\n\t\t\"GH_STREET\": \"Street\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Corner\",\n\t\t\"GH_SIX_LINE\": \"Six Line\",\n\t\t\"GH_COLUMN\": \"Column\",\n\t\t\"GH_FIRST_COLUMN\": \"1. kolona\",\n\t\t\"GH_SECOND_COLUMN\": \"2. kolona\",\n\t\t\"GH_THIRD_COLUMN\": \"3. kolona\",\n\t\t\"GH_DOZEN\": \"Dozen\",\n\t\t\"GH_FIRST_DOZEN\": \"1. tuce\",\n\t\t\"GH_SECOND_DOZEN\": \"2. tuce\",\n\t\t\"GH_THIRD_DOZEN\": \"3. tuce\",\n\t\t\"GH_STRAIGHT\": \"Straight\",\n\t\t\"GH_COLOR\": \"Color\",\n\t\t\"GH_BLACK\": \"Crno\",\n\t\t\"GH_RED\": \"Crveno\",\n\t\t\"GH_EVEN_ODD\": \"Par/Nepar\",\n\t\t\"GH_EVEN\": \"Par\",\n\t\t\"GH_ODD\": \"Nepar\",\n\t\t\"GH_SMALL_BIG\": \"1-18/19-36\",\n\t\t\"GH_SMALL\": \"1-18\",\n\t\t\"GH_BIG\": \"19-36\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Isprobavanje je bilo aktivno za ovu rundu. Svi dobici i opklade obračunavali su se u demo novcu.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"U ovoj rundi bila je aktivna funkcija besplatnih rundi.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Match your numbers\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Reveal sum of 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Match 3 symbols\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Match 3 amounts\",\n\t\t\"SCRATCH_FREE_CARD\": \"Free card\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\t'en-US': {\n\t\t\"TOTAL_COINS_WIN\": \"Total coins win\",\n\t\t\"GH_HISTORY\": \"History\",\n\t\t\"GH_GAME_DETAILS\": \"Game details\",\n\t\t\"GH_GAME_ID\": \"Game ID\",\n\t\t\"GH_ROUND_ID\": \"Round ID\",\n\t\t\"GH_SERVER_TIME_START\": \"Server time start\",\n\t\t\"GH_SERVER_TIME_END\": \"Server time end\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Win Ways\",\n\t\t\"GH_LENGTH\": \"Symbol win length\",\n\t\t\"GH_MULTIPLIER\": \"Multiplier\",\n\t\t\"GH_WIN_WAYS\": \"Win Ways\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Cluster\",\n\t\t\"GH_CLUSTER_COUNT\": \"Symbol count\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Scatter win\",\n\n\t\t\"GH_HANDS\": \"Hands\",\n\t\t\"GH_SIDE_BETS\": \"Side bets\",\n\n\t\t\"HAND_0\": \"Hand [1]\",\n\t\t\"HAND_0_SIDE_0\": \"Hand [1] Sidebet - 21 Plus 3\",\n\t\t\"HAND_0_SIDE_1\": \"Hand [1] Sidebet - Any Pair\",\n\t\t\"HAND_0_SIDE_2\": \"Hand [1] Sidebet - Bustorama\",\n\n\t\t\"HAND_0_SPLIT_0\": \"Hand [1] (Split)\",\n\t\t\"HAND_1\": \"Hand [2]\",\n\t\t\"HAND_1_SPLIT_0\": \"Hand [2] (Split)\",\n\t\t\"HAND_1_SIDE_0\": \"Hand [2] Sidebet - 21 Plus 3\",\n\t\t\"HAND_1_SIDE_1\": \"Hand [2] Sidebet - Any Pair\",\n\t\t\"HAND_1_SIDE_2\": \"Hand [2] Sidebet - Bustorama\",\n\n\t\t\"HAND_2\": \"Hand [3]\",\n\t\t\"HAND_2_SPLIT_0\": \"Hand [3] (Split)\",\n\t\t\"HAND_2_SIDE_0\": \"Hand [3] Sidebet - 21 Plus 3\",\n\t\t\"HAND_2_SIDE_1\": \"Hand [3] Sidebet - Any Pair\",\n\t\t\"HAND_2_SIDE_2\": \"Hand [3] Sidebet - Bustorama\",\n\n\t\t\"INSURANCE_HAND_0\": \"Hand [1] (Insurance)\",\n\t\t\"INSURANCE_HAND_1\": \"Hand [2] (Insurance)\",\n\t\t\"INSURANCE_HAND_2\": \"Hand [3] (Insurance)\",\n\t\t\"DEALER\": \"Dealer\",\n\t\t\"ANTE\": \"Ante\",\n\t\t\"ANTE_BONUS\": \"Ante Bonus\",\n\t\t\"PAIR_BONUS\": \"Pair Bonus\",\n\t\t\"PLAY\": \"Play\",\n\t\t\n\t\t\"STAKE\": \"Stake\",\n\t\t\"INSURANCE\": 'Insurance',\n\n\t\t\"GH_TRANSACTIONS\": \"Transactions\",\n\t\t\"GH_TOTAL_STAKE\": \"Total stake\",\n\t\t\"GH_TOTAL_BET\": \"Total bet\",\n\t\t\"GH_TOTAL_WIN\": \"Total win\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Feature Buy cost\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Feature Buy name\",\n\t\t\"GH_BEFORE_STAKE\": \"before stake\",\n\t\t\"GH_AFTER_STAKE\": \"after stake\",\n\t\t\"GH_AT_END\": \"at end\",\n\t\t\"GH_BALANCE\": \"Main balance\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Bonus balance\",\n\t\t\"GH_SESSION_BALANCE\": \"Session balance\",\n\t\t\"GH_SESSION_FREEBETS\": \"Session bonus balance\",\n\t\t\"GH_BONUS\": \"Bonus\",\n\n\t\t\"GH_WIN_DETAILS\": \"Win details\",\n\t\t\"GH_SPIN_DETAILS\": \"Spin details\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Additional Details\",\n\t\t\"GH_GAME_RESULTS\": \"Game results\",\n\t\t\"GH_INITIAL_SPIN\": \"Initial spin\",\n\t\t\"GH_JACKPOT_WIN\": \"Jackpot win\",\n\t\t\"GH_SYMBOL_WINS\": \"Symbol wins\",\n\t\t\"GH_LINE\": \"Line\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Free spins wins\",\n\t\t\"GH_FREE_SPIN\": \"Free spin\",\n\t\t\"GH_RESPIN\": \"Respin\",\n\t\t\"GH_RESPIN_WINS\": \"Respin wins\",\n\t\t\"GH_NUDGE\": \"Nudge\",\n\t\t\"GH_NUDGE_WINS\": \"Nudge wins\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Multiplier win\",\n\t\t\"GH_MODIFIER_WIN\": \"Modifier win\",\n\t\t\"GH_BONUS_WIN\": \"Bonus win\",\n\t\t\"GH_INSTANT_WIN\": \"Instant win\",\n\t\t\"GH_NO_HISTORY\": \"No history available\",\n\t\t\"GH_GAMBLE_WINS\": \"Gamble wins\",\n\t\t\"GH_NO_WINS\": \"No wins\",\n\t\t\"GH_ROUND_CORRECTION\": \"Rounding correction\",\n\t\t\"GH_LIMITED_WIN\": \"Win (max limit)\",\n\t\t\"WIN_EXCHANGE\": \"Free spins price\",\n\t\t\"HALF_COLLECT\": \"Half collected win\",\n\t\t\"FULL_COLLECT\": \"Full collected win\",\n\n\t\t\"GH_TABLE_ID\": \"Table ID\",\n\t\t\"GH_PLAYER\": \"Player\",\n\t\t\"GH_BANKER\": \"Banker\",\n\t\t\"GH_TIE\": \"Tie\",\n\t\t\"GH_PLAYER_PAIR\": \"Player Pair\",\n\t\t\"GH_BANKER_PAIR\": \"Banker Pair\",\n\t\t\"GH_GAME_WINNER\": \"Winner\",\n\t\t\"GH_GAME_WINSUM\": \"Sum\",\n\t\t\"GH_GAME_TOTAL\": \"Total\",\n\t\t\"GH_GAME_STAKE\": \"Stake\",\n\n\t\t\"GH_SPIN_TITLE\": \"SPIN\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Free Spins\",\n\t\t\"GH_RESPINS_TITLE\": \"Respins\",\n\n\t\t\"GH_BALL_POSITION\": \"Ball Position:\",\n\t\t\"GH_TRIO\": \"Trio\",\n\t\t\"GH_SPLIT\": \"Split\",\n\t\t\"GH_STREET\": \"Street\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Corner\",\n\t\t\"GH_SIX_LINE\": \"Six Line\",\n\t\t\"GH_COLUMN\": \"Column\",\n\t\t\"GH_FIRST_COLUMN\": \"1st Column\",\n\t\t\"GH_SECOND_COLUMN\": \"2nd Column\",\n\t\t\"GH_THIRD_COLUMN\": \"3rd Column\",\n\t\t\"GH_DOZEN\": \"Dozen\",\n\t\t\"GH_FIRST_DOZEN\": \"1st 12\",\n\t\t\"GH_SECOND_DOZEN\": \"2nd 12\",\n\t\t\"GH_THIRD_DOZEN\": \"3rd 12\",\n\t\t\"GH_STRAIGHT\": \"Straight\",\n\t\t\"GH_COLOR\": \"Color\",\n\t\t\"GH_BLACK\": \"Black\",\n\t\t\"GH_RED\": \"Red\",\n\t\t\"GH_EVEN_ODD\": \"Even/Odd\",\n\t\t\"GH_EVEN\": \"Even\",\n\t\t\"GH_ODD\": \"Odd\",\n\t\t\"GH_SMALL_BIG\": \"1-18/19-36\",\n\t\t\"GH_SMALL\": \"1-18\",\n\t\t\"GH_BIG\": \"19-36\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Sneak peek was active for this round. All winnings and bets are demo money.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"Free rounds was active for this round.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Match your numbers\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Reveal sum of 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Match 3 symbols\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Match 3 amounts\",\n\t\t\"SCRATCH_FREE_CARD\": \"Free card\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tmk: {\n\t\t\"TOTAL_COINS_WIN\": \"Total coins win\",\n\t\t\"GH_HISTORY\": \"Историја\",\n\t\t\"GH_GAME_DETAILS\": \"Детали за игра\",\n\t\t\"GH_GAME_ID\": \"ID на игра\",\n\t\t\"GH_ROUND_ID\": \"ID на рунда\",\n\t\t\"GH_SERVER_TIME_START\": \"Време на започнување на серверот\",\n\t\t\"GH_SERVER_TIME_END\": \"Време на завршување на серверот\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Добитни патеки\",\n\t\t\"GH_LENGTH\": \"Должина на добивка од симбол\",\n\t\t\"GH_MULTIPLIER\": \"Множител\",\n\t\t\"GH_WIN_WAYS\": \"Добитни патеки\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Кластер\",\n\t\t\"GH_CLUSTER_COUNT\": \"Број на симболи\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Добивка од Scatter\",\n\n\t\t\"GH_HANDS\": \"Раце\",\n\t\t\"GH_SIDE_BETS\": \"Споредни облози\",\n\n\t\t\"HAND_0\": \"Рака [1]\",\n\t\t\"HAND_0_SIDE_0\": \"Рака [1] Спореден облог - 21 плус 3\",\n\t\t\"HAND_0_SIDE_1\": \"Рака [1] Спореден облог - Кој било пар\",\n\t\t\"HAND_0_SIDE_2\": \"Рака [1] Спореден облог - Басторама\",\n\n\t\t\"HAND_0_SPLIT_0\": \"Рака [1] (Поделба)\",\n\t\t\"HAND_1\": \"Рака [2]\",\n\t\t\"HAND_1_SPLIT_0\": \"Рака [2] (Поделба)\",\n\t\t\"HAND_1_SIDE_0\": \"Рака [2] Спореден облог - 21 плус 3\",\n\t\t\"HAND_1_SIDE_1\": \"Рака [2] Спореден облог - Кој било пар\",\n\t\t\"HAND_1_SIDE_2\": \"Рака [2] Спореден облог - Басторама\",\n\n\t\t\"HAND_2\": \"Рака [3]\",\n\t\t\"HAND_2_SPLIT_0\": \"Рака [3] (Поделба)\",\n\t\t\"HAND_2_SIDE_0\": \"Рака [3] Спореден облог - 21 плус 3\",\n\t\t\"HAND_2_SIDE_1\": \"Рака [3] Спореден облог - Кој било пар\",\n\t\t\"HAND_2_SIDE_2\": \"Рака [3] Спореден облог - Басторама\",\n\n\t\t\"INSURANCE_HAND_0\": \"Рака [1] (Осигурување)\",\n\t\t\"INSURANCE_HAND_1\": \"Рака [2] (Осигурување)\",\n\t\t\"INSURANCE_HAND_2\": \"Рака [3] (Осигурување)\",\n\t\t\"DEALER\": \"Крупије\",\n\t\t\"ANTE\": \"Анте\",\n\t\t\"ANTE_BONUS\": \"Анте бонус\",\n\t\t\"PAIR_BONUS\": \"Бонус од пар\",\n\t\t\"PLAY\": \"Играј\",\n\t\t\n\t\t\"STAKE\": \"Влог\",\n\t\t\"INSURANCE\": 'Осигурување',\n\n\t\t\"GH_TRANSACTIONS\": \"Трансакции\",\n\t\t\"GH_TOTAL_STAKE\": \"Вкупен Влог\",\n\t\t\"GH_TOTAL_BET\": \"Вкупен Облог\",\n\t\t\"GH_TOTAL_WIN\": \"Вкупна добивка\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Трошок за купување функција\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Назив на купување функција\",\n\t\t\"GH_BEFORE_STAKE\": \"пред влог\",\n\t\t\"GH_AFTER_STAKE\": \"по влог\",\n\t\t\"GH_AT_END\": \"на крајот\",\n\t\t\"GH_BALANCE\": \"Главно салдо\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Бонус салдо\",\n\t\t\"GH_SESSION_BALANCE\": \"Салдо од сесија\",\n\t\t\"GH_SESSION_FREEBETS\": \"Бонус салдо од сесија\",\n\t\t\"GH_BONUS\": \"Бонус\",\n\n\t\t\"GH_WIN_DETAILS\": \"Детали за добивка\",\n\t\t\"GH_SPIN_DETAILS\": \"Детали за вртење\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Дополнителни детали\",\n\t\t\"GH_GAME_RESULTS\": \"Резултати од игра\",\n\t\t\"GH_INITIAL_SPIN\": \"Почетно вртење\",\n\t\t\"GH_JACKPOT_WIN\": \"Џекпот добивка\",\n\t\t\"GH_SYMBOL_WINS\": \"Добивки од симболи\",\n\t\t\"GH_LINE\": \"Линија\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Добивки од бесплатни вртења\",\n\t\t\"GH_FREE_SPIN\": \"Бесплатно вртење\",\n\t\t\"GH_RESPIN\": \"Повторно вртење\",\n\t\t\"GH_RESPIN_WINS\": \"Добивки од повторно вртење\",\n\t\t\"GH_NUDGE\": \"Поттурни\",\n\t\t\"GH_NUDGE_WINS\": \"Добивки од поттурнување\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Множител на добивка\",\n\t\t\"GH_MODIFIER_WIN\": \"Добивка од модификатор\",\n\t\t\"GH_BONUS_WIN\": \"Бонус добивка\",\n\t\t\"GH_INSTANT_WIN\": \"Инстант добивка\",\n\t\t\"GH_NO_HISTORY\": \"Нема достапна историја\",\n\t\t\"GH_GAMBLE_WINS\": \"Добивки од коцкање\",\n\t\t\"GH_NO_WINS\": \"Без добивки\",\n\t\t\"GH_ROUND_CORRECTION\": \"Корекција со заокружување\",\n\t\t\"GH_LIMITED_WIN\": \"Добивка (максимално ограничување)\",\n\t\t\"WIN_EXCHANGE\": \"Цена на бесплатни вртења\",\n\t\t\"HALF_COLLECT\": \"Половина собрана добивка\",\n\t\t\"FULL_COLLECT\": \"Целосно собрана добивка\",\n\n\t\t\"GH_TABLE_ID\": \"ID на маса\",\n\t\t\"GH_PLAYER\": \"Играч\",\n\t\t\"GH_BANKER\": \"Банкар\",\n\t\t\"GH_TIE\": \"Нерешено\",\n\t\t\"GH_PLAYER_PAIR\": \"Пар на играч\",\n\t\t\"GH_BANKER_PAIR\": \"Пар на банкар\",\n\t\t\"GH_GAME_WINNER\": \"Победник\",\n\t\t\"GH_GAME_WINSUM\": \"Износ\",\n\t\t\"GH_GAME_TOTAL\": \"Вкупно\",\n\t\t\"GH_GAME_STAKE\": \"Влог\",\n\n\t\t\"GH_SPIN_TITLE\": \"ВРТЕЊЕ\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Бесплатни Вртења\",\n\t\t\"GH_RESPINS_TITLE\": \"Повторни Вртења\",\n\n\t\t\"GH_BALL_POSITION\": \"Позиција на топката:\",\n\t\t\"GH_TRIO\": \"Trio\",\n\t\t\"GH_SPLIT\": \"Split\",\n\t\t\"GH_STREET\": \"Street\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Corner\",\n\t\t\"GH_SIX_LINE\": \"Six Line\",\n\t\t\"GH_COLUMN\": \"Column\",\n\t\t\"GH_FIRST_COLUMN\": \"1-ва колона\",\n\t\t\"GH_SECOND_COLUMN\": \"2-ра колона\",\n\t\t\"GH_THIRD_COLUMN\": \"3-та колона\",\n\t\t\"GH_DOZEN\": \"Dozen\",\n\t\t\"GH_FIRST_DOZEN\": \"1-ви 12\",\n\t\t\"GH_SECOND_DOZEN\": \"2-ри 12\",\n\t\t\"GH_THIRD_DOZEN\": \"3-ти 12\",\n\t\t\"GH_STRAIGHT\": \"Straight\",\n\t\t\"GH_COLOR\": \"Color\",\n\t\t\"GH_BLACK\": \"Црно\",\n\t\t\"GH_RED\": \"Црвено\",\n\t\t\"GH_EVEN_ODD\": \"Пар/Непар\",\n\t\t\"GH_EVEN\": \"Пар\",\n\t\t\"GH_ODD\": \"Непар\",\n\t\t\"GH_SMALL_BIG\": \"1-18/19-36\",\n\t\t\"GH_SMALL\": \"1-18\",\n\t\t\"GH_BIG\": \"19-36\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Ѕиркањето беше активно за оваа рунда. Сите добивки и облози се со демо-пари.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"Бесплатните рунди беа активни за оваа рунда.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Match your numbers\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Reveal sum of 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Match 3 symbols\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Match 3 amounts\",\n\t\t\"SCRATCH_FREE_CARD\": \"Free card\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\t'en-SC': {\n\t\t\"TOTAL_COINS_WIN\": \"Total coins win\",\n\t\t\"GH_HISTORY\": \"History\",\n\t\t\"GH_GAME_DETAILS\": \"Game details\",\n\t\t\"GH_GAME_ID\": \"Game ID\",\n\t\t\"GH_ROUND_ID\": \"Round ID\",\n\t\t\"GH_SERVER_TIME_START\": \"Server time start\",\n\t\t\"GH_SERVER_TIME_END\": \"Server time end\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Win Ways\",\n\t\t\"GH_LENGTH\": \"Symbol win length\",\n\t\t\"GH_MULTIPLIER\": \"Multiplier\",\n\t\t\"GH_WIN_WAYS\": \"Win Ways\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Cluster\",\n\t\t\"GH_CLUSTER_COUNT\": \"Symbol count\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Scatter win\",\n\n\t\t\"GH_HANDS\": \"Hands\",\n\t\t\"GH_SIDE_BETS\": \"Side bets\",\n\n\t\t\"HAND_0\": \"Hand [1]\",\n\t\t\"HAND_0_SIDE_0\": \"Hand [1] Sidebet - 21 Plus 3\",\n\t\t\"HAND_0_SIDE_1\": \"Hand [1] Sidebet - Any Pair\",\n\t\t\"HAND_0_SIDE_2\": \"Hand [1] Sidebet - Bustorama\",\n\n\t\t\"HAND_0_SPLIT_0\": \"Hand [1] (Split)\",\n\t\t\"HAND_1\": \"Hand [2]\",\n\t\t\"HAND_1_SPLIT_0\": \"Hand [2] (Split)\",\n\t\t\"HAND_1_SIDE_0\": \"Hand [2] Sidebet - 21 Plus 3\",\n\t\t\"HAND_1_SIDE_1\": \"Hand [2] Sidebet - Any Pair\",\n\t\t\"HAND_1_SIDE_2\": \"Hand [2] Sidebet - Bustorama\",\n\n\t\t\"HAND_2\": \"Hand [3]\",\n\t\t\"HAND_2_SPLIT_0\": \"Hand [3] (Split)\",\n\t\t\"HAND_2_SIDE_0\": \"Hand [3] Sidebet - 21 Plus 3\",\n\t\t\"HAND_2_SIDE_1\": \"Hand [3] Sidebet - Any Pair\",\n\t\t\"HAND_2_SIDE_2\": \"Hand [3] Sidebet - Bustorama\",\n\n\t\t\"INSURANCE_HAND_0\": \"Hand [1] (Insurance)\",\n\t\t\"INSURANCE_HAND_1\": \"Hand [2] (Insurance)\",\n\t\t\"INSURANCE_HAND_2\": \"Hand [3] (Insurance)\",\n\t\t\"DEALER\": \"Dealer\",\n\t\t\"ANTE\": \"Ante\",\n\t\t\"ANTE_BONUS\": \"Ante Bonus\",\n\t\t\"PAIR_BONUS\": \"Pair Bonus\",\n\t\t\"PLAY\": \"Play\",\n\t\t\n\t\t\"STAKE\": \"Stake\",\n\t\t\"INSURANCE\": 'Insurance',\n\n\t\t\"GH_TRANSACTIONS\": \"Coin Events\",\n\t\t\"GH_TOTAL_STAKE\": \"Total Play Amount\",\n\t\t\"GH_TOTAL_BET\": \"Total Play Amount\",\n\t\t\"GH_TOTAL_WIN\": \"Total win\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Get Feature cost\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Get Feature name\",\n\t\t\"GH_BEFORE_STAKE\": \"before play\",\n\t\t\"GH_AFTER_STAKE\": \"after play\",\n\t\t\"GH_AT_END\": \"at end\",\n\t\t\"GH_BALANCE\": \"Main coin amount\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Bonus coin amount\",\n\t\t\"GH_SESSION_BALANCE\": \"Session coin amount\",\n\t\t\"GH_SESSION_FREEBETS\": \"Session bonus coin amount\",\n\t\t\"GH_BONUS\": \"Bonus\",\n\n\t\t\"GH_WIN_DETAILS\": \"Win details\",\n\t\t\"GH_SPIN_DETAILS\": \"Spin details\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Additional Details\",\n\t\t\"GH_GAME_RESULTS\": \"Game results\",\n\t\t\"GH_INITIAL_SPIN\": \"Initial spin\",\n\t\t\"GH_JACKPOT_WIN\": \"Jackpot win\",\n\t\t\"GH_SYMBOL_WINS\": \"Symbol wins\",\n\t\t\"GH_LINE\": \"Line\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Free spins wins\",\n\t\t\"GH_FREE_SPIN\": \"Free spin\",\n\t\t\"GH_RESPIN\": \"Respin\",\n\t\t\"GH_RESPIN_WINS\": \"Respin wins\",\n\t\t\"GH_NUDGE\": \"Nudge\",\n\t\t\"GH_NUDGE_WINS\": \"Nudge wins\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Multiplier win\",\n\t\t\"GH_MODIFIER_WIN\": \"Modifier win\",\n\t\t\"GH_BONUS_WIN\": \"Bonus win\",\n\t\t\"GH_INSTANT_WIN\": \"Instant win\",\n\t\t\"GH_NO_HISTORY\": \"No history available\",\n\t\t\"GH_GAMBLE_WINS\": \"Take a Chance wins\",\n\t\t\"GH_NO_WINS\": \"No wins\",\n\t\t\"GH_ROUND_CORRECTION\": \"Rounding correction\",\n\t\t\"GH_LIMITED_WIN\": \"Win (max limit)\",\n\t\t\"WIN_EXCHANGE\": \"Free spins cost\",\n\t\t\"HALF_COLLECT\": \"Half collected win\",\n\t\t\"FULL_COLLECT\": \"Full collected win\",\n\n\t\t\"GH_TABLE_ID\": \"Table ID\",\n\t\t\"GH_PLAYER\": \"Player\",\n\t\t\"GH_BANKER\": \"Banker\",\n\t\t\"GH_TIE\": \"Tie\",\n\t\t\"GH_PLAYER_PAIR\": \"Player Pair\",\n\t\t\"GH_BANKER_PAIR\": \"Banker Pair\",\n\t\t\"GH_GAME_WINNER\": \"Winner\",\n\t\t\"GH_GAME_WINSUM\": \"Sum\",\n\t\t\"GH_GAME_TOTAL\": \"Total\",\n\t\t\"GH_GAME_STAKE\": \"Stake\",\n\n\t\t\"GH_SPIN_TITLE\": \"SPIN\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Free Spins\",\n\t\t\"GH_RESPINS_TITLE\": \"Respins\",\n\n\t\t\"GH_BALL_POSITION\": \"Ball Position:\",\n\t\t\"GH_TRIO\": \"Trio\",\n\t\t\"GH_SPLIT\": \"Split\",\n\t\t\"GH_STREET\": \"Street\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Corner\",\n\t\t\"GH_SIX_LINE\": \"Six Line\",\n\t\t\"GH_COLUMN\": \"Column\",\n\t\t\"GH_FIRST_COLUMN\": \"1st Column\",\n\t\t\"GH_SECOND_COLUMN\": \"2nd Column\",\n\t\t\"GH_THIRD_COLUMN\": \"3rd Column\",\n\t\t\"GH_DOZEN\": \"Dozen\",\n\t\t\"GH_FIRST_DOZEN\": \"1st 12\",\n\t\t\"GH_SECOND_DOZEN\": \"2nd 12\",\n\t\t\"GH_THIRD_DOZEN\": \"3rd 12\",\n\t\t\"GH_STRAIGHT\": \"Straight\",\n\t\t\"GH_COLOR\": \"Color\",\n\t\t\"GH_BLACK\": \"Black\",\n\t\t\"GH_RED\": \"Red\",\n\t\t\"GH_EVEN_ODD\": \"Even/Odd\",\n\t\t\"GH_EVEN\": \"Even\",\n\t\t\"GH_ODD\": \"Odd\",\n\t\t\"GH_SMALL_BIG\": \"1-18/19-36\",\n\t\t\"GH_SMALL\": \"1-18\",\n\t\t\"GH_BIG\": \"19-36\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Sneak peek was active for this round. All winnings and play amount are demo coins.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"Free rounds was active for this round.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Match your numbers\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Reveal sum of 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Match 3 symbols\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Match 3 amounts\",\n\t\t\"SCRATCH_FREE_CARD\": \"Free card\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t}\n};\n\n\nmodule.exports = Texts;\n","'use strict';\n\nconst SpinScreenPartial = require('../../templates/Partials/slot/spinScreen.hbs');\nconst SpinDetailsPartial = require('../../templates/Partials/slot/spinDetails.hbs');\nconst GameDetailsPartial = require('../../templates/Partials/slot/gameDetails.hbs');\nconst TransactionsPartial = require('../../templates/Partials/slot/transactions.hbs');\nconst WinLinesDetailsPartial = require('../../templates/Partials/slot/winLinesDetails.hbs');\nconst DemoRoundNotePartial = require('../../templates/Partials/slot/demoRoundNote.hbs');\nconst FreeRoundNotePartial = require('../../templates/Partials/slot/freeRoundNote.hbs');\nconst JackpotDetailsPartial = require('../../templates/Partials/slot/jackpotDetails.hbs');\nconst TilesDataPartial = require('../../templates/Partials/slot/tilesData.hbs');\n\nmodule.exports = [\n\t{ name: 'winLinesDetails', template: WinLinesDetailsPartial },\n\t{ name: 'transactions', template: TransactionsPartial },\n\t{ name: 'spinDetails', template: SpinDetailsPartial },\n\t{ name: 'gameDetails', template: GameDetailsPartial },\n\t{ name: 'spinScreen', template: SpinScreenPartial },\n\t{ name: 'demoRoundNote', template: DemoRoundNotePartial },\n    { name: 'freeRoundNote', template: FreeRoundNotePartial },\n\t{ name: 'jackpotDetails', template: JackpotDetailsPartial },\n\t{ name: 'tilesData', template: TilesDataPartial },\n];","// External dependencies:\nif (typeof $ === 'undefined') console.error('#History - missing required library: jQuery');\nif (typeof _ === 'undefined') console.error('#History - missing required library: Underscore.js');\n\nrequire('./utils/helpers');\nconst History = require('./History');\n\n// Main ------------------------------------------------------\nconst com = window.com = window.com || {};\n\ncom.casino = com.casino || {};\n\ncom.casino.versions = com.casino.versions || {};\ncom.casino.versions.history = '@@APP_VERSION';\nconsole.info('%c @@APP_VERSION ', 'color: white; background: #5e9eec');\n\ncom.casino.History = History;\n","const Panel = require('./Panel');\nconst slotTemplate = require('../../templates/scratch.hbs');\nconst CaySlotParserFactory = require('../parsers/scratch/cayetano/CayScratchParserFactory');\nconst Texts = require('../config/Texts');\n\n/**\n * CayScratchPanel. Manages how history is displayed for\n * Cayetano slot games\n *\n * @class\n * @extends {Panel}\n */\nclass CayScratchPanel extends Panel {\n\n\tconstructor() {\n\t\tsuper(slotTemplate, null);\n\t\tthis.parserFactory = new CaySlotParserFactory();\n\n\t\tthis.container.setAttribute('class', 'history-panel-container'); // check that\n\t}\n\n\t/**\n\t * Render history screen state\n\t *\n\t * @param {String} gameId Current game id as a string\n\t * @param {Object} data Spin server response data\n\t * @param {String} adapter Current game type('caySlot')\n\t * @param {String} assetsPath Current game assets path\n\t * @return {String} The renderered html code as a string\n\t */\n\trender(gameId, data, adapter, assetsPath, language, symbolsPath, hideGameDetails, hideTransactionDetails) {\n        this.parser = this.parserFactory.createParser(gameId);\n        let container = super.render(gameId, data, adapter, assetsPath, language, symbolsPath, hideGameDetails, hideTransactionDetails);\n\n\t\treturn container;\n\t}\n}\n\nmodule.exports = CayScratchPanel;\n","const Panel = require('./Panel');\nconst slotTemplate = require('../../templates/slots.hbs');\nconst CaySlotParserFactory = require('../parsers/slots/cayetano/CaySlotParserFactory');\nconst Texts = require('../config/Texts');\n\n/**\n * CaySlotPanel. Manages how history is displayed for\n * Cayetano slot games\n *\n * @class\n * @extends {Panel}\n */\nclass CaySlotPanel extends Panel {\n\n\tconstructor() {\n\t\tsuper(slotTemplate, null);\n\t\tthis.parserFactory = new CaySlotParserFactory();\n\n\t\tthis.container.setAttribute('class', 'history-panel-container'); // check that\n\t}\n\n\t/**\n\t * Render history screen state\n\t *\n\t * @param {String} gameId Current game id as a string\n\t * @param {Object} data Spin server response data\n\t * @param {String} adapter Current game type('caySlot')\n\t * @param {String} assetsPath Current game assets path\n\t * @return {String} The renderered html code as a string\n\t */\n\trender(gameId, data, adapter, assetsPath, language, symbolsPath, hideGameDetails, hideTransactionDetails) {\n        this.parser = this.parserFactory.createParser(gameId);\n        let container = super.render(gameId, data, adapter, assetsPath, language, symbolsPath, hideGameDetails, hideTransactionDetails);\n\n\t\treturn container;\n\t}\n}\n\nmodule.exports = CaySlotPanel;\n","const Panel = require('./Panel');\nconst tableTemplate = require('../../templates/table.hbs');\nconst CayTableParserFactory = require('../parsers/table/cayetano/CayTableParserFactory');\n/**\n * CayTablePanel. Manages how history is displayed for\n * Dop table games\n *\n * @class\n * @extends {Panel}\n */\nclass CayTablePanel extends Panel {\n\n\tconstructor() {\n\t\tsuper(tableTemplate, null);\n\t\tthis.parserFactory = new CayTableParserFactory();\n\n\t\tdocument.head.appendChild(Object.assign(document.createElement(\"style\"), {textContent:\".bars-skin-default .casino-game-history.table { overflow-y: auto;}\"}))\n\t}\n\n\t/**\n\t * Render history screen state\n\t *\n\t * @param {String} gameId Current game id as a string\n\t * @param {Object} data Bet server response data\n\t * @param {String} adapter Current game type('cayTable')\n\t * @param {String} assetsPath Current game assets path\n\t * @return {String} The renderered html code as a string\n\t */\n\trender(gameId, data, adapter, assetsPath, language, symbolsPath, hideGameDetails, hideTransactionDetails) {\n\t\tthis.parser = this.parserFactory.createParser(gameId);\n\t\tthis.parser && this.parser.registerPartials && this.parser.registerPartials(gameId);\n\n\t\treturn super.render(gameId, data, adapter, assetsPath, language, symbolsPath, hideGameDetails, hideTransactionDetails)\n\t}\n}\n\nmodule.exports = CayTablePanel;\n","const Panel = require('./Panel');\nconst slotTemplate = require('../../templates/slots.hbs');\nconst DefaultParser = require('../parsers/DefaultParser');\n\n\nclass DefaultPanel extends Panel {\n\n\tconstructor() {\n\t\tsuper(slotTemplate, new DefaultParser());\n\t}\n\n\t/**\n\t * Render history screen state\n\t *\n\t * @param {String} gameId Current game id as a string\n\t * @param {Object} data Bet server response data\n\t * @param {String} adapter Current game type('nsgSlot')\n\t * @param {String} assetsPath Current game assets path\n\t * @return {String} The renderered html code as a string\n\t */\n\trender(gameId, data, adapter, assetsPath, language, symbolsPath, hideGameDetails, hideTransactionDetails) {\n\t\treturn super.render(gameId, data, adapter, assetsPath, language, symbolsPath, hideGameDetails, hideTransactionDetails)\n\t}\n}\n\nmodule.exports = DefaultPanel;\n","const Panel = require('./Panel');\nconst slotTemplate = require('../../templates/slots.hbs');\nconst DopSlotParserFactory = require('../parsers/slots/dop/DopSlotParserFactory');\nconst Texts = require('../config/Texts');\nconst Config = require('../config/Config');\nconst dopLines = require('../config/DopLines').lines;\nconst EventsHub = require('../EventsHub');\n\n/**\n * DopSlotPanel. Manages how history is displayed for\n *\n * @class\n * @extends {Panel}\n */\nclass DopSlotPanel extends Panel {\n\n\tconstructor() {\n\t\tsuper(slotTemplate, null);\n\t\tthis.parserFactory = new DopSlotParserFactory();\n\t\tthis.data = null;\n\t\tthis.gameId = null;\n\t\tthis.gamesWinLines = {}; // win lines for all games, fetched on demand\n\t\tthis.winLines = []; // current win lines set\n\t\tthis._currentWinLineSet = -2;\n\n\t\tthis._onAssetsLoadedCallback = this._onAssetsLoaded.bind(this);\n\t\tthis._attachListeners();\n\t}\n\n\tremoveListeners() {\n\t\tEventsHub.removeListener(EventsHub.events.ASSETS_LOADED, this._onAssetsLoadedCallback);\n\t}\n\n\t/**\n\t * Render history screen state\n\t *\n\t * @param {String} gameId Current game id as a string\n\t * @param {Object} data Spin server response data\n\t * @param {String} adapter Current game type('dopSlot')\n\t * @param {String} assetsPath Current game assets path\n\t * @return {String} The renderered html code as a string\n\t */\n\trender(gameId, data, adapter, assetsPath, language, symbolsPath, hideGameDetails, hideTransactionDetails) {\n\t\tthis.currentGameId = gameId;\n\t\tthis._currentWinLineSet = -2;\n\n\t\tthis.parser = this.parserFactory.createParser(gameId);\n\n\t\tlet container = super.render(gameId, data, adapter, assetsPath, language, symbolsPath, hideGameDetails, hideTransactionDetails);\n\n\t\treturn container;\n\t}\n\n\tonRendered(gameId, data, adapter, assetsPath, language, symbolsPath) {\n\t\tif (!this.parsedData.reels) return;\n\n\t\tif (!this.gamesWinLines[this.currentGameId]) this.gamesWinLines[this.currentGameId] = [];\n\n\t\tlet notWays = !_.contains(Config.ways, gameId);\n\t\tlet notCluster = !_.contains(Config.cluster, gameId);\n\t\tif ((notWays && notCluster) || gameId === 'MidasGold') { // MidasGold is actually lines\n\t\t\tif (this.gamesWinLines[gameId].length < 1) {\n\t\t\t\tconst { isBundlerV2Build } = com.casino && com.casino.bundler || {};\n\t\t\t\tisBundlerV2Build && (assetsPath = 'games.history/');\n\n\t\t\t\tthis._fetchWinLines(gameId, assetsPath + 'lines/dop/')\n\t\t\t\t\t.then(() => this._addClickListeners());\n\t\t\t} else {\n\t\t\t\tthis._setWinLineSet(this.parsedData.winDetails.winLineSet);\n\t\t\t\tthis._showSpinScreen(0);\n\t\t\t\tthis._drawLines(() => {\n\t\t\t\t\tthis._highlightWinningLines(0);\n\t\t\t\t\tthis._addClickListeners();\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tthis._addClickListeners();\n\t\t}\n\n\t\tthis._setUpInfiniScreenWrapper();\n\t}\n\n\tresize(e) {\n\t\tthis._fitLinesContainer();\n\t\tthis._scrollScreenWrapperToRight();\n\t}\n\n\t/**\n\t * On freespin / respin label click\n\t * @param {Number} screenId\n\t * @param {Number} winLineSet\n\t */\n\t_changeSpinScreen(screenId, winLineSet) {\n\t\tthis._setWinLineSet(winLineSet);\n\n\t\tthis._unselectTilesAndLineLabels();\n\t\tthis._showSpinScreen(screenId);\n\t\tthis._drawLines(() => {\n\t\t\tthis._highlightWinningLines(screenId);\n\t\t\tthis._scrollScreenWrapperToRight();\n\t\t});\n\n\t\treturn false;\n\t}\n\n\t_attachListeners() {\n\t\tEventsHub.on(EventsHub.events.ASSETS_LOADED, this._onAssetsLoadedCallback);\n\t}\n\n\t_onAssetsLoaded() {\n\t\tthis._showSpinScreen(0);\n\t\tthis._drawLines(() => {\n\t\t\tthis._unselectTilesAndLineLabels();\n\t\t\tthis._highlightWinningLines(0);\n\t\t\tthis._scrollScreenWrapperToRight();\n\t\t});\n\t};\n\n\t/**\n\t * Attach win lines click event listeners\n\t * @private\n\t * @param  {Element} lineLabel Selected dom line label element\n\t */\n\t_onLineLabelSelect(lineLabel) {\n\t\tconst screenId = parseInt(lineLabel.parentElement.getAttribute('data-freespin-id'), 10);\n\t\tconst winLineSet = parseInt(lineLabel.getAttribute('data-spin-winline-set'), 10);\n\t\tconst multiline = _.contains(Config.multiline, this.currentGameId);\n\n\t\tif (multiline && this._currentWinLineSet !== winLineSet) {\n\t\t\tthis._setWinLineSet(winLineSet);\n\t\t\tthis._showSpinScreen(screenId);\n\t\t\tthis._drawLines(() => {\n\t\t\t\tthis._toggleLines(lineLabel);\n\t\t\t});\n\t\t} else {\n\t\t\tthis._showSpinScreen(screenId);\n\t\t\tthis._toggleLines(lineLabel);\n\t\t}\n\n\t\tthis._scrollScreenWrapperToRight();\n\t}\n\n\t_unselectTilesAndLineLabels() {\n\t\tconst container = this.container;\n\t\tcontainer.querySelectorAll(`.tile-highlight`).forEach((tileHighlight) => {\n\t\t\ttileHighlight.classList.remove('tile-highlight');\n\t\t});\n\t\tcontainer.querySelectorAll(`.line-details-active`).forEach((lineDetail) => {\n\t\t\tlineDetail.classList.remove('line-details-active');\n\t\t});\n\t\tcontainer.querySelectorAll(`.winline-path.winline-active`).forEach((winLine) => { //!may be slow with 100 free spin screens :/ TODO - test\n\t\t\twinLine.classList.remove('winline-active');\n\t\t});\n\t}\n\n\t/**\n\t * Hide non participating winline svgs and tile highlights, mark participating ones.\n\t * @param {Element} lineLabel - selected dom line label\n\t */\n\t_toggleLines(lineLabel) {\n\t\tlet highlightTilesOnly = false;\n\t\tif (_.contains(Config.ways, this.currentGameId) || _.contains(Config.cluster, this.currentGameId)) highlightTilesOnly = true;\n\n\t\tthis._unselectTilesAndLineLabels();\n\n\t\tif (highlightTilesOnly) {\n\t\t\tthis._highlightTilesOnly(lineLabel);\n\t\t} else {\n\t\t\tthis._highlightLineAndTiles(lineLabel);\n\t\t}\n\n\t\tlineLabel.classList.add('line-details-active');\n\t}\n\n\t/**\n\t * Shows the selected spin screen tiles and lines and hides the rest\n\t * @private\n\t * @param  {number} spinScreenId The spin screen id\n\t */\n\t_showSpinScreen(spinScreenId) {\n\t\tlet container = this.container;\n\t\tlet screen = container.querySelector(`.spin-screen-${spinScreenId}`);\n\n\t\tif (!screen) return;\n\n\t\tif (!screen.classList.contains('spin-screen-active')) {\n\t\t\t$('.spin-screen').hide().removeClass('spin-screen-active');\n\n\t\t\tscreen.style.display = 'table-row';\n\t\t\tscreen.classList.add('spin-screen-active');\n\t\t};\n\n\t\tlet screenLinks = container.querySelectorAll(`.free-spin-details`);\n\n\t\tfor (let i = 0; i < screenLinks.length; i++) {\n\t\t\tlet screenLink = screenLinks[i];\n\t\t\tlet freeSpinId = parseInt(screenLink.getAttribute('data-freespin-id'), 10);\n\n\t\t\tif (spinScreenId === freeSpinId) {\n\t\t\t\tscreenLink.classList.add('active');\n\t\t\t} else {\n\t\t\t\tscreenLink.classList.remove('active');\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * When selecting spin screen - highlight all win line svgs for spin\n\t * @param {Number} spinScreenId\n\t */\n\t_highlightWinningLines(spinScreenId) {\n\t\tif (_.contains(Config.dontDrawLines, this.currentGameId)) return;\n\n\t\tlet container = this.container;\n\n\t\tlet linesList = container.querySelector(`.lines-list-${spinScreenId}`);\n\n\t\tif (linesList !== null) {\n\t\t\tlet children = linesList.children;\n\n\t\t\tfor (let i = 0; i < children.length; i++) {\n\t\t\t\tlet winLine = children[i];\n\t\t\t\tlet lineId = parseInt(winLine.getAttribute('data-line-id'), 10);\n\t\t\t\tlet lineGraphic = container.querySelector(`.winline-path-${lineId}`);\n\n\t\t\t\tif (lineGraphic !== null) {\n\t\t\t\t\tlineGraphic.classList.add('winline-active');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * When a single line is selected - highlights(or removes the highlight) the winnings tiles of a line and the svg line\n\t * @private\n\t * @param  {Element}  line  Selected dom line label element\n\t * @param  {Boolean} selected Whether the line should be highlighted\n\t */\n\t_highlightLineAndTiles(lineLabel, selected = true) {\n\t\tconst container = this.container;\n\t\tconst lineId = lineLabel.getAttribute('data-line-id');\n\t\tconst screenId = lineLabel.parentElement.getAttribute('data-freespin-id') || 0;\n\t\tconst lineTilesData = lineLabel.getAttribute('data-line-tiles');\n\t\tconst lineStart = parseInt(lineLabel.getAttribute('data-line-start'), 10);\n\t\tconst line = this.winLines[lineId];\n\t\tconst screen = container.querySelector(`.spin-screen-${screenId}`);\n\t\tlet lineLen = lineStart + parseInt(lineLabel.getAttribute('data-line-length'), 10);\n\n\t\tlet lineTiles = [];\n\n\t\tif (!line && (_.contains(Config.hasAdditionalWin.scatterWin, this.currentGameId) || _.contains(Config.hasAdditionalWin.wayWin, this.currentGameId))) {\n\t\t\tthis._highlightTilesOnly(lineLabel);\n\t\t} else {\n\t\t\t// active the selected line\n\t\t\tlet selectedLine = container.querySelector(`.winline-path-${lineId}`);\n\t\t\tif (selectedLine !== null) {\n\t\t\t\tselectedLine.classList.add('winline-active');\n\t\t\t}\n\n\t\t\tlineTilesData.split(',').forEach((itm, index) => {\n\t\t\t\tlineTiles[index] = parseInt(itm, 10);\n\t\t\t});\n\t\t\tfor (let i = lineStart; i < lineLen; i++) {\n\t\t\t\tif (lineTiles[i] === 0) {\n\t\t\t\t\tlineLen++;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tlet tileIndex = line[i];\n\t\t\t\tlet reel = screen.children[i];\n\t\t\t\tlet tile = reel.children[tileIndex];\n\n\t\t\t\tif (selected) {\n\t\t\t\t\ttile.classList.add('tile-highlight');\n\t\t\t\t} else {\n\t\t\t\t\ttile.classList.remove('tile-highlight');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Handles symbol highlighting for ways and cluster slot games\n\t */\n\t_highlightTilesOnly(way){\n        let container = this.container;\n        let screenId = parseInt(way.parentElement.getAttribute('data-freespin-id')) || 0;\n        let screen = container.querySelector(`.spin-screen-${screenId}`);\n\n        let tiles = [];\n        let tilesData = way.getAttribute('data-line-tiles');\n        tilesData.split(',').forEach((itm, index) => {\n            tiles[index] = parseInt(itm, 10);\n        });\n\n\t\tlet tilesIndex = 0;\n\t\t_.each(screen.children, (reelContainer) => {\n\t\t\t_.each(reelContainer.children, (tileContainer) => {\n\t\t\t\tif (tiles[tilesIndex] === 0) tileContainer.classList.remove('tile-highlight');\n\t\t\t\telse tileContainer.classList.add('tile-highlight');\n\t\t\t\ttilesIndex++;\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n * Waits for all tiles to load\n * @private\n * @param {function} callback\n */\n\t_onLastTileLoaded(callback) {\n\t\tlet screen = this.container.querySelector('.spin-screen-active');\n\n\t\tif (!screen) return;\n\n\t\tlet tileImg = [...screen.querySelectorAll('.tile-img')].pop();\n\n\t\tif (!tileImg) return;\n\n\t\tlet { naturalWidth, naturalHeight, clientWidth, clientHeight } = tileImg;\n\n\t\tif (tileImg && naturalWidth && naturalHeight && clientWidth && clientHeight) return callback();\n\n\t\ttileImg.addEventListener('load', this._onLastTileLoaded.bind(this, callback));\n\t}\n\n\t/**\n\t * Builds win lines using the <Polyline> element\n\t * @private\n\t * @param {number} reelOffsets Offsets of reels if any\n\t * @param {function} callback\n\t * @param {number} lineSize The line thickness, percentage value\n\t */\n\t_buildSVGLines(reelOffsets = 0, callback, lineSize = 0.7) {\n\t\tlet screen = this.container.querySelector('.spin-screen-active'),\n\t\t\ttileImg = [...screen.querySelectorAll('.tile-img')].find(tile => tile.clientWidth && tile.clientHeight),\n\t\t\treels = this.parsedData.reels.length,\n\t\t\ttiles = this.parsedData.reels[0].length,\n\t\t\ttileWidth = tileImg.clientWidth,\n\t\t\ttileHeight = tileImg.clientHeight,\n\t\t\tsvgWidth = tileWidth * reels,\n\t\t\tsvgHeight = tileHeight * tiles;\n\n\t\tthis._resizeSVG(svgWidth, svgHeight);\n\n\t\tlet linesContainer = this.container.querySelector('.lines-container');\n\t\twhile (linesContainer.firstChild) {\n\t\t\tlinesContainer.removeChild(linesContainer.firstChild);\n\t\t}\n\n\t\tlet row = 0;\n\t\tlet alignOffset = 0;\n\t\tconst svgNS = 'http://www.w3.org/2000/svg';\n\n\t\tconst getVertOffset = (tileIndex, index, reelOffsets) => {\n\t\t\tconst reelOffset = reelOffsets ? reelOffsets[index] : 0;\n\t\t\treturn (tileIndex * tileHeight) + (reelOffset * tileHeight); // start drawing from the top + some reelOffset, if any\n\t\t};\n\n\t\tlet linesPadding = {\n\t\t\ttop: 0.25,\n\t\t\tbottom: 0.25\n\t\t};\n\n\t\tlet linesOffsetBuffer = this._calculateLinesBufferArray(tileHeight, linesPadding, this.winLines);\n\n\t\tthis.winLines.forEach((winline, index) => {\n\t\t\tlet tileIndex = winline[0];\n\t\t\tlet startX = tileWidth/2;\n\t\t\tlet startY = getVertOffset(tileIndex, 0, reelOffsets);\n\t\t\tlet endX = startX+tileWidth;\n\n\t\t\tlet pointsStr = `0, ${startY} ${startX}, ${startY} `;\n\n\t\t\tlet endY = getVertOffset(winline[1], 1, reelOffsets);\n\n\t\t\tpointsStr += `${startX}, ${startY} ${endX}, ${endY} `;\n\n\t\t\tstartX += tileWidth;\n\t\t\tendX += tileWidth;\n\n\t\t\tfor (let i = 1; i < winline.length; i++) {\n\n\t\t\t\ttileIndex = winline[i];\n\n\t\t\t\tstartY = getVertOffset(tileIndex, i, reelOffsets);\n\t\t\t\tlet nextTileIndex = winline[i + 1] !== undefined ? winline[i + 1] : winline[winline.length - 1];\n\n\t\t\t\tendY = getVertOffset(nextTileIndex, (winline[i + 1] !== undefined) ? (i + 1) : i, reelOffsets);\n\n\t\t\t\tpointsStr += `${startX}, ${startY} ${endX}, ${endY} `;\n\n\t\t\t\tstartX += tileWidth;\n\t\t\t\tendX += tileWidth;\n\t\t\t}\n\n\t\t\tlet line = document.createElementNS(svgNS, 'polyline');\n\n\t\t\tline.setAttribute('points', pointsStr);\n\n\t\t\tline.setAttribute('fill', 'none');\n\t\t\t// а percentage value is always computed as a percentage of the normalized viewBox diagonal length\n\t\t\tline.setAttribute('stroke-width', `${lineSize}%`);\n\t\t\tline.setAttribute('class', `winline-path winline-path-${index}`);\n\n\t\t\t// calculate lines offset from eachother\n\t\t\trow = winline[0];\n\t\t\talignOffset = linesOffsetBuffer[row].currentOffset;\n\t\t\tline.setAttribute('transform', `translate(0, ${alignOffset})`);\n\t\t\tlinesOffsetBuffer[row].currentOffset += linesOffsetBuffer[row].offset;\n\n\t\t\tlinesContainer.appendChild(line);\n\t\t});\n\n\t\tif (callback) callback();\n\n\t\tthis._fitLinesContainer();\n\t}\n\n\t/**\n\t * Fetch the file with lines\n\t * @param {String) gameId\n     * @param {String) providerPath Path to the js file with lines\n\t */\n\t_fetchWinLines(gameId, providerPath) {\n\t\tlet checksum = dopLines.filter(game => game.id === gameId)[0].hash;\n\t\treturn fetch(`${providerPath + gameId}.js?c=${checksum}`)\n\t\t\t.then((response) => {\n\t\t\t\tif (!response.ok) return [];\n\t\t\t\treturn response.json();\n\t\t\t})\n\t\t\t.then((linesArr) => {\n\t\t\t\tif (linesArr && linesArr.length > 0) {\n\t\t\t\t\tthis.gamesWinLines[this.currentGameId] = linesArr;\n\n\t\t\t\t\tthis._setWinLineSet(this.parsedData.winDetails.winLineSet);\n\t\t\t\t\tthis._showSpinScreen(0);\n\n\t\t\t\t\treturn this._drawLines(() => {\n\t\t\t\t\t\tthis._unselectTilesAndLineLabels();\n\t\t\t\t\t\tthis._highlightWinningLines(0);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\t_setWinLineSet(winLineSet = -1) {\n\t\tconst multiline = _.contains(Config.multiline, this.currentGameId);\n\t\tif (multiline) {\n\t\t\tif (winLineSet < 0) return console.error(\"Missing win lines set for win lines\");\n\t\t\tthis.winLines = this.gamesWinLines[this.currentGameId][winLineSet];\n\t\t} else {\n\t\t\tthis.winLines = this.gamesWinLines[this.currentGameId];\n\t\t}\n\n\t\tthis._currentWinLineSet = winLineSet;\n\t}\n\n\t_drawLines(callback) {\n\t\tlet dontDrawLines = _.contains(Config.dontDrawLines, this.currentGameId);\n\n\t\tif (dontDrawLines) return callback && callback();\n\n\t\tconst offsetsData = Config.gameReelsOffsets.find((item) => {\n\t\t\treturn item.gameId === this.currentGameId;\n\t\t});\n\t\t// If there is an offset data, pass its offset prop, otherwise undefined.\n\t\tthis._onLastTileLoaded(() => {\n\t\t\tthis._buildSVGLines(offsetsData && offsetsData.offsets, callback);\n\t\t});\n\t}\n\n\t_calculateLinesBufferArray(tileHeight, linesPadding, linesArr) {\n\t\tlet linesOffsetBuffer = [];\n\t\tlet linesFirstTileCount = {};\n\t\tfor (let i = 0, len = linesArr.length; i < len; i+=1) {\n\t\t\tlet firstTileInLineArr = linesArr[i][0];\n\n\t\t\tif (!linesFirstTileCount[firstTileInLineArr]) {\n\t\t\t\tlinesFirstTileCount[firstTileInLineArr] = 0;\n\t\t\t}\n\t\t\tlinesFirstTileCount[firstTileInLineArr]+=1;\n\t\t}\n\n\t\tfor (let key in linesFirstTileCount) {\n\t\t\tlet linesContainerHeight = tileHeight - (tileHeight * linesPadding.top) - (tileHeight * linesPadding.bottom); // Calculate the actual height of the container used for drawing the lines\n\t\t\tlet lineOffset = linesContainerHeight / linesFirstTileCount[key]; // Calculate the offset between each line\n\n\t\t\tlinesOffsetBuffer[key] = {\n\t\t\t\toffset: lineOffset,\n\t\t\t\tcurrentOffset: (tileHeight * linesPadding.top) + lineOffset / 2 // the starting offset for the first line\n\t\t\t};\n\t\t}\n\n\t\treturn linesOffsetBuffer;\n\t}\n\n\t/**\n\t * Resize svg element\n\t * @private\n\t * @param {number} width\n\t * @param {number} height\n\t */\n\t_resizeSVG(width, height) {\n\t\tlet svg = this.container.querySelector('.lines-overlay');\n\n\t\tsvg.setAttribute(\"viewBox\", `0 0 ${width} ${height}`);\n\t\tsvg.setAttribute(\"width\", `${width}`);\n\t\tsvg.setAttribute(\"height\", `${height}`);\n\n\t\tsvg.style.maxHeight = 'none';\n\t}\n\n\t/**\n\t * Fit the lines overlay container to the reels screen size\n\t *\n\t * @private\n\t */\n\t_fitLinesContainer() {\n\t\tconst linesOverlay = this.container.querySelector('.lines-overlay');\n\t\tconst mainScreen = this.container.querySelector('table.main-screen.reels');\n\n\t\tif (!(linesOverlay || mainScreen)) return;\n\n\t\tlinesOverlay.style.height = `${mainScreen.offsetHeight}px`;\n\t}\n\n\t_addClickListeners() {\n\t\tlet winLinesLabels = this.container.querySelectorAll('.line-details');\n\n\t\tfor (let i = 0; i < winLinesLabels.length; i++) {\n\t\t\tlet lineItem = winLinesLabels[i];\n\t\t\tlineItem.addEventListener('click', this._onLineLabelSelect.bind(this, lineItem));\n\t\t}\n\n\t\tlet freespinScreenDetails = this.container.querySelectorAll('.free-spin-details');\n\n\t\tfor (let i = 0; i < freespinScreenDetails.length; i++) {\n\t\t\tconst itm = freespinScreenDetails[i];\n\t\t\tconst id = parseInt(itm.getAttribute('data-freespin-id'), 10);\n\t\t\tconst winLineSet = parseInt(itm.getAttribute('data-spin-winline-set'), 10);\n\n\t\t\titm.addEventListener('click', this._changeSpinScreen.bind(this, id, winLineSet));\n\t\t}\n\t}\n\n\t_setUpInfiniScreenWrapper() {\n\t\tif (!Config.infiniReels.includes(this.gameId)) return;\n\n\t\tconst screenWrapper = this.container.querySelector(`.spin-screen-wrapper`);\n\n\t\tif(!screenWrapper || screenWrapper.classList.contains('infini-reels')) return;\n\n\t\tscreenWrapper.classList.add('infini-reels');\n\n\t\tthis._scrollScreenWrapperToRight();\n\t}\n\n\t_scrollScreenWrapperToRight() {\n\t\tif (!Config.infiniReels.includes(this.gameId)) return;\n\n\t\tconst screen = this.container.querySelector('.spin-screen-active');\n\n\t\tif(!screen || !screen.children.length) return;\n\n\t\tscreen.children[screen.children.length-1].scrollIntoView();\n\t}\n}\n\nmodule.exports = DopSlotPanel;\n","const Panel = require('./Panel');\nconst tableTemplate = require('../../templates/table.hbs');\nconst DopTableParserFactory = require('../parsers/table/dop/DopTableParserFactory');\n/**\n * DopTablePanel. Manages how history is displayed for\n * Dop table games\n *\n * @class\n * @extends {Panel}\n */\nclass DopTablePanel extends Panel {\n\n\tconstructor() {\n\t\tsuper(tableTemplate, null);\n\t\tthis.parserFactory = new DopTableParserFactory();\n\t}\n\n\t/**\n\t * Render history screen state\n\t *\n\t * @param {String} gameId Current game id as a string\n\t * @param {Object} data Bet server response data\n\t * @param {String} adapter Current game type('dopBlackjack')\n\t * @param {String} assetsPath Current game assets path\n\t * @return {String} The renderered html code as a string\n\t */\n\trender(gameId, data, adapter, assetsPath, language, symbolsPath, hideGameDetails, hideTransactionDetails) {\n\t\tthis.parser = this.parserFactory.createParser(gameId);\n\t\treturn super.render(gameId, data, adapter, assetsPath, language, symbolsPath, hideGameDetails, hideTransactionDetails)\n\t}\n}\n\nmodule.exports = DopTablePanel;\n","const Panel = require('./Panel');\nconst slotTemplate = require('../../templates/slots.hbs');\nconst NSGSlotParserFactory = require('../parsers/slots/nsg/NSGSlotParserFactory');\nconst gameLines = require('../config/NSGLines');\n\n/**\n * NSGSlotPanel. Manages how history is displayed for\n * NSG slot games\n *\n * @class\n * @extends {Panel}\n */\nclass NSGSlotPanel extends Panel {\n\n\tconstructor() {\n\t\tsuper(slotTemplate, null);\n\t\tthis.parserFactory = new NSGSlotParserFactory();\n\t\tthis.gameLines = gameLines;\n\t\tthis.container.setAttribute('class', 'history-panel-container'); // check that\n\t}\n\n\t/**\n\t * Render history screen state\n\t *\n\t * @param {String} gameId Current game id as a string\n\t * @param {Object} data Spin server response data\n\t * @param {String} adapter Current game type('caySlot')\n\t * @param {String} assetsPath Current game assets path\n\t * @return {String} The renderered html code as a string\n\t */\n\trender(gameId, data, adapter, assetsPath, language, symbolsPath, hideGameDetails, hideTransactionDetails) {\n\t\tthis.parser = this.parserFactory.createParser(gameId);\n\t\tthis.currGameWinLines = this._NSG2DopLines(this.gameLines[gameId],gameId);\n\n\t\tlet container = super.render(gameId, data, adapter, assetsPath, language, symbolsPath, hideGameDetails, hideTransactionDetails);\n\n\t\treturn container;\n\t}\n\n\tonRendered(gameId, data, adapter, assetsPath, language, symbolsPath) {\n\t\tlet winLines = this.container.querySelectorAll('.line-details');\n\n\t\tfor (let i = 0; i < winLines.length; i++) {\n\t\t\tlet lineItem = winLines[i];\n\n\t\t\tthis._attachEventListeners(lineItem);\n\t\t}\n\n\t\tlet freespinScreenDetails = this.container.querySelectorAll('.free-spin-details');\n\n\t\tfor (let i = 0; i < freespinScreenDetails.length; i++) {\n\n\t\t\tlet itm = freespinScreenDetails[i];\n\n\t\t\titm.addEventListener('click', () => {\n\t\t\t\tlet id = parseInt(itm.getAttribute('data-freespin-id'), 10);\n\n\t\t\t\t$('.tile-highlight').removeClass('tile-highlight');\n\t\t\t\t$('.line-details').removeClass('line-details-active');\n\t\t\t\tthis._showSpinScreen(id);\n\n\t\t\t\treturn false;\n\t\t\t});\n\t\t}\n\t\t\n\t\tconst offsetsData = this.parser.getGameConfig().Reels;\n\t\t// If there is an offset data, pass its offset prop, otherwise undefined.\n\t\tthis._generateWinLinesSVG(offsetsData && offsetsData.offsets);\n\t\t\n\t\t// wait for the svg lines to render fully\t\n\t\tsetTimeout(()=>{\n\t\t\t// show main spin screen\n\t\t\tthis._showSpinScreen(0);\n\t\t}, 500);\n\t}\n\n\t_NSG2DopLines(NSGLines, gameId){\n\t\tlet DopLines = [];\n\t\tlet lines = [];\n\t\tlet gameConfig = this.parser.getGameConfig();\n\t\t//compiler fix because sort object by keys...\n\t\tfor(let line in NSGLines){\n\t\t\tlet index = NSGLines[line];\n\t\t\tif(gameConfig.Reels.linesMap){\n\t\t\t\tline = gameConfig.Reels.linesMap[line];\n\t\t\t}\n\t\t\tlines.push([index,line]);\n\t\t}\n\n\t\tNSGLines = lines.sort(function(a,b){\n            if(a[0]==b[0]){\n                return 0;\n            }\n            return a[0] < b[0]?-1:1;\n\t\t});\n\t\t\n\t\tNSGLines.forEach(a=>{\n\t\t\tlet index = a[0];\n\t\t\tlet p = a[1];\n\t\t\tlet DopLine = [];\n\n\t\t\tfor(let i=0;i<p.length;i++){\n\t\t\t\tDopLine.push(Math.abs(gameConfig.Reels.SCREEN_INDEX-p[i]));\n\t\t\t}\n\t\t\tDopLines.push(DopLine);\n\t\t});\n\t\t\n\t\treturn DopLines;\n\t}\n\n\t/**\n\t * Attatch win lines hover event listeners\n\t * @private\n\t * @param  {Element} item The target DOM element\n\t */\n\t_attachEventListeners(item) {\n\t\tlet container = this.container;\n\n\t\titem.addEventListener('click', () => {\n\t\t\tlet lineScreenId = parseInt(item.parentElement.getAttribute('data-freespin-id'), 10);\n\n\t\t\tthis._showSpinScreen(lineScreenId);\n\n\t\t\t$('.line-details').removeClass('line-details-active');\n\t\t\t$('.tile-highlight').removeClass('tile-highlight');\n\t\t\tif(this.currGameWinLines && typeof this.currGameWinLines[0] != 'undefined'){\n\t\t\t\tthis._highlightLine(item);\n\t\t\t\titem.classList.add('line-details-active');\n\t\t\t}else{\n\t\t\t\tthis._highlightTiles(item);\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Shows the selected spin screen and hides the rest\n\t * @private\n\t * @param  {number} id The spin screen id\n\t */\n\t_showSpinScreen(id) {\n\t\tlet container = this.container;\n\n\t\t$('.spin-screen').hide().removeClass('spin-screen-active');\n\n\t\tlet screen = container.querySelector(`.spin-screen-${id}`);\n\n\t\tif(!screen) return;\n\n\t\tscreen.style.display = 'table-row';\n\t\tscreen.classList.add('spin-screen-active');\n\n\t\tlet winLines = container.querySelectorAll('.winline-path');\n\n\t\tfor (let i = 0; i < winLines.length; i++) {\n\t\t\tlet line = winLines[i];\n\n\t\t\tremoveClassSVG(line, 'winline-active');\n\t\t}\n\n\t\tlet linesList = container.querySelector(`.lines-list-${id}`);\n\n\t\tif (linesList !== null) {\n\t\t\tlet children = linesList.children;\n\n\t\t\tfor (let i = 0; i < children.length; i++) {\n\t\t\t\tlet winLine = children[i];\n\t\t\t\tlet lineId = parseInt(winLine.getAttribute('data-line-id'), 10);\n\t\t\t\tlet lineGraphic = container.querySelector(`.winline-path-${lineId}`);\n\n\t\t\t\tif (lineGraphic !== null) {\n\t\t\t\t\taddClassSVG(lineGraphic, 'winline-active');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet screenLinks =  container.querySelectorAll(`.free-spin-details`);\n\n\t\tfor (let i = 0; i < screenLinks.length; i++) {\n\t\t\tlet screenLink = screenLinks[i];\n\t\t\tlet freeSpinId = parseInt(screenLink.getAttribute('data-freespin-id'), 10);\n\n\t\t\tif (id === freeSpinId) {\n\t\t\t\tscreenLink.classList.add('free-spin-details-active');\n\t\t\t} else {\n\t\t\t\tscreenLink.classList.remove('free-spin-details-active');\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Highlights(or removes the highlight) the winnings tiles of a line\n\t * @private\n\t * @param  {Element}  line  Selected dom line element\n\t * @param  {Boolean} selected Whether the line should be highlighted\n\t */\n\t_highlightLine(line, selected = true) {\n\t\tlet container = this.container;\n\t\tlet lineId = line.getAttribute('data-line-id');\n\t\tlet screenId = line.parentElement.getAttribute('data-freespin-id') || 0;\n\t\tlet lines = this.currGameWinLines;\n\t\tlet lineArr = lines[lineId];\n\n\t\tlet screen = $(`.spin-screen-${screenId}`)[0];\n\n\t\t// deactivate all win lines\n\t\tlet activeLines = container.querySelectorAll('.winline-path.winline-active');\n\n\t\tfor (let activeLine of activeLines) {\n\t\t\tremoveClassSVG(activeLine, 'winline-active');\n\t\t}\n\t\t// activate the selected line\n\t\tlet selectedLine = container.querySelector(`.winline-path-${lineId}`);\n\n\t\tif (selectedLine !== null) {\n\t\t\taddClassSVG(selectedLine, 'winline-active');\n\t\t}\n\n\t\tlet lineStart = parseInt(line.getAttribute('data-line-start'), 10);\n\t\tlet lineLen = lineStart + parseInt(line.getAttribute('data-line-length'), 10);\n\t\tlet lineTiles = [];\n\t\tlet lineTilesData = line.getAttribute('data-line-tiles');\n\t\t\n\t\tlineTilesData.split(',').forEach((itm, index) => {\n\t\t\tlineTiles[index] = parseInt(itm, 10);\n\t\t});\n\t\tfor (let i = lineStart; i < lineLen; i++) {\n\t\t\tif (lineTiles[i] === 0) {\n\t\t\t\tlineLen++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tlet tileIndex = lineArr[i];\n\t\t\tlet reel = screen.children[i];\n\t\t\tlet tile = reel.children[tileIndex];\n\n\t\t\tif (selected) {\n\t\t\t\ttile.classList.add('tile-highlight');\n\t\t\t} else {\n\t\t\t\ttile.classList.remove('tile-highlight');\n\t\t\t}\n\t\t}\n\t}\n\n\n\t_highlightTiles(item){\n\t\tlet screenId = item.parentElement.getAttribute('data-freespin-id') || 0;\n\t\tlet screen = $(`.spin-screen-${screenId}`)[0];\n\t\t$('.tile-highlight').removeClass('tile-highlight');\n\t\tlet cells = JSON.parse(item.getAttribute('data-line-tiles'));\n\t\tfor(let x in cells){\n\t\t\tfor(let cy in cells[x]){\n\t\t\t\tlet y = cells[x][cy];\n\t\t\t\tlet reel = screen.children[x];\n\t\t\t\tlet tile = reel.children[y];\n\t\t\t\ttile.classList.add('tile-highlight');\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Fills the win lines svg document\n\t * @private\n\t */\n\t_generateWinLinesSVG(reelOffsets) {\n\t\tlet tileImg = this.container.querySelector('.tile-img');\n\n\t\tif (tileImg && (!tileImg.naturalWidth || !tileImg.naturalHeight)) {\n        \t// console.warn('no sizes, waiting img loading');\n\t\t\ttileImg.addEventListener('load', this._generateWinLinesSVG.bind(this, reelOffsets));\n\n\t\t\treturn;\n\t\t}\n\t\ttileImg && this._buildLinesPolyline(tileImg.naturalWidth, tileImg.naturalHeight, reelOffsets);\n\t}\n\n\t/**\n\t * Builds win lines using the <Polyline> element\n\t * @private\n\t * @param {number} tileWidth Tile image width\n\t * @param {number} tileHeight Tile image height\n\t * @param {number} reelOffsets Offsets of reels if any\n\t * @param {number} lineSize The line thickness, defaults to 5\n\t */\n\t_buildLinesPolyline(tileWidth, tileHeight, reelOffsets = 0, lineSize = 5) {\n\n\t\t// Scale tile natural size according to the svg container size\n\t\tlet svg = this.container.querySelector('.lines-overlay');\n\t\tlet svgWidth = parseInt(svg.getAttribute('width'), 10);\n\t\tlet svgHeight = parseInt(svg.getAttribute('height'), 10);\n\t\tlet len = typeof this.currGameWinLines[0] != 'undefined' ? this.currGameWinLines[0].length : 1;\n\t\tlet scaleRatio = svgWidth / (tileWidth * len);\n\t\tsvg.style.maxHeight = 'none';\n\n\t\ttileWidth *= scaleRatio;\n\t\ttileHeight *= scaleRatio;\n\n\t\tlet linesContainer = this.container.querySelector('.lines-container');\n\t\tlet linesArr = this.currGameWinLines || [];\n        let betweenLines = 6;\n\t\tlet row = 0;\n\t\tlet alignOffset = 0;\n\t\tlet buffer = [-25, -25, -25, -25, -25, -25, -25, -25];// sets default value for each buffer element\n\t\tlet svgNS = 'http://www.w3.org/2000/svg';\n\n\t\tconst getVertOffset = (tileIndex, index, reelOffsets) => {\n\t\t\tconst reelOffset = reelOffsets ? reelOffsets : 0;\n\t\t\treturn ((tileIndex * tileHeight) + tileHeight / 2) + reelOffset;\n\t\t};\n\t\t\n\t\tlinesArr.forEach((lineArr, index) => {\n\t\t\tlet tileIndex = lineArr[0];\n\t\t\tlet startX = tileWidth/2;\n\t\t\tlet startY = getVertOffset(tileIndex, 0, reelOffsets);\n\t\t\tlet endX = startX+tileWidth;\n\n\t\t\tlet pointsStr = `0, ${startY} ${startX}, ${startY} `;\n\n\t\t\tlet endY = getVertOffset(lineArr[1], 1, reelOffsets);\n\n\t\t\tpointsStr += `${startX}, ${startY} ${endX}, ${endY} `;\n\n\t\t\tstartX += tileWidth;\n\t\t\tendX += tileWidth;\n\n\t\t\tfor (let i = 1; i < lineArr.length; i++) {\n\t\t\t\ttileIndex = lineArr[i];\n\t\t\t\tstartY = getVertOffset(tileIndex, i, reelOffsets);\n\t\t\t\tlet nextTileIndex = lineArr[i + 1] !== undefined ? lineArr[i + 1] : lineArr[lineArr.length - 1];\n\n\t\t\t\tendY = getVertOffset(nextTileIndex, (lineArr[i + 1] !== undefined) ? (i + 1) : i, reelOffsets);\n\n\t\t\t\tpointsStr += `${startX}, ${startY} ${endX}, ${endY} `;\n\n\t\t\t\tstartX += tileWidth;\n\t\t\t\tendX += tileWidth;\n\t\t\t}\n\n\t\t\tlet line = document.createElementNS(svgNS, 'polyline');\n\n\t\t\tline.setAttribute('points', pointsStr);\n\n\t\t\tline.setAttribute('fill', 'none');\n\t\t\tline.setAttribute('stroke-width', lineSize);\n\t\t\tline.setAttribute('class', `winline-path winline-path-${index}`);\n\n\t\t\t// calculate lines offset from eachother\n\t\t\trow = lineArr[0];\n\t\t\talignOffset = buffer[row];\n\t\t\tbuffer[row] += betweenLines;\n\t\t\tline.setAttribute('transform', `translate(0, ${alignOffset})`);\n\n\t\t\tlinesContainer.appendChild(line);\n\t\t});\n\n\t\tif(this.currGameWinLines.length){\n\t\t\tlet reelHeight = [];\n\t\t\tthis.currGameWinLines.forEach(v => reelHeight.indexOf(v[0]) == -1 && reelHeight.push(v[0]));\n\t\t\treelHeight = reelHeight.length;\n\t\t}\n\t\t\n\t\tthis._fitLinesContainer();\n\t}\n\n\tresize(e) {\n\t\tthis._fitLinesContainer();\n\t}\n\n\t/**\n\t * Fit the lines overlay container to the reels screen size\n\t *\n\t * @private\n\t */\n\t_fitLinesContainer() {\n\t\tconst linesOverlay = this.container.querySelector('.lines-overlay');\n\t\tconst mainScreen = this.container.querySelector('table.main-screen.reels');\n\n\t\tif (!(linesOverlay || mainScreen)) return;\n\n\t\tlinesOverlay.style.height = `${mainScreen.offsetHeight}px`;\n\t}\n}\n\n/**\n * Replacer for Element.classList.remove since classList is not supported in IE11 for SVG elements\n * @param  {Element} element The svg element\n * @param  {[type]} classValue The class string to be removed\n */\nfunction removeClassSVG(element, classValue) {\n\tlet className = element.className.baseVal;\n\n\tif (className && className.indexOf(classValue) !== -1) {\n\t\telement.className.baseVal = className.replace(classValue, '').replace(/\\s+/g, ' ');\n\t}\n}\n\n/**\n * Replacer for Element.classList.add since classList is not supported in IE11 for SVG elements\n * @param  {Element} element The svg element\n * @param  {[type]} classValue The class string to be added\n */\nfunction addClassSVG(element, classValue) {\n\tif (!element.className) {\n\t\telement.className = classValue;\n\n\t\treturn;\n\t}\n\tif (element.className.baseVal.indexOf(classValue) === -1)\t\t{ element.className.baseVal += ` ${classValue}`; }\n}\n\nmodule.exports = NSGSlotPanel;","const Handlebars = require('hbsfy/runtime');\nconst EventsHub = require('../EventsHub');\nconst Texts = require('../config/Texts');\nconst SlotPartials = require('../config/slotPartials');\nconst AssetsHelper = require('../utils/AssetsHelper');\nconst FeatureBuyParser = require('../utils/FeatureBuyParser');\n\nclass Panel {\n\n    /**\n     * @param {DefaultParser} template The server data parser\n     * @param {Function} parser The output template\n     */\n    constructor(template, parser) {\n\n        this._assetsHelper = new AssetsHelper();\n\n        /** @type {Function} The rendering template */\n        this.template = template;\n\n        /** @type {DefaultParser} The server data parser */\n        this.parser = parser;\n\n        /** @type {FeatureBuyParser} The parser to parse FeatureBuy data */\n        this.featureBuyParser = new FeatureBuyParser(this._assetsHelper);\n\n        /** @type {Element} The DOM container to be used for the screen output */\n        this.container = document.createElement('div');\n        this.container.className = 'history-panel-container';\n    }\n\n    /**\n     * Render history screen state\n     *\n     * @param {String} gameId\n     * @param {Object} data\n     * @param {String} adapter\n     * @param {String} assetsPath\n     * @param {String} language\n     * @param {String} symbolsPath\n     * @return {HTMLElement}\n     */\n    render(gameId, data, adapter, assetsPath, language, symbolsPath, hideGameDetails, hideTransactionDetails) {\n        this._registerPartials();\n\n        /** @type {string} The current game id */\n        this.gameId = gameId;\n\n        /** @private @type {Object} */\n        this._data = data;\n\n        /** @type {string} The current adapter */\n        this._adapter = adapter;\n\n        /** @type {string} The current game assets path */\n        this._assetsPath = assetsPath;\n\n        /** @type {boolean} whether to hide Game Details */\n        this._hideGameDetails = hideGameDetails;\n\n        /** @type {boolean} whether to hide Transaction Details */\n        this._hideTransactionDetails = hideTransactionDetails;\n\n        let container = this.container;\n        let parsedData = this.parser.sanitizeData(this._data);\n\n        this._assetsHelper.setOptions({\n            cdn: symbolsPath\n        });\n\n        if (parsedData.hasGameData) {\n            parsedData = this.parser.parse(this.gameId, parsedData, this._adapter);\n        }\n\n        this.parsedData = parsedData;\n\n        this.featureBuyParser.parse(gameId, language, parsedData).then(data => {\n            this._assetsHelper.getTiles({\n                games: [this.gameId],\n                lang: language,\n                onComplete: (result) => {\n                    let output;\n\n                    try {\n                        output = this.template({\n                            data: data, //see .tiles\n                            texts: Texts,\n                            assetsPath: this._assetsPath,\n                            tiles: result[this.gameId],\n                            gameId,\n                            hideGameDetails: this._hideGameDetails,\n                            hideTransactionDetails: this._hideTransactionDetails\n                        });\n                    } catch (error) {\n                        console.error(`#History: error while rendering history template`, error);\n                    }\n\n                    let outputHtml = $.parseHTML(output)[0];\n                    let assetsToLoad = outputHtml.querySelectorAll('img');\n                    let assetCount = assetsToLoad.length;\n                    let counter = 0;\n\n                    for (let i = 0; i < assetCount; i++) {\n                        assetsToLoad[i].onload = () => {\n                            counter++;\n                            if (counter >= assetCount) EventsHub.emit(EventsHub.events.ASSETS_LOADED);\n                        };\n                    }\n\n                    $(container).html(outputHtml);\n\n                    // Make sure that all elements are rendered and painted on screen\n                    requestAnimationFrame(() => this.onRendered(gameId, data, adapter, assetsPath, language, symbolsPath));\n                }\n            })\n        });\n\n        return container;\n    }\n\n    /**\n     * Hook which is executed once the template is rendered.\n     * Use this to attach listeners to DOM elements to ensure that the HTML is actually there.\n     * @param {String} gameId\n     * @param {Object} data\n     * @param {String} adapter\n     * @param {String} assetsPath\n     * @param {String} language\n     * @param {String} symbolsPath\n     * @return {HTMLElement}\n     */\n    onRendered(gameId, data, adapter, assetsPath, language, symbolsPath) {\n\n    }\n\n\t_registerPartials() {\n\t\tconst partials = SlotPartials;\n\n\t\tpartials.forEach((partial) => {\n\t\t\tHandlebars.registerPartial(partial.name, partial.template);\n\t\t});\n\t}\n\n    resize(e) {\n        // Overwrite this\n    }\n\n}\n\nmodule.exports = Panel;\n","const DopSlotPanel = require('./DopSlotPanel');\nconst slotTemplate = require('../../templates/tigentSlots.hbs');\n\n/**\n * TigEntSlotPanel. Using a different slots template as tigent games require a different layout for history data\n *\n * @class\n * @extends {Panel}\n */\nclass TigEntSlotPanel extends DopSlotPanel {\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.template = slotTemplate;\n\t}\n\n}\n\nmodule.exports = TigEntSlotPanel;\n","\nclass DefaultParser {\n\n    parse(gameId, serverData) {\n        const data = JSON.parse(JSON.stringify(serverData)); // deep clone\n        \n        // here you should do the parsing\n        // the final structure of the data should be the same as defaultResponse.json\n        \n        return data;\n    }\n\n    /**\n     * Sanitze spin data object\n     * @private\n     * @return {Object} Sanitized data\n     */\n    sanitizeData(data) {\n        //This check is used in case of HERMES gpanel results\n        if(data.result && data.result.history) data = data.result.history;\n\n        let multiResponseFormat = !!data.responses; //Check for multiple responses format\n        if(multiResponseFormat){ //We are using multi-response format\n            const transactions = data.transactions;\n            const responses = data.responses;\n            const regulations = data.regulations;\n\n            data = responses[0]; //Use the main spin response for now\n            data.transactions = transactions || data.result.history.transactions;\n            data.responses = responses;\n            data.regulations = regulations;\n        }\n\n        if (data && data.result && data.result.history) {\n            data = data.result.history;\n        }\n\n        if (!data.transactions) data.transactions = {}; // allow it ;)\n        // TODO: this is temporary fix when the server returns game:null.\n        if (!data.game) {\n            data = {\n                gameDetails: {\n                    gameId: this.gameId,\n                    roundId: data.transactions.roundId,\n                    prevRoundId: data.transactions.prevRoundId,\n                    nextRoundId: data.transactions.nextRoundId,\n                    serverTimeStart: data.transactions.startTime,\n                    serverTimeEnd: data.transactions.endTime,\n                },\n                transactions: {\n                    totalBet: null,\n                    totalWin: null,\n                    balance: {\n                        cash: data.user.balance.cash,\n                        freeBets: data.user.balance.freeBets,\n                        sessionCash: data.user.balance.sessionCash,\n                        sessionFreeBets: data.user.balance.sessionFreeBets,\n                        bonus: data.user.balance.bonus\n                    },\n                },\n                regulations: data.regulations,\n                winDetails: null,\n                reels: null,\n                promo: data.promo\n            };\n\n            data.hasGameData = false;\n        }else{\n            data.hasGameData = true;\n        }\n\n        return data;\n    }\n}\n\nmodule.exports = DefaultParser;\n","const Format = require('../../../utils/Format');\n\nconst DefaultParser = require('../../DefaultParser');\n\n/**\n *\tCayScratchParser. Handles parsing spin result data\n *\n * @class\n */\nclass CayScratchParser extends DefaultParser {\n\tconstructor() {\n\t\tsuper();\n\n\t\t/** @type {Object} The server spin data */\n\t\tthis.data = {};\n\n\t\t/** @type {Object} Win amounts data */\n\t\tthis.winDetails = {\n\t\t\totherWins: [],\n\t\t\tscratchWins: [],\n\t\t\tjackpotWins: [],\n\t\t\ttotalWin: 0,\n\t\t};\n\n\t\tthis.nonBonusDtoNames = [];\n\n\t\t/** @type {string} The current game id */\n\t\tthis.gameId = '';\n\n\t\tthis.stakeMultiplier = 1;\n\t}\n\n\t/**\n\t* Parses spin result data\n\t* @param {String} gameId The server id of the current game\n\t* @param {Object} data Game data, contains\n\t* screen reels and every game feature\n\t* @param {Object} data.game Spin result data\n\t*/\n\tparse(gameId, data) {\n\t\tthis.data = data;\n\t\tthis.gameId = gameId;\n\n\t\tFormat.convertMoneyToNumber(this.data);\n\n\t\tif (this._handleMaxPayout(this.data)) {\n\t\t\treturn this._generateOutput();\n\t\t}\n\n\t\t// game specific parsers can apply before parse operations here\n\t\tif (typeof this._beforeParseOperations === 'function') {\n\t\t\tthis._beforeParseOperations(this.data);\n\t\t}\n\n\t\t// game specific parsers can apply after parse operations here\n\t\tif (typeof this._afterParseOperations === 'function') {\n\t\t\tthis._afterParseOperations(this.data);\n\t\t}\n\n\t\tthis._handleJackpots(this.data);\n\n\t\tif(data.responses.length > 1) { //Parse each additional response separatedly.\n\t\t\tconst remainingResponses = data.responses.slice(1);\n\n\t\t\tremainingResponses.forEach((res) => this._handleAdditionalResponse(res));\n\t\t}\n\n\t\treturn this._generateOutput();\n\t}\n\n\t_handleMaxPayout(data) {\n\t\tif (!data.game.win.limitedWin) return false;\n\t\tthis.winDetails.totalWin = data.game.win.limitedWin;\n\t\tthis.winDetails.limitedWin = data.game.win.limitedWin;\n\t\treturn true;\n\t}\n\n\t/**\n\t * Parses additional responses from the server.\n\t * @param {Object} response Game data, contains screen reels and every game feature in the response.\n\t */\n\t_handleAdditionalResponse(response){\n\n\t\tFormat.convertMoneyToNumber(response);\n\n\t\tif (typeof this._beforeParseOperations === 'function') {\n\t\t\tthis._beforeParseOperations(response);\n\t\t}\n\n\t\tthis._handleFeatures(response.game);\n\n\t\t//We should use the user data of the latest response as it is the most up-to-date\n\t\tif(response.user && response.user.balance) this.data.user = response.user;\n\n\t\tif (typeof this._afterParseOperations === 'function') {\n\t\t\tthis._afterParseOperations(response);\n\t\t}\n\t}\n\n\t/**\n\t * Returns parsed spin data in the specified format\n\t * @return {Object} The parsed data\n\t */\n\t_generateOutput() {\n\t\treturn {\n\t\t\tgameDetails: {\n\t\t\t\tgameId: this.gameId,\n\t\t\t\troundId: this.data.transactions.roundId,\n\t\t\t\tprevRoundId: this.data.transactions.prevRoundId,\n\t\t\t\tnextRoundId: this.data.transactions.nextRoundId,\n\t\t\t\tserverTimeStart: this.data.transactions.startTime,\n\t\t\t\tserverTimeEnd: this.data.transactions.endTime,\n\t\t\t},\n\t\t\ttransactions: {\n\t\t\t\ttotalBet: this.data.game.stake,\n\t\t\t\ttotalWin: this.winDetails.totalWin,\n\t\t\t\tbalance: {\n\t\t\t\t\tcash: this.data.user.balance.cash,\n\t\t\t\t\tfreeBets: this.data.user.balance.freeBets,\n\t\t\t\t\tsessionCash: this.data.user.balance.sessionCash,\n\t\t\t\t\tsessionFreeBets: this.data.user.balance.sessionFreeBets,\n\t\t\t\t\tbonus: this.data.user.balance.bonus\n\t\t\t\t},\n\t\t\t},\n\t\t\twinDetails: this.winDetails,\n\t\t\tscreens: {\n\t\t\t\tsymbols: this.symbolsScreen,\n\t\t\t\tamounts: this.amountsScreen\n\t\t\t},\n\t\t\tpromo: this.data.promo\n\t\t};\n\t}\n\n\t_scratchBonusDice(data) {\n\t\tvar bonus = null;\n\t\tif(data.winAmount > 0) {\n\t\t\tbonus = {\n\t\t\t\ttype: 'sumOfSevenBonus',\n\t\t\t\tamount: data.winAmount / this.stakeMultiplier,\n\t\t\t\tscratchWin: true\n\t\t\t};\n\t\t}\n\n\t\tif (!this.mainSpinHandled) {\n\t\t\tthis.winDetails.sumOfSevenBonus = [];\n\t\t\tdata.dices.forEach((dice) => {\n\t\t\t\tthis.winDetails.sumOfSevenBonus.push({\n\t\t\t\t\tdices: dice.slice(0, 2),\n\t\t\t\t\tamount: dice.slice(2)[0] * this.data.game.stake\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\treturn bonus;\n\t}\n\n\t_scratchBonusMatchNumbers(data) {\n\t\tvar bonus = null;\n\t\tif(data.winAmount > 0) {\n\t\t\tbonus = {\n\t\t\t\ttype: 'matchNumbersBonus',\n\t\t\t\tamount: data.winAmount / this.stakeMultiplier,\n\t\t\t\tscratchWin: true\n\t\t\t};\n\t\t}\n\n\t\tif (!this.mainSpinHandled) {\n\t\t\tdata.mySymbols = data.mySymbols.map((symbol) => symbol == 99 ? false : symbol);\n\t\t\tdata.prizes = data.prizes.map((prize) => prize == 0 ? false : prize);\n\n\t\t\tthis.winDetails.matchNumbersBonus = {\n\t\t\t\tluckySymbols: data.luckySymbols,\n\t\t\t\tprizes: [\n\t\t\t\t\tdata.mySymbols.slice(0, 3).map((d, idx) => {\n\t\t\t\t\t\tif (d === false) return false;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tsymbol: d,\n\t\t\t\t\t\t\tprize: data.prizes[idx] * this.data.game.stake\n\t\t\t\t\t\t}\n\t\t\t\t\t}),\n\t\t\t\t\tdata.mySymbols.slice(3).map((d, idx) => {\n\t\t\t\t\t\tif (d === false) return false;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tsymbol: d,\n\t\t\t\t\t\t\tprize: data.prizes[idx + 3] * this.data.game.stake\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t]\n\t\t\t};\n\t\t}\n\n\t\treturn bonus;\n\t}\n\n\t_scratchBonusMatchAmounts(data) {\n\t\treturn {\n\t\t\ttype:  'matchAmountsBonus',\n\t\t\tamount: data.winAmount,\n\t\t\tscratchWin: true\n\t\t}\n\t}\n\n\t_scratchBonusMatchSymbols(data) {\n\t\tlet symbols = data.screen.slice(0, data.screen.length / 2);\n\t\tlet bonus = null;\n\t\tfor(let i = 0; i < symbols.length; i++) {\n\t\t\tif(symbols.filter(s => s === symbols[i]).length >= 3) {\n\t\t\t\tbonus = {\n\t\t\t\t\ttype:  'matchSymbolsBonus',\n\t\t\t\t\tamount: this._getSymbolAmount(symbols[i]),\n\t\t\t\t\tscratchWin: true\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn bonus;\n\t}\n\n\t_beforeParseOperations(data) {\n\t\tif (data.game.gameData) {\n\t\t\tthis._parseScreens(data);\n\t\t\tthis._handlePayoutDataBonuses(data.game.gameData.slotGameArray[0]);\n\t\t\tthis.mainSpinHandled = true;\n\t\t\tthis._handleRespins(data.game.gameData.slotGameArray[0]);\n\t\t}\n\t}\n\n\t_afterParseOperations(data) {\n\t}\n\n\t_getSymbolAmount(symbol) {\n\t\treturn [10000,500,100,10,5,1][symbol - 1];\n\t}\n\n\t_parseScreens(data) {\n\t\tthis.symbolsScreen = [];\n\t\tthis.amountsScreen = [];\n\n\t\tlet screen = data.game.gameData.slotGameArray[0].screen;\n\t\tlet row = -1;\n\t\tlet col = 0;\n\t\tlet currScreen = this.symbolsScreen;\n\t\t\n\t\tscreen.forEach((reel, index) => {\n\t\t\tif (index > 8) currScreen = this.amountsScreen;\n\t\t\tif (col % 3 == 0) {\n\t\t\t\trow++;\n\t\t\t\tcurrScreen.push([]);\n\t\t\t}\n\n\t\t\t\n\t\t\tvar value = reel;\n\t\t\tif (currScreen == this.amountsScreen) {\n\t\t\t\tvalue = this._getSymbolAmount(value);\n\t\t\t}\n\n\t\t\tcurrScreen[currScreen.length - 1].push(value);\n\n\t\t\tcol++;\n\t\t});\n\t}\n\n\t_handleRespins(data) {\n\t\tvar respins = this._filterRespins(data);\n\n\t\tif (respins.length > 0) {\n\t\t\tthis.winDetails.freeCard = null;\n\t\t\tif (respins.length > 0) {\n\t\t\t\tvar respin = respins[0];\n\t\t\t\tvar freeCard = {\n\t\t\t\t\ttype: 1,\n\t\t\t\t\tamount: respin.winAmount,\n\t\t\t\t\totherWins: [],\n\t\t\t\t\tscratchWins: []\n\t\t\t\t};\n\n\t\t\t\tthis._getPayoutDataBonuses(respin).forEach((bonus) => {\n\t\t\t\t\tif (bonus.scratchWin) {\n\t\t\t\t\t\tfreeCard.scratchWins.push(bonus);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfreeCard.otherWins.push(bonus);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tthis.winDetails.totalWin += respin.winAmount;\n\t\t\t\tthis.winDetails.freeCard = freeCard;\n\t\t\t}\n\t\t}\n\t}\n\n\t_filterRespins(data) {\n\t\tvar respins = [];\n\t\tfor(const [key, value] of Object.entries(data.payoutData)) {\n\t\t\tvar clsName = value[0] != undefined ? value[0].className : undefined;\n\t\t\tif(clsName != undefined && clsName.indexOf(\"3Dto\") != -1) respins.push(value);\n\t\t}\n\t\treturn respins;\n\t}\n\n\t_handlePayoutDataBonuses(gameDto) {\n\t\tlet bonuses = this._getPayoutDataBonuses(gameDto);\n\n\t\tbonuses.forEach((bonus) => {\n\t\t\tthis.winDetails.totalWin += bonus.amount;\n\t\t\t\n\t\t\tif (bonus.scratchWin) {\n\t\t\t\tthis.winDetails.scratchWins.push(bonus);\n\t\t\t} else {\n\t\t\t\tthis.winDetails.otherWins.push(bonus);\n\t\t\t}\n\t\t});\n\t}\n\n\t_getPayoutDataBonuses(gameDto, runScreenBonuses = true) {\n\t\tlet bonuses = [];\n\t\tlet spin = gameDto;\n\t\tthis.stakeMultiplier = spin.stakeMultiplier;\n\t\tif (spin.payoutData != undefined) {\n\t\t\tfor (const [key, value] of Object.entries(spin.payoutData)) {\n\t\t\t\tif (this.nonBonusDtoNames.indexOf(key.toString()) == -1) {\n\t\t\t\t\tif(key.indexOf(\"1Dto\") != -1) {\n\t\t\t\t\t\tvar bonus = this._scratchBonusDice(value[0]);\n\t\t\t\t\t\tif(bonus != null) bonuses.push(bonus);\n\t\t\t\t\t}\n\t\t\t\t\telse if(key.indexOf(\"4Dto\") != -1) {\n\t\t\t\t\t\tvar bonus = this._scratchBonusMatchNumbers(value[0]);\n\t\t\t\t\t\tif(bonus != null) bonuses.push(bonus);\n\t\t\t\t\t}\n\t\t\t\t\telse if (key === \"SymbolPayout\") {\n\t\t\t\t\t\tvalue.forEach(val => {\n\t\t\t\t\t\t\tif(val.winAmount > 0) {\n\t\t\t\t\t\t\t\tbonuses.push({\n\t\t\t\t\t\t\t\t\ttype:  (val.tiles[0] > 8 ? 'matchAmountsBonus' : 'matchSymbolsBonus'),\n\t\t\t\t\t\t\t\t\tamount: val.winAmount,\n\t\t\t\t\t\t\t\t\tscratchWin: true\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\telse if (key === \"SlotInstantWinBonus\") {\n\t\t\t\t\t\tif(value[0].winAmount > 0) {\n\t\t\t\t\t\t\tbonuses.push({\n\t\t\t\t\t\t\t\ttype: \"cashPrize\",\n\t\t\t\t\t\t\t\tamount: value[0].winAmount,\n\t\t\t\t\t\t\t\tscratchWin: true\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (spin.payoutData != undefined && \n\t\t\tspin.payoutData.SlotRespinWrapper != undefined &&\n\t\t\tspin.payoutData.SlotRespinWrapper[0].respin != undefined &&\n\t\t\tspin.payoutData.SlotRespinWrapper[0].respin.stakeMultiplier != undefined && \n\t\t\tspin.payoutData.SlotRespinWrapper[0].respin.stakeMultiplier > 1) {\n\t\t\t\tspin = spin.payoutData.SlotRespinWrapper[0].respin;\n\t\t\t}\n\n\t\tif (spin.stakeMultiplier > 1) {\n\t\t\tbonuses.push({\n\t\t\t\ttype: 'multiplier',\n\t\t\t\tamount: gameDto.currentSpinWinAmount - (gameDto.currentSpinWinAmount / spin.stakeMultiplier)\n\t\t\t});\n\t\t}\n\n\t\treturn bonuses;\n\t}\n\n\t/**\n\t * Sanity check on the current spin data object\n\t * @private\n\t * @return {Boolean} True if everything is ok, false otherwise\n\t */\n\t_dataSanityCheck() {\n\t\tlet data = JSON.parse(JSON.stringify(this.data)); // deep clone\n\n\t\tif (!data.transactions) data.transactions = {}; // allow it ;)\n\t\t// TODO: this is temporary fix when the server returns game:null.\n\t\tif (!data.game) {\n\t\t\tdata = {\n\t\t\t\tgameDetails: {\n\t\t\t\t\tgameId: this.gameId,\n\t\t\t\t\troundId: data.transactions.roundId,\n\t\t\t\t\tprevRoundId: data.transactions.prevRoundId,\n\t\t\t\t\tnextRoundId: data.transactions.nextRoundId,\n\t\t\t\t\tserverTimeStart: data.transactions.startTime,\n\t\t\t\t\tserverTimeEnd: data.transactions.endTime,\n\t\t\t\t},\n\t\t\t\ttransactions: {\n\t\t\t\t\ttotalBet: null,\n\t\t\t\t\ttotalWin: null,\n\t\t\t\t\tbalance: {\n\t\t\t\t\t\tcash: data.user.balance.cash,\n\t\t\t\t\t\tfreeBets: data.user.balance.freeBets,\n\t\t\t\t\t\tsessionCash: data.user.balance.sessionCash,\n\t\t\t\t\t\tsessionFreeBets: data.user.balance.sessionFreeBets,\n\t\t\t\t\t\tbonus: data.user.balance.bonus\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\twinDetails: null,\n\t\t\t\treels: null,\n\t\t\t\tpromo: data.promo\n\t\t\t};\n\n\t\t\treturn false;\n\t\t}\n\t\tthis.data = data;\n\n\t\treturn true;\n\t}\n\n\t_handleJackpots(data) {\n\t\tlet winDetails = this.winDetails;\n\t\tlet hasJackpotWins = data.jackpots && data.jackpots.win > 0;\n\n\t\tif (hasJackpotWins) {\n\t\t\twinDetails.totalWin += data.jackpots.win;\n\t\t\t_.each(data.jackpots.pots, function (pot) {\n\t\t\t\tif (pot.win > 0) {\n\t\t\t\t\twinDetails.jackpotWins.push({ type: pot.id, amount: pot.win });\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n}\n\nmodule.exports = CayScratchParser;","const CayScratchParser = require('./CayScratchParser');\nconst FourInOneScratchStake1Parser = require('./games/FourInOneScratchStake1Parser');\nconst FourInOneScratchStake2Parser = require('./games/FourInOneScratchStake2Parser');\nconst FourInOneScratchStake5Parser = require('./games/FourInOneScratchStake5Parser');\nconst FourInOneScratchStake10Parser = require('./games/FourInOneScratchStake10Parser');\nconst ScrFootyFrenzyParser = require('./games/ScrFootyFrenzyParser');\nconst ScrFootyFrenzy2020Parser = require('./games/ScrFootyFrenzy2020Parser');\nconst Scr10pFootyFrenzy2020Parser = require('./games/Scr10pFootyFrenzy2020Parser');\nconst Scr10pRubyWalshChampionsGoldParser = require('./games/Scr10pRubyWalshChampionsGoldParser');\nconst ScrRubyWalshChampionsGoldParser = require('./games/ScrRubyWalshChampionsGoldParser');\nconst Scr10pFootyFrenzy2022Parser = require('./games/Scr10pFootyFrenzy2022Parser');\nconst ScrFootyFrenzy2022Parser = require('./games/ScrFootyFrenzy2022Parser');\n/*require_parser*/\n\n\n/**\n * CayScratchParserFactory.\n *\n * @class\n */\nclass CayScratchParserFactory {\n\tconstructor() {\n\t\t/** @type {Object} Game specific parsers */\n\t\tthis.parsers = {\n\t\t\tFourInOneScratchStake1: FourInOneScratchStake1Parser,\n\t\t\tFourInOneScratchStake2: FourInOneScratchStake2Parser,\n\t\t\tFourInOneScratchStake5: FourInOneScratchStake5Parser,\n\t\t\tFourInOneScratchStake10: FourInOneScratchStake10Parser,\n\t\t\tScrFootyFrenzy: ScrFootyFrenzyParser,\n\t\t\tScrFootyFrenzy2020: ScrFootyFrenzy2020Parser,\n\t\t\tScr10pFootyFrenzy2020: Scr10pFootyFrenzy2020Parser,\n\t\t\tScr10pRubyWalshChampionsGold: Scr10pRubyWalshChampionsGoldParser,\n\t\t\tScrRubyWalshChampionsGold: ScrRubyWalshChampionsGoldParser,\n\t\t\tScrFootyFrenzy2022: ScrFootyFrenzy2022Parser,\n\t\t\tScr10pFootyFrenzy2022: Scr10pFootyFrenzy2022Parser\n\t\t};\n\t}\n\n\t/**\n\t * Creates an appropriate parser instance for the specified game id\n\t * Game specific parsers are preferred, default parser is used if one is not found\n\t * @param  {String} gameId The game id\n\t * @return {CayScratchParser} The slot parser instance\n\t */\n\tcreateParser(gameId) {\n\t\tif (gameId in this.parsers) {\n\t\t\treturn new this.parsers[gameId]();\n\t\t}\n\n\t\treturn new CayScratchParser();\n\t}\n}\n\nmodule.exports = CayScratchParserFactory;\n","const Format = require('../../../utils/Format');\n\nconst DefaultParser = require('../../DefaultParser');\n\n/**\n *\tCayScratchParserLegacy. Handles parsing spin result data\n *\n * @class\n */\nclass CayScratchParserLegacy extends DefaultParser {\n\tconstructor() {\n\t\tsuper();\n\n\t\t/** @type {Object} The server spin data */\n\t\tthis.data = {};\n\n\t\t/** @type {Object} Win amounts data */\n\t\tthis.winDetails = {\n\t\t\totherWins: [],\n\t\t\tscratchWins: [],\n\t\t\tjackpotWins: [],\n\t\t\ttotalWin: 0,\n\t\t};\n\n\t\tthis._respinDtos = [\n\t\t\t'cayetano.games.slots.scratchstakeone.dto.ScratchStakeOneRespinWrapperDto'\n\t\t];\n\n\t\t/** @type {string} The current game id */\n\t\tthis.gameId = '';\n\n\t\tthis.bonusDtos = {\n\t\t\t\"cayetano.games.slots.dto.SlotContactDataDto\": this._handleContactBonus.bind(this),\n\t\t\t\"cayetano.games.slots.dto.bonuses.SlotInstantWinBonusDataDto\": \"instantWin\",\n\t\t\t\"cayetano.games.slots.scratchstakeone.dto.ScratchStakeOneBonus1Dto\": this._scratchBonus1Handler.bind(this),\n\t\t\t\"cayetano.games.slots.scratchstakeone.dto.ScratchStakeOneBonus4Dto\": this._scratchBonus2Handler.bind(this),\n\t\t\t\"cayetano.games.slots.scratchstaketwo.dto.ScratchStakeTwoBonus1Dto\": this._scratchBonus1Handler.bind(this),\n\t\t\t\"cayetano.games.slots.scratchstaketwo.dto.ScratchStakeTwoBonus4Dto\": this._scratchBonus2Handler.bind(this),\n\t\t\t\"cayetano.games.slots.scratchstakefive.dto.ScratchStakeFiveBonus1Dto\": this._scratchBonus1Handler.bind(this),\n\t\t\t\"cayetano.games.slots.scratchstakefive.dto.ScratchStakeFiveBonus4Dto\": this._scratchBonus2Handler.bind(this),\n\t\t\t\"cayetano.games.slots.scratchstaketen.dto.ScratchStakeTenBonus1Dto\": this._scratchBonus1Handler.bind(this),\n\t\t\t\"cayetano.games.slots.scratchstaketen.dto.ScratchStakeTenBonus4Dto\": this._scratchBonus2Handler.bind(this)\n\t\t};\n\n\t\tthis.stakeMultiplier = 1;\n\t}\n\n\t/**\n\t* Parses spin result data\n\t* @param {String} gameId The server id of the current game\n\t* @param {Object} data Game data, contains\n\t* screen reels and every game feature\n\t* @param {Object} data.game Spin result data\n\t*/\n\tparse(gameId, data) {\n\t\tthis.data = data;\n\t\tthis.gameId = gameId;\n\n\t\tFormat.convertMoneyToNumber(this.data);\n\n\t\tif (this._handleMaxPayout(this.data)) {\n\t\t\treturn this._generateOutput();\n\t\t}\n\n\t\t// game specific parsers can apply before parse operations here\n\t\tif (typeof this._beforeParseOperations === 'function') {\n\t\t\tthis._beforeParseOperations(this.data);\n\t\t}\n\n\t\t// game specific parsers can apply after parse operations here\n\t\tif (typeof this._afterParseOperations === 'function') {\n\t\t\tthis._afterParseOperations(this.data);\n\t\t}\n\n\t\tthis._handleJackpots(this.data);\n\n\t\tif(data.responses.length > 1) { //Parse each additional response separatedly.\n\t\t\tconst remainingResponses = data.responses.slice(1);\n\n\t\t\tremainingResponses.forEach((res) => this._handleAdditionalResponse(res));\n\t\t}\n\n\t\treturn this._generateOutput();\n\t}\n\n\t_handleMaxPayout(data) {\n\t\tif (!data.game.win.limitedWin) return false;\n\t\tthis.winDetails.totalWin = data.game.win.limitedWin;\n\t\tthis.winDetails.limitedWin = data.game.win.limitedWin;\n\t\treturn true;\n\t}\n\n\t/**\n\t * Parses additional responses from the server.\n\t * @param {Object} response Game data, contains screen reels and every game feature in the response.\n\t */\n\t_handleAdditionalResponse(response){\n\n\t\tFormat.convertMoneyToNumber(response);\n\n\t\tif (typeof this._beforeParseOperations === 'function') {\n\t\t\tthis._beforeParseOperations(response);\n\t\t}\n\n\t\tthis._handleFeatures(response.game);\n\n\t\t//We should use the user data of the latest response as it is the most up-to-date\n\t\tif(response.user && response.user.balance) this.data.user = response.user;\n\n\t\tif (typeof this._afterParseOperations === 'function') {\n\t\t\tthis._afterParseOperations(response);\n\t\t}\n\t}\n\n\t/**\n\t * Returns parsed spin data in the specified format\n\t * @return {Object} The parsed data\n\t */\n\t_generateOutput() {\n\t\treturn {\n\t\t\tgameDetails: {\n\t\t\t\tgameId: this.gameId,\n\t\t\t\troundId: this.data.transactions.roundId,\n\t\t\t\tprevRoundId: this.data.transactions.prevRoundId,\n\t\t\t\tnextRoundId: this.data.transactions.nextRoundId,\n\t\t\t\tserverTimeStart: this.data.transactions.startTime,\n\t\t\t\tserverTimeEnd: this.data.transactions.endTime,\n\t\t\t},\n\t\t\ttransactions: {\n\t\t\t\ttotalBet: this.data.game.stake,\n\t\t\t\ttotalWin: this.winDetails.totalWin,\n\t\t\t\tbalance: {\n\t\t\t\t\tcash: this.data.user.balance.cash,\n\t\t\t\t\tfreeBets: this.data.user.balance.freeBets,\n\t\t\t\t\tsessionCash: this.data.user.balance.sessionCash,\n\t\t\t\t\tsessionFreeBets: this.data.user.balance.sessionFreeBets,\n\t\t\t\t\tbonus: this.data.user.balance.bonus\n\t\t\t\t},\n\t\t\t},\n\t\t\twinDetails: this.winDetails,\n\t\t\tscreens: {\n\t\t\t\tsymbols: this.symbolsScreen,\n\t\t\t\tamounts: this.amountsScreen\n\t\t\t},\n\t\t\tpromo: this.data.promo\n\t\t};\n\t}\n\n\t_handleContactBonus(data) {\n\t\treturn {\n\t\t\ttype:  (data.symbolPositions[0][0] > 8 ? 'matchAmountsBonus' : 'matchSymbolsBonus'),\n\t\t\tamount: data.winAmount,\n\t\t\tscratchWin: true\n\t\t};\n\t}\n\n\t_scratchBonus1Handler(data) {\n\t\tvar bonus = {\n\t\t\ttype: 'sumOfSevenBonus',\n\t\t\tamount: data.winAmount / this.stakeMultiplier,\n\t\t\tscratchWin: true\n\t\t};\n\t\tif (!this.mainSpinHandled) {\n\t\t\tthis.winDetails.sumOfSevenBonus = [];\n\t\t\tdata.dices.forEach((dice) => {\n\t\t\t\tthis.winDetails.sumOfSevenBonus.push({\n\t\t\t\t\tdices: dice.slice(0, 2),\n\t\t\t\t\tamount: dice.slice(2)[0] * this.data.game.stake\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\treturn bonus;\n\t}\n\n\t_scratchBonus2Handler(data) {\n\t\tvar bonus = {\n\t\t\ttype: 'matchNumbersBonus',\n\t\t\tamount: data.winAmount / this.stakeMultiplier,\n\t\t\tscratchWin: true\n\t\t};\n\t\tif (!this.mainSpinHandled) {\n\t\t\tdata.mySymbols = data.mySymbols.map((symbol) => symbol == 99 ? false : symbol);\n\t\t\tdata.prizes = data.prizes.map((prize) => prize == 0 ? false : prize);\n\n\t\t\tthis.winDetails.matchNumbersBonus = {\n\t\t\t\tluckySymbols: data.luckySymbols,\n\t\t\t\tprizes: [\n\t\t\t\t\tdata.mySymbols.slice(0, 3).map((d, idx) => {\n\t\t\t\t\t\tif (d === false) return false;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tsymbol: d,\n\t\t\t\t\t\t\tprize: data.prizes[idx] * this.data.game.stake\n\t\t\t\t\t\t}\n\t\t\t\t\t}),\n\t\t\t\t\tdata.mySymbols.slice(3).map((d, idx) => {\n\t\t\t\t\t\tif (d === false) return false;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tsymbol: d,\n\t\t\t\t\t\t\tprize: data.prizes[idx + 3] * this.data.game.stake\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t]\n\t\t\t};\n\t\t}\n\n\t\treturn bonus;\n\t}\n\n\t_beforeParseOperations(data) {\n\t\tif (data.game.gameData) {\n\t\t\tthis._parseScreens(data);\n\t\t\tthis._handlePayoutDataBonuses(data.game.gameData.slotGameArray[0]);\n\t\t\tthis.mainSpinHandled = true;\n\t\t\tthis._handleRespins(data.game.gameData.slotGameArray[0]);\n\t\t}\n\t}\n\n\t_afterParseOperations(data) {\n\t}\n\n\t_getSymbolAmount(symbol) {\n\t\treturn [10000,500,100,10,5,1][symbol - 1];\n\t}\n\n\t_parseScreens(data) {\n\t\tthis.symbolsScreen = [];\n\t\tthis.amountsScreen = [];\n\n\t\tlet screen = data.game.gameData.slotGameArray[0].screen;\n\t\tlet row = -1;\n\t\tlet col = 0;\n\t\tlet currScreen = this.symbolsScreen;\n\t\tlet offset = Math.floor(screen[0][0] / 100) * 100;\n\t\tscreen.forEach((reel, index) => {\n\t\t\tif (index > 8) currScreen = this.amountsScreen;\n\t\t\tif (col % 3 == 0) {\n\t\t\t\trow++;\n\t\t\t\tcurrScreen.push([]);\n\t\t\t}\n\n\t\t\tvar value = reel[0] - offset;\n\t\t\tif (currScreen == this.amountsScreen) {\n\t\t\t\tvalue = this._getSymbolAmount(value);\n\t\t\t}\n\n\t\t\tcurrScreen[currScreen.length - 1].push(value);\n\n\t\t\tcol++;\n\t\t});\n\t}\n\n\t_handleRespins(data) {\n\t\tvar respins = this._filterRespins(data);\n\n\t\tif (respins.length > 0) {\n\t\t\tthis.winDetails.freeCard = null;\n\t\t\tif (respins.length > 0) {\n\t\t\t\tvar respin = respins[0];\n\t\t\t\tvar freeCard = {\n\t\t\t\t\ttype: 1,\n\t\t\t\t\tamount: respin.winAmount,\n\t\t\t\t\totherWins: [],\n\t\t\t\t\tscratchWins: []\n\t\t\t\t};\n\n\t\t\t\tthis._getPayoutDataBonuses(respin).forEach((bonus) => {\n\t\t\t\t\tif (bonus.scratchWin) {\n\t\t\t\t\t\tfreeCard.scratchWins.push(bonus);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfreeCard.otherWins.push(bonus);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tthis.winDetails.totalWin += respin.winAmount;\n\t\t\t\tthis.winDetails.freeCard = freeCard;\n\t\t\t}\n\t\t}\n\t}\n\n\t_filterRespins(data) {\n\t\treturn data.payoutData.filter(payoutData => {\n\t\t\treturn this._respinDtos.indexOf(payoutData.className) > -1;\n\t\t}).map(function(payoutData) {\n\t\t\treturn payoutData.respin;\n\t\t});\n\t}\n\n\t_handlePayoutDataBonuses(gameDto) {\n\t\tlet bonuses = this._getPayoutDataBonuses(gameDto);\n\n\t\tbonuses.forEach((bonus) => {\n\t\t\tthis.winDetails.totalWin += bonus.amount;\n\t\t\tif (bonus.scratchWin) {\n\t\t\t\tthis.winDetails.scratchWins.push(bonus);\n\t\t\t} else {\n\t\t\t\tthis.winDetails.otherWins.push(bonus);\n\t\t\t}\n\t\t});\n\t}\n\n\t_getPayoutDataBonuses(gameDto, runScreenBonuses = true) {\n\t\tlet payoutData = gameDto.payoutData;\n\t\tlet bonuses = [];\n\t\tlet stakeMultiplier = this.stakeMultiplier = gameDto.stakeMultiplier;\n\n\t\tfor (let i = 0; i < payoutData.length; i++) {\n\t\t\tif (this.bonusDtos[payoutData[i].className]) {\n\t\t\t\tif (typeof this.bonusDtos[payoutData[i].className] == 'string') {\n\t\t\t\t\tvar amount = payoutData[i].winAmount;\n\t\t\t\t\tbonuses.push({\n\t\t\t\t\t\ttype: this.bonusDtos[payoutData[i].className],\n\t\t\t\t\t\tamount: amount\n\t\t\t\t\t});\n\t\t\t\t} else if (typeof this.bonusDtos[payoutData[i].className] == 'function' && runScreenBonuses) {\n\t\t\t\t\tbonuses.push(this.bonusDtos[payoutData[i].className].call(this, payoutData[i]));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (stakeMultiplier > 1) {\n\t\t\tvar multWin = gameDto.winAmount - (gameDto.winAmount / stakeMultiplier);\n\t\t\tbonuses.push({\n\t\t\t\ttype: 'multiplier',\n\t\t\t\tamount: multWin\n\t\t\t});\n\t\t}\n\n\t\treturn bonuses;\n\t}\n\n\t/**\n\t * Sanity check on the current spin data object\n\t * @private\n\t * @return {Boolean} True if everything is ok, false otherwise\n\t */\n\t_dataSanityCheck() {\n\t\tlet data = JSON.parse(JSON.stringify(this.data)); // deep clone\n\n\t\tif (!data.transactions) data.transactions = {}; // allow it ;)\n\t\t// TODO: this is temporary fix when the server returns game:null.\n\t\tif (!data.game) {\n\t\t\tdata = {\n\t\t\t\tgameDetails: {\n\t\t\t\t\tgameId: this.gameId,\n\t\t\t\t\troundId: data.transactions.roundId,\n\t\t\t\t\tprevRoundId: data.transactions.prevRoundId,\n\t\t\t\t\tnextRoundId: data.transactions.nextRoundId,\n\t\t\t\t\tserverTimeStart: data.transactions.startTime,\n\t\t\t\t\tserverTimeEnd: data.transactions.endTime,\n\t\t\t\t},\n\t\t\t\ttransactions: {\n\t\t\t\t\ttotalBet: null,\n\t\t\t\t\ttotalWin: null,\n\t\t\t\t\tbalance: {\n\t\t\t\t\t\tcash: data.user.balance.cash,\n\t\t\t\t\t\tfreeBets: data.user.balance.freeBets,\n\t\t\t\t\t\tsessionCash: data.user.balance.sessionCash,\n\t\t\t\t\t\tsessionFreeBets: data.user.balance.sessionFreeBets,\n\t\t\t\t\t\tbonus: data.user.balance.bonus\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\twinDetails: null,\n\t\t\t\treels: null,\n\t\t\t\tpromo: data.promo\n\t\t\t};\n\n\t\t\treturn false;\n\t\t}\n\t\tthis.data = data;\n\n\t\treturn true;\n\t}\n\n\t_handleJackpots(data) {\n\t\tlet winDetails = this.winDetails;\n\t\tlet hasJackpotWins = data.jackpots && data.jackpots.win > 0;\n\n\t\tif (hasJackpotWins) {\n\t\t\twinDetails.totalWin += data.jackpots.win;\n\t\t\t_.each(data.jackpots.pots, function (pot) {\n\t\t\t\tif (pot.win > 0) {\n\t\t\t\t\twinDetails.jackpotWins.push({ type: pot.id, amount: pot.win });\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n}\n\nmodule.exports = CayScratchParserLegacy;","const CayScratchParserLegacy = require('../CayScratchParserLegacy');\n\n/**\n * FourInOneScratchStake10Parser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CayScratchParserLegacy}\n */\nclass FourInOneScratchStake10Parser extends CayScratchParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\t\tthis._respinDtos.push('cayetano.games.slots.scratchstaketen.dto.ScratchStakeTenRespinWrapperDto');\n\t}\n\n\t_getSymbolAmount(symbol) {\n\t\treturn [25000,500,50,10,5,1][symbol - 1] * this.data.game.stake;\n\t}\n}\n\nmodule.exports = FourInOneScratchStake10Parser;","const CayScratchParserLegacy = require('../CayScratchParserLegacy');\n\n/**\n * FourInOneScratchStake1Parser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CayScratchParserLegacy}\n */\nclass FourInOneScratchStake1Parser extends CayScratchParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\t\tthis._respinDtos.push('cayetano.games.slots.scratchstaketwo.dto.ScratchStakeOneRespinWrapperDto');\n\t}\n\n\t_getSymbolAmount(symbol) {\n\t\treturn [12500,500,100,10,5,1][symbol - 1] * this.data.game.stake;\n\t}\n}\n\nmodule.exports = FourInOneScratchStake1Parser;","const CayScratchParserLegacy = require('../CayScratchParserLegacy');\n\n/**\n * FourInOneScratchStake2Parser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CayScratchParserLegacy}\n */\nclass FourInOneScratchStake2Parser extends CayScratchParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\t\tthis._respinDtos.push('cayetano.games.slots.scratchstaketwo.dto.ScratchStakeTwoRespinWrapperDto');\n\t}\n\n\t_getSymbolAmount(symbol) {\n\t\treturn [12500,500,100,10,5,1][symbol - 1] * this.data.game.stake;\n\t}\n}\n\nmodule.exports = FourInOneScratchStake2Parser;","const CayScratchParserLegacy = require('../CayScratchParserLegacy');\n\n/**\n * FourInOneScratchStake5Parser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CayScratchParserLegacy}\n */\nclass FourInOneScratchStake5Parser extends CayScratchParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\t\tthis._respinDtos.push('cayetano.games.slots.scratchstakefive.dto.ScratchStakeFiveRespinWrapperDto');\n\t}\n\n\t_getSymbolAmount(symbol) {\n\t\treturn [25000,500,50,10,5,1][symbol - 1] * this.data.game.stake;\n\t}\n}\n\nmodule.exports = FourInOneScratchStake5Parser;","const CayScratchParserLegacy = require('../CayScratchParserLegacy');\n\n/**\n * ScrFootyFrenzy2020. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CayScratchParserLegacy}\n */\nclass Scr10pFootyFrenzy2020Parser extends CayScratchParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\t\tthis._respinDtos.push('cayetano.games.slots.scr10pfootyfrenzy2020.dto.Scr10pFootyFrenzy2020RespinWrapperDto');\n\t\tthis.bonusDtos[\"cayetano.games.slots.scr10pfootyfrenzy2020.dto.Scr10pFootyFrenzy2020Bonus1Dto\"] = this._scratchBonus1Handler.bind(this);\n\t\tthis.bonusDtos[\"cayetano.games.slots.scr10pfootyfrenzy2020.dto.Scr10pFootyFrenzy2020Bonus4Dto\"] = this._scratchBonus2Handler.bind(this);\n\t}\n}\n\nmodule.exports = Scr10pFootyFrenzy2020Parser;","const CayScratchParser = require('../CayScratchParser');\n\n/**\n * ScrFootyFrenzy2020. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CayScratchParser}\n */\nclass Scr10pFootyFrenzy2022Parser extends CayScratchParser {\n\n\tconstructor(){\n\t\tsuper();\n\t}\n\n\t_getSymbolAmount(symbol) {\n\t\treturn [1000,50,10,1,0.5,0.1][symbol - 1];\n\t}\n}\n\nmodule.exports = Scr10pFootyFrenzy2022Parser;","const CayScratchParserLegacy = require('../CayScratchParserLegacy');\n\n/**\n * ScrFootyFrenzy2020. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CayScratchParserLegacy}\n */\nclass Scr10pRubyWalshChampionsGoldParser extends CayScratchParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\t\tthis._respinDtos.push('cayetano.games.slots.scr10prubywalshchampionsgold.dto.Scr10pRubyWalshChampionsGoldRespinWrapperDto');\n\t\tthis.bonusDtos[\"cayetano.games.slots.scr10prubywalshchampionsgold.dto.Scr10pRubyWalshChampionsGoldBonus1Dto\"] = this._scratchBonus1Handler.bind(this);\n\t\tthis.bonusDtos[\"cayetano.games.slots.scr10prubywalshchampionsgold.dto.Scr10pRubyWalshChampionsGoldBonus4Dto\"] = this._scratchBonus2Handler.bind(this);\n\t}\n}\n\nmodule.exports = Scr10pRubyWalshChampionsGoldParser;","const CayScratchParserLegacy = require('../CayScratchParserLegacy');\n\n/**\n * ScrFootyFrenzy2020. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CayScratchParserLegacy}\n */\nclass ScrFootyFrenzy2020 extends CayScratchParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\t\tthis._respinDtos.push('cayetano.games.slots.scrfootyfrenzy2020.dto.ScrFootyFrenzy2020RespinWrapperDto');\n\t\tthis.bonusDtos[\"cayetano.games.slots.scrfootyfrenzy2020.dto.ScrFootyFrenzy2020Bonus1Dto\"] = this._scratchBonus1Handler.bind(this);\n\t\tthis.bonusDtos[\"cayetano.games.slots.scrfootyfrenzy2020.dto.ScrFootyFrenzy2020Bonus4Dto\"] = this._scratchBonus2Handler.bind(this);\n\t}\n}\n\nmodule.exports = ScrFootyFrenzy2020;","const CayScratchParser = require('../CayScratchParser');\n\n/**\n * ScrFootyFrenzy2020. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CayScratchParser}\n */\nclass ScrFootyFrenzy2022Parser extends CayScratchParser {\n\n\tconstructor(){\n\t\tsuper();\n\t}\n}\n\nmodule.exports = ScrFootyFrenzy2022Parser;","const CayScratchParserLegacy = require('../CayScratchParserLegacy');\n\n/**\n * ScrFootyFrenzy. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CayScratchParserLegacy}\n */\nclass ScrFootyFrenzy extends CayScratchParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\t\tthis._respinDtos.push('cayetano.games.slots.scrfootyfrenzy.dto.ScrFootyFrenzyRespinWrapperDto');\n\t\tthis.bonusDtos[\"cayetano.games.slots.scrfootyfrenzy.dto.ScrFootyFrenzyBonus1Dto\"] = this._scratchBonus1Handler.bind(this);\n\t\tthis.bonusDtos[\"cayetano.games.slots.scrfootyfrenzy.dto.ScrFootyFrenzyBonus4Dto\"] = this._scratchBonus2Handler.bind(this);\n\t}\n}\n\nmodule.exports = ScrFootyFrenzy;","const CayScratchParserLegacy = require('../CayScratchParserLegacy');\n\n/**\n * ScrRubyWalshChampionsGoldParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CayScratchParserLegacy}\n */\nclass ScrRubyWalshChampionsGoldParser extends CayScratchParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\t\tthis._respinDtos.push('cayetano.games.slots.scrprubywalshchampionsgold.dto.ScrRubyWalshChampionsGoldRespinWrapperDto');\n\t\tthis.bonusDtos[\"cayetano.games.slots.scrprubywalshchampionsgold.dto.ScrRubyWalshChampionsGoldBonus1Dto\"] = this._scratchBonus1Handler.bind(this);\n\t\tthis.bonusDtos[\"cayetano.games.slots.scrprubywalshchampionsgold.dto.ScrRubyWalshChampionsGoldBonus4Dto\"] = this._scratchBonus2Handler.bind(this);\n\t}\n}\n\nmodule.exports = ScrRubyWalshChampionsGoldParser;","const Format = require('../../../utils/Format');\n\nconst DefaultParser = require('../../DefaultParser');\n\n/**\n *\tCaySlotParser. Handles parsing spin result data\n *\n * @class\n */\nclass CaySlotParser extends DefaultParser {\n\tconstructor() {\n\t\tsuper();\n\t\tthis.nonBonusDtoNames = [\"SymbolPayout\", \"SlotRespinWrapperDto\", \"SlotFreeSpinBonus\", \"SlotBonusRequest\", \"SlotRespinWrapper\"];\n\n\t\t/** @type {Object} The server spin data */\n\t\tthis.data = {};\n\t\tthis.finalScreen = [];\n\n\t\t/** @type {Object} Win amounts data */\n\t\tthis.winDetails = {\n\t\t\twinLines: [],\n\t\t\totherWins: [],\n\t\t\tjackpotWins: [],\n\t\t\ttotalWin: 0,\n\t\t};\n\n\t\t/** @type {string} The current game id */\n\t\tthis.gameId = '';\n\n\t\t/**\n\t\t * Feature handlers map\n\t\t * Maps feature names to handler functions,\n\t\t * can be modified by game specific parsers\n\t\t * @type {Array}\n\t\t */\n\t\tthis.featureHandlers = [\n\t\t\t{ name: 'freeSpins', cb: this._handleFreeSpins },\n\t\t\t{ name: 'respin', cb: this._handleRespins }\n\t\t];\n\t}\n\n\tsanitizeData(data) {\n\t\tdata = super.sanitizeData(data);\n\t\t\n\t\tif (!this.parseAdditionalResponses) return data;\n\n\t\treturn data;\n\t}\n\n\t/**\n\t* Parses spin result data\n\t* @param {String} gameId The server id of the current game\n\t* @param {Object} data Game data, contains\n\t* screen reels and every game feature\n\t* @param {Object} data.game Spin result data\n\t*/\n\tparse(gameId, data) {\n\t\tthis.balanceAtStart = null;\n\t\tthis.freebetAtStart = null;\n\n\t\tif (data.responses && Array.isArray(data.responses)) {\n\t\t\tif (data.responses[0].user.balance.session) {\n\t\t\t\tdata.responses[0].user.balance.cash = data.responses[0].user.balance.session;\n\t\t\t}\n\t\t\tthis.balanceAtStart = parseFloat(data.responses[0].user.balance.cash.atStart);\n\t\t\tthis.freebetAtStart = parseFloat(data.responses[0].user.balance.freeBets.atStart);\n\t\t\tdata.responses.forEach((response, responseIndex) => {\n\t\t\t\tif (Array.isArray(response.game.gameData)) {\n\t\t\t\t\tresponse.game.gameData = {slotGameArray: response.game.gameData};\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (response.game.gameData && !Array.isArray(response.game.gameData.slotGameArray)) {\n\t\t\t\t\tdata.responses[responseIndex].game.gameData.slotGameArray = [response.game.gameData.slotGameArray];\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tthis.data = data;\n\t\tthis.gameId = gameId;\n\n\t\tif (!this.data.responses || !this.data.responses.length) {\n\t\t\tthis.responses = [this.data];\n\t\t} else {\n\t\t\tthis.responses = this.data.responses;\n\t\t}\n\n\t\tthis.transactions = this.data.transactions;\n\n\t\tlet multiResponseFormat = !!this.data.responses && this.data.responses.length; //Check for multiple responses format\n\t\tif(multiResponseFormat){ //We are using multi-response format\n\t\t\tthis.data = this.data.responses[0]; //Use the main spin response for now\n\t\t\tthis.data.transactions = data.transactions;\n\t\t}\n\n\t\tthis._splitScreen(data);\n\t\tFormat.convertMoneyToNumber(this.data);\n\n\t\t// parse the new screen to integers\n\n\t\tif (this._handleMaxPayout(this.data)) {\n\t\t\treturn this._generateOutput();\n\t\t}\n\n\t\tif(this.data.game.reelsBuffer) this._initReels(this.data.game);\n\n\t\t// game specific parsers can apply before parse operations here\n\t\tif (typeof this._beforeParseOperations === 'function') {\n\t\t\tthis._beforeParseOperations(this.data);\n\t\t}\n\n\t\t// apply all the feature handlers\n\t\tthis._initReels(this.data.game);\n\t\tthis._handleFeatures(this.data.game);\n\t\tthis._handleWins(this.data.game);\n\n\t\t// game specific parsers can apply after parse operations here\n\t\tif (typeof this._afterParseOperations === 'function') {\n\t\t\tthis._afterParseOperations(this.data);\n\t\t}\n\n\t\tthis._handleJackpots(this.data);\n\n\t\tif(data.responses.length > 1) { //Parse each additional response separatedly.\n\t\t\tconst remainingResponses = data.responses.slice(1);\n\n\t\t\tremainingResponses.forEach((res) => {\n\t\t\t\tthis._splitScreen(res);\n\t\t\t\tthis._handleAdditionalResponse(res)\n\t\t\t});\n\t\t}\n\n\t\treturn this._generateOutput();\n\t}\n\n\t_splitScreen(data) {\n\t\tdata.game.gameData.slotGameArray.forEach(sga => {\n\t\t\tlet screenCopy = []; // make a copy for the new screen response\n\t\t\tfor (let i = 0; i < sga.screen.length; i++) {\n\t\t\t\tscreenCopy.push(sga.screen[i]);\n\t\t\t}\n\t\t\tvar parsedScr = [];\n\t\t\tfor (let reel = 0; reel < screenCopy.length; reel++) {\n\t\t\t\tlet rows = screenCopy[reel].split(\"\");\n\t\t\t\tvar symbols = [];\n\t\t\t\tfor (let row = 0; row < rows.length; row++) {\n\t\t\t\t\tsymbols.push(rows[row]);\n\t\t\t\t}\n\t\t\t\tparsedScr.push(symbols);\n\t\t\t}\n\t\t\t\n\t\t\tsga.screen = parsedScr;\n\t\t});\n\t}\n\n\t_handleMaxPayout(data) {\n\t\tif (!data.game.win.limitedWin) return false;\n\t\tthis.winDetails.totalWin = data.game.win.limitedWin;\n\t\tthis.winDetails.limitedWin = data.game.win.limitedWin;\n\t\treturn true;\n\t}\n\n\t/**\n\t * Parses additional responses from the server.\n\t * @param {Object} response Game data, contains screen reels and every game feature in the response.\n\t */\n\t_handleAdditionalResponse(response){\n\t\tif (!Array.isArray(response.game.gameData.slotGameArray)) {\n\t\t\tresponse.game.gameData.slotGameArray = [response.game.gameData.slotGameArray];\n\t\t}\n\n\t\tFormat.convertMoneyToNumber(response);\n\n\t\tif (typeof this._beforeParseOperations === 'function') {\n\t\t\tthis._beforeParseOperations(response);\n\t\t}\n\t\tthis._initReels(response.game);\n\t\tthis._handleFeatures(response.game);\n\t\tthis._handleWins(response.game);\n\n\t\t//We should use the user data of the latest response as it is the most up-to-date\n\t\tif(response.user && response.user.balance) this.data.user = response.user;\n\n\t\tif (this.balanceAtStart != null) {\n\t\t\tthis.data.user.balance.cash.atStart = this.balanceAtStart;\n\t\t}\n\n\t\tif (this.freebetAtStart != null) {\n\t\t\tthis.data.user.balance.freeBets.atStart = this.freebetAtStart;\n\t\t}\n\n\t\tif (typeof this._afterParseOperations === 'function') {\n\t\t\tthis._afterParseOperations(response);\n\t\t}\n\t}\n\n\t/**\n\t * Returns parsed spin data in the specified format\n\t * @return {Object} The parsed data\n\t */\n\t_generateOutput() {\n\t\treturn {\n\t\t\tgameDetails: {\n\t\t\t\tgameId: this.gameId,\n\t\t\t\troundId: this.data.transactions.roundId,\n\t\t\t\tprevRoundId: this.data.transactions.prevRoundId,\n\t\t\t\tnextRoundId: this.data.transactions.nextRoundId,\n\t\t\t\tserverTimeStart: this.data.transactions.startTime,\n\t\t\t\tserverTimeEnd: this.data.transactions.endTime,\n\t\t\t},\n\t\t\ttransactions: {\n\t\t\t\ttotalBet: this.data.game.stake,\n\t\t\t\ttotalWin: this.winDetails.totalWin,\n\t\t\t\tlimitedWin: this.winDetails.limitedWin,\n\t\t\t\tbalance: {\n\t\t\t\t\tcash: this.data.user.balance.cash,\n\t\t\t\t\tfreeBets: this.data.user.balance.freeBets,\n\t\t\t\t\tsessionCash: this.data.user.balance.sessionCash,\n\t\t\t\t\tsessionFreeBets: this.data.user.balance.sessionFreeBets,\n\t\t\t\t\tbonus: this.data.user.balance.bonus\n\t\t\t\t},\n\t\t\t},\n\t\t\tregulations: this.data.regulations,\n\t\t\twinDetails: this.winDetails,\n\t\t\treels: this.finalScreen,\n\t\t\tpromo: this.data.promo\n\t\t};\n\t}\n\n\t_mapSymbol(reel, row, symbolId, data) {\n\t\treturn symbolId;\n\t}\n\n\t/**\n\t * Initializes the reels array with the current spin data object\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t */\n\t_initReels(data) {\n\t\tlet reelsBuffer = data.gameData.slotGameArray[data.gameData.slotGameArray.length - 1].screen;\n\t\tlet reels = [];\n\n\t\tfor (let i = 0; i < reelsBuffer.length; i++) {\n\t\t\treels[i] = reelsBuffer[i].map((symbol, row) => this._mapSymbol(i, row, symbol));\n\t\t}\n\t\tdata.reels = reels;\n\t\tthis.finalScreen = reels;\n\t\treturn reels;\n\t}\n\n\t_handleFreeSpins(data) {\n\t\tlet fspins = data.gameData.slotGameArray.filter((spin) => { return spin.currentSpin > 0 && spin.isRespin === false });\n\n\t\tfspins = fspins.map(this._handleSingleFreeSpin.bind(this));\n\t\tthis.winDetails.freeSpins = fspins;\n\t}\n\n\t_handleSingleFreeSpin(spin) {\n\t\tthis.winDetails.totalWin += spin.currentSpinWinAmount;\n\t\treturn {\n\t\t\ttype: spin.currentSpin,\n\t\t\tamount: spin.currentSpinWinAmount,\n\t\t\twinLines: this._getWinLines(spin),\n\t\t\totherWins: this._getPayoutDataBonuses(spin)\n\t\t}\n\t}\n\n\t_handleRespins(data) {\n\t\tthis.winDetails.respins = [];\n\t\tfor (let i = 1; i < data.gameData.slotGameArray.length; i++) {\n\t\t\tlet respin = data.gameData.slotGameArray[i];\n\t\t\tif(respin != undefined && respin.isRespin === true) {\n\t\t\t\trespin.respinIndex = i - 1;\n\t\t\t\trespin = this._handleSingleRespin(respin);\n\t\t\t\tthis.winDetails.respins.push(respin);\n\t\t\t}\n\t\t}\n\n\t\tvar totalRespinsWinAmount = 0;\n\t\tthis.winDetails.respins.forEach((respin) => {\n\t\t\ttotalRespinsWinAmount += respin.amount;\n\t\t});\n\n\t\tif (totalRespinsWinAmount > 0) {\n\t\t\tthis.winDetails.totalWin += totalRespinsWinAmount;\n\t\t} else {\n\t\t\tthis.winDetails.respins = [];\n\t\t}\n\t}\n\n\t_handleSingleRespin(data) {\n\t\treturn {\n\t\t\ttype: data.respinIndex + 1,\n\t\t\tamount: data.currentSpinWinAmount,\n\t\t\twinLines: this._getWinLines(data),\n\t\t\totherWins: this._getPayoutDataBonuses(data)\n\t\t}\n\t}\n\n\t_flattenNudges(gameDto, index = 0) {\n\t\tlet respins = [];\n\n\t\tif (Array.isArray(gameDto.payoutData)) {\n\t\t\tgameDto.payoutData.forEach((data) => {\n\t\t\t\tif (data.className == 'cayetano.games.slots.dto.SlotGameDto') {\n\t\t\t\t\tdata.respinIndex = index++;\n\t\t\t\t\trespins.push(data);\n\t\t\t\t\trespins = respins.concat(this._flattenNudges(data, index));\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tfor (const property in gameDto.payoutData) {\n\t\t\t\tvar data = gameDto.payoutData[property][0];\n\n\t\t\t\tif (data.type == 'SlotGame') {\n\t\t\t\t\tdata.respinIndex = index++;\n\t\t\t\t\trespins.push(data);\n\t\t\t\t\trespins = respins.concat(this._flattenNudges(data, index));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn respins;\n\t}\n\n\t_beforeParseOperations(data) {\n\t\tthis._handlePayoutDataBonuses(data.game.gameData.slotGameArray[0]);\n\t}\n\n\t_afterParseOperations(data) {\n\t\t// this._handleStackedWilds(data.game);\n\t}\n\n\t_handlePayoutDataBonuses(gameDto) {\n\t\tlet bonuses = this._getPayoutDataBonuses(gameDto);\n\n\t\tbonuses.forEach((bonus) => {\n\t\t\tthis.winDetails.otherWins.push(bonus);\n\t\t\tthis.winDetails.totalWin += bonus.amount;\n\t\t});\n\t}\n\n\t_handleGamble(data) {\n\t\tthis.winDetails.otherWins.push({\n\t\t\ttype: 'gamble',\n\t\t\tamount: data.winAmount\n\t\t});\n\t\tthis.winDetails.totalWin += data.winAmount;\n\t}\n\n\t_getPayoutDataBonuses(gameDto, runScreenBonuses = true) {\n\t\tlet bonuses = [];\n\t\tlet spin = gameDto;\n\t\tif (spin.payoutData != undefined) {\n\t\t\tfor (const [key, value] of Object.entries(spin.payoutData)) {\n\t\t\t\tif (value.length > 0 && value[value.length - 1].winAmount > 0 && this.nonBonusDtoNames.indexOf(key.toString()) == -1) {\n\t\t\t\t\tif(key == \"SlotGambleWinCardPick\") {\n\t\t\t\t\t\tthis._handleGamble(value[value.length - 1]);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tbonuses.push({\n\t\t\t\t\t\t\ttype: \"bonus\",\n\t\t\t\t\t\t\tamount: value[value.length - 1].winAmount\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if(key == \"SlotGambleWinCardPick\") {\n\t\t\t\t\tthis._handleGamble(value[value.length - 1]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t\n\t\tif (spin.payoutData != undefined && \n\t\t\tspin.payoutData.SlotRespinWrapper != undefined &&\n\t\t\tspin.payoutData.SlotRespinWrapper[0].respin != undefined &&\n\t\t\tspin.payoutData.SlotRespinWrapper[0].respin.stakeMultiplier != undefined && \n\t\t\tspin.payoutData.SlotRespinWrapper[0].respin.stakeMultiplier > 1) {\n\t\t\t\tspin = spin.payoutData.SlotRespinWrapper[0].respin;\n\t\t\t}\n\n\t\tif (spin.stakeMultiplier > 1) {\n\t\t\tbonuses.push({\n\t\t\t\ttype: 'multiplier',\n\t\t\t\tamount: gameDto.currentSpinWinAmount - (gameDto.currentSpinWinAmount / spin.stakeMultiplier)\n\t\t\t});\n\t\t}\n\n\t\treturn bonuses;\n\t}\n\n\t/**\n\t * Handles all the features present in the current spin data object\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t */\n\t_handleFeatures(data) {\n\t\tthis.featureHandlers.forEach((featureHandler) => {\n\t\t\tfeatureHandler.cb.call(this, data, featureHandler.name);\n\t\t});\n\t}\n\n\t/**\n\t * Sanity check on the current spin data object\n\t * @private\n\t * @return {Boolean} True if everything is ok, false otherwise\n\t */\n\t_dataSanityCheck() {\n\t\tlet data = JSON.parse(JSON.stringify(this.data)); // deep clone\n\n\t\tif (!data.transactions) data.transactions = {}; // allow it ;)\n\t\t// TODO: this is temporary fix when the server returns game:null.\n\t\tif (!data.game) {\n\t\t\tdata = {\n\t\t\t\tgameDetails: {\n\t\t\t\t\tgameId: this.gameId,\n\t\t\t\t\troundId: data.transactions.roundId,\n\t\t\t\t\tprevRoundId: data.transactions.prevRoundId,\n\t\t\t\t\tnextRoundId: data.transactions.nextRoundId,\n\t\t\t\t\tserverTimeStart: data.transactions.startTime,\n\t\t\t\t\tserverTimeEnd: data.transactions.endTime,\n\t\t\t\t},\n\t\t\t\ttransactions: {\n\t\t\t\t\ttotalBet: null,\n\t\t\t\t\ttotalWin: null,\n\t\t\t\t\tbalance: {\n\t\t\t\t\t\tcash: data.user.balance.cash,\n\t\t\t\t\t\tfreeBets: data.user.balance.freeBets,\n\t\t\t\t\t\tsessionCash: data.user.balance.sessionCash,\n\t\t\t\t\t\tsessionFreeBets: data.user.balance.sessionFreeBets,\n\t\t\t\t\t\tbonus: data.user.balance.bonus\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tregulations: data.regulations,\n\t\t\t\twinDetails: null,\n\t\t\t\treels: null,\n\t\t\t\tpromo: data.promo\n\t\t\t};\n\n\t\t\treturn false;\n\t\t}\n\t\tthis.data = data;\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * win details logic\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t * @param {Object} data.win Spin result winnings info\n\t * @param {Array} data.winLines Spin result win lines\n\t * @param {Object} data.winLines.pickerBonus Picker bonus win info\n\t * @param {Object} data.winLines.pathBonus Path bonus win info\n\t * @param {Object} data.winLines.pathPickerBonus Path picker bonus win info\n\t * @param {Object} data.winLines.multiPickerBonus Multi picker bonus win info\n\t */\n\t_handleWins(data) {\n\t\tlet lines = this._getWinLines(data.gameData.slotGameArray[0]);\n\n\t\tlines.forEach((line) => {\n\t\t\tthis.winDetails.totalWin += line.amount\n\t\t});\n\n\t\tthis.winDetails.winLines = lines;\n\t}\n\n\t_getWinLines(spin) {\n\t\tlet winLines = [];\n\t\tlet payoutData = spin.payoutData;\n\t\tif(payoutData != undefined) {\n\t\t\tlet symbolPayout = payoutData.SymbolPayout;\n\t\t\tif (symbolPayout === undefined) {\n\t\t\t\tfor (const [key, value] of Object.entries(payoutData)) {\n\t\t\t\t\tif (value.length > 0 && value[0].respin != undefined && value[0].respin.payoutData != undefined) {\n\t\t\t\t\t\tsymbolPayout = value[0].respin.payoutData.SymbolPayout;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (symbolPayout != undefined) {\n\t\t\t\tfor (let i = 0; i < symbolPayout.length; i++) {\n\t\t\t\t\tlet lineIndex = (symbolPayout[i].lineNum < 0 ? winLines.length : symbolPayout[i].id);\n\t\t\t\t\twinLines.push({\n\t\t\t\t\t\tindex: lineIndex,\n\t\t\t\t\t\ttype: 1 + lineIndex,\n\t\t\t\t\t\tamount: symbolPayout[i].winAmount,\n\t\t\t\t\t\tstart: symbolPayout[i].reels[0],\n\t\t\t\t\t\tlength: symbolPayout[i].reels.length,\n\t\t\t\t\t\ttiles: symbolPayout[i].tiles\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\twinLines.sort(function(a, b) {\n\t\t\t\t\treturn a.type - b.type;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn winLines;\n\t}\n\n\t_handleJackpots(data) {\n\t\tlet winDetails = this.winDetails;\n\t\tlet hasJackpotWins = data.jackpots && data.jackpots.win > 0;\n\n\t\tif (hasJackpotWins) {\n\t\t\twinDetails.totalWin += data.jackpots.win;\n\t\t\t_.each(data.jackpots.pots, function (pot) {\n\t\t\t\tif (pot.win > 0) {\n\t\t\t\t\twinDetails.jackpotWins.push({ type: pot.id, amount: pot.win });\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n}\n\nmodule.exports = CaySlotParser;","const CaySlotParser = require('./CaySlotParser');\nconst CaySlotParserLegacy = require('./CaySlotParserLegacy');\nconst SantasSpinsSlotParser = require('./games/SantasSpinsSlotParser');\nconst PaddyPowerGoldSlotParser = require('./games/PaddyPowerGoldSlotParser');\nconst FrootShootSlotParser = require('./games/FrootShootSlotParser');\nconst LuckyCabaretSlotParser = require('./games/LuckyCabaretSlotParser');\nconst RhinoRumbleSlotParser = require('./games/RhinoRumbleSlotParser');\nconst GypsyLuckSlotParser = require('./games/GypsyLuckSlotParser');\nconst AladinsLampSlotParser = require('./games/AladinsLampSlotParser');\nconst SparklingJackpotSlotParser = require('./games/SparklingJackpotSlotParser');\nconst PaddysLuckyMineSlotParser = require('./games/PaddysLuckyMineSlotParser');\nconst PaddysLuckyPigeonSlotParser = require('./games/PaddysLuckyPigeonSlotParser');\nconst PaddyPowerFanaticsSlotParser = require('./games/PaddyPowerFanaticsSlotParser');\nconst FantasiaSlotParser = require('./games/FantasiaSlotParser');\nconst AsianRichesSlotParser = require('./games/AsianRichesSlotParser');\nconst IndianPrincessSlotParser = require('./games/IndianPrincessSlotParser');\nconst RubyWalshChampionsGoldSlotParser = require('./games/RubyWalshChampionsGoldSlotParser');\nconst MrDiamondsSlotParser = require('./games/MrDiamondsSlotParser');\nconst SafariDreamSlotParser = require('./games/SafariDreamSlotParser');\nconst SantasChristmasGiftsSlotParser = require('./games/SantasChristmasGiftsSlotParser');\nconst WildSheriffSlotParser = require('./games/WildSheriffSlotParser');\nconst JoustingWildsSlotParser = require('./games/JoustingWildsSlotParser');\nconst FruitPopsSlotParser = require('./games/FruitPopsSlotParser');\nconst GemBlastSlotParser = require('./games/GemBlastSlotParser');\nconst ForestRushSlotParser = require('./games/ForestRushSlotParser');\nconst AliBabasTreasureSlotParser = require('./games/AliBabasTreasureSlotParser');\nconst BallOfShameSlotParser = require('./games/BallOfShameSlotParser');\nconst TrickOTreatSlotParser = require('./games/TrickOTreatSlotParser');\nconst DarkJungleSlotParser = require('./games/DarkJungleSlotParser');\nconst ShamanSpinsSlotParser = require('./games/ShamanSpinsSlotParser');\nconst ReelsOfEgyptSlotParser = require('./games/ReelsOfEgyptSlotParser');\nconst FruitStackBigSpinsSlotParser = require('./games/FruitStackBigSpinsSlotParser');\nconst FruitStackDeluxeSlotParser = require('./games/FruitStackDeluxeSlotParser');\nconst BombTheJackpotSlotParser = require('./games/BombTheJackpotSlotParser');\nconst GoldenKingdomSlotParser = require('./games/GoldenKingdomSlotParser');\nconst DiamondRushSlotParser = require('./games/DiamondRushSlotParser');\nconst SkullsSlotParser = require('./games/SkullsSlotParser');\nconst RoyalGooseSlotParser = require('./games/RoyalGooseSlotParser');\nconst ClassyVegasSlotParser = require('./games/ClassyVegasSlotParser');\nconst BianconeriWildsSlotParser = require('./games/BianconeriWildsSlotParser');\nconst WildEgyptSlotParser = require('./games/WildEgyptSlotParser');\nconst FootyFrenzySlotParser = require('./games/FootyFrenzySlotParser');\nconst TumbleDwarfSlotParser = require('./games/TumbleDwarfSlotParser');\nconst GolderadoSlotParser = require('./games/GolderadoSlotParser');\nconst EasterMoneySlotParser = require('./games/EasterMoneySlotParser');\nconst SolarSnapSlotParser = require('./games/SolarSnapSlotParser');\nconst HotSlotSlotParser = require('./games/HotSlotSlotParser');\nconst GreatGemsSlotParser = require('./games/GreatGemsSlotParser');\nconst DetectiveWilderSlotParser = require('./games/DetectiveWilderSlotParser');\nconst GoldenPlanetSlotParser = require('./games/GoldenPlanetSlotParser');\nconst TheGreatWildSlotParser = require('./games/TheGreatWildSlotParser');\nconst BarbarianTreasuresSlotParser = require('./games/BarbarianTreasuresSlotParser');\nconst SuperFuegoSlotParser = require('./games/SuperFuegoSlotParser');\nconst FunFairSlotParser = require('./games/FunFairSlotParser');\nconst MaximusReelsSlotParser = require('./games/MaximusReelsSlotParser');\nconst GoldenThunderSlotParser = require('./games/GoldenThunderSlotParser');\nconst ManekiGoldSlotParser = require('./games/ManekiGoldSlotParser');\nconst HappyHourSlotParser = require('./games/HappyHourSlotParser');\nconst SonsOfAsgardSlotParser = require('./games/SonsOfAsgardSlotParser');\nconst JadeFortuneTempleSlotParser = require('./games/JadeFortuneTempleSlotParser');\nconst WormKingSlotParser = require('./games/WormKingSlotParser');\nconst FootyFrenzy2020SlotParser = require('./games/FootyFrenzy2020SlotParser');\nconst FootyFrenzy2022SlotParser = require('./games/FootyFrenzy2022SlotParser');\nconst GoldheadsSlotParser = require('./games/GoldheadsSlotParser');\nconst GoldenPotSlotParser = require('./games/GoldenPotSlotParser');\nconst CrusadeSlotParser = require('./games/CrusadeSlotParser');\nconst BuffaloRespinSlotParser = require('./games/BuffaloRespinSlotParser');\nconst LeagueOfWildsSlotParser = require('./games/LeagueOfWildsSlotParser');\nconst FruitStackOneSlotParser = require('./games/FruitStackOneSlotParser');\nconst RacingWildsSlotParser = require('./games/RacingWildsSlotParser');\nconst MagnificentWildSlotParser = require('./games/MagnificentWildSlotParser');\nconst PiratesHoldSlotParser = require('./games/PiratesHoldSlotParser');\nconst PiratesHoldDavyLockersCoinsSlotParser = require('./games/PiratesHoldDavyLockersCoinsSlotParser');\nconst MoneyMachineSlotParser = require('./games/MoneyMachineSlotParser');\nconst MoneyTowerSlotParser = require('./games/MoneyTowerSlotParser');\nconst LuckyMahjongSlotParser = require('./games/LuckyMahjongSlotParser');\nconst BeautysBeastSlotParser = require('./games/BeautysBeastSlotParser');\nconst MagicFairiesSlotParser = require('./games/MagicFairiesSlotParser');\nconst MoneyNightSlotParser = require('./games/MoneyNightSlotParser');\nconst MonteCarloRacingSlotParser = require('./games/MonteCarloRacingSlotParser');\nconst NudgingGemsSlotParser = require('./games/NudgingGemsSlotParser');\nconst ParadiseTreasuresSlotParser = require('./games/ParadiseTreasuresSlotParser');\nconst PersianGlorySlotParser = require('./games/PersianGlorySlotParser');\nconst PyramidGoldSlotParser = require('./games/PyramidGoldSlotParser');\nconst RussianGlorySlotParser = require('./games/RussianGlorySlotParser');\nconst SinbadsGoldSlotParser = require('./games/SinbadsGoldSlotParser');\nconst SphinxGoldSlotParser = require('./games/SphinxGoldSlotParser');\nconst ThaiThaiSlotParser = require('./games/ThaiThaiSlotParser');\nconst WildStarsSlotParser = require('./games/WildStarsSlotParser');\nconst CastlePillagerSlotParser = require('./games/CastlePillagerSlotParser');\nconst FruitStackSuperDoubleWildSlotParser = require('./games/FruitStackSuperDoubleWildSlotParser');\nconst KeepingUpWithThePaddysSlotParser = require('./games/KeepingUpWithThePaddysSlotParser');\nconst PoseidonFortuneSlotParser = require('./games/PoseidonFortuneSlotParser');\nconst HappyRoosterSlotParser = require('./games/HappyRoosterSlotParser');\nconst PaddyPowerMysteryGoldSlotParser = require('./games/PaddyPowerMysteryGoldSlotParser');\nconst FlirtingTangSlotParser = require('./games/FlirtingTangSlotParser');\nconst CaveMegaBlastSlotParser = require('./games/CaveMegaBlastSlotParser');\nconst CrazySuper7sSlotParser = require('./games/CrazySuper7sSlotParser');\nconst NeonWildsSlotParser = require('./games/NeonWildsSlotParser');\nconst FruitStackSlotParser = require('./games/FruitStackSlotParser');\nconst MississippiQueenSlotParser = require('./games/MississippiQueenSlotParser');\nconst HalloWinSlotParser = require('./games/HalloWinSlotParser');\nconst MayanMysterySlotParser = require('./games/MayanMysterySlotParser');\nconst DragonsWildSlotParser = require('./games/DragonsWildSlotParser');\nconst LittleRedRidingHoodSlotParser = require('./games/LittleRedRidingHoodSlotParser');\nconst JapaneseMysterySlotParser = require('./games/JapaneseMysterySlotParser');\nconst EgyptianWildsSlotParser = require('./games/EgyptianWildsSlotParser');\nconst IrishCloverSlotParser = require('./games/IrishCloverSlotParser');\nconst FruitStackMysteryWinSlotParser = require('./games/FruitStackMysteryWinSlotParser');\nconst BullfightSlotParser = require('./games/BullfightSlotParser');\nconst AgesOfFortuneSlotParser = require('./games/AgesOfFortuneSlotParser');\nconst PaddyPowerGoldOnTourSlotParser = require('./games/PaddyPowerGoldOnTourSlotParser');\nconst MineCrusherSlotParser = require('./games/MineCrusherSlotParser');\nconst BetfairsWildArcadeSlotParser = require('./games/BetfairsWildArcadeSlotParser');\nconst TheHeistSlotParser = require('./games/TheHeistSlotParser');\nconst PaddyPowerShowtimeSlotParser = require('./games/PaddyPowerShowtimeSlotParser');\nconst ShowtimeSpinnerSlotParser = require('./games/ShowtimeSpinnerSlotParser');\nconst CloningSheepSlotParser = require('./games/CloningSheepSlotParser');\nconst RobinHoodGoldenLootSlotParser = require('./games/RobinHoodGoldenLootSlotParser');\nconst TumbleDwarfMysteryGoldSlotParser = require('./games/TumbleDwarfMysteryGoldSlotParser');\nconst SlottingSlopesSlotParser = require('./games/SlottingSlopesSlotParser');\nconst SmoothieSmashSlotParser = require('./games/SmoothieSmashSlotParser');\nconst PaddyPowerGoldBookOfLuckSlotParser = require('./games/PaddyPowerGoldBookOfLuckSlotParser');\nconst BigRacingSlotParser = require('./games/BigRacingSlotParser');\nconst WishAWinSlotParser = require('./games/WishAWinSlotParser');\nconst WorldOfWizardsSlotParser = require('./games/WorldOfWizardsSlotParser');\nconst GiftsOfRaSlotParser = require('./games/GiftsOfRaSlotParser');\nconst OstrichLuckSlotParser = require('./games/OstrichLuckSlotParser');\nconst PaddysWonderWheelUnderConstructionSlotParser = require('./games/PaddysWonderWheelUnderConstructionSlotParser');\nconst MazeOfFortuneSlotParser = require('./games/MazeOfFortuneSlotParser');\nconst TowerOfWealthSlotParser = require('./games/TowerOfWealthSlotParser');\nconst ArcticFishingParser = require('./games/ArcticFishingParser');\nconst TumbleDwarfAndTheLibraryOfSecretsSlotParsers = require('./games/TumbleDwarfAndTheLibraryOfSecretsSlotParser');\nconst PharaohsEternalGlorySlotParser = require('./games/PharaohsEternalGlorySlotParser');\n\n/*require_parser*/\n\n/**\n * CaySlotParserFactory.\n *\n * @class\n */\nclass CaySlotParserFactory {\n\tconstructor() {\n\t\t/** @type {Object} Game specific parsers */\n\t\tthis.parsers = {\n\t\t\tSantasSpins: SantasSpinsSlotParser,\n\t\t\tPaddyPowerGold: PaddyPowerGoldSlotParser,\n\t\t\tPaddyPowerGoldHaxe: PaddyPowerGoldSlotParser,\n\t\t\tFrootShoot: FrootShootSlotParser,\n\t\t\tLuckyCabaret: LuckyCabaretSlotParser,\n\t\t\tRhinoRumble: RhinoRumbleSlotParser,\n\t\t\tGypsyLuck: GypsyLuckSlotParser,\n\t\t\tAladinsLamp: AladinsLampSlotParser,\n\t\t\tSparklingJackpot: SparklingJackpotSlotParser,\n\t\t\tPaddysLuckyMine: PaddysLuckyMineSlotParser,\n\t\t\tPaddysLuckyPigeon: PaddysLuckyPigeonSlotParser,\n\t\t\tPaddyPowerFanatics: PaddyPowerFanaticsSlotParser,\n\t\t\tFantasia: FantasiaSlotParser,\n\t\t\tAsianRiches: AsianRichesSlotParser,\n\t\t\tIndianPrincess: IndianPrincessSlotParser,\n\t\t\tRubyWalshChampionsGold: RubyWalshChampionsGoldSlotParser,\n\t\t\tMrDiamonds: MrDiamondsSlotParser,\n\t\t\tSafariDream: SafariDreamSlotParser,\n\t\t\tSantasChristmasGifts: SantasChristmasGiftsSlotParser,\n\t\t\tWildSheriff: WildSheriffSlotParser,\n\t\t\tJoustingWilds: JoustingWildsSlotParser,\n\t\t\tFruitPops: FruitPopsSlotParser,\n\t\t\tGemBlast: GemBlastSlotParser,\n\t\t\tForestRush: ForestRushSlotParser,\n\t\t\tAliBabasTreasure: AliBabasTreasureSlotParser,\n\t\t\tBallOfShame: BallOfShameSlotParser,\n\t\t\tTrickOTreat: TrickOTreatSlotParser,\n\t\t\tDarkJungle: DarkJungleSlotParser,\n\t\t\tShamanSpins: ShamanSpinsSlotParser,\n\t\t\tReelsOfEgypt: ReelsOfEgyptSlotParser,\n\t\t\tFruitStackBigSpins: FruitStackBigSpinsSlotParser,\n\t\t\tBombTheJackpot: BombTheJackpotSlotParser,\n\t\t\tFruitStackDeluxe: FruitStackDeluxeSlotParser,\n\t\t\tGoldenKingdom: GoldenKingdomSlotParser,\n\t\t\tDiamondRush: DiamondRushSlotParser,\n\t\t\tSkulls: SkullsSlotParser,\n\t\t\tRoyalGoose: RoyalGooseSlotParser,\n\t\t\tClassyVegas: ClassyVegasSlotParser,\n\t\t\tBianconeriWilds: BianconeriWildsSlotParser,\n\t\t\tWildEgypt: WildEgyptSlotParser,\n\t\t\tFootyFrenzy: FootyFrenzySlotParser,\n\t\t\tTumbleDwarf: TumbleDwarfSlotParser,\n\t\t\tGoldErado: GolderadoSlotParser,\n\t\t\tEasterMoney: EasterMoneySlotParser,\n\t\t\tSolarSnap: SolarSnapSlotParser,\n\t\t\tHotSlot: HotSlotSlotParser,\n\t\t\tGreatGems: GreatGemsSlotParser,\n\t\t\tDetectiveWilder: DetectiveWilderSlotParser,\n\t\t\tGoldenPlanet: GoldenPlanetSlotParser,\n\t\t\tTheGreatWild: TheGreatWildSlotParser,\n\t\t\tBarbarianTreasures: BarbarianTreasuresSlotParser,\n\t\t\tSuperFuego: SuperFuegoSlotParser,\n\t\t\tFunFair: FunFairSlotParser,\n\t\t\tGoldenThunder: GoldenThunderSlotParser,\n\t\t\tMaximusReels: MaximusReelsSlotParser,\n\t\t\tManekiGold: ManekiGoldSlotParser,\n\t\t\tHappyHour: HappyHourSlotParser,\n\t\t\tSonsOfAsgard: SonsOfAsgardSlotParser,\n\t\t\tJadeDragon: JadeFortuneTempleSlotParser,\n\t\t\tWormKing: WormKingSlotParser,\n\t\t\tFootyFrenzy2020: FootyFrenzy2020SlotParser,\n\t\t\tFootyFrenzy2022: FootyFrenzy2022SlotParser,\n\t\t\tGoldheads: GoldheadsSlotParser,\n\t\t\tCrusade: CrusadeSlotParser,\n\t\t\tGoldenPot: GoldenPotSlotParser,\n\t\t\tBuffaloRespin: BuffaloRespinSlotParser,\n\t\t\tLeagueOfWilds: LeagueOfWildsSlotParser,\n\t\t\tRacingWilds: RacingWildsSlotParser,\n\t\t\tMagnificentWild: MagnificentWildSlotParser,\n\t\t\tFruitStackOne: FruitStackOneSlotParser,\n\t\t\tPiratesHold: PiratesHoldSlotParser,\n\t\t\tPiratesHoldDavyLockersCoins: PiratesHoldDavyLockersCoinsSlotParser,\n\t\t\tMoneyMachine: MoneyMachineSlotParser,\n\t\t\tMoneyTower: MoneyTowerSlotParser,\n\t\t\tLuckyMahjong: LuckyMahjongSlotParser,\n\t\t\tBeautysBeast: BeautysBeastSlotParser,\n\t\t\tMagicFairies: MagicFairiesSlotParser,\n\t\t\tMoneyNight: MoneyNightSlotParser,\n\t\t\tMonteCarloRacing: MonteCarloRacingSlotParser,\n\t\t\tNudgingGems: NudgingGemsSlotParser,\n\t\t\tParadiseTreasures: ParadiseTreasuresSlotParser,\n\t\t\tPersianGlory: PersianGlorySlotParser,\n\t\t\tPyramidGold: PyramidGoldSlotParser,\n\t\t\tRussianGlory: RussianGlorySlotParser,\n\t\t\tSinbadsGold: SinbadsGoldSlotParser,\n\t\t\tSphinxGold: SphinxGoldSlotParser,\n\t\t\tThaiThai: ThaiThaiSlotParser,\n\t\t\tWildStars: WildStarsSlotParser,\n\t\t\tCastlePillager: CastlePillagerSlotParser,\n\t\t\tFruitStackSuperDoubleWild: FruitStackSuperDoubleWildSlotParser,\n\t\t\tKeepingUpWithThePaddys: KeepingUpWithThePaddysSlotParser,\n\t\t\tPoseidonFortune: PoseidonFortuneSlotParser,\n\t\t\tHappyRooster: HappyRoosterSlotParser,\n\t\t\tPaddyPowerMysteryGold: PaddyPowerMysteryGoldSlotParser,\n\t\t\tFlirtingTang: FlirtingTangSlotParser,\n\t\t\tCaveMegaBlast: CaveMegaBlastSlotParser,\n\t\t\tCrazySuper7s: CrazySuper7sSlotParser,\n\t\t\tNeonWilds: NeonWildsSlotParser,\n\t\t\tFruitStack: FruitStackSlotParser,\n\t\t\tMississippiQueen: MississippiQueenSlotParser,\n\t\t\tHalloWin: HalloWinSlotParser,\n\t\t\tMayanMystery: MayanMysterySlotParser,\n\t\t\tDragonsWild: DragonsWildSlotParser,\n\t\t\tLittleRedRidingHood: LittleRedRidingHoodSlotParser,\n\t\t\tJapaneseMystery: JapaneseMysterySlotParser,\n\t\t\tEgyptianWilds: EgyptianWildsSlotParser,\n\t\t\tIrishClover: IrishCloverSlotParser,\n\t\t\tFruitStackMysteryWin: FruitStackMysteryWinSlotParser,\n\t\t\tAgesOfFortune: AgesOfFortuneSlotParser,\n\t\t\tPaddyPowerGoldOnTour: PaddyPowerGoldOnTourSlotParser,\n\t\t\tBullfight: BullfightSlotParser,\n\t\t\tMineCrusher: MineCrusherSlotParser,\n\t\t\tBetfairsWildArcade: BetfairsWildArcadeSlotParser,\n\t\t\tTheHeist: TheHeistSlotParser,\n\t\t\tPaddyPowerShowtime: PaddyPowerShowtimeSlotParser,\n\t\t\tShowtimeSpinner: ShowtimeSpinnerSlotParser,\n\t\t\tCloningSheep: CloningSheepSlotParser,\n\t\t\tRobinHoodGoldenLoot: RobinHoodGoldenLootSlotParser,\n\t\t\tTumbleDwarfMysteryGold: TumbleDwarfMysteryGoldSlotParser,\n\t\t\tSlottingSlopes: SlottingSlopesSlotParser,\n\t\t\tSmoothieSmash: SmoothieSmashSlotParser,\n\t\t\tBigRacing: BigRacingSlotParser,\n\t\t\tPaddyPowerGoldBookOfLuck: PaddyPowerGoldBookOfLuckSlotParser,\n\t\t\tWishAWin: WishAWinSlotParser,\n\t\t\tWorldOfWizards: WorldOfWizardsSlotParser,\n\t\t\tSpyAffairs: CaySlotParserLegacy,\n\t\t\tGiftsOfRa: GiftsOfRaSlotParser,\n\t\t\tOstrichLuck: OstrichLuckSlotParser,\n\t\t\tPaddysWonderWheelUnderConstruction: PaddysWonderWheelUnderConstructionSlotParser,\n\t\t\tMazeOfFortune: MazeOfFortuneSlotParser,\n\t\t\tTowerOfWealth: TowerOfWealthSlotParser,\n\t\t\tArcticFishing: ArcticFishingParser,\n\t\t\tTumbleDwarfAndTheLibraryOfSecrets: TumbleDwarfAndTheLibraryOfSecretsSlotParsers,\n\t\t\tPharaohsEternalGlory93: PharaohsEternalGlorySlotParser,\n\t\t\tPharaohsEternalGlory96: PharaohsEternalGlorySlotParser/*add_parser*/\n\t\t};\n\t}\n\n\t/**\n\t * Creates an appropriate parser instance for the specified game id\n\t * Game specific parsers are preferred, default parser is used if one is not found\n\t * @param  {String} gameId The game id\n\t * @return {CaySlotParser} The slot parser instance\n\t */\n\tcreateParser(gameId) {\n\t\tgameId = gameId.toLowerCase();\n\t\tvar keys = Object.keys(this.parsers);\n\t\tfor (var i = 0; i < keys.length; i++) {\n\t\t\tif (keys[i].toLowerCase() == gameId) {\n\t\t\t\treturn new this.parsers[keys[i]]();\n\t\t\t}\n\t\t}\n\n\t\treturn new CaySlotParser();\n\t}\n}\n\nmodule.exports = CaySlotParserFactory;\n","const Format = require('../../../utils/Format');\n\nconst DefaultParser = require('../../DefaultParser');\n\n/**\n *\tCaySlotParserLegacy. Handles parsing spin result data\n *\n * @class\n */\nclass CaySlotParserLegacy extends DefaultParser {\n\tconstructor() {\n\t\tsuper();\n\n\t\t/** @type {Object} The server spin data */\n\t\tthis.data = {};\n\n\t\t/** @type {Object} Win amounts data */\n\t\tthis.winDetails = {\n\t\t\twinLines: [],\n\t\t\totherWins: [],\n\t\t\tjackpotWins: [],\n\t\t\ttotalWin: 0,\n\t\t};\n\n\t\t/** @type {string} The current game id */\n\t\tthis.gameId = '';\n\n\t\t/**\n\t\t * Feature handlers map\n\t\t * Maps feature names to handler functions,\n\t\t * can be modified by game specific parsers\n\t\t * @type {Array}\n\t\t */\n\t\tthis.featureHandlers = [\n\t\t\t{ name: 'stickyData', cb: this._handleStickyData },\n\t\t\t{ name: 'respin', cb: this._handleRespins },\n\t\t\t{ name: 'nudge', cb: this._handleNudges },\n\t\t\t{ name: 'freeSpins', cb: this._handleFreeSpins }\n\t\t];\n\n\t\tthis.bonusDtos = {\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotInstantWinBonusDataDto': 'instantWin',\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotExtendedInstantWinBonusDataDto': 'instantWin',\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotPrizeBonusDataDto': 'bonus',\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotWheelOfFortuneBonusDataDto': 'bonus',\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotPathBonusDataDto': 'bonus',\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotRespinWrapperDto': 'bonus',\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotStackedSymbolBonusDataDto': this._handleStackedSymbol,\n\t\t\t'cayetano.games.slots.dto.SlotGambleWinCardPickDataDto': this._handleGamble,\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotFreeSpinBonusDataDto': 'instantWin' // fs instant win \n\t\t};\n\t}\n\n\tsanitizeData(data) {\n\t\tdata = super.sanitizeData(data);\n\n\t\tif (!this.parseAdditionalResponses) return data;\n\n\t\tdata.responses.forEach((response, idx) => {\n\t\t\tif (Array.isArray(response.game.gameData)) {\n\t\t\t\tresponse.game.gameData = {\n\t\t\t\t\tslotGameArray: response.game.gameData\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn data;\n\t}\n\n\t/**\n\t* Parses spin result data\n\t* @param {String} gameId The server id of the current game\n\t* @param {Object} data Game data, contains\n\t* screen reels and every game feature\n\t* @param {Object} data.game Spin result data\n\t*/\n\tparse(gameId, data) {\n\t\tthis.balanceAtStart = null;\n\t\tthis.freebetAtStart = null;\n\n\t\tif (data.responses && Array.isArray(data.responses)) {\n\t\t\tif (data.responses[0].user.balance.session) {\n\t\t\t\tdata.responses[0].user.balance.cash = data.responses[0].user.balance.session;\n\t\t\t}\n\t\t\tthis.balanceAtStart = parseFloat(data.responses[0].user.balance.cash.atStart);\n\t\t\tthis.freebetAtStart = parseFloat(data.responses[0].user.balance.freeBets.atStart);\n\t\t\tdata.responses.forEach((response, responseIndex) => {\n\t\t\t\tif (Array.isArray(response.game.gameData)) {\n\t\t\t\t\tresponse.game.gameData = {slotGameArray: response.game.gameData};\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (response.game.gameData && !Array.isArray(response.game.gameData.slotGameArray)) {\n\t\t\t\t\tdata.responses[responseIndex].game.gameData.slotGameArray = [response.game.gameData.slotGameArray];\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tthis.data = data;\n\t\tthis.gameId = gameId;\n\n\t\tif (!this.data.responses || !this.data.responses.length) {\n\t\t\tthis.responses = [this.data];\n\t\t} else {\n\t\t\tthis.responses = this.data.responses;\n\t\t}\n\n\t\tthis.transactions = this.data.transactions;\n\n\t\tlet multiResponseFormat = !!this.data.responses && this.data.responses.length; //Check for multiple responses format\n\t\tif(multiResponseFormat){ //We are using multi-response format\n\t\t\tthis.data = this.data.responses[0]; //Use the main spin response for now\n\t\t\tthis.data.transactions = data.transactions;\n\t\t}\n\n\t\tlet screenCopy = null; // make a copy for the new screen response\n\t\tif (typeof this.data.game.gameData.slotGameArray[0].screen[0] == \"string\") {\n\t\t\tscreenCopy = [];\n\t\t\tfor (let i = 0; i < this.data.game.gameData.slotGameArray[0].screen.length; i++) {\n\t\t\t\tscreenCopy.push(this.data.game.gameData.slotGameArray[0].screen[i]);\n\t\t\t}\n\t\t}\n\n\t\tFormat.convertMoneyToNumber(this.data);\n\n\t\t// parse the new screen to integers\n\t\tif (screenCopy != null) {\n\t\t\tvar parsedScr = [];\n\t\t\t\n\t\t\tfor (let reel = 0; reel < screenCopy.length; reel++) {\n\t\t\t\tlet rows = screenCopy[reel].split(\"\");\n\t\t\t\tvar symbols = [];\n\t\t\t\tfor (let row = 0; row < rows.length; row++) {\n\t\t\t\t\tsymbols.push(parseInt(rows[row], 36));\n\t\t\t\t}\n\t\t\t\tparsedScr.push(symbols);\n\t\t\t}\n\t\t\t\n\t\t\tdata.game.gameData.slotGameArray[0].screen = parsedScr;\n\t\t}\n\n\t\tif (this._handleMaxPayout(this.data)) {\n\t\t\treturn this._generateOutput();\n\t\t}\n\n\t\tif(this.data.game.reelsBuffer) this._initReels(this.data.game);\n\n\t\t// game specific parsers can apply before parse operations here\n\t\tif (typeof this._beforeParseOperations === 'function') {\n\t\t\tthis._beforeParseOperations(this.data);\n\t\t}\n\n\t\t// apply all the feature handlers\n\t\tthis._initReels(this.data.game);\n\t\tthis._handleFeatures(this.data.game);\n\t\tthis._handleWins(this.data.game);\n\n\t\t// game specific parsers can apply after parse operations here\n\t\tif (typeof this._afterParseOperations === 'function') {\n\t\t\tthis._afterParseOperations(this.data);\n\t\t}\n\n\t\tthis._handleJackpots(this.data);\n\n\t\tif(data.responses.length > 1) { //Parse each additional response separatedly.\n\t\t\tconst remainingResponses = data.responses.slice(1);\n\n\t\t\tremainingResponses.forEach((res) => this._handleAdditionalResponse(res));\n\t\t}\n\n\t\treturn this._generateOutput();\n\t}\n\n\t_handleMaxPayout(data) {\n\t\tif (!data.game.win.limitedWin) return false;\n\t\tthis.winDetails.totalWin = data.game.win.limitedWin;\n\t\tthis.winDetails.limitedWin = data.game.win.limitedWin;\n\t\treturn true;\n\t}\n\n\t/**\n\t * Parses additional responses from the server.\n\t * @param {Object} response Game data, contains screen reels and every game feature in the response.\n\t */\n\t_handleAdditionalResponse(response){\n\t\tif (!Array.isArray(response.game.gameData.slotGameArray)) {\n\t\t\tresponse.game.gameData.slotGameArray = [response.game.gameData.slotGameArray];\n\t\t}\n\n\t\tFormat.convertMoneyToNumber(response);\n\n\t\tif (typeof this._beforeParseOperations === 'function') {\n\t\t\tthis._beforeParseOperations(response);\n\t\t}\n\n\t\tthis._handleFeatures(response.game);\n\t\tthis._handleWins(response.game);\n\n\t\t//We should use the user data of the latest response as it is the most up-to-date\n\t\tif(response.user && response.user.balance) this.data.user = response.user;\n\n\t\tif (this.balanceAtStart != null) {\n\t\t\tthis.data.user.balance.cash.atStart = this.balanceAtStart;\n\t\t}\n\n\t\tif (this.freebetAtStart != null) {\n\t\t\tthis.data.user.balance.freeBets.atStart = this.freebetAtStart;\n\t\t}\n\n\t\tif (typeof this._afterParseOperations === 'function') {\n\t\t\tthis._afterParseOperations(response);\n\t\t}\n\t}\n\n\t/**\n\t * Returns parsed spin data in the specified format\n\t * @return {Object} The parsed data\n\t */\n\t_generateOutput() {\n\t\treturn {\n\t\t\tgameDetails: {\n\t\t\t\tgameId: this.gameId,\n\t\t\t\troundId: this.data.transactions.roundId,\n\t\t\t\tprevRoundId: this.data.transactions.prevRoundId,\n\t\t\t\tnextRoundId: this.data.transactions.nextRoundId,\n\t\t\t\tserverTimeStart: this.data.transactions.startTime,\n\t\t\t\tserverTimeEnd: this.data.transactions.endTime,\n\t\t\t},\n\t\t\ttransactions: {\n\t\t\t\ttotalBet: this.data.game.stake,\n\t\t\t\ttotalWin: this.winDetails.totalWin,\n\t\t\t\tlimitedWin: this.winDetails.limitedWin,\n\t\t\t\tbalance: {\n\t\t\t\t\tcash: this.data.user.balance.cash,\n\t\t\t\t\tfreeBets: this.data.user.balance.freeBets,\n\t\t\t\t\tsessionCash: this.data.user.balance.sessionCash,\n\t\t\t\t\tsessionFreeBets: this.data.user.balance.sessionFreeBets,\n\t\t\t\t\tbonus: this.data.user.balance.bonus\n\t\t\t\t},\n\t\t\t},\n\t\t\tregulations: this.data.regulations,\n\t\t\twinDetails: this.winDetails,\n\t\t\treels: this.data.game.reels,\n\t\t\tpromo: this.data.promo\n\t\t};\n\t}\n\n\t_mapSymbol(reel, row, symbolId) {\n\t\treturn symbolId;\n\t}\n\n\t/**\n\t * Initializes the reels array with the current spin data object\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t */\n\t_initReels(data) {\n\t\tlet reelsBuffer = data.gameData.slotGameArray[0].screen;\n\t\tlet reels = [];\n\n\t\tlet offset = Math.floor(reelsBuffer[0][0] / 100) * 100;\n\n\t\tfor (let i = 0; i < reelsBuffer.length; i++) {\n\t\t\treels[i] = reelsBuffer[i].map((symbol, row) => this._mapSymbol(i, row, symbol - offset));\n\t\t}\n\t\tdata.reels = reels;\n\t\treturn reels;\n\t}\n\n\t_handleStackedWilds(data) {\n\t\tlet pd = data.gameData.slotGameArray[0].payoutData;\n\t\tlet payoutData = [];\n\n\t\tif (Array.isArray(pd)) {\n\t\t\tpayoutData = pd.filter((pdata) => {return pdata.className == 'cayetano.games.slots.dto.bonuses.SlotStackedWildBonusDataDto'});\n\t\t}\n\t\telse {\n\t\t\tfor (const property in pd) {\n\t\t\t\tvar data = pd[property][0];\n\t\t\t\tif (data.type == \"SlotStackedWildBonusDataDto\") {\n\t\t\t\t\tpayoutData.push(data);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (payoutData.length == 0) return;\n\t\tlet respin = payoutData[0].bonusSpin;\n\t\tlet newGameData = {gameData: {slotGameArray: [respin]}};\n\n\t\tthis.data.game.reels = this._initReels(newGameData);\n\t\tthis.winDetails.winLines = this._getWinLines(respin);\n\t\tthis._handleWins(newGameData);\n\t}\n\n\t_handleStackedSymbol(dto) {\n\t\tlet newGameData = {gameData: {slotGameArray: [dto.bonusSpin]}};\n\t\tthis.data.game.reels = this._initReels(newGameData);\n\t\tthis.winDetails.winLines = this._getWinLines(dto.bonusSpin);\n\t\tthis._handleWins(newGameData);\n\t}\n\n\t_handleStickyData(data) {\n\t\tvar stickyData = data.gameData.slotGameArray[0].slotGameStickyData;\n\t\tif (!stickyData || stickyData.length == 0 || stickyData.stickyPos.length == 0) return;\n\n\t\tvar newData = JSON.parse(JSON.stringify(data));\n\n\t\tif (data.gameData.slotGameArray[0].winAmount == 0) {\n\t\t\tstickyData.stickyPos.forEach(function(pos, idx) {\n\t\t\t\tnewData.gameData.slotGameArray[0].screen[stickyData.stickyReels[idx]][pos] = stickyData.stickySymbolIds[idx];\n\t\t\t});\n\t\t\tthis.data.game.reels = this._initReels(newData);\n\t\t}\n\t}\n\n\t_handleFreeSpins(data) {\n\t\tlet fspins = data.gameData.slotGameArray.filter((spin) => { return spin.spinNum > 0 });\n\n\t\tfspins = fspins.map(this._handleSingleFreeSpin.bind(this));\n\t\tthis.winDetails.freeSpins = fspins;\n\t}\n\n\t_handleSingleFreeSpin(spin) {\n\t\tthis.winDetails.totalWin += spin.winAmount;\n\t\treturn {\n\t\t\ttype: spin.spinNum,\n\t\t\tamount: spin.winAmount,\n\t\t\twinLines: this._getWinLines(spin),\n\t\t\totherWins: this._getPayoutDataBonuses(spin)\n\t\t}\n\t}\n\n\t_handleNudges(data) {\n\t\tlet respins = this._flattenNudges(data.gameData.slotGameArray[0]);\n\t\tthis.winDetails.nudges = [];\n\n\t\trespins.forEach((respin) => {\n\t\t\tlet currRespin = this._handleSingleRespin(respin);\n\t\t\tthis.winDetails.nudges.push(currRespin);\n\t\t\tlet len = this.winDetails.nudges.length;\n\t\t\tlet bonusesWin = 0;\n\t\t\tcurrRespin.otherWins.forEach((bonus) => {\n\t\t\t\tbonusesWin += bonus.amount;\n\t\t\t});\n\t\t\tcurrRespin.amount -= bonusesWin;\n\t\t\tif (len > 1) {\n\t\t\t\tthis.winDetails.nudges[len - 2].amount -= currRespin.amount;\n\t\t\t}\n\t\t});\n\n\t\tthis.winDetails.nudges.forEach((respin) => {\n\t\t\tthis.winDetails.totalWin += respin.amount;\n\t\t});\n\t}\n\n\t_handleRespins(data) {\n\t\tif (data.gameData.slotGameArray.length <= 1) return;\n\n\t\tthis.winDetails.respins = [];\n\n\t\tfor (let i = 1; i < data.gameData.slotGameArray.length; i++) {\n\t\t\tlet respin = data.gameData.slotGameArray[i];\n\t\t\tif (respin.spinNum > 0) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\trespin.respinIndex = i - 1;\n\t\t\trespin = this._handleSingleRespin(respin);\n\n\t\t\tthis.winDetails.respins.push(respin);\n\t\t\tlet len = this.winDetails.respins.length;\n\t\t\tlet bonusesWin = 0;\n\t\t\trespin.otherWins.forEach((bonus) => {\n\t\t\t\tbonusesWin += bonus.amount;\n\t\t\t});\n\t\t\trespin.amount -= bonusesWin;\n\t\t\tif (len > 1) {\n\t\t\t\tthis.winDetails.respins[len - 2].amount -= respin.amount;\n\t\t\t}\n\t\t}\n\n\t\tvar totalRespinsWinAmount = 0;\n\t\tthis.winDetails.respins.forEach((respin) => {\n\t\t\ttotalRespinsWinAmount += respin.amount;\n\t\t});\n\n\t\tif (totalRespinsWinAmount > 0) {\n\t\t\tthis.winDetails.totalWin += totalRespinsWinAmount;\n\t\t} else {\n\t\t\tthis.winDetails.respins = [];\n\t\t}\n\t}\n\n\t_handleSingleRespin(data) {\n\t\treturn {\n\t\t\ttype: data.respinIndex + 1,\n\t\t\tamount: data.winAmount,\n\t\t\twinLines: this._getWinLines(data),\n\t\t\totherWins: this._getPayoutDataBonuses(data)\n\t\t}\n\t}\n\n\t_flattenNudges(gameDto, index = 0) {\n\t\tlet respins = [];\n\n\t\tif (Array.isArray(gameDto.payoutData)) {\n\t\t\tgameDto.payoutData.forEach((data) => {\n\t\t\t\tif (data.className == 'cayetano.games.slots.dto.SlotGameDto') {\n\t\t\t\t\tdata.respinIndex = index++;\n\t\t\t\t\trespins.push(data);\n\t\t\t\t\trespins = respins.concat(this._flattenNudges(data, index));\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tfor (const property in gameDto.payoutData) {\n\t\t\t\tvar data = gameDto.payoutData[property][0];\n\n\t\t\t\tif (data.type == 'SlotGame') {\n\t\t\t\t\tdata.respinIndex = index++;\n\t\t\t\t\trespins.push(data);\n\t\t\t\t\trespins = respins.concat(this._flattenNudges(data, index));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn respins;\n\t}\n\n\t_beforeParseOperations(data) {\n\t\tthis._handlePayoutDataBonuses(data.game.gameData.slotGameArray[0]);\n\t}\n\n\t_afterParseOperations(data) {\n\t\tthis._handleStackedWilds(data.game);\n\t}\n\n\t_handlePayoutDataBonuses(gameDto) {\n\t\tlet bonuses = this._getPayoutDataBonuses(gameDto);\n\n\t\tbonuses.forEach((bonus) => {\n\t\t\tthis.winDetails.otherWins.push(bonus);\n\t\t\tthis.winDetails.totalWin += bonus.amount;\n\t\t});\n\t}\n\n\t_handleGamble(data) {\n\t\tthis.winDetails.otherWins.push({\n\t\t\ttype: 'gamble',\n\t\t\tamount: data.winAmount\n\t\t});\n\t\tthis.winDetails.totalWin += data.winAmount;\n\t\tconsole.log(arguments.length, data);\n\t}\n\n\t_getPayoutDataBonuses(gameDto, runScreenBonuses = true) {\n\t\tlet payoutData = gameDto.payoutData;\n\t\tlet bonuses = [];\n\n\t\tfor (let i = 0; i < payoutData.length; i++) {\n\t\t\tif (this.bonusDtos[payoutData[i].className]) {\n\t\t\t\tif (typeof this.bonusDtos[payoutData[i].className] == 'string') {\n\t\t\t\t\tif (payoutData[i].winAmount > 0) {\n\t\t\t\t\t\tbonuses.push({\n\t\t\t\t\t\t\ttype: this.bonusDtos[payoutData[i].className],\n\t\t\t\t\t\t\tamount: payoutData[i].winAmount\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else if (typeof this.bonusDtos[payoutData[i].className] == 'function' && runScreenBonuses) {\n\t\t\t\t\tthis.bonusDtos[payoutData[i].className].call(this, payoutData[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (gameDto.stakeMultiplier > 1) {\n\t\t\tbonuses.push({\n\t\t\t\ttype: 'multiplier',\n\t\t\t\tamount: gameDto.winAmount - (gameDto.winAmount / gameDto.stakeMultiplier)\n\t\t\t});\n\t\t}\n\n\t\treturn bonuses;\n\t}\n\n\t/**\n\t * Handles all the features present in the current spin data object\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t */\n\t_handleFeatures(data) {\n\t\tthis.featureHandlers.forEach((featureHandler) => {\n\t\t\tfeatureHandler.cb.call(this, data, featureHandler.name);\n\t\t});\n\t}\n\n\t/**\n\t * Sanity check on the current spin data object\n\t * @private\n\t * @return {Boolean} True if everything is ok, false otherwise\n\t */\n\t_dataSanityCheck() {\n\t\tlet data = JSON.parse(JSON.stringify(this.data)); // deep clone\n\n\t\tif (!data.transactions) data.transactions = {}; // allow it ;)\n\t\t// TODO: this is temporary fix when the server returns game:null.\n\t\tif (!data.game) {\n\t\t\tdata = {\n\t\t\t\tgameDetails: {\n\t\t\t\t\tgameId: this.gameId,\n\t\t\t\t\troundId: data.transactions.roundId,\n\t\t\t\t\tprevRoundId: data.transactions.prevRoundId,\n\t\t\t\t\tnextRoundId: data.transactions.nextRoundId,\n\t\t\t\t\tserverTimeStart: data.transactions.startTime,\n\t\t\t\t\tserverTimeEnd: data.transactions.endTime,\n\t\t\t\t},\n\t\t\t\ttransactions: {\n\t\t\t\t\ttotalBet: null,\n\t\t\t\t\ttotalWin: null,\n\t\t\t\t\tbalance: {\n\t\t\t\t\t\tcash: data.user.balance.cash,\n\t\t\t\t\t\tfreeBets: data.user.balance.freeBets,\n\t\t\t\t\t\tsessionCash: data.user.balance.sessionCash,\n\t\t\t\t\t\tsessionFreeBets: data.user.balance.sessionFreeBets,\n\t\t\t\t\t\tbonus: data.user.balance.bonus\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tregulations: data.regulations,\n\t\t\t\twinDetails: null,\n\t\t\t\treels: null,\n\t\t\t\tpromo: data.promo\n\t\t\t};\n\n\t\t\treturn false;\n\t\t}\n\t\tthis.data = data;\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * win details logic\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t * @param {Object} data.win Spin result winnings info\n\t * @param {Array} data.winLines Spin result win lines\n\t * @param {Object} data.winLines.pickerBonus Picker bonus win info\n\t * @param {Object} data.winLines.pathBonus Path bonus win info\n\t * @param {Object} data.winLines.pathPickerBonus Path picker bonus win info\n\t * @param {Object} data.winLines.multiPickerBonus Multi picker bonus win info\n\t */\n\t_handleWins(data) {\n\t\tlet lines = this._getWinLines(data.gameData.slotGameArray[0]);\n\n\t\tlines.forEach((line) => {\n\t\t\tthis.winDetails.totalWin += line.amount\n\t\t});\n\n\t\tthis.winDetails.winLines = lines;\n\t}\n\n\t_getWinLines(spin) {\n\t\tlet payoutData = spin.payoutData;\n\t\tlet winLines = [];\n\n\t\tfor (let i = 0; i < payoutData.length; i++) {\n\t\t\tif (payoutData[i].className == 'cayetano.games.slots.dto.SlotLineDataDto') {\n\t\t\t\tlet lineIndex = (payoutData[i].lineNum < 0 ? winLines.length : payoutData[i].lineNum);\n\t\t\t\twinLines.push({\n\t\t\t\t\tindex: lineIndex,\n\t\t\t\t\ttype: 1 + lineIndex,\n\t\t\t\t\tamount: payoutData[i].winAmount,\n\t\t\t\t\tstart: payoutData[i].lineStart,\n\t\t\t\t\tlength: payoutData[i].lineSize,\n\t\t\t\t\ttiles: payoutData[i].linePos\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\twinLines.sort(function(a, b) {\n\t\t\treturn a.type - b.type;\n\t\t});\n\n\t\treturn winLines;\n\t}\n\n\t_handleJackpots(data) {\n\t\tlet winDetails = this.winDetails;\n\t\tlet hasJackpotWins = data.jackpots && data.jackpots.win > 0;\n\n\t\tif (hasJackpotWins) {\n\t\t\twinDetails.totalWin += data.jackpots.win;\n\t\t\t_.each(data.jackpots.pots, function (pot) {\n\t\t\t\tif (pot.win > 0) {\n\t\t\t\t\twinDetails.jackpotWins.push({ type: pot.id, amount: pot.win });\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n}\n\nmodule.exports = CaySlotParserLegacy;","const CaySlotParser = require('../CaySlotParser');\n\n/**\n * AgesOfFortuneSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParser}\n */\nclass AgesOfFortuneSlotParser extends CaySlotParser {\n\n\tconstructor(){\n\t\tsuper();\n        this.nonBonusDtoNames.push(\"CumulativeSymbolPayout\");\n        this.nonBonusDtoNames.push(\"SlotPrizeBonus\");\n\t}\n\n    _getPayoutDataBonuses(gameDto, runScreenBonuses = true) {\n\t\tlet bonuses = [];\n\t\tlet spin = gameDto;\n\t\tif (spin.payoutData != undefined) {\n\t\t\tfor (const [key, value] of Object.entries(spin.payoutData)) {\n\t\t\t\tif (value[value.length - 1].winAmount > 0 && this.nonBonusDtoNames.indexOf(key.toString()) == -1) {\n\t\t\t\t\tbonuses.push({\n\t\t\t\t\t\ttype: \"bonus\",\n\t\t\t\t\t\tamount: value[value.length - 1].winAmount\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (spin.payoutData != undefined && \n\t\t\tspin.payoutData.SlotRespinWrapper != undefined &&\n\t\t\tspin.payoutData.SlotRespinWrapper[0].respin != undefined &&\n\t\t\tspin.payoutData.SlotRespinWrapper[0].respin.stakeMultiplier != undefined &&\n            spin.payoutData.SlotRespinWrapper[0].respin.stakeMultiplier > 1) {\n\t\t\t\tspin = spin.payoutData.SlotRespinWrapper[0].respin;\n\t\t\t}\n\n\t\tif (spin.stakeMultiplier > 1) {\n\t\t\tbonuses.push({\n\t\t\t\ttype: 'multiplier',\n\t\t\t\tamount: gameDto.currentSpinWinAmount - (gameDto.currentSpinWinAmount / spin.stakeMultiplier)\n\t\t\t});\n\t\t}\n        else if (spin.payoutData.SlotPrizeBonus != undefined) {\n            bonuses.push({\n                type: 'multiplier',\n\t\t\t\tamount: spin.payoutData.SlotPrizeBonus[0].winAmount\n\t\t\t});\n        }\n\n\t\treturn bonuses;\n\t}\n\n    _handleFreeSpins(data) {\n\t\tlet fspins = data.gameData.slotGameArray.filter((spin) => { console.log(spin); return spin.currentSpin > 0 && spin.isRespin === false });\n\n\t\tfspins = fspins.map(this._handleSingleFreeSpin.bind(this));\n\t\tthis.winDetails.freeSpins = fspins;\n\t}\n}\n\nmodule.exports = AgesOfFortuneSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * AladinsLampParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass AladinsLampParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n\n\t_initReels(data) {\n\t\tvar reels = super._initReels(data);\n\n\t\tfor (let reel = 0; reel < reels.length; reel++) {\n\t\t\tfor (let tile = 0; tile < reels[reel].length; tile++) {\n\t\t\t\tif (reels[reel][tile] <= 3) {\n\t\t\t\t\treels[reel][tile] = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn reels;\n\t}\n\n\t_handleStickyData(data) {\n\t\t// do nothing\n\t\t// in other games, this method replaces no winning wilds with the symbols from styicky data\n\t}\n}\n\nmodule.exports = AladinsLampParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n\n/**\n * AliBabasTreasureParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass AliBabasTreasureParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t}\n\n\t_handleStickyData(data) {\n\t\t// do nothing\n\t\t// in other games, this method replaces no winning wilds with the symbols from styicky data\n\t}\n}\n\n\nmodule.exports = AliBabasTreasureParser;","const CaySlotParser = require('../CaySlotParser');\nconst Format = require('../../../../utils/Format');\n/**\n * ArcticFishingParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParser}\n */\nclass ArcticFishingParser extends CaySlotParser {\n\n\tconstructor() {\n\t\tsuper();\n\t}\n\n\tparse(gameId, data) {\n\t\tthis.balanceAtStart = null;\n\t\tthis.freebetAtStart = null;\n\n\t\tif (data.responses && Array.isArray(data.responses)) {\n\t\t\tif (data.responses[0].user.balance.session) {\n\t\t\t\tdata.responses[0].user.balance.cash = data.responses[0].user.balance.session;\n\t\t\t}\n\t\t\tthis.balanceAtStart = parseFloat(data.responses[0].user.balance.cash.atStart);\n\t\t\tthis.freebetAtStart = parseFloat(data.responses[0].user.balance.freeBets.atStart);\n\t\t\tdata.responses.forEach((response, responseIndex) => {\n\t\t\t\tif (Array.isArray(response.game.gameData)) {\n\t\t\t\t\tresponse.game.gameData = { slotGameArray: response.game.gameData };\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (response.game.gameData && !Array.isArray(response.game.gameData.slotGameArray)) {\n\t\t\t\t\tdata.responses[responseIndex].game.gameData.slotGameArray = [response.game.gameData.slotGameArray];\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tthis.data = data;\n\t\tthis.gameId = gameId;\n\n\t\tif (!this.data.responses || !this.data.responses.length) {\n\t\t\tthis.responses = [this.data];\n\t\t} else {\n\t\t\tthis.responses = this.data.responses;\n\t\t}\n\n\t\tthis.transactions = this.data.transactions;\n\n\t\tlet multiResponseFormat = !!this.data.responses && this.data.responses.length; //Check for multiple responses format\n\t\tif (multiResponseFormat) { //We are using multi-response format\n\t\t\tthis.data = this.data.responses[0]; //Use the main spin response for now\n\t\t\tthis.data.transactions = data.transactions;\n\t\t}\n\n\t\tthis._splitScreen(data);\n\t\tFormat.convertMoneyToNumber(this.data);\n\n\t\t// parse the new screen to integers\n\n\t\tif (this._handleMaxPayout(this.data)) {\n\t\t\tthis.winDetails.totalWin = data.responses[data.responses.length - 1].game.win.total;\n\t\t\treturn this._generateOutput();\n\t\t}\n\n\t\tif (this.data.game.reelsBuffer) this._initReels(this.data.game);\n\n\t\t// game specific parsers can apply before parse operations here\n\t\tif (typeof this._beforeParseOperations === 'function') {\n\t\t\tthis._beforeParseOperations(this.data);\n\t\t}\n\n\t\t// apply all the feature handlers\n\t\tthis._initReels(this.data.game);\n\t\tthis._handleFeatures(this.data.game);\n\t\tthis._handleWins(this.data.game);\n\n\t\t// game specific parsers can apply after parse operations here\n\t\tif (typeof this._afterParseOperations === 'function') {\n\t\t\tthis._afterParseOperations(this.data);\n\t\t}\n\n\t\tthis._handleJackpots(this.data);\n\n\t\tif (data.responses.length > 1) { //Parse each additional response separatedly.\n\t\t\tconst remainingResponses = data.responses.slice(1);\n\n\t\t\tremainingResponses.forEach((res) => {\n\t\t\t\tthis._splitScreen(res);\n\t\t\t\tthis._handleAdditionalResponse(res)\n\t\t\t});\n\t\t}\n\n\t\tthis.winDetails.totalWin = data.responses[data.responses.length - 1].game.win.total;\n\n\t\treturn this._generateOutput();\n\t}\n}\n\nmodule.exports = ArcticFishingParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * AsianRichesParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass AsianRichesParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n\n\t/**\n\t * Initializes the reels array with the current spin data object\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t */\n\t_initReels(data) {\n\t\tlet reelsBuffer = data.gameData.slotGameArray[0].screen;\n\t\tlet offset = Math.floor(reelsBuffer[0][0] / 100) * 100;\n\n\t\tdata.reels = [];\n\n\t\tlet i = 0;\n\n\t\tfor (let tile = 0; tile < 3; tile++) {\n\t\t\tfor (let reel = 0; reel < 5; reel++) {\n\t\t\t\tif (!data.reels[reel]) data.reels.push([]);\n\t\t\t\tdata.reels[reel].push(reelsBuffer[i++][0] - offset);\n\t\t\t}\n\t\t}\n\n\t\treturn data.reels;\n\t}\n\n\t_handleNudges(data) {\n\t\tlet respins = data.gameData.slotGameArray;\n\t\tthis.winDetails.nudges = [];\n\n\t\tvar respinIndex = 0;\n\t\tvar totalBonusesWin = 0;\n\n\t\trespins.forEach((respin) => {\n\t\t\trespin.respinIndex = respinIndex++;\n\t\t\tlet currRespin = this._handleSingleRespin(respin);\n\t\t\tthis.winDetails.nudges.push(currRespin);\n\t\t\tlet len = this.winDetails.nudges.length;\n\t\t\tlet bonusesWin = 0;\n\t\t\tcurrRespin.otherWins.forEach((bonus) => {\n\t\t\t\tbonusesWin += bonus.amount;\n\t\t\t});\n\t\t\ttotalBonusesWin += bonusesWin;\n\t\t\tcurrRespin.amount -= bonusesWin;\n/*\t\t\tif (len > 1) {\n\t\t\t\tthis.winDetails.respins[len - 2].amount -= currRespin.amount;\n\t\t\t}*/\n\t\t});\n\n\t\tthis.winDetails.nudges.forEach((respin) => {\n\t\t\tthis.winDetails.totalWin += respin.amount;\n\t\t});\n\t\tthis.winDetails.totalWin += totalBonusesWin;\n\t}\n}\n\n\nmodule.exports = AsianRichesParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n\n/**\n * BallOfShameSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass BallOfShameSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t}\n\n\t_handleStickyData(data) {\n\t\t// do nothing\n\t\t// in other games, this method replaces no winning wilds with the symbols from styicky data\n\t}\n}\n\n\nmodule.exports = BallOfShameSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * BarbarianTreasuresParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass BarbarianTreasuresParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\tthis.bonusDtos[\"cayetano.games.slots.barbariantreasures.dto.BarbarianTreasuresMiniScattersDto\"] = \"bonus\";\n\t\tthis.bonusDtos[\"cayetano.games.slots.barbariantreasures.dto.BarbarianTreasuresBonus1Dto\"] = \"bonus\";\n\t}\n\n\t_handleSingleFreeSpin(spin) {\n\t\tthis.winDetails.totalWin += spin.winAmount;\n\t\tvar pdatabonuses = this._getPayoutDataBonuses(spin);\n\t\tvar spinToUse = spin;\n\t\tspin.payoutData.forEach((pData) => {\n\t\t\tif (pData.className == 'cayetano.games.slots.dto.bonuses.SlotStackedWildBonusDataDto') {\n\t\t\t\tspinToUse = pData.bonusSpin;\n\t\t\t\tspinToUse.spinNum = spin.spinNum;\n\t\t\t}\n\t\t});\n\t\treturn {\n\t\t\ttype: spinToUse.spinNum,\n\t\t\tamount: spinToUse.winAmount,\n\t\t\twinLines: this._getWinLines(spinToUse),\n\t\t\totherWins: pdatabonuses.concat(this._getPayoutDataBonuses(spinToUse))\n\t\t};\n\t}\n\n\t_initReels(data) {\n\t\tlet modifiedReels = super._initReels(data);\n\n\t\tlet smallScatterPositionsByReel, smallScatterTypesByReel;\n\t\t\n\t\tdata.gameData.slotGameArray[0].payoutData.forEach(data => {\n\t\t\tif (data.className == \"cayetano.games.slots.barbariantreasures.dto.BarbarianTreasuresMiniScattersDto\") {\n\t\t\t\tsmallScatterPositionsByReel = data.scatterPositions;\n\t\t\t\tsmallScatterTypesByReel = data.scatterTypes;\n\t\t\t}\n\t\t});\n\n\t\tif (smallScatterPositionsByReel != null) replaceSymbols(modifiedReels, smallScatterPositionsByReel, smallScatterTypesByReel);\n\n\t\treturn modifiedReels;\n\t}\n}\n\nfunction replaceSymbols(modifiedReels, smallScatterPositionsByReel, smallScatterTypesByReel) {\n\tlet symbolsMargin = 100;\n\tfor (let reel = 0; reel < modifiedReels.length; reel++) {\n\t\tfor (let row = 0; row < modifiedReels[0].length; row++) {\n\t\t\tlet scatterRow = smallScatterPositionsByReel[reel];\n\t\t\tif (scatterRow == row) {\n\t\t\t\tlet scatterType = smallScatterTypesByReel[reel];\n\t\t\t\tif (scatterType == -1) scatterType = 11;\n\t\t\t\tlet currentId = modifiedReels[reel][row];\n\t\t\t\tlet newId = currentId * symbolsMargin + scatterType;\n\t\t\t\tmodifiedReels[reel][scatterRow] = newId;\n\t\t\t}\n\t\t}\n\t}\n}\n\nmodule.exports = BarbarianTreasuresParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * BeautysBeastSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass BeautysBeastSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = BeautysBeastSlotParser;","const CaySlotParser = require('../CaySlotParser');\n\n/**\n * BetfairsWildArcadeSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParser}\n */\nclass BetfairsWildArcadeSlotParser extends CaySlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\t}\n\n\t_handleWins(data) {\n\t\tif (data.gameData.slotGameArray[0].payoutData.BetfairsWildArcadePachinkoBonusDataDto != null ||\n\t\t\tdata.gameData.slotGameArray[0].payoutData.BetfairsWildArcadeClawMachineBonusDataDto != null ||\n\t\t\tdata.gameData.slotGameArray[0].payoutData.BetfairsWildArcadeCoinPusherBonusDataDto != null ) return;\n\t\tlet lines = this._getWinLines(data.gameData.slotGameArray[0]);\n\n\t\tlines.forEach((line) => {\n\t\t\tthis.winDetails.totalWin += line.amount\n\t\t});\n\n\t\tthis.winDetails.winLines = lines;\n\t}\n}\n\nmodule.exports = BetfairsWildArcadeSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * BianconeriWildsParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass BianconeriWildsParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.juventus.dto.JuventusBonus3Dto\"] = this._handleStickyWilds;\n\t}\n\n\t_handleStackedWilds(data) {\n\t\tlet payoutData = data.gameData.slotGameArray[0].payoutData;\n\t\tpayoutData = payoutData.filter((pdata) => {\n\t\t\tif (pdata.className == 'cayetano.games.slots.juventus.dto.JuventusBonus3Dto') return true;\n\t\t\tif (pdata.className == 'cayetano.games.slots.dto.bonuses.SlotStackedWildBonusDataDto') return true;\n\t\t\treturn false;\n\t\t});\n\t\tif (payoutData.length == 0) return;\n\t\tlet respin = payoutData[0].bonusSpin;\n\t\tlet newGameData = {gameData: {slotGameArray: [respin]}};\n\n\t\tthis.data.game.reels = this._initReels(newGameData);\n\t\tthis.winDetails.winLines = this._getWinLines(respin);\n\t\tthis._handleWins(newGameData);\n\t}\n}\n\n\nmodule.exports = BianconeriWildsParser;","const CaySlotParser = require('../CaySlotParser');\nconst Format = require('../../../../utils/Format');\n\n/**\n * BigRacingSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParser}\n */\nclass BigRacingSlotParser extends CaySlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\t\tthis.nonBonusDtoNames.push(\"CumulativeSymbolPayout\");\n\t}\n\n\t_initReels(data) {\n\t\tlet reelsBuffer = data.gameData.slotGameArray[data.gameData.slotGameArray.length - 1].screen;\n\t\tlet payoutData = data.gameData.slotGameArray[data.gameData.slotGameArray.length - 1].payoutData;\n\t\tlet reels = [];\n\n\t\tfor (let i = 0; i < reelsBuffer.length; i++) {\n\t\t\treels[i] = reelsBuffer[i].map((symbol, row) => this._mapSymbol(i, row, symbol, payoutData));\n\t\t}\n\t\tdata.reels = reels;\n\t\tthis.finalScreen = reels;\n\t\treturn reels;\n\t}\n\n\t_mapSymbol(reel, row, symbolId, data) {\n\t\tlet wildIds = [\"h\", \"i\", \"j\", \"k\", \"l\"];\n\t\tlet horseIds = [3, 4, 5, 6, 7];\n\t\tif(data.BigRacingHorseBeforeWildDto != null) {\n\t\t\tvar position = row * 5 + reel;\n\t\t\tif(data.BigRacingHorseBeforeWildDto[0].horseBeforeWildPosition.indexOf(position) != -1) {\n\t\t\t\tlet horseId = data.BigRacingHorseBeforeWildDto[0].horseBeforeWild[data.BigRacingHorseBeforeWildDto[0].horseBeforeWildPosition.indexOf(position)];\n\t\t\t\tsymbolId = wildIds[horseIds.indexOf(horseId)];\n\t\t\t}\t\n\t\t}\n\t\treturn symbolId;\n\t}\n\n\t_handleAdditionalResponse(response){\n\t\tif (!Array.isArray(response.game.gameData.slotGameArray)) {\n\t\t\tresponse.game.gameData.slotGameArray = [response.game.gameData.slotGameArray];\n\t\t}\n\n\t\tFormat.convertMoneyToNumber(response);\n\n\t\tif (typeof this._beforeParseOperations === 'function') {\n\t\t\tthis._beforeParseOperations(response);\n\t\t}\n\t\tthis._initReels(response.game);\n\t\tthis._handleFeatures(response.game);\n\t\t\n\t\tif (response.game.gameData.slotGameArray[0].payoutData.BigRacingRaceResultDto == null || response.game.gameData.slotGameArray[0].payoutData.BigRacingRaceResultDto.length == 0) {\n\t\t\tthis._handleWins(response.game);\n\t\t}\n\n\t\t//We should use the user data of the latest response as it is the most up-to-date\n\t\tif(response.user && response.user.balance) this.data.user = response.user;\n\n\t\tif (this.balanceAtStart != null) {\n\t\t\tthis.data.user.balance.cash.atStart = this.balanceAtStart;\n\t\t}\n\n\t\tif (this.freebetAtStart != null) {\n\t\t\tthis.data.user.balance.freeBets.atStart = this.freebetAtStart;\n\t\t}\n\n\t\tif (typeof this._afterParseOperations === 'function') {\n\t\t\tthis._afterParseOperations(response);\n\t\t}\n\t}\n\t\n}\n\nmodule.exports = BigRacingSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * BombTheJackpotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass BombTheJackpotParser extends CaySlotParserLegacy {\n\tconstructor(){\n\t\tsuper();\n\t}\n}\n\nmodule.exports = BombTheJackpotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * BuffaloRespinSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass BuffaloRespinSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t\t\n\t\tthis.bonusDtos[\"cayetano.games.slots.buffalorespin.dto.BuffaloRespinBonus2Dto\"] = this._handleWildRespins;\n\t\tthis.fsWildRespins = [];\n\t}\n\n\t_handleRespins(data) {}\n\n\t_handleWildRespins(bonusDto, inFreeSpins) {\n\t\tif (this.winDetails.respins == undefined) {\n\t\t\tthis.winDetails.respins = [];\n\t\t}\n\n\t\tvar substractRespinIndex = 0;\n\t\tbonusDto.spins.forEach((respin, i) => {\n\t\t\trespin.respinIndex = i - substractRespinIndex;\n\t\t\trespin = this._handleSingleRespin(respin);\n\t\t\tif (!respin.amount) {\n\t\t\t\tsubstractRespinIndex++;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (inFreeSpins) {\n\t\t\t\tthis.fsWildRespins.push(respin);\n\t\t\t}\n\t\t\telse if (!inFreeSpins) {\n\t\t\t\tthis.winDetails.respins.push(respin);\n\t\t\t}\n\t\t\tif(!inFreeSpins) this.winDetails.totalWin += respin.amount;\n\t\t});\n\t}\n\n\t_getPayoutDataBonuses(gameDto, runScreenBonuses = true) {\n\t\tlet payoutData = gameDto.payoutData;\n\t\tlet bonuses = [];\n\n\t\tfor (let i = 0; i < payoutData.length; i++) {\n\t\t\tif (this.bonusDtos[payoutData[i].className]) {\n\t\t\t\tif (typeof this.bonusDtos[payoutData[i].className] == 'string') {\n\t\t\t\t\tif (payoutData[i].winAmount > 0) {\n\t\t\t\t\t\tbonuses.push({\n\t\t\t\t\t\t\ttype: this.bonusDtos[payoutData[i].className],\n\t\t\t\t\t\t\tamount: (gameDto.spinNum > 0 ? 0 :  payoutData[i].winAmount)\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else if (typeof this.bonusDtos[payoutData[i].className] == 'function' && runScreenBonuses) {\n\t\t\t\t\tthis.bonusDtos[payoutData[i].className].call(this, payoutData[i], gameDto.spinNum > 0);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (gameDto.stakeMultiplier > 1) {\n\t\t\tbonuses.push({\n\t\t\t\ttype: 'multiplier',\n\t\t\t\tamount: gameDto.winAmount - (gameDto.winAmount / gameDto.stakeMultiplier)\n\t\t\t});\n\t\t}\n\n\t\treturn bonuses;\n\t}\n\n\t_handleSingleFreeSpin(spin) {\n\t\tthis.winDetails.totalWin += spin.winAmount;\n\t\tthis.fsWildRespins = [];\n\t\tthis._getPayoutDataBonuses(spin); // fsWildRespins calculated here\n\t\treturn {\n\t\t\ttype: spin.spinNum,\n\t\t\tamount: spin.winAmount,\n\t\t\twinLines: this._getWinLines(spin),\n\t\t\trespins: this.fsWildRespins\n\t\t}\n\t}\n\n\t_handleNudges(data) {}\n}\n\n\nmodule.exports = BuffaloRespinSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * BullfightSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass BullfightSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = BullfightSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * CastlePillagerSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass CastlePillagerSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = CastlePillagerSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * CaveMegaBlastSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass CaveMegaBlastSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = CaveMegaBlastSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * ClassyVegasParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass ClassyVegasParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n\n\t_initReels(data) {\n\t\tvar reels = super._initReels(data);\n\n\t\tvar result = [[],[],[],[],[]];\n\n\t\tvar reel = 0;\n\t\tvar tile = 0;\n\t\tvar symb = null;\n\n\t\twhile(reels.length > 0) {\n\t\t\tsymb = reels.shift()[0];\n\t\t\tif (symb == 99) {\n\t\t\t\tif (reel > 4) reel = 0;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tresult[reel].push(symb);\n\t\t\tif (++reel > 4) reel = 0;\n\t\t}\n\n\t\tdata.reels = result;\n\n\t\treturn result;\n\t}\n\n\t_handleNudges(data) {\n\t\tvar initialRespin = data.gameData.slotGameArray[0];\n\t\tvar respins = this._extractRespins(initialRespin);\n\n\t\tif (!this.winDetails.respins) this.winDetails.respins = [];\n\n\t\trespins.forEach((respin, index) => {\n\t\t\trespin.respinIndex = index;\n\t\t\tthis._extractContactDto(respin);\n\t\t});\n\n\t\tthis.winDetails.totalWin += initialRespin.winAmount;\n\t}\n\n\t_extractContactDto(slotGameDto) {\n\t\tvar contactDto = null;\n\n\t\tslotGameDto.payoutData.forEach((data) => {\n\t\t\tif (data.className == \"cayetano.games.slots.dto.SlotContactDataDto\") {\n\t\t\t\tcontactDto = data;\n\t\t\t}\n\t\t});\n\n\t\tif (!contactDto) return;\n\n\t\tif (!this.winDetails.respins) {\n\t\t\tthis.winDetails.respins = [];\n\t\t}\n\n\t\tvar respin = this._handleSingleRespin(slotGameDto);\n\t\trespin.amount = contactDto.winAmount;\n\n\t\trespin.otherWins = respin.otherWins.map((win) => {\n\t\t\tif (win.type != \"multiplier\") {\n\t\t\t\treturn win;\n\t\t\t}\n\t\t\twin.amount = (contactDto.winAmount * slotGameDto.stakeMultiplier) - contactDto.winAmount;\n\t\t\treturn win;\n\t\t});\n\n\t\tthis.winDetails.respins.push(respin);\n\t}\n\n\t_extractRespins(respin) {\n\t\tvar result = [];\n\n\t\trespin.payoutData.forEach((data) => {\n\t\t\tif (data.className == \"cayetano.games.slots.dto.SlotGameDto\") {\n\t\t\t\tresult = result.concat(this._extractRespins(data));\n\t\t\t}\n\t\t});\n\n\t\tresult.unshift(respin);\n\n\t\treturn result;\n\t}\n}\n\n\nmodule.exports = ClassyVegasParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * CloningSheepSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass CloningSheepSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n\n\t/**\n\t * Initializes the reels array with the current spin data object\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t */\n\t _generateOutput() {\n\t\tvar output = super._generateOutput();\n\t\tvar lastSpin = this._extractLastSpin(this.data.game.gameData.slotGameArray[this.data.game.gameData.slotGameArray.length - 1]);\n\t\toutput.reels = this._initReels(lastSpin);\n\t\t \n\t\treturn output;\n\t}\n\n\t_extractLastSpin(data) {\n\t\tif(data.payoutData === undefined) return data;\n\t\tlet lastSpin = data;\n\t\tdata.payoutData.forEach((pd) =>{\n\t\t\tif(pd.respin != undefined) {\n\t\t\t\tlastSpin = pd.respin;\n\t\t\t}\n\t\t});\n\t\treturn lastSpin;\n\t}\n\n\t_initReels(data) {\n\t\tlet reelsBuffer = data.gameData === undefined ? data.screen : data.gameData.slotGameArray[0].screen;\n\t\tlet reels = [];\n\n\t\tlet offset = Math.floor(reelsBuffer[0][0] / 100) * 100;\n\n\t\tfor (let i = 0; i < reelsBuffer.length; i++) {\n\t\t\treels[i] = reelsBuffer[i].map((symbol, row) => this._mapSymbol(i, row, symbol - offset));\n\t\t}\n\t\tdata.reels = reels;\n\t\treturn reels;\n\t}\n\n\t_handleRespins(data) {\n\t\tif (data.gameData.slotGameArray.length > 1) return;\n\n\t\tthis.winDetails.respins = [];\n\t\tif(data.gameData.slotGameArray[0].payoutData != null) {\n\t\t\tfor (let i = 0; i < data.gameData.slotGameArray[0].payoutData.length; i++) {\n\t\t\t\tif (data.gameData.slotGameArray[0].payoutData[i].respin != null) {\n\t\t\t\t\tlet respin = data.gameData.slotGameArray[0].payoutData[i].respin;\n\t\t\t\t\t\n\t\t\t\t\trespin.respinIndex = i - 1;\n\t\t\t\t\trespin = this._handleSingleRespin(respin);\n\t\t\n\t\t\t\t\tthis.winDetails.respins.push(respin);\n\t\t\t\t\tlet len = this.winDetails.respins.length;\n\t\t\t\t\tlet bonusesWin = 0;\n\t\t\t\t\trespin.otherWins.forEach((bonus) => {\n\t\t\t\t\t\tbonusesWin += bonus.amount;\n\t\t\t\t\t});\n\t\t\t\t\trespin.amount -= bonusesWin;\n\t\t\t\t\tif (len > 1) {\n\t\t\t\t\t\tthis.winDetails.respins[len - 2].amount -= respin.amount;\n\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar totalRespinsWinAmount = 0;\n\t\t\tthis.winDetails.respins.forEach((respin) => {\n\t\t\t\ttotalRespinsWinAmount += respin.amount;\n\t\t\t});\n\t\n\t\t\tif (totalRespinsWinAmount > 0) {\n\t\t\t\tthis.winDetails.totalWin += totalRespinsWinAmount;\n\t\t\t} else {\n\t\t\t\tthis.winDetails.respins = [];\n\t\t\t}\n\t\t}\n\t}\n}\n\n\nmodule.exports = CloningSheepSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * CrazySuper7sSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass CrazySuper7sSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = CrazySuper7sSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * GemBlastParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass CrusadeSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\t}\n\n\t_handleFeatures(data) {\n\t\tvar fsDto = data.gameData.slotGameArray[0].payoutData.filter((pdata) => {\n\t\t\treturn pdata.className == \"cayetano.games.slots.dto.bonuses.SlotFreeSpinBonusDataDto\";\n\t\t});\n\t\tif (fsDto.length > 0) {\n\t\t\tif (fsDto[0].bonusGameId == 5) {\n\t\t\t\tthis.fsAsRespins = true;\n\t\t\t}\n\t\t}\n\t\treturn super._handleFeatures(data);\n\t}\n\n\t_handleFreeSpins(data) {\n\t\tlet fspins = data.gameData.slotGameArray.filter((spin) => { return spin.spinNum > 0 });\n\n\t\tfspins = fspins.map(this._handleSingleFreeSpin.bind(this));\n\t\tif (this.fsAsRespins) {\n\t\t\tthis.winDetails.respins = fspins;\n\t\t} else {\n\t\t\tthis.winDetails.freeSpins = fspins;\n\t\t}\n\t}\n}\n\n\nmodule.exports = CrusadeSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * DarkJungleParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass DarkJungleParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\t}\n\n\t_initReels(data) {\n\t\tvar screen = super._initReels(data);\n\n\t\tfor (var i = 0; i < screen.length; i++) {\n\t\t\tfor (var j = 0; j < screen[i].length; j++) {\n\t\t\t\tif (screen[i][j] == 1) continue;\n\t\t\t\tif (screen[i][j] == 2) {\n\t\t\t\t\tscreen[i][j] = 13;\n\t\t\t\t} else {\n\t\t\t\t\tscreen[i][j]--;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn screen;\n\t}\n\n\t_getWinLines(spin) {\n\t\tlet respinLines = super._getWinLines(spin);\n\t\tvar multiplier = 1;\n\t\tspin.payoutData.forEach((data, index) => {\n\t\t\t\t\t\tif (data.className != \"cayetano.games.slots.darkjungle.dto.DarkJungleRespinWrapperDto\") return;\n\t\t\t\t\t\trespinLines = super._getWinLines(data.respin);\n\t\t\t\t\t\tmultiplier = index;\n\t\t\t\t\t});\n\t\treturn respinLines.map((line) => { \n\t\t\tline.amount *= multiplier; \n\t\t\treturn line; \n\t\t});\n\t}\n}\n\n\nmodule.exports = DarkJungleParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * DetectiveWilderParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass DetectiveWilderParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t\tthis.bonusDtos[\"cayetano.games.slots.detectivewilder.dto.DetectiveWilderBonus2Dto\"] = this._handleWildRespins;\n\t}\n\n\t_handleWildRespins(bonusDto) {\n\t\tif (!this.winDetails.respins) {\n\t\t\tthis.winDetails.respins = [];\n\t\t}\n\t\tvar substractRespinIndex = 0;\n\t\tbonusDto.bonusSpins.forEach((respin, i) => {\n\t\t\trespin.respinIndex = i - substractRespinIndex;\n\t\t\trespin = this._handleSingleRespin(respin);\n\t\t\tif (!respin.amount) {\n\t\t\t\tsubstractRespinIndex++;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.winDetails.respins.push(respin);\n\t\t\tthis.winDetails.totalWin += respin.amount;\n\t\t});\n\t\tconsole.warn(bonusDto)\n\t}\n}\n\n\nmodule.exports = DetectiveWilderParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * DiamondRushParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass DiamondRushParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n\n\t_handleSingleFreeSpin(spin) {\n\t\tvar bonusSpin = spin.payoutData.find((pdata) => pdata.className == \"cayetano.games.slots.dto.bonuses.SlotStackedSymbolBonusDataDto\");\n\t\tif (bonusSpin) {\n\t\t\tspin.payoutData = bonusSpin.bonusSpin.payoutData;\n\t\t}\n\t\treturn super._handleSingleFreeSpin(spin);\n\t}\n}\n\n\nmodule.exports = DiamondRushParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * DragonsWildSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass DragonsWildSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = DragonsWildSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * EasterMoneyParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass EasterMoneyParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\t\tthis.parseAdditionalResponses = true;\n\t}\n\n\t_handleWins(data) {\n\t\tif (!data.choices || data.choices.selected) return;\n\n\t\tlet lines = this._getWinLines(data.gameData.slotGameArray[0]);\n\n\t\tlines.forEach((line) => {\n\t\t\tthis.winDetails.totalWin += line.amount\n\t\t});\n\n\t\tthis.winDetails.winLines = lines;\n\t}\n}\n\nmodule.exports = EasterMoneyParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * EgyptianWildsSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass EgyptianWildsSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = EgyptianWildsSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * FantasiaParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass FantasiaParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n\n\t/**\n\t * Initializes the reels array with the current spin data object\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t */\n\t_initReels(data) {\n\t\tlet reelsBuffer = data.gameData.slotGameArray[0].screen;\n\t\tlet offset = Math.floor(reelsBuffer[0][0] / 100) * 100;\n\t\tlet screens = [[],[],[],[]];\n\n\t\treelsBuffer.forEach(function(reel, reelIndex) {\n\t\t\tlet idx = 0;\n\t\t\tfor (let i = 0; i < 8; i+=2) {\n\t\t\t\tscreens[idx++].push(reel.slice(i * 3, (i+1)*3));\n\t\t\t}\n\t\t});\n\n\t\tdata.reels = [];\n\t\tfor (let i = 0; i < 5; i++) {\n\t\t\tdata.reels.push(screens[0][i].concat(screens[2][i]).map(function(symbol) {\n\t\t\t\treturn symbol - offset;\n\t\t\t}));\n\t\t}\n\t\tfor (let i = 0; i < 5; i++) {\n\t\t\tdata.reels.push(screens[1][i].concat(screens[3][i]).map(function(symbol) {\n\t\t\t\treturn symbol - offset;\n\t\t\t}));\n\t\t}\n\n\t\treturn data.reels;\n\t}\n}\n\n\nmodule.exports = FantasiaParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * FlirtingTangSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass FlirtingTangSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = FlirtingTangSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * FootyFrenzy2020Parser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass FootyFrenzy2020Parser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.footyfrenzy2020.dto.FootyFrenzy2020Bonus3Dto\"] = this._handleRandomWildsBonus.bind(this);\n\t}\n\n\t_handleStackedWilds(data) {\n\t\tlet payoutData = data.gameData.slotGameArray[0].payoutData;\n\t\tpayoutData = payoutData.filter((pdata) => {\n\t\t\tif (pdata.className == 'cayetano.games.slots.footyfrenzy2020.dto.FootyFrenzy2020Bonus3Dto') return true;\n\t\t\tif (pdata.className == 'cayetano.games.slots.dto.bonuses.SlotStackedWildBonusDataDto') return true;\n\t\t\tif (pdata.className == 'cayetano.games.slots.footyfrenzy2020jackpot.dto.FootyFrenzy2020Bonus3Dto') return true;\n\t\t\treturn false;\n\t\t});\n\t\tif (payoutData.length == 0) return;\n\t\tlet respin = payoutData[0].bonusSpin;\n\t\tlet newGameData = {gameData: {slotGameArray: [respin]}};\n\n\t\tthis.data.game.reels = this._initReels(newGameData);\n\t\tthis.winDetails.winLines = this._getWinLines(respin);\n\t\tthis._handleWins(newGameData);\n\t}\n/*\t_initReels(data) {\n\t\tvar result = super._initReels(data);\n\n\t\tif (this._wilds && Array.isArray(this._wilds)) {\n\t\t\tthis._wilds.forEach((wild) => {\n\t\t\t\tresult[wild.x][wild.y] = 2;\n\t\t\t});\n\t\t}\n\n\t\treturn result;\n\t}*/\n}\n\n\nmodule.exports = FootyFrenzy2020Parser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * FootyFrenzy2022Parser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass FootyFrenzy2022Parser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.footyfrenzy2022.dto.FootyFrenzy2022Bonus3Dto\"] = this._handleRandomWildsBonus.bind(this);\n\t}\n\n\t_handleStackedWilds(data) {\n\t\tlet payoutData = data.gameData.slotGameArray[0].payoutData;\n\t\tpayoutData = payoutData.filter((pdata) => {\n\t\t\tif (pdata.className == 'cayetano.games.slots.footyfrenzy2022.dto.FootyFrenzy2022Bonus3Dto') return true;\n\t\t\tif (pdata.className == 'cayetano.games.slots.dto.bonuses.SlotStackedWildBonusDataDto') return true;\n\t\t\tif (pdata.className == 'cayetano.games.slots.footyfrenzy2022jackpot.dto.FootyFrenzy2022Bonus3Dto') return true;\n\t\t\treturn false;\n\t\t});\n\t\tif (payoutData.length == 0) return;\n\t\tlet respin = payoutData[0].bonusSpin;\n\t\tlet newGameData = {gameData: {slotGameArray: [respin]}};\n\n\t\tthis.data.game.reels = this._initReels(newGameData);\n\t\tthis.winDetails.winLines = this._getWinLines(respin);\n\t\tthis._handleWins(newGameData);\n\t}\n/*\t_initReels(data) {\n\t\tvar result = super._initReels(data);\n\n\t\tif (this._wilds && Array.isArray(this._wilds)) {\n\t\t\tthis._wilds.forEach((wild) => {\n\t\t\t\tresult[wild.x][wild.y] = 2;\n\t\t\t});\n\t\t}\n\n\t\treturn result;\n\t}*/\n}\n\n\nmodule.exports = FootyFrenzy2022Parser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * FootyFrenzyParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass FootyFrenzyParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n\n\t_handleStackedWilds(data) {\n\t\tlet payoutData = data.gameData.slotGameArray[0].payoutData;\n\t\tpayoutData = payoutData.filter((pdata) => {\n\t\t\tif (pdata.className == 'cayetano.games.slots.footyfrenzy.dto.FootyFrenzyBonus3Dto') return true;\n\t\t\tif (pdata.className == 'cayetano.games.slots.dto.bonuses.SlotStackedWildBonusDataDto') return true;\n\t\t\treturn false;\n\t\t});\n\t\tif (payoutData.length == 0) return;\n\t\tlet respin = payoutData[0].bonusSpin;\n\t\tlet newGameData = {gameData: {slotGameArray: [respin]}};\n\n\t\tthis.data.game.reels = this._initReels(newGameData);\n\t\tthis.winDetails.winLines = this._getWinLines(respin);\n\t\tthis._handleWins(newGameData);\n\t}\n}\n\n\nmodule.exports = FootyFrenzyParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * ForestRushParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass ForestRushParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\tthis.bonusDtos[\"cayetano.games.slots.forestrush.dto.ForestRushBonus1Dto\"] = \"bonus\";\n\t}\n\t_generateOutput() {\n\t\tvar output = super._generateOutput();\n\t\tvar lastPayoutData = this.data.game.gameData.slotGameArray[0].payoutData != undefined ? this.data.game.gameData.slotGameArray[0].payoutData[this.data.game.gameData.slotGameArray[0].payoutData.length - 1] : undefined\n\t\tif(lastPayoutData != undefined && lastPayoutData.respin != undefined) {\n\t\t\toutput.reels = this._initReels(lastPayoutData.respin); \n\t\t}\n\t\t\n\t\treturn output;\n\t}\n\t_initReels(data) {\n\t\tlet reelsBuffer = data.gameData === undefined ? data.screen : data.gameData.slotGameArray[0].screen;\n\t\tlet reels = [];\n\n\t\tlet offset = Math.floor(reelsBuffer[0][0] / 100) * 100;\n\n\t\tfor (let i = 0; i < reelsBuffer.length; i++) {\n\t\t\treels[i] = reelsBuffer[i].map((symbol, row) => this._mapSymbol(i, row, symbol - offset));\n\t\t}\n\t\tdata.reels = reels;\n\t\treturn reels;\n\t}\n}\n\n\nmodule.exports = ForestRushParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * FrootShootParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass FrootShootParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t\tthis.bonusDtos[\"cayetano.games.slots.dto.bonuses.SlotPyramidBonusDataDto\"] = \"bonus\";\n\t}\n}\n\nmodule.exports = FrootShootParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * FruitPopsParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass FruitPopsParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n\n\t/**\n\t * Initializes the reels array with the current spin data object\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t */\n\t_initReels(data) {\n\t\tlet reelsBuffer = data.gameData.slotGameArray[0].screen;\n\t\tlet offset = Math.floor(reelsBuffer[0][0] / 100) * 100;\n\n\t\tlet reels = [[],[],[],[],[]];\n\t\tlet c = 0;\n\t\tfor (let reel = 0; reel < 5; reel++) {\n\t\t\tfor (let row = 0; row < 5; row++) {\n\t\t\t\treels[row].push(reelsBuffer[c++][0] - offset);\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn data.reels = reels;\n\t}\n\n\t_flattenNudges(gameDto, index = 0) {\n\t\tlet respins = [];\n\n\t\tif (index == 0) {\n\t\t\tvar data = gameDto;\n\t\t\tdata.respinIndex = index++;\n\t\t\trespins.push(data);\n\t\t}\n\n\t\tgameDto.payoutData.forEach((data) => {\n\t\t\tif (data.className == \"cayetano.games.slots.dto.SlotGameDto\") {\n\t\t\t\tdata.respinIndex = index++;\n\t\t\t\trespins.push(data);\n\t\t\t\trespins = respins.concat(this._flattenNudges(data, index));\n\t\t\t}\n\t\t})\n\n\t\treturn respins;\n\t}\n}\n\n\nmodule.exports = FruitPopsParser;","const Format = require('../../../../utils/Format');\n\nconst CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * FruitStackBigSpinsParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass FruitStackBigSpinsParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.wheelDto = \"cayetano.games.slots.dto.bonuses.SlotWheelOfFortuneBonusDataDto\";\n\t\tdelete this.bonusDtos[this.wheelDto];\n\t\tthis.afterParseOperationsCalled = 0;\n\t}\n\n\t_handleAdditionalResponse(response){\n\t\tif (!Array.isArray(response.game.gameData.slotGameArray)) {\n\t\t\tresponse.game.gameData.slotGameArray = [response.game.gameData.slotGameArray];\n\t\t}\n\n\t\tFormat.convertMoneyToNumber(response);\n\n\t\tif (typeof this._beforeParseOperations === 'function') {\n\t\t\tthis._beforeParseOperations(response);\n\t\t}\n\n\t\tthis._handleFeatures(response.game);\n\n\t\tif(response.user && response.user.balance) this.data.user = response.user;\n\n\t\tif (this.balanceAtStart != null) {\n\t\t\tthis.data.user.balance.cash.atStart = this.balanceAtStart;\n\t\t}\n\n\t\tif (this.freebetAtStart != null) {\n\t\t\tthis.data.user.balance.freeBets.atStart = this.freebetAtStart;\n\t\t}\n\n\t\tif (typeof this._afterParseOperations === 'function') {\n\t\t\tthis._afterParseOperations(response);\n\t\t}\n\t}\n\n\t_afterParseOperations(data) {\n\t\tsuper._afterParseOperations(data);\n\t\tif (this.afterParseOperationsCalled++ < this.responses.length - 1) return;\n\n\t\tvar bonusWheel = data.game.gameData.slotGameArray[0].payoutData.filter((data) => {\n\t\t\treturn data.className == this.wheelDto && data.winAmount > 0;\n\t\t});\n\n\t\tif (bonusWheel.length) {\n\t\t\tbonusWheel = bonusWheel[0];\n\n\t\t\t// if not free spins\n\t\t\tif (bonusWheel.wheelValues[0] >= 0) {\n\t\t\t\tthis.winDetails.otherWins.push({\n\t\t\t\t\ttype: 'bonus',\n\t\t\t\t\tamount: bonusWheel.winAmount,\n\t\t\t\t\tdto: bonusWheel.className\n\t\t\t\t});\n\t\t\t\tthis.winDetails.totalWin += bonusWheel.winAmount;\n\t\t\t}\n\t\t}\n\t}\n}\n\nmodule.exports = FruitStackBigSpinsParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * FruitStackDeluxeParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass FruitStackDeluxeParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\t}\n\n\t_handleStackedWilds(data) {\n\t\tvar WILD_SYMBOL = 12;\n\t\tvar offset = null;\n\t\tdata.gameData.slotGameArray.forEach((gameObj) => {\n\t\t\tvar result = gameObj.result; \n\t\t\tif (offset === null) {\n\t\t\t\toffset = Math.floor(gameObj.screen[0][0] / 100) * 100;\n\t\t\t}\n\t\t\tgameObj.payoutData.forEach((pData) => {\n\t\t\t\tif (pData.className != 'cayetano.games.slots.fruitstackdelux.dto.FruitStackDeluxWildSymbolDto' || !pData.replaceReels) return;\n\t\t\t\tpData.replaceReels.forEach((reelToReplace, id) => {\n\t\t\t\t\tdata.reels[reelToReplace].forEach((symbol, index) => {\n\t\t\t\t\t\tif (symbol == pData.replacementSymbol - offset && index <= Math.abs(result[reelToReplace] - pData.toPos[id])) {\n\t\t\t\t\t\t\tdata.reels[reelToReplace][index] = WILD_SYMBOL;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t\tsuper._handleStackedWilds(data);\n\t}\n}\n\n\nmodule.exports = FruitStackDeluxeParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * FruitStackMysteryWinSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass FruitStackMysteryWinSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = FruitStackMysteryWinSlotParser;","const CaySlotParser = require('../CaySlotParser');\n\n/**\n * FruitStackOneSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParser}\n */\nclass FruitStackOneSlotParser extends CaySlotParser {\n\tconstructor(){\n\t\tsuper();\n\t}\n\t_generateOutput() {\n\t\tlet lastSpinId = this.data.game.gameData.slotGameArray.length - 1;\n\n\t\tif (this.data.game.gameData.slotGameArray[lastSpinId].result != undefined) {\n\t\t\tlet resultPosition = this.data.game.gameData.slotGameArray[lastSpinId].result[0];\n\t\t\tlet symbolAbove = this.getAdjustedSymbol(resultPosition - 1, this.data.game.gameData.slotGameArray[lastSpinId].reelsIndex[0]);\n\t\t\tlet symbolBelow = this.getAdjustedSymbol(resultPosition + 1, this.data.game.gameData.slotGameArray[lastSpinId].reelsIndex[0]);\n\t\t\t\n\t\t\tthis.data.game.gameData.slotGameArray[lastSpinId].screen.unshift(symbolAbove);\n\t\t\tthis.data.game.gameData.slotGameArray[lastSpinId].screen.push(symbolBelow);\n\t\t\tthis.finalScreen = [this.data.game.gameData.slotGameArray[lastSpinId].screen.map((symbol, row) => this._mapSymbol(0, row, symbol))];\n\t\t\tthis.finalScreen.unshift([\"0\",\"0\",\"0\"]);\n\t\t\tthis.finalScreen.unshift([\"0\",\"0\",\"0\"]);\n\t\t\tthis.finalScreen.push([\"0\",\"0\",\"0\"]);\n\t\t\tthis.finalScreen.push([\"0\",\"0\",\"0\"]);\n\t\t}\n\t\t\n\t\treturn {\n\t\t\tgameDetails: {\n\t\t\t\tgameId: this.gameId,\n\t\t\t\troundId: this.data.transactions.roundId,\n\t\t\t\tprevRoundId: this.data.transactions.prevRoundId,\n\t\t\t\tnextRoundId: this.data.transactions.nextRoundId,\n\t\t\t\tserverTimeStart: this.data.transactions.startTime,\n\t\t\t\tserverTimeEnd: this.data.transactions.endTime,\n\t\t\t},\n\t\t\ttransactions: {\n\t\t\t\ttotalBet: this.data.game.stake,\n\t\t\t\ttotalWin: this.winDetails.totalWin,\n\t\t\t\tlimitedWin: this.winDetails.limitedWin,\n\t\t\t\tbalance: {\n\t\t\t\t\tcash: this.data.user.balance.cash,\n\t\t\t\t\tfreeBets: this.data.user.balance.freeBets,\n\t\t\t\t\tsessionCash: this.data.user.balance.sessionCash,\n\t\t\t\t\tsessionFreeBets: this.data.user.balance.sessionFreeBets,\n\t\t\t\t\tbonus: this.data.user.balance.bonus\n\t\t\t\t},\n\t\t\t},\n\t\t\tregulations: this.data.regulations,\n\t\t\twinDetails: this.winDetails,\n\t\t\treels:  this.finalScreen,\n\t\t\tpromo: this.data.promo\n\t\t};\n\t}\n\n\tgetAdjustedSymbol(position, reelsIndex) {\n\t\tconst reelsArray = [\n\t\t\t\"5z6z7z8z6z9z8z5z8y1z7z5z7z8z2z9y8z9z2z5z6z4z1z9z6z9z2z5z8z2z9z8z2z9z6z5z2z9z6z9z9z2z7z6z9z4z8z6z9z6z9z6z5z8z7z9z8z9y8z9z4z5z5z2z9z9z8z9z2z5z9z8y9z9z9y8z2z7z8y2z7z7z2z7z7z7z9z7z7z7z9z2z7z7z9z4z8y7z7z6z4z6z7z8z6z4z8z5z7z1z7z5z2y8z7z9z1z5z2z1z8z8z7z9z3z7z2z9y1z2z3z8z4z5z5z3z9z6z7z7z9z3z7z7z5z7z7z1z8y7z5z3z7z8z1z9z5z7z8z5z8z1z7z3z5z1z8z8z7z8z1y8z3z1z7z5z2z1z8z8z7z5z6z5z3z8z4z9z5z4z8z2y9z7z4y5z4z7y1z2z5z2z4z9z4y1z4z5y4z8z7z5z1y4z5z8y4z1z7z8z1z4z4z5y1z6z4z1z4y5z5z1z2z5z1z2y5z5z1z8z2z5y6z1z5z5z8y6z1z5z6z1z6z6z6z1z6z6z2z1z6z2z8z6z6z4z1z6z6z2z4z6z1z6z9z6z1z6z6z2z6z1z9z6z6z8y1z8z6z6z9z1z6z6z9z4z1z9z9z9z\",\n\t\t\t\"5z6z7z8z6z9z8z5z8y1z7z5z7z8z2z9y8z9z2z7z6z8z1z9z6z9z2z5z8z2z9z8z2z9z6z7z2z9z6z9z9z2z7z6z9z4z8z6z9z6z9z6z7z8z7z9z8z9y8z9z9z5z7z2z9z9z8z9z2z7z9z8y9z9z9y8z2z7z8y2z7z7z2z7z7z7z9z7z7z7z9z2z7z7z9z4z8y7z7z6z9z6z7z8z6z7z8z5z7z1z7z5z7y8z7z9z1z5z2z1z8z8z7z9z3z7z2z9y1z2z3z8z2z5z8z9z9z3z7z7z9z3z7z7z8z7z8z1z9y7z8z3z7z8z1z9z8z7z8z8z8z1z7z3z9z1z8z8z7z2z1y8z3z1z7z2z7z1z2z8z7z2z2z5z1z2z4z1z3z7z3z2y1z7z4y5z4z3y1z2z7z7z4z6z4y1z4z5z4z8z7z5z1y4z5z6z4z1z7z8z1z4z4z5y1z6z4z1z4y5z6z1z6z2z1z6y5z6z1z8z6z5z6z1z5z6z8y6z1z6z6z1z6z6z6z1z6z6z8z1z6z8z8z6z6z9z1z6z6z8z9z6z1z6z9z6z1z6z6z9z6z1z9z6z6z8y1z8z6z6z4z1z6z6z9z4z1z9z9z9z\",\n\t\t\t\"5z6z7z8z6z9z8z6z8y6z7z6z7z8z9z9y8z7z2z7z6z8z7z9z3z9z6z7z8y7z9z8z8z5z6z7z4z7z6z7z4z5z7z6z5z9z8z6z9z6y5z6z7z8z6z9z8z6y8z6z7z6z7z8z9z9z8z7y2z7z6z8z7z9z6z9z6z7z8z7z9z8z8z5z6z7y9z7z6z7z9z5z7z6z5z4z8z6z9z6z5z6z7y8z6z9z8z6z8z6z7z6z7z8z9z9z8z7z8z7y6z8z7z9z7z9z6z7z8z7z9z9y8z5z6z7z4z7z6z7z9z5z7z6z5z9z8z6z9y6z5z6z7z8z6z9z8z6z8z6z7z6z7z8y9z9z8z7z2z7z6z8z7z9z9z9z6z7z8z7z9z8z8z5z6z7z4z7z6z7z9z5z7z6z5z9z8z9z9z9z5y9z7z8z9z9z8z9z8z9z7y9z7z8z9z9y8z7z2z7z6y8z7z9z9z9z9z7z8z7z9z8z8z5z9z7y4z9z6z9z4y5z7z6z5z4z8z6z9z6z5z6y7z8z8z9z8z8z8z8z9z8y7z8z9z9z8z9z2z9z8z8y7z9z9z9z8z9z8z7z9z9y8z5z6z9z4z7z6z9z4z5y9z8z5z4z8z8z9z6z\"\n\t\t];\n\n\t\tif (position >= reelsArray[reelsIndex].length) position -= reelsArray[reelsIndex].length;\n\t\telse if (position < 0) position += reelsArray[reelsIndex].length;\n\n\t\treturn reelsArray[reelsIndex][position];\n\t}\n\n\t_splitScreen(data) {}\n\n\t_mapSymbol(reel, row, symbolId, data) {\n\t\tif(symbolId == \"y\") return \"a\";\n\t\telse if(symbolId == \"z\") return \"0\";\n\t\telse return symbolId;\n\t}\n\n\t_initReels(data) {\n\t\treturn [];\n\t}\n}\n\n\nmodule.exports = FruitStackOneSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * FruitStackSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass FruitStackSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = FruitStackSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * FruitStackSuperDoubleWildSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass FruitStackSuperDoubleWildSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = FruitStackSuperDoubleWildSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * FunFairParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass FunFairParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = FunFairParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * GemBlastParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass GemBlastParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t\tthis.finalReels = [];\n\t}\n\n\t/**\n\t * Initializes the reels array with the current spin data object\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t */\n\n\t _generateOutput() {\n\t\tvar output = super._generateOutput();\n\t\tvar lastSpin = this.data.game.gameData.slotGameArray[this.data.game.gameData.slotGameArray.length - 1];\n\t\t\n\t\toutput.reels = this.finalReels;\n\t\t \n\t\treturn output;\n\t}\n\n\t_initReels(data) {\n\t\tlet reelsBuffer = data.gameData === undefined ? data.screen : data.gameData.slotGameArray[0].screen;\n\t\tlet offset = Math.floor(reelsBuffer[0][0] / 100) * 100;\n\n\t\tvar screenSize = 7;\n\t\tlet reels = [];\n\t\tfor (let i = 0; i < screenSize; i++) reels.push([]);\n\n\t\tlet c = 0;\n\t\tfor (let reel = 0; reel < screenSize; reel++) {\n\t\t\tfor (let row = 0; row < screenSize; row++) {\n\t\t\t\treels[row].push(reelsBuffer[c++][0] - offset);\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn data.reels = reels;\n\t}\n\n\t_flattenNudges(gameDto, index = 0) {\n\t\tlet respins = [];\n\n\t\tif (index == 0) {\n\t\t\tvar data = gameDto;\n\t\t\tdata.respinIndex = index++;\n\t\t\trespins.push(data);\n\t\t}\n\n\t\tgameDto.payoutData.forEach((data) => {\n\t\t\tif (data.className == \"cayetano.games.slots.dto.SlotGameDto\") {\n\t\t\t\tthis.finalReels = this._initReels(data);\n\t\t\t\tdata.respinIndex = index++;\n\t\t\t\trespins.push(data);\n\t\t\t\trespins = respins.concat(this._flattenNudges(data, index));\n\t\t\t}\n\t\t})\n\t\t\n\t\treturn respins;\n\t}\n}\n\n\nmodule.exports = GemBlastParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * GiftsOfRaSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass GiftsOfRaSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t\t// this.bonusDtos[\"cayetano.games.slots.manekigold.dto.ManekiGoldWildTransformBonusDto\"] = this._handleManekiWildTransforms.bind(this);\n\t}\n\n\t_initReels(data) {\n\t\tvar reels = super._initReels(data);\n\n\t\tfor (let reel = 0; reel < reels.length; reel++) {\n\t\t\tfor (let tile = 0; tile < reels[reel].length; tile++) {\n\t\t\t\tif (reels[reel][tile] > 4) reels[reel][tile] -= 4;\n\t\t\t}\n\t\t}\n\n\t\tvar specialSymbol = this.determineSpecialSymbol(data.gameData.slotGameArray[0].payoutData);\n\n\t\treels.push([0, specialSymbol, 0]);\n\n\t\treturn reels;\n\t}\n\n\tdetermineSpecialSymbol(data) {\n\t\tvar selectedSymbol = null;\n\t\tvar specialSymbolDto = data.filter((payoutData) => payoutData.className == \"cayetano.games.slots.giftsofra.dto.GiftsOfRaSpecialSymbolDto\");\n\t\tif (specialSymbolDto.length == 0) return null;\n\t\telse selectedSymbol = specialSymbolDto[0].selectedSymbol;\n\n\t\tlet offset = Math.floor(selectedSymbol / 100) * 100;\n\t\tlet symbolsMap = {\"6\":2,\"7\":3,\"8\":4,\"9\":5,\"10\":6,\"11\":7,\"12\":8,\"13\":9,\"14\":10};\n\t\tlet multiplierOffset = 100;\n\t\tlet linkedReelsOffset = 200;\n\t\tlet transformedSymbolOffset = 5;\n\t\tselectedSymbol -= offset;\n\n\t\tswitch(selectedSymbol) {\n\t\t\tcase 1:\n\t\t\t\treturn 1;\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\treturn data.filter((payoutData) => payoutData.className == \"cayetano.games.slots.giftsofra.dto.GiftsOfRaDoublePayBonusDto\")[0].selectedSymbol - offset - 4;\n\t\t\t\tbreak;\n\t\t\tcase 3:\n\t\t\t\treturn data.filter((payoutData) => payoutData.className == \"cayetano.games.slots.giftsofra.dto.GiftsOfRaWinMultiplierBonusDto\")[0].multiplier + multiplierOffset;\n\t\t\t\tbreak;\n\t\t\tcase 4:\n\t\t\t\treturn data.filter((payoutData) => payoutData.className == \"cayetano.games.slots.giftsofra.dto.GiftsOfRaLinkedReelsBonusDto\")[0].linkedReels.length + linkedReelsOffset;\n\t\t\t\tbreak;\n\t\t\tcase 5:\n\t\t\t\treturn data.filter((payoutData) => payoutData.className == \"cayetano.games.slots.giftsofra.dto.GiftsOfRaWildTransformBonusDto\")[0].transformedSymbol - offset + transformedSymbolOffset;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t_afterParseOperations(data) {\n\t\tsuper._afterParseOperations(data);\n\t\tvar wildTransform = data.game.gameData.slotGameArray[0].payoutData.filter((d) => d.className == \"cayetano.games.slots.giftsofra.dto.GiftsOfRaWildTransformBonusDto\");\n\t\tif (wildTransform.length > 0) {\n\t\t\tthis.transformSymbols(wildTransform[0]);\n\t\t}\n\t}\n\n\ttransformSymbols(dto) {\n\t\tvar diff = dto.transformedSymbol - dto.selectedSymbol;\n\t\tdto.wildSticky.stickyPos.forEach((pos, i) => {\n\t\t\tthis.data.game.reels[dto.wildSticky.stickyReels[i]][pos] += diff + 9;\n\t\t});\n\t}\n}\n\n\nmodule.exports = GiftsOfRaSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * GoldenKingdomParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass GoldenKingdomParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\n\t\tthis.bonusDtos = {\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotInstantWinBonusDataDto': 'instantWin',\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotExtendedInstantWinBonusDataDto': 'instantWin',\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotPrizeBonusDataDto': 'bonus',\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotWheelOfFortuneBonusDataDto': 'bonus',\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotPathBonusDataDto': 'bonus',\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotStackedSymbolBonusDataDto': this._handleStackedSymbol,\n\t\t\t'cayetano.games.slots.dto.SlotGambleWinCardPickDataDto': this._handleGamble,\n\t\t\t'cayetano.games.slots.dwarftreasures.dto.DwarfTreasuresBonus1Dto\"': \"bonus\",\n\t\t\t'cayetano.games.slots.dwarftreasures.dto.DwarfTreasuresBonus5Dto': \"bonus\"\n\t\t};\n\t}\n\n\t_hasFreeSpins(data) {\n\t\tvar hasFreeSpins = false;\n\t\tdata.gameData.slotGameArray.filter((fs) => {\n\t\t\tfs.payoutData.forEach((pdata) => {\n\t\t\t\tif (pdata.className == \"cayetano.games.slots.dto.bonuses.SlotFreeSpinBonusDataDto\") {\n\t\t\t\t\tif (pdata.bonusGameId == 2) {\n\t\t\t\t\t\thasFreeSpins = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\treturn hasFreeSpins;\n\t}\n\n\t_hasRespins(data) {\n\t\tvar hasRespins = false;\n\t\tdata.gameData.slotGameArray.filter((fs) => {\n\t\t\tfs.payoutData.forEach((pdata) => {\n\t\t\t\tif (pdata.className == \"cayetano.games.slots.dto.bonuses.SlotFreeSpinBonusDataDto\") {\n\t\t\t\t\tif (pdata.bonusGameId == 3) {\n\t\t\t\t\t\thasRespins = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\treturn hasRespins;\n\t}\n\n\t_getDefaultRespin(data) {\n\t\tlet respin = null;\n\t\tdata.filter((obj) => {\n\t\t\tif (obj.className == \"cayetano.games.slots.dto.bonuses.SlotRespinWrapperDto\") {\n\t\t\t\trespin = obj.respin;\n\t\t\t}\n\t\t\t\n\t\t});\n\t\treturn respin;\n\t}\n\n\t_handleFreeSpins(data) {\n\t\tif (this._hasFreeSpins(data)) super._handleFreeSpins(data);\n\t}\n\n\t_handleRespins(data) {\n\t\tif (data.gameData.slotGameArray.length <= 1) return;\n\n\t\tif (!this._hasRespins(data)) return;\n\n\t\tthis.winDetails.respins = [];\n\n\t\tfor (let i = 0; i < data.gameData.slotGameArray.length; i++) {\n\t\t\tlet respin = data.gameData.slotGameArray[i];\n\t\t\tlet defaultR = this._getDefaultRespin(respin.payoutData);\n\t\t\tif(defaultR != null) {\n\t\t\t\trespin = defaultR;\n\t\t\t}\n\t\t\telse if(i == 0) continue;\n\t\t\trespin.respinIndex = i - 1;\n\t\t\t\n\t\t\trespin = this._handleSingleRespin(respin);\n\t\t\tthis.winDetails.respins.push(respin);\n\t\t\tlet len = this.winDetails.respins.length;\n\t\t\tlet bonusesWin = 0;\n\t\t\trespin.otherWins.forEach((bonus) => {\n\t\t\t\tbonusesWin += bonus.amount;\n\t\t\t});\n\t\t\trespin.amount -= bonusesWin;\n\t\t}\n\n\t\tvar totalRespinsWinAmount = 0;\n\t\tthis.winDetails.respins.forEach((respin) => {\n\t\t\ttotalRespinsWinAmount += respin.amount;\n\t\t});\n\n\t\tif (totalRespinsWinAmount > 0) {\n\t\t\tthis.winDetails.totalWin += totalRespinsWinAmount;\n\t\t}\n\t}\n}\n\n\nmodule.exports = GoldenKingdomParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * GoldenPlanetParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass GoldenPlanetParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\tthis.bonusDtos[\"cayetano.games.slots.goldenplanet.dto.GoldenPlanetCloneDto\"] = \"bonus\";\n\t}\n\n\t_initReels(data) {\n\t\tlet reelsBuffer = data.gameData.slotGameArray[0].screen;\n\t\tlet reels = [];\n\n\t\tlet offset = Math.floor(reelsBuffer[0][0] / 100) * 100;\n\n\t\tfor (var x = 0; x < 5; x++) {\n\t\t\treels.push([]);\n\t\t\tfor (var y = 0; y < 5; y++) {\n\t\t\t\treels[x][y] = reelsBuffer[y * 7 + x] - offset;\n\t\t\t}\n\t\t}\n\n\t\tdata.reels = reels;\n\t\treturn reels;\n\t}\n\n\t_afterParseOperations(data) {\n\t\tvar initialSpin = data.game.gameData.slotGameArray[0];\n\t\tthis._handleGoldenPlanetRespins(initialSpin);\n\t}\n\n\t_handleFreeSpins(data) {\n\t\tlet fspins = data.gameData.slotGameArray.filter((spin) => { return spin.spinNum > 0 });\n\n\t\tfspins = fspins.map(this._handleSingleFreeSpin.bind(this));\n\t\tthis.winDetails.freeSpins = fspins;\n\t}\n\n\t_handleSingleFreeSpin(spin) {\n\t\tthis.winDetails.totalWin += spin.winAmount;\n\t\tvar pdatabonuses = this._getPayoutDataBonuses(spin);\n\t\treturn {\n\t\t\ttype: spin.spinNum,\n\t\t\tamount: spin.winAmount,\n\t\t\twinLines: this._getWinLines(spin),\n\t\t\totherWins: this._getPayoutDataBonuses(spin),\n\t\t\trespins: this._handleGoldenPlanetRespins(spin, true)\n\t\t};\n\t}\n\n\t_handleGoldenPlanetRespins(data, returnResult = false) {\n\t\tif (returnResult) {\n\t\t\treturn this._getGoldenPlanetRespins(data);\n\t\t}\n\t\tdata.payoutData.forEach((pData, i) => {\n\t\t\tif (pData.className == \"cayetano.games.slots.dto.SlotContactDataDto\") {\n\t\t\t\tthis._handleGoldenPlanetContact(pData, returnResult, returnResult ? i + 1 : null);\n\t\t\t}\n\t\t\tif (pData.className == \"cayetano.games.slots.dto.SlotGameDto\") {\n\t\t\t\tthis._handleGoldenPlanetRespins(pData);\n\t\t\t}\n\t\t});\n\t}\n\n\t_getGoldenPlanetRespins(data, respinIndex = 1) {\n\t\tvar result = [];\n\t\tfor (var i = 0; i < data.payoutData.length; i++) {\n\t\t\tif (data.payoutData[i].className == 'cayetano.games.slots.dto.SlotContactDataDto') {\n\t\t\t\tresult.push(this._handleGoldenPlanetContact(data.payoutData[i], true, respinIndex));\n\t\t\t}\n\t\t\tif (data.payoutData[i].className == 'cayetano.games.slots.dto.SlotGameDto') {\n\t\t\t\tresult = result.concat(this._getGoldenPlanetRespins(data.payoutData[i], respinIndex + 1));\n\t\t\t\trespinIndex++;\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\t_handleGoldenPlanetContact(data, returnResult = false, respinNum = null) {\n\t\tif (!this.winDetails.respins) this.winDetails.respins = [];\n\t\tif (respinNum == null) {\n\t\t\trespinNum = this.winDetails.respins.length + 1;\n\t\t}\n\t\tvar respinData = {\n\t\t\tamount: data.winAmount,\n\t\t\twinLines: [],\n\t\t\totherWins: [],\n\t\t\ttype: respinNum\n\t\t};\n\n\t\tif (returnResult) {\n\t\t\treturn respinData;\n\t\t}\n\n\t\tif (!this.winDetails.respins) this.winDetails.respins = [];\n\t\tthis.winDetails.respins.push(respinData);\n\t\tthis.winDetails.totalWin += this.winDetails.respins[this.winDetails.respins.length - 1].amount;\n\t};\n\n\t_flattenNudges(gameDto, index = 0) {\n\t}\n\n\t_handleNudges(data) {\n\t}\n}\n\n\nmodule.exports = GoldenPlanetParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * GemBlastParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass GoldenPotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n\n\t/**\n\t * Initializes the reels array with the current spin data object\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t */\n\n\t _generateOutput() {\n\t\tvar output = super._generateOutput();\n\t\tvar lastSpin = this._extractLastSpin(this.data.game.gameData.slotGameArray[this.data.game.gameData.slotGameArray.length - 1]);\n\t\toutput.reels = this._initReels(lastSpin);\n\t\t \n\t\treturn output;\n\t}\n\n\t_extractLastSpin(data) {\n\t\tif(data.payoutData === undefined) return data;\n\t\tlet lastSpin = data;\n\t\tdata.payoutData.forEach((pd) =>{\n\t\t\tif(pd.respin != undefined) {\n\t\t\t\tlastSpin = pd.respin;\n\t\t\t}\n\t\t});\n\t\treturn lastSpin;\n\t}\n\n\t_initReels(data) {\n\t\tlet reelsBuffer = data.gameData === undefined ? data.screen : data.gameData.slotGameArray[0].screen;\n\t\tlet reels = [];\n\n\t\tlet offset = Math.floor(reelsBuffer[0][0] / 100) * 100;\n\n\t\tfor (let i = 0; i < reelsBuffer.length; i++) {\n\t\t\treels[i] = reelsBuffer[i].map((symbol, row) => this._mapSymbol(i, row, symbol - offset));\n\t\t}\n\t\tdata.reels = reels;\n\t\treturn reels;\n\t}\n\t\n\t_handleRespins(data) {\n\t\tif (data.gameData.slotGameArray.length > 1) return;\n\n\t\tthis.winDetails.respins = [];\n\t\tif(data.gameData.slotGameArray[0].payoutData != null) {\n\t\t\tfor (let i = 0; i < data.gameData.slotGameArray[0].payoutData.length; i++) {\n\t\t\t\tif (data.gameData.slotGameArray[0].payoutData[i].respin != null) {\n\t\t\t\t\tlet respin = data.gameData.slotGameArray[0].payoutData[i].respin;\n\t\t\t\t\t\n\t\t\t\t\trespin.respinIndex = i - 1;\n\t\t\t\t\trespin = this._handleSingleRespin(respin);\n\t\t\n\t\t\t\t\tthis.winDetails.respins.push(respin);\n\t\t\t\t\tlet len = this.winDetails.respins.length;\n\t\t\t\t\tlet bonusesWin = 0;\n\t\t\t\t\trespin.otherWins.forEach((bonus) => {\n\t\t\t\t\t\tbonusesWin += bonus.amount;\n\t\t\t\t\t});\n\t\t\t\t\trespin.amount -= bonusesWin;\n\t\t\t\t\tif (len > 1) {\n\t\t\t\t\t\tthis.winDetails.respins[len - 2].amount -= respin.amount;\n\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar totalRespinsWinAmount = 0;\n\t\t\tthis.winDetails.respins.forEach((respin) => {\n\t\t\t\ttotalRespinsWinAmount += respin.amount;\n\t\t\t});\n\t\n\t\t\tif (totalRespinsWinAmount > 0) {\n\t\t\t\tthis.winDetails.totalWin += totalRespinsWinAmount;\n\t\t\t} else {\n\t\t\t\tthis.winDetails.respins = [];\n\t\t\t}\n\t\t}\n\t}\n}\n\n\nmodule.exports = GoldenPotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * GoldenThunderSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass GoldenThunderSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\t\tconsole.warn('asdf1123');\n\t}\n\n\n\t_getPayoutDataBonuses(gameDto, runScreenBonuses = true) {\n\t\tlet payoutData = gameDto.payoutData;\n\t\tlet linesWinAmount = this._getWinLines(gameDto).reduce((a, b) => a + b.amount, 0);\n\t\tlet bonuses = [];\nconsole.warn(linesWinAmount);\n\t\tfor (let i = 0; i < payoutData.length; i++) {\n\t\t\tif (this.bonusDtos[payoutData[i].className]) {\n\t\t\t\tif (typeof this.bonusDtos[payoutData[i].className] == 'string') {\n\t\t\t\t\tif (payoutData[i].winAmount > 0) {\n\t\t\t\t\t\tbonuses.push({\n\t\t\t\t\t\t\ttype: this.bonusDtos[payoutData[i].className],\n\t\t\t\t\t\t\tamount: payoutData[i].winAmount\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else if (typeof this.bonusDtos[payoutData[i].className] == 'function' && runScreenBonuses) {\n\t\t\t\t\tthis.bonusDtos[payoutData[i].className].call(this, payoutData[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (gameDto.stakeMultiplier > 1 && linesWinAmount > 0) {\n\t\t\tbonuses.push({\n\t\t\t\ttype: 'multiplier',\n\t\t\t\tamount: linesWinAmount * (gameDto.stakeMultiplier - 1)\n\t\t\t});\n\t\t}\n\n\t\treturn bonuses;\n\t}\n}\n\nmodule.exports = GoldenThunderSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * GolderadoParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass GolderadoParser extends CaySlotParserLegacy {\n\tconstructor(){\n\t\tsuper();\n\t}\n\n\t_beforeParseOperations(data) {\n\t\tsuper._beforeParseOperations(data);\n\t\tdata.game.gameData.slotGameArray.slice(1).forEach((elem) => this._handlePayoutDataBonuses(elem));\n\t}\n\n\tsanitizeData(data) {\n\t\tdata = super.sanitizeData(data);\n\n\t\tdata.responses.forEach((response, idx) => {\n\t\t\tif (Array.isArray(response.game.gameData)) {\n\t\t\t\tresponse.game.gameData = {\n\t\t\t\t\tslotGameArray: response.game.gameData\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn data;\n\t}\n}\n\n\nmodule.exports = GolderadoParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * GoldheadsSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass GoldheadsSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\t\tthis.bonusDtos = {\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotInstantWinBonusDataDto': 'instantWin',\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotExtendedInstantWinBonusDataDto': 'instantWin',\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotPrizeBonusDataDto': 'bonus',\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotWheelOfFortuneBonusDataDto': 'bonus',\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotPathBonusDataDto': 'bonus',\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotRespinWrapperDto': 'bonus',\n\t\t\t'cayetano.games.slots.goldheads.logic.dto.GoldheadsRespinWrapperDto': 'bonus',\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotStackedSymbolBonusDataDto': this._handleStackedSymbol,\n\t\t\t'cayetano.games.slots.dto.SlotGambleWinCardPickDataDto': this._handleGamble,\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotFreeSpinBonusDataDto': 'instantWin', // fs instant win \n\t\t\t'cayetano.games.slots.goldheads.logic.dto.GoldheadsSerpentWildInstantWinDto': 'instantWin' // fs instant win \n\t\t};\n\t\t\n\t}\n\n\t_initReels(data) {\n\t\tlet reelsBuffer = data.gameData.slotGameArray[data.gameData.slotGameArray.length-1].screen;\n\t\tlet reels = [];\n\n\t\tlet offset = Math.floor(reelsBuffer[0][0] / 100) * 100;\n\n\t\tfor (let i = 0; i < reelsBuffer.length; i++) {\n\t\t\treels[i] = reelsBuffer[i].map((symbol, row) => this._mapSymbol(i, row, symbol - offset));\n\t\t}\n\t\tdata.reels = reels;\n\n\t\tvar mystery = data.gameData.slotGameArray[0].payoutData.filter(p => p.className == \"cayetano.games.slots.goldheads.logic.dto.GoldheadsMysterySymbolDto\");\n\t\tvar wildType = 0;\n\t\tvar wildSymbol = 2;\n\t\tif (mystery.length > 0) {\n\t\t\twildType = mystery[0].wildType\n\t\t}\n\t\tswitch(wildType) {\n\t\t\tcase 1: wildSymbol += 20; break;\n\t\t\tcase 3: wildSymbol += 30; break;\n\t\t}\n\n\t\treturn data.reels = reels.map(reel => reel.map(symbol => symbol == 2 ? wildSymbol : symbol));\n\t}\n}\n\nmodule.exports = GoldheadsSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * GreatGemsParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass GreatGemsParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = GreatGemsParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * GypsyLuckParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass GypsyLuckParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t\tthis.bonusDtos[\"cayetano.games.slots.gypsyluck.dto.GypsyLuckWinLinesDto\"] = \"bonus\";\n\t}\n\n\tsanitizeData(data) {\n\t\tdata = super.sanitizeData(data);\n\n\t\tdata.responses.forEach((response, idx) => {\n\t\t\tif (Array.isArray(response.game.gameData)) {\n\t\t\t\tresponse.game.gameData = {\n\t\t\t\t\tslotGameArray: response.game.gameData\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn data;\n\t}\n\n\t_initReels(data) {\n\t\tvar reels = super._initReels(data);\n\t\tdata.reels = reels.map(function(reel, index) {\n\t\t\tif (index == 0 || index == 4) {\n\t\t\t\treturn reel.slice(0, 3);\n\t\t\t}\n\t\t\tif (index == 1 || index == 3) {\n\t\t\t\treturn reel.slice(0, 4);\n\t\t\t}\n\t\t\treturn reel;\n\t\t});\n\t\treturn data.reels;\n\t}\n}\n\n\nmodule.exports = GypsyLuckParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * HalloWinSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass HalloWinSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = HalloWinSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * HappyHourParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass HappyHourParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = HappyHourParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * HappyRoosterSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass HappyRoosterSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = HappyRoosterSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * HotSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass HotSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n\n\t_initReels(data) {\n\t\tlet reelsBuffer = data.gameData.slotGameArray[0].screen;\n\t\tlet reels = [];\n\t\tlet offset = Math.floor(reelsBuffer[0][0] / 100) * 100;\n\n\t\tfor (let i = 0; i < reelsBuffer.length; i++) {\n\t\t\treels[i] = reelsBuffer[i].map((symbol) => symbol - offset);\n\t\t}\n\n\t\tif (data.gameData.slotGameArray != null && data.gameData.slotGameArray[0].payoutData.length == 0) {\n\t\t\treels[3] = reels[3].map((s) => 99);\n\t\t}\n\n\t\treels[3].forEach((symbol, idx) => {\n\t\t\tif (idx != 1) {\n\t\t\t\treels[3][idx] = 99;\n\t\t\t} else if (symbol != 3) {\n\t\t\t\treels[4] = reels[4].map((s) => 99);\n\t\t\t} else {\n\t\t\t\treels[4] = reels[4].map((s,i) => i != 1 ? 99 : s);\n\t\t\t}\n\t\t});\n\n\t\tfor (var i = 0; i < 5; i++) {\n\t\t\treels[i][0] = 98;\n\t\t\treels[i][2] = 98;\n\t\t}\n\n\t\tfor (var i = 0; i < reels.length; i++) {\n\t\t\tfor (var j = 0; j < reels[i].length; j++) {\n\t\t\t\tif (reels[i][j] >= 20 && reels[i][j] < 30) {\n\t\t\t\t\treels[i][j] -= 9\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn data.reels = reels;\n\t}\n}\n\n\nmodule.exports = HotSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * IndianPrincessParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass IndianPrincessParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t//\n\t\tdelete this.bonusDtos['cayetano.games.slots.dto.bonuses.SlotStackedSymbolBonusDataDto'];\n\t}\n\n\t_afterParseOperations(data) {\n\t\tsuper._afterParseOperations(data);\n\t\tthis._handleStackedSymbol(data.game);\n\t}\n\n\t_handleStackedSymbol(data) {\n\t\tlet payoutData = data.gameData.slotGameArray[0].payoutData;\n\t\tpayoutData = payoutData.filter((pdata) => {return pdata.className == 'cayetano.games.slots.dto.bonuses.SlotStackedSymbolBonusDataDto'});\n\t\tif (payoutData.length == 0) return;\n\t\tlet respin = payoutData[0].bonusSpin;\n\t\tlet newGameData = {gameData: {slotGameArray: [respin]}};\n\n\t\tthis.data.game.reels = this._initReels(newGameData);\n\t\tthis.winDetails.winLines = this._getWinLines(respin);\n\t\tthis._handleWins(newGameData);\n\t}\n}\n\nmodule.exports = IndianPrincessParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * IrishCloverSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass IrishCloverSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = IrishCloverSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * JadeFortuneTempleParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass JadeFortuneTempleParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// this.cummulativeWin = 0;\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t\tdelete this.bonusDtos['cayetano.games.slots.dto.bonuses.SlotPrizeBonusDataDto'];\n\t\tthis.bonusDtos['cayetano.games.slots.jadefortunetemple.dto.JadeFortuneTempleScattersPayDto'] = 'bonus';\n\t\tthis.pendingMultiplier = null;\n\t}\n\n\t_initReels(data) {\n\t\tvar superRes = super._initReels(data);\n\n\n\t\tsuperRes = superRes.map(function(reel) {\n\t\t\treturn reel.map((symbol) => symbol == 99 ? 16 : symbol);\n\t\t});\n\n\t\tvar newReels = [];\n\n\t\tvar reel = 0;\n\t\tsuperRes.forEach(function(s, index) {\n\t\t\tif (reel == newReels.length) {\n\t\t\t\tnewReels.push([]);\n\t\t\t}\n\t\t\tnewReels[reel].push(s[0]);\n\t\t\tif (++reel >= 6) reel = 0;\n\t\t});\n\n\t\treturn data.reels = newReels;\n\t}\n\n\t_handlePayoutDataBonuses(){}\n\n\t_getPayoutDataBonuses(gameDto, runScreenBonuses = true) {\n\t\tlet payoutData = gameDto.payoutData;\n\t\tlet bonuses = [];\n\n\t\tfor (let i = 0; i < payoutData.length; i++) {\n\t\t\tif (this.bonusDtos[payoutData[i].className]) {\n\t\t\t\tif (typeof this.bonusDtos[payoutData[i].className] == 'string') {\n\t\t\t\t\tif (payoutData[i].winAmount > 0) {\n\t\t\t\t\t\tbonuses.push({\n\t\t\t\t\t\t\ttype: this.bonusDtos[payoutData[i].className],\n\t\t\t\t\t\t\tamount: payoutData[i].winAmount\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else if (typeof this.bonusDtos[payoutData[i].className] == 'function' && runScreenBonuses) {\n\t\t\t\t\tthis.bonusDtos[payoutData[i].className].call(this, payoutData[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn bonuses;\n\t}\n\n\t_handleNudges(data) {\n\t\t// \n\t}\n\n\t_handleRespins(data, featureName, respinData = null, respinIndex = 1, currAmount = 0) {\n\t\tif (data && !respinData) {\n\t\t\trespinData = data.gameData.slotGameArray[0];\n\t\t}\n\t\trespinData.respinIndex = respinIndex;\n\t\tif (respinData.stakeMultiplier > 1) {\n\t\t\tif (!this.pendingMultiplier) this.pendingMultiplier = respinData.stakeMultiplier;\n\t\t}\n\t\tif (!this.winDetails.respins) {\n\t\t\tthis.winDetails.respins = [];\n\t\t}\n\n\t\tvar nextRespin = this._handleSingleRespin(respinData);\n\n\t\tvar rData = respinData.payoutData.filter(d => d.className == \"cayetano.games.slots.jadefortunetemple.dto.JadeFortuneTempleSlotContactDataDto\");\n\t\tif (rData.length > 0) {\n\t\t\tif (rData[0].respinCumulativeWinAmount)\n\t\t\tnextRespin.amount = rData[0].respinCumulativeWinAmount - currAmount;\n\t\t\tcurrAmount += nextRespin.amount;\n\t\t}\n\n\t\tthis.winDetails.respins.push(nextRespin);\n\n\t\tthis.winDetails.totalWin += nextRespin.amount;\n\t\tnextRespin.otherWins.forEach((bonus) => {\n\t\t\tthis.winDetails.totalWin += bonus.amount;\n\t\t})\n\n\t\tvar hasNextRespin = false;\n\t\trespinData.payoutData.filter(pdata => pdata.className == 'cayetano.games.slots.dto.SlotGameDto').forEach(respin => {\n\t\t\thasNextRespin = true;\n\t\t\tthis._handleRespins(null, 'respin', respin, ++respinIndex, currAmount);\n\t\t});\n\n\t\tif (!hasNextRespin && this.pendingMultiplier) {\n\t\t\tvar multiplierWin = this.winDetails.totalWin * (this.pendingMultiplier - 1);\n\t\t\tnextRespin.otherWins.push({\n\t\t\t\ttype: 'multiplier',\n\t\t\t\tamount: multiplierWin\n\t\t\t});\n\t\t\tthis.winDetails.totalWin += multiplierWin;\n\t\t\tthis.pendingMultiplier = null;\n\t\t}\n\t}\n\n\t_handleSingleRespin(data) {\n\t\tlet payoutData = data.payoutData.filter((pdata) => {return pdata.className == 'cayetano.games.slots.dto.SlotContactDataDto'});\n\t\treturn {\n\t\t\ttype: data.respinIndex,\n\t\t\tamount: payoutData.length == 0 ? 0 : payoutData[0].winAmount,\n\t\t\twinLines: this._getWinLines(data),\n\t\t\totherWins: this._getPayoutDataBonuses(data)\n\t\t}\n\t}\n}\n\n\nmodule.exports = JadeFortuneTempleParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * JapaneseMysterySlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass JapaneseMysterySlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = JapaneseMysterySlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * JoustingWildsParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass JoustingWildsParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\t\tthis._pendingData = null;\n\t\tthis.finalReels = [];\n\t}\n\n\t_generateOutput() {\n\t\tvar output = super._generateOutput();\n\t\t\n\t\tif(this.finalReels.length > 0) output.reels = this.finalReels;\n\t\t \n\t\treturn output;\n\t}\n\n\t_initReels(data) {\n\t\tlet reelsBuffer = data.gameData === undefined ? data.screen : data.gameData.slotGameArray[0].screen;\n\t\tlet reels = [];\n\n\t\tlet offset = Math.floor(reelsBuffer[0][0] / 100) * 100;\n\n\t\tfor (let i = 0; i < reelsBuffer.length; i++) {\n\t\t\treels[i] = reelsBuffer[i].map((symbol, row) => this._mapSymbol(i, row, symbol - offset));\n\t\t}\n\t\tdata.reels = reels;\n\n\t\tdata.reels.forEach((reel, reelIndex) => {\n\t\t\tdata.reels[reelIndex] = reel.map((symbol, tileIndex) => {\n\t\t\t\tif (symbol != 1) return symbol;\n\t\t\t\tif (reelIndex < 2) return 13;\n\t\t\t\tif (reelIndex > 2) return 12;\n\t\t\t\treturn 1;\n\t\t\t});\n\t\t});\n\n\t\treturn data.reels;\n\t}\n\n\t_handleStickyData(data) {\n\t\tvar stickyData = data.gameData.slotGameArray[0].slotGameStickyData;\n\t\tvar payoutData = data.gameData.slotGameArray[0].payoutData;\n\n\t\tlet respin = payoutData.filter(function(pdata) {\n\t\t\t\t\t\treturn pdata.className == \"cayetano.games.slots.dto.bonuses.SlotRespinWrapperDto\" && pdata.bonusGameId == 3;\n\t\t\t\t\t});\n\n\t\tlet respinCommon = payoutData.filter(function(pdata) {\n\t\t\t\treturn pdata.className == \"cayetano.games.slots.dto.bonuses.SlotRespinWrapperDto\";\n\t\t\t});\n\n\t\tif (respinCommon.length > 0) this.finalReels = this._initReels(respinCommon[0].respin);\n\n\t\tif (respin.length > 0) {\n\t\t\treturn this._customStickyDataHandler({gameData: {slotGameArray: [respin[0].respin]}});\n\t\t}\n\n\t\t\n\t\treturn this._customStickyDataHandler(data);\n\t}\n\n\t_customStickyDataHandler(data) {\n\t\tvar stickyData = data.gameData.slotGameArray[0].slotGameStickyData;\n\t\tif (!stickyData || stickyData.stickyPos.length == 0) return;\n\n\t\tvar newData = JSON.parse(JSON.stringify(data));\n\n\t\tstickyData.stickyPos.forEach(function(pos, idx) {\n\t\t\tnewData.gameData.slotGameArray[0].screen[stickyData.stickyReels[idx]][pos] = stickyData.stickySymbolIds[idx];\n\t\t});\n\t\tthis.data.game.reels = this._initReels(newData);\n\t\tthis._pendingData = newData.gameData.slotGameArray[0];\n\t}\n\n\t_afterParseOperations(data) {\n\t\tsuper._afterParseOperations(data);\n\t\tif (this._pendingData) {\n\t\t\tthis.winDetails.winLines = this._getWinLines(this._pendingData);\n\t\t\tthis._pendingData = null;\n\t\t}\n\t}\n}\n\n\nmodule.exports = JoustingWildsParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * KeepingUpWithThePaddysSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass KeepingUpWithThePaddysSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = KeepingUpWithThePaddysSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * LeagueOfWildsParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass LeagueOfWildsParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\tthis.bonusDtos = {\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotInstantWinBonusDataDto': 'instantWin',\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotExtendedInstantWinBonusDataDto': 'instantWin',\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotPrizeBonusDataDto': 'bonus',\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotWheelOfFortuneBonusDataDto': 'bonus',\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotPathBonusDataDto': 'bonus',\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotRespinWrapperDto': 'bonus',\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotStackedSymbolBonusDataDto': this._handleStackedSymbol,\n\t\t\t'cayetano.games.slots.dto.SlotGambleWinCardPickDataDto': this._handleGamble,\n\t\t\t'cayetano.games.slots.leagueofwilds.dto.LeagueOfWildsGreenWildBonusDataDto': 'bonus',\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotFreeSpinBonusDataDto': 'instantWin' // fs instant win \n\t\t};\n\t}\n\t\n\t_initReels(data) {\n\t\tlet modifiedReels = super._initReels(data);\n\n\t\tlet screen = data.gameData.slotGameArray[0].screen;\n\t\tlet wildType;\n\t\tdata.gameData.slotGameArray[0].payoutData.forEach(data => {\n\t\t\tif (data.className == \"cayetano.games.slots.leagueofwilds.dto.LeagueOfWildsWildTypeDataDto\") {\n\t\t\t\twildType = data.wildType;\n\t\t\t}\n\t\t\tif (data.className == \"cayetano.games.slots.dto.bonuses.SlotRespinWrapperDto\") {\n\t\t\t\tscreen = data.respin.screen;\n\t\t\t}\n\t\t});\n\t\t\n\t\tif (wildType != null) replaceSymbols(modifiedReels, screen, wildType);\n\n\t\treturn modifiedReels;\n\t}\n\n\t_handleSingleFreeSpin(spin) {\n\t\tthis.winDetails.totalWin += spin.winAmount;\n\t\tlet spinFinal = spin;\n\t\t\n\t\tspinFinal.payoutData.forEach(data => {\n\t\t\tif (data.className == \"cayetano.games.slots.dto.bonuses.SlotRespinWrapperDto\") {\n\t\t\t\tspinFinal = data.respin;\n\t\t\t}\n\t\t});\n\t\treturn {\n\t\t\ttype: spin.spinNum,\n\t\t\tamount: spinFinal.winAmount,\n\t\t\twinLines: this._getWinLines(spinFinal),\n\t\t\totherWins: this._getPayoutDataBonuses(spin)\n\t\t}\n\t}\n\t\n\t_handleStackedWilds(data) {\n\t\tlet payoutData = data.gameData.slotGameArray[0].payoutData;\n\t\tpayoutData = payoutData.filter((pdata) => {\n\t\t\tif (pdata.className == 'cayetano.games.slots.dto.bonuses.SlotRespinWrapperDto') return true;\n\t\t\treturn false;\n\t\t});\n\t\tif (payoutData.length == 0) return;\n\t\tlet respin = payoutData[0].respin;\n\t\tlet newGameData = {gameData: {slotGameArray: [respin]}};\n\t\tlet lines = this._getWinLines(newGameData.gameData.slotGameArray[0]);\n\t\tif(data.gameData.slotGameArray[0].cumulativeNumSpins == 0) {\n\t\t\tthis.winDetails.winLines = this._getWinLines(respin);\n\t\t\tthis.winDetails.totalWin = 0;\n\t\t\tlines.forEach((line) => {\n\t\t\t\tthis.winDetails.totalWin += line.amount\n\t\t\t});\n\t\t}\n\t\tthis.winDetails.winLines = lines;\n\t}\n}\n\nfunction replaceSymbols(modifiedReels, screen, wildType) {\n\tlet symbolsMargin = 100;\n\tfor (let reel = 0; reel < modifiedReels.length; reel++) {\n\t\tfor (let row = 0; row < modifiedReels[0].length; row++) {\n\t\t\tlet symbol = screen[reel][row] - Math.floor(screen[reel][row] / 100) * 100;\n\t\t\tif (symbol  == 3) {\n\t\t\t\tlet reelMargin = 0;\n\t\t\t\t\n\t\t\t\tif (wildType == 3) reelMargin = reel;\n\t\t\t\t\n\t\t\t\tlet newId = symbol + symbolsMargin * wildType + reelMargin * 10;\n\t\t\t\tmodifiedReels[reel][row] = newId;\n\t\t\t}\n\t\t}\n\t}\n}\n\nmodule.exports = LeagueOfWildsParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * LittleRedRidingHoodSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass LittleRedRidingHoodSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = LittleRedRidingHoodSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * LuckyCabaretParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass LuckyCabaretParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\tthis.bonusDtos[\"cayetano.games.slots.moulinrouge.dto.MoulinRougeBonus1Dto\"] = \"bonus\";\n\t}\n\n\t_handleNudges(data) {\n\t\tlet respins = this._flattenNudges(data.gameData.slotGameArray[0]);\n\n\t\trespins.forEach((respin) => {\n\t\t\tlet currRespin = this._handleSingleRespin(respin);\n\t\t\tthis.winDetails.otherWins = currRespin.otherWins;\n\t\t\tconsole.warn(currRespin)\n\t\t\tthis.winDetails.totalWin += currRespin.amount;\n\t\t});\n\t}\n}\n\nmodule.exports = LuckyCabaretParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * GemBlastParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass LuckyMahjongSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n\n\t/**\n\t * Initializes the reels array with the current spin data object\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t */\n}\n\n\nmodule.exports = LuckyMahjongSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * MagicFairiesSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass MagicFairiesSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = MagicFairiesSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * BuffaloRespinSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass MagnificentWildSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\t}\n\n\t_handleWins(data) {\n\t}\n\t\n\t_initReels(data) {\n\t\tvar respins = this._extractRespins(data.gameData.slotGameArray[0]);\n\t\tlet reelsBuffer = respins[respins.length - 1].screen;\n\t\tlet reels = [];\n\n\t\tlet offset = Math.floor(reelsBuffer[0][0] / 100) * 100;\n\n\t\tfor (let i = 0; i < reelsBuffer.length; i++) {\n\t\t\treels[i] = reelsBuffer[i].map((symbol, row) => this._mapSymbol(i, row, symbol - offset));\n\t\t}\n\t\tdata.reels = reels;\n\t\treturn reels;\n\t}\n\n\t_handleRespins(data) {\n\t\tvar initialRespin = data.gameData.slotGameArray[0];\n\t\tvar respins = this._extractRespins(initialRespin);\n\n\t\tif (!this.winDetails.respins) this.winDetails.respins = [];\n\t\t\n\t\t\n\t\trespins.forEach((respin, index) => {\n\t\t\trespin.respinIndex = index;\n\t\t\tthis._extractLineDto(respin);\n\t\t});\n\n\t\tinitialRespin.screen = respins[respins.length - 1].screen;\n\t\tthis.winDetails.totalWin = initialRespin.cumulativeWinAmount;\n\t}\n\n\t_extractLineDto(slotGameDto) {\n\t\tvar lineDto = null;\n\t\tlet cumulativeLinesWinAmount = 0;\n\n\t\tslotGameDto.payoutData.forEach((data) => {\n\t\t\tif (data.className == \"cayetano.games.slots.dto.SlotLineDataDto\") {\n\t\t\t\tlineDto = data;\n\t\t\t\tcumulativeLinesWinAmount += lineDto.winAmount;\n\t\t\t}\n\t\t});\n\n\t\tif (!lineDto) return;\n\n\t\tif (!this.winDetails.respins) {\n\t\t\tthis.winDetails.respins = [];\n\t\t}\n\n\t\tvar respin = this._handleSingleRespin(slotGameDto);\n\t\trespin.amount = cumulativeLinesWinAmount;\n\n\t\tthis.winDetails.respins.push(respin);\n\t}\n\n\t_extractRespins(respin) {\n\t\tvar result = [];\n\n\t\trespin.payoutData.forEach((data) => {\n\t\t\tif (data.className == \"cayetano.games.slots.dto.bonuses.SlotRespinWrapperDto\") {\n\t\t\t\tresult = result.concat(this._extractRespins(data.respin));\n\t\t\t}\n\t\t});\n\n\t\tresult.push(respin);\n\n\t\treturn result;\n\t}\n\n\t_getPayoutDataBonuses(gameDto, runScreenBonuses = true) {\n\t\treturn [];\n\t}\n}\n\n\nmodule.exports = MagnificentWildSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * ManekiGoldParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass ManekiGoldParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t\t// this.bonusDtos[\"cayetano.games.slots.manekigold.dto.ManekiGoldWildTransformBonusDto\"] = this._handleManekiWildTransforms.bind(this);\n\t}\n\n\t_initReels(data) {\n\t\tvar reels = super._initReels(data);\n\n\t\tfor (let reel = 0; reel < reels.length; reel++) {\n\t\t\tfor (let tile = 0; tile < reels[reel].length; tile++) {\n\t\t\t\tif (reels[reel][tile] > 4) reels[reel][tile] -= 4;\n\t\t\t}\n\t\t}\n\n\t\tvar specialSymbol = this.determineSpecialSymbol(data.gameData.slotGameArray[0].payoutData);\n\n\t\treels.push([0, specialSymbol, 0]);\n\n\t\treturn reels;\n\t}\n\n\tdetermineSpecialSymbol(data) {\n\t\tvar selectedSymbol = null;\n\t\tvar specialSymbolDto = data.filter((payoutData) => payoutData.className == \"cayetano.games.slots.manekigold.dto.ManekiGoldSpecialSymbolDto\");\n\t\tif (specialSymbolDto.length == 0) return null;\n\t\telse selectedSymbol = specialSymbolDto[0].selectedSymbol;\n\n\t\tlet offset = Math.floor(selectedSymbol / 100) * 100;\n\t\tlet symbolsMap = {\"6\":2,\"7\":3,\"8\":4,\"9\":5,\"10\":6,\"11\":7,\"12\":8,\"13\":9,\"14\":10};\n\t\tlet multiplierOffset = 100;\n\t\tlet linkedReelsOffset = 200;\n\t\tlet transformedSymbolOffset = 5;\n\t\tselectedSymbol -= offset;\n\n\t\tswitch(selectedSymbol) {\n\t\t\tcase 1:\n\t\t\t\treturn 1;\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\treturn data.filter((payoutData) => payoutData.className == \"cayetano.games.slots.manekigold.dto.ManekiGoldDoublePayBonusDto\")[0].selectedSymbol - offset - 4;\n\t\t\t\tbreak;\n\t\t\tcase 3:\n\t\t\t\treturn data.filter((payoutData) => payoutData.className == \"cayetano.games.slots.manekigold.dto.ManekiGoldWinMultiplierBonusDto\")[0].multiplier + multiplierOffset;\n\t\t\t\tbreak;\n\t\t\tcase 4:\n\t\t\t\treturn data.filter((payoutData) => payoutData.className == \"cayetano.games.slots.manekigold.dto.ManekiGoldLinkedReelsBonusDto\")[0].linkedReels.length + linkedReelsOffset;\n\t\t\t\tbreak;\n\t\t\tcase 5:\n\t\t\t\treturn data.filter((payoutData) => payoutData.className == \"cayetano.games.slots.manekigold.dto.ManekiGoldWildTransformBonusDto\")[0].transformedSymbol - offset + transformedSymbolOffset;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t_afterParseOperations(data) {\n\t\tsuper._afterParseOperations(data);\n\t\tvar wildTransform = data.game.gameData.slotGameArray[0].payoutData.filter((d) => d.className == \"cayetano.games.slots.manekigold.dto.ManekiGoldWildTransformBonusDto\");\n\t\tif (wildTransform.length > 0) {\n\t\t\tthis.transformSymbols(wildTransform[0]);\n\t\t}\n\t}\n\n\ttransformSymbols(dto) {\n\t\tvar diff = dto.transformedSymbol - dto.selectedSymbol;\n\t\tdto.wildSticky.stickyPos.forEach((pos, i) => {\n\t\t\tthis.data.game.reels[dto.wildSticky.stickyReels[i]][pos] += diff + 9;\n\t\t});\n\t}\n}\n\n\nmodule.exports = ManekiGoldParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * MaximusReelsParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass MaximusReelsParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\tthis.bonusDtos[\"cayetano.games.slots.maximusreels.dto.MaximusReelsBonus1Dto\"] = this._handleMaximusFreeSpinsDto.bind(this);\n\t\tthis.freeSpinsMultiplier = 1;\n\t}\n\n\t_handleMaximusFreeSpinsDto(data) {\n\t\tthis.freeSpinsMultiplier = data.freeSpinParams.stakeMultiplier;\n\t}\n\n\t_handleSingleFreeSpin(spin) {\n\t\tvar multWinAmount = this.freeSpinsMultiplier > 1 ? spin.winAmount - (spin.winAmount / this.freeSpinsMultiplier) : 0;\n\n\t\tthis.winDetails.totalWin += spin.winAmount;\n\t\tvar spin = {\n\t\t\ttype: spin.spinNum,\n\t\t\tamount: spin.winAmount,\n\t\t\twinLines: this._getWinLines(spin),\n\t\t\totherWins: this._getPayoutDataBonuses(spin)\n\t\t};\n\n\t\tif (multWinAmount > 0) {\n\t\t\tspin.winLines = spin.winLines.map((line) => {\n\t\t\t\tline.amount /= this.freeSpinsMultiplier;\n\t\t\t\treturn line;\n\t\t\t});\n\t\t\tspin.otherWins.push({\n\t\t\t\ttype: 'multiplier',\n\t\t\t\tamount: multWinAmount\n\t\t\t});\n\t\t}\n\n\t\treturn spin;\n\t}\n\n\t_initReels(data) {\n\t\tvar screen = super._initReels(data);\n\n\t\tscreen.forEach((reel, idx) => {\n\t\t\treturn screen[idx] = reel.filter((symbol) => symbol < 99);\n\t\t});\n\n\t\tdata.reels = screen.filter((reel) => reel.length > 0);\n\n\t\treturn screen;\n\t}\n}\n\n\nmodule.exports = MaximusReelsParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * MayanMysterySlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass MayanMysterySlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = MayanMysterySlotParser;","const CaySlotParser = require('../CaySlotParser');\n\n/**\n * MazeOfFortuneSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParser}\n */\nclass MazeOfFortuneSlotParser extends CaySlotParser {\n\n\tconstructor() {\n\t\tsuper();\n\t}\n\n\t_getPayoutDataBonuses(gameDto, runScreenBonuses = true) {\n\t\tlet bonuses = [];\n\t\tlet spin = gameDto;\n\t\tif (spin.payoutData != undefined) {\n\t\t\tfor (const [key, value] of Object.entries(spin.payoutData)) {\n\t\t\t\tconsole.log(key);\n\t\t\t\tconsole.log(value);\n\t\t\t\tif (key == \"MazeOfFotruneRandomFallingPrizesDetailsDto\") {\n\t\t\t\t\tvalue.forEach(element => {\n\t\t\t\t\t\tif (element.winAmount > 0) {\n\t\t\t\t\t\t\tbonuses.push({\n\t\t\t\t\t\t\t\ttype: \"bonus\",\n\t\t\t\t\t\t\t\tamount: element.winAmount\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse if (value[value.length - 1].winAmount > 0 && this.nonBonusDtoNames.indexOf(key.toString()) == -1) {\n\t\t\t\t\tbonuses.push({\n\t\t\t\t\t\ttype: \"bonus\",\n\t\t\t\t\t\tamount: value[value.length - 1].winAmount\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\n\t\tif (spin.payoutData != undefined &&\n\t\t\tspin.payoutData.SlotRespinWrapper != undefined &&\n\t\t\tspin.payoutData.SlotRespinWrapper[0].respin != undefined &&\n\t\t\tspin.payoutData.SlotRespinWrapper[0].respin.stakeMultiplier != undefined &&\n\t\t\tspin.payoutData.SlotRespinWrapper[0].respin.stakeMultiplier > 1) {\n\t\t\tspin = spin.payoutData.SlotRespinWrapper[0].respin;\n\t\t}\n\n\t\tif (spin.stakeMultiplier > 1) {\n\t\t\tbonuses.push({\n\t\t\t\ttype: 'multiplier',\n\t\t\t\tamount: gameDto.currentSpinWinAmount - (gameDto.currentSpinWinAmount / spin.stakeMultiplier)\n\t\t\t});\n\t\t}\n\n\t\treturn bonuses;\n\t}\n\n}\n\nmodule.exports = MazeOfFortuneSlotParser;","const CaySlotParser = require('../CaySlotParser');\n\n/**\n * MineCrusherSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParser}\n */\nclass MineCrusherSlotParser extends CaySlotParser {\n\n\tconstructor(){\n\t\tsuper();\n        this.nonBonusDtoNames = [\"MineCrusherAllSymbolPayouts\"];\n\t\t\n\t}\n\t\n\tparse(gameId, data) {\n\t\tdata.game.gameData.slotGameArray.forEach(spinData => {\n\t\t\tif (spinData.payoutData.MineCrusherAllSymbolPayouts != undefined) {\n\t\t\t\tspinData.payoutData.MineCrusherAllSymbolPayouts[0].MineCrusherSymbolPayout.forEach(payout => {\n\t\t\t\t\tpayout.reels = payout.tiles;\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn super.parse(gameId, data);\n\t}\n\t\n\t_splitScreen(data) {\n\t\tdata.game.gameData.slotGameArray.forEach(sga => {\n\t\t\tlet screenCopy = [[], [], [], [], [], [], []];\n\t\t\tvar gridWidth = 7;\n\t\t\t\n\t\t\tfor (let i = 0; i < sga.screen.length; i++) {\n\t\t\t\tvar arrayIndex = i % gridWidth;\n\t\t\t\tscreenCopy[arrayIndex].push(sga.screen[i]);\n\t\t\t}\n\t\t\t\n\t\t\tsga.screen = screenCopy;\n\t\t});\n\t}\n\t\n\t_handleWins(data) {\n\t\tlet lines = this._getWinLinesInitialSpin(data.gameData.slotGameArray[0]);\n\n\t\tlines.forEach((line) => {\n\t\t\tthis.winDetails.totalWin += line.amount\n\t\t});\n\n\t\tthis.winDetails.winLines = lines;\n\t}\n\t\n\t_getWinLines(spin) {\n\t\treturn [];\n\t}\n\t\n\t_getWinLinesInitialSpin(spin) {\n\t\tlet winLines = [];\n\t\t\n\t\tlet payoutData = spin.payoutData;\n\t\tif(payoutData != undefined) {\n\t\t\tlet symbolPayout = null;\n\t\t\tif (payoutData.MineCrusherAllSymbolPayouts != undefined) {\n\t\t\t\tsymbolPayout = payoutData.MineCrusherAllSymbolPayouts[0].MineCrusherSymbolPayout;\n\t\t\t}\n\t\t\t\n\t\t\tif (symbolPayout != null) {\n\t\t\t\tfor (let i = 0; i < symbolPayout.length; i++) {\n\t\t\t\t\tlet lineIndex = (symbolPayout[i].lineNum < 0 ? winLines.length : symbolPayout[i].id);\n\t\t\t\t\t\n\t\t\t\t\twinLines.push({\n\t\t\t\t\t\tindex: lineIndex,\n\t\t\t\t\t\ttype: 1 + lineIndex,\n\t\t\t\t\t\tamount: symbolPayout[i].multipliedWin * this.data.game.stake,\n\t\t\t\t\t\tstart: symbolPayout[i].reels[0],\n\t\t\t\t\t\tlength: symbolPayout[i].reels.length,\n\t\t\t\t\t\ttiles: symbolPayout[i].tiles\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\twinLines.sort(function(a, b) {\n\t\t\t\t\treturn a.type - b.type;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn winLines;\n\t}\n\t\n\t_afterParseOperations(data) {\n\t\tdata.game.gameData.slotGameArray.forEach((i, spin) => {\n\t\t\tthis._handleMineCrusherSpin(spin, i);\n\t\t});\n\t}\n\t\n\t_handleMineCrusherSpin(data, respinNum) {\n\t\tvar result = [];\n\t\t\n\t\tfor (const property in data.payoutData) {\n\t\t\tif (property == \"MineCrusherAllSymbolPayouts\") {\n\t\t\t\tvar payouts = data.payoutData[property][0].MineCrusherSymbolPayout;\n\t\t\t\tpayouts.forEach((p) => {\n\t\t\t\t\tresult.push(this._handleMineCrusherContact(p, respinNum));\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\t\n\t_handleMineCrusherContact(data, respinNum) {\n\t\treturn {\n\t\t\tamount: data.multipliedWin,\n\t\t\twinLines: [],\n\t\t\totherWins: [],\n\t\t\ttype: respinNum\n\t\t};\n\t}\n\n    _initReels(data) {\n\t\tthis.finalScreen = data.gameData.slotGameArray[data.gameData.slotGameArray.length - 1].screen;\n\t\t\n\t\treturn this.finalScreen;\n\t}\n\t\n\t_handlePayoutDataBonuses(gameDto) {\n\t\tlet bonuses = this._getPayoutDataBonuses(gameDto);\n\n\t\tbonuses.forEach((bonus) => {\n\t\t\tthis.winDetails.otherWins.push(bonus);\n\t\t\tthis.winDetails.totalWin += bonus.amount;\n\t\t});\n\t}\n\t\n\t_getPayoutDataBonuses(gameDto, runScreenBonuses = true) {\n\t\tlet bonuses = [];\n\t\tlet spin = gameDto;\n\t\t\n\t\tif (spin.payoutData != null && spin.payoutData.MineCrusherRedFairyDto != null) {\n\t\t\tbonuses.push({\n\t\t\t\ttype: 'bonus',\n\t\t\t\tamount: spin.payoutData.MineCrusherRedFairyDto[0].winAmount\n\t\t\t});\n\t\t}\n\n\t\treturn bonuses;\n\t}\n}\n\nmodule.exports = MineCrusherSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * MississippiQueenSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass MississippiQueenSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = MississippiQueenSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * MoneyMachineParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass MoneyMachineParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t}\n\n\t_generateOutput() {\n\t\tvar output = super._generateOutput();\n\t\tvar lastSpin = this.data.game.gameData.slotGameArray[this.data.game.gameData.slotGameArray.length - 1];\n\n\t\toutput.reels = this._initReels(lastSpin);\n\t\t \n\t\treturn output;\n\t}\n\n\t_initReels(data) {\n\t\tlet reelsBuffer = data.gameData === undefined ? data.screen : data.gameData.slotGameArray[0].screen;\n\t\tlet reels = [];\n\n\t\tlet offset = Math.floor(reelsBuffer[0][0] / 100) * 100;\n\n\t\tfor (let i = 0; i < reelsBuffer.length; i++) {\n\t\t\treels[i] = reelsBuffer[i].map((symbol, row) => this._mapSymbol(i, row, symbol - offset));\n\t\t}\n\t\tdata.reels = reels;\n\t\treturn reels;\n\t}\n}\n\n\nmodule.exports = MoneyMachineParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * MoneyNightSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass MoneyNightSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = MoneyNightSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * MoneyTowerSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass MoneyTowerSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t}\n\n\t_generateOutput() {\n\t\tvar output = super._generateOutput();\n\t\tvar lastSpin = this.data.game.gameData.slotGameArray[this.data.game.gameData.slotGameArray.length - 1];\n\n\t\toutput.reels = this._initReels(lastSpin);\n\t\t \n\t\treturn output;\n\t}\n\n\t_initReels(data) {\n\t\tlet reelsBuffer = data.gameData === undefined ? data.screen : data.gameData.slotGameArray[0].screen;\n\t\tlet reels = [];\n\n\t\tlet offset = Math.floor(reelsBuffer[0][0] / 100) * 100;\n\n\t\tfor (let i = 0; i < reelsBuffer.length; i++) {\n\t\t\treels[i] = reelsBuffer[i].map((symbol, row) => this._mapSymbol(i, row, symbol - offset));\n\t\t}\n\t\tdata.reels = reels;\n\t\treturn reels;\n\t}\n}\n\n\nmodule.exports = MoneyTowerSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * MonteCarloRacingSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass MonteCarloRacingSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = MonteCarloRacingSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * MrDiamondsParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass MrDiamondsParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\n\t\tthis.bonusDtos[\"cayetano.games.slots.mrdiamonds.dto.MrDiamondsBonus1Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = MrDiamondsParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * NeonWildsSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass NeonWildsSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = NeonWildsSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * NudgingGemsSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass NudgingGemsSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = NudgingGemsSlotParser;","const CaySlotParser = require('../CaySlotParser');\n\n/**\n * WorldOfWizardsSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParser}\n */\nclass OstrichLuckSlotParser extends CaySlotParser {\n\n\tconstructor() {\n\t\tsuper();\n\t}\n\n\t_generateOutput() {\n\t\tvar generateOutput = super._generateOutput();\n\t\tvar totalEggsWinAmount = this._handleEggsWin(this.data.game.gameData.slotGameArray[0]);\n\t\tgenerateOutput.winDetails.otherWins = [{ \"type\": \"bonus\", \"amount\": parseFloat(totalEggsWinAmount) }];\n\n\t\tgenerateOutput.transactions.totalWin = this.data.game.gameData.slotGameArray[this.data.game.gameData.slotGameArray.length - 1].accumulatedWinAmount;\n\t\tgenerateOutput.winDetails.totalWin = this.data.game.gameData.slotGameArray[this.data.game.gameData.slotGameArray.length - 1].accumulatedWinAmount;\n\n\t\treturn generateOutput;\n\t}\n\n\t_handleEggsWin(spin) {\n\t\tvar eggsWin = 0;\n\t\tlet payoutData = spin.payoutData;\n\n\t\tfor (var className in payoutData) {\n\t\t\tif (payoutData.hasOwnProperty(className)) {\n\t\t\t\tif (className == \"OstrichLuckEggSpinBonusDto\") eggsWin = payoutData[className][0].winAmount\n\t\t\t}\n\t\t}\n\t\treturn eggsWin;\n\t}\n\n\t_handleRespins(data) {\n\t\tthis.winDetails.respins = [];\n\t\tfor (let i = 1; i < data.gameData.slotGameArray.length; i++) {\n\t\t\tlet respin = data.gameData.slotGameArray[i];\n\t\t\tif (respin != undefined && respin.isRespin === true && (respin.payoutData.OstrichLuckSpinDto == undefined || respin.payoutData.OstrichLuckSpinDto == null)) {\n\n\t\t\t\trespin.respinIndex = i - 1;\n\t\t\t\trespin = this._handleSingleRespin(respin);\n\t\t\t\tthis.winDetails.respins.push(respin);\n\t\t\t}\n\t\t}\n\n\t\tvar totalRespinsWinAmount = 0;\n\t\tthis.winDetails.respins.forEach((respin) => {\n\t\t\ttotalRespinsWinAmount += respin.amount;\n\t\t});\n\n\t\tif (totalRespinsWinAmount > 0) {\n\t\t\tthis.winDetails.totalWin += totalRespinsWinAmount;\n\t\t} else {\n\t\t\tthis.winDetails.respins = [];\n\t\t}\n\t}\n\n\n}\n\nmodule.exports = OstrichLuckSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n\n/**\n * PaddyPowerFanaticsParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass PaddyPowerFanaticsParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t}\n\n\t_handleStickyData(data) {\n\t\t// do nothing\n\t\t// in other games, this method replaces no winning wilds with the symbols from styicky data\n\t}\n}\n\n\nmodule.exports = PaddyPowerFanaticsParser;","const CaySlotParser = require('../CaySlotParser');\n\n/**\n * PaddyPowerGoldBookOfLuckSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParser}\n */\nclass PaddyPowerGoldBookOfLuckSlotParser extends CaySlotParser {\n\t_handleWins(data) {\n\t\tlet lines = this._getWinLines(data.gameData.slotGameArray[0]);\n\t\tif(data.gameData.slotGameArray[0].totalSpins == 0 || data.gameData.slotGameArray[0].currentSpin > 1){\n\t\t\tlines.forEach((line) => {\n\t\t\t\tthis.winDetails.totalWin += line.amount\n\t\t\t});\n\t\t}\n\n\t\tthis.winDetails.winLines = lines;\n\t}\n}\n\nmodule.exports = PaddyPowerGoldBookOfLuckSlotParser;","const CaySlotParser = require('../CaySlotParser');\n\n/**\n * PaddyPowerGoldOnTourSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParser}\n */\nclass PaddyPowerGoldOnTourSlotParser extends CaySlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\t}\n\n    _getPayoutDataBonuses(gameDto, runScreenBonuses = true) {\n\t\tlet bonuses = [];\n\t\tlet spin = gameDto;\n\t\tif (spin.payoutData != undefined) {\n\t\t\tfor (const [key, value] of Object.entries(spin.payoutData)) {\n\t\t\t\tif (value[value.length - 1].winAmount > 0 && this.nonBonusDtoNames.indexOf(key.toString()) == -1) {\n\t\t\t\t\tif(key == \"SlotGambleWinCardPick\") {\n\t\t\t\t\t\tthis._handleGamble(value[value.length - 1]);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tbonuses.push({\n\t\t\t\t\t\t\ttype: \"bonus\",\n\t\t\t\t\t\t\tamount: value[value.length - 1].winAmount / spin.stakeMultiplier\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if(key == \"SlotGambleWinCardPick\") {\n\t\t\t\t\tthis._handleGamble(value[value.length - 1]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (spin.payoutData != undefined && \n\t\t\tspin.payoutData.SlotRespinWrapper != undefined &&\n\t\t\tspin.payoutData.SlotRespinWrapper[0].respin != undefined &&\n\t\t\tspin.payoutData.SlotRespinWrapper[0].respin.stakeMultiplier != undefined &&\n            spin.payoutData.SlotRespinWrapper[0].respin.stakeMultiplier > 1) {\n\t\t\t\tspin = spin.payoutData.SlotRespinWrapper[0].respin;\n\t\t\t}\n\n\t\tif (spin.stakeMultiplier > 1) {\n\t\t\tbonuses.push({\n\t\t\t\ttype: 'multiplier',\n\t\t\t\tamount: gameDto.currentSpinWinAmount - (gameDto.currentSpinWinAmount / spin.stakeMultiplier)\n\t\t\t});\n\t\t}\n        else if (spin.payoutData.SlotPrizeBonus != undefined) {\n            bonuses.push({\n                type: 'multiplier',\n\t\t\t\tamount: spin.payoutData.SlotPrizeBonus[0].winAmount\n\t\t\t});\n        }\n\n\t\treturn bonuses;\n\t}\n}\n\nmodule.exports = PaddyPowerGoldOnTourSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * PaddyPowerGoldSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass PaddyPowerGoldSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\n\t\tthis.bonusDtos[\"cayetano.games.slots.paddyspotogold.dto.PaddysPotOGoldBonus1Dto\"] = \"bonus\";\n\t\tthis.bonusDtos[\"cayetano.games.slots.paddyspotogold.dto.PaddysPotOGoldBonus2Dto\"] = \"bonus\";\n\t\tthis.bonusDtos[\"cayetano.games.slots.paddyspotogold.dto.PaddysPotOGoldWinLineDto\"] = this._handlePotOGoldWinLineDto;\n\n\t\tthis.overrideLines = null;\n\t\tthis.reelsParsed = false;\n\t}\n\n\t_handlePotOGoldWinLineDto(dto) {\n\t\tthis.overrideLines = this._getWinLines(dto.bonusSpin);\n\t\tthis._handleWins({gameData: {slotGameArray: [dto.bonusSpin]}});\n\t\tif (dto.multiplier > 1) {\n\t\t\tlet notMultipliedAmount = dto.winAmount / dto.multiplier;\n\t\t\tthis.winDetails.otherWins.push({ type: 'multiplier', amount: dto.winAmount - notMultipliedAmount });\n\t\t\tthis.winDetails.totalWin += dto.winAmount - notMultipliedAmount;\n\t\t}\n\t\tthis.data.game.reels = this._initReels({gameData: {slotGameArray: [dto.bonusSpin]}});\n\t\tthis.reelsParsed = true;\n\t}\n\n\t_initReels(data) {\n\t\tif (this.reelsParsed) return;\n\t\treturn data.reels = super._initReels(data);\n\t}\n\n\t_afterParseOperations(data) {\n\t\tsuper._afterParseOperations(data);\n\t\tif (this.overrideLines != null) {\n\t\t\tthis.winDetails.winLines = this.overrideLines;\n\t\t\tthis.overrideLines = null;\n\t\t}\n\t}\n}\n\nmodule.exports = PaddyPowerGoldSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * PaddyPowerMysteryGoldSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass PaddyPowerMysteryGoldSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = PaddyPowerMysteryGoldSlotParser;","const CaySlotParser = require('../CaySlotParser');\n\n/**\n * PaddyPowerShowtimeSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParser}\n */\nclass PaddyPowerShowtimeSlotParser extends CaySlotParser {\n\n\tconstructor(){\n\t\tsuper();\n        this.nonBonusDtoNames = [\"CumulativeSymbolPayout\", \"SymbolPayout\"];\t\n\t}\n\t\n\t_splitScreen(data) {\n\t\tdata.game.gameData.slotGameArray.forEach(sga => {\n\t\t\tlet screenCopy = [[], [], [], [], []];\n\t\t\tvar gridWidth = 5;\n\t\t\t\n\t\t\tfor (let i = 0; i < sga.screen.length; i++) {\n\t\t\t\tvar arrayIndex = i % gridWidth;\n\t\t\t\tscreenCopy[arrayIndex].push(sga.screen[i]);\n\t\t\t}\n\t\t\t\n\t\t\tsga.screen = screenCopy;\n\t\t});\n\t}\n\t\n\t_handleWins(data) {\n\t\tlet lines = this._getWinLinesInitialSpin(data.gameData.slotGameArray[0]);\n\n\t\tlines.forEach((line) => {\n\t\t\tthis.winDetails.totalWin += line.amount\n\t\t});\n\n\t\tthis.winDetails.winLines = lines;\n\t}\n\t\n\t_getWinLines(spin) {\n\t\treturn [];\n\t}\n\t\n\t_getWinLinesInitialSpin(spin) {\n\t\tlet winLines = [];\n\t\t\n\t\tlet payoutData = spin.payoutData;\n\t\tif(payoutData != undefined) {\n\t\t\tlet symbolPayout = null;\n\t\t\tsymbolPayout = payoutData.SymbolPayout;\n\t\t\t\n\t\t\tif (symbolPayout != null) {\n\t\t\t\tfor (let i = 0; i < symbolPayout.length; i++) {\n\t\t\t\t\tlet lineIndex = (symbolPayout[i].lineNum < 0 ? winLines.length : symbolPayout[i].id);\n\t\t\t\t\t\n\t\t\t\t\twinLines.push({\n\t\t\t\t\t\tindex: lineIndex,\n\t\t\t\t\t\ttype: 1 + lineIndex,\n\t\t\t\t\t\tamount: symbolPayout[i].multipliedWin,\n\t\t\t\t\t\ttiles: symbolPayout[i].tiles\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\twinLines.sort(function(a, b) {\n\t\t\t\t\treturn a.type - b.type;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn winLines;\n\t}\n\t\n\t_afterParseOperations(data) {\n\t\tdata.game.gameData.slotGameArray.forEach((i, spin) => {\n\t\t\tthis._handleShowtimeSpin(spin, i);\n\t\t});\n\t}\n\t\n\t_handleShowtimeSpin(data, respinNum) {\n\t\tvar result = [];\n\t\t\n\t\tfor (const property in data.payoutData) {\n\t\t\tif (property == \"SymbolPayout\") {\n\t\t\t\tvar payouts = data.payoutData[property];\n\t\t\t\tpayouts.forEach((p) => {\n\t\t\t\t\tresult.push(this._handleShowtimeContact(p, respinNum));\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\t\n\t_handleShowtimeContact(data, respinNum) {\n\t\treturn {\n\t\t\tamount: data.multipliedWin,\n\t\t\twinLines: [],\n\t\t\totherWins: [],\n\t\t\ttype: respinNum\n\t\t};\n\t}\n\n    _initReels(data) {\n\t\tthis.finalScreen = data.gameData.slotGameArray[data.gameData.slotGameArray.length - 1].screen;\n\t\t\n\t\treturn this.finalScreen;\n\t}\n}\n\nmodule.exports = PaddyPowerShowtimeSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n\n/**\n * PaddysLuckyMineParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass PaddysLuckyMineParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\tthis.bonusDtos[\"cayetano.games.slots.paddysluckymine.dto.PaddysLuckyMineBonus2Dto\"] = \"bonus\";\n\t}\n\n}\n\n\nmodule.exports = PaddysLuckyMineParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n\n/**\n * PaddysLuckyPigeonParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass PaddysLuckyPigeonParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\tthis.bonusDtos[\"cayetano.games.slots.PaddysLuckyPigeon.dto.PaddysLuckyPigeonBonus2Dto\"] = \"bonus\";\n\t\tthis.bonusDtos[\"cayetano.games.slots.dto.bonuses.SlotPrizeBonusDataDto\"] = \"instantWin\";\n\t}\n\n\t_getPayoutDataBonuses(gameDto, runScreenBonuses = true) {\n\t\tlet payoutData = gameDto.payoutData;\n\t\tlet bonuses = [];\n\n\t\tvar instantWinAmount = 0;\n\n\t\tfor (let i = 0; i < payoutData.length; i++) {\n\t\t\tif (this.bonusDtos[payoutData[i].className]) {\n\t\t\t\tif (typeof this.bonusDtos[payoutData[i].className] == 'string') {\n\t\t\t\t\tif (payoutData[i].winAmount > 0) {\n\t\t\t\t\t\tbonuses.push({\n\t\t\t\t\t\t\ttype: this.bonusDtos[payoutData[i].className],\n\t\t\t\t\t\t\tamount: payoutData[i].winAmount\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (bonuses[bonuses.length - 1].type == \"instantWin\") {\n\t\t\t\t\t\t\tinstantWinAmount += bonuses[bonuses.length - 1].amount;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (typeof this.bonusDtos[payoutData[i].className] == 'function' && runScreenBonuses) {\n\t\t\t\t\tthis.bonusDtos[payoutData[i].className].call(this, payoutData[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (gameDto.stakeMultiplier > 1) {\n\t\t\tvar multAmount = gameDto.winAmount - instantWinAmount;\n\t\t\tif (multAmount > 0) {\n\t\t\t\tbonuses.push({\n\t\t\t\t\ttype: 'multiplier',\n\t\t\t\t\tamount: multAmount - (multAmount / gameDto.stakeMultiplier)\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn bonuses;\n\t}\n\n\t_handleStickyData(data) {\n\t\t// do nothing\n\t\t// in other games, this method replaces no winning wilds with the symbols from styicky data\n\t}\n}\n\n\nmodule.exports = PaddysLuckyPigeonParser;","const CaySlotParser = require('../CaySlotParser');\nconst Format = require('../../../../utils/Format');\n\n/**\n * PaddysWonderWheelUnderConstructionSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParser}\n */\nclass PaddysWonderWheelUnderConstructionSlotParser extends CaySlotParser {\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis.nonBonusDtoNames.push(\"CumulativeSymbolPayout\");\n\t}\n\n\t_handleRespins(data) {\n\t\tif (data.gameData.slotGameArray[0].hasRespin) return super._handleRespins(data);\n\t}\n\n\t_initReels(data) {\n\t\tlet reelsBuffer = data.gameData.slotGameArray[data.gameData.slotGameArray.length - 1].screen;\n\t\tlet reels = [];\n\t\tlet respin = data.gameData.slotGameArray[data.gameData.slotGameArray.length - 1].payoutData.SlotRespinWrapper;\n\n\t\tif (respin != undefined) {\n\t\t\treelsBuffer = respin[0].respin.screen;\n\t\t\treelsBuffer = reelsBuffer.map(element => {\n\t\t\t\treturn element.toString().split(\"\");\n\t\t\t});\n\t\t}\n\n\t\tfor (let i = 0; i < reelsBuffer.length; i++) {\n\t\t\treels[i] = reelsBuffer[i].map((symbol, row) => this._mapSymbol(i, row, symbol));\n\t\t}\n\n\t\tconst urlParams = new URLSearchParams(window.location.search);\n\t\tconst brand = urlParams.get('brand');\n\t\tif (brand === \"paddyMars\") reels = this._replaceBrandedSymbols(reels);\n\n\t\tdata.reels = reels;\n\t\tthis.finalScreen = reels;\n\n\t\treturn reels;\n\t}\n\n\t_replaceBrandedSymbols(screen) {\n\t\treturn screen.map(reel => {\n\t\t\treturn reel = reel.map(symbol => {\n\t\t\t\tif (symbol == 1) return 'c';\n\t\t\t\telse if (symbol == 2) return 'd';\n\t\t\t\telse return symbol;\n\t\t\t});\n\t\t});\n\t}\n\n}\n\nmodule.exports = PaddysWonderWheelUnderConstructionSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * ParadiseTreasuresSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass ParadiseTreasuresSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = ParadiseTreasuresSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * PersianGlorySlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass PersianGlorySlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = PersianGlorySlotParser;","const CaySlotParser = require('../CaySlotParser');\n\n/**\n * PharaohsEternalGlorySlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParser}\n */\nclass PharaohsEternalGlorySlotParser extends CaySlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\t}\t\n\n\t_initReels(data) {\n\t\tlet modifiedReels = super._initReels(data);\n\t\tfor(let i = 0; i < data.gameData.slotGameArray[0].postSpinStates.length; i++) {\n\t\t\tlet pre = data.gameData.slotGameArray[0].preSpinStates[i];\n\t\t\tlet post = data.gameData.slotGameArray[0].postSpinStates[i];\n\t\t\tlet reel = Math.floor( i % 5);\n\t\t\tlet row = Math.floor(i / 5);\n\t\t\tif(post > 0) {\n\t\t\t\tmodifiedReels[reel][row] = 2;\n\t\t\t\tfor(let j = 0; j < post + 1; j++) {\n\t\t\t\t\tmodifiedReels[reel][row] *= 10;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if(pre > 0) modifiedReels[reel][row] = 20;\n\t\t}\n\n\t\treturn modifiedReels;\n\t}\n}\n\nmodule.exports = PharaohsEternalGlorySlotParser;","const CaySlotParser = require('../CaySlotParser');\n\n/**\n * GemBlastParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParser}\n */\nclass PiratesHoldDavyLockersCoinsSlotParser extends CaySlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\t}\n\n\t_generateOutput() {\n\t\tvar generateOutput = super._generateOutput();\n\t\tvar totalCoinsWinAmount = this._handleCoinsWin(this.data.game.gameData.slotGameArray[0]);\n\t\tgenerateOutput.winDetails.otherWins = [{\"type\":\"totalCoinsWin\",\"amount\":parseFloat(totalCoinsWinAmount)}];\n\n\t\tgenerateOutput.transactions.totalWin = this.data.game.gameData.slotGameArray[this.data.game.gameData.slotGameArray.length - 1].accumulatedWinAmount;\n\t\tgenerateOutput.winDetails.totalWin = this.data.game.gameData.slotGameArray[this.data.game.gameData.slotGameArray.length - 1].accumulatedWinAmount;\n\t\t\n\t\treturn generateOutput;\n\t}\n\n\t_handleCoinsWin(spin) {\n\t\tvar coinsWin = 0;\n\t\tlet payoutData = spin.payoutData;\n\t\t\n\t\tfor (var className in payoutData) {\n\t\t\tif (payoutData.hasOwnProperty(className)) {\n\t\t\t\tif (className == \"PiratesHoldBonus3Dto\") coinsWin = payoutData[className][0].winAmount //DavyBonus dto\n\t\t\t}\n\t\t}\n\t\treturn coinsWin;\n\t}\n\n\t_parseScreen(screen) {\n\t\tlet screenCopy = []; // make a copy for the new screen response\n\t\tfor (let i = 0; i < screen.length; i++) {\n\t\t\tscreenCopy.push(screen[i]);\n\t\t}\n\t\tvar parsedScr = [];\n\t\tfor (let reel = 0; reel < screenCopy.length; reel++) {\n\t\t\tlet rows = screenCopy[reel].split(\"\");\n\t\t\tvar symbols = [];\n\t\t\tfor (let row = 0; row < rows.length; row++) {\n\t\t\t\tsymbols.push(rows[row]);\n\t\t\t}\n\t\t\tparsedScr.push(symbols);\n\t\t}\n\t\treturn parsedScr;\n\t}\n\n\t_handlePayoutDataBonuses(gameDto) {}\n\n\t_handleRespins(data) {}\n}\n\nmodule.exports = PiratesHoldDavyLockersCoinsSlotParser;","const CaySlotParser = require('../CaySlotParser');\n\n/**\n * GemBlastParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParser}\n */\nclass PiratesHoldSlotParser extends CaySlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\t}\n\n\t_generateOutput() {\n\t\tvar generateOutput = super._generateOutput();\n\t\tvar totalCoinsWinAmount = this._handleCoinsWin(this.data.game.gameData.slotGameArray[0]);\n\t\tgenerateOutput.winDetails.otherWins = [{\"type\":\"totalCoinsWin\",\"amount\":parseFloat(totalCoinsWinAmount)}];\n\n\t\tgenerateOutput.transactions.totalWin = this.data.game.gameData.slotGameArray[this.data.game.gameData.slotGameArray.length - 1].accumulatedWinAmount;\n\t\tgenerateOutput.winDetails.totalWin = this.data.game.gameData.slotGameArray[this.data.game.gameData.slotGameArray.length - 1].accumulatedWinAmount;\n\t\t\n\t\treturn generateOutput;\n\t}\n\n\t_handleCoinsWin(spin) {\n\t\tvar coinsWin = 0;\n\t\tlet payoutData = spin.payoutData;\n\t\t\n\t\tfor (var className in payoutData) {\n\t\t\tif (payoutData.hasOwnProperty(className)) {\n\t\t\t\tif (className == \"PiratesHoldBonus2Dto\") coinsWin = payoutData[className][0].totalPrizeWinAmount //AnneBonus dto\n\t\t\t\telse if (className == \"PiratesHoldBonus3Dto\" || className == \"PiratesHoldBonus1Dto\") coinsWin = payoutData[className][0].winAmount //DavyBonus dto, JackBonus(fs) dto\n\t\t\t}\n\t\t}\n\t\treturn coinsWin;\n\t}\n\n\t_handleSingleFreeSpin(spin) {\n\t\treturn {\n\t\t\ttype: spin.currentSpin,\n\t\t\tamount: spin.currentSpinWinAmount,\n\t\t\twinLines: this._getWinLines(spin),\n\t\t\totherWins: this._getPayoutDataBonuses(spin),\n\t\t\totherWins: [{\"type\":\"totalCoinsWin\",\"amount\":parseFloat(this._handleCoinsWin(spin))}]\n\t\t}\n\t}\n\n\t_davyBonusInFS(spin) {\n\t\treturn spin.currentSpin > 0 && spin.hasRespin;\n\t}\n\n\t_initReels(data) {\n\t\tlet slotGameArray = data.gameData.slotGameArray;\n\t\tlet reels = [];\n\t\tfor (let i = 0; i < slotGameArray.length; i++) {\n\t\t\tif (slotGameArray[i].isRespin) return;\n\t\t\tlet reelsBuffer = data.gameData.slotGameArray[i].screen;\n\t\t\tfor (let j = 0; j < reelsBuffer.length; j++) {\n\t\t\t\treels[j] = reelsBuffer[j].map((symbol, row) => this._mapSymbol(j, row, symbol, data.gameData.slotGameArray[i]));\n\t\t\t}\n\t\t\tdata.reels = reels;\n\t\t\tthis.finalScreen = reels;\n\t\t}\n\t\treturn reels;\n\t}\n\n\t_mapSymbol(reel, row, symbolId, data) {\n\t\tif(data != undefined && data.payoutData != undefined && data.payoutData.PiratesHoldBonus2Dto != undefined) {\n\t\t\tconsole.log(data.payoutData.PiratesHoldBonus2Dto[0]);\n\t\t\tfor (let i = 0; i < data.payoutData.PiratesHoldBonus2Dto[0].respin.slotGameStickyData.length; i++) {\n\t\t\t\tif(data.payoutData.PiratesHoldBonus2Dto[0].respin.slotGameStickyData[i].x == reel && data.payoutData.PiratesHoldBonus2Dto[0].respin.slotGameStickyData[i].y == row) {\n\t\t\t\t\tsymbolId = data.payoutData.PiratesHoldBonus2Dto[0].respin.slotGameStickyData[i].s;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} \n\t\treturn symbolId;\n\t}\n\n\t_parseScreen(screen) {\n\t\tlet screenCopy = []; // make a copy for the new screen response\n\t\tfor (let i = 0; i < screen.length; i++) {\n\t\t\tscreenCopy.push(screen[i]);\n\t\t}\n\t\tvar parsedScr = [];\n\t\tfor (let reel = 0; reel < screenCopy.length; reel++) {\n\t\t\tlet rows = screenCopy[reel].split(\"\");\n\t\t\tvar symbols = [];\n\t\t\tfor (let row = 0; row < rows.length; row++) {\n\t\t\t\tsymbols.push(rows[row]);\n\t\t\t}\n\t\t\tparsedScr.push(symbols);\n\t\t}\n\t\treturn parsedScr;\n\t}\n\n\t_handlePayoutDataBonuses(gameDto) {}\n\n\t_handleRespins(data) {}\n}\n\nmodule.exports = PiratesHoldSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * PoseidonFortuneSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass PoseidonFortuneSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = PoseidonFortuneSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * PyramidGoldSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass PyramidGoldSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = PyramidGoldSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * RacingWildsSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass RacingWildsSlotParser extends CaySlotParserLegacy {\n\tconstructor(){\n\t\tsuper();\n\t}\n\t\n\t_generateOutput() {\n\t\tvar generateOutput = super._generateOutput();\n\n\t\tgenerateOutput.transactions.totalWin = this.data.game.gameData.slotGameArray[this.data.game.gameData.slotGameArray.length - 1].accumulatedWinAmount;\n\t\tgenerateOutput.winDetails.totalWin = this.data.game.gameData.slotGameArray[this.data.game.gameData.slotGameArray.length - 1].accumulatedWinAmount;\n\t\t\n\t\treturn generateOutput;\n\t}\n\n\t_initReels(data) {\n\t\t// let modifiedReels =;\n\n\t\tlet screen = data.gameData.slotGameArray[0].screen;\n\t\tlet wildReels = [];\n\t\t\n\t\tif(data.gameData.slotGameArray[0].payoutData.RacingWildsGreenWildDto != null) {\n\t\t\tlet stickyReels = data.gameData.slotGameArray[0].payoutData.RacingWildsGreenWildDto[0].greenWilds.stickyReels;\n\t\t\tfor(let i = 0; i < stickyReels.length; i++) {\n\t\t\t\tif(wildReels.indexOf(stickyReels[i]) == -1) {\n\t\t\t\t\twildReels.push(stickyReels[i]);\n\t\t\t\t\tscreen[stickyReels[i]] = [11,12,13];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(data.gameData.slotGameArray[0].payoutData.RacingWildsBlueWildDto != null) {\n\t\t\tlet stickyReels = data.gameData.slotGameArray[0].payoutData.RacingWildsBlueWildDto[0].blueWilds.stickyReels;\n\t\t\tfor(let i = 0; i < stickyReels.length; i++) {\n\t\t\t\tif(wildReels.indexOf(stickyReels[i]) == -1) {\n\t\t\t\t\twildReels.push(stickyReels[i]);\n\t\t\t\t\tscreen[stickyReels[i]] = [14,15,16];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(data.gameData.slotGameArray[0].payoutData.RacingWildsPinkWildDto != null) {\n\t\t\tlet stickyReels = data.gameData.slotGameArray[0].payoutData.RacingWildsPinkWildDto[0].pinkWilds.stickyReels;\n\t\t\tfor(let i = 0; i < stickyReels.length; i++) {\n\t\t\t\tif(wildReels.indexOf(stickyReels[i]) == -1) {\n\t\t\t\t\twildReels.push(stickyReels[i]);\n\t\t\t\t\tscreen[stickyReels[i]] = [17,18,19];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn super._initReels(data);\n\t}\n\t\n\t_getWinLines(spin) {\n\t\tlet payoutData = spin.payoutData;\n\t\tlet winLines = [];\n\n\t\tif(payoutData.SymbolPayout != null) {\n\t\t\tfor (let i = 0; i < payoutData.SymbolPayout.length; i++) {\n\t\t\t\twinLines.push({\n\t\t\t\t\tindex: i,\n\t\t\t\t\ttype: 1 + i,\n\t\t\t\t\tamount: payoutData.SymbolPayout[i].winAmount,\n\t\t\t\t\tstart: 0,\n\t\t\t\t\tlength: payoutData.SymbolPayout[i].reels.length,\n\t\t\t\t\ttiles: payoutData.SymbolPayout[i].tiles\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\twinLines.sort(function(a, b) {\n\t\t\treturn a.type - b.type;\n\t\t});\n\n\t\treturn winLines;\n\t}\n\t\n\t_handleFreeSpins(data) {\n\t\tlet fspins = data.gameData.slotGameArray.filter((spin) => { return spin.totalSpins > 0 });\n\n\t\tfspins = fspins.map(this._handleSingleFreeSpin.bind(this));\n\t\tthis.winDetails.freeSpins = fspins;\n\t}\n\n\t_handleWins(data) {\n\t\tlet lines = this._getWinLines(data.gameData.slotGameArray[0]);\n\t\tconsole.log(lines);\n\t\tlines.forEach((line) => {\n\t\t\tif(isNaN(this.winDetails.totalWin)) {\n\t\t\t\tthis.winDetails.totalWin = 0;\n\t\t\t}\n\n\t\t\tif(isNaN(this.winDetails.totalWin)) {\n\t\t\t\tthis.winDetails.totalWin = 0;\n\t\t\t}\n\n\t\t\tconsole.log(this.winDetails.totalWin, line.amount);\n\t\t\tthis.winDetails.totalWin += line.amount;\n\t\t});\n\n\t\tthis.winDetails.winLines = lines;\n\t}\n\n\t_getPayoutDataBonuses(gameDto, runScreenBonuses = true) {\n\t\tlet payoutData = gameDto.payoutData;\n\t\tlet bonuses = [];\n\n\t\tfor (let i = 0; i < payoutData.length; i++) {\n\t\t\tif (this.bonusDtos[payoutData[i].className]) {\n\t\t\t\tif (typeof this.bonusDtos[payoutData[i].className] == 'string') {\n\t\t\t\t\tif (payoutData[i].winAmount > 0) {\n\t\t\t\t\t\tbonuses.push({\n\t\t\t\t\t\t\ttype: this.bonusDtos[payoutData[i].className],\n\t\t\t\t\t\t\tamount: payoutData[i].winAmount\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else if (typeof this.bonusDtos[payoutData[i].className] == 'function' && runScreenBonuses) {\n\t\t\t\t\tthis.bonusDtos[payoutData[i].className].call(this, payoutData[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (gameDto.stakeMultiplier > 1) {\n\t\t\tbonuses.push({\n\t\t\t\ttype: 'multiplier',\n\t\t\t\tamount: gameDto.cumulativeWin - (gameDto.cumulativeWin / gameDto.stakeMultiplier)\n\t\t\t});\n\t\t}\n\n\t\treturn bonuses;\n\t}\n}\n\nmodule.exports = RacingWildsSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * ReelsOfEgyptParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass ReelsOfEgyptParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t/*\n\t\t\tline win 40\n\t\t\tbonus:\n\t\t\t\t- try #1: 90x\n\t\t\t\t- try #2: 80x\n\t\t\t\t- collect - total win 160\n\t\t */\n\n\t\tthis.bonusDtos[\"cayetano.games.slots.reelsofegypt.dto.ReelsOfEgyptBonus2Dto\"] = this._handlePyramidBonus;\n\n\t\tthis.pyramidBonus = null;\n\t\tthis.afterParseOperationsCalled = 0;\n\t\tthis.parseAdditionalResponses = true;\n\t}\n\n\t_handlePyramidBonus(bonusDto) {\n\t\tif (bonusDto.winAmount == 0) return;\n\t\tthis.pyramidBonus = bonusDto;\n\t}\n\n\t_afterParseOperations(data, index) {\n\t\tsuper._afterParseOperations(data, index);\n\n\t\tif (!this.pyramidBonus) return;\n\n\t\tif (!this.winDetails.otherWins) {\n\t\t\tthis.winDetails.otherWins = [];\n\t\t}\n\n\t\tconsole.log(this.winDetails.otherWins, this.pyramidBonus);\n\t\t// remove other pyramid bonuses\n\t\tthis.winDetails.otherWins = this.winDetails.otherWins.filter((win) => {\n\t\t\tif (!win.dto) return true;\n\t\t\tif (win.dto != this.pyramidBonus.className) return true;\n\t\t\treturn false;\n\t\t});\n\n\t\tthis.winDetails.otherWins.push({\n\t\t\ttype: 'bonus',\n\t\t\tamount: this.pyramidBonus.winAmount,\n\t\t\tdto: this.pyramidBonus.className\n\t\t});\n\n\t\tif (this.afterParseOperationsCalled++ == this.responses.length - 1) {\n\t\t\tthis.winDetails.totalWin += this.pyramidBonus.winAmount;\n\t\t}\n\t}\n\n\t_handleWins(data) {\n\t\tlet lines = this._getWinLines(data.gameData.slotGameArray[0]);\n\n\t\tlines.forEach((line) => {\n\t\t\tthis.winDetails.totalWin += line.amount\n\t\t});\n\n\t\tthis.winDetails.winLines = this.winDetails.winLines.concat(lines);\n\t}\n}\n\n\nmodule.exports = ReelsOfEgyptParser;\n/*\ncollect on first round\n{\"success\":true,\"result\":{\"history\":{\"responses\":[{\"user\":{\"balance\":{\"cash\":{\"atStart\":\"1270.40\",\"afterBet\":\"1268.40\",\"atEnd\":\"1268.40\"},\"freeBets\":{\"atStart\":\"0.00\",\"afterBet\":\"0.00\",\"atEnd\":\"0.00\"},\"bonus\":{\"atStart\":\"0.00\",\"afterBet\":\"0.00\",\"atEnd\":\"0.00\"}},\"bonuses\":[]},\"game\":{\"stake\":\"2.00\",\"win\":{\"lines\":\"0.00\",\"total\":\"0.00\"},\"choices\":{\"selected\":null,\"available\":[0,1]},\"gameData\":{\"slotGameArray\":[{\"winAmount\":210,\"className\":\"cayetano.games.slots.dto.SlotGameDto\",\"ticketId\":null,\"finished\":false,\"maxPayoutEnforced\":false,\"data\":null,\"userData\":null,\"cumulativeWinAmount\":210,\"reelsIndex\":0,\"result\":[45,2,19],\"screenSize\":3,\"screen\":[[14006,14008,14002],[14008,14004,14001],[14008,14004,14002]],\"reelSpinsLonger\":[],\"reelHasScatter\":[],\"payoutData\":[{\"winAmount\":40,\"className\":\"cayetano.games.slots.dto.SlotLineDataDto\",\"lineNum\":2,\"linePos\":[2,2,2],\"lineSymbols\":[14002,14001,14002],\"lineSize\":3,\"lineStart\":0,\"lineMultiplier\":1},{\"winAmount\":0,\"className\":\"cayetano.games.slots.reelsofegypt.dto.ReelsOfEgyptFourthReelDto\",\"stopPosition\":15,\"outcome\":-2,\"reelSet\":[1,2,1,3,1,2,1,3,1,2,1,5,1,3,1,-2,1,3,1,2,1,2,1,3,1,2,1,5,1,3,1,2,1,3,1,2,1,3,1,2,1,2,1,3,1,2,1,3,1,2,1,5,1,3,1,2,1,3,1,2,1,2,1,3,1,2,1,5,1,3,1,2,1,3,1,2,1,3,1,2]},{\"winAmount\":170,\"className\":\"cayetano.games.slots.reelsofegypt.dto.ReelsOfEgyptBonus2Dto\",\"bonusGameId\":2,\"chosenPyramids\":[3,4,7],\"chosenFaces\":[20,25,40],\"allPyramids\":[5,10,15,20,25,30,35,40,50,0],\"multiplier\":85},{\"winAmount\":0,\"className\":\"cayetano.games.slots.dto.SlotInputRequestDto\",\"userInput\":{\"value\":{\"choices\":[0,1]}},\"bonusGameId\":-2}],\"cumulativeNumSpins\":0,\"spinNum\":0,\"slotGameStickyData\":{\"stickyReels\":[],\"stickyPos\":[],\"stickySymbolIds\":[]},\"preSpinStates\":[0,0],\"postSpinStates\":[2,2],\"stakeMultiplier\":1,\"jackpotTriggerEventDtos\":null,\"preSpinDecompressedStates\":[[0],[0]],\"postSpinDecompressedStates\":[[2],[2]]}],\"sequence\":\"[]\"},\"hasState\":true},\"jackpots\":null},{\"user\":{\"balance\":{\"cash\":{\"atStart\":\"1268.40\",\"afterBet\":\"1268.40\",\"atEnd\":\"1648.40\"},\"freeBets\":{\"atStart\":\"0.00\",\"afterBet\":\"0.00\",\"atEnd\":\"0.00\"},\"bonus\":{\"atStart\":\"0.00\",\"afterBet\":\"0.00\",\"atEnd\":\"0.00\"}},\"bonuses\":[]},\"game\":{\"choices\":{\"selected\":\"0\",\"available\":[]},\"win\":{\"total\":\"380.00\",\"bonus\":\"170.00\"},\"gameData\":{\"slotGameArray\":[{\"winAmount\":170,\"className\":\"cayetano.games.slots.dto.SlotGameDto\",\"ticketId\":null,\"finished\":false,\"maxPayoutEnforced\":false,\"data\":null,\"userData\":null,\"cumulativeWinAmount\":170,\"reelsIndex\":0,\"result\":[45,2,19],\"screenSize\":3,\"screen\":[[14006,14008,14002],[14008,14004,14001],[14008,14004,14002]],\"reelSpinsLonger\":[],\"reelHasScatter\":[],\"payoutData\":[{\"winAmount\":0,\"className\":\"cayetano.games.slots.reelsofegypt.dto.ReelsOfEgyptFourthReelDto\",\"stopPosition\":15,\"outcome\":-2,\"reelSet\":[1,2,1,3,1,2,1,3,1,2,1,5,1,3,1,-2,1,3,1,2,1,2,1,3,1,2,1,5,1,3,1,2,1,3,1,2,1,3,1,2,1,2,1,3,1,2,1,3,1,2,1,5,1,3,1,2,1,3,1,2,1,2,1,3,1,2,1,5,1,3,1,2,1,3,1,2,1,3,1,2]},{\"winAmount\":170,\"className\":\"cayetano.games.slots.reelsofegypt.dto.ReelsOfEgyptBonus2Dto\",\"bonusGameId\":2,\"chosenPyramids\":[3,4,7],\"chosenFaces\":[20,25,40],\"allPyramids\":[5,10,15,20,25,30,35,40,50,0],\"multiplier\":85}],\"cumulativeNumSpins\":0,\"spinNum\":0,\"slotGameStickyData\":{\"stickyReels\":[],\"stickyPos\":[],\"stickySymbolIds\":[]},\"preSpinStates\":[0,0],\"postSpinStates\":[0,0],\"stakeMultiplier\":1,\"jackpotTriggerEventDtos\":null,\"preSpinDecompressedStates\":[[0],[0]],\"postSpinDecompressedStates\":[[0],[0]]}]},\"hasState\":true},\"jackpots\":null}],\"transactions\":{\"roundId\":15127,\"nextRoundId\":false,\"prevRoundId\":15074,\"startTime\":\"2017-10-26 08:45:20\",\"endTime\":\"2017-10-26 08:46:04\"}}}}\n */","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * RhinoRumbleSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass RhinoRumbleSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\n\t\tthis.bonusDtos[\"cayetano.games.slots.rhinorumble.dto.RhinoRumbleWinLineDto\"] = this._handleLineWinDto;\n\n\t\tthis.overrideLines = null;\n\t}\n\n\t_handleLineWinDto(dto) {\n\t\tthis.overrideLines = this._getWinLines(dto.bonusSpin);\n\t\tthis._handleWins({gameData:  {slotGameArray: [dto.bonusSpin]}});\n\t\tthis.data.game.reels = this._initReels({gameData:  {slotGameArray: [dto.bonusSpin]}});\n\t}\n\n\t_afterParseOperations(data) {\n\t\tsuper._afterParseOperations(data);\n\t\tif (this.overrideLines != null) {\n\t\t\tthis.winDetails.winLines = this.overrideLines;\n\t\t\tthis.overrideLines = null;\n\t\t}\n\t}\n}\n\nmodule.exports = RhinoRumbleSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * RobinHoodGoldenLootParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass RobinHoodGoldenLootParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\tthis.bonusDtos[\"cayetano.games.slots.RobinHoodGoldenLoot.dto.RobinHoodGoldenLootBonus1Dto\"] = this._handleMaximusFreeSpinsDto.bind(this);\n\t\tthis.freeSpinsMultiplier = 1;\n\t}\n\n\t_handleMaximusFreeSpinsDto(data) {\n\t\tthis.freeSpinsMultiplier = data.freeSpinParams.stakeMultiplier;\n\t}\n\n\t_handleSingleFreeSpin(spin) {\n\t\tvar multWinAmount = this.freeSpinsMultiplier > 1 ? spin.winAmount - (spin.winAmount / this.freeSpinsMultiplier) : 0;\n\n\t\tthis.winDetails.totalWin += spin.winAmount;\n\t\tvar spin = {\n\t\t\ttype: spin.spinNum,\n\t\t\tamount: spin.winAmount,\n\t\t\twinLines: this._getWinLines(spin),\n\t\t\totherWins: this._getPayoutDataBonuses(spin)\n\t\t};\n\n\t\tif (multWinAmount > 0) {\n\t\t\tspin.winLines = spin.winLines.map((line) => {\n\t\t\t\tline.amount /= this.freeSpinsMultiplier;\n\t\t\t\treturn line;\n\t\t\t});\n\t\t\tspin.otherWins.push({\n\t\t\t\ttype: 'multiplier',\n\t\t\t\tamount: multWinAmount\n\t\t\t});\n\t\t}\n\n\t\treturn spin;\n\t}\n\n\t_initReels(data) {\n\t\tvar screen = super._initReels(data);\n\n\t\tscreen.forEach((reel, idx) => {\n\t\t\treturn screen[idx] = reel.filter((symbol) => symbol < 99);\n\t\t});\n\n\t\tdata.reels = screen.filter((reel) => reel.length > 0);\n\n\t\treturn screen;\n\t}\n}\n\n\nmodule.exports = RobinHoodGoldenLootParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * RoyalGooseParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass RoyalGooseParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n\n\t_generateOutput() {\n\t\tvar output = super._generateOutput();\n\t\tvar lastSpin = this.data.game.gameData.slotGameArray[this.data.game.gameData.slotGameArray.length - 1];\n\n\t\toutput.reels = this._initReels(lastSpin);\n\t\t \n\t\treturn output;\n\t}\n\n\t_initReels(data) {\n\t\tlet reelsBuffer = data.gameData === undefined ? data.screen : data.gameData.slotGameArray[0].screen;\n\t\tlet reels = [];\n\n\t\tlet offset = Math.floor(reelsBuffer[0][0] / 100) * 100;\n\n\t\tfor (let i = 0; i < reelsBuffer.length; i++) {\n\t\t\treels[i] = reelsBuffer[i].map((symbol, row) => this._mapSymbol(i, row, symbol - offset));\n\t\t}\n\t\tdata.reels = reels;\n\t\treturn reels;\n\t}\n}\n\n\nmodule.exports = RoyalGooseParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * RubyWalshChampionsGoldParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass RubyWalshChampionsGoldParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t\tthis.bonusDtos[\"cayetano.games.slots.rubywalshchampionsgold.dto.RubyWalshChampionsGoldBonus7Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = RubyWalshChampionsGoldParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * RussianGlorySlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass RussianGlorySlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = RussianGlorySlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * SafariDreamParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass SafariDreamParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\tthis.bonusDtos[\"cayetano.games.slots.africantour.dto.AfricanTourBonus2Dto\"] = \"bonus\";\n\t}\n\n\t_getPayoutDataBonuses(gameDto, runScreenBonuses = true) {\n\t\tvar bonuses = super._getPayoutDataBonuses(gameDto, runScreenBonuses);\n\t\tvar tourBonusDto = null;\n\t\tgameDto.payoutData.forEach((data) => {\n\t\t\tif (data.className == \"cayetano.games.slots.africantour.dto.AfricanTourBonus2Dto\") {\n\t\t\t\ttourBonusDto = data;\n\t\t\t}\n\t\t});\n\t\tbonuses.forEach((bonus) =>{\n\t\t\tif (bonus.type == \"multiplier\" && tourBonusDto != null) {\n\t\t\t\tbonus.amount = gameDto.winAmount - tourBonusDto.winAmount;\n\t\t\t}\n\t\t});\n\t\treturn bonuses;\n\t}\n}\n\n\nmodule.exports = SafariDreamParser;","const CaySlotParser = require('../CaySlotParser');\n\n/**\n * GemBlastParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParser}\n */\nclass SantasChristmasGiftsSlotParser extends CaySlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\t\tthis.nonBonusDtoNames.push(\"SantasChristmatGiftsGiftinWinsDto\");\n\t}\n\n\t_generateOutput() {\n\t\tvar generateOutput = super._generateOutput();\n\t\tvar linkinBonusWinAmount = this._handleLinkinBonus(this.data);\n\t\tvar giftinBonusWinAmount = this._handleGiftinBonus(this.data);\n\t\tgenerateOutput.winDetails.otherWins.push({\"type\":\"bonus\",\"amount\":parseFloat(linkinBonusWinAmount)} );\n\t\tgenerateOutput.winDetails.otherWins.push({\"type\":\"instantWin\",\"amount\":parseFloat(giftinBonusWinAmount)} );\n\n\t\tgenerateOutput.transactions.totalWin = this.data.game.gameData.slotGameArray[this.data.game.gameData.slotGameArray.length - 1].accumulatedWinAmount;\n\t\tgenerateOutput.winDetails.totalWin = this.data.game.gameData.slotGameArray[this.data.game.gameData.slotGameArray.length - 1].accumulatedWinAmount;\n\t\t\n\t\treturn generateOutput;\n\t}\n\n\t_handleLinkinBonus(data) {\n\t\tvar linkinBonusWin = 0;\n\t\tlet slotGameArray = data.game.gameData.slotGameArray;\n\n\t\tfor (let i = 0; i < slotGameArray.length; i++) {\n\t\t\tif (slotGameArray[i].payoutData.SantasChristmasGiftsSpinDto != null && slotGameArray[i].payoutData.SantasChristmasGiftsSpinDto.lastSpin) {\n\t\t\t\tlinkinBonusWin = slotGameArray[i].payoutData.SantasChristmasGiftsSpinDto.winAmount;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn linkinBonusWin;\n\t}\n\n\t_handleGiftinBonus(data) {\n\t\tvar giftinBonusWin = 0;\n\t\tlet slotGameArray = data.game.gameData.slotGameArray;\n\n\t\tfor (let i = 0; i < slotGameArray.length; i++) {\n\t\t\tif (slotGameArray[i].payoutData.SantasChristmatGiftsGiftinWinsDto != null) {\n\t\t\t\tgiftinBonusWin = slotGameArray[i].payoutData.SantasChristmatGiftsGiftinWinsDto[0].winAmount;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn giftinBonusWin;\n\t}\n\n\t_initReels(data) {\n\t\tlet slotGameArray = data.gameData.slotGameArray;\n\t\tlet reels = [];\n\t\tlet mapPresent = [[],[],[],[],[]];\n\n\t\tfor (let i = 0; i < slotGameArray.length; i++) {\n\t\t\tif (slotGameArray[i].payoutData.SantasChristmasGiftsSpinDto != null) return;\n\n\t\t\tlet reelsBuffer = slotGameArray[i].screen;\n\n\t\t\tfor (let j = 0; j < reelsBuffer.length; j++) {\n\t\t\t\treels[j] = reelsBuffer[j].map((symbol, row) => {\n\t\t\t\t\tif (symbol == 2 && mapPresent[j][row] != 1) {\n\t\t\t\t\t\tmapPresent[j][row] = 1;\n\t\t\t\t\t\treturn this._mapSymbol(j, row, symbol, slotGameArray[i]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn this._mapSymbol(j, row, symbol, slotGameArray[i]);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tdata.reels = reels;\n\t\t\tthis.finalScreen = reels;\n\t\t}\n\t\treturn reels;\n\t}\n\n\t_mapSymbol(reel, row, symbolId, data) {\n\t\tif(symbolId == 2 && data != undefined && data.payoutData.SantasChristmasGiftsGiftDescriptorDto != undefined) {\n\t\t\tlet giftDescriptorDto = data.payoutData.SantasChristmasGiftsGiftDescriptorDto[0];\n\t\t\tlet dataIndex = data.result[reel];\n\t\t\tlet symbolIndex = dataIndex + row;\n\n\t\t\tfor (let i = 0; i < giftDescriptorDto.indices.length; i++) {\n\t\t\t\tif (symbolIndex == giftDescriptorDto.indices[i] && reel == giftDescriptorDto.reelsSet[i]) {\n\t\t\t\t\tif (giftDescriptorDto.values[i] == 1) {\n\t\t\t\t\t\tsymbolId = 10002;\n\t\t\t\t\t} else if (giftDescriptorDto.values[i] > 1 && giftDescriptorDto.values[i] <= 3) {\n\t\t\t\t\t\tsymbolId = 1002;\n\t\t\t\t\t} else if (giftDescriptorDto.values[i] > 3 && giftDescriptorDto.values[i] <= 7) {\n\t\t\t\t\t\tsymbolId = 102;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} \n\t\treturn symbolId;\n\t}\n\n\t_handleRespins(data) {\n\t\tthis.winDetails.respins = [];\n\t\tfor (let i = 1; i < data.gameData.slotGameArray.length; i++) {\n\t\t\tlet respin = data.gameData.slotGameArray[i];\n\t\t\tif(respin != undefined && respin.isRespin === true && respin.payoutData.SantasChristmasGiftsSpinDto == null) {\n\t\t\t\trespin.respinIndex = i - 1;\n\t\t\t\trespin = this._handleSingleRespin(respin);\n\t\t\t\tthis.winDetails.respins.push(respin);\n\t\t\t}\n\t\t}\n\n\t\tvar totalRespinsWinAmount = 0;\n\t\tthis.winDetails.respins.forEach((respin) => {\n\t\t\ttotalRespinsWinAmount += respin.amount;\n\t\t});\n\n\t\tif (totalRespinsWinAmount > 0) {\n\t\t\tthis.winDetails.totalWin += totalRespinsWinAmount;\n\t\t} else {\n\t\t\tthis.winDetails.respins = [];\n\t\t}\n\t}\n}\n\nmodule.exports = SantasChristmasGiftsSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * SantasSpinsParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass SantasSpinsParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\tthis.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t\tthis.bonusDtos[\"cayetano.games.slots.santa.dto.SantaSwapSymbolDto\"] = \"bonus\";\n\t\tthis.parseAdditionalResponses = true;\n\t}\n}\n\nmodule.exports = SantasSpinsParser;\n","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * ShamanSpinsParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass ShamanSpinsParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\tthis.bonusDtos[\"cayetano.games.slots.shamanspell.dto.ShamanSpellBonus2Dto\"] = this._handleWildShowerBonus;\n\n\t\tthis.reelsParsed = false;\n\t\tthis.linesParsed = false;\n\t}\n\n\t_initReels(data, useThisReels) {\n\t\tif (!useThisReels && this.reelsParsed) return data.reels;\n\t\tthis.reelsParsed = true;\n\t\tvar reels = super._initReels(data);\n\t\tdata.reels = reels.map(function(reel, index) {\n\t\t\tif (index == 0 || index == 4) {\n\t\t\t\treturn reel.slice(0, 3);\n\t\t\t}\n\t\t\treturn reel;\n\t\t});\n\t\treturn data.reels;\n\t}\n\n\t_handleWins(data, useThisData) {\n\t\tif (!useThisData && this.linesParsed) return;\n\t\tthis.linesParsed = true;\n\t\treturn super._handleWins(data);\n\t}\n\n\t_handleWildShowerBonus(dto) {\n\t\tlet respin = dto.bonusSpin;\n\t\tlet newGameData = {gameData: {slotGameArray: [respin]}};\n\n\t\tthis.data.game.reels = this._initReels(newGameData, true);\n\t\tthis._handleWins(newGameData, true);\n\t}\n}\n\n\nmodule.exports = ShamanSpinsParser;","const CaySlotParser = require('../CaySlotParser');\n\n/**\n * ShowtimeSpinnerSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParser}\n */\nclass ShowtimeSpinnerSlotParser extends CaySlotParser {\n\n\tconstructor(){\n\t\tsuper();\n        this.nonBonusDtoNames = [\"CumulativeSymbolPayout\", \"SymbolPayout\"];\t\n\t}\n\t\n\t_splitScreen(data) {\n\t\tdata.game.gameData.slotGameArray.forEach(sga => {\n\t\t\tlet screenCopy = [[], [], [], [], []];\n\t\t\tvar gridWidth = 5;\n\t\t\t\n\t\t\tfor (let i = 0; i < sga.screen.length; i++) {\n\t\t\t\tvar arrayIndex = i % gridWidth;\n\t\t\t\tscreenCopy[arrayIndex].push(sga.screen[i]);\n\t\t\t}\n\t\t\t\n\t\t\tsga.screen = screenCopy;\n\t\t});\n\t}\n\t\n\t_handleWins(data) {\n\t\tlet lines = this._getWinLinesInitialSpin(data.gameData.slotGameArray[0]);\n\n\t\tlines.forEach((line) => {\n\t\t\tthis.winDetails.totalWin += line.amount\n\t\t});\n\n\t\tthis.winDetails.winLines = lines;\n\t}\n\t\n\t_getWinLines(spin) {\n\t\treturn [];\n\t}\n\t\n\t_getWinLinesInitialSpin(spin) {\n\t\tlet winLines = [];\n\t\t\n\t\tlet payoutData = spin.payoutData;\n\t\tif(payoutData != undefined) {\n\t\t\tlet symbolPayout = null;\n\t\t\tsymbolPayout = payoutData.SymbolPayout;\n\t\t\t\n\t\t\tif (symbolPayout != null) {\n\t\t\t\tfor (let i = 0; i < symbolPayout.length; i++) {\n\t\t\t\t\tlet lineIndex = (symbolPayout[i].lineNum < 0 ? winLines.length : symbolPayout[i].id);\n\t\t\t\t\t\n\t\t\t\t\twinLines.push({\n\t\t\t\t\t\tindex: lineIndex,\n\t\t\t\t\t\ttype: 1 + lineIndex,\n\t\t\t\t\t\tamount: symbolPayout[i].multipliedWin,\n\t\t\t\t\t\ttiles: symbolPayout[i].tiles\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\twinLines.sort(function(a, b) {\n\t\t\t\t\treturn a.type - b.type;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn winLines;\n\t}\n\t\n\t_afterParseOperations(data) {\n\t\tdata.game.gameData.slotGameArray.forEach((i, spin) => {\n\t\t\tthis._handleShowtimeSpin(spin, i);\n\t\t});\n\t}\n\t\n\t_handleShowtimeSpin(data, respinNum) {\n\t\tvar result = [];\n\t\t\n\t\tfor (const property in data.payoutData) {\n\t\t\tif (property == \"SymbolPayout\") {\n\t\t\t\tvar payouts = data.payoutData[property];\n\t\t\t\tpayouts.forEach((p) => {\n\t\t\t\t\tresult.push(this._handleShowtimeContact(p, respinNum));\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\t\n\t_handleShowtimeContact(data, respinNum) {\n\t\treturn {\n\t\t\tamount: data.multipliedWin,\n\t\t\twinLines: [],\n\t\t\totherWins: [],\n\t\t\ttype: respinNum\n\t\t};\n\t}\n\n    _initReels(data) {\n\t\tthis.finalScreen = data.gameData.slotGameArray[data.gameData.slotGameArray.length - 1].screen;\n\t\t\n\t\treturn this.finalScreen;\n\t}\n}\n\nmodule.exports = ShowtimeSpinnerSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * SinbadsGoldSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass SinbadsGoldSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = SinbadsGoldSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * SkullsParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass SkullsParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n\n\t_initReels(data) {\n\t\tvar screen = super._initReels(data);\n\n\t\tscreen.forEach((reel, idx) => {\n\t\t\treturn screen[idx] = reel.filter((symbol) => symbol < 99);\n\t\t});\n\n\t\tdata.reels = screen;\n\n\t\treturn screen;\n\t}\n}\n\n\nmodule.exports = SkullsParser;","const CaySlotParser = require('../CaySlotParser');\n\n/**\n * SlottingSlopesParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParser}\n */\nclass SlottingSlopesSlotParser extends CaySlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\t}\n\n\t_beforeParseOperations(data) {\n\t\tthis._handlePayoutDataBonuses(data.game.gameData.slotGameArray[0]);\n\n\t\tlet payoutData = data.game.gameData.slotGameArray[0].payoutData;\n\n\t\tif (payoutData.SlotRespinWrapper != undefined &&\n\t\t\tpayoutData.SlotRespinWrapper[0].respin != undefined) {\n\n\t\t}\n\t}\n\n\t_splitScreen(data) {\n\t\tlet payoutData = data.game.gameData.slotGameArray[0].payoutData;\n\n\t\tif (payoutData.SlotRespinWrapper != undefined &&\n\t\t\tpayoutData.SlotRespinWrapper[0].respin != undefined) {\n\t\t\t\tdata.game.gameData.slotGameArray[0].screen = payoutData.SlotRespinWrapper[0].respin.screen;\n\t\t}\n\n\t\tsuper._splitScreen(data);\n\t}\n}\n\nmodule.exports = SlottingSlopesSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * SmoothieSmashSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass SmoothieSmashSlotParser extends CaySlotParserLegacy {\n\t_flattenNudges(gameDto, index = 0) {}\n\t_handleNudges(data) {}\n\n\t_handleFreeSpins(data) {\n\t\tlet fspins = data.gameData.slotGameArray.filter((spin) => { return spin.spinNum > 0 });\n\n\t\tfspins = fspins.map(this._handleSingleFreeSpin.bind(this));\n\t\tthis.winDetails.freeSpins = fspins;\n\t}\n\n\t_handleRespins(data) {\n\t\tthis.winDetails.respins = this._getFuegoRespins(data.gameData.slotGameArray[0]);\n\t\tthis.winDetails.respins.forEach((respin) => this.winDetails.totalWin += respin.amount);\n\t}\n\n\t_handleSingleFreeSpin(spin) {\n\t\tthis.winDetails.totalWin += spin.winAmount;\n\t\tvar pdatabonuses = this._getPayoutDataBonuses(spin);\n\t\tvar respins = this._getFuegoRespins(spin);\n\t\treturn {\n\t\t\ttype: spin.spinNum,\n\t\t\tamount: spin.winAmount,\n\t\t\twinLines: this._getWinLines(spin),\n\t\t\totherWins: this._getPayoutDataBonuses(spin),\n\t\t\trespins: respins\n\t\t};\n\t}\n\n\t_getLinesWinAmount(gameDto) {\n\t\treturn gameDto.payoutData\n\t\t\t\t\t\t.filter((data) => data.className == \"cayetano.games.slots.dto.SlotLineDataDto\")\n\t\t\t\t\t\t.reduce((accum, elem) => accum + elem.winAmount, 0);\n\t}\n\n\t_getFuegoRespins(data) {\n\t\tvar respins = this._flattenRespins(data);\n\t\tvar result = [];\n\n\t\tfor (var i = 1; i < respins.length; i++) {\n\t\t\tlet respin = respins[i];\n\t\t\tlet respinParsed = this._getSingleRespin(respin);\n\n\t\t\tvar linesAmount = this._getLinesWinAmount(respin);\n\n\t\t\trespinParsed.amount = linesAmount;\n\t\t\trespinParsed.otherWins = [];\n\t\t\tif (respinParsed.amount > 0 && respin.stakeMultiplier > 1) {\n\t\t\t\trespinParsed.otherWins.push({\n\t\t\t\t\ttype: 'multiplier',\n\t\t\t\t\tamount: linesAmount * respin.stakeMultiplier - linesAmount\n\t\t\t\t});\n\t\t\t\trespinParsed.amount = linesAmount * respin.stakeMultiplier\n\t\t\t}\n\n\t\t\tresult.push(respinParsed);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t_flattenRespins(gameDto, index = 0) {\n\t\tvar respins = [gameDto];\n\t\tgameDto.payoutData.forEach((data) => {\n\t\t\tif (data.className == 'cayetano.games.slots.dto.SlotGameDto') {\n\t\t\t\tdata.respinIndex = index++;\n\t\t\t\t// respins.push(data);\n\t\t\t\trespins = respins.concat(this._flattenRespins(data, index));\n\t\t\t}\n\t\t});\n\t\treturn respins;\n\t}\n\n\t_getSingleRespin(data) {\n\t\treturn {\n\t\t\ttype: data.respinIndex,\n\t\t\tamount: data.winAmount,\n\t\t\twinLines: this._getWinLines(data),\n\t\t\totherWins: this._getPayoutDataBonuses(data)\n\t\t};\n\t}\n}\n\n\nmodule.exports = SmoothieSmashSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * SolarSnapParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass SolarSnapParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\t\tthis.lastRespinAmount = 0;\n\t}\n\n\t_initReels(data) {\n\t\tvar reels = super._initReels(data);\n\n\t\tvar newReels = [];\n\n\t\tvar reel = 0;\n\t\treels.forEach(function(s, index) {\n\t\t\tif (reel == newReels.length) {\n\t\t\t\tnewReels.push([]);\n\t\t\t}\n\t\t\tnewReels[reel].push(s[0]);\n\t\t\tif (++reel > 4) reel = 0;\n\t\t});\n\n\t\treturn data.reels = newReels;\n\t}\n\n\t_afterParseOperations(data) {\n\t\tvar initialSpin = data.game.gameData.slotGameArray[0];\n\t\tthis._handleSolarSnapRespins(initialSpin);\n\t}\n\n\t_handleSolarSnapRespins(data) {\n\t\tdata.payoutData.forEach((pData) => {\n\t\t\tif (pData.className == \"cayetano.games.slots.solarsnapremake.dto.SolarSnapRemakeSlotContactDataDto\") {\n\t\t\t\tthis._handleSolarSnapContact(pData);\n\t\t\t}\n\t\t\tif (pData.className == \"cayetano.games.slots.dto.SlotGameDto\") {\n\t\t\t\tthis._handleSolarSnapRespins(pData);\n\t\t\t}\n\t\t});\n\t}\n\n\t_handleSolarSnapContact(data) {\n\t\tif (!this.winDetails.respins) this.winDetails.respins = [];\n\t\tthis.winDetails.respins.push({\n\t\t\tamount: data.respinCumulativeWinAmount - this.lastRespinAmount,\n\t\t\twinLines: [],\n\t\t\totherWins: [],\n\t\t\ttype: this.winDetails.respins.length + 1\n\t\t});\n\t\tthis.winDetails.totalWin += this.winDetails.respins[this.winDetails.respins.length - 1].amount;\n\t\tthis.lastRespinAmount = data.respinCumulativeWinAmount;\n\t};\n\n\t_flattenNudges(gameDto, index = 0) {\n\t}\n\n\t_handleNudges(data) {\n\t}\n}\n\n\nmodule.exports = SolarSnapParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n\n/**\n * SonsOfAsgardSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass SonsOfAsgardSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\t\tdelete this.bonusDtos['cayetano.games.slots.dto.bonuses.SlotRespinWrapperDto']\n\t\tthis._reelsInitialized = false;\n\t\tthis._winsHandled = false;\n\t}\n\n\t_beforeParseOperations(data) {\n\t\tthis._handleShuffleBonus(data.game);\n\t\treturn super._beforeParseOperations(data);\n\t}\n\n\t_handleWins(data) {\n\t\tif (!this._winsHandled) {\n\t\t\tthis._winsHandled = true;\n\t\t\tsuper._handleWins(data);\n\t\t}\n\t}\n\n\t_handleShuffleBonus(data) {\n\t\tlet payoutData = data.gameData.slotGameArray[0].payoutData;\n\t\tpayoutData = payoutData.filter((pdata) => {\n\t\t\tif (pdata.className == 'cayetano.games.slots.dto.bonuses.SlotRespinWrapperDto') return true;\n\t\t\treturn false;\n\t\t});\n\t\tif (payoutData.length == 0) return;\n\t\tlet respin = payoutData[0].respin;\n\t\tlet newGameData = {gameData: {slotGameArray: [respin]}};\n\n\t\tthis.data.game.reels = this._initReels(newGameData);\n\t\tthis.winDetails.winLines = this._getWinLines(respin);\n\t\tthis._handleWins(newGameData);\n\t\tthis._reelsInitialized = true;\n\t}\n\n\t_initReels(data) {\n\t\tvar reels;\n\t\tif (this._reelsInitialized) {\n\t\t\treels = data.reels;\n\t\t} else {\n\t\t\treels = super._initReels(data).map((reel) => reel.slice(2,6));\n\t\t}\n\t\treturn data.reels = reels;\n\t}\n}\n\n\nmodule.exports = SonsOfAsgardSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * SparklingJackpotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass SparklingJackpotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t\tthis.bonusDtos[\"cayetano.games.slots.dto.bonuses.SlotInstantWinBonusDataDto\"] = \"bonus\";\n\t\tthis.bonusDtos[\"cayetano.games.slots.diamondfactory.dto.DiamondFactoryCrossDto\"] = \"bonus\";\n\t}\n\n\t_initReels(data) {\n\t\tvar reels = super._initReels(data);\n\n\t\tvar newReels = [];\n\n\t\tvar reel = 0;\n\t\treels.forEach(function(s, index) {\n\t\t\tif (reel == newReels.length) {\n\t\t\t\tnewReels.push([]);\n\t\t\t}\n\t\t\tnewReels[reel].push(s[0]);\n\t\t\tif (++reel > 6) reel = 0;\n\t\t});\n\n\t\treturn data.reels = newReels;\n\t}\t\n\n\t_flattenNudges(gameDto, index = 0) {\n\t\tlet respins = [];\n\n\t\tif (index == 0) {\n\t\t\tvar data = gameDto;\n\t\t\tdata.respinIndex = index++;\n\t\t\trespins.push(data);\n\t\t}\n\n\t\tgameDto.payoutData.forEach((data) => {\n\t\t\tif (data.className == \"cayetano.games.slots.dto.SlotGameDto\") {\n\t\t\t\tdata.respinIndex = index++;\n\t\t\t\trespins.push(data);\n\t\t\t\trespins = respins.concat(this._flattenNudges(data, index));\n\t\t\t}\n\t\t})\n\n\t\treturn respins;\n\t}\n}\n\nmodule.exports = SparklingJackpotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * SphinxGoldSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass SphinxGoldSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = SphinxGoldSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * SuperFuegoParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass SuperFuegoParser extends CaySlotParserLegacy {\n\n\tconstructor() {\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n\n\t_flattenNudges(gameDto, index = 0) {}\n\t_handleNudges(data) {}\n\n\t_handleFreeSpins(data) {\n\t\tlet fspins = data.gameData.slotGameArray.filter((spin) => { return spin.spinNum > 0 });\n\n\t\tfspins = fspins.map(this._handleSingleFreeSpin.bind(this));\n\t\tthis.winDetails.freeSpins = fspins;\n\t}\n\n\t_handleRespins(data) {\n\t\tthis.winDetails.respins = this._getFuegoRespins(data.gameData.slotGameArray[0]);\n\t\tthis.winDetails.respins.forEach((respin) => this.winDetails.totalWin += respin.amount);\n\t}\n\n\t_handleSingleFreeSpin(spin) {\n\t\tthis.winDetails.totalWin += spin.winAmount;\n\t\tvar pdatabonuses = this._getPayoutDataBonuses(spin);\n\t\tvar respins = this._getFuegoRespins(spin);\n\t\treturn {\n\t\t\ttype: spin.spinNum,\n\t\t\tamount: spin.winAmount,\n\t\t\twinLines: this._getWinLines(spin),\n\t\t\totherWins: this._getPayoutDataBonuses(spin),\n\t\t\trespins: respins\n\t\t};\n\t}\n\n\t_getLinesWinAmount(gameDto) {\n\t\treturn gameDto.payoutData\n\t\t\t\t\t\t.filter((data) => data.className == \"cayetano.games.slots.dto.SlotLineDataDto\")\n\t\t\t\t\t\t.reduce((accum, elem) => accum + elem.winAmount, 0);\n\t}\n\n\t_getFuegoRespins(data) {\n\t\tvar respins = this._flattenRespins(data);\n\t\tvar result = [];\n\n\t\tfor (var i = 1; i < respins.length; i++) {\n\t\t\tlet respin = respins[i];\n\t\t\tlet respinParsed = this._getSingleRespin(respin);\n\n\t\t\tvar linesAmount = this._getLinesWinAmount(respin);\n\n\t\t\trespinParsed.amount = linesAmount;\n\t\t\trespinParsed.otherWins = [];\n\t\t\tif (respinParsed.amount > 0 && respin.stakeMultiplier > 1) {\n\t\t\t\trespinParsed.otherWins.push({\n\t\t\t\t\ttype: 'multiplier',\n\t\t\t\t\tamount: linesAmount * respin.stakeMultiplier - linesAmount\n\t\t\t\t});\n\t\t\t\trespinParsed.amount = linesAmount * respin.stakeMultiplier\n\t\t\t}\n\n\t\t\tresult.push(respinParsed);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t_flattenRespins(gameDto, index = 0) {\n\t\tvar respins = [gameDto];\n\t\tgameDto.payoutData.forEach((data) => {\n\t\t\tif (data.className == 'cayetano.games.slots.dto.SlotGameDto') {\n\t\t\t\tdata.respinIndex = index++;\n\t\t\t\t// respins.push(data);\n\t\t\t\trespins = respins.concat(this._flattenRespins(data, index));\n\t\t\t}\n\t\t});\n\t\treturn respins;\n\t}\n\n\t_getSingleRespin(data) {\n\t\treturn {\n\t\t\ttype: data.respinIndex,\n\t\t\tamount: data.winAmount,\n\t\t\twinLines: this._getWinLines(data),\n\t\t\totherWins: this._getPayoutDataBonuses(data)\n\t\t};\n\t}\n}\n\n\nmodule.exports = SuperFuegoParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * ThaiThaiSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass ThaiThaiSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = ThaiThaiSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * TheGreatWildParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass TheGreatWildParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.bonusDtos['cayetano.games.slots.thegreatwild.dto.TheGreatWildBonus1Dto'] = 'bonus';\n\t\tthis.bonusDtos['cayetano.games.slots.thegreatwild.dto.TheGreatWildCarDto'] = this._handleCarBonus.bind(this);\n\t\tdelete this.bonusDtos['cayetano.games.slots.dto.bonuses.SlotRespinWrapperDto'];\n\t}\n\n\t_afterParseOperations(data) {\n\t\tthis._handleWilds(data.game);\n\t}\n\n\t// this overrides the freeSpins array\n\t_handleFreeSpins() {}\n\t_handleCarBonus(data) {\n\t\tthis.winDetails.freeSpins = data.blackSpinsPayouts.map((payout, index) => {\n\t\t\tthis.winDetails.totalWin += payout;\n\t\t\treturn {\n\t\t\t\ttype: index + 1,\n\t\t\t\tamount: payout,\n\t\t\t\twinLines: [],\n\t\t\t\totherWins: []\n\t\t\t};\n\t\t});\n\t}\n\n\t_handleWilds(data) {\n\t\tlet payoutData = data.gameData.slotGameArray[0].payoutData;\n\t\tpayoutData = payoutData.filter((pdata) => {return pdata.className == 'cayetano.games.slots.dto.bonuses.SlotRespinWrapperDto'});\n\t\tif (payoutData.length == 0) return;\n\t\tlet respin = payoutData[0].respin;\n\t\tlet newGameData = {gameData: {slotGameArray: [respin]}};\n\n\t\tthis.data.game.reels = this._initReels(newGameData);\n\t\tthis.winDetails.winLines = this._getWinLines(respin);\n\t\tif (!this.winDetails.otherWins) {\n\t\t\tthis.winDetails.otherWins = [];\n\t\t}\n\t\tvar respinBonuses = this._getPayoutDataBonuses(respin);\n\t\tthis.winDetails.otherWins = this.winDetails.otherWins.concat(respinBonuses);\n\t\trespinBonuses.forEach((bonus) => {\n\t\t\tthis.winDetails.totalWin += bonus.amount;\n\t\t});\n\t\tthis._handleWins(newGameData);\n\t\tthis._handleWilds(newGameData)\n\t}\n\n\t_mapSymbol(reel, row, symbolId) {\n\t\tif (symbolId == 0) return 17;\n\t\telse if (symbolId == 6) {\n\t\t\tif (reel == 2) return 18;\n\t\t\tif (reel > 2) return 16;\n\t\t\telse return 15;\n\t\t}\n\t\telse if (symbolId > 6) return symbolId - 1;\n\n\t\treturn symbolId;\n\t}\n}\n\n\nmodule.exports = TheGreatWildParser;","const CaySlotParser = require('../CaySlotParser');\n\n/**\n * TheHeistSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParser}\n */\nclass TheHeistSlotParser extends CaySlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\t}\n\n\t_handleWins(data) {\n\t\tif(data.gameData.slotGameArray[0].payoutData.TheHeistFreeSpinBonusDataDto == null) {\n\t\t\tlet lines = this._getWinLines(data.gameData.slotGameArray[0]);\n\t\t\tlines.forEach((line) => {\n\t\t\t\tthis.winDetails.totalWin += line.amount\n\t\t\t});\n\t\n\t\t\tthis.winDetails.winLines = lines;\n\t\t}\n\t}\n}\n\nmodule.exports = TheHeistSlotParser;","const CaySlotParser = require('../CaySlotParser');\n\n/**\n * TowerOfWealthSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParser}\n */\nclass TowerOfWealthSlotParser extends CaySlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\t}\t\n\n\t_initReels(data) {\n\t\tlet modifiedReels = super._initReels(data);\n\t\tconsole.log(modifiedReels);\n\t\tif(data.gameData.slotGameArray[0].payoutData.TowerOfWealthLinesMultipliersDto != null) {\n\t\t\tfor(let reel = 0; reel < 5; reel++) {\n\t\t\t\tfor(let row = 0; row < 5; row++) {\n\t\t\t\t\tif(modifiedReels[reel][row] == 2) {\n\t\t\t\t\t\tlet multId = data.gameData.slotGameArray[0].payoutData.TowerOfWealthLinesMultipliersDto[0].wildPositions.indexOf(row * 5 + reel);\n\t\t\t\t\t\tif(multId != -1) {\n\t\t\t\t\t\t\tmodifiedReels[reel][row] *= 10;\n\t\t\t\t\t\t\tif(data.gameData.slotGameArray[0].payoutData.TowerOfWealthLinesMultipliersDto[0].wildMultipliers[multId] == 2) modifiedReels[reel][row] *= 10;\n\t\t\t\t\t\t\telse if(data.gameData.slotGameArray[0].payoutData.TowerOfWealthLinesMultipliersDto[0].wildMultipliers[multId] == 3) modifiedReels[reel][row] *= 100; \n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn modifiedReels;\n\t}\n}\n\nmodule.exports = TowerOfWealthSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * TrickOTreatParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass TrickOTreatParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\tthis.bonusDtos[\"cayetano.games.slots.trickotreat.dto.TrickOTreatBonus1Dto\"] = \"bonus\";\n\t}\n\n\t_generateOutput() {\n\t\tvar output = super._generateOutput();\n\t\tvar lastSpin = this.data.game.gameData.slotGameArray[this.data.game.gameData.slotGameArray.length - 1];\n\n\t\toutput.reels = this._initReels(lastSpin);\n\t\t \n\t\treturn output;\n\t}\n\n\t_initReels(data) {\n\t\tlet reelsBuffer = data.gameData === undefined ? data.screen : data.gameData.slotGameArray[0].screen;\n\t\tlet reels = [];\n\n\t\tlet offset = Math.floor(reelsBuffer[0][0] / 100) * 100;\n\n\t\tfor (let i = 0; i < reelsBuffer.length; i++) {\n\t\t\treels[i] = reelsBuffer[i].map((symbol, row) => this._mapSymbol(i, row, symbol - offset));\n\t\t}\n\t\tdata.reels = reels;\n\t\treturn reels;\n\t}\n}\n\n\nmodule.exports = TrickOTreatParser;","const CaySlotParser = require('../CaySlotParser');\n\n/**\n * WorldOfWizardsSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParser}\n */\nclass TumbleDwarfAndTheLibraryOfSecretsSlotParsers extends CaySlotParser {\n\n\tconstructor() {\n\t\tsuper();\n\t}\n\n\t_initReels(data) {\n\t\tlet lastSlotGame = data.gameData.slotGameArray[data.gameData.slotGameArray.length - 1];\n\t\tlet reelsBuffer = lastSlotGame.screen;\n\t\t\n\t\tlet reels = [];\n\n\t\tfor (let i = 0; i < reelsBuffer.length; i++) {\n\t\t\tlet reelBuffer = reelsBuffer[i];\n\t\t\tif (lastSlotGame.currentSpin == 15 && lastSlotGame.totalSpins == 15) { // * last free spins screen\n\t\t\t\treelBuffer = reelsBuffer[i].slice(0, -3);\n\t\t\t}\n\t\t\treels[i] = reelBuffer.map((symbol, row) => this._mapSymbol(i, row, symbol));\n\t\t}\n\t\tdata.reels = reels;\n\t\tthis.finalScreen = reels;\n\t\treturn reels;\n\t}\n}\n\nmodule.exports = TumbleDwarfAndTheLibraryOfSecretsSlotParsers;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * TumbleDwarfMysteryGoldSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass TumbleDwarfMysteryGoldSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = TumbleDwarfMysteryGoldSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * TumbleDwarfParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass TumbleDwarfParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\tthis.bonusDtos[\"cayetano.games.slots.tumbledwarf.dto.TumbleDwarfWinLineDto\"] = this._handleLuckyLineBonus.bind(this);\n\t\tthis.overrideLines = null;\n\t\tthis.overrideReels = null;\n\t}\n\n\t_handleLuckyLineBonus(dto) {\n\t\tthis.overrideLines = this._getWinLines(dto.bonusSpin);\n\t\tthis._handleWins({gameData: {slotGameArray: [dto.bonusSpin]}});\n\t\tif (dto.bonusSpin.stakeMultiplier > 1) {\n\t\t\tlet notMultipliedAmount = dto.winAmount / dto.bonusSpin.stakeMultiplier;\n\t\t\tthis.winDetails.otherWins.push({ type: 'multiplier', amount: dto.winAmount - notMultipliedAmount });\n\t\t\tthis.winDetails.totalWin += dto.winAmount - notMultipliedAmount;\n\t\t}\n\t\tthis.overrideReels = this._initReels({gameData: {slotGameArray: [dto.bonusSpin]}});\n\t}\n\n\t_afterParseOperations(data) {\n\t\tsuper._afterParseOperations(data);\n\t\tif (this.overrideLines != null) {\n\t\t\tthis.winDetails.winLines = this.overrideLines;\n\t\t\tthis.overrideLines = null;\n\t\t}\n\t\tif (this.overrideReels != null) {\n\t\t\tthis.data.game.reels = this.overrideReels;\n\t\t\tthis.overrideReels = null;\n\t\t}\n\t}\n}\n\nmodule.exports = TumbleDwarfParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * WildEgyptParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass WildEgyptParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n\n\t_initReels(data) {\n\t\tlet reelsBuffer = data.gameData === undefined ? data.screen : data.gameData.slotGameArray[0].screen;\n\t\tlet screen = [];\n\n\t\tlet offset = Math.floor(reelsBuffer[0][0] / 100) * 100;\n\n\t\tfor (let i = 0; i < reelsBuffer.length; i++) {\n\t\t\tscreen[i] = reelsBuffer[i].map((symbol, row) => this._mapSymbol(i, row, symbol - offset));\n\t\t}\n\t\tdata.reels = screen;\n\n\t\tfor (var i = 0; i < screen.length; i++) {\n\t\t\tfor (var j = 0; j < screen[i].length; j++) {\n\t\t\t\tif (screen[i][j] == 99) {\n\t\t\t\t\tscreen[i][j] = 11;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn screen;\n\t}\n\n\t_handleNudges(data) {\n\t\tvar initialRespin = data.gameData.slotGameArray[0];\n\t\tvar respins = this._extractRespins(initialRespin);\n\n\t\trespins.shift();\n\n\t\tif (!this.winDetails.respins) this.winDetails.respins = [];\n\n\t\trespins.forEach((respin, index) => {\n\t\t\trespin.respinIndex = index;\n\t\t\tthis.winDetails.respins.push(this._handleSingleRespin(respin));\n\t\t});\n\t}\n\n\t_handleSingleRespin(data) {\n\t\tthis.data.game.reels = this._initReels(data);\n\t\tvar respin = {\n\t\t\ttype: data.respinIndex + 1,\n\t\t\tamount: 0,\n\t\t\twinLines: this._getWinLines(data),\n\t\t\totherWins: []\n\t\t};\n\t\t\n\t\tvar linesWinAmount = 0;\n\t\trespin.winLines.forEach((line) => linesWinAmount += line.amount);\n\n\t\trespin.amount += linesWinAmount;\n\n\t\tif (data.stakeMultiplier > 1) {\n\t\t\tvar multAmount = linesWinAmount * (data.stakeMultiplier - 1);\n\t\t\tif (multAmount > 0) {\n\t\t\t\trespin.amount += multAmount;\n\n\t\t\t\trespin.otherWins.push({\n\t\t\t\t\ttype: 'multiplier',\n\t\t\t\t\tamount: multAmount\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tdata.payoutData.forEach((pdata) => {\n\t\t\tif (pdata.className == \"cayetano.games.slots.dto.bonuses.SlotPrizeBonusDataDto\") {\n\t\t\t\trespin.otherWins.push({\n\t\t\t\t\ttype: \"bonus\",\n\t\t\t\t\tamount: pdata.winAmount\n\t\t\t\t});\n\t\t\t\trespin.amount += pdata.winAmount;\n\t\t\t}\n\t\t});\n\n\t\tthis.winDetails.totalWin += respin.amount;\n\n\t\treturn respin;\n\t}\n\n\t_extractRespins(respin) {\n\t\tvar result = [];\n\n\t\trespin.payoutData.forEach((data) => {\n\t\t\tif (data.className == \"cayetano.games.slots.dto.SlotGameDto\") {\n\t\t\t\tresult = result.concat(this._extractRespins(data));\n\t\t\t}\n\t\t});\n\n\t\tresult.unshift(respin);\n\n\t\treturn result;\n\t}\n}\n\nmodule.exports = WildEgyptParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * WildSheriffParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass WildSheriffParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\tthis.bonusDtos[\"cayetano.games.slots.wildsheriff.dto.WildSheriffBonus2Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = WildSheriffParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * WildStarsSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass WildStarsSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = WildStarsSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * WishAWinSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass WishAWinSlotParser extends CaySlotParserLegacy {\n\t_handleWins(data) {\n\t}\n\t\n\t_initReels(data) {\n\t\tvar respins = this._extractRespins(data.gameData.slotGameArray[data.gameData.slotGameArray.length -1]);\n\t\tlet reelsBuffer = respins[0].screen;\n\t\tlet reels = [];\n\n\t\tlet offset = Math.floor(reelsBuffer[0][0] / 100) * 100;\n\n\t\tfor (let i = 0; i < reelsBuffer.length; i++) {\n\t\t\treels[i] = reelsBuffer[i].map((symbol, row) => this._mapSymbol(i, row, symbol - offset));\n\t\t}\n\t\tdata.reels = reels;\n\t\treturn reels;\n\t}\n\n\t_handleRespins(data) {\n\t\tvar initialRespin = data.gameData.slotGameArray[0];\n\t\tvar respins = this._extractRespins(initialRespin);\n\n\t\tif (!this.winDetails.respins) this.winDetails.respins = [];\n\t\t\n\t\t\n\t\trespins.forEach((respin, index) => {\n\t\t\trespin.respinIndex = index;\n\t\t\tthis._extractLineDto(respin);\n\t\t});\n\n\t\tinitialRespin.screen = respins[respins.length - 1].screen;\n\t\tthis.winDetails.totalWin = initialRespin.cumulativeWinAmount;\n\t}\n\n\t_extractLineDto(slotGameDto) {\n\t\tvar lineDto = null;\n\t\tlet cumulativeLinesWinAmount = 0;\n\n\t\tslotGameDto.payoutData.forEach((data) => {\n\t\t\tif (data.className == \"cayetano.games.slots.dto.SlotLineDataDto\") {\n\t\t\t\tlineDto = data;\n\t\t\t\tcumulativeLinesWinAmount += lineDto.winAmount;\n\t\t\t}\n\t\t});\n\n\t\tif (!lineDto) return;\n\n\t\tif (!this.winDetails.respins) {\n\t\t\tthis.winDetails.respins = [];\n\t\t}\n\n\t\tvar respin = this._handleSingleRespin(slotGameDto);\n\t\trespin.amount = cumulativeLinesWinAmount;\n\n\t\tthis.winDetails.respins.push(respin);\n\t}\n\n\t_extractRespins(respin) {\n\t\tvar result = [];\n\n\t\trespin.payoutData.forEach((data) => {\n\t\t\tif (data.className == \"cayetano.games.slots.dto.bonuses.SlotRespinWrapperDto\") {\n\t\t\t\tresult = result.concat(this._extractRespins(data.respin));\n\t\t\t}\n\t\t});\n\n\t\tresult.push(respin);\n\n\t\treturn result;\n\t}\n\n\t_getPayoutDataBonuses(gameDto, runScreenBonuses = true) {\n\t\treturn [];\n\t}\n}\n\n\nmodule.exports = WishAWinSlotParser;","const CaySlotParser = require('../CaySlotParser');\n\n/**\n * WorldOfWizardsSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParser}\n */\nclass WorldOfWizardsSlotParser extends CaySlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\t}\n\n\t_handleRespins(data) {\n\t\tthis.winDetails.respins = [];\n\t\tvar totalRespinsWinAmount = 0;\n\n\t\tfor (let i = 1; i < data.gameData.slotGameArray.length; i++) {\n\t\t\tlet respin = data.gameData.slotGameArray[i];\n\t\t\tif(respin != undefined && respin.isRespin === true) {\n\t\t\t\trespin.respinIndex = i - 1;\n\t\t\t\trespin = this._handleSingleRespin(respin);\n\t\t\t\tif(data.gameData.slotGameArray[i].currentSpin > 0) {\n\t\t\t\t\tlet spinId = data.gameData.slotGameArray[i].currentSpin - 1;\n\t\t\t\t\tif(this.winDetails.freeSpins[spinId].respins === undefined) this.winDetails.freeSpins[spinId].respins = [];\n\t\t\t\t\tthis.winDetails.freeSpins[spinId].respins.push(respin);\n\t\t\t\t\ttotalRespinsWinAmount += respin.amount;\n\t\t\t\t}\n\t\t\t\telse this.winDetails.respins.push(respin);\n\t\t\t}\n\t\t}\n\n\t\tthis.winDetails.respins.forEach((respin) => {\n\t\t\ttotalRespinsWinAmount += respin.amount;\n\t\t});\n\t\t\n\t\tif (totalRespinsWinAmount > 0) {\n\t\t\tthis.winDetails.totalWin += totalRespinsWinAmount;\n\t\t} else {\n\t\t\tthis.winDetails.respins = [];\n\t\t}\n\t}\n\n\t\n}\n\nmodule.exports = WorldOfWizardsSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * WormKingSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass WormKingSlotParser extends CaySlotParserLegacy {\n\n\tstatic get wkSoloAttackDto() { return \"cayetano.games.slots.wormking.dto.WormKingSoloAttackDto\"; }\n\tstatic get wkCallToArmsDto() { return \"cayetano.games.slots.wormking.dto.WormKingCallToArmsDto\"; }\n\tstatic get wkFruitBombDto() { return \"cayetano.games.slots.wormking.dto.WormKingFruitBombDto\"; }\n\tstatic get wkKingBonusDto() { return \"cayetano.games.slots.wormking.dto.WormKingKingDto\"; }\n\tstatic get wkRandomWildsDto() { return \"cayetano.games.slots.wormking.dto.WormKingRandomWildsDto\"; }\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\tthis.bonusIds = {};\n\t\tthis.bonusIds[WormKingSlotParser.wkSoloAttackDto] = \"solo_attack_bonus\";\n\t\tthis.bonusIds[WormKingSlotParser.wkCallToArmsDto] = \"call_to_arms_bonus\";\n\t\tthis.bonusIds[WormKingSlotParser.wkFruitBombDto] = \"fruit_bomb_bonus\";\n\t\tthis.bonusIds[WormKingSlotParser.wkKingBonusDto] = \"worm_king_bonus\";\n\t\tthis._pendingBonusesToHandle = [];\n\t}\n\n\t_initReels(data) {\n\t\tvar reels = super._initReels(data);\n\n\t\tvar newReels = [];\n\n\t\tvar reel = 0;\n\t\treels.forEach(function(s, index) {\n\t\t\tif (reel == newReels.length) {\n\t\t\t\tnewReels.push([]);\n\t\t\t}\n\t\t\tnewReels[reel].push(s[0]);\n\t\t\tif (++reel > 6) reel = 0;\n\t\t});\n\n\t\treturn data.reels = newReels;\n\t}\t\n\n\t_handleRandomWilds(data) {\n\t\tconsole.warn(data)\n\t\tif (!data || !data.length || !data[0].respin) return;\n\t\tlet respin = data[0].respin;\n\t\tlet newGameData = {gameData: {slotGameArray: [respin]}};\n\n\t\tthis.data.game.reels = this._initReels(newGameData);\n\t\tthis.winDetails.winLines = this._getWinLines(respin);\n\t\tthis._handleWins(newGameData);\n\t\tthis._handleWormKingRespins(respin);\n\t}\n\n\t_afterParseOperations(data) {\n\t\tvar initialSpin = data.game.gameData.slotGameArray[0];\n\t\tvar wilds = initialSpin.payoutData.filter((pData) => pData.className == WormKingSlotParser.wkRandomWildsDto);\n\t\tif (wilds.length > 0) {\n\t\t\tthis._handleRandomWilds(wilds);\n\t\t}\n\t\tthis._handleWormKingRespins(initialSpin);\n\t}\n\n\t_handleWormKingRespins(data, returnResult = false) {\n\t\tvar superFruits = data.payoutData.filter(pData => pData.className == \"cayetano.games.slots.wormking.dto.WormKingSuperFruitDto\");\n\t\tif (superFruits.length > 0) superFruits = superFruits[0];\n\t\telse superFruits = null;\n\t\tif (returnResult) {\n\t\t\treturn this._getWormKingRespins(data);\n\t\t}\n\t\tdata.payoutData.forEach((pData, i) => {\n\t\t\tif (pData.className == \"cayetano.games.slots.dto.SlotContactDataDto\") {\n\t\t\t\tthis._handleWormKingContact(pData, returnResult, returnResult ? i + 1 : null, superFruits);\n\t\t\t}\n\t\t\telse if (pData.className == \"cayetano.games.slots.dto.SlotGameDto\") {\n\t\t\t\tthis._handleWormKingRespins(pData);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tvar dtos = Object.keys(this.bonusIds);\n\t\t\t\tfor (var i = 0; i < dtos.length; i++) {\n\t\t\t\t\tif (dtos[i] == pData.className) {\n\t\t\t\t\t\tthis._pendingBonusesToHandle.push(this.bonusIds[dtos[i]]);\n\t\t\t\t\t\tthis._handleWormKingRespins(pData.respin);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\t_getWormKingRespins(data, respinIndex = 1) {\n\t\tvar result = [];\n\t\tfor (var i = 0; i < data.payoutData.length; i++) {\n\t\t\tif (data.payoutData[i].className == 'cayetano.games.slots.dto.SlotContactDataDto') {\n\t\t\t\tresult.push(this._handleWormKingContact(data.payoutData[i], true, respinIndex));\n\t\t\t}\n\t\t\tif (data.payoutData[i].className == 'cayetano.games.slots.dto.SlotGameDto') {\n\t\t\t\tresult = result.concat(this._getWormKingRespins(data.payoutData[i], respinIndex + 1));\n\t\t\t\trespinIndex++;\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\t_handleWormKingContact(data, returnResult = false, respinNum = null, superFruits = null) {\n\t\tif (!this.winDetails.respins) this.winDetails.respins = [];\n\t\tif (respinNum == null) {\n\t\t\trespinNum = this.winDetails.respins.length + 1;\n\t\t}\n\t\tvar superFruitsAmount = superFruits != null ? superFruits.winAmount : 0;\n\t\tvar respinData = {\n\t\t\tamount: data.winAmount + superFruitsAmount,\n\t\t\twinLines: [],\n\t\t\totherWins: this._pendingBonusesToHandle.map((bonus) => {return {\n\t\t\t\ttype: \"bonus\",\n\t\t\t\tamount: 0\n\t\t\t}}),\n\t\t\ttype: respinNum\n\t\t};\n\t\tthis._pendingBonusesToHandle = [];\n\n\t\tif (returnResult) {\n\t\t\treturn respinData;\n\t\t}\n\n\t\tif (!this.winDetails.respins) this.winDetails.respins = [];\n\t\tthis.winDetails.respins.push(respinData);\n\t\tthis.winDetails.totalWin += this.winDetails.respins[this.winDetails.respins.length - 1].amount;\n\t};\n\n\t_flattenNudges(gameDto, index = 0) {\n\t}\n\n\t_handleNudges(data) {\n\t}\n}\n\nmodule.exports = WormKingSlotParser;","const DefaultParser = require('../../DefaultParser');\nconst Config = require('../../../config/Config');\nconst Format = require('../../../utils/Format');\n\n/**\n * DopSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n *\n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n *\n * After-parse logic can be added in the method _afterParseOperations(data).\n *\n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n *\n * @class\n * @extends {DefaultParser}\n */\nclass DopSlotParser extends DefaultParser {\n\n\tconstructor() {\n\t\tsuper();\n\n\t\t/** @type {Object} The server spin data */\n\t\tthis.data = {};\n\n\t\tthis.winDetails = {\n\t\t\twinLines: [],\n\t\t\textraSpins: [],\n\t\t\totherWins: [],\n\t\t\tjackpotWins: [],\n\t\t\tmultipliers: [],\n\t\t\ttotalWin: 0,\n\t\t\tinitialLinesWin: 0,\n\t\t\ttotalWinCorrection: 0,\n\t\t\twinLineSet: -1, // mutliline games have several win line sets\n\t\t};\n\n\t\t/** @type {string} The current game id */\n\t\tthis.gameId = '';\n\n\t\t/** @type {Number} Extra spins counter */\n\t\tthis.extraSpinCounter = 1; //todo rename to indices\n\n\t\t/** @type {Object} Object of bonusWins types with corresponding names */\n\t\tthis.otherWins = {\n\t\t\tbonus: [\n\t\t\t\t'pickerBonus',\n\t\t\t\t'pathBonus',\n\t\t\t\t'pathPickerBonus',\n\t\t\t\t'multiPickerBonus'\n\t\t\t],\n\t\t\tinstantWin: [\n\t\t\t\t'instantWin',\n\t\t\t\t'instantPrize',\n\t\t\t\t'limitedWin'\n\t\t\t],\n\t\t\tmultiplier: [\n\t\t\t\t'multiplier' // stake multiplier, not winlines multiplier!\n\t\t\t]\n\t\t};\n\n\t\tthis.hide0s = false; // eg. in Midas Gold interim respins don't pay, so we shouldn't show the 0s\n\n\t\t// free spins removed, no respin on purpose\n\t\tthis.featureHandlers = [\n\t\t\t{name: 'nudge', cb: this._handleNudge},\n\t\t\t{name: 'nudgeBonus', cb: this._handleNudge},\n\t\t\t{name: 'fatTiles', cb: this._handleFatTiles},\n\t\t\t{name: 'mysterySymbols', cb: this._handleMysterySymbols},\n\t\t\t{name: 'randomTiles', cb: this._handleFeature},\n\t\t\t{name: 'swapTiles', cb: this._handleFeature},\n\t\t\t{name: 'megaWilds', cb: this._handleFatTiles},\n\t\t\t{name: 'freeSpinsMegaFatTiles', cb: this._handleFatTiles},\n\t\t\t{name: 'instantWinMegaFatTiles', cb: this._handleFatTiles},\n\t\t\t{name: 'randomReels', cb: this._handleFeature},\n\t\t\t{name: 'swapReels', cb: this._handleSwapReels},\n\t\t\t{name: 'lockedTiles', cb: this._handleFeature},\n\t\t\t{name: 'randomWays', cb: this._handleMultipliers},\n\t\t\t{name: 'fatTiles', cb: this._handleMultipliers},\n\t\t];\n\t}\n\n\tparse(gameId, data) {\n\n\t\tthis.data = data;\n\t\tthis.gameId = gameId;\n\t\tthis.hide0s = Config.respinWinEndOnly.indexOf(gameId) !== -1;\n\n\t\tif (this.data.game.reelsBuffer) this._initReels(this.data.game);\n\t\tthis.winDetails.freeSpins = []; // TODO rename to freespins after removing DopSlotParser\n\t\tthis.winDetails.respins = []; // ditto\n\n\t\tthis.data.responses.forEach((response) => {\n\n\t\t\tFormat.convertMoneyToNumber(response);\n\n\t\t\tthis._beforeParseOperations(response);\n\n\t\t\tthis._handleHorizontalReels(response.game);\n\t\t\tthis._handleFeatures(response.game);\n\n\t\t\t// can't have both free spins and respin in one spin (there can be a fs IN a respin and vice versa\n\t\t\tif (response.game.respin) {\n\t\t\t\tthis._flattenRespins(response.game.respin, this.winDetails.respins);\n\t\t\t}\n\n\t\t\tlet freeSpins = null;\n\t\t\tif (this.winDetails.respins.length && _.last(this.winDetails.respins).freeSpins) {\n\t\t\t\tfreeSpins = _.last(this.winDetails.respins).freeSpins;\n\t\t\t} else if (response.game.freeSpins) {\n\t\t\t\tfreeSpins = response.game.freeSpins;\n\t\t\t} else if (response.game.gameData && response.game.gameData.freeSpins) { // new game data format and format for choice responses\n\t\t\t\tfreeSpins = response.game.gameData.freeSpins;\n\t\t\t}\n\n\t\t\tif (freeSpins && freeSpins.length && freeSpins.length > 0) {\n\t\t\t\tthis._flattenFreeSpins(freeSpins, this.winDetails.freeSpins);\n\t\t\t}\n\n\t\t\tthis._handleWins(response);\n\n\t\t\t//We should use the user data of the latest response as it is the most up-to-date\n\t\t\tif(response.user && response.user.balance) {\n\t\t\t\tthis.data.user.balance.cash.atEnd = response.user.balance.cash.atEnd;\n\t\t\t\tthis.data.user.balance.freeBets.atEnd = response.user.balance.freeBets.atEnd;\n\t\t\t\tthis.data.user.balance.sessionCash.atEnd = response.user.balance.sessionCash.atEnd;\n\t\t\t\tthis.data.user.balance.sessionFreeBets.atEnd = response.user.balance.sessionFreeBets.atEnd;\n\t\t\t\tthis.data.user.balance.bonus.atEnd = response.user.balance.bonus.atEnd;\n\t\t\t}\n\n\t\t\tthis._afterParseOperations(response);\n\t\t});\n\n\t\tthis._roundingCorrection(data);\n\n\t\treturn this._generateOutput();\n\t}\n\n\t/**\n\t * Initializes the reels array with the current spin data object and apply screen mask\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t */\n\t_initReels(data) {\n\t\tlet reelsBuffer = data.reelsBuffer;\n\t\tlet reels = [];\n\n\t\tfor (let i = 0; i < reelsBuffer.length; i++) {\n\t\t\treels[i] = reelsBuffer[i][1];\n\t\t}\n\t\tdata.reels = reels;\n\n\t\tConfig.resizableSlot.includes(this.gameId) && this._applyScreenMask(data);\n\t}\n\n\t/**\n\t * Returns parsed spin data in the specified format\n\t * @return {Object} The parsed data\n\t */\n\t_generateOutput() {\n\t\treturn {\n\t\t\tspinData: this.data.game,\n\t\t\tgameDetails: {\n\t\t\t\tgameId: this.gameId,\n\t\t\t\troundId: this.data.transactions.roundId,\n\t\t\t\tprevRoundId: this.data.transactions.prevRoundId,\n\t\t\t\tnextRoundId: this.data.transactions.nextRoundId,\n\t\t\t\tserverTimeStart: this.data.transactions.startTime,\n\t\t\t\tserverTimeEnd: this.data.transactions.endTime,\n\t\t\t},\n\t\t\ttransactions: {\n\t\t\t\ttotalBet: this.data.game.stake,\n\t\t\t\ttotalWin: this.winDetails.totalWin,\n\t\t\t\tfeatureBuyCost: this.data.game.featureBuyCost,\n\t\t\t\tfeatureBuyName: this.data.game.spinMode,\n\t\t\t\tbalance: {\n\t\t\t\t\tcash: this.data.user.balance.cash,\n\t\t\t\t\tfreeBets: this.data.user.balance.freeBets,\n\t\t\t\t\tsessionCash: this.data.user.balance.sessionCash,\n\t\t\t\t\tsessionFreeBets: this.data.user.balance.sessionFreeBets,\n\t\t\t\t\tbonus: this.data.user.balance.bonus\n\t\t\t\t},\n\t\t\t},\n\t\t\tregulations: this.data.regulations,\n\t\t\twinDetails: this.winDetails,\n\t\t\treels: this.data.game.reels,\n\t\t\tpromo: this.data.promo\n\t\t};\n\t}\n\n\t/**\n\t * win details logic\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t * @param {Object} data.win Spin result winnings info\n\t * @param {Array} data.winLines Spin result win lines\n\t * @param {Object} data.winLines.pickerBonus Picker bonus win info\n\t * @param {Object} data.winLines.pathBonus Path bonus win info\n\t * @param {Object} data.winLines.pathPickerBonus Path picker bonus win info\n\t * @param {Object} data.winLines.multiPickerBonus Multi picker bonus win info\n\t */\n\t_handleWins(data) {\n\t\tlet winDetails = this.winDetails;\n\n\t\t// handle game(spin) wins\n\t\tif (data.game.win.total) {\n\t\t\twinDetails.totalWin += data.game.win.total;\n\t\t}\n\n\t\tif (data.game.win.lines) {\n\t\t\twinDetails.initialLinesWin = data.game.win.lines;\n\n\t\t\tlet winLinesData = data.game.winLines;\n\n\t\t\twinLinesData.forEach((line) => {\n\t\t\t\tline.type = line.index + 1;\n\t\t\t});\n\t\t\twinDetails.winLines = winLinesData;\n\t\t}\n\n\t\tthis.winDetails.winLineSet = typeof data.game.linesGroupIndex !== 'undefined' ? data.game.linesGroupIndex : -1;\n\n\t\t// Gamble\n\t\tif (data.game.win.gamble) {\n\t\t\twinDetails.otherWins.push({\n\t\t\t\ttype: 'gamble',\n\t\t\t\tamount: this.data.game.win.gamble\n\t\t\t});\n\t\t}\n\t\t// bonuses, multipliers etc\n\t\tthis._addOtherWins(data.game);\n\n\t\t// handle jackpot wins\n\t\tif (data.jackpots && data.jackpots.win > 0) {\n\t\t\tconst gameData = data.game;\n\t\t\tconst showJackpotScreen = !Config.noJackpotScreen.includes(this.gameId);\n\n\t\t\twinDetails.totalWin += data.jackpots.win;\n\t\t\t_.each(data.jackpots.pots, pot => {\n\t\t\t\tif (pot.win > 0) {\n\t\t\t\t\tconst lastSpinData = this._getLastSpinData(winDetails, gameData);\n\t\t\t\t\tconst jackpot = {\n\t\t\t\t\t\ttype: pot.id,\n\t\t\t\t\t\tamount: pot.win,\n\t\t\t\t\t\treels: showJackpotScreen ? this._cloneReels(lastSpinData.reels) : null\n\t\t\t\t\t};\n\n\t\t\t\t\tif (showJackpotScreen) {\n\t\t\t\t\t\tthis._handleJackpotTiles(gameData.jackpotTiles, jackpot.reels);\n\n\t\t\t\t\t\tthis._nudgeJackpotTiles(lastSpinData, jackpot.reels, gameData);\n\t\t\t\t\t}\n\n\t\t\t\t\twinDetails.jackpotWins.push(jackpot);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Iterates through all types of 'otherWins' and\n\t * if preent in the response, adds it to the otherWins winDetails\n\t * @param winDetails\n\t * @param data\n\t * @param type\n\t */\n\t_addOtherWins(data, type) {\n\t\tObject.keys(this.otherWins).forEach((winType) => {\n\t\t\tthis.otherWins[winType].forEach((winName) => {\n\t\t\t\tif (data.win[winName]) {\n\t\t\t\t\tthis.winDetails.otherWins.push({ type: winType, amount: data.win[winName] });\n\t\t\t\t}\n\t\t\t});\n\t\t}, this);\n\t}\n\n\t/**\n\t * Handles all the features present in the current spin data object\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t */\n\t_handleFeatures(data) {\n\t\tthis.featureHandlers.forEach((featureHandler) => {\n\t\t\tif (featureHandler.name in data) {\n\t\t\t\tfeatureHandler.cb.call(this, data, featureHandler.name);\n\t\t\t}\n\t\t\tif (data.gameData && featureHandler.name in data.gameData) { // choice\n\t\t\t\tfeatureHandler.cb.call(this, data.gameData, featureHandler.name);\n\t\t\t}\n\t\t\tif (data.autofinish) {\n\t\t\t\tdata.autofinish.forEach((autoFinishData) => {\n\n\t\t\t\t\tautoFinishData = this._convertNewFormat(autoFinishData); // TODO remove after migration to new response format\n\n\t\t\t\t\tif (featureHandler.name in autoFinishData) {\n\t\t\t\t\t\tfeatureHandler.cb.call(this, autoFinishData, featureHandler.name);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\t// TODO remove after migration to new response format\n\t_convertNewFormat(responseData) {\n\t\tlet gameData = responseData['gameData'];\n\t\tif (gameData) {\n\t\t\t['freeSpins', 'respin', 'fortuneRespin'].forEach(key => {\n\t\t\t\tif (gameData[key]) {\n\t\t\t\t\tgameData[key].forEach(obj => {\n\t\t\t\t\t\tif (obj['gameData']) this._convertNewFormat(obj);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t\tObject.assign(responseData, gameData);\n\t\t\tdelete responseData['gameData'];\n\t\t}\n\t\treturn responseData;\n\t}\n\n\t/**\n\t * Handler for the 'Nudge' feature\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t * @param {Array} data.reelsBuffer reels buffer array\n\t * @param {Array} data.nudge Nudge modification object\n\t * @param {Array} data.nudgeBonus Nudge modification object\n\t */\n\t_handleNudge(data, featureName = 'nudge') {\n\t\tlet nudgeData = data[featureName];\n\t\tlet reels = data.reels;\n\n\t\tnudgeData.forEach((nudge) => {\n\t\t\tlet buffer = data.reelsBuffer[nudge.index];\n\t\t\tlet flatten = _.flatten(buffer);\n\n\t\t\tlet startAt = buffer[0].length + (nudge.dir === 1 ? nudge.distance : -nudge.distance);\n\t\t\tlet endAt = startAt + buffer[1].length;\n\n\t\t\treels[nudge.index] = flatten.slice(startAt, endAt);\n\t\t});\n\t}\n\n\t/**\n\t * @description\n\t * Handler for the 'Fat tiles' feature\n\t *\n\t * There is an option to visualize FT as a whole tile,\n\t * if the game is added to the \"assembledFatTiles\" subsection in the config and puzzle assets that form it are available.\n\t *\n\t * The asset pieces that form the FT need to have a suitable id, which includes the dimensions of the tile.\n\t * For example id = 10_3x3, as the number in front of \"x\" is width, and the one behind it is the height of the FT.\n\t * Then, for each piece, a width position index and a height position index are added along the imaginary grid on which the FT is formed,\n\t * as the number in front of \"x\" is width index, and the one behind it is the height index of the grid.\n\t *\n\t * Example: fat tile 3x3 with id equal to 10: | 10_3x3_0x0 | 10_3x3_1x0 | 10_3x3_2x0 |\n\t *                                            | 10_3x3_0x1 | 10_3x3_1x1 | 10_3x3_2x1 |\n\t *                                            | 10_3x3_0x2 | 10_3x3_1x2 | 10_3x3_2x2 |\n\t *\n\t * Example: fat tile 3x2 with id equal to 3:  | 3_3x2_0x0 | 3_3x2_1x0 | 3_3x2_2x0 |\n\t *                                            | 3_3x2_0x1 | 3_3x2_1x1 | 3_3x2_2x1 |\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * @param  {String} featureName\n\t */\n\t_handleFatTiles(data, featureName) {\n\t\tconst reels = data.reels;\n\t\tconst fatTilesData = data[featureName];\n\n\t\tfatTilesData.forEach((tile) => {\n\t\t\tconst tileRight = tile.reel + tile.width;\n\t\t\tconst targetPos = typeof tile.targetPos !== 'undefined' ? tile.targetPos : tile.index;\n\t\t\tconst id = typeof tile.tileId !== 'undefined' ? tile.tileId : tile.toTile;\n\t\t\tlet gridWidthIndex = 0;\n\n\t\t\tfor (let reelIndex = tile.reel; reelIndex < tileRight; reelIndex++) {\n\t\t\t\tconst tileBottom = targetPos + tile.height;\n\t\t\t\tlet gridHeightIndex = 0;\n\n\t\t\t\tfor (let tileIndex = targetPos; tileIndex < tileBottom; tileIndex++) {\n\t\t\t\t\tif (reels[reelIndex] && reels[reelIndex][tileIndex]) {\n\t\t\t\t\t\tif (!Config.assembledFatTiles.includes(this.gameId)) {\n\t\t\t\t\t\t\treels[reelIndex][tileIndex] = id;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treels[reelIndex][tileIndex] = `${id}_${tile.width}x${tile.height}_${gridWidthIndex}x${gridHeightIndex}`;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tgridHeightIndex += 1;\n\t\t\t\t}\n\n\t\t\t\tgridWidthIndex += 1;\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Handler for the features with same data format\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t * @param  {String} featureName\n\t */\n\t_handleFeature(data, featureName) {\n\t\tthis._applyReelsModifier(data[featureName], data.reels);\n\t}\n\n\t/**\n\t * Handler for the 'Swap Reels' feature\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t */\n\t_handleSwapReels(data) {\n\t\tlet swapReelsData = data.swapReels;\n\t\tlet reels = data.reels;\n\n\t\tif (swapReelsData) {\n\t\t\tswapReelsData.swaps.forEach((swap) => {\n\t\t\t\tlet A = swap[0];\n\t\t\t\tlet B = swap[1];\n\t\t\t\tlet tmp = reels[A];\n\n\t\t\t\treels[A] = reels[B];\n\t\t\t\treels[B] = tmp;\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Handler for the 'Mystery Symbols' feature\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t */\n\t_handleMysterySymbols(data) {\n\t\tlet reels = data.reels;\n\t\tlet mysterySymbolsData = data.mysterySymbols;\n\t\tlet { toTile, tileId } = mysterySymbolsData;\n\t\tlet id = typeof toTile !== 'undefined' ? toTile : tileId;\n\n\t\tmysterySymbolsData.tiles.forEach((tile) => {\n\t\t\treels[tile.reel][tile.index] = id;\n\t\t});\n\t}\n\n\t/**\n\t * @description It takes in a data object and a name string, and if the gameId is in the Config.hasMultipliers array, it pushes the reel, index, and multiplier values from the data object into the winDetails.multipliers array.\n\t * @param {object} data - The data that is returned from the server.\n\t * @param {string} [name] - The name of the array in the response.\n\t */\n\t_handleMultipliers(data, name) {\n\t\tif (!Config.hasMultipliers.includes(this.gameId)) return;\n\n\t\tconst multipliers = data[name];\n\n\t\tif (!multipliers) return;\n\n\t\tmultipliers.forEach(multiply => {\n\t\t\tconst { reel, index, multiplier } = multiply;\n\t\t\tconst type = data.type || 0;\n\t\t\tconst previousMultiplier = this.winDetails.multipliers\n\t\t\t\t.find(m => m.reel === reel && m.index === index && m.type === type);\n\n\t\t\t// handles multiplier swapping features\n\t\t\tif (previousMultiplier) previousMultiplier.multiplier = multiplier;\n\t\t\telse this.winDetails.multipliers.push({ type, reel, index, multiplier });\n\t\t});\n\t}\n\n\t/**\n\t * Hook that is called before a free spin features are parsed\n\t * @private\n\t * @param  {Object} data Spin data, contains\n\t * screen reels and every game feature for the spin\n\t */\n\t_freeSpinsBeforeParseOperations(data) {\n\t\tlet otherWins = data.otherWins;\n\t\tlet instantWin = data.win.instantWin || data.win.limitedWin;\n\t\tlet bonusWin = data.win.pickerBonus\n\t\t\t|| data.win.pathBonus\n\t\t\t|| data.win.pathPickerBonus\n\t\t\t|| data.win.multiPickerBonus;\n\n\t\t// apply stake multiplier\n\t\tif (data.win && data.win.multiplier > 0 && data.amount !== 0) {\n\t\t\totherWins.push({\n\t\t\t\tamount: data.win.multiplier,\n\t\t\t\ttype: 'multiplier'\n\t\t\t});\n\t\t}\n\n\t\t// apply bonus wins\n\t\tif (bonusWin) {\n\t\t\totherWins.push({ type: 'bonus', amount: bonusWin });\n\t\t}\n\n\t\tif (instantWin) {\n\t\t\totherWins.push({ type: 'instantWin', amount: instantWin });\n\n\t\t\tif (this._hasMaxWin(data)) {\n\t\t\t\tdata.winLines = [];\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Recursively parses nested features and applies a modifier feature to the given reels array\n\t * @private\n\t * @param {Array} feature Array of tile modification objects\n\t * @param {Array} reels Reels array to work on\n\t * @param {Number} feature.reel Reel index\n\t * @param {Number} feature.index Tile index\n\t * @param {Number} feature.toTile Tile id that will be used to replace the existing tile\n\t */\n\t_applyReelsModifier(feature, reels) {\n\t\tfeature.forEach(data => {\n\t\t\tconst isNested = data instanceof Array;\n\n\t\t\tif (isNested) {\n\t\t\t\tthis._applyReelsModifier(data, reels);\n\t\t\t} else {\n\t\t\t\tconst { toTile, tileId, tile, reel, index } = data;\n\t\t\t\tconst id = typeof toTile !== 'undefined' ? toTile :\n\t\t\t\t\ttypeof tileId !== 'undefined' ? tileId : tile;\n\n\t\t\t\tif (reels[reel] && typeof reels[reel][index] !== 'undefined') {\n\t\t\t\t\treels[reel][index] = id;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\t_handleExtraSpin(extraSpin) {\n\t\textraSpin.type = this.extraSpinCounter++; // unique spin ID, not index\n\t\textraSpin.hide0s = this.hide0s;\n\t\textraSpin.winLineSet = typeof extraSpin.linesGroupIndex !== 'undefined' ? extraSpin.linesGroupIndex : -1;\n\t\textraSpin.otherWins = [];\n\n\t\tif (extraSpin.freeSpins) {\n\t\t\textraSpin.amount = extraSpin.win.total - extraSpin.win.freeSpins;\n\t\t} else if (extraSpin.respin) {\n\t\t\textraSpin.amount = extraSpin.win.total - extraSpin.win.respin;\n\t\t} else {\n\t\t\textraSpin.amount = extraSpin.win.total;\n\t\t}\n\n\t\tFormat.convertMoneyToNumber(extraSpin);\n\t\tthis._initReels(this._convertNewFormat(extraSpin));\n\n\t\tif (typeof this._freeSpinsBeforeParseOperations === 'function') {\n\t\t\tthis._freeSpinsBeforeParseOperations(extraSpin);\n\t\t}\n\n\t\tthis._handleHorizontalReels(extraSpin);\n\t\tthis._handleFeatures(extraSpin);\n\n\t\tif (typeof this._freeSpinsAfterParseOperations === 'function') {\n\t\t\tthis._freeSpinsAfterParseOperations(extraSpin);\n\t\t}\n\t}\n\n\t_beforeParseOperations(response) {\n\t\t// Can be provided by extending class\n\t}\n\n\t_afterParseOperations(response) {\n\t\t// Can be provided by extending class\n\t}\n\n\t/**\n\t * Recursively parses free spins for nested free spins in free spins and free spins in respins, returning a collection\n\t * with all free spins at the top level. Any respins remain children to the respective free spin.\n\t * Recursion takes place immediately on encountering new free spins, analogically to the handling in games.\n\t * Example\n\t * [ freeSpins: [\n\t *\ta: {...},\n\t *\tb: {...},\n\t *\tc: {..., freeSpins: [e: {...}, f: {...}]}\n\t *\td: {...}\n\t * ]\n\t * results to => [a, b, c, e, f, d] with possible respins in free spins\n\t * @param freeSpins\n\t * @param result\n\t * @private\n\t */\n\t_flattenFreeSpins(freeSpins, result) {\n\t\tfreeSpins.forEach((freeSpin, i) => {\n\n\t\t\tthis._handleExtraSpin(freeSpin);\n\t\t\tresult.push(freeSpin);\n\n\t\t\tif (freeSpin.respin) {\n\t\t\t\tlet respins = [];\n\t\t\t\tthis._flattenRespins(freeSpin.respin, respins);\n\t\t\t\trespins.forEach((respin) => {\n\t\t\t\t\tthis._handleExtraSpin(respin);\n\t\t\t\t});\n\t\t\t\tfreeSpin.respins = respins;\n\n\t\t\t\tlet lastRespin = _.last(respins);\n\t\t\t\tif (lastRespin.freeSpins) {\n\t\t\t\t\tthis._flattenFreeSpins(lastRespin.freeSpins, result);\n\t\t\t\t}\n\t\t\t} else if (freeSpin.freeSpins) {\n\t\t\t\tthis._flattenFreeSpins(freeSpin.freeSpins, result);\n\t\t\t}\n\t\t});\n\t}\n\n\t_flattenRespins(respins, result) {\n\t\trespins.forEach((respin, i) => {\n\t\t\tthis._handleExtraSpin(respin);\n\t\t\tresult.push(respin);\n\t\t\tif (respin.respin) {\n\t\t\t\tthis._flattenRespins(respin.respin, result);\n\t\t\t}\n\t\t\tif (respin.freeSpins && i !== respins.length - 1) {\n\t\t\t\tconsole.warn('freeSpins is expected to be a in the last respin, please investigate!');\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Modifies data numeric values and rounds very long float values\n\t * @param  {Object} data Spin server response data\n\t * @private\n\t */\n\t_handleResponseCorrection(res) {\n\t\tlet total = 0;\n\n\t\t_.each(res.game.win, (val, key) => {\n\t\t\tif (key === 'total') {\n\t\t\t\t// skip\n\t\t\t}else if (key === 'lines') {\n\t\t\t\tlet winLines;\n\t\t\t\tif(res.game.gameData) winLines = res.game.gameData.winLines;\n\t\t\t\telse winLines = res.game.winLines;\n\n\t\t\t\twinLines.forEach((line) => {\n\t\t\t\t\ttotal += line.amount;\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// lines_randomTiles_1, lines_randomTiles_2 , lines_randomTiles_3,  lines_randomTiles_4,\n\t\t\t\t// lines_randomTiles_5, lines_swapReels_1, lines_swapReels_2, lines_swapReels_3, lines_swapReels_4,\n\t\t\t\t// lines_swapReels_5, respin, freeSpins, multiplier\n\t\t\t\ttotal += val;\n\t\t\t}\n\t\t});\n\n\t\tif (res.jackpots && res.jackpots.win > 0) {\n\t\t\tres.jackpots.pots.forEach((pot) => {\n\t\t\t\ttotal += pot.win;\n\t\t\t});\n\t\t}\n\n\t\treturn total;\n\t}\n\t// TODO - there should be a rounding correction property for EACH free spin or respin\n\t// _handleRoundingFreeSpins(freeSpins, total) {\n\t//\t var total = 0;\n\t//\t let freeSpinsFlat = [];\n\t//\t this._flattenFreeSpins(freeSpins, freeSpinsFlat);\n\t//\t freeSpinsFlat.forEach((freeSpin) => {\n\t//\t\t if (typeof freeSpin.amount === 'undefined') return console.error('Missing amount value for free spin item.');\n\t//\t\t total += freeSpin.amount;\n\t//\t\t if (freeSpin.respin) {\n\t//\t\t\t freeSpin.respin.forEach(respin => {\n\t//\t\t\t\t total += respin.amount;\n\t//\t\t\t })\n\t//\t\t }\n\t//\t });\n\t//\t return total;\n\t// }\n\n\t_roundingCorrection(data) {\n\t\tlet total = 0;\n\n\t\tdata.responses.forEach((res) => {\n\t\t\ttotal += this._handleResponseCorrection(res);\n\t\t});\n\n\t\tlet diff = Math.round(this.winDetails.totalWin * 100) - Math.round(total * 100);\n\n\t\tif (diff && !this._hasMaxWin(data.game)) {\n\t\t\tthis.winDetails.totalWinCorrection = diff / 100;\n\t\t}\n\t}\n\n\t_hasMaxWin(game) {\n\t\treturn game && game.activator && game.activator.features && game.activator.features.includes('MaxWin');\n\t}\n\n\t_handleJackpotTiles(jackpotTiles, reels) {\n\t\tif(!jackpotTiles) return;\n\n\t\tjackpotTiles.forEach(jpTile => {\n\t\t\tconst { toTile, tileId, tile, reel, index, screen } = jpTile;\n\n\t\t\tlet id = 100;// default jackpot tile id\n\n\t\t\tif (toTile) id = toTile;\n\t\t\tif (tileId) id = tileId;\n\t\t\tif (tile) id = tile;\n\n\t\t\tif (reels[reel] && typeof reels[reel][index] !== 'undefined') {\n\t\t\t\treels[reel][index] = id;\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t *\n\t * @description Searches the data for the last screen on which the jackpot symbols are placed.\n\t * @param {Object} winDetails\n\t * @param {Object} initialData\n\t * @returns {Object}\n\t */\n\t_getLastSpinData(winDetails, initialData) {\n\t\t// Check features in this order: 1. respins; 2. freeSpins{ respins }; 3. heldRespins.\n\t\tconst { respins, freeSpins, heldRespins } = winDetails; // arrays\n\n\t\tif (heldRespins && heldRespins.length) {\n\t\t\t// Here we have respins after freeSpins feature for example \"GonzosQuestMegaWays\"\n\t\t\treturn _.last(heldRespins);\n\t\t} else if (freeSpins && freeSpins.length) {\n\t\t\tconst lastFreeSpin = _.last(freeSpins);\n\n\t\t\treturn !lastFreeSpin.respins ? lastFreeSpin : _.last(lastFreeSpin.respins);\n\t\t} else if (respins && respins.length) {\n\t\t\t// The last respin is the last modifier of the scene in this case.\n\t\t\treturn _.last(respins);\n\t\t}\n\n\t\treturn initialData;\n\t}\n\n\t_cloneReels(reels) {\n\t\treturn reels.map(reel => _.clone(reel));\n\t}\n\n\t/**\n\t * Handler for the 'jackpotNudge' feature\n\t * @private\n\t * @param  {Object} lastSpinData\n\t * @param {Array} reels\n\t * @param {Object} data\n\t */\n\t_nudgeJackpotTiles(lastSpinData, reels, data) {\n\t\tconst jackpotNudgeData = data.jackpotNudge || lastSpinData.jackpotNudge;\n\n\t\tif (!jackpotNudgeData) return;\n\n\t\tconst nudgeData = lastSpinData.nudge || [];\n\n\t\tjackpotNudgeData.forEach(jackpotNudge => {\n\t\t\tconst nudge = nudgeData.find(nudge => nudge.index === jackpotNudge.index);\n\t\t\tconst nudgeDistance = nudge ? (nudge.dir === 1 ? nudge.distance : -nudge.distance) : 0;\n\t\t\tconst jackpotNudgeDistance = jackpotNudge.dir === 1 ? jackpotNudge.distance : -jackpotNudge.distance;\n\t\t\tconst distance = jackpotNudgeDistance + nudgeDistance;\n\t\t\tconst buffer = lastSpinData.reelsBuffer[jackpotNudge.index];\n\t\t\tconst flatten = _.flatten(buffer);\n\t\t\tconst startAt = buffer[0].length + distance;\n\t\t\tconst endAt = startAt + buffer[1].length;\n\n\t\t\treels[jackpotNudge.index] = flatten.slice(startAt, endAt);\n\t\t});\n\t}\n\n\t_handleHorizontalReels(data) {\n\t\tconst { bottom, topAndBottom } = Config.horizontalReels;\n\n\t\tif (!bottom.includes(this.gameId) && !topAndBottom.includes(this.gameId)) return;\n\n\t\tconst { reelsBuffer, reels } = data;\n\n\t\tif (!reelsBuffer) return;\n\n\t\tconst tilesCountOnReel = reelsBuffer[0][1].length;\n\t\tconst firstReelIndex = 0;\n\t\tconst lastReelIndex = tilesCountOnReel - 1;\n\t\tconst horizontalReelIndices = topAndBottom.includes(this.gameId) ? [firstReelIndex, lastReelIndex] : [lastReelIndex];\n\n\t\tconst minCountEmptyPos = this._getRedundantRowsCount(reelsBuffer, tilesCountOnReel, horizontalReelIndices);\n\t\tconst cleanIndexFrom = tilesCountOnReel - (minCountEmptyPos + 1);\n\n\t\treelsBuffer.forEach((reel, reelIndex) => {\n\t\t\tfor (let i = 0; i < minCountEmptyPos; i++) {\n\t\t\t\treels[reelIndex][cleanIndexFrom + i] = '';\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t* @description Calculates the count of the redundant rows before bottom horizontal reel.\n\t* @param {object} reelsBuffer\n\t* @param {number} tilesCountOnReel\n\t* @param {array} horizontalReelIndices\n\t* @returns {number}\n\t*/\n\t_getRedundantRowsCount(reelsBuffer, tilesCountOnReel, horizontalReelIndices) {\n\t\tlet minEmptyPosOnReel = tilesCountOnReel;\n\n\t\treelsBuffer.forEach(([ , reelMiddle, ]) => {\n\t\t\tconst emptyTilesCount = reelMiddle\n\t\t\t\t.filter((tileId, tileIndex) => !tileId && !horizontalReelIndices.includes(tileIndex))\n\t\t\t\t.length;\n\n\t\t\tif (emptyTilesCount < minEmptyPosOnReel) minEmptyPosOnReel = emptyTilesCount;\n\t\t});\n\n\t\treturn minEmptyPosOnReel;\n\t}\n\n\t_applyScreenMask(data, tileId = 0) {\n\t\tconst { screenMask, reels } = data;\n\n\t\tif (!screenMask) return;\n\n\t\t_.each(screenMask, (reel, reelIndex) => {\n\t\t\t_.each(reel, (tile, tileIndex) => {\n\t\t\t\tif (!tile) reels[reelIndex][tileIndex] = tileId;\n\t\t\t});\n\t\t});\n\t}\n}\n\nmodule.exports = DopSlotParser;\n","const DopSlotParser = require('./DopSlotParser');\nconst AgeOfAkkadiaSlotParser = require('./games/AgeOfAkkadiaSlotParser');\nconst AgentRoyaleSlotParser = require('./games/AgentRoyaleSlotParser');\nconst AlexanderTheGreatSlotParser = require('./games/AlexanderTheGreatSlotParser');\nconst AncientDiscoSlotParser = require('./games/AncientDiscoSlotParser');\nconst AncientScriptSlotParser = require('./games/AncientScriptSlotParser');\nconst AncientsBlessingSlotParser = require('./games/AncientsBlessingSlotParser');\nconst ArcadeBombSlotParser = require('./games/ArcadeBombSlotParser');\nconst AstronautSlotParser = require('./games/AstronautSlotParser');\nconst AstrosSlotParser = require('./games/AstrosSlotParser');\nconst AthensMegaWaysSlotParser = require('./games/AthensMegaWaysSlotParser');\nconst AtlantisSlotParser = require('./games/AtlantisSlotParser');\nconst BabylonRichesSlotParser = require('./games/BabylonRichesSlotParser');\nconst BettyBorisAndBooParser = require('./games/BettyBorisAndBooSlotParser');\nconst BlobstersClusterbusterSlotParser = require('./games/BlobstersClusterbusterSlotParser');\nconst BloodSuckersMegaWaysSlotParser = require('./games/BloodSuckersMegaWaysSlotParser');\nconst BombusterSlotParser = require('./games/BombusterSlotParser');\nconst BountyRaidSlotParser = require('./games/BountyRaidSlotParser');\nconst BuffaloCollectorSlotParser = require('./games/BuffaloCollectorSlotParser');\nconst BuffaloManiaMegaWaysSlotParser = require('./games/BuffaloManiaMegaWaysSlotParser');\nconst BullsRunWildSlotParser = require('./games/BullsRunWildSlotParser');\nconst CaiShen168SlotParser = require('./games/CaiShen168SlotParser');\nconst CannonballCashSlotParser = require('./games/CannonballCashSlotParser');\nconst CaptainRizkMegaWaysParser = require('./games/CaptainRizkMegaWaysParser');\nconst CashExplorerSlotParser = require('./games/CashExplorerSlotParser');\nconst CasinoNightSlotParser = require('./games/CasinoNightSlotParser');\nconst ChristmasMorningSlotParser = require('./games/ChristmasMorningSlotParser');\nconst CinderellaSlotParser = require('./games/CinderellaSlotParser');\nconst CirqueDeLaFortuneSlotParser = require('./games/CirqueDeLaFortuneSlotParser');\nconst ClashOfTheBeastsSlotParser = require('./games/ClashOfTheBeastsSlotParser');\nconst CloverCrazeSlotParser = require('./games/CloverCrazeSlotParser');\nconst CrazyGenieSlotParser = require('./games/CrazyGenieSlotParser');\nconst CyberAttackSlotParser = require('./games/CyberAttackSlotParser');\nconst DearSantaSlotParser = require('./games/DearSantaSlotParser');\nconst DevilsNumberSlotParser = require('./games/DevilsNumberSlotParser');\nconst DiamondBlitz2SlotParser = require('./games/DiamondBlitz2SlotParser');\nconst DiamondBlitzSlotParser = require('./games/DiamondBlitzSlotParser');\nconst DiamondDoggiesSlotParser = require('./games/DiamondDoggiesSlotParser');\nconst DiamondRoyaleSlotParser = require('./games/DiamondRoyaleSlotParser');\nconst DiceDiceDiceSlotParser = require('./games/DiceDiceDiceSlotParser');\nconst DivineWaysSlotParser = require('./games/DivineWaysSlotParser');\nconst DoggyRichesMegaWaysParser = require('./games/DoggyRichesMegaWaysSlotParser');\nconst DragonKingLegendOfTheSeasSlotParser = require('./games/DragonKingLegendOfTheSeasSlotParser');\nconst DragonsClusterbusterSlotParser = require('./games/DragonsClusterbusterSlotParser');\nconst DragonsFireInfiniReelsSlotParser = require('./games/DragonsFireInfiniReelsSlotParser');\nconst DragonsFireMegaWaysSlotParser = require('./games/DragonsFireMegaWaysSlotParser');\nconst DragonsLockSlotParser = require('./games/DragonsLockSlotParser');\nconst DragonsMirrorSlotParser = require('./games/DragonsMirrorSlotParser');\nconst DragonsPlaygroundSlotParser = require('./games/DragonsPlaygroundSlotParser');\nconst DruidsMagicSlotParser = require('./games/DruidsMagicSlotParser');\nconst DynamiteRichesMegaWaysParser = require('./games/DynamiteRichesMegaWaysSlotParser');\nconst DynamiteRichesSlotParser = require('./games/DynamiteRichesSlotParser');\nconst EasyGoldSlotParser = require('./games/EasyGoldSlotParser');\nconst EgyptClusterbusterSlotParser = require('./games/EgyptClusterbusterSlotParser');\nconst EgyptMegaWaysSlotParser = require('./games/EgyptMegaWaysSlotParser');\nconst ElvenMagicSlotParser = require('./games/ElvenMagicSlotParser');\nconst EmeraldDiamondSlotParser = require('./games/EmeraldDiamondSlotParser');\nconst EmperorOfIndiaSlotParser = require('./games/EmperorOfIndiaSlotParser');\nconst EpicJourneySlotParser = require('./games/EpicJourneySlotParser');\nconst EsqueletoMariachiSlotParser = require('./games/EsqueletoMariachiSlotParser');\nconst FishtasticSlotParser = require('./games/FishtasticSlotParser');\nconst FlamingFoxSlotParser = require('./games/FlamingFoxSlotParser');\nconst FlodderSlotParser = require('./games/FlodderSlotParser');\nconst FortuneCatSlotParser = require('./games/FortuneCatSlotParser');\nconst FortuneCharmSlotParser = require('./games/FortuneCharmSlotParser');\nconst FortuneHouseSlotParser = require('./games/FortuneHouseSlotParser');\nconst FourSquadSlotParser = require('./games/FourSquadSlotParser');\nconst FruitFlashSlotParser = require('./games/FruitFlashSlotParser');\nconst FruitShopFrenzySlotParser = require('./games/FruitShopFrenzySlotParser');\nconst GemCrushSlotParser = require('./games/GemCrushSlotParser');\nconst GemsGoneWildPowerReelsSlotParser = require('./games/GemsGoneWildPowerReelsSlotParser');\nconst GemsGoneWildSlotParser = require('./games/GemsGoneWildSlotParser');\nconst GemsInfernoMegaWaysSlotParser = require('./games/GemsInfernoMegaWaysSlotParser');\nconst GemtasticSlotParser = require('./games/GemtasticSlotParser');\nconst GenieNightsSlotParser = require('./games/GenieNightsSlotParser');\nconst GetTheGoldInfiniReelsSlotParser = require('./games/GetTheGoldInfiniReelsSlotParser');\nconst GigaBlastSlotParser = require('./games/GigaBlastSlotParser');\nconst GladiatorClashSlotParser = require('./games/GladiatorClashSlotParser');\nconst GodsOfTroySlotParser = require('./games/GodsOfTroySlotParser');\nconst GoldMineMistressSlotParser = require('./games/GoldMineMistressSlotParser');\nconst GoldenLeprechaunMegaWaysSlotParser = require('./games/GoldenLeprechaunMegaWaysSlotParser');\nconst GoldenOfferSlotParser = require('./games/GoldenOfferSlotParser');\nconst GonzosQuestMegaWaysSlotParser = require('./games/GonzosQuestMegaWaysSlotParser');\nconst GoodLuckClusterbusterSlotParser = require('./games/GoodLuckClusterbusterSlotParser');\nconst GrandWheelSlotParser = require('./games/GrandWheelSlotParser');\nconst GreatGoldSlotParser = require('./games/GreatGoldSlotParser');\nconst HammerGodsSlotParser = require('./games/HammerGodsSlotParser');\nconst HappyApplesSlotParser = require('./games/HappyApplesSlotParser');\nconst HarleCoinParser = require('./games/HarleCoinSlotParser');\nconst HereKittyKittySlotParser = require('./games/HereKittyKittySlotParser');\nconst HoardOfPoseidonSlotParser = require('./games/HoardOfPoseidonSlotParser');\nconst HotHotChilliPotSlotParser = require('./games/HotHotChilliPotSlotParser');\nconst HundredKDropSlotParser = require('./games/HundredKDropSlotParser');\nconst ImperialPalaceSlotParser = require('./games/ImperialPalaceSlotParser');\nconst JackInAPotSlotParser = require('./games/JackInAPotSlotParser');\nconst JellyBellyMegaWaysSlotParser = require('./games/JellyBellyMegaWaysSlotParser');\nconst JewelScarabsSlotParser = require('./games/JewelScarabsSlotParser');\nconst JingleBellsBonanzaSlotParser = require('./games/JingleBellsBonanzaSlotParser');\nconst JingleBellsPowerReelsSlotParser = require('./games/JingleBellsPowerReelsSlotParser');\nconst JingleWaysMegaWaysSlotParser = require('./games/JingleWaysMegaWaysSlotParser');\nconst JoeExoticSlotParser = require('./games/JoeExoticSlotParser');\nconst JudgementDayMegaWaysSlotParser = require('./games/JudgementDayMegaWaysSlotParser');\nconst KnightsOfAvalonSlotParser = require('./games/KnightsOfAvalonSlotParser');\nconst LaserFruitSlotParser = require('./games/LaserFruitSlotParser');\nconst LastChanceSaloonSlotParser = require('./games/LastChanceSaloonSlotParser');\nconst LegendaryExcaliburSlotParser = require('./games/LegendaryExcaliburSlotParser');\nconst LionDanceSlotParser = require('./games/LionDanceSlotParser');\nconst LionsHoardSlotParser = require('./games/LionsHoardSlotParser');\nconst LondonTubeSlotParser = require('./games/LondonTubeSlotParser');\nconst LostRelics2SlotParser = require('./games/LostRelics2SlotParser');\nconst LuckyDevilSlotParser = require('./games/LuckyDevilSlotParser');\nconst LuckyMrGreenSlotParser = require('./games/LuckyMrGreenSlotParser');\nconst LuckyOktoberfestSlotParser = require('./games/LuckyOktoberfestSlotParser');\nconst LunaFortunaSlotParser = require('./games/LunaFortunaSlotParser');\nconst MagicLabSlotParser = require('./games/MagicLabSlotParser');\nconst MagicPowersMegaWaysSlotParser = require('./games/MagicPowersMegaWaysSlotParser');\nconst MajesticMysteriesPowerReelsSlotParser = require('./games/MajesticMysteriesPowerReelsSlotParser');\nconst MasqueradeSlotParser = require('./games/MasqueradeSlotParser');\nconst MayanGodsSlotParser = require('./games/MayanGodsSlotParser');\nconst MayhemSlotParser = require('./games/MayhemSlotParser');\nconst MegaDragonSlotParser = require('./games/MegaDragonSlotParser');\nconst MegaPyramidSlotParser = require('./games/MegaPyramidSlotParser');\nconst MermaidsSlotParser = require('./games/MermaidsSlotParser');\nconst MidasGoldSlotParser = require('./games/MidasGoldSlotParser');\nconst MidnightRomanceSlotParser = require('./games/MidnightRomanceSlotParser');\nconst MineBlownSlotParser = require('./games/MineBlownSlotParser');\nconst MixAndMatchSlotParser = require('./games/MixAndMatchSlotParser');\nconst MonstersUnchainedSlotParser = require('./games/MonstersUnchainedSlotParser');\nconst MoonSpellSlotParser = require('./games/MoonSpellSlotParser');\nconst MsRobinHoodSlotParser = require('./games/MsRobinHoodSlotParser');\nconst MultiplierRichesSlotParser = require('./games/MultiplierRichesSlotParser');\nconst MummyMegaWaysSlotParser = require('./games/MummyMegaWaysSlotParser');\nconst MysteryFruitSlotParser = require('./games/MysteryFruitSlotParser');\nconst MysteryReelsDeluxeSlotParser = require('./games/MysteryReelsDeluxeSlotParser');\nconst MysteryReelsMegaWaysSlotParser = require('./games/MysteryReelsMegaWaysSlotParser');\nconst MysticWheelSlotParser = require('./games/MysticWheelSlotParser');\nconst NarcosMexicoSlotParser = require('./games/NarcosMexicoSlotParser');\nconst NeonLinksSlotParser = require('./games/NeonLinksSlotParser');\nconst NightRollerSlotParser = require('./games/NightRollerSlotParser');\nconst NinjaWaysSlotParser = require('./games/NinjaWaysSlotParser');\nconst PaddyPowerGoldMegaWaysSlotParser = require('./games/PaddyPowerGoldMegaWaysSlotParser');\nconst PandorasTreasureSlotParser = require('./games/PandorasTreasureSlotParser');\nconst PeggySweetsSlotParser = require('./games/PeggySweetsSlotParser');\nconst PersianFortuneSlotParser = require('./games/PersianFortuneSlotParser');\nconst PiggyPiratesSlotParser = require('./games/PiggyPiratesSlotParser');\nconst PiggyRiches2MegaWaysSlotParser = require('./games/PiggyRiches2MegaWaysSlotParser');\nconst PiratesPartySlotParser = require('./games/PiratesPartySlotParser');\nconst PiratesPlentyBattleForGoldSlotParser = require('./games/PiratesPlentyBattleForGoldSlotParser');\nconst PiratesPlentyMegaWaysSlotParser = require('./games/PiratesPlentyMegaWaysSlotParser');\nconst PiratesPlentySlotParser = require('./games/PiratesPlentySlotParser');\nconst PlayWithTheDevilSlotParser = require('./games/PlayWithTheDevilSlotParser');\nconst PrimateKingMegaWaysSlotParser = require('./games/PrimateKingMegaWaysSlotParser');\nconst PrimateKingSlotParser = require('./games/PrimateKingSlotParser');\nconst PussNBootsSlotParser = require('./games/PussNBootsSlotParser');\nconst RAsLegendSlotParser = require('./games/RAsLegendSlotParser');\nconst RainbowJackpotsMegaWaysSlotParser = require('./games/RainbowJackpotsMegaWaysSlotParser');\nconst RainbowJackpotsPowerLinesSlotParser = require('./games/RainbowJackpotsPowerLinesSlotParser');\nconst RainbowJackpotsSlotParser = require('./games/RainbowJackpotsSlotParser');\nconst ReactorSlotParser = require('./games/ReactorSlotParser');\nconst RedDiamondSlotParser = require('./games/RedDiamondSlotParser');\nconst RedHotBBQSlotParser = require('./games/RedHotBBQSlotParser');\nconst ReelHeistSlotParser = require('./games/ReelHeistSlotParser');\nconst ReelKeeperSlotParser = require('./games/ReelKeeperSlotParser');\nconst ReelKingMegaSlotParser = require('./games/ReelKingMegaSlotParser');\nconst RegalBeastsSlotParser = require('./games/RegalBeastsSlotParser');\nconst ReptizillionsPowerReelsSlotParser = require('./games/ReptizillionsPowerReelsSlotParser');\nconst RiddleOfTheSphinxSlotParser = require('./games/RiddleOfTheSphinxSlotParser');\nconst RisqueMegaWaysSlotParser = require('./games/RisqueMegaWaysSlotParser');\nconst RobinHoodsWildForestSlotParser = require('./games/RobinHoodsWildForestSlotParser');\nconst RocketMenSlotParser = require('./games/RocketMenSlotParser');\nconst RomanEmperorsSlotParser = require('./games/RomanEmperorsSlotParser');\nconst SakuraMasksSlotParser = require('./games/SakuraMasksSlotParser');\nconst SavannahPrideSlotParser = require('./games/SavannahPrideSlotParser');\nconst SevenSevenSevenStrikeSlotParser = require('./games/SevenSevenSevenStrikeSlotParser');\nconst SevenSevenSevenSuperStrikeSlotParser = require('./games/SevenSevenSevenSuperStrikeSlotParser');\nconst SevensLuckSlotParser = require('./games/SevensLuckSlotParser');\nconst ShadowSocietySlotParser = require('./games/ShadowSocietySlotParser');\nconst SheepGoneWildSlotParser = require('./games/SheepGoneWildSlotParser');\nconst SirensRichesSlotParser = require('./games/SirensRichesSlotParser');\nconst SnowWildAndThe7FeaturesSlotParser = require('./games/SnowWildAndThe7FeaturesSlotParser');\nconst SpinTownSlotParser = require('./games/SpinTownSlotParser');\nconst SteamSquadSlotParser = require('./games/SteamSquadSlotParser');\nconst StolenTreasuresSlotParser = require('./games/StolenTreasuresSlotParser');\nconst SugarliciousEveryWaySlotParser = require('./games/SugarliciousEveryWaySlotParser');\nconst SumoSpinsSlotParser = require('./games/SumoSpinsSlotParser');\nconst SunFortuneSlotParser = require('./games/SunFortuneSlotParser');\nconst TenElementsSlotParser = require('./games/TenElementsSlotParser');\nconst TenThousandAndOneNightsMegaWaysSlotParser = require('./games/TenThousandAndOneNightsMegaWaysSlotParser');\nconst TenThousandAndOneNightsSlopParser = require('./games/TenThousandAndOneNightsSlotParser');\nconst TheEqualizerSlotParser = require('./games/TheEqualizerSlotParser');\nconst TheGoodTheBadAndTheRichSlotParser = require('./games/TheGoodTheBadAndTheRichSlotParser');\nconst TheGreatestTrainRobberySlotParser = require('./games/TheGreatestTrainRobberySlotParser');\nconst TheWildHatterSlotParser = require('./games/TheWildHatterSlotParser');\nconst TheWildKissSlotParser = require('./games/TheWildKissSlotParser');\nconst TheWishMasterMegaWaysSlotParser = require('./games/TheWishMasterMegaWaysSlotParser');\nconst ThorsLightningSlotParser = require('./games/ThorsLightningSlotParser');\nconst ThorsVengeanceSlotParser = require('./games/ThorsVengeanceSlotParser');\nconst ThreeKingdomsSlotParser = require('./games/ThreeKingdomsSlotParser');\nconst ThreeMusketeersSlotParser = require('./games/ThreeMusketeersSlotParser');\nconst TicketToWildSlotParser = require('./games/TicketToWildSlotParser');\nconst TotemLightningPowerReelsSlotParser = require('./games/TotemLightningPowerReelsSlotParser');\nconst TotemLightningSlotParser = require('./games/TotemLightningSlotParser');\nconst TransylvaniaNightOfBloodSlotParser = require('./games/TransylvaniaNightOfBloodSlotParser');\nconst TreasureMinePowerReelsSlotParser = require('./games/TreasureMinePowerReelsSlotParser');\nconst TreasureMineSlotParser = require('./games/TreasureMineSlotParser');\nconst TrillionaireMegaWaysSlotParser = require('./games/TrillionaireMegaWaysSlotParser');\nconst TrillionaireParser = require('./games/TrillionaireSlotParser');\nconst TrophyFishSlotParser = require('./games/TrophyFishSlotParser');\nconst TurtleParadiseSlotParser = require('./games/TurtleParadiseSlotParser');\nconst TwentyFourHourGrandPrixSlotParser = require('./games/TwentyFourHourGrandPrixSlotParser');\nconst VaultCrackerMegaWaysSlotParser = require('./games/VaultCrackerMegaWaysSlotParser');\nconst VaultCrackerSlotParser = require('./games/VaultCrackerSlotParser');\nconst VickyVenturaSlotParser = require('./games/VickyVenturaSlotParser');\nconst VikingsLegacyEveryWaySlotParser = require('./games/VikingsLegacyEveryWaySlotParser');\nconst ViralSpiralSlotParser = require('./games/ViralSpiralSlotParser');\nconst WarOfGodsSlotParser = require('./games/WarOfGodsSlotParser');\nconst WellOfWishesSlotParser = require('./games/WellOfWishesSlotParser');\nconst WheelOfAmpSlotParser = require('./games/WheelOfAmpSlotParser');\nconst WildCircusSlotParser = require('./games/WildCircusSlotParser');\nconst WildElementsSlotParser = require('./games/WildElementsSlotParser');\nconst WildFightSlotParser = require('./games/WildFightSlotParser');\nconst WildHotChilliReels2SlotParser = require('./games/WildHotChilliReels2SlotParser');\nconst WildHotChilliReelsSlotParser = require('./games/WildHotChilliReelsSlotParser');\nconst WildNordsSlotParser = require('./games/WildNordsSlotParser');\nconst WildTundraSlotParser = require('./games/WildTundraSlotParser');\nconst WildWildChestSlotParser = require('./games/WildWildChestSlotParser');\nconst WinEscalatorSlotParser = require('./games/WinEscalatorSlotParser');\nconst WingsOfRaSlotParser = require('./games/WingsOfRaSlotParser');\nconst WinterWondersSlotParser = require('./games/WinterWondersSlotParser');\nconst WolfStacksMegaWaysSlotParser = require('./games/WolfStacksMegaWaysSlotParser');\nconst YearRoundRichesClusterbusterSlotParser = require('./games/YearRoundRichesClusterbusterSlotParser');\nconst ZaidasFortuneSlotParser = require('./games/ZaidasFortuneSlotParser');\nconst ZeusLightningMegaWaysSlotParser = require('./games/ZeusLightningMegaWaysSlotParser');\nconst ZeusLightningPowerReelsSlotParser = require('./games/ZeusLightningPowerReelsSlotParser');\nconst ZillardKingSlotParser = require('./games/ZillardKingSlotParser');\n\n/**\n * DopSlotParserFactory.\n *\n * @class\n */\nclass DopSlotParserFactory {\n\n\tconstructor() {\n\t\t/** @type {Object} Game specific parsers */\n\t\tthis.parsers = {\n\t\t\t'10001Nights': TenThousandAndOneNightsSlopParser,\n\t\t\t'10001NightsLimited': TenThousandAndOneNightsSlopParser,\n\t\t\t'10001NightsMegaWays': TenThousandAndOneNightsMegaWaysSlotParser,\n\t\t\t'24HourGrandPrix': TwentyFourHourGrandPrixSlotParser,\n\t\t\t'25ERENMegaWays': MixAndMatchSlotParser,\n\t\t\t'4Squad': FourSquadSlotParser,\n\t\t\t'777Strike': SevenSevenSevenStrikeSlotParser,\n\t\t\t'777StrikeEDC': SevenSevenSevenStrikeSlotParser,\n\t\t\t'777SuperStrike': SevenSevenSevenSuperStrikeSlotParser,\n\t\t\t'7sLuck': SevensLuckSlotParser,\n\t\t\tAdmiralBurstMegaWays: MixAndMatchSlotParser,\n\t\t\tAgeOfAkkadia: AgeOfAkkadiaSlotParser,\n\t\t\tAgentRoyale: AgentRoyaleSlotParser,\n\t\t\tAlexanderTheGreat: AlexanderTheGreatSlotParser,\n\t\t\tAlianzaLimaMegaWays: MixAndMatchSlotParser,\n\t\t\tAlpacaVibeMegaWays: MixAndMatchSlotParser,\n\t\t\tAncientDisco: AncientDiscoSlotParser,\n\t\t\tAncientScript: AncientScriptSlotParser,\n\t\t\tAncientsBlessing: AncientsBlessingSlotParser,\n\t\t\tArcadeBomb: ArcadeBombSlotParser,\n\t\t\tAstronaut: AstronautSlotParser,\n\t\t\tAstros: AstrosSlotParser,\n\t\t\tAthensMegaWays: AthensMegaWaysSlotParser,\n\t\t\tAtlantis: AtlantisSlotParser,\n\t\t\tBabylonRiches: BabylonRichesSlotParser,\n\t\t\tBabylonRichesLimited: BabylonRichesSlotParser,\n\t\t\tBestOfSverigeMegaWays: MixAndMatchSlotParser,\n\t\t\tBestOfSverigeVinterMegaWays: MixAndMatchSlotParser,\n\t\t\tBets10FarmMegaWays: MixAndMatchSlotParser,\n\t\t\tBettyBorisAndBoo: BettyBorisAndBooParser,\n\t\t\tBlobstersClusterbuster: BlobstersClusterbusterSlotParser,\n\t\t\tBloodSuckersMegaWays: BloodSuckersMegaWaysSlotParser,\n\t\t\tBlueJaysJackpotMegaWays: MixAndMatchSlotParser,\n\t\t\tBombuster: BombusterSlotParser,\n\t\t\tBosqueEncantadoMegaWays: MixAndMatchSlotParser,\n\t\t\tBountyRaid: BountyRaidSlotParser,\n\t\t\tBountyRaidLimited: BountyRaidSlotParser,\n\t\t\tBuffaloCollector: BuffaloCollectorSlotParser,\n\t\t\tBuffaloCollectorLimited: BuffaloCollectorSlotParser,\n\t\t\tBuffaloManiaMegaWays: BuffaloManiaMegaWaysSlotParser,\n\t\t\tBullsRunWild: BullsRunWildSlotParser,\n\t\t\tCaiShen168: CaiShen168SlotParser,\n\t\t\tCannonballCash: CannonballCashSlotParser,\n\t\t\tCaptainRizkMegaWays: CaptainRizkMegaWaysParser,\n\t\t\tCashExplorer: CashExplorerSlotParser,\n\t\t\tCasibomIstanbulMegaWays: MixAndMatchSlotParser,\n\t\t\tCasinoNight: CasinoNightSlotParser,\n\t\t\tCasinomaxiFarmMegaWays: MixAndMatchSlotParser,\n\t\t\tCasinometropolFarmMegaWays: MixAndMatchSlotParser,\n\t\t\tChristmasMorning: ChristmasMorningSlotParser,\n\t\t\tCinderella: CinderellaSlotParser,\n\t\t\tCirqueDeLaFortune: CirqueDeLaFortuneSlotParser,\n\t\t\tClashOfTheBeasts: ClashOfTheBeastsSlotParser,\n\t\t\tCloverCraze: CloverCrazeSlotParser,\n\t\t\tConmebolCopaAmerica2024BetanoMegaWays: MixAndMatchSlotParser,\n\t\t\tCopacabanaMegaWays: MixAndMatchSlotParser,\n\t\t\tCrazyGenie: CrazyGenieSlotParser,\n\t\t\tCyberAttack: CyberAttackSlotParser,\n\t\t\tCyberFuryBonanzaMegaWays: MixAndMatchSlotParser,\n\t\t\tDearSanta: DearSantaSlotParser,\n\t\t\tDevilsNumber: DevilsNumberSlotParser,\n\t\t\tDiamondBlitz2: DiamondBlitz2SlotParser,\n\t\t\tDiamondBlitz: DiamondBlitzSlotParser,\n\t\t\tDiamondClubMegaWays: MixAndMatchSlotParser,\n\t\t\tDiamondDoggies: DiamondDoggiesSlotParser,\n\t\t\tDiamondRoyale: DiamondRoyaleSlotParser,\n\t\t\tDiceDiceDice: DiceDiceDiceSlotParser,\n\t\t\tDiscountCasinoFarmMegaWays: MixAndMatchSlotParser,\n\t\t\tDivineWays: DivineWaysSlotParser,\n\t\t\tDoggyRichesMegaWays: DoggyRichesMegaWaysParser,\n\t\t\tDragonKingLegendOfTheSeas: DragonKingLegendOfTheSeasSlotParser,\n\t\t\tDragonsClusterbuster: DragonsClusterbusterSlotParser,\n\t\t\tDragonsFireInfiniReels: DragonsFireInfiniReelsSlotParser,\n\t\t\tDragonsFireMegaWays: DragonsFireMegaWaysSlotParser,\n\t\t\tDragonsLock: DragonsLockSlotParser,\n\t\t\tDragonsMirror: DragonsMirrorSlotParser,\n\t\t\tDragonsPlayground: DragonsPlaygroundSlotParser,\n\t\t\tDruidsMagic: DruidsMagicSlotParser,\n\t\t\tDynamiteRiches: DynamiteRichesSlotParser,\n\t\t\tDynamiteRichesLimited: DynamiteRichesSlotParser,\n\t\t\tDynamiteRichesMegaWays: DynamiteRichesMegaWaysParser,\n\t\t\tDynamiteRichesMegaWaysLimited: DynamiteRichesMegaWaysParser,\n\t\t\tEUROEFSANELERiMegaWays: MixAndMatchSlotParser,\n\t\t\tEasyGold: EasyGoldSlotParser,\n\t\t\tEasyGoldLimited: EasyGoldSlotParser,\n\t\t\tEgyptClusterbuster: EgyptClusterbusterSlotParser,\n\t\t\tEgyptMegaWays: EgyptMegaWaysSlotParser,\n\t\t\tElitloppetMegaWays: MixAndMatchSlotParser,\n\t\t\tElvenMagic: ElvenMagicSlotParser,\n\t\t\tEmeraldDiamond: EmeraldDiamondSlotParser,\n\t\t\tEmperorOfIndia: EmperorOfIndiaSlotParser,\n\t\t\tEpicJourney: EpicJourneySlotParser,\n\t\t\tEsqueletoMariachi: EsqueletoMariachiSlotParser,\n\t\t\tFTNBonanzaMegaWays: MixAndMatchSlotParser,\n\t\t\tFairyForestMegaWays: MixAndMatchSlotParser,\n\t\t\tFilthyRichMegaWays: MixAndMatchSlotParser,\n\t\t\tFishtastic: FishtasticSlotParser,\n\t\t\tFishtasticLimited: FishtasticSlotParser,\n\t\t\tFlamingFox: FlamingFoxSlotParser,\n\t\t\tFlodder: FlodderSlotParser,\n\t\t\tFonbetLollipopMegaWays: MixAndMatchSlotParser,\n\t\t\tFortuneCat: FortuneCatSlotParser,\n\t\t\tFortuneCharm: FortuneCharmSlotParser,\n\t\t\tFortuneHouse: FortuneHouseSlotParser,\n\t\t\tFruitFlash: FruitFlashSlotParser,\n\t\t\tFruitShopFrenzy: FruitShopFrenzySlotParser,\n\t\t\tFruitShopFrenzyLimited: FruitShopFrenzySlotParser,\n\t\t\tFurballFeverMegaWays: MixAndMatchSlotParser,\n\t\t\tGemCrush: GemCrushSlotParser,\n\t\t\tGemsGoneWild: GemsGoneWildSlotParser,\n\t\t\tGemsGoneWildPowerReels: GemsGoneWildPowerReelsSlotParser,\n\t\t\tGemsInfernoMegaWays: GemsInfernoMegaWaysSlotParser,\n\t\t\tGemtastic: GemtasticSlotParser,\n\t\t\tGenieNights: GenieNightsSlotParser,\n\t\t\tGetTheGoldInfiniReels: GetTheGoldInfiniReelsSlotParser,\n\t\t\tGigaBlast: GigaBlastSlotParser,\n\t\t\tGladiatorClash: GladiatorClashSlotParser,\n\t\t\tGoddessOfTheMoonMegaWays: MixAndMatchSlotParser,\n\t\t\tGodsOfTroy: GodsOfTroySlotParser,\n\t\t\tGoldMineMistress: GoldMineMistressSlotParser,\n\t\t\tGoldenLeprechaunMegaWays: GoldenLeprechaunMegaWaysSlotParser,\n\t\t\tGoldenOffer: GoldenOfferSlotParser,\n\t\t\tGonzosQuestMegaWays: GonzosQuestMegaWaysSlotParser,\n\t\t\tGoodLuckClusterbuster: GoodLuckClusterbusterSlotParser,\n\t\t\tGrandWheel: GrandWheelSlotParser,\n\t\t\tGreatGold: GreatGoldSlotParser,\n\t\t\tGreatNationMegaWays: MixAndMatchSlotParser,\n\t\t\tGronksTouchdownTreasuresMegaWays: MixAndMatchSlotParser,\n\t\t\tHammerGods: HammerGodsSlotParser,\n\t\t\tHappyApples: HappyApplesSlotParser,\n\t\t\tHarleCoin: HarleCoinParser,\n\t\t\tHereKittyKitty: HereKittyKittySlotParser,\n\t\t\tHoardOfPoseidon: HoardOfPoseidonSlotParser,\n\t\t\tHoardOfPoseidonLimited: HoardOfPoseidonSlotParser,\n\t\t\tHotHotChilliPot: HotHotChilliPotSlotParser,\n\t\t\tHundredKDrop: HundredKDropSlotParser,\n\t\t\tImperialPalace: ImperialPalaceSlotParser,\n\t\t\tJackInAPot: JackInAPotSlotParser,\n\t\t\tJackpotPlanetMegaWays: MixAndMatchSlotParser,\n\t\t\tJellyBellyMegaWays: JellyBellyMegaWaysSlotParser,\n\t\t\tJetbahisFarmMegaWays: MixAndMatchSlotParser,\n\t\t\tJewelScarabs: JewelScarabsSlotParser,\n\t\t\tJingleBellsBonanza: JingleBellsBonanzaSlotParser,\n\t\t\tJingleBellsPowerReels: JingleBellsPowerReelsSlotParser,\n\t\t\tJingleWaysMegaWays: JingleWaysMegaWaysSlotParser,\n\t\t\tJoeExotic: JoeExoticSlotParser,\n\t\t\tJudgementDayMegaWays: JudgementDayMegaWaysSlotParser,\n\t\t\tJuegoUniversitarioMegaWays: MixAndMatchSlotParser,\n\t\t\tJungleParadiseMegaWays: MixAndMatchSlotParser,\n\t\t\tKnightsOfAvalon: KnightsOfAvalonSlotParser,\n\t\t\tLaserFruit: LaserFruitSlotParser,\n\t\t\tLastChanceSaloon: LastChanceSaloonSlotParser,\n\t\t\tLegendaryExcalibur: LegendaryExcaliburSlotParser,\n\t\t\tLionDance: LionDanceSlotParser,\n\t\t\tLionsHoard: LionsHoardSlotParser,\n\t\t\tLondonTube: LondonTubeSlotParser,\n\t\t\tLostRelics2: LostRelics2SlotParser,\n\t\t\tLuckyDevil: LuckyDevilSlotParser,\n\t\t\tLuckyFortuneCat: FortuneCatSlotParser,\n\t\t\tLuckyMrGreen: LuckyMrGreenSlotParser,\n\t\t\tLuckyOktoberfest: LuckyOktoberfestSlotParser,\n\t\t\tLuckyRadarMegaWays: MixAndMatchSlotParser,\n\t\t\tLuckySkyMegaWays: MixAndMatchSlotParser,\n\t\t\tLunaFortuna: LunaFortunaSlotParser,\n\t\t\tMOMANGMegaWays: MixAndMatchSlotParser,\n\t\t\tMagicLab: MagicLabSlotParser,\n\t\t\tMagicNeuquenMegaWays: MixAndMatchSlotParser,\n\t\t\tMagicPowersMegaWays: MagicPowersMegaWaysSlotParser,\n\t\t\tMajesticMysteriesPowerReels: MajesticMysteriesPowerReelsSlotParser,\n\t\t\tMasquerade: MasqueradeSlotParser,\n\t\t\tMayanGods: MayanGodsSlotParser,\n\t\t\tMayhem: MayhemSlotParser,\n\t\t\tMegaDragon: MegaDragonSlotParser,\n\t\t\tMegaPyramid: MegaPyramidSlotParser,\n\t\t\tMermaidRockMegaWays: MixAndMatchSlotParser,\n\t\t\tMermaids: MermaidsSlotParser,\n\t\t\tMidasGold: MidasGoldSlotParser,\n\t\t\tMidnightRomance: MidnightRomanceSlotParser,\n\t\t\tMineBlown: MineBlownSlotParser,\n\t\t\tMixAndMatch: MixAndMatchSlotParser,\n\t\t\tMobilbahisFarmMegaWays: MixAndMatchSlotParser,\n\t\t\tMonstersUnchained: MonstersUnchainedSlotParser,\n\t\t\tMoonSpell: MoonSpellSlotParser,\n\t\t\tMsRobinHood: MsRobinHoodSlotParser,\n\t\t\tMultiplierRiches: MultiplierRichesSlotParser,\n\t\t\tMummyMegaWays: MummyMegaWaysSlotParser,\n\t\t\tMysteryFruit: MysteryFruitSlotParser,\n\t\t\tMysteryFruitLimited: MysteryFruitSlotParser,\n\t\t\tMysteryReelsDeluxe: MysteryReelsDeluxeSlotParser,\n\t\t\tMysteryReelsMegaWays: MysteryReelsMegaWaysSlotParser,\n\t\t\tMysticWheel: MysticWheelSlotParser,\n\t\t\tNarcosMexico: NarcosMexicoSlotParser,\n\t\t\tNeonLinks: NeonLinksSlotParser,\n\t\t\tNightRoller: NightRollerSlotParser,\n\t\t\tNightmareCityMegaWays: MixAndMatchSlotParser,\n\t\t\tNinjaWays: NinjaWaysSlotParser,\n\t\t\tNovibetBasketOfRichesMegaWays: MixAndMatchSlotParser,\n\t\t\tNovibetFreakBeatsMegaWays: MixAndMatchSlotParser,\n\t\t\tNovibetTrophyQuestMegaWays: MixAndMatchSlotParser,\n\t\t\tNovibetWinterFurballsMegaWays: MixAndMatchSlotParser,\n\t\t\tOsmanliBonanzaMegaWays: MixAndMatchSlotParser,\n\t\t\tPaddyPowerGoldMegaWays: PaddyPowerGoldMegaWaysSlotParser,\n\t\t\tPandorasTreasure: PandorasTreasureSlotParser,\n\t\t\tPeggySweets: PeggySweetsSlotParser,\n\t\t\tPenguinsPowerplayMegaWays: MixAndMatchSlotParser,\n\t\t\tPersianFortune: PersianFortuneSlotParser,\n\t\t\tPiggyPirates: PiggyPiratesSlotParser,\n\t\t\tPiggyRiches2MegaWays: PiggyRiches2MegaWaysSlotParser,\n\t\t\tPiratesParty: PiratesPartySlotParser,\n\t\t\tPiratesPlenty: PiratesPlentySlotParser,\n\t\t\tPiratesPlentyBattleForGold: PiratesPlentyBattleForGoldSlotParser,\n\t\t\tPiratesPlentyMegaWays: PiratesPlentyMegaWaysSlotParser,\n\t\t\tPlayWithTheDevil: PlayWithTheDevilSlotParser,\n\t\t\tPokerdomAnniversaryMegaWays: MixAndMatchSlotParser,\n\t\t\tPowerPathLuckyReelsMegaWays: MixAndMatchSlotParser,\n\t\t\tPremioMayorMegaWays: MixAndMatchSlotParser,\n\t\t\tPrimateKing: PrimateKingSlotParser,\n\t\t\tPrimateKingLimited: PrimateKingSlotParser,\n\t\t\tPrimateKingMegaWays: PrimateKingMegaWaysSlotParser,\n\t\t\tPrimateKingMegaWaysLimited: PrimateKingMegaWaysSlotParser,\n\t\t\tPussNBoots: PussNBootsSlotParser,\n\t\t\tRAsLegend: RAsLegendSlotParser,\n\t\t\tRainbowJackpots: RainbowJackpotsSlotParser,\n\t\t\tRainbowJackpotsMegaWays: RainbowJackpotsMegaWaysSlotParser,\n\t\t\tRainbowJackpotsPowerLines: RainbowJackpotsPowerLinesSlotParser,\n\t\t\tRakiBonanzaMegaWays: MixAndMatchSlotParser,\n\t\t\tReactor: ReactorSlotParser,\n\t\t\tRedDiamond: RedDiamondSlotParser,\n\t\t\tRedHotBBQ: RedHotBBQSlotParser,\n\t\t\tReelHeist: ReelHeistSlotParser,\n\t\t\tReelKeeper: ReelKeeperSlotParser,\n\t\t\tReelKeeperLimited: ReelKeeperSlotParser,\n\t\t\tReelKingMega: ReelKingMegaSlotParser,\n\t\t\tRegalBeasts: RegalBeastsSlotParser,\n\t\t\tReptizillionsPowerReels: ReptizillionsPowerReelsSlotParser,\n\t\t\tRiddleOfTheSphinx: RiddleOfTheSphinxSlotParser,\n\t\t\tRisqueMegaWays: RisqueMegaWaysSlotParser,\n\t\t\tRobinHoodsWildForest: RobinHoodsWildForestSlotParser,\n\t\t\tRocketMen: RocketMenSlotParser,\n\t\t\tRomanEmperors: RomanEmperorsSlotParser,\n\t\t\tRutschebanenMegaWays: MixAndMatchSlotParser,\n\t\t\tSBOTOPRisingOfTheBeastMegaWays: MixAndMatchSlotParser,\n\t\t\tSHOWMETHEHONEYMegaWays: MixAndMatchSlotParser,\n\t\t\tSakuraMasks: SakuraMasksSlotParser,\n\t\t\tSakuraMasksLimited: SakuraMasksSlotParser,\n\t\t\tSantaExpressMegaWays: MixAndMatchSlotParser,\n\t\t\tSavannahPride: SavannahPrideSlotParser,\n\t\t\tSexyWashMegaWays: MixAndMatchSlotParser,\n\t\t\tShadowSociety: ShadowSocietySlotParser,\n\t\t\tSheepGoneWild: SheepGoneWildSlotParser,\n\t\t\tSirensRiches: SirensRichesSlotParser,\n\t\t\tSirensRichesLimited: SirensRichesSlotParser,\n\t\t\tSnowWildAndThe7Features: SnowWildAndThe7FeaturesSlotParser,\n\t\t\tSpinTown: SpinTownSlotParser,\n\t\t\tSpringRaceMegaWays: MixAndMatchSlotParser,\n\t\t\tStarvegasTombMegaWays: MixAndMatchSlotParser,\n\t\t\tSteamSquad: SteamSquadSlotParser,\n\t\t\tStolenTreasures: StolenTreasuresSlotParser,\n\t\t\tSugarliciousEveryWay: SugarliciousEveryWaySlotParser,\n\t\t\tSugarliciousEveryWayLimited: SugarliciousEveryWaySlotParser,\n\t\t\tSukkerbagerenMegaWays: MixAndMatchSlotParser,\n\t\t\tSultanBonanzaMegaWays: MixAndMatchSlotParser,\n\t\t\tSumoSpins: SumoSpinsSlotParser,\n\t\t\tSunFortune: SunFortuneSlotParser,\n\t\t\tTempleOfCresusMegaWays: MixAndMatchSlotParser,\n\t\t\tTenElements: TenElementsSlotParser,\n\t\t\tTheBigTenMegaWays: MixAndMatchSlotParser,\n\t\t\tTheEqualizer: TheEqualizerSlotParser,\n\t\t\tTheGoodTheBadAndTheRich: TheGoodTheBadAndTheRichSlotParser,\n\t\t\tTheGreatestTrainRobbery: TheGreatestTrainRobberySlotParser,\n\t\t\tTheWildHatter: TheWildHatterSlotParser,\n\t\t\tTheWildHatterLimited: TheWildHatterSlotParser,\n\t\t\tTheWildKiss: TheWildKissSlotParser,\n\t\t\tTheWishMasterMegaWays: TheWishMasterMegaWaysSlotParser,\n\t\t\tThorsLightning: ThorsLightningSlotParser,\n\t\t\tThorsVengeance: ThorsVengeanceSlotParser,\n\t\t\tThreeKingdoms: ThreeKingdomsSlotParser,\n\t\t\tThreeMusketeers: ThreeMusketeersSlotParser,\n\t\t\tTicketToWild: TicketToWildSlotParser,\n\t\t\tTigerKingJoeExotic: JoeExoticSlotParser,\n\t\t\tTotemLightning: TotemLightningSlotParser,\n\t\t\tTotemLightningPowerReels: TotemLightningPowerReelsSlotParser,\n\t\t\tTransylvaniaNightOfBlood: TransylvaniaNightOfBloodSlotParser,\n\t\t\tTreasureMine: TreasureMineSlotParser,\n\t\t\tTreasureMinePowerReels: TreasureMinePowerReelsSlotParser,\n\t\t\tTrickOfTheDeadWildCandiesMegaWays: MixAndMatchSlotParser,\n\t\t\tTrillionaire: TrillionaireParser,\n\t\t\tTrillionaireMegaWays: TrillionaireMegaWaysSlotParser,\n\t\t\tTrophyFish: TrophyFishSlotParser,\n\t\t\tTurtleParadise: TurtleParadiseSlotParser,\n\t\t\tVaultCracker: VaultCrackerSlotParser,\n\t\t\tVaultCrackerMegaWays: VaultCrackerMegaWaysSlotParser,\n\t\t\tVaultCrackerMegaWaysLimited: VaultCrackerMegaWaysSlotParser,\n\t\t\tVickyVentura: VickyVenturaSlotParser,\n\t\t\tVikingsLegacyEveryWay: VikingsLegacyEveryWaySlotParser,\n\t\t\tViralSpiral: ViralSpiralSlotParser,\n\t\t\tWarOfGods: WarOfGodsSlotParser,\n\t\t\tWellOfWishes: WellOfWishesSlotParser,\n\t\t\tWheelOfAmp: WheelOfAmpSlotParser,\n\t\t\tWildCircus: WildCircusSlotParser,\n\t\t\tWildElements: WildElementsSlotParser,\n\t\t\tWildFight: WildFightSlotParser,\n\t\t\tWildHotChilliReels2: WildHotChilliReels2SlotParser,\n\t\t\tWildHotChilliReels: WildHotChilliReelsSlotParser,\n\t\t\tWildNords: WildNordsSlotParser,\n\t\t\tWildTouchdownMegaWays: MixAndMatchSlotParser,\n\t\t\tWildTundra: WildTundraSlotParser,\n\t\t\tWildWildChest: WildWildChestSlotParser,\n\t\t\tWinEscalator: WinEscalatorSlotParser,\n\t\t\tWingsOfRa: WingsOfRaSlotParser,\n\t\t\tWingsOfRaMegaWays: WingsOfRaSlotParser,\n\t\t\tWinterBurstMegaWays: MixAndMatchSlotParser,\n\t\t\tWinterWonders: WinterWondersSlotParser,\n\t\t\tWolfStacksMegaWays: WolfStacksMegaWaysSlotParser,\n\t\t\tYearRoundRichesClusterbuster: YearRoundRichesClusterbusterSlotParser,\n\t\t\tYearRoundRichesClusterbusterLimited: YearRoundRichesClusterbusterSlotParser,\n\t\t\tZaidasFortune: ZaidasFortuneSlotParser,\n\t\t\tZeusLightningMegaWays: ZeusLightningMegaWaysSlotParser,\n\t\t\tZeusLightningPowerReels: ZeusLightningPowerReelsSlotParser,\n\t\t\tZillardKing: ZillardKingSlotParser,\n\t\t};\n\t}\n\n\t/**\n\t * Creates an appropriate parser instance for the specified game id\n\t * Game specific parsers are preferred, default parser is used if one is not found\n\t * @param  {String} gameId The game id\n\t * @return {DopSlotParser} The slot parser instance\n\t */\n\tcreateParser(gameId) {\n\t\tif (gameId in this.parsers) {\n\t\t\treturn new this.parsers[gameId]();\n\t\t}\n\n\t\treturn new DopSlotParser();\n\t}\n}\n\nmodule.exports = DopSlotParserFactory;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass AgeOfAkkadiaParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers = this.featureHandlers.filter(handler => handler.name !== 'swapTiles');\n  }\n\n  _initReels(data) {\n    super._initReels(data);\n\n    const hasBonusTitle = data.scatters && data.scatters.length > 0 && data.scatters[0].reel === 0;\n    let winDetails = this.winDetails;\n    let winLinesData = data.winLines;\n\n    if (winLinesData) {\n      if (winLinesData.length) {\n        winLinesData.forEach(winLine => {\n          if (data.multiplier > 1) {\n            winLine.multiplier =  data.multiplier\n          }\n        });\n\n        winDetails.winLines = winLinesData;\n      }\n    }\n\n    // We have a hidden label for FreeSpins, so we need a sign to show the label.\n    // So we added a bonus reel to show bonus label\n    if (hasBonusTitle) {\n      const bonusReels = [0,0,0,0,0];\n      const bonusGuideId = 11;\n      bonusReels[data.scatters[0].index] = bonusGuideId;\n      data.reels[data.reels.length] = bonusReels;\n\n      if (data.winLines) {\n        data.winLines.forEach(wins => {\n          wins.tiles[wins.tiles.length] = [0,0,0,0,0];\n        });\n      }\n    }\n  }\n\n}\n\nmodule.exports = AgeOfAkkadiaParser;\n","const DopSlotParser = require('../DopSlotParser');\nconst AGENT_TILE_ID = 10;\n\nclass AgentRoyaleSlotParser extends DopSlotParser {\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.featureHandlers.forEach(handler => {\n\t\t\tif (handler.name === 'lockedTiles') handler.cb = this._handleLockedTiles;\n\t\t});\n\t}\n\n\t/**\n\t * @override To handle different property name for tile's id.\n\t */\n\t_handleLockedTiles(data, featureName) {\n\t\tconst filteredData = data[featureName].filter(tile => tile.tileId !== AGENT_TILE_ID);\n\t\tthis._applyReelsModifier(filteredData, data.reels)\n\t}\n\n\t/**\n\t * @override To handle fat tile bottom half. Another asset id is used for it.\n\t */\n\t_handleFatTiles(data, featureName) {\n\t\tconst reels = data.reels;\n\t\tconst fatTilesData = data[featureName];\n\n\t\tfatTilesData.forEach((tile) => {\n\t\t\tconst { reel, index, tileId } = tile;\n\n\t\t\tif (reels[reel]) {\n\t\t\t\tif (reels[reel][index]) reels[reel][index] = tileId;\n\t\t\t\tif (reels[reel][index+1]) reels[reel][index+1] = parseInt(`1${tileId}`, 10);\n\t\t\t}\n\t\t});\n\t}\n}\n\nmodule.exports = AgentRoyaleSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nconst MAX_MULTIPLIER = 5; // the largest multiplier we have an asset for\n\nclass AlexanderTheGreatSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers = [\n      { name: 'lockedTiles', cb: this._handleWilds },\n      { name: 'randomWilds', cb: this._handleWilds }\n    ];\n  }\n\n\n  _handleWilds(data, featureName) {\n    const reels = data.reels;\n\n    for (const { reel, index, tileId, multiplier } of data[featureName]) {\n      if (multiplier > 1 && multiplier <= MAX_MULTIPLIER) {\n        reels[reel][index] = `${tileId}_${multiplier}`;\n      } else {\n        reels[reel][index] = tileId;\n      }\n    }\n\n  }\n}\n\nmodule.exports = AlexanderTheGreatSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* moves fatTiles feature at the last feature place\n* @class\n* @extends {DopSlotParser}\n*/\nclass AncientDiscoSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    const fatTiles = this.featureHandlers.find(feature => feature.name === 'fatTiles');\n    const otherFeatures = this.featureHandlers.filter(feature => feature.name !== 'fatTiles');\n\n    this.featureHandlers = [...otherFeatures, fatTiles];\n  }\n}\n\nmodule.exports = AncientDiscoSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass AncientScriptParser extends DopSlotParser {\n\n\tconstructor() {\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// {name: 'swapReels', cb: this._handleSwapReels}\n\n\t\tthis.featureHandlers.unshift({\n\t\t\tname: 'expandingTiles', cb: this._handleExpandingTiles,\n\t\t});\n\t}\n\n\t/**\n\t* Handler for the 'Expanding Tiles' feature\n\t* @private\n\t* @param {Object} data Game data, contains\n\t* screen reels and every game feature\n\t* @param {Array} data.expandingTiles Array of tile modifications\n\t* @param {Array} data.reelsBuffer reels buffer array\n\t* @param {Array} data.reels Screen reels state\n\t*/\n\t_handleExpandingTiles(data) {\n\t\tlet reels = data.reels;\n\t\tlet expandingTilesData = data.expandingTiles;\n\n\t\texpandingTilesData.forEach((expandTile) => {\n\t\t\texpandTile.tiles.forEach((tile) => {\n\t\t\t\treels[tile.reel][tile.index] = tile.toTile;\n\t\t\t});\n\t\t});\n\t}\n}\n\nmodule.exports = AncientScriptParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass AncientsBlessingSlotParser extends DopSlotParser {\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.featureHandlers.forEach(handler => {\n\t\t\tif (handler.name === 'lockedTiles') handler.cb = this._handleLockedTiles;\n\t\t});\n\t}\n\n\t/**\n\t * @override Handles different property name and filters unlocked tiles.\n\t */\n\t_handleLockedTiles(data, featureName) {\n\t\tconst filteredLockedTiles = data[featureName].filter(lockedTile => lockedTile.spins);\n\n\t\tif (!filteredLockedTiles.length) return;\n\t\tthis._applyReelsModifier(filteredLockedTiles, data.reels)\n\t}\n}\n\nmodule.exports = AncientsBlessingSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass ArcadeBombParser extends DopSlotParser {\n\n\tconstructor() {\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// {name: 'swapReels', cb: this._handleSwapReels}\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\t_afterParseOperations(data) {\n\t\tlet bomb = data.game.bomb;\n\t\tlet reels = data.game.reels;\n\n\t\tif (bomb && (bomb.explosions.length !== 0)) {\n\t\t\tbomb.explosions.forEach((explosion) => {\n\t\t\t\texplosion.positions.forEach((tile) => {\n\t\t\t\t\treels[tile.reel][tile.index] = bomb.toTile;\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t}\n}\n\nmodule.exports = ArcadeBombParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* AstronautSlotParser. Handles parsing game specific features.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass AstronautSlotParser extends DopSlotParser {\n\n\t_freeSpinsBeforeParseOperations(data) {\n\t\tlet otherWins = data.otherWins;\n\t\tlet instantWin = data.win.instantWin || data.win.limitedWin;\n\t\tlet bonusWin = data.win.pickerBonus\n\t\t\t|| data.win.pathBonus\n\t\t\t|| data.win.pathPickerBonus\n\t\t\t|| data.win.multiPickerBonus;\n\n\t\t// apply stake multiplier\n\t\tif (data.win && data.win.multiplier > 0 && data.amount !== 0) {\n\t\t\totherWins.push({\n\t\t\t\tamount: data.win.multiplier,\n\t\t\t\ttype: 'multiplier'\n\t\t\t});\n\t\t}\n\n\t\t// apply bonus wins\n\t\tif (bonusWin) {\n\t\t\totherWins.push({ type: 'bonus', amount: bonusWin });\n\t\t}\n\n\t\tif (instantWin) {\n\t\t\t//it's not necessary in this game to show instantWin, only as total win, also some wins get displayed twice otherwise\n\t\t\t// otherWins.push({ type: 'instantWin', amount: instantWin });\n\t\t}\n\t}\n\n\t/**\n\t * @overrides - adds spins from autoFinish into response in order to use them as real spins,\n\t *  also because we might have respins in them and there's no logic to handle respins in autofinish\n\t */\n\tparse(gameId, data) {\n\t\tconst autoFinishRes = data.responses.find(res => res.game.autofinish);\n\n\t\tif(!autoFinishRes) return super.parse(gameId, data)\n\n\t\tconst restResponses = data.responses.filter(res => res !== autoFinishRes);\n\t\tconst parsedAutoFinishResponses = autoFinishRes.game.autofinish.map(res => {\n\t\tconst combinedData = Object.assign({}, autoFinishRes, {game: res}); // combining latest user balance with autofinish spin responses\n\t\treturn combinedData;\n\t\t});\n\n\t\tconst responses = [].concat(restResponses, parsedAutoFinishResponses);\n\t\tconst parsedData = Object.assign({}, data, {responses})\n\n\t\treturn super.parse(gameId, parsedData) // passing data with combined responses from autoFinish\n\t}\n\n\t/**\n\t * @overrides - adds spins from choice into respins\n\t */\n\t_beforeParseOperations(response) {\n\t\tconst spinData = response.game;\n\t\tconst isInitialSpin = response.responses;\n\t\tconst shouldAddToRespins = (!spinData.choices || spinData.choices && spinData.choices.selected !== 'collect'); // not necessary to show choice collect as a respin\n\t\t\n\t\tif (!isInitialSpin && shouldAddToRespins) {\n\t\t\tthis._handleExtraSpin(spinData)\n\t\t\tthis.winDetails.respins.push(spinData)\n\t\t}\n\n\t\tif (response.game.gameData && response.game.gameData.respin) {\n\t\t\tconst respins = response.game.gameData.respin\n\t\t\tthis._flattenRespins(respins, this.winDetails.respins);\n\t\t}\n\t}\n\n\t/**\n\t * @overrides - added necessary check if winLines exist\n\t */\n\t_handleResponseCorrection(res) {\n\t\tlet total = 0;\n\n\t\t_.each(res.game.win, (val, key) => {\n\t\t\tif (key === 'total') {\n\t\t\t\t// skip\n\t\t\t}else if (key === 'lines') {\n\t\t\t\tlet winLines;\n\t\t\t\tif(res.game.gameData) winLines = res.game.gameData.winLines;\n\t\t\t\telse winLines = res.game.winLines;\n\n\t\t\t\twinLines && winLines.forEach((line) => {\n\t\t\t\t\ttotal += line.amount;\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\ttotal += val;\n\t\t\t}\n\t\t});\n\n\t\tif (res.jackpots && res.jackpots.win > 0) {\n\t\t\tres.jackpots.pots.forEach((pot) => {\n\t\t\t\ttotal += pot.win;\n\t\t\t});\n\t\t}\n\n\t\treturn total;\n\t}\n\n\t/**\n\t * adds half win with custom name, hides sum passed from prev spin on no win\n\t * @overrides\n\t */\n\t_freeSpinsAfterParseOperations(extraSpin) {\n\t\tif (extraSpin.selected === 'half') {\n\t\t\textraSpin.otherWins.push({\n\t\t\t\ttype: 'halfCollected',\n\t\t\t\tamount: extraSpin.pendingWin.amount\n\t\t\t});\n\t\t}\n\n\t\tconst buffer = extraSpin && (extraSpin.reelsBuffer || extraSpin.gameData.reelsBuffer);\n\t\tconst hasRedDiamond = buffer[0][1][0] === 1;\n\n\t\tif (hasRedDiamond) {  // half win is carried through all spins and it's misleading showing it on red diamond tile(which is no win spin)\n\t\t\textraSpin.amount = 0;\n\t\t}\n\t}\n\n\t/**\n\t * shows instantWin when choice collect with a custom winName\n\t * @overrides\n\t */\n\t\t_addOtherWins(data, type) {\n\t\t\tObject.keys(this.otherWins).forEach((winType) => {\n\t\t\t\tthis.otherWins[winType].forEach((winName) => {\n\t\t\t\t\tconst hasCollect = data && (data.selected === 'collect' ||  data.gameData && data.gameData.selected === 'collect');\n\t\t\t\t\tconst buffer = data && (data.reelsBuffer || data.gameData.reelsBuffer);\n\t\t\t\t\tconst hasRedDiamond = buffer[0][1][0] === 1; // if we hit red diamond win should not be added as bonus\n\t\t\t\t\t\n\t\t\t\t\tif (data.win[winName] && !hasCollect && !hasRedDiamond) {\n\t\t\t\t\t\tthis.winDetails.otherWins.push({ type: winType, amount: data.win[winName] });\n\t\t\t\t\t} else if (data.win[winName] && hasCollect && !hasRedDiamond) {\n\t\t\t\t\t\tconst collectedAmount = data.gameData.progress.nextWin.takeAll.amount\n\t\t\t\t\t\tthis.winDetails.otherWins.push({ type: 'fullCollected', amount: collectedAmount });\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}, this);\n\t\t}\n\n}\n\nmodule.exports = AstronautSlotParser;","const DopSlotParser = require('../DopSlotParser');\nconst Config = require('../../../../config/Config');\n\nconst JP_SPAWN_INDEX = 4;\n\n/**\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass AstrosParser extends DopSlotParser {\n\t/**\n\t * @override Jp tiles can spawn only on the bottom row.\n\t */\n\t_handleWins(data) {\n\t\tlet winDetails = this.winDetails;\n\n\t\t// handle game(spin) wins\n\t\tif (data.game.win.total) {\n\t\t\twinDetails.totalWin += data.game.win.total;\n\t\t}\n\n\t\tif (data.game.win.lines) {\n\t\t\twinDetails.initialLinesWin = data.game.win.lines;\n\n\t\t\tlet winLinesData = data.game.winLines;\n\n\t\t\twinLinesData.forEach((line) => {\n\t\t\t\tline.type = line.index + 1;\n\t\t\t});\n\t\t\twinDetails.winLines = winLinesData;\n\t\t}\n\n\t\tthis.winDetails.winLineSet = typeof data.game.linesGroupIndex !== 'undefined' ? data.game.linesGroupIndex : -1;\n\n\t\t// Gamble\n\t\tif (data.game.win.gamble) {\n\t\t\twinDetails.otherWins.push({\n\t\t\t\ttype: 'gamble',\n\t\t\t\tamount: this.data.game.win.gamble\n\t\t\t});\n\t\t}\n\t\t// bonuses, multipliers etc\n\t\tthis._addOtherWins(data.game);\n\n\t\t// handle jackpot wins\n\t\tif (data.jackpots && data.jackpots.win > 0) {\n\t\t\tconst gameData = data.game;\n\t\t\tconst showJackpotScreen = !Config.noJackpotScreen.includes(this.gameId);\n\n\t\t\twinDetails.totalWin += data.jackpots.win;\n\t\t\t_.each(data.jackpots.pots, pot => {\n\t\t\t\tif (pot.win > 0) {\n\t\t\t\t\tconst lastSpinData = this._getLastSpinData(winDetails, gameData);\n\t\t\t\t\tconst jackpot = {\n\t\t\t\t\t\ttype: pot.id,\n\t\t\t\t\t\tamount: pot.win,\n\t\t\t\t\t\treels: showJackpotScreen ? this._cloneReels(lastSpinData.reels) : null\n\t\t\t\t\t};\n\n\t\t\t\t\tconst jpData = gameData.jackpotTiles.map(jpTile => _.clone(jpTile))\n\t\t\t\t\tjpData.forEach(jpTile => jpTile.index = JP_SPAWN_INDEX);\n\n\t\t\t\t\tif (showJackpotScreen) {\n\t\t\t\t\t\tthis._handleJackpotTiles(jpData, jackpot.reels);\n\n\t\t\t\t\t\tthis._nudgeJackpotTiles(lastSpinData, jackpot.reels, gameData);\n\t\t\t\t\t}\n\n\t\t\t\t\twinDetails.jackpotWins.push(jackpot);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n}\n\nmodule.exports = AstrosParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* AthensMegaWaysSlotParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n*\n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n*\n* After-parse logic can be added in the method _afterParseOperations(data).\n*\n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass AthensMegaWaysSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers.push({ name: 'randomWilds', cb: this._handleFeature });\n  }\n}\n\nmodule.exports = AthensMegaWaysSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass AtlantisSlotParser extends DopSlotParser {\n    constructor() {\n        super();\n    }\n\n    /**\n     * Handler for the 'Fat tiles' feature\n     * @private\n     * @param  {Object} data Game data, contains\n     * screen reels and every game feature\n     * @override different format of response data for fatTiles feature\n     */\n    _handleFatTiles(data, featureName) {\n        let reels = data.reels;\n        let fatTilesData = data[featureName];\n\n        fatTilesData.forEach((tile) => {\n            let reelIndex = tile.reel;\n\n            let tileBottom = tile.index + tile.height;\n\n            for (let j = tile.index; j < tileBottom; j++) {\n                if (reels[reelIndex] && reels[reelIndex][j]) {\n                    reels[reelIndex][j] = tile.tileId;\n                }\n            }\n        });\n    }\n}\n\nmodule.exports = AtlantisSlotParser;","const DopSlotParser = require('../DopSlotParser');\nconst wildId = '11';\nconst maxProgress = 8;\nconst frameSpinOpen = 6;\n\n/**\n * BabylonRichesSlotParser. Handles parsing game specific features.\n * @class\n * @extends {DopSlotParser}\n */\nclass BabylonRichesSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers = [\n      { name: 'lockedTiles', cb: this._handleLockedTiles },\n      { name: 'freeSpins', cb: this._handleFreeSpins },\n    ];\n  }\n\n  _beforeParseOperations(response) {\n    if (response.game.respin) {\n      const respinData = response.game.respin[0];\n\n      response.game.win = respinData.win;\n      response.game.winLineSet = respinData.winLineSet;\n      response.game.winLines = respinData.winLines;\n      response.game.winsMultipliers = respinData.winsMultipliers;\n      response.game.randomWilds = respinData.randomWilds;\n      response.game.symbolMultipliers = respinData.symbolMultipliers;\n      response.game.instantWin = respinData.instantWin;\n      response.game.freeSpins = respinData.freeSpins;\n      for (let i = 0; i < response.game.reels.length; i++) {\n        response.game.reels[i] = respinData.reelsBuffer[i][1];\n      }\n\n      delete response.game.respin;\n    }\n  }\n\n  _handleFreeSpins(data) {\n    if (data.freeSpins) {\n      for (let i = 0; i < data.freeSpins.length; i++) {\n        data.freeSpins[i] = data.freeSpins[i].respin[0];\n      }\n    }\n  }\n\n  _freeSpinsAfterParseOperations(extraSpin) {\n    if (extraSpin['lockedTiles']) {\n      extraSpin['lockedTiles'].forEach(symbol => {\n        const { reel, index } = symbol;\n\n        if (extraSpin.reels[reel] && typeof extraSpin.reels[reel][index] !== 'undefined') {\n          extraSpin.reels[reel][index] = wildId;\n        }\n\n        if (extraSpin.reels[reel] && typeof extraSpin.reels[reel][index] !== 'undefined') {\n          if (extraSpin['randomWilds']) {\n            extraSpin['randomWilds'].forEach(tile => {\n              if (tile.multiplier != 1) extraSpin.reels[tile.reel][tile.index] = [wildId, `_multiplier_${tile.multiplier}`];\n            });\n          }\n\n          if (extraSpin['symbolMultipliers']) {\n            extraSpin['symbolMultipliers'].forEach(tile => {\n              if (tile.multiplier != 1) extraSpin.reels[tile.reel][tile.index] = [`${tile.tileId}`, `_multiplier_${tile.multiplier}`];\n              if (tile.instantWin) extraSpin.reels[tile.reel][tile.index] = [`${tile.tileId}`, `_cash_${tile.instantWin}`];\n            });\n          }\n        }\n      });\n    }\n  }\n\n  _handleLockedTiles(data, featureName) {\n    if (data['lockedTiles']) {\n      data['lockedTiles'].forEach(symbol => {\n        const { tileId, reel, index } = symbol;\n\n        if (data.reels[reel] && typeof data.reels[reel][index] !== 'undefined' && symbol.spins <= frameSpinOpen && data.progress.current != maxProgress) {\n          const tileIdUnderFrame = data.reels[reel][index];\n          data.reels[reel][index] = [`${tileIdUnderFrame}`, `${tileId}_opened`];\n        }\n\n        if (data.reels[reel] && typeof data.reels[reel][index] !== 'undefined' && symbol.spins <= frameSpinOpen && data.progress.current == maxProgress) {\n          if (data['randomWilds']) {\n            data['randomWilds'].forEach(tile => {\n              if (tile.multiplier != 1) data.reels[tile.reel][tile.index] = ['11', `_multiplier_${tile.multiplier}`];\n            });\n          }\n\n          if (data['symbolMultipliers']) {\n            data['symbolMultipliers'].forEach(tile => {\n              if (tile.multiplier != 1) data.reels[tile.reel][tile.index] = [`${tile.tileId}`, `_multiplier_${tile.multiplier}`];\n            });\n          }\n        }\n      });\n    }\n  } \n}\n\nmodule.exports = BabylonRichesSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* BettyBorisAndBooParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n* \n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n* \n* After-parse logic can be added in the method _afterParseOperations(data).\n* \n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass BettyBorisAndBooParser extends DopSlotParser {\n\t/* \n\t\toverride was necessary because of the custom fat tile expand logic\n\t \tfat tile starts expanding from the coordinates in the .to property in the response\n\t*/\n\t_handleFatTiles(data, featureName) {\n\t\tconst reels = data.reels;\n\t\tconst fatTilesData = data[featureName];\n\n\t\tfatTilesData.forEach((tile) => {\n\t\t\tconst startReelRow = tile.to.reel;\n\t\t\tconst startReelCol = tile.to.index;\n\n\t\t\tconst id = tile.tileId;\n\t\t\tconst tileRight = startReelRow + tile.to.width;\n\n\t\t\tfor (let i = startReelRow; i < tileRight; i++) {\n\t\t\t\tlet tileBottom = startReelCol + tile.to.height;\n\n\t\t\t\tfor (let j = startReelCol; j < tileBottom; j++) {\n\t\t\t\t\tif (reels[i] && reels[i][j]) {\n\t\t\t\t\t\treels[i][j] = id;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\nmodule.exports = BettyBorisAndBooParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* BlobstersClusterbusterSlotParser. Handles parsing game specific features.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass BlobstersClusterbusterSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers = [\n      { name: 'fatTiles', cb: this._handleFatTiles },\n      { name: 'swapTiles', cb: this._handleFeature },\n      { name: 'randomWilds', cb: this._handleFeature },\n      { name: 'fatTilesExpand', cb: this._handleFatTilesExpand },\n    ];\n  }\n\n  /**\n   * @description To handle FatTiles that expand to a 3x3 square tile size. It follows the same logic as the _handleFatTiles method, but does not require the width and height of the tile in the id.\n   * @param {Object} data The data object that is returned from the server.\n   * @param {String} featureName - The name of the feature\n   */\n  _handleFatTilesExpand(data, featureName) {\n    const reels = data.reels;\n    const fatTilesData = data[featureName];\n\n    fatTilesData.forEach((tile) => {\n      const tileRight = tile.reel + tile.width;\n      const targetPos = typeof tile.targetPos !== 'undefined' ? tile.targetPos : tile.index;\n      const id = typeof tile.tileId !== 'undefined' ? tile.tileId : tile.toTile;\n\n      for (let reelIndex = tile.reel; reelIndex < tileRight; reelIndex++) {\n        const tileBottom = targetPos + tile.height;\n\n        for (let tileIndex = targetPos; tileIndex < tileBottom; tileIndex++) {\n          if (reels[reelIndex] && reels[reelIndex][tileIndex]) reels[reelIndex][tileIndex] = id;\n        }\n      }\n    });\n  }\n}\n\nmodule.exports = BlobstersClusterbusterSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* BloodSuckersMegaWaysSlotParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n*\n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n*\n* After-parse logic can be added in the method _afterParseOperations(data).\n*\n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass BloodSuckersMegaWaysSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers.push({ name: 'randomWilds', cb: this._handleFeature });\n    this.featureHandlers.push({ name: 'scatters', cb: this._handleFeature });\n  }\n}\n\nmodule.exports = BloodSuckersMegaWaysSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass BombusterSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    //Changes from SwapTiles feature are represented in respins.\n    this.featureHandlers = this.featureHandlers.filter(handler => handler.name !== 'swapTiles');\n  }\n}\n\nmodule.exports = BombusterSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* BountyRaidParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n* \n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n* \n* After-parse logic can be added in the method _afterParseOperations(data).\n* \n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass BountyRaidSlotParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\tthis.featureHandlers.forEach((handler) => {\n\t\t\tif (handler.name === 'randomTiles') handler.cb = this._handleBanditTiles;\n\t\t});\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t}\n\n\t_handleBanditTiles(data, featureName) {\n\t\tlet reels = data.reels;\n\t\tlet banditTilesData = data[featureName];\n\n\t\tbanditTilesData.forEach((tile) => {\n\t\t\treels[tile.reel][tile.index] = tile.tileId;\n\t\t});\n\t}\n\n}\n\nmodule.exports = BountyRaidSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\nconst MAX_DIGITS_LENGTH = 2;\n\n/**\n* BuffaloCollectorSlotParser. Handles parsing game specific features.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass BuffaloCollectorSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers.push({ name: 'swapTiles', cb: this._handleMultipliers });\n    this.featureHandlers.push({ name: 'randomWilds', cb: this._handleMultipliers });\n  }\n\n  _handleMultipliers(data, name) {\n    const multipliers = data[name];\n\n    if (!multipliers) return;\n\n    const reels = data.reels;\n\n    data.reels = reels.map((reel, reelIndex) => {\n      return reel.map((id, index) => {\n        const tileData = multipliers.find(tile => tile.reel === reelIndex && tile.index === index);\n\n        if (!tileData) return id;\n\n        const { tileId, count, multiplier } = tileData;\n        const mplr = multiplier || count;\n\n        if (mplr <= 1) return tileId;\n\n        if (String(mplr).length > MAX_DIGITS_LENGTH) {\n          console.warn(`Multiplier x${mplr} is won which cannot be visualized in History panel!`);\n          return tileId;\n        }\n\n        const multiplierAssetName = this._getMultiplierAssetNames(mplr);\n\n        return [`${tileId}`, ...multiplierAssetName];\n      });\n    });\n  }\n\n  /**\n   * @description extracts and parses tile multiplier\n   * @param  {Number} multiplier\n   * @return {String[]} names of all image parts of the multiplier\n   * @private\n   */\n  _getMultiplierAssetNames(multiplier) {\n    const multiplierValues = String(multiplier)\n      .split('')\n      .map(num => Number(num)); // convert multiplier value to array\n\n    if (!multiplierValues.length) return;\n\n    const multiplierValuesImgSources = multiplierValues.map((value, index) => `_mplr${!index ? '_' : ''}${value}`);\n\n    multiplierValuesImgSources.unshift(`_mplr_${multiplierValues.length}_digitX`);\n\n    return multiplierValuesImgSources;\n  }\n}\n\nmodule.exports = BuffaloCollectorSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* BuffaloManiaMegaWaysSlotParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n*\n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n*\n* After-parse logic can be added in the method _afterParseOperations(data).\n*\n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass BuffaloManiaMegaWaysSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers.push({ name: 'randomWilds', cb: this._handleFeature });\n  }\n}\n\nmodule.exports = BuffaloManiaMegaWaysSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* BullsRunWildParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n*\n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n*\n* After-parse logic can be added in the method _afterParseOperations(data).\n*\n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass BullsRunWildParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    // Add or overwrite game specific feature handlers to this.featureHandlers\n    // A feature handler object must have 'name' and 'cb' properties\n    // this.featureHandlers = [\n    //   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n    // ]\n    // or\n    // this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\n    this.featureHandlers.push({name: 'randomWilds', cb: this._handleFeature})\n  }\n}\n\nmodule.exports = BullsRunWildParser;","const Config = require('../../../../config/Config');\nconst DopSlotParser = require('../DopSlotParser');\n\n/**\n* CaiShen168SlotParser. Handles parsing game specific features.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass CaiShen168SlotParser extends DopSlotParser {\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.featureHandlers.push({ name: 'randomWilds', cb: this._handleFeature });\n\t}\n\n\t/**\n\t* @override The bottom part of the fat tile in the reelsBuffer is sent with id 0(because it's a ways game).\n\t*/\n\t_handleFatTiles(data, featureName) {\n\t\tconst reels = data.reels;\n\t\tconst fatTilesData = data[featureName];\n\n\t\tfatTilesData.forEach((tile) => {\n\t\t\tconst tileRight = tile.reel + tile.width;\n\t\t\tconst targetPos = typeof tile.targetPos !== 'undefined' ? tile.targetPos : tile.index;\n\t\t\tconst id = typeof tile.tileId !== 'undefined' ? tile.tileId : tile.toTile;\n\t\t\tlet gridWidthIndex = 0;\n\n\t\t\tfor (let reelIndex = tile.reel; reelIndex < tileRight; reelIndex++) {\n\t\t\t\tconst tileBottom = targetPos + tile.height;\n\t\t\t\tlet gridHeightIndex = 0;\n\n\t\t\t\tfor (let tileIndex = targetPos; tileIndex < tileBottom; tileIndex++) {\n\t\t\t\t\tconst tileId = reels[reelIndex][tileIndex];\n\n\t\t\t\t\tif (reels[reelIndex] && (tileId > 0 || tileId === 0)) {\n\t\t\t\t\t\tif (!Config.assembledFatTiles.includes(this.gameId)) {\n\t\t\t\t\t\t\treels[reelIndex][tileIndex] = id;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treels[reelIndex][tileIndex] = `${id}_${tile.width}x${tile.height}_${gridWidthIndex}x${gridHeightIndex}`;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tgridHeightIndex += 1;\n\t\t\t\t}\n\n\t\t\t\tgridWidthIndex += 1;\n\t\t\t}\n\t\t});\n\t}\n}\n\nmodule.exports = CaiShen168SlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nconst FEATURES = {\n  RANDOM_WILDS: 'randomWilds',\n  LOCKED_TILES: 'lockedTiles',\n};\n\nconst specialPos = { reel: 2, index: 1};\nconst specialId = 13;\n\nclass CannonballCashSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n    this.featureHandlers.push({name: FEATURES.LOCKED_TILES, cb: this._addMultipliers});\n  }\n\n  _handleFeature(spinData, featureName) {\n    const isFirstLock = spinData[featureName][0].isFirst;\n    !isFirstLock && this._applyReelsModifier(spinData[featureName], spinData.reels);\n  }\n\n  _applyReelsModifier(feature, reels) {\n    feature.forEach(data => {\n        const { toTile, tileId, tile, reel, index } = data;\n        const isSpecial = reel === specialPos.reel && index === specialPos.index;\n        const featureId = isSpecial ? specialId : tileId;\n\n        const id = typeof toTile !== 'undefined' ? toTile :\n          typeof tileId !== 'undefined' ? featureId  : tile;\n\n        if (reels[reel] && typeof reels[reel][index] !== 'undefined') {\n          reels[reel][index] = id;\n        }\n      });\n    }\n\n  _addMultipliers(data, featureName) {\n    if (!data.reels) return;\n\n    const { reels, [featureName]: featureData } = data;\n\n    data.reels = reels.map((reel, reelIndex) => {\n      const featureWithMultipliers = featureData && featureData.filter(tile => tile.reel === reelIndex);\n\n      return featureWithMultipliers.length ? this._getFeatureReelData(reel, featureWithMultipliers) : reel;\n    });\n\n    return data.reels;\n  }\n\n  _getFeatureReelData(reelData = [], featureData = []) {\n    return reelData.map((id, i) => {\n      const tileOnePos = featureData.find(tile => tile.index === i);\n\n      if (tileOnePos) {\n        const multiplierAssetName = this._getMultiplierAssetId(tileOnePos);\n        return [`${id}`, ...multiplierAssetName ];\n      } else {\n        return id;\n      }\n    });\n  }\n\n  _getMultiplierAssetId(tileOnePos) {\n    const { multiplier = 1 } = tileOnePos;\n    if (multiplier === 1) return [];\n\n    // So we have 3 type assets for multiplier. (center, left and right)\n    // 1. When we have multiplier <=9. Example: multiplier =x2 => we use asset: img_tile_multiplier_2_0 ('2' is multiplier value and '0' is the center type)\n    // 2. When multiplier is greater than 9. Example: multiplier = x45. We have assets for the left and right parts of the number =>\n    // [img_tile_multiplier_4_1 , img_tile_multiplier_5_2] ('4' and '5' are multiplier values and '1' is the left type and '2' is the right type)\n\n    const multiplierValues = String(multiplier).split(\"\").map((num)=> Number(num)) // convert multiplier value to array\n    if (!multiplierValues.length) return;\n\n    if (multiplierValues.length === 1) {\n      return multiplierValues.map((value, i) => { // Example:  ['222_2_0']; -> [type_multiplier_position]\n        return `_multiplier_${value}_${i}` // '0' is central multiplier\n      });\n    } else {\n      return multiplierValues.map((value, i) => { // Example: ['222_2_1', '222_2_2']; -> [type_multiplier_position, type_multiplier_position]\n        return `_multiplier_${value}_${i+1}` // '1' and '2' are left and right multipliers\n      });\n    }\n  }\n}\n\nmodule.exports = CannonballCashSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * MysteryReelsMegaWaysParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n *\n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n *\n * After-parse logic can be added in the method _afterParseOperations(data).\n *\n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n *\n * @class\n * @extends {DopSlotParser}\n */\nclass MysteryReelsMegaWaysParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers.unshift({\n\t\t\tname: 'cloningTile',\n\t\t\tcb: this._handleCloningTile\n\t\t});\n\t}\n\n\t_handleCloningTile(data, featureName = 'cloningTile') {\n\t\tconst reels = data.reels;\n\t\tconst featData = [].concat.apply([], data[featureName]); // Used to flatten the data.\n\n\t\tfeatData.forEach((item) => {\n\t\t\treels[item.reel][item.index] = item.toTile;\n\t\t});\n\t}\n\n}\n\nmodule.exports = MysteryReelsMegaWaysParser;\n","\nconst DopSlotParser = require('../DopSlotParser');\nconst LinesConfig = [\n[ 1, 1, 1, 1, 1 ],\n[ 0, 0, 0, 0, 0 ],\n[ 2, 2, 2, 2, 2 ],\n[ 0, 1, 2, 1, 0 ],\n[ 2, 1, 0, 1, 2 ],\n[ 0, 0, 1, 0, 0 ],\n[ 2, 2, 1, 2, 2 ],\n[ 1, 2, 2, 2, 1 ],\n[ 1, 0, 0, 0, 1 ],\n[ 1, 0, 1, 0, 1 ],\n[ 1, 2, 1, 2, 1 ],\n[ 0, 1, 0, 1, 0 ],\n[ 2, 1, 2, 1, 2 ],\n[ 1, 1, 0, 1, 1 ],\n[ 1, 1, 2, 1, 1 ],\n[ 2, 0, 2, 0, 2 ],\n[ 0, 2, 2, 2, 0 ],\n[ 2, 0, 0, 0, 2 ],\n[ 0, 0, 2, 0, 0 ],\n[ 2, 2, 0, 2, 2 ]\n];\n\nconst PRIZE_TO_TEXTURE = {\n\t1: '_low',\n\t2: '_low',\n\t5: '_mid',\n\t10: '_mid',\n\t50: '_high'\n};\n\nconst TILE_TO_TEXTURE = {\n\t1: '_low_nowin',\n\t2: '_low_nowin',\n\t5: '_mid_nowin',\n\t10: '_mid_nowin',\n\t50: '_high_nowin'\n};\n\nclass CashExplorerSlotParser extends DopSlotParser {\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.featureHandlers = [\n\t\t\t{ name: 'hiddenSymbols', cb: this._handleHiddenSymbols },\n\t\t];\n\t}\n\n\t_addOtherWins(data, type) {\n\t\tObject.keys(this.otherWins).forEach((winType) => {\n\t\t\tthis.otherWins[winType].forEach((winName) => {\n\t\t\t\tif (data.win[winName]) {\n\t\t\t\t\tif (winType === \"instantWin\") {\n\t\t\t\t\t\tdata.instantWin.options.forEach(el => {\n\t\t\t\t\t\t\tthis.winDetails.otherWins.push({\n\t\t\t\t\t\t\t\ttype: 'instantWin',\n\t\t\t\t\t\t\t\tamount: el.amount\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t})\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.winDetails.otherWins.push({ type: winType, amount: data.win[winName] });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}, this);\n\t}\n\n\t_handleHiddenSymbols(data, featureName) {\n\t\tconst symbolsData = data[featureName];\n\n\t\tif (!symbolsData.length) return;\n\n\t\tconst reels = data.reels;\n\t\tconst winLinePositions = data.winLines.map(line => this._generateLinePositions(line)).flat(2);\n\n\t\tconst hiddenSymbolsOnLines = symbolsData\n\t\t\t.filter(({ reel, index }) => winLinePositions\n\t\t\t\t.find(pos => pos.reel === reel && pos.index === index));\n\n\t\tconst wonHiddenSymbols = data.discoverer ? symbolsData : hiddenSymbolsOnLines;\n\n\t\tconst noWonHiddenSymbols = symbolsData.map(symbolData => {\n\t\t\tconst arr = wonHiddenSymbols.map(el => {\n\t\t\t\treturn symbolData.reel === el.reel && symbolData.index === el.index\n\t\t\t});\n\n\t\t\tif (!arr.includes(true)) return symbolData;\n\t\t})\n\n\t\twonHiddenSymbols.forEach(entry => {\n\t\t\tconst { reel, index, prize } = entry;\n\t\t\treels[reel][index] = [PRIZE_TO_TEXTURE[prize], reels[reel][index],];\n\t\t});\n\n\t\tnoWonHiddenSymbols.forEach((el) => {\n\t\t\tif (!el) return\n\t\t\tconst { reel, index, prize } = el;\n\t\t\treels[reel][index] = [TILE_TO_TEXTURE[prize], reels[reel][index]];\n\t\t});\n\t}\n\n\t_generateLinePositions(line) {\n\t\tconst positions = [];\n\n\t\tline.tiles.forEach((hasTile, reelIndex) => {\n\t\t\tif (!hasTile) return;\n\n\t\t\tpositions.push(this._generatePositionData(line, reelIndex));\n\t\t});\n\n\t\treturn positions;\n\t}\n\n\t_generatePositionData(line, reelIndex) {\n\t\tconst { index } = line;\n\t\tconst lineOffsets = LinesConfig[index];\n\n\t\treturn {\n\t\t\treel: reelIndex,\n\t\t\tindex: lineOffsets[reelIndex],\n\t\t\ttileId: line.tile,\n\t\t};\n\t}\n\n\t_getOnPosition(line, reelIndex, positions) {\n\n\t\tconst lineOffsets = LinesConfig[line.index];\n\n\t\treturn positions\n\t\t\t.find(({ reel, index }) => reel === reelIndex && index === lineOffsets[reelIndex]);\n\t}\n}\n\nmodule.exports = CashExplorerSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* CasinoNightSlotParser. Handles parsing game specific features.\n*\n* These methods are also empty by default.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass CasinoNightSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers.push({ name: 'specialFeature', cb: this._handleFeature });\n  }\n\n  /**\n   * Add initial wins when FS is triggered\n   * @param response\n   * @private\n   */\n  _beforeParseOperations(response) {\n    super._beforeParseOperations(response);\n\n    if (response && response.game && response.game.win) {\n      const { total = 0, freeSpins = 0 } = response.game.win;\n      this.winDetails.initialLinesWin = total - freeSpins;\n    }\n  }\n}\n\nmodule.exports = CasinoNightSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* @class\n * @extends {DopSlotParser}\n */\nclass ChristmasMorningSlotParser extends DopSlotParser {\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.featureHandlers = [{ name: 'mysterySymbols', cb: this._handleMysterySymbols }];\n\t}\n\n\t/**\n\t * Handler for the 'Mystery Symbols' feature\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t */\n\t_handleMysterySymbols(data) {\n\t\tlet reels = data.reels;\n\t\tlet mysterySymbolsData = data.mysterySymbols;\n\t\tlet { toTile, tileId } = mysterySymbolsData;\n\t\tlet id = typeof toTile !== 'undefined' ? toTile : tileId;\n\n\t\tmysterySymbolsData.tiles.forEach((tileArray) => {\n\t\t\ttileArray.forEach((tile) => {\n\t\t\t\treels[tile.reel][tile.index] = id;\n\t\t\t});\n\t\t});\n\t}\n}\n\nmodule.exports = ChristmasMorningSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * CinderellaParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n * \n * @class\n * @extends {DopSlotParser}\n */\nclass CinderellaParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.otherWins.bonus.push('bonus');\n\n\t\tthis.featureHandlers = this.featureHandlers.concat([\n\t\t\t{name: 'carriageSwap', cb: this._handleFeature},\n\t\t\t{name: 'fairySwap', cb: this._handleFeature},\n\t\t\t{name: 'connectingTiles', cb: this._handleConnectingTiles}\n\t\t]);\n\t}\n\n\t//Taken from LionDanceSlotParser\n\n    /**\n     * Handler for the 'Cloning Tile' feature\n     * @private\n     * @param {Object} data Game data, contains\n     * screen reels and every game feature\n     * @param {Array} data.tiles Array first and last tiles for modification (not used in current parser)\n     * @param {Array} data.path Array of all tiles for modifications (to be swap)\n     * @param {String} featureName the name of the feature in current game\n     */\n\t_handleConnectingTiles(data, featureName) {\n\t\tlet feature = data[featureName].path;\n\n\t\tfeature.forEach((tile) => {\n\t\t\tdata.reels[tile.reel][tile.index] = tile.tileId;\n\t\t});\n\t}\n\n}\n\nmodule.exports = CinderellaParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass CirqueDeLaFortuneSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers.push({ name: 'randomWilds', cb: this._handleFeature });\n    this.featureHandlers.push({ name: 'expandSymbols', cb: this._handleExpandSymbols });\n  }\n\n  _handleExpandSymbols(data, featureName) {\n    let reels = data.reels;\n    let expandSymbolsData = data[featureName];\n\n    expandSymbolsData.forEach(expandData => {\n      expandData.reels.forEach(reelIndex => {\n        reels[reelIndex] = reels[reelIndex]\n          .map(tile => tile = expandData.toTile);\n      });\n    });\n  }\n\n  /**\n* Handler for the 'Fat tiles' feature\n* @private\n* @param  {Object} data Game data, contains\n* @override because targetPos property is renamed to index and\n* fatTile's hight is always equal to visible tiles height\n*/\n  _handleFatTiles(data, featureName) {\n    let reels = data.reels;\n    let fatTilesData = data[featureName];\n\n    fatTilesData.forEach(tile => {\n      let tileBottom = tile.index + tile.height;\n\n      for (let j = tile.index; j < tileBottom; j++) {\n        if (reels[tile.reel] && reels[tile.reel][j]) {\n          reels[tile.reel][j] = tile.tileId;\n        }\n      }\n    });\n  }\n}\n\nmodule.exports = CirqueDeLaFortuneSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* ClashOfTheBeastsParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n* \n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n* \n* After-parse logic can be added in the method _afterParseOperations(data).\n* \n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass ClashOfTheBeastsParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\t\tthis.featureHandlers = [\n\t\t\t{ name: 'nudge', cb: this._handleMultiDirectionalNudge },\n\t\t\t{ name: 'tigerSwap', cb: this._handleFeature },\n\t\t\t{ name: 'clashSwap', cb: this._handleFeature },\n\t\t\t{ name: 'randomWilds', cb: this._handleFeature }\n\t\t]\n\t}\n\n\t//This method is overriden because there are fake swap tiles and they should not be displayed, which is why we check if isVisible is false.\n\n\t_applyReelsModifier(feature, reels) {\n\t\tfeature.forEach((tile) => {\n\t\t\tlet isNested = tile instanceof Array;\n\n\t\t\tif (isNested) this._applyReelsModifier(tile, reels);\n\t\t\telse {\n\t\t\t\tif (!tile.isVisible) return;\n\n\t\t\t\treels[tile.reel][tile.index] = typeof tile.toTile !== 'undefined' ? tile.toTile : tile.tileId;\n\t\t\t}\n\t\t});\n\t}\n\n\t_handleMultiDirectionalNudge(data, feauteName = 'nudge') {\n\t\tdata[feauteName].forEach(nudge => {\n\t\t\tif (nudge.type === 'horizontal') this._handleHorizontalNudge(nudge, data);\n\t\t\telse this._handleVerticalNudge(nudge, data);\n\t\t});\n\t}\n\n\t_handleVerticalNudge(nudge, data) {\n\t\tconst topBuffer = data.reelsBuffer[nudge.index][0];\n\t\tconst buffer = data.reels[nudge.index];\n\t\tconst bottomBuffer = data.reelsBuffer[nudge.index][2];\n\n\t\tconst verticalBuffer = _.flatten([topBuffer, buffer, bottomBuffer]);\n\n\t\tconst startIndex = buffer.length + (nudge.dir === 1 ? nudge.distance : -nudge.distance);\n\t\tconst endIndex = startIndex + buffer.length;\n\n\t\tdata.reels[nudge.index] = verticalBuffer.slice(startIndex, endIndex);\n\t}\n\n\t_handleHorizontalNudge(nudge, data) {\n\t\tconst leftBuffer = nudge.bufferLeft;\n\t\tconst rightBuffer = nudge.bufferRight;\n\t\tlet buffer = [];\n\n\t\tdata.reels.forEach(reel => {\n\t\t\tbuffer.push(reel[nudge.index]);\n\t\t});\n\n\t\tconst horizontalBuffer = _.flatten([leftBuffer, buffer, rightBuffer]);\n\n\t\tconst distance = nudge.dir === 0 ? nudge.distance : -nudge.distance;\n\n\t\tconst startIndex = buffer.length + distance;\n\t\tconst endIndex = startIndex + buffer.length;\n\n\t\tconst newBuffer = horizontalBuffer.slice(startIndex, endIndex);\n\n\t\tdata.reels.forEach((reel, index) => {\n\t\t\treel[nudge.index] = newBuffer[index];\n\t\t});\n\t}\n\n}\n\nmodule.exports = ClashOfTheBeastsParser;\n","const DopSlotParser = require('../DopSlotParser');\nconst GREEN_CLOVER = 9;\nconst GOLDEN_CLOVER = 12;\nconst FT_2X3_SUFFIX = '_2x3_';\nconst FT_3X3_SUFFIX = '_3x3_';\n\n/**\n* CloverCrazeSlotParser. Handles parsing game specific features.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass CloverCrazeSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers = [\n      {name: 'goldenClover', cb: this._handleGoldenClover},\n      {name: 'swapTiles', cb: this._handleFeature},\n      {name: 'lockedTiles', cb: this._handleFeature},\n      {name: 'fatTiles', cb: this._handleFatTiles},\n    ]\n  }\n\n  _handleGoldenClover(data, featureName) {\n    if (data.win.lines) return;\n\n    const featureData = data[featureName];\n    const reels = data.reels;\n\n    featureData.forEach(data => {\n      const { reel, index } = data;\n\n      if (reels[reel] && typeof reels[reel][index] !== 'undefined') {\n        reels[reel][index] = GREEN_CLOVER;\n      }\n    });\n  }\n\n  _handleFatTiles(data, featureName) {\n    if (!data.win.lines && data.respin) return;\n    super._handleFatTiles(data, featureName);\n  }\n\n  _handleJackpotTiles(jackpotTiles, reels) {\n    if(!jackpotTiles) return;\n\n    this._replaceAreaUnderFT(reels);\n    super._handleJackpotTiles(jackpotTiles, reels);\n  }\n\n  _replaceAreaUnderFT(reels = []) {\n    reels.forEach((reel, reelIndex) => {\n      reel.forEach((id, tileIndex) => {\n        if (typeof id === 'string' && (id.includes(FT_2X3_SUFFIX) || id.includes(FT_3X3_SUFFIX))) {\n          reels[reelIndex][tileIndex] = GOLDEN_CLOVER;\n        }\n      });\n    });\n  }\n}\n\nmodule.exports = CloverCrazeSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * MysteryFruitSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n * \n * @class\n * @extends {DopSlotParser}\n */\nclass CrazyGenieSlotParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n        this.otherWins.bonus.push(\n        \t'lampBonus',\n\t\t\t'oasisBonus',\n\t\t\t'handBonus',\n\t\t\t'treasureBonus'\n\t\t);\n\n        this.featureHandlers = this.featureHandlers.concat([\n            {name: 'genieActivator', cb: this._handleGenieActivator},\n        ]);\n    }\n\n    _handleGenieActivator(data) {\n        let reels = data.reels;\n        let reelIndex = data.genieActivator.reel;\n        let tileIndex = data.genieActivator.index;\n\n        reels[reelIndex][tileIndex] = data.genieActivator.toTile;\n    }\n}\n\nmodule.exports = CrazyGenieSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nconst FS_SCREEN_ID = 13;\nconst FEATURES = {\n  WAYS_MULTIPLIER: 'waysMultiplier',\n  FILL_POSITION: 'fillPositions',\n};\n\n/**\n* CyberAttackSlotParser. Handles parsing game specific features.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass CyberAttackSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers = [\n      { name: FEATURES.WAYS_MULTIPLIER, cb: this._handleMultipliers },\n      { name: FEATURES.FILL_POSITION, cb: this._handleMultipliers }\n    ]\n  }\n\n  _handleMultipliers(data, name) {\n    const feature = data[name];\n\n    if (!feature) return;\n\n    const parsedMultipliers = data[name].filter(singleData => singleData.multiplier > 1);\n\n    if (!parsedMultipliers.length) return;\n\n    super._handleMultipliers({\n      [name]: parsedMultipliers,\n      type: data.type\n    }, name)\n  }\n\n    /**\n   * @description Takes care of which multipliers in the JP screen are displayed and which are not.\n   * @override\n   */\n  _afterParseOperations(data) {\n    super._afterParseOperations(data);\n\n    const gameData = data.game;\n    const jpTiles = gameData.jackpotTiles;\n    const lastSpinData = this._getLastSpinData(this.winDetails, gameData);\n    const { WAYS_MULTIPLIER, FILL_POSITION } = FEATURES;\n\n    this.winDetails.jackpotWins.forEach(jp => {\n      this._handleMultipliers({\n        waysMultiplier: lastSpinData[WAYS_MULTIPLIER],\n        type: jp.type\n      }, WAYS_MULTIPLIER);\n\n      this._handleMultipliers({\n        fillPositions: lastSpinData[FILL_POSITION],\n        type: jp.type\n      }, FILL_POSITION);\n\n      this.winDetails.multipliers = this._removeMultipliers(jpTiles, jp.type);\n    });\n\n    this._showFsWinScreen(gameData);\n  }\n\n  _removeMultipliers(jpTiles, type) {\n    return this.winDetails.multipliers.filter(mplr => {\n      return !(jpTiles.some(jpTile => jpTile.reel === mplr.reel && jpTile.index === mplr.index) && type === mplr.type);\n    });\n  }\n\n  _showFsWinScreen(data) {\n    if (!data.freeSpins) return;\n\n    data.reels = [ [ FS_SCREEN_ID ] ];\n  }\n}\n\nmodule.exports = CyberAttackSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass DearSantaSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers = [\n      { name: 'fatTiles', cb: this._handleFatTiles },\n      { name: 'lockedFatTiles', cb: this._handleFatTiles },\n      { name: 'snowWhite', cb: this._handleMultipliers },\n      { name: 'presents', cb: this._handlePresents},\n    ];\n  }\n\n  // the game has expanding fatTile,\n  // if present in the response data, we combine 3 assets to visualize the fatTile\n  _handleFatTiles(data, featureName) {\n    const fatTiles = data[featureName];\n    const reels = data.reels;\n\n    if (!fatTiles) return;\n\n    fatTiles.forEach(tile => {\n      const { reel, tileId } = tile;\n      reels[reel] = [`${tileId}_0`, `${tileId}_1`, `${tileId}_2`];\n    });\n  }\n\n  // sets different assets based on multiplier\n  _handleMultipliers(data, featureName) {\n    const snowWhites = data[featureName];\n    const reels = data.reels;\n\n    if (!snowWhites) return;\n\n    snowWhites.forEach(tile => {\n      const { reel, index, multiplier, tileId } = tile;\n      reels[reel][index] = [`${tileId}`,`${tileId}_${multiplier}`];\n    });\n  }\n\n  // handles a feature where wilds are spawned on the reelPos\n  // we replace the tiles that come in the buffer with the present positions\n  _handlePresents(data, featureName) {\n    const presents = data[featureName];\n    const reels = data.reels;\n\n    if (!presents) return;\n\n    presents.forEach(tile => {\n      const { reel, index, tileId } = tile;\n      reels[reel][index] = tileId\n    });\n  }\n}\n\nmodule.exports = DearSantaSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass DevilsNumberSlotParser extends DopSlotParser {\n    constructor() {\n\t\t\t\tsuper();\n\n        this.featureHandlers.push({ name: 'upgradeTiles', cb: this._handleUpgradeTiles });\n\t\t}\n\n\t\t_handleUpgradeTiles(data) {\n\t\t\tconst upgradeTiles = data.upgradeTiles.filter(tile => tile.instant);\n\t\t\tif (upgradeTiles.length === 0) return; // will only upgrade tiles in normal spins (i.e. that have instant === true)\n\n\t\t\tthis._applyReelsModifier(upgradeTiles, data.reels);\n\t\t}\n}\n\nmodule.exports = DevilsNumberSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nconst FEATURES = {\n\tMOVING_TILES: 'movingTiles',\n};\n\nclass DiamondBlitz2SlotParser extends DopSlotParser {\n\tconstructor() {\n\t\tsuper();\n\t\tthis.featureHandlers.push({ name: FEATURES.MOVING_TILES, cb: this._handleMovingWilds });\n\t}\n\n\t_handleMovingWilds(data, featureName) {\n\t\tlet reels = data.reels;\n\t\tlet movingWilds = data[featureName];\n\n\t\tmovingWilds.forEach((tile) => {\n\t\t\tif (reels[tile.to.reel][tile.to.index]) {\n\t\t\t\treels[tile.to.reel][tile.to.index] = tile.tileId;\n\t\t\t}\n\t\t});\n\t}\n}\n\nmodule.exports = DiamondBlitz2SlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass DiamondBlitzParser extends DopSlotParser {\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.featureHandlers.unshift({ name: 'movingWilds', cb: this._handleMovingWilds });\n\t}\n\n\t_handleMovingWilds(data, featureName) {\n\t\tlet reels = data.reels;\n\t\tlet movingWilds = data[featureName];\n\n\t\tmovingWilds.forEach((tile) => {\n\t\t\tif (reels[tile.to.reel][tile.to.index]) {\n\t\t\t\treels[tile.to.reel][tile.to.index] = tile.toTile;\n\t\t\t}\n\t\t});\n\t}\n}\n\nmodule.exports = DiamondBlitzParser;","const DopSlotParser = require('../DopSlotParser');\nconst Config = require('../../../../config/Config');\nconst DOGGIE_MULTIPLIERS = 'doggieMultipliers';\n\n/**\n* DiamondDoggiesSlotParser. Handles parsing game specific features.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass DiamondDoggiesSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers.push({ name: DOGGIE_MULTIPLIERS, cb: this._handleMultipliers });\n  }\n\n  /**\n  * @description There are different multiplier properties in response data.\n  * @override\n  */\n  _handleMultipliers(data, name) {\n    if (!Config.hasMultipliers.includes(this.gameId)) return;\n\n    const multipliers = data[name];\n\n    if (!multipliers) return;\n\n    multipliers.forEach(multiply => {\n      const { reel, index, multiplierNext } = multiply;\n\n      if (!multiplierNext || multiplierNext <= 1) return;\n\n      const type = data.type || 0;\n      const previousMultiplier = this.winDetails.multipliers\n        .find(m => m.reel === reel && m.index === index && m.type === type);\n\n      // handles multiplier swapping features\n      if (previousMultiplier) previousMultiplier.multiplier = multiplierNext;\n      else this.winDetails.multipliers.push({ type, reel, index, multiplier: multiplierNext });\n    });\n  }\n\n   /**\n  * @description Takes care of which multipliers in the JP screen are displayed and which are not.\n  * @override\n  */\n  _afterParseOperations(data) {\n    const gameData = data.game;\n    const jpTiles = gameData.jackpotTiles;\n    const lastSpinData = this._getLastSpinData(this.winDetails, gameData);\n\n    this.winDetails.jackpotWins.forEach(jp => {\n      this._handleMultipliers({\n        doggieMultipliers: lastSpinData[DOGGIE_MULTIPLIERS],\n        type: jp.type\n      }, DOGGIE_MULTIPLIERS);\n\n      this.winDetails.multipliers = this._removeMultipliers(jpTiles, jp.type);\n    });\n  }\n\n  _removeMultipliers(jpTiles, type) {\n    return this.winDetails.multipliers.filter(mplr => {\n      return !(jpTiles.some(jpTile => jpTile.reel === mplr.reel && jpTile.index === mplr.index) && type === mplr.type);\n    });\n  }\n}\n\nmodule.exports = DiamondDoggiesSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* JingleWaysMegaWaysParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n*\n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n*\n* After-parse logic can be added in the method _afterParseOperations(data).\n*\n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass DiamondRoyaleSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers.unshift({ name: 'randomWilds', cb: this._handleRandomWilds });\n  }\n\n  _handleRandomWilds(data, featureName) {\n    const reels = data.reels;\n\n    let randomWildsData = data[featureName];\n\n    const skipMulti = data.maxMultiplier === data.multiplier\n      && !randomWildsData.some(tile => tile.finalMultiplier < data.maxMultiplier)\n      && data.stakeMultiplier === undefined;\n\n    randomWildsData.forEach(tile => {\n      if (!skipMulti) {\n        reels[tile.reel][tile.index] = tile.tileId;\n      } else {\n        reels[tile.reel][tile.index] = `${tile.tileId}_NoMultiplier`;\n      }\n    });\n  }\n}\n\nmodule.exports = DiamondRoyaleSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass DiceDiceDiceParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers = [\n\t\t  { name: 'nudge', cb: this._handleNudge }\n\t\t]\n\t}\n\n\t_handleNudge(data, featureName = 'nudge') {\n\t\tconst nudgeData = data[featureName];\n\t\tconst reels = data.reels;\n\n\t\tnudgeData.forEach((nudge) => {\n\t\t\tconst buffer = data.reelsBuffer[nudge.index];\n\t\t\tconst flatten = _.flatten(buffer);\n\n\t\t\tconst distanceMultiplier = nudge.dir || -1;\n\t\t\tconst startAt = buffer[0].length - distanceMultiplier * nudge.distance;\n\t\t\tconst endAt = startAt + buffer[1].length;\n\n\t\t\treels[nudge.index] = flatten.slice(startAt, endAt);\n\t\t});\n\t}\n\n\t/**\n\t * override to handle opposite direction logic\n\t * @private\n\t * @param  {Object} lastSpinData\n\t * @param {Array} reels\n\t * @param {Array} nudgeData\n\t */\n\t _nudgeJackpotTiles(lastSpinData, reels, data) {\n\t\tconst jackpotNudgeData = data.jackpotNudge;\n\n\t\tif (!jackpotNudgeData) return;\n\n\t\tconst nudgeData = data.nudge || [];\n\n\t\tjackpotNudgeData.forEach(jackpotNudge => {\n\t\t\tconst nudge = nudgeData.find(nudge => nudge.index === jackpotNudge.index);\n\t\t\tconst nudgeDistance = nudge ? (nudge.dir === 0 ? nudge.distance : -nudge.distance) : 0;\n\t\t\tconst jackpotNudgeDistance = jackpotNudge.dir === 0 ? jackpotNudge.distance : -jackpotNudge.distance;\n\t\t\tconst distance = jackpotNudgeDistance + nudgeDistance;\n\t\t\tconst buffer = lastSpinData.reelsBuffer[jackpotNudge.index];\n\t\t\tconst flatten = _.flatten(buffer);\n\t\t\tconst startAt = buffer[0].length + distance;\n\t\t\tconst endAt = startAt + buffer[1].length;\n\n\t\t\treels[jackpotNudge.index] = flatten.slice(startAt, endAt);\n\t\t});\n\t}\n}\n\nmodule.exports = DiceDiceDiceParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass DivineWaysParser extends DopSlotParser {\n\n\tconstructor() {\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// {name: 'swapReels', cb: this._handleSwapReels}\n\n\t\tthis.featureHandlers.unshift({ name: 'cloningTile', cb: this._handleCloningTile });\n\t}\n\n\t/**\n\t* Handler for the 'Cloning Tile' feature\n\t* @private\n\t* @param {Object} data Game data, contains\n\t* screen reels and every game feature\n\t* @param {Array} data.cloningTile Array of tile modifications\n\t* @param {Array} data.reelsBuffer reels buffer array\n\t* @param {Array} data.reels Screen reels state\n\t* @param {Array} data.cloningTile.clones Array of the tiles to be modified\n\t* @param {Number} data.cloningTile.toTile tile id to be used for the feature tiles\n\t*/\n\t_handleCloningTile(data) {\n\t\tlet reels = data.reels;\n\t\tlet cloningTileData = data.cloningTile;\n\t\tlet toTileC = cloningTileData.toTile;\n\n\t\tcloningTileData.clones.forEach((tile) => {\n\t\t\tif (reels[tile.reel] && reels[tile.reel][tile.index]) { // it could be outside the reels\n\t\t\t\treels[tile.reel][tile.index] = toTileC;\n\t\t\t}\n\t\t});\n\t}\n\n}\n\nmodule.exports = DivineWaysParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* DoggyRichesMegaWaysParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n*\n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n*\n* After-parse logic can be added in the method _afterParseOperations(data).\n*\n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass DoggyRichesMegaWaysParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers = [\n\t\t\t{ name: 'randomWilds', cb: this._handleFeature },\n\t\t\t{ name: 'fatTiles', cb: this._handleFatTiles }\n\t\t];\n\t}\n\n\t_handleFatTiles(data, featureName) {\n\t\tconst reels = data.reels;\n\t\tconst fatTilesData = data[featureName];\n\n\t\t// The fat tiles in fatTilesData always have a height of 2, regardless of how many tiles there are in the reel buffer.\n\t\t// If the reel data is for example [4,4,4,5,5,0,0] and we have a fat tile on that reel { tileId: 12, height: 2 },\n\t\t// then super._handleFatTiles would transform the reel data into [\"tile12_0x0\",\"tile12_0x1\",4,5,5,0,0]\n\t\t// In this game this is wrong, since the fat tile actually takes up the entire reel, we don't want the leftover tiles\n\t\t// So we manually set them to 0:\n\t\tfor (const { reel, height } of fatTilesData) {\n\t\t\treels[reel].fill(0, height);\n\t\t}\n\n\t\tsuper._handleFatTiles(data, featureName);\n\t}\n}\n\nmodule.exports = DoggyRichesMegaWaysParser;\n","const DopSlotParser = require('../DopSlotParser');\nconst Config = require('../../../../config/Config');\n\n/**\n* DragonKingLegendOfTheSeasParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n* \n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n* \n* After-parse logic can be added in the method _afterParseOperations(data).\n* \n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass DragonKingLegendOfTheSeasParser extends DopSlotParser {\n\n\t_handleFatTiles(data, featureName) {\n\t\tconst reels = data.reels;\n\t\tconst fatTilesData = data[featureName];\n\n\t\tfatTilesData.forEach((tileData) => {\n\t\t\tconst tile = tileData.to;\n\t\t\tconst tileRight = tile.reel + tile.width;\n\t\t\tconst targetPos = typeof tile.targetPos !== 'undefined' ? tile.targetPos : tile.index;\n\t\t\tconst id = typeof tileData.tileId !== 'undefined' ? tileData.tileId : tileData.toTile;\n\t\t\tlet gridWidthIndex = 0;\n\n\t\t\tfor (let reelIndex = tile.reel; reelIndex < tileRight; reelIndex++) {\n\t\t\t\tconst tileBottom = targetPos + tile.height;\n\t\t\t\tlet gridHeightIndex = 0;\n\n\t\t\t\tfor (let tileIndex = targetPos; tileIndex < tileBottom; tileIndex++) {\n\t\t\t\t\tif (reels[reelIndex] && reels[reelIndex][tileIndex]) {\n\t\t\t\t\t\tif (!Config.assembledFatTiles.includes(this.gameId)) {\n\t\t\t\t\t\t\treels[reelIndex][tileIndex] = id;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treels[reelIndex][tileIndex] = `${id}_${tile.width}x${tile.height}_${gridWidthIndex}x${gridHeightIndex}`;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tgridHeightIndex += 1;\n\t\t\t\t}\n\n\t\t\t\tgridWidthIndex += 1;\n\t\t\t}\n\t\t});\n\t}\n}\n\nmodule.exports = DragonKingLegendOfTheSeasParser;\n","const DopSlotParser = require('../DopSlotParser');\nconst Config = require('../../../../config/Config');\n\nconst FS_FAT_TILE_ID = 14;\nconst DEFAULT_FAT_TILE_ID = 11;\n\n/**\n* DragonsClusterbusterParser. Handles parsing game specific features.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass DragonsClusterbusterSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers = [\n      {name: 'fatTiles', cb: this._handleFatTiles},\n      {name: 'randomWilds', cb: this._handleFeature},\n    ];\n  }\n\n  /**\n   * @override The goal is to save an additional 18 pictures for the pieces of the other two FT activators in the game that have the same vision.\n   * That is why only one set with id 11 and another set with id 14 for the FS activator were made.\n   */\n  _handleFatTiles(data, featureName) {\n    const reels = data.reels;\n    const fatTilesData = data[featureName];\n\n    fatTilesData.forEach((tile) => {\n      const tileRight = tile.reel + tile.width;\n      const targetPos = typeof tile.targetPos !== 'undefined' ? tile.targetPos : tile.index;\n      const dataId = typeof tile.tileId !== 'undefined' ? tile.tileId : tile.toTile;\n      const id = dataId !== FS_FAT_TILE_ID ? DEFAULT_FAT_TILE_ID : FS_FAT_TILE_ID;\n      let gridWidthIndex = 0;\n\n      for (let reelIndex = tile.reel; reelIndex < tileRight; reelIndex++) {\n        const tileBottom = targetPos + tile.height;\n        let gridHeightIndex = 0;\n\n        for (let tileIndex = targetPos; tileIndex < tileBottom; tileIndex++) {\n          if (reels[reelIndex] && reels[reelIndex][tileIndex]) {\n            if (!Config.assembledFatTiles.includes(this.gameId)) {\n              reels[reelIndex][tileIndex] = id;\n            } else {\n              reels[reelIndex][tileIndex] = `${id}_${tile.width}x${tile.height}_${gridWidthIndex}x${gridHeightIndex}`;\n            }\n          }\n\n          gridHeightIndex += 1;\n        }\n\n        gridWidthIndex += 1;\n      }\n    });\n  }\n}\n\nmodule.exports = DragonsClusterbusterSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass DragonsFireInfiniReelsSlotParser extends DopSlotParser {\n    constructor() {\n        super();\n        this.featureHandlers.push({ name: 'randomWilds', cb: this._handleFeature });\n    }\n}\n\nmodule.exports = DragonsFireInfiniReelsSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* DragonsFireMegaWaysParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n* \n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n* \n* After-parse logic can be added in the method _afterParseOperations(data).\n* \n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass DragonsFireMegaWaysParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers.unshift({ name: 'randomWilds', cb: this._handleFeature });\n\t}\n}\n\nmodule.exports = DragonsFireMegaWaysParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* DragonsLockSlotParser. Handles parsing game specific features.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass DragonsLockSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers.push({ name: 'dragonKeys', cb: this._handleMultipliers });\n  }\n\n  _handleMultipliers(data, name) {\n    const dragonKeys = data[name].filter(key => key.multiplier > 1);\n    super._handleMultipliers({ dragonKeys, type: data.type }, name);\n  }\n}\n\nmodule.exports = DragonsLockSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* @class\n* @extends {DopSlotParser}\n*/\nclass DragonsMirrorSlotParser extends DopSlotParser {\n  constructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers = [\n\t\t\t{ name: 'fatTiles', cb: this._handleFatTiles }\n\t\t];\n\t}\n}\n\nmodule.exports = DragonsMirrorSlotParser;","const DopSlotParser = require('../DopSlotParser');\nconst flameId = '13';\nconst frameId = '12';\n\n/**\n* @class\n* @extends {DopSlotParser}\n*/\nclass DragonsPlaygroundSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n    this.featureHandlers = [\n      { name: 'flames', cb: this._handleFlames },\n      { name: 'frames', cb: this._handleFrames },\n      { name: 'dragonsBreath', cb: this._handleFeature },\n      { name: 'swapTiles', cb: this._handleFeature }\n    ];\n  }\n\n  _handleFlames(data, featureName) {\n    if (!data.flames) return;\n\n    data.flames.forEach(symbol => {\n      const { reel, index } = symbol;\n\n      if (data.reels[reel] && typeof data.reels[reel][index] !== 'undefined') {\n        const tileId = data.reels[reel][index];\n\n        if (Array.isArray(tileId)) data.reels[reel][index] = [`${tileId[0]}`, `${flameId}`];\n        else data.reels[reel][index] = [`${tileId}`, `${flameId}`];\n      }\n    });\n  }\n\n  _handleFrames(data, featureName) {\n    if (!data.frames) return;\n\n    data.frames.forEach(symbol => {\n      const { reel, index } = symbol;\n\n      if (data.reels[reel] && typeof data.reels[reel][index] !== 'undefined') {\n        const tileId = data.reels[reel][index];\n\n        if (symbol.isNew != true){\n          if (Array.isArray(tileId)) data.reels[reel][index] = [`${tileId[0]}`, `${frameId}`];\n          else data.reels[reel][index] = [`${tileId}`, `${frameId}`];\n        }\n      }\n    });\n  }\n}\n\nmodule.exports = DragonsPlaygroundSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass DruidsMagicSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers.unshift({ name: 'randomWilds', cb: this._handleFeature });\n  }\n\n  _beforeParseOperations(response) {\n    super._beforeParseOperations(response);\n\n    const { freeSpins, randomWilds } = response.game;\n\n    if (freeSpins && freeSpins.length) {\n      freeSpins.forEach(freeSpinData => {\n        if (freeSpinData && freeSpinData.randomWilds) {\n          freeSpinData.randomWilds = this._parseRandomWildsData(freeSpinData.randomWilds);\n        }\n      });\n    }\n\n    if (randomWilds && randomWilds.length) {\n      response.game.randomWilds = this._parseRandomWildsData(response.game.randomWilds);\n    }\n  }\n\n  _parseRandomWildsData(randomWilds = []) {\n    if (!randomWilds.length) return;\n\n    const linkedWilds = randomWilds.filter(({type}) => type === \"Linked\");\n    const expandWilds = randomWilds.filter(({type}) => type === \"Expand\");\n    const randomTiles = randomWilds.filter(({type}) => type === \"RandomWilds\");\n\n    const linkedWildsPositions = this._getPositionsForLinked(linkedWilds);\n    const expandWildsPositions = this._getPositionsForExpand(expandWilds);\n\n    return [\n      ...linkedWildsPositions,\n      ...expandWildsPositions,\n      ...randomTiles,\n    ];\n  }\n\n  _getPositionsForLinked(randomWilds = []) {\n    if (!randomWilds.length) return [];\n\n    const positions = [];\n\n    randomWilds.forEach(({ reel, index, width, height, tileId, type }) => {\n      for (let reelIndex = reel; reelIndex < reel + width; reelIndex++) {\n        positions.push({ reel: reelIndex, index, width, height, tileId, type });\n      }\n    });\n\n    return positions;\n  }\n\n  _getPositionsForExpand(randomWilds = []) {\n    if (!randomWilds.length) return [];\n\n    const positions = [];\n\n    randomWilds.forEach(({ to, type, tileId }) => {\n      const { reel, index, width, height } = to;\n      for (let tileIndex = index; tileIndex < index + height; tileIndex++) {\n        positions.push({ reel, index: tileIndex, width, height, tileId, type, to });\n      }\n    });\n\n    return positions;\n  }\n}\n\nmodule.exports = DruidsMagicSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* DynamiteRichesMegaWaysParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n* \n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n* \n* After-parse logic can be added in the method _afterParseOperations(data).\n* \n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass DynamiteRichesMegaWaysParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers = [\n\t\t\t{ name: 'randomWilds', cb: this._handleFeature },\n\t\t\t{ name: 'fatTiles', cb: this._handleFatTiles }\n\t\t];\n\t}\n}\n\nmodule.exports = DynamiteRichesMegaWaysParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* DynamiteRichesParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n* \n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n* \n* After-parse logic can be added in the method _afterParseOperations(data).\n* \n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass DynamiteRichesParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers = [\n\t\t\t{ name: 'randomWilds', cb: this._handleRandomWilds },\n\t\t\t{ name: 'fatTiles', cb: this._handleFatWilds }\n\t\t];\n\t}\n\n\t_handleRandomWilds(data, featureName = 'randomWilds') {\n\t\tthis._applyReelsModifier(data[featureName], data.reels);\n\t}\n\n\t_handleFatWilds(data, featureName = 'fatTiles') {\n\t\tdata[featureName] = this._alterIndex(data[featureName]);\n\t\tthis._handleFatTiles(data, 'fatTiles');\n\t}\n\n\t_alterIndex(data) {\n\t\treturn data.map((item) => {\n\t\t\treturn Object.assign({}, item, { targetPos: item.index });\n\t\t});\n\t}\n}\n\nmodule.exports = DynamiteRichesParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* EasyGoldSlotParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n*\n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n*\n* After-parse logic can be added in the method _afterParseOperations(data).\n*\n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass EasyGoldSlotParser extends DopSlotParser {\n\n  /**\n\t * Override to show only middle visible row array with the current spin data object and apply screen mask\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t */\n\t_initReels(data) {\n\t\tlet reelsBuffer = data.reelsBuffer;\n\t\tlet reels = [];\n\n\t\tfor (let i = 0; i < reelsBuffer.length; i++) {\n\t\t\treels[i] = [reelsBuffer[i][1][2]];\n\t\t}\n    data.reels = reels;\n\t}\n\n  /**\n   * @override - Translate the JP tiles indexes to single-row type.\n   */\n  _handleJackpotTiles(jackpotTiles, reels) {\n\t\tif(!jackpotTiles) return;\n\n\t\tconst indexMap = { 2: 0 }; // `index: 2` from response translates to `index: 0` of game's reels.\n\n\t\tjackpotTiles.forEach(jpTile => {\n\t\t\tconst { toTile, tileId, tile, reel, index } = jpTile;\n\n\t\t\tlet id = 100; // default jackpot tile id\n\n\t\t\tif (toTile) id = toTile;\n\t\t\tif (tileId) id = tileId;\n\t\t\tif (tile) id = tile;\n\n\t\t\tif (reels[reel] && typeof reels[reel][indexMap[index]] !== 'undefined') {\n\t\t\t\treels[reel][indexMap[index]] = id;\n\t\t\t}\n\t\t});\n\t}\n}\n\nmodule.exports = EasyGoldSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nconst MAX_PROGRESS = 4;\nconst EMPTY_POS_ID = 11;\nconst MIDDLE_REEL_INDEX = 4;\nconst ASSETS_EXTENSIONS = {\n  allFatTiles: '_ft', // all other fat tile types, except clusterbuster\n  fatTiles: { // clusterbuster's name in response data\n    normal: '',\n    freeSpins: '_fs'\n  },\n}\n\n/**\n* EgyptClusterbusterSlotParser. Handles parsing game specific features.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass EgyptClusterbusterSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers = [\n      { name: 'randomWilds', cb: this._handleWilds },\n      { name: 'fatTiles', cb: this._handleFatTiles },\n      { name: 'superSymbolFatTiles', cb: this._handleFatTiles },\n      { name: 'fatWild', cb: this._handleFatTiles },\n      { name: 'breakableFatWild', cb: this._handleFatTiles },\n      { name: 'breakableMultiplierFatWild', cb: this._handleFatTiles },\n    ];\n  }\n\n  _handleFatTiles(data, featureName) {\n    const reels = data.reels;\n    const fatTilesData = data[featureName];\n\n    fatTilesData.forEach((tile) => {\n      const tileRight = tile.reel + tile.width;\n      const targetPos = tile.index;\n      const multiplier = tile.multiplier || 0;\n      let reelCounter = 0;\n\n      for (let reelIndex = tile.reel; reelIndex < tileRight; reelIndex++) {\n        const tileBottom = targetPos + tile.height;\n\n        for (let tileIndex = targetPos; tileIndex < tileBottom; tileIndex++) {\n          if (reels[reelIndex] && reels[reelIndex][tileIndex]) {\n            if (tileIndex === targetPos) {\n              const addExtension = this._getAssetNameExtension(data, featureName, reelIndex);\n              const tileAssetName = `${tile.tileId}_${reelCounter}${addExtension}`;\n\n              reels[reelIndex][tileIndex] = (multiplier || multiplier > 1) && reelCounter === tile.width - 1\n                ? [tileAssetName, `${tile.tileId}_x${multiplier}_ft`]\n                : tileAssetName;\n            } else {\n              reels[reelIndex][tileIndex] = EMPTY_POS_ID;\n            }\n          }\n        }\n\n        reelCounter++\n      }\n    });\n  }\n\n  _getAssetNameExtension(data, featureName, reelIndex) {\n    if (featureName === 'fatTiles') {\n      const showNextLevel = data.lockedTiles.every(tile => !tile.spins) && data.progress.next === MAX_PROGRESS;\n      const isFsUnlocked = data.progress.current === MAX_PROGRESS;\n      const { normal, freeSpins } = ASSETS_EXTENSIONS[featureName];\n\n      return (isFsUnlocked || showNextLevel) && reelIndex === MIDDLE_REEL_INDEX ? freeSpins : normal;\n    } else {\n      return ASSETS_EXTENSIONS.allFatTiles;\n    }\n  }\n\n  _handleWilds(data, featureName) {\n    const feature = data[featureName];\n    const reels = data.reels;\n\n    feature.forEach(data => {\n        const { tileId, reel, index, multiplier } = data;\n\n        if (reels[reel] && typeof reels[reel][index] !== 'undefined') {\n          reels[reel][index] = multiplier && multiplier > 1\n            ? [tileId, `${tileId}_x${multiplier}`]\n            : tileId;\n        }\n    });\n  }\n}\n\nmodule.exports = EgyptClusterbusterSlotParser;","const DopSlotParser = require('../DopSlotParser');\nconst FEATURE_NAME = 'fatTiles';\nconst FAT_TILE_ID = 11;\nconst TRANSPARENT_POS_ID = 0;\nconst EMPTY_POS_ID = 20;\nconst JP_TILE = 100;\n\n/**\n* EgyptMegaWaysSlotParser. Handles parsing game specific features.\n* @class\n* @extends {DopSlotParser}\n*/\nclass EgyptMegaWaysSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers = [];\n  }\n\n  _freeSpinsBeforeParseOperations(data) {\n    super._freeSpinsBeforeParseOperations(data);\n    this._replaceAreaUnderFT(data);\n  }\n\n  _beforeParseOperations(data) {\n    this._replaceAreaUnderFT(data.game);\n  }\n\n  _replaceAreaUnderFT(data) {\n    if (!data.reels) return;\n\n    const reels = data.reels;\n    const fatTiles = data[FEATURE_NAME];\n\n    return data.reels = reels.map((reel, reelIndex) => {\n      const fatTile = fatTiles && fatTiles.find(ft => ft.reel === reelIndex);\n\n      if (fatTile) {\n        return reel.map((id, index) => {\n          if (!index) return `${FAT_TILE_ID}_${fatTile.multiplier}`;\n          return EMPTY_POS_ID;\n        });\n      }\n\n      return reel;\n    });\n  }\n\n  /**\n   * @description FTs are not assembled from several pieces of tiles, but are one whole asset.\n   * Therefore, if a JP symbol is dropped, we must replace the FT with the id of the JP tile.\n   * @override\n   */\n  _handleJackpotTiles(jackpotTiles, reels) {\n    if(!jackpotTiles) return;\n\n    jackpotTiles.forEach(jpTile => {\n      const { reel, index } = jpTile;\n\n      if (reels[reel] && typeof reels[reel][index] !== 'undefined') {\n        if (reels[reel].some(id => typeof id === 'string' && id.includes(FAT_TILE_ID))) {\n          for (let i = 0; i < reels[reel].length; i++) {\n            reels[reel][i] = i === 0 ? JP_TILE : TRANSPARENT_POS_ID;\n          }\n        } else {\n          reels[reel][index] = JP_TILE;\n        }\n      }\n    });\n  }\n}\n\nmodule.exports = EgyptMegaWaysSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass ElvenMagicParser extends DopSlotParser {\n\n\tconstructor() {\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// {name: 'swapReels', cb: this._handleSwapReels}\n\n\t\tthis.featureHandlers.unshift({ name: 'iceTiles', cb: this._handleIceTiles });\n\t}\n\n\n\t/**\n\t * Handler for the 'Ice Tiles' feature\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t */\n\t_handleIceTiles(data, featureName) {\n\t\tdata[featureName].forEach((tile) => {\n\t\t\tdata.reels[tile.reel][tile.index] = tile.tile;\n\t\t});\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\t_afterParseOperations(data) {\n\t\tlet arrowsOrder = data.game.arrowsOrder;\n\t\tlet reels = data.game.reels;\n\n\t\tif (arrowsOrder) {\n\t\t\t// This is to handle multiple arrows in any possible order\n\t\t\tarrowsOrder.forEach((type) => {\n\t\t\t\tif (data.game[type]) {\n\t\t\t\t\tdata.game[type].forEach((arrow) => {\n\t\t\t\t\t\t// Apply the modifier tile ID to the reel tiles\n\t\t\t\t\t\treels[arrow.reel][arrow.index] = arrow.toTile || arrow.tile;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n}\n\nmodule.exports = ElvenMagicParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass EmeraldDiamondSlotParser extends DopSlotParser {\n    _nudgeJackpotTiles(lastSpinData, reels, data) {\n        const jackpotNudgeData = data.jackpotNudge || lastSpinData.jackpotNudge;\n\n        if (!jackpotNudgeData) return;\n\n        const nudgeData = lastSpinData.nudge || [];\n\n        jackpotNudgeData.forEach(jackpotNudge => {\n            const nudge = nudgeData.find(nudge => nudge.index === jackpotNudge.index);\n            const nudgeDistance = nudge ? (nudge.dir === 0 ? nudge.distance : -nudge.distance) : 0;\n            const jackpotNudgeDistance = jackpotNudge.dir === 1 ? jackpotNudge.distance : -jackpotNudge.distance;\n            const distance = jackpotNudgeDistance - nudgeDistance;\n            const buffer = lastSpinData.reelsBuffer[jackpotNudge.index];\n            const flatten = _.flatten(buffer);\n            const startAt = buffer[0].length + distance;\n            const endAt = startAt + buffer[1].length;\n\n            reels[jackpotNudge.index] = flatten.slice(startAt, endAt);\n        });\n\n        this._addJackpotTiles(data.jackpotTiles, reels);\n    }\n\n    _addJackpotTiles(jackpotTiles, reels) {\n        if(!jackpotTiles) return;\n\n        jackpotTiles.forEach(jpTile => {\n            const { reel, index } = jpTile;\n            const id = 100;// default jackpot tile id\n\n            if (reels[reel] && reels[reel][index] !== 'undefined') {\n                reels[reel][index] = id;\n            }\n        });\n    }\n\n    _handleJackpotTiles() {\n        return;\n    }\n}\n\nmodule.exports = EmeraldDiamondSlotParser;\n","import Config from '../../../../config/Config';\nconst DopSlotParser = require('../DopSlotParser');\n\nconst STANDARD_EMPEROR_TILE_ID = 13;\n\n/**\n* @class\n* @extends {DopSlotParser}\n*/\nclass EmperorOfIndiaSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this._currentReelLength = null;\n\n    this.featureHandlers.push({name: 'gridPositions', cb: this._hidePositionsUnderGrid});\n\n    // Remove locked tiles functionality from base class as it was overriding fat tiles values\n    const lockedTiles = this.featureHandlers.find(item => item.name === 'lockedTiles');\n    this.featureHandlers.splice(this.featureHandlers.indexOf(lockedTiles), 1);\n  }\n\n  /**\n   * @override - Hide positions under grid\n   */\n  _initReels(data) {\n    let reelsBuffer = data.reelsBuffer;\n    let reels = [];\n\n    for (let i = 0; i < reelsBuffer.length; i++) {\n      reels[i] = this._hidePositionsUnderGrid(reelsBuffer[i][1], data);\n    }\n    data.reels = reels;\n\n    this._currentReelLength = data.reelLength;  // Doing this because math send the next reel length\n\n    Config.resizableSlot.includes(this.gameId) && this._applyScreenMask(data);\n  }\n\n  /**\n   * @description - Map reel to array with all positions under grid replaced with 0\n   */\n  _hidePositionsUnderGrid(reel, data) {\n    const gridPosition = !data.chainReactor || this._isMaxReelLength(reel, data) ? reel.length - data.reelLength : (reel.length - data.reelLength) + 1;\n    return reel.map((id, index) => index < gridPosition ? 0 : id);\n  }\n\n  _isMaxReelLength(reel, data) {\n    return this._currentReelLength === reel.length || data.spinMode.includes('FreeSpins');\n  }\n\n  /**\n   * @override - Format id names with multiplier and match ids to assets\n   */\n  _handleFatTiles(data, featureName) {\n    const reels = data.reels;\n    const fatTilesData = data[featureName];\n\n    fatTilesData.forEach((tile) => {\n      const tileRight = tile.reel + tile.width;\n      const targetPos = typeof tile.targetPos !== 'undefined' ? tile.targetPos : tile.index;\n      const id = typeof tile.tileId !== 'undefined' ? tile.tileId : tile.toTile;\n      let gridWidthIndex = 0;\n\n      for (let reelIndex = tile.reel; reelIndex < tileRight; reelIndex++) {\n        const tileBottom = targetPos + tile.height;\n        let gridHeightIndex = 0;\n\n        for (let tileIndex = targetPos; tileIndex < tileBottom; tileIndex++) {\n\n          const reelsMultiplier = data.reelsMultipliers[tile.reel];\n\n          if (reels[reelIndex] && reels[reelIndex][tileIndex]) {\n            if (!Config.assembledFatTiles.includes(this.gameId)) {\n              reels[reelIndex][tileIndex] = id;\n            } else {\n              if (gridHeightIndex === tile.height - 1 && reelsMultiplier) {\n                // Format with multiplier (x2, x3 etc.)\n                reels[reelIndex][tileIndex] = `${id}x${reelsMultiplier}_${tile.width}x${tile.height}_${gridWidthIndex}x${gridHeightIndex}`;\n              }\n              else {\n                // Replace id with 13 as we only have assets for the tops of the tiles with id 13 as they are all the same\n                reels[reelIndex][tileIndex] = `${STANDARD_EMPEROR_TILE_ID}_${tile.width}x${tile.height}_${gridWidthIndex}x${gridHeightIndex}`;\n              }\n            }\n          }\n\n          gridHeightIndex += 1;\n        }\n\n        gridWidthIndex += 1;\n      }\n    });\n  }\n}\n\nmodule.exports = EmperorOfIndiaSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * EpicJourneyParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n * \n * @class\n * @extends {DopSlotParser}\n */\nclass EpicJourneyParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis._goldBonusTileId = 12;\n\t\tthis._journeyBonusTileId = 13;\n\t}\n\n\t_handleNudge(data, featName) {\n\n\t\t// ------ BE fix on FE -> task: EJOUR-996 --------\n\t\tif (this._hasBonusMismatch('goldBonus', data) || this._hasBonusMismatch('journeyBonus', data)) {\n\t\t\tthis._alterTilesOnBonusMismatch(data);\n\t\t}\n\n\t\tsuper._handleNudge(data, featName);\n\t}\n\n\t_alterTilesOnBonusMismatch(data) {\n\t\tconst reelIndex = data.reels.length - 1; // Last reel will always have a bonus symbol if there are 3 of them.\n\t\t\n\t\tlet bonusTileIndex = null;\n\n\t\tif (this._hasBonusMismatch('goldBonus', data)) {\n\t\t\tbonusTileIndex = data.reels[reelIndex].indexOf(this._goldBonusTileId);\n\t\t\tdata.reels[reelIndex][bonusTileIndex] = this._journeyBonusTileId;\n\t\t} else if (this._hasBonusMismatch('journeyBonus', data)) {\n\t\t\tbonusTileIndex = data.reels[reelIndex].indexOf(this._journeyBonusTileId);\n\t\t\tdata.reels[reelIndex][bonusTileIndex] = this._goldBonusTileId;\n\t\t}\n\t}\n\n\t_hasBonusMismatch(bonusType, result) {\n\t\tswitch (bonusType) {\n\t\t\tcase 'goldBonus':\n\t\t\t\treturn this._countTilesWithId(result.reels, this._goldBonusTileId) >= 3 && !result.pickerBonus;\n\t\t\tcase 'journeyBonus':\n\t\t\t\treturn this._countTilesWithId(result.reels, this._journeyBonusTileId) >= 3 && !result.pathBonus;\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t}\n\n\t_countTilesWithId(reels, id) {\n\t\tlet count = 0;\n\n\t\tfor (let i = 0; i < reels.length; i++) {\n\t\t\tfor (let j = 0; j < reels[i].length; j++) {\n\t\t\t\tif (reels[i][j] === id) {\n\t\t\t\t\tcount++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn count;\n\t}\n\n}\n\nmodule.exports = EpicJourneyParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * EsqueletoMariachiSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n *\n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n *\n * After-parse logic can be added in the method _afterParseOperations(data).\n *\n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n *\n * @class\n * @extends {DopSlotParser}\n */\nclass EsqueletoMariachiSlotParser extends DopSlotParser {\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.featureHandlers = [\n\t\t\t{ name: 'nudge', \t\tcb: this._handleMultiDirectionalNudge },\n\t\t\t{ name: 'randomWilds', \tcb: this._handleFeature }\n\t\t];\n\t}\n\n// >>> Nudge\n\n\t_handleMultiDirectionalNudge(data) {\n\t\tdata.nudge.forEach((nudge) => {\n\t\t\tif (nudge.type === 'Vertical') {\n\t\t\t\tthis._handleVerticalNudge(nudge, data);\n\t\t\t} else {\n\t\t\t\tthis._handleHorizontalNudge(nudge, data);\n\t\t\t}\n\t\t});\n\t}\n\n\t_handleVerticalNudge(nudge, data) {\n\t\tconst buffer = data.reelsBuffer[nudge.index];\n\t\tconst flatten = _.flatten(buffer);\n\n\t\tconst startAt = buffer[0].length + (nudge.dir === 1 ? nudge.distance : -nudge.distance);\n\t\tconst endAt = startAt + buffer[1].length;\n\n\t\tdata.reels[nudge.index] = flatten.slice(startAt, endAt);\n\t}\n\n\t_handleHorizontalNudge(nudge, data) {\n\t\tlet horizontalReel = [];\n\n\t\tfor (let i = 0; i < 5; i++) {\n\t\t\thorizontalReel.push(data.reels[i][nudge.row]);\n\t\t}\n\n\t\tconst horizontalBuffer = _.flatten([nudge.bufferLeft, horizontalReel, nudge.bufferRight]);\n\t\tconst distance = nudge.dir === 0 ? nudge.distance : -nudge.distance;\n\t\tconst startIndex = horizontalReel.length + distance;\n\t\tconst slice = horizontalBuffer.slice(startIndex, startIndex + horizontalReel.length);\n\n\t\tfor (let j = 0; j < 5; j++) {\n\t\t\tdata.reels[j][nudge.row] = slice[j];\n\t\t}\n\t}\n}\n\nmodule.exports = EsqueletoMariachiSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nconst EMPTY_DIVER_ID = 15;\n\n/**\n* @class\n* @extends {DopSlotParser}\n*/\n\nclass FishtasticSlotParser extends DopSlotParser {\n\n  // adds a fake reel, the game has an additional diver reel which is not part of the reels buffer data\n  _initReels(data) {\n    super._initReels(data);\n    const bonusDiverProp = data['bonusDiver']\n    const cashData = bonusDiverProp.cash || [];\n    const diverId = bonusDiverProp.reel[1][0] || EMPTY_DIVER_ID;\n    const reels = data.reels;\n\n    cashData.forEach(pos => {\n      const { reel, index, tileId, value: { multiplier: multiplierValue } } = pos;\n\n      let formattedMultiplier = Number.parseFloat(multiplierValue).toFixed(2).replace('.', '') // remove decimals\n      if (formattedMultiplier.startsWith('0')) formattedMultiplier = formattedMultiplier.substring(0,2) // if was decimal keep only 2 characters\n      else if (formattedMultiplier.length == 3) formattedMultiplier = formattedMultiplier.substring(0,1) // int < 10  keep 1 character\n      else if (formattedMultiplier.length == 4) formattedMultiplier = formattedMultiplier.substring(0,2) // int >= 10  keep 2 character\n\n      reels[reel][index] = [tileId,`multiplier_` + formattedMultiplier]; // adds a multiplier over the tile\n    })\n\n\n    reels.push([0, 0, 0]); // adds visual divider between reelsBuffer and fake reel\n    reels.push([`${diverId}_1x3_0x0`, `${diverId}_1x3_0x1`, `${diverId}_1x3_0x2`]); // adds fake fatTile\n  }\n\n}\n\nmodule.exports = FishtasticSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass FlamingFoxSlotParser extends DopSlotParser {\n\n    constructor() {\n        super();\n\n        this.featureHandlers.push({ name: 'swapTiles', cb: this._handleSwapReels });\n        this.featureHandlers.push({ name: 'lockedTiles', cb: this._handleSwapReels });\n        this.featureHandlers.push({ name: 'lockedReels', cb: this._handleSwapReels });\n    }\n\n    /**\n     * @description Handler for the 'Swap Reels', 'Swap Tiles', 'Locked Reels', 'Locked Tiles' features\n     * @private\n     * @param  {Object} data Game data, contains\n     * screen reels and every game feature\n     */\n    _handleSwapReels(data, featureName) {\n        let featureReelsData = data[featureName];\n\n        if (featureReelsData) {\n            this._applyReelsModifier(featureReelsData, data.reels);\n        }\n    }\n}\n\nmodule.exports = FlamingFoxSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass FlodderParser extends DopSlotParser {\n\n  _handleFatTiles(data, featureName) {\n    // the fat wilds should not be displayed in initial spin\n    if (data.freeSpins) return;\n\n    super._handleFatTiles(data, featureName);\n  }\n}\n\nmodule.exports = FlodderParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass FortuneCatParser extends DopSlotParser {\n\n\tconstructor() {\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// {name: 'swapReels', cb: this._handleSwapReels}\n\n\t\tthis.featureHandlers.unshift({ name: 'randomWilds', cb: this._handleRandomWilds });\n\t\tthis.featureHandlers.unshift({ name: 'randomWildsMega', cb: this._handleRandomWilds });\n\t\tthis.featureHandlers.unshift({ name: 'randomWildsSuper', cb: this._handleRandomWilds });\n\t\tthis.featureHandlers.unshift({ name: 'randomWildsBig', cb: this._handleRandomWilds });\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\t_handleRandomWilds(data) {\n\t\tlet randomWildsData = data.randomWildsMega\n                          || data.randomWildsSuper\n                          || data.randomWildsBig\n                          || data.randomWilds;\n\t\tlet reels = data.reels;\n\n\t\trandomWildsData.forEach((tile) => {\n\t\t\tif (tile === undefined) return; // TODO\n\n\t\t\treels[tile.reel][tile.index] = tile.toTile;\n\t\t});\n\t}\n}\n\nmodule.exports = FortuneCatParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * HiddenCharmParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n *\n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n *\n * After-parse logic can be added in the method _afterParseOperations(data).\n *\n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n *\n * @class\n * @extends {DopSlotParser}\n */\nclass FortuneCharmParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis._wildTileId = 10;\n\n\t\tthis.featureHandlers.unshift({ name: 'fortuneCharms', cb: this._handleFortuneCharms });\n\t}\n\n\t_handleFortuneCharms(data, featName) {\n\t\tconst reels = data.reels;\n\t\tconst featureData = data[featName];\n\n\t\tfeatureData.forEach((item) => {\n\t\t\treels[item.reel][item.index] = item.tileId;\n\t\t});\n\t}\n\n\t/**\n\t * Called after the parsing operations have taken place. Calls the winLines altering for all necessary data.\n\t * @param response - the server response.\n\t * @override\n\t * @private\n\t */\n\t_afterParseOperations(response) {\n\n\t\tif (this.winDetails.winLines && this.winDetails.winLines.length > 0) {\n\t\t\tthis._alterWinWaysData(this.data.game.reels, this.winDetails.winLines);\n\t\t}\n\n\t\tif (this.winDetails.freeSpins && this.winDetails.freeSpins.length > 0) {\n\t\t\tthis.winDetails.freeSpins.forEach((freeSpin) => {\n\t\t\t\tthis._alterWinWaysData(freeSpin.reels, freeSpin.winLines);\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * >>> !!! This is fix for bug in certified math - HC-387\n\t *\n\t * Alters the winLines data tiles matrix so it's properly visualized.\n\t * @param {Array} winWaysData - the win lines data to be altered.\n\t * @param {Array} reels - the reels.\n\t * @private\n\t */\n\t_alterWinWaysData(reels, winWaysData) {\n\n\t\tconst tileIdToRemove = this._wildTileId; // Always the wild with no multiplier.\n\t\tconst winWaysWithHigherMplr = winWaysData.filter((line) => {\n\t\t\treturn line.multiplier > 1;\n\t\t});\n\n\t\twinWaysWithHigherMplr.forEach((winLine) => {\n\t\t\twinLine.tiles = this._reCalcTilesMatrix(winLine, reels, tileIdToRemove);\n\t\t});\n\t}\n\n\t/**\n\t * Iterates through each winWay tiles matrix and if it meets the condition, alters the record - 1 to 0.\n\t * @param winWayData - Win Way data with multiplier higher than 1\n\t * @param reels - the reels of the current screen.\n\t * @param tileId - the tile id to remove the flag for, if condition is met.\n\t * @return {Array}\n\t * @private\n\t */\n\t_reCalcTilesMatrix(winWayData, reels, tileId) {\n\n\t\tlet tileMatrixCopy = [],\n\t\t\tactivePosIndices = [];\n\n\t\twinWayData.tiles.forEach((reelData, reelIndex) => {\n\t\t\ttileMatrixCopy[reelIndex] = [];\n\n\t\t\tactivePosIndices = this._getOnlyActivePosIndices(reelData);\n\n\t\t\treelData.forEach((tileFlag, tileIndex) => {\n\n\t\t\t\tif (this._reelHasMoreWilds(reels[reelIndex], activePosIndices) && (reels[reelIndex][tileIndex] === tileId)) {\n\t\t\t\t\ttileFlag = 0;\n\t\t\t\t}\n\n\t\t\t\ttileMatrixCopy[reelIndex][tileIndex] = tileFlag; // 0 or 1.\n\t\t\t});\n\n\t\t});\n\n\t\treturn tileMatrixCopy;\n\t}\n\n\t/**\n\t * Gets only the positions on which there is a win way symbol.\n\t * @param reelData - the winWay current record from tiles matrix. Ex.: [0, 1, 1]\n\t * @return {Array}\n\t * @private\n\t */\n\t_getOnlyActivePosIndices(reelData) {\n\t\tlet activePosIndices = [];\n\n\t\treelData.forEach((flag, index) => {\n\t\t\tif (flag) {\n\t\t\t\tactivePosIndices.push(index);\n\t\t\t}\n\t\t});\n\n\t\treturn activePosIndices;\n\t}\n\n\t/**\n\t * Checks if the winWay current reel data has more wilds on it and they should be with Ids between 11 & 13 included.\n\t * @param reel - winWay current reel\n\t * @param tileIndices - the active tile indices for this reel.\n\t * @return {boolean}\n\t * @private\n\t */\n\t_reelHasMoreWilds(reel, tileIndices) {\n\t\tlet wildsCount = 0;\n\n\t\ttileIndices.forEach((tileIndex) => {\n\t\t\tif (reel[tileIndex] > 10 && reel[tileIndex] < 14) { // Only wilds with multipliers.\n\t\t\t\twildsCount++;\n\t\t\t}\n\t\t});\n\n\t\treturn wildsCount > 0;\n\t}\n\n}\n\nmodule.exports = FortuneCharmParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass FortuneHouseParser extends DopSlotParser {\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis._modifierFeaturesList = ['mysteryTiles', 'fortuneTree'];\n\n\t\tthis.otherWins.instantWin.push('dragonWheel');\n\t}\n\n\t_beforeParseOperations(response) {\n\t\tthis._modifierFeaturesList.forEach(feature => {\n\t\t\tif (!response.game[feature]) return;\n\t\t\tresponse.game.respin = this._generateRespinData(response.game, feature);\n\t\t});\n\n\t\tif (!response.game.fortuneRespin) return;\n\n\t\tresponse.game.respin = response.game.fortuneRespin;\n\t}\n\n\t/**\n\t *\n\t * @description Generates data in the form of a respin for the two modifier features,\n\t * so that separate screens can be created for them with all the information about the result.\n\t * @param {Object} data\n\t * @param {String} feature\n\t * @returns\n\t */\n\t_generateRespinData(data, feature) {\n\t\tconst featureTiles = data[feature];\n\n\t\tif (!featureTiles) return;\n\n\t\tconst respins = [];\n\t\tconst respinsCount = featureTiles.length;\n\t\tconst capitalizedFeature = feature[0].toUpperCase() + feature.slice(1);\n\t\tconst reelsBuffer = data.reelsBuffer.map(reel => reel.map(buffer => _.clone(buffer)));\n\n\t\tfor (let index = 0; index < respinsCount; index++) {\n\t\t\tconst winLines = data[`winLines${capitalizedFeature}`][index].map(line => _.clone(line));\n\t\t\tconst winAmount = data.win[`lines${capitalizedFeature}` + index];\n\t\t\tconst featureRespin = {\n\t\t\t\treelsBuffer: this._getModifiedBuffer(featureTiles[index], reelsBuffer),\n\t\t\t\tstake: data.stake,\n\t\t\t\twin: {\n\t\t\t\t\tlines: winAmount,\n\t\t\t\t\ttotal: winAmount\n\t\t\t\t},\n\t\t\t\twinLines,\n\t\t\t};\n\n\t\t\trespins.push(featureRespin);\n\t\t}\n\n\t\treturn respins;\n\t}\n\n\t_getModifiedBuffer(feature, buffer) {\n\t\tfeature.forEach(({ reel, index, toTile }) => buffer[reel][1][index] = toTile);\n\t\treturn buffer.map(reel => reel.map(buffer => _.clone(buffer)));\n\t}\n}\n\nmodule.exports = FortuneHouseParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * FourSquad. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n * \n * @class\n * @extends {DopSlotParser}\n */\nclass FourSquadSlotParser extends DopSlotParser {\nconstructor() {\n  super();\n\n  this.featureHandlers.unshift({ name: 'randomWilds', cb: this._handleFeature });\n  this.featureHandlers.unshift({ name: 'cloneSymbols', cb: this._handleFeature });\n}\n\n\t_applyReelsModifier(feature, reels) {\n\t\tfeature.forEach((tile) => {\n\t\t\tlet isNested = tile instanceof Array;\n\n\t\t\tif (isNested) this._applyReelsModifier(tile, reels);\n\t\t\telse reels[tile.reel][tile.index] = tile.tileId;\n\t\t});\n\t}\n}\n\nmodule.exports = FourSquadSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nconst FRAME_PARTS = {\n  START: 'start',\n  MIDDLE: 'middle',\n  END: 'end',\n  FRAME: 'frame',\n};\n\nclass FruitFlashSlotParser extends DopSlotParser {\n\n  /**\n   * @description Shows frames on specific tiles. this is not displaying multipliers, because it's just a workaround for overlaying images\n   */\n  _handleMultipliers(data, name) {\n    const fatTiles = data[name][0];\n\n    if(!fatTiles) {\n        return;\n    }\n\n    const { height, index, reel } = fatTiles;\n    const respinCount =  data.type || 0;\n    const expandFramePositions = [\n      {reel, index: 0},\n      {reel, index: 1},\n      {reel, index: 2},\n    ]\n    if (height === 1) {\n      this.winDetails.multipliers.push({type: respinCount, reel, index, multiplier: FRAME_PARTS.FRAME});\n    } else {\n      expandFramePositions.forEach( (pos, i) => {\n        const multiPostfix = i === 0 ? FRAME_PARTS.START : i === 2 ? FRAME_PARTS.END : FRAME_PARTS.MIDDLE;\n        this.winDetails.multipliers.push({type: respinCount, reel: pos.reel, index: pos.index, multiplier: multiPostfix });\n      })\n    }\n  }\n\n  _handleFatTiles(data, featureName){}\n}\n\nmodule.exports = FruitFlashSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* FruitShopFrenzySlotParser. Handles parsing game specific features.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass FruitShopFrenzySlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers = [\n\t\t\t{ name: 'randomWilds', cb: this._handleFeature },\n\t\t\t{ name: 'randomWildsFrenzy', cb: this._handleFeature },\n\t\t];\n  }\n}\n\nmodule.exports = FruitShopFrenzySlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* @class\n* @extends {DopSlotParser}\n*/\nclass GemCrushSlotParser extends DopSlotParser {\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.featureHandlers = [\n\t\t\t{ name: 'randomWilds', cb: this._handleRandomWilds },\n\t\t\t{ name: 'swapTiles', cb: this._handleSwapTiles },\n\t\t]\n\t}\n\n\t/**\n\t * @override Fat tiles with specific width are assembled\n\t */\n\t_handleRandomWilds(data, featureName) {\n\t\tconst reels = data.reels;\n\t\tconst fatTilesData = data[featureName];\n\n\t\tfatTilesData.forEach((tile) => {\n\t\t\tconst tileRight = tile.reel + tile.width;\n\t\t\tconst targetPos = typeof tile.targetPos !== 'undefined' ? tile.targetPos : tile.index;\n\t\t\tconst id = typeof tile.tileId !== 'undefined' ? tile.tileId : tile.toTile;\n\t\t\tlet gridWidthIndex = 0;\n\n\t\t\tfor (let reelIndex = tile.reel; reelIndex < tileRight; reelIndex++) {\n\t\t\t\tconst tileBottom = targetPos + tile.height;\n\t\t\t\tlet gridHeightIndex = 0;\n\n\t\t\t\tfor (let tileIndex = targetPos; tileIndex < tileBottom; tileIndex++) {\n\t\t\t\t\tif (reels[reelIndex] && reels[reelIndex][tileIndex]) {\n\t\t\t\t\t\tif (tile.width > 1) {\n\t\t\t\t\t\t\treels[reelIndex][tileIndex] = `${id}_${tile.width}x${tile.height}_${gridWidthIndex}x${gridHeightIndex}`;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treels[reelIndex][tileIndex] = id;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tgridHeightIndex += 1;\n\t\t\t\t}\n\n\t\t\t\tgridWidthIndex += 1;\n\t\t\t}\n\t\t});\n\t}\n\n\t_handleSwapTiles(data) {\n\t\tconst featuresData = data.swapTiles[0].map(tile => {\n\t\t\ttile.tileId = tile.to.tileId;\n\n\t\t\treturn tile;\n\t\t});\n\n\t\tthis._applyReelsModifier(featuresData, data.reels);\n\t}\n}\n\nmodule.exports = GemCrushSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* GemsGoneWildPowerReelsParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n* \n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n* \n* After-parse logic can be added in the method _afterParseOperations(data).\n* \n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass GemsGoneWildPowerReelsParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers = this.featureHandlers.filter((handler) => {\n\t\t\treturn handler.name !== 'randomTiles'\n\t\t});\n\t}\n\n\t_handleFatTiles(data, featureName) {\n\t\tif(!data.lockedTiles) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn super._handleFatTiles(data, featureName)\n\t}\n}\n\nmodule.exports = GemsGoneWildPowerReelsParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass GemsGoneWildParser extends DopSlotParser {\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.featureHandlers = this.featureHandlers.filter(handler => handler.name !== 'randomTiles');\n\t\tthis.featureHandlers.forEach(handler => {\n\t\t\tif (handler.name === 'lockedTiles') handler.cb = this._handleLockedTiles;\n\t\t});\n\n\t\tthis.lockedWildGems = [];\n\t}\n\n\t_beforeParseOperations() { this.lockedWildGems = [] }\n\n\t_freeSpinsBeforeParseOperations(data) {\n\t\tlet reels = data.reels;\n\n\t\tlet otherWins = data.otherWins;\n\t\tlet instantWin = data.win.instantWin || data.win.limitedWin;\n\t\tlet bonusWin = data.win.pickerBonus\n\t\t\t|| data.win.pathBonus\n\t\t\t|| data.win.pathPickerBonus\n\t\t\t|| data.win.multiPickerBonus;\n\n\t\tthis.lockedWildGems.forEach((tile) => {\n\t\t\treels[tile.reel][tile.index] = tile.tile;\n\t\t});\n\n\t\t// apply stake multiplier\n\t\tif (data.win && data.win.multiplier > 0 && data.amount !== 0) {\n\t\t\totherWins.push({\n\t\t\t\tamount: data.win.multiplier,\n\t\t\t\ttype: 'multiplier'\n\t\t\t});\n\t\t}\n\n\t\t// apply bonus wins\n\t\tif (bonusWin) {\n\t\t\totherWins.push({ type: 'bonus', amount: bonusWin });\n\t\t}\n\n\t\tif (instantWin) {\n\t\t\totherWins.push({ type: 'instantWin', amount: instantWin });\n\t\t}\n\t}\n\n\t/**\n\t * Handler for the 'Locked Tiles' feature\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t */\n\t_handleLockedTiles(data) {\n\t\tlet reels = data.reels;\n\t\tlet lockedTilesData = data.lockedTiles;\n\n\t\tthis.lockedWildGems = this.lockedWildGems.concat(lockedTilesData);\n\n\t\tthis.lockedWildGems.forEach((tile) => {\n\t\t\treels[tile.reel][tile.index] = tile.tile;\n\t\t});\n\t}\n}\n\nmodule.exports = GemsGoneWildParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nconst FEATURES = {\n  rainbowGem: 'rainbowGem',\n  diamonds: 'diamonds',\n}\nclass GemsInfernoMegaWaysSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers.push({name: FEATURES.rainbowGem, cb: this._handleFeature});\n    this.featureHandlers.push({name: FEATURES.diamonds, cb: this._handleFeature});\n    this.featureHandlers.push({name: FEATURES.rainbowGem, cb: this._handleMultipliers});\n    this.featureHandlers.push({name: FEATURES.diamonds, cb: this._handleMultipliers});\n  }\n\n   /**\n   * @description Takes care of which multipliers in the JP screen are displayed and which are not.\n   * @override\n   */\n   _afterParseOperations(data) {\n    const gameData = data.game;\n    const jpTiles = gameData.jackpotTiles;\n    const lastSpinData = this._getLastSpinData(this.winDetails, gameData);\n\n    this.winDetails.jackpotWins.forEach(jp => {\n      this._handleMultipliers({\n        [FEATURES.rainbowGem]: lastSpinData[FEATURES.rainbowGem],\n        type: jp.type\n      }, FEATURES.rainbowGem);\n\n      this.winDetails.multipliers = this._removeMultipliers(jpTiles, jp.type);\n    });\n\n    this.winDetails.jackpotWins.forEach(jp => {\n      this._handleMultipliers({\n        [FEATURES.diamonds]: lastSpinData[FEATURES.diamonds],\n        type: jp.type\n      }, FEATURES.diamonds);\n\n      this.winDetails.multipliers = this._removeMultipliers(jpTiles, jp.type);\n    });\n  }\n\n  _removeMultipliers(jpTiles, type) {\n    return this.winDetails.multipliers.filter(mplr => {\n      return !(jpTiles.some(jpTile => jpTile.reel === mplr.reel && jpTile.index === mplr.index) && type === mplr.type);\n    });\n  }\n}\n\nmodule.exports = GemsInfernoMegaWaysSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * GemtasticParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n *\n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n *\n * After-parse logic can be added in the method _afterParseOperations(data).\n *\n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n *\n * @class\n * @extends {DopSlotParser}\n */\nclass GemtasticParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// No feature handlers needed for this parser...\n\t\tthis.featureHandlers = [];\n\t}\n\n}\n\nmodule.exports = GemtasticParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * GemtasticParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n *\n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n *\n * After-parse logic can be added in the method _afterParseOperations(data).\n *\n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n *\n * @class\n * @extends {DopSlotParser}\n */\nclass GenieNightsParser extends DopSlotParser {\n    _initReels(data) {\n        const magicLampId = 26;\n        const hasLampBonus = data.activator && data.activator.features.some(feature => feature.includes('LampBonus'));\n\n        let reelsBuffer = data.reelsBuffer;\n        let reels = [];\n\n        for (let i = 0; i < reelsBuffer.length; i++) {\n            if (hasLampBonus) {\n                reels[i] = reelsBuffer[i][1].fill(magicLampId);\n            } else {\n                reels[i] = reelsBuffer[i][1];\n            }\n        }\n        data.reels = reels;\n    }\n}\n\nmodule.exports = GenieNightsParser;\n","const DopSlotParser = require('../DopSlotParser');\nconst Config = require(\"../../../../config/Config\");\n\nconst FEATURES = {\n    SCATTERS: 'scatters',\n};\n\nconst TEXT_SCATTERS_IDS = [10, 11]; // double and triple tile ids\n\n/**\n * GetTheGoldInfiniReelsSlotParser. Handles parsing game specific features.\n *\n * @class\n * @extends {DopSlotParser}\n */\nclass GetTheGoldInfiniReelsSlotParser extends DopSlotParser {\n    constructor() {\n        super();\n\n        this.featureHandlers.push({ name: FEATURES.SCATTERS, cb: this._handleMultipliers });\n    }\n\n\n    _handleMultipliers(data, name) {\n        if (!Config.hasMultipliers.includes(this.gameId)) return;\n\n        if (!data[name]) return;\n\n        data[name] = data[name].filter(scatter => !TEXT_SCATTERS_IDS.includes(scatter.tileId));\n        data[name].map(scatter => scatter.multiplier = scatter.value);\n\n        return super._handleMultipliers(data, name);\n    }\n\n    _afterParseOperations(data) {\n        const gameData = data.game;\n        const lastSpinData = this._getLastSpinData(this.winDetails, gameData);\n\n        this.winDetails.jackpotWins.forEach(jp => {\n            this._handleMultipliers({ scatters: lastSpinData[FEATURES.SCATTERS], type: jp.type }, FEATURES.SCATTERS);\n            this.winDetails.multipliers = this._removeMultipliers(gameData.jackpotTiles, jp.type);\n        });\n    }\n\n    _removeMultipliers(jpTiles, type) {\n        return this.winDetails.multipliers.filter(mplr => {\n            return !(jpTiles.some(jpTile => jpTile.reel === mplr.reel && jpTile.index === mplr.index) && type === mplr.type);\n        });\n    }\n}\n\nmodule.exports = GetTheGoldInfiniReelsSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\nconst Config = require('../../../../config/Config');\n\nconst FEATURES = {\n  RANDOM_WILDS: 'randomWilds',\n};\n\nclass GigaBlastSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n    this.featureHandlers.push({name: FEATURES.RANDOM_WILDS, cb: this._handleFeature});\n    this.featureHandlers.push({name: FEATURES.RANDOM_WILDS, cb: this._replaceAreaUnderTiles});\n  }\n\n  _handleMultipliers(data, name) {\n    if (!Config.hasMultipliers.includes(this.gameId)) return;\n\n\t\tconst multipliers = data[name];\n\n    if (!multipliers) return;\n\n\t\tmultipliers.forEach(m => {\n\t\t\tconst { reel, index, multiplier } = m;\n\n      if (multiplier === 1) return;\n\n      const multiplierAssetName = this._getMultiplierAssetId(m);\n\n\t\t\tconst type = data.type || 0;\n\t\t\tconst previousMultiplier = this.winDetails.multipliers\n\t\t\t\t.find(m => m.reel === reel && m.index === index && m.type === type);\n\n\t\t\t// handles multiplier swapping features\n\t\t\tif (previousMultiplier) previousMultiplier.multiplier = multiplierAssetName;\n\t\t\telse this.winDetails.multipliers.push({ type, reel, index, multiplierAssetName });\n\t\t});\n  }\n\n  _replaceAreaUnderTiles(data) {\n    if (!data.reels) return;\n\n    const { reels, [FEATURES.RANDOM_WILDS]: randomWilds } = data;\n\n    data.reels = reels.map((reel, reelIndex) => {\n      const wildsWithMultipliers = randomWilds && randomWilds.filter(tile => tile.reel === reelIndex);\n\n      return wildsWithMultipliers.length ? this._getRandomWildsReelData(reel, wildsWithMultipliers) : reel;\n    });\n\n    return data.reels;\n  }\n\n  _getRandomWildsReelData(reelData = [], randomWilds = []) {\n    return reelData.map((id, i, arr) => {\n      const tileOnePos = randomWilds.find(tile => tile.index === i);\n\n      if (tileOnePos) {\n        const multiplierAssetName = this._getMultiplierAssetId(tileOnePos);\n        return [`${id}`, ...multiplierAssetName ];\n      } else {\n        return id;\n      }\n    });\n  }\n\n  _getMultiplierAssetId(tileOnePos) {\n    const { multiplier = 1 } = tileOnePos;\n    if (multiplier === 1) return [];\n\n    // So we have 3 type assets for multiplier. (center, left and right)\n    // 1. When we have multiplier <=9. Example: multiplier =x2 => we use asset: img_tile_multiplier_2_0 ('2' is multiplier value and '0' is the center type)\n    // 2. When multiplier is greater than 9. Example: multiplier = x45. We have assets for the left and right parts of the number =>\n    // [img_tile_multiplier_4_1 , img_tile_multiplier_5_2] ('4' and '5' are multiplier values and '1' is the left type and '2' is the right type)\n\n    const multiplierValues = String(multiplier).split(\"\").map((num)=> Number(num)) // convert multiplier value to array\n    if (!multiplierValues.length) return;\n\n    if (multiplierValues.length === 1) {\n      return multiplierValues.map((value, i) => { // Example:  ['222_2_0']; -> [type_multiplier_position]\n        return `_multiplier_${value}_${i}` // '0' is central multiplier\n      });\n    } else {\n      return multiplierValues.map((value, i) => { // Example: ['222_2_1', '222_2_2']; -> [type_multiplier_position, type_multiplier_position]\n        return `_multiplier_${value}_${i+1}` // '1' and '2' are left and right multipliers\n      });\n    }\n  }\n}\n\nmodule.exports = GigaBlastSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* GladiatorClashSlotParser. Handles parsing game specific features.\n* @class\n* @extends {DopSlotParser}\n*/\nclass GladiatorClashSlotParser extends DopSlotParser {\n\n  _beforeParseOperations(data) {\n    this._assembleMultiplierTiles(data.game);\n  }\n\n  _freeSpinsBeforeParseOperations(data) {\n    super._freeSpinsBeforeParseOperations(data);\n    this._assembleMultiplierTiles(data);\n  }\n\n  _assembleMultiplierTiles(data) {\n    if (!data.reels) return;\n\n    const { bonusReel, reels } = data;\n\n    data.reels[0] = reels[0].map((id, reelIndex) => {\n      const multiplierAssetName = this._getMultiplierAssetNames(bonusReel[reelIndex]);\n\n      return [`${id}`, ...multiplierAssetName ];\n    });\n\n    return data.reels;\n  }\n\n  _getMultiplierAssetNames(multiplier = 1) {\n    // So we have 3 type assets for multiplier. (one digit, two digit and three digit)\n    // 1. When we have multiplier <=9. Example: multiplier =x2 => we use asset: img_tile_multiplier2_1 ('2' is multiplier value and '1' is the number of digits)\n    // 2. When multiplier is greater than 9. Example: multiplier = x45. We have assets for the first and second digits of the number =>\n    // [img_tile_multiplier4_2_1 , img_tile_multiplier5_2_2] ('4' and '5' are multiplier values, '2' shows that it is a 2 digit number, '1' and '2' are the 1st and 2nd digit of the number)\n\n    const multiplierValues = String(multiplier).split(\"\").map((num)=> Number(num)) // convert multiplier value to array\n    if (!multiplierValues.length) return;\n\n    if (multiplierValues.length === 1) {\n      return multiplierValues.map((value, i) => { // Example:  ['2_1']; -> [multiplier_type]\n        return `_multiplier${value}_${i+1}`\n      });\n    } else {\n      return multiplierValues.map((value, i) => { // Example: ['2_2_1', '2_2_2']; -> [multiplier_type_position, multiplier_type_position]\n        return `_multiplier${value}_${multiplierValues.length}_${i+1}` // '1' and '2' are first and second digit\n      });\n    }\n  }\n\n}\n\nmodule.exports = GladiatorClashSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass GodsOfTroySlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers = [\n      { name: 'lockedTiles', cb: this._handleWreaths },\n      { name: 'swapTiles', cb: this._handleFeature },\n    ];\n  }\n\n  _handleWreaths(data, featureName) {\n    const reels = data.reels;\n\n    for (const { reel, index } of data[featureName]) {\n      const tile = data.reelsBuffer[reel][1][index];\n\n      // {tileId}_1 is the version of the image with a locked wreath, use that instead of the regular image\n      reels[reel][index] = `${tile}_1`;\n    }\n  }\n}\n\nmodule.exports = GodsOfTroySlotParser;","const DopSlotParser = require('../DopSlotParser');\nconst MISTRESS_TILE_ID = 9;\nconst FAT_HEIGHT = 3;\nconst MIN_MULTIPLIER = 2;\n\n/**\n* @class\n* @extends {DopSlotParser}\n*/\nclass GoldMineMistressSlotParser extends DopSlotParser {\n\n  constructor() {\n    super();\n\n    this.featureHandlers = [\n      { name: 'fatTiles', cb: this._handleFatTiles },\n      { name: 'apple', cb: this._handleAppleTile },\n      { name: 'lockedFatTiles', cb: this._handleFatTiles },\n    ];\n  }\n\n  /**\n  * @override Custom handler because we can have Mistress Wild with height 1 or height 3 due to game specifics\n  */\n  _handleFatTiles(data, featureName) {\n    const mistressTiles = data[featureName];\n    const reels = data.reels;\n\n    if (mistressTiles) {\n      mistressTiles.forEach(tile => {\n        const { height, index, reel, multiplier } = tile;\n        const isFat = height === FAT_HEIGHT;\n        const hasMulti = multiplier >= MIN_MULTIPLIER;\n\n        if (isFat) {\n          reels[reel] = hasMulti ?\n            [\n              `${MISTRESS_TILE_ID}_1x3_0x0`,\n              `${MISTRESS_TILE_ID}_1x3_0x1`,\n              `${MISTRESS_TILE_ID}_1x3_0x2_x${multiplier}`,\n            ]\n            :\n            [\n              `${MISTRESS_TILE_ID}_1x3_0x0`,\n              `${MISTRESS_TILE_ID}_1x3_0x1`,\n              `${MISTRESS_TILE_ID}_1x3_0x2_x0`,\n            ]\n        } else {\n          reels[reel][index] = hasMulti ? `${MISTRESS_TILE_ID}_${multiplier}` : reels[reel][index] = `${MISTRESS_TILE_ID}`;\n        };\n      })\n    }\n  }\n\n  /**\n  * @override Render apple tile on top of other tile\n  */\n  _handleAppleTile(data) {\n    const appleTiles = data['apple'];\n    const reels = data.reels;\n\n    if (appleTiles) {\n      const { index, reel } = appleTiles[0];\n\n      reels[reel][index] = [\n        reels[reel][index],\n        \"Apple\",\n      ];\n    }\n  }\n\n}\n\nmodule.exports = GoldMineMistressSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* GoldenLeprechaunMegaWaysParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n* \n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n* \n* After-parse logic can be added in the method _afterParseOperations(data).\n* \n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass GoldenLeprechaunMegaWaysParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers.unshift({ name: 'luckyLine', cb: this._handleLuckyLine });\n\t\tthis.featureHandlers.unshift({ name: 'wildStacks', cb: this._handleWildStacks });\n\t\tthis.featureHandlers.unshift({ name: 'randomWilds', cb: this._handleFeature });\n\t}\n\n\t_handleLuckyLine(data, featName = 'luckyLine') {\n\t\tconst reels = data.reels;\n\t\tconst luckyLineData = data[featName];\n\n\t\tluckyLineData.forEach((item) => {\n\t\t\treels[item.reel][item.index] = item.tileId;\n\t\t});\n\t}\n\n\t_handleWildStacks(data, featName = 'wildStacks') {\n\t\tconst reels = data.reels;\n\t\tconst wildStacksData = data[featName];\n\n\t\tlet currentReel = null;\n\t\t\n\t\twildStacksData.forEach((stack) => {\n\t\t\tcurrentReel = reels[stack.reel];\n\t\t\tcurrentReel = currentReel.map((_, index) => {\n\t\t\t\treturn !index ? stack.tileId : 0;\n\t\t\t});\n\n\t\t\treels[stack.reel] = currentReel;\n\t\t\tcurrentReel = null;\n\t\t});\n\t}\n}\n\nmodule.exports = GoldenLeprechaunMegaWaysParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass GoldenOfferParser extends DopSlotParser {\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.otherWins.instantWin.push('randomOffer');\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\t_afterParseOperations(data) {\n\t\tlet reels = data.game.reels;\n\n\t\tif(!reels) return;\n\n\t\tif (reels[0]) reels[0][0] = reels[0][4] = 0;\n\t\tif (reels[4]) reels[4][0] = reels[4][4] = 0;\n\t}\n}\n\nmodule.exports = GoldenOfferParser;\n","const DopSlotParser = require('../DopSlotParser');\nconst Config = require('../../../../config/Config');\nconst Format = require('../../../../utils/Format');\n\n/**\n* GonzosQuestMegaWaysParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n* \n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n* \n* After-parse logic can be added in the method _afterParseOperations(data).\n* \n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass GonzosQuestMegaWaysParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\t}\n\n\tparse(gameId, data) {\n\n\t\tthis.data = data;\n\t\tthis.gameId = gameId;\n\t\tthis.hide0s = Config.respinWinEndOnly.indexOf(gameId) !== -1;\n\n\t\tif (this.data.game.reelsBuffer) this._initReels(this.data.game);\n\t\tthis.winDetails.freeSpins = []; // TODO rename to freespins after removing DopSlotParser\n\t\tthis.winDetails.respins = []; // ditto\n\n\t\tthis.data.responses.forEach((response) => {\n\n\t\t\tFormat.convertMoneyToNumber(response);\n\n\t\t\tthis._beforeParseOperations(response);\n\n\t\t\tthis._handleFeatures(response.game);\n\n\t\t\t// can have both free spins and respin in one spin (there can be a fs IN a respin and vice versa\n\t\t\tif (response.game.respin) {\n\t\t\t\tthis._flattenRespins(response.game.respin, this.winDetails.respins);\n\t\t\t\tthis._alterRespinsResult();\n\t\t\t}\n\n\t\t\tlet freeSpins = null;\n\n\t\t\tif (this.winDetails.respins.length && _.last(this.winDetails.respins).freeSpins) {\n\t\t\t\tfreeSpins = _.last(this.winDetails.respins).freeSpins;\n\t\t\t} else if (response.game.freeSpins) {\n\t\t\t\tfreeSpins = response.game.freeSpins;\n\t\t\t} else if (response.game.gameData && response.game.gameData.freeSpins) { // new game data format and format for choice responses\n\t\t\t\tfreeSpins = response.game.gameData.freeSpins;\n\t\t\t}\n\n\t\t\tif (freeSpins && freeSpins.length && freeSpins.length > 0) {\n\t\t\t\tthis._flattenFreeSpins(freeSpins, this.winDetails.freeSpins);\n\t\t\t}\n\n\t\t\tthis._handleWins(response);\n\n\t\t\t//We should use the user data of the latest response as it is the most up-to-date\n\t\t\tif(response.user && response.user.balance) {\n\t\t\t\tthis.data.user.balance.cash.atEnd = response.user.balance.cash.atEnd;\n\t\t\t\tthis.data.user.balance.freeBets.atEnd = response.user.balance.freeBets.atEnd;\n\t\t\t\tthis.data.user.balance.sessionCash.atEnd = response.user.balance.sessionCash.atEnd;\n\t\t\t\tthis.data.user.balance.sessionFreeBets.atEnd = response.user.balance.sessionFreeBets.atEnd;\n\t\t\t}\n\n\t\t\tthis._afterParseOperations(response);\n\t\t});\n\n\t\tthis._roundingCorrection(data);\n\n\t\treturn this._generateOutput();\n\t}\n\n\t_alterRespinsResult() {\n\t\tconst indexOfEntryWithFs = this.winDetails.respins.findIndex((respin) => {\n\t\t\treturn respin.freeSpins || (respin.activator && respin.activator.features && respin.activator.features.includes('Choices'))\n\t\t});\n\n\t\tif (indexOfEntryWithFs >= 0) {\n\t\t\tconst respins = this.winDetails.respins;\n\n\t\t\tif (indexOfEntryWithFs === 0) {\n\t\t\t\tthis.winDetails.respins = [respins[0]];\n\t\t\t\tthis.winDetails.heldRespins = respins.slice(1);\n\t\t\t} else if (indexOfEntryWithFs > 0) {\n\t\t\t\tthis.winDetails.respins = respins.slice(0, indexOfEntryWithFs + 1);\n\t\t\t\tthis.winDetails.heldRespins = respins.slice(indexOfEntryWithFs + 1);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.winDetails.heldRespins = this.winDetails.respins;\n\t\t\tthis.winDetails.respins = [];\n\t\t}\n\t}\n\n\t/**\n\t * Flattens the respins\n\t * Overridden to remove unnecessary warning and logic.\n\t * This game has FS that are not in the last respin, which would lead to warning in console.\n\t * @override\n\t * @param { Array } respins\n\t * @param { Object } result\n\t */\n\t_flattenRespins(respins, result) {\n\t\trespins.forEach((respin) => {\n\t\t\tthis._handleExtraSpin(respin);\n\t\t\tresult.push(respin);\n\t\t});\n\t}\n}\n\nmodule.exports = GonzosQuestMegaWaysParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass GoodLuckClusterbusterSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers = [\n      { name: 'movingTiles', cb: this._handleFeature }\n    ];\n  }\n}\n\nmodule.exports = GoodLuckClusterbusterSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * GrandWheelSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n *\n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n *\n * After-parse logic can be added in the method _afterParseOperations(data).\n *\n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n *\n * @class\n * @extends {DopSlotParser}\n */\nclass GrandWheelSlotParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers.unshift({\n\t\t\tname: 'instantWin',\n\t\t\tcb: this._handleInstantWinJackpot\n\t\t});\n\t}\n\n\t_handleInstantWinJackpot(data, featureName) {\n\n\t\tconst reels = data.reels;\n\t\tconst featureData = data[featureName];\n\t\tconst bonusWheelSymbolsCount = this._getBonusSymbolsCount(reels, featureData.tileId);\n\t\tconst hasMismatchBetweenIwAndBuffers = (bonusWheelSymbolsCount - featureData.count) > 0;\n\n\t\tif (hasMismatchBetweenIwAndBuffers) {\n\t\t\tconst diff = bonusWheelSymbolsCount - featureData.count;\n\n\t\t\tfor (let i = 0; i < diff; i++) {\n\t\t\t\tif (reels[i][1] === featureData.tileId) {\n\t\t\t\t\treels[i][1] = 2; // Always tileId 2, to correspond with changes in game.\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t_getBonusSymbolsCount(reels, tileId) {\n\t\tlet bonusSymbolsCount = 0;\n\n\t\treels.forEach((reel) => {\n\t\t\tif (reel[1] === tileId) {\n\t\t\t\tbonusSymbolsCount++;\n\t\t\t}\n\t\t});\n\n\t\treturn bonusSymbolsCount;\n\t}\n}\n\nmodule.exports = GrandWheelSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass GreatGoldSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers.unshift({ name: 'lockedWilds', cb: this._handleFeature });\n  }\n}\n\nmodule.exports = GreatGoldSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* @class\n* @extends {DopSlotParser}\n*/\nclass HammerGodsParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers.push({name: 'swapData', cb: this._handleSwapData});\n\t\tthis.featureHandlers.push({name: 'fatTilesSwap', cb: this._handleFatTiles});\n\t}\n\n\t_handleSwapData(response, featureName) {\n\t\tfor (const { data } of response[featureName]) {\n\n\t\t\tthis._applyReelsModifier(data, response.reels);\n\t\t}\n\t}\n}\n\nmodule.exports = HammerGodsParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nconst DIAMOND_APPLE_ID = 10;\n\nclass HappyApplesSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers.push({ name: 'diamondApple', cb: this._handleDiamondApples });\n  }\n\n  _handleDiamondApples(data, featureName) {\n    data[featureName].forEach(({ reel, index }) => data.reels[reel][index] = DIAMOND_APPLE_ID);\n  }\n}\n\nmodule.exports = HappyApplesSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/* @class\n* @extends {DopSlotParser}\n*/\nclass HarleCoinParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers = this.featureHandlers.filter(({ name }) => name !== 'swapTiles');\n\t}\n}\n\nmodule.exports = HarleCoinParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* HereKittyKittySlotParser. Handles parsing game specific features.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass HereKittyKittySlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers = [\n      {name: 'randomWilds', cb: this._handleFeature},\n      {name: 'swapTiles', cb: this._handleFeature},\n      {name: 'fatTiles', cb: this._handleFatTiles},\n    ];\n  }\n}\n\nmodule.exports = HereKittyKittySlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass HoardOfPoseidonParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\t\tthis.featureHandlers.push({ name: 'expandTiles', cb: this._handleExpandTiles });\n\t\tthis.featureHandlers.push({ name: 'cloningTiles', cb: this._handleCloningTiles });\n\t}\n\n\t_handleExpandTiles(data) {\n\t\tdata.expandTiles[0].forEach(tile => {\n\t\t\ttile.toTile = tile.tileId;\n\t\t});\n\t\tthis._applyReelsModifier(data.expandTiles, data.reels);\n\t}\n\n\t_handleCloningTiles(data) {\n\t\tdata.cloningTiles[0].forEach(tile => {\n\t\t\ttile.toTile = tile.tileId;\n\t\t\ttile.index = tile.to.index;\n\t\t\ttile.reel = tile.to.reel;\n\t\t});\n\t\tdata.cloningTiles.forEach(tiles => this._applyReelsModifier(tiles, data.reels));\n\t}\n}\n\nmodule.exports = HoardOfPoseidonParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* @class\n* @extends {DopSlotParser}\n*/\nclass HotHotChilliPotParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers.push({ name: 'armageddon', cb: this._handleFatTiles })\n\t\tthis.featureHandlers.push({ name: 'randomWilds', cb: this._handleFeature })\n\t\tthis.featureHandlers = this.featureHandlers.filter(({ name }) => name !== 'lockedTiles')\n\t}\n\n\t/**\n\t * @override Fat tiles with specific width are assembled\n\t */\n\t_handleFatTiles(data, featureName) {\n\t\tconst reels = data.reels;\n\t\tconst fatTilesData = data[featureName];\n\n\t\tfatTilesData.forEach((tile) => {\n\t\t\tconst tileRight = tile.reel + tile.width;\n\t\t\tconst targetPos = typeof tile.targetPos !== 'undefined' ? tile.targetPos : tile.index;\n\t\t\tconst id = typeof tile.tileId !== 'undefined' ? tile.tileId : tile.toTile;\n\t\t\tlet gridWidthIndex = 0;\n\n\t\t\tfor (let reelIndex = tile.reel; reelIndex < tileRight; reelIndex++) {\n\t\t\t\tconst tileBottom = targetPos + tile.height;\n\t\t\t\tlet gridHeightIndex = 0;\n\n\t\t\t\tfor (let tileIndex = targetPos; tileIndex < tileBottom; tileIndex++) {\n\t\t\t\t\tif (reels[reelIndex] && reels[reelIndex][tileIndex]) {\n\t\t\t\t\t\tif (tile.width > 1) {\n\t\t\t\t\t\t\treels[reelIndex][tileIndex] = id;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treels[reelIndex][tileIndex] = `${id}_${tile.width}x${tile.height}_${gridWidthIndex}x${gridHeightIndex}`;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tgridHeightIndex += 1;\n\t\t\t\t}\n\n\t\t\t\tgridWidthIndex += 1;\n\t\t\t}\n\t\t});\n\t}\n}\n\nmodule.exports = HotHotChilliPotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * HundredKDropParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n * \n * @class\n * @extends {DopSlotParser}\n */\nclass HundredKDropSlotParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n        this.otherWins.bonus.push('hundredKDrop');\n    }\n\n}\n\nmodule.exports = HundredKDropSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass ImperialPalaceParser extends DopSlotParser {\n\n\tconstructor() {\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// {name: 'swapReels', cb: this._handleSwapReels}\n\t\tthis.featureHandlers.unshift({ name: 'randomReels2x', cb: this._handleFeature });\n\t\tthis.featureHandlers.unshift({ name: 'randomReels3x', cb: this._handleFeature });\n\t\tthis.featureHandlers.unshift({ name: 'randomReels5x', cb: this._handleFeature });\n\t}\n}\n\nmodule.exports = ImperialPalaceParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass JackInAPotSlotParser extends DopSlotParser {\n\n    constructor() {\n        super();\n\n        this.featureHandlers.unshift({name: 'randomTilesBeer', cb: this._handleRandomTilesBeer});\n        this.featureHandlers.unshift({name: 'randomTilesRainbow', cb: this._handleFeature});\n        this.featureHandlers = this.featureHandlers.filter(feature => feature.name !== 'fatTiles');\n        this.featureHandlers.unshift({name: 'fatTiles', cb: this._handlePipeTiles});\n\n    }\n\n    /**\n     * Handler for the 'Random Tiles Beer' feature\n     * @private\n     * @param  {Object} data Game data, contains\n     * screen reels and every game feature\n     */\n    _handleRandomTilesBeer(data) {\n\n        data.randomTilesBeer.forEach((tiles) => {\n\n            tiles.forEach((tile) => {\n                if(tile.toTile !== 0) { // Handle beer tiles and popup/fat tiles overlapping.\n                    data.reels[tile.reel][tile.index] = tile.toTile;\n                }\n            \n            });\n\n        });\n    }\n\n    /**\n    * Handler for the 'Fat tiles' feature\n    * @private\n    * @param  {Object} data Game data, contains\n    * screen reels and every game feature\n    */\n    _handlePipeTiles(data, featureName) {\n        let reels = data.reels;\n        let fatTilesData = data[featureName]; // fatTiles are nested so iteration through them is necessary\n\n        fatTilesData.forEach(fatTiles => {\n            fatTiles.forEach(tile => {\n                let tileLeft = _.min([tile.reel, tile.to.reel]);\n                let tileRight = tileLeft + tile.width;\n\n                for (let i = tileLeft; i < tileRight; i++) {\n                    let minBottomTile = _.min([tile.targetPos, tile.to.targetPos]);\n                    let tileBottom = minBottomTile + tile.height;\n\n                    for (let j = minBottomTile; j < tileBottom; j++) {\n                        if (reels[i] && reels[i][j]) {\n                            reels[i][j] = tile.tileId;\n                        }\n                    }\n                }\n            });\n        });\n    }\n\n    _freeSpinsAfterParseOperations(extraSpin) {\n        if (extraSpin.respin) {\n            extraSpin.respin.forEach((spin) => {\n                this._initReels(spin);\n                this._handleFeatures(spin);\n            });\n        }\n    }\n\n}\n\nmodule.exports = JackInAPotSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* JellyBellyMegaWaysSlotParser. Handles parsing game specific features.*\n* @class\n* @extends {DopSlotParser}\n*/\nclass JellyBellyMegaWaysSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers.push({ name: 'randomWilds', cb: this._handleFeature });\n  }\n}\n\nmodule.exports = JellyBellyMegaWaysSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass JewelScarabsParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers.forEach(handler => {\n\t\t\tif (handler.name === 'lockedTiles') handler.cb = this._handleLockedTiles;\n\t\t});\n\t}\n\n\t_handleLockedTiles(data) {\n\t\tvar reelsData = data.lockedTiles.map(tile => {\n\t\t\ttile.reel = tile.to.reel,\n\t\t\ttile.index = tile.to.index,\n\t\t\ttile.toTile = tile.tileId;\n\t\t\treturn tile;\n\t\t});\n\n\t\tthis._applyReelsModifier(reelsData, data.reels);\n\t}\n}\n\nmodule.exports = JewelScarabsParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nconst FEATURES = {\n  LOCKED_MULTIPLIERS: 'lockedMultipliers',\n  SWAP_TILES: 'swapTiles',\n};\n\nconst WILD_FRAME_ID = '16_1';\nconst JACKPOT_TILE = 100;\nconst NOT_VISIBLE_INDEXES = [0, 4];\n\n/**\n* JingleBellsBonanzaSlotParser. Handles parsing game specific features.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass JingleBellsBonanzaSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers.push({ name: FEATURES.LOCKED_MULTIPLIERS, cb: this._replaceAreaUnderTiles });\n  }\n\n  /**\n   * @override\n   *\n   * @param jackpotTiles\n   * @param reels\n   * @private\n   */\n  _handleJackpotTiles(jackpotTiles, reels) {\n    if (!jackpotTiles) return;\n\n    jackpotTiles.forEach(({ toTile, tileId, tile, reel, index, screen }) => {\n      const currentTile = reels[reel][index];\n      const id = toTile || tileId || tile || JACKPOT_TILE;\n\n      const { lockedMultipliers = [] } = this.data.game;\n      const hasFrame = lockedMultipliers.some(tile => tile.reel === reel && tile.index === index);\n\n      if (reels[reel] && typeof Array.isArray(currentTile)) {\n        const currentTileCopy = [...currentTile];\n        currentTileCopy.shift();\n\n        reels[reel][index] = hasFrame ? [ JACKPOT_TILE, ...currentTileCopy] : id;\n      }\n\n    });\n  }\n\n  /**\n   * @override\n   * remove first and last row { normal game}\n   * @param response\n   * @private\n   */\n  _beforeParseOperations(response) {\n    super._beforeParseOperations(response);\n\n    // hide not visible rows\n    response.game.reels = this._parseReels(response.game.reels);\n  }\n\n  /**\n   * @overview\n   * remove first and last row { normal game}\n   * @param response\n   * @private\n   */\n  _afterParseOperations(response) {\n    super._afterParseOperations(response);\n\n    // hide not visible rows\n    response.game.reels = this._parseReels(response.game.reels);\n  }\n\n  /**\n   * @override\n   * remove first and last row ( in respin, if here is a 'gridIncrease' feature)\n   * @param respins\n   * @param result\n   * @private\n   */\n  _flattenRespins(respins, result) {\n    super._flattenRespins(respins, result);\n\n    if (this._hasCashDropFeature('gridIncrease')) return;\n\n    respins.forEach(respinData => {\n      respinData.reels = this._parseReels(respinData.reels);\n    });\n  }\n\n  _replaceAreaUnderTiles(data) {\n    if (!data.reels) return;\n\n    const { reels, [FEATURES.LOCKED_MULTIPLIERS]: lockedMultipliers, [FEATURES.SWAP_TILES]: swapTiles } = data;\n\n    data.reels = reels.map((reel, reelIndex) => {\n      const lockedTilesOnReel = lockedMultipliers && lockedMultipliers.filter(tile => tile.reel === reelIndex);\n\n      return lockedTilesOnReel.length ? this._getLockedReelData(reel, lockedTilesOnReel, swapTiles) : reel;\n    });\n\n    return data.reels;\n  }\n\n  _parseReels(reels = []) {\n    return reels.map((reel, reelIndex) => {\n      return reel.map((id, tileIndex) => {\n        return NOT_VISIBLE_INDEXES.includes(tileIndex) ? 0 : id;\n      });\n    });\n  }\n\n  _getLockedReelData(reelData = [], lockedTilesOnReel = [], swapTiles = []) {\n    return reelData.map((id, i, arr) => {\n      const tileOnePos = lockedTilesOnReel.find(tile => tile.index === i);\n\n      if (tileOnePos) {\n        const isTileSwap = swapTiles.some(tile => tile.index === tileOnePos.index && tile.reel === tileOnePos.reel);\n        const multiplierAssetName = this._getMultiplierAssetId(tileOnePos);\n\n        if (isTileSwap) {\n          return [`${id}`, ...multiplierAssetName ];\n        } else {\n          return [`${id}`, WILD_FRAME_ID, ...multiplierAssetName ];\n        }\n      } else {\n        return id;\n      }\n    });\n  }\n\n  _getMultiplierAssetId(tileOnePos) {\n    const { multiplier = 1 } = tileOnePos;\n    if (multiplier === 1) return [];\n\n    // So we have 3 type assets for multiplier. (center, left and right)\n    // 1. When we have multiplier <=9. Example: multiplier =x2 => we use asset: img_tile_multiplier_2_0 ('2' is multiplier value and '0' is the center type)\n    // 2. When multiplier is greater than 9. Example: multiplier = x45. We have assets for the left and right parts of the number =>\n    // [img_tile_multiplier_4_1 , img_tile_multiplier_5_2] ('4' and '5' are multiplier values and '1' is the left type and '2' is the right type)\n\n    const multiplierValues = String(multiplier).split(\"\").map((num)=> Number(num)) // convert multiplier value to array\n    if (!multiplierValues.length) return;\n\n    if (multiplierValues.length === 1) {\n      return multiplierValues.map((value, i) => { // Example:  ['222_2_0']; -> [type_multiplier_position]\n        return `_multiplier_${value}_${i}` // '0' is central multiplier\n      });\n    } else {\n      return multiplierValues.map((value, i) => { // Example: ['222_2_1', '222_2_2']; -> [type_multiplier_position, type_multiplier_position]\n        return `_multiplier_${value}_${i+1}` // '1' and '2' are left and right multipliers\n      });\n    }\n  }\n\n  _hasCashDropFeature(name) {\n    const { bonusGames = [] } = this.data.game;\n    return bonusGames.some(feature => feature.name === name);\n  }\n}\n\nmodule.exports = JingleBellsBonanzaSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* JingleBellsPowerReelsParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n* \n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n* \n* After-parse logic can be added in the method _afterParseOperations(data).\n* \n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass JingleBellsPowerReelsParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers.unshift({ name: 'randomWilds', cb: this._handleRandomWilds });\n\t}\n\n  /**\n   * Handler for the Double 'Random wilds' feature\n   *\n   * @param {Object} data\n   * @param {String} featureName\n   * @private\n   */\n  _handleRandomWilds(data, featureName) {\n    const reels = data.reels;\n\n    data[featureName].forEach((tile) => {\n      const tileRight = tile.reel + tile.width;\n\n      for (let i = tile.reel; i < tileRight; i++) {\n        const tileBottom = tile.index + tile.height;\n\n        for (let j = tile.index; j < tileBottom; j++) {\n          if (reels[i] && reels[i][j]) reels[i][j] = tile.tileId;\n        }\n      }\n    });\n  }\n\n}\n\nmodule.exports = JingleBellsPowerReelsParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* JingleWaysMegaWaysParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n*\n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n*\n* After-parse logic can be added in the method _afterParseOperations(data).\n*\n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass JingleWaysMegaWaysParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers.push({ name: 'randomWilds', cb: this._handleFeature });\n  }\n}\n\nmodule.exports = JingleWaysMegaWaysParser;","const DopSlotParser = require('../DopSlotParser');\n/**\n* JoeExoticParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n* \n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n* \n* After-parse logic can be added in the method _afterParseOperations(data).\n* \n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass JoeExoticParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\tthis.otherWins.instantWin.push('randomOffer');\n\t}\n}\n\nmodule.exports = JoeExoticParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nconst WILD = 11;\nconst WILD_WITHOUT_TEXT = '11-1';\nconst TILES_WITHOUT_MULTIPLIERS = [12, 13, 100];\nconst MAX_REEL_HEIGHT = 7;\n\nclass JudgementDayMegaWaysSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers = [\n      { name: 'randomWilds', cb: this._handleFeature },\n      { name: 'doublingTiles', cb: this._handleTileSplit },\n      { name: 'nudge', cb: this._handleNudge },\n      { name: 'allMultipliers', cb: this._handleAllMultipliers },\n    ];\n  }\n\n  _handleTileSplit({ reels, doublingTiles }) {\n    const buffer = doublingTiles.buffer;\n\n    for (let reelIndex = 0; reelIndex < buffer.length; reelIndex++) {\n      const tiles = buffer[reelIndex][1];\n\n      tiles.forEach((tile, index) => {\n        reels[reelIndex][index] = tile;\n      });\n    }\n  }\n\n  _handleNudge(data, featureName = 'nudge') {\n    const bufferLengths = data.reels.map(reel => reel.filter(tile => tile !== 0).length);\n\n    super._handleNudge(data, featureName);\n\n    data.nudge.forEach(({ index: reel, distance }) => {\n      for (let index = 0; index < distance; index++) {\n        data.reels[reel][index] = WILD_WITHOUT_TEXT;\n      }\n\n      for (let index = bufferLengths[reel]; index < MAX_REEL_HEIGHT; index++) {\n        data.reels[reel][index] = 0;\n      }\n    });\n  }\n\n  _handleAllMultipliers({ reels, allMultipliers = [], type = 0 }) {\n    this._handleMultipliers({\n      multipliers: allMultipliers.filter(({ reel, index }) => {\n        const tileId = reels[reel][index];\n        if (tileId == WILD) reels[reel][index] = WILD_WITHOUT_TEXT;\n\n        return !TILES_WITHOUT_MULTIPLIERS.includes(tileId);\n      }),\n      type,\n    }, 'multipliers');\n  }\n\n  _afterParseOperations(data) {\n    const gameData = data.game;\n    const jpTiles = gameData.jackpotTiles;\n    const lastSpinData = this._getLastSpinData(this.winDetails, gameData);\n\n    this.winDetails.jackpotWins.forEach(jp => {\n      this._handleAllMultipliers({\n        reels: lastSpinData.reels,\n        allMultipliers: lastSpinData.allMultipliers,\n        type: jp.type,\n      }, 'multipliers');\n\n      this.winDetails.multipliers = this._removeMultipliers(jpTiles, jp.type);\n    });\n  }\n\n  _removeMultipliers(jpTiles, type) {\n    return this.winDetails.multipliers.filter(mplr => {\n      return !(jpTiles.some(jpTile => jpTile.reel === mplr.reel && jpTile.index === mplr.index) && type === mplr.type);\n    });\n  }\n}\n\nmodule.exports = JudgementDayMegaWaysSlotParser;","const DopSlotParser = require('../DopSlotParser');\nconst Config = require('../../../../config/Config');\n\n/**\n* KnightsOfAvalonSlotParser. Handles parsing game specific features.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass KnightsOfAvalonSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers.push({ name: 'seniorDrop', cb: this._handleMultipliers });\n    this.featureHandlers.push({ name: 'seniorDrop', cb: this._handleFeature });\n    this.featureHandlers.push({ name: 'swapTiles', cb: this._handleFeature });\n  }\n}\n\nmodule.exports = KnightsOfAvalonSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\nconst Config = require('../../../../config/Config');\n\n/**\n * LaserFruitSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n * \n * @class\n * @extends {DopSlotParser}\n */\nclass LaserFruitSlotParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t// { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n    }\n\n    /**\n     * Overwrites initReels so as to allow reel resizing and applies the screenMask to the spin data\n     * @private\n     * @param  {Object} data Game data, contains screen reels and game features\n     */\n    _initReels(data){\n        super._initReels(data);\n\n        if (data.screenExpand) data.reels = data.screenExpand;\n\n        this._trimEmpty(data);\n    }\n\n    _applyScreenMask(data) {\n        if (data.screenExpand) return;\n\n        super._applyScreenMask(data);\n    }\n\n    /**\n     * Trimming data to the visible removing empty reels and rows\n     * @private\n     * @param {Array.<Array.<0|1>>} data.screenMask\n     * @param {Array.<Array>} data.reels\n     * @param {Array.<Array>} data.winLines\n     */\n    _trimEmpty(data) {\n\n        this._trimEmptyColumns(data);\n\n        this._trimEmptyRows(data);\n    }\n\n    _trimEmptyColumns(data) {\n        // trim empty columns on left and right\n        let firstColumn = -1, lastColumn = -1;\n        _.each(data.screenMask, (reel, reelIndex) => {\n            let reelEmpty = this._isEmpty(reel);\n            if (!reelEmpty) {\n                if (firstColumn === -1) firstColumn = reelIndex;\n                lastColumn = reelIndex;\n            }\n        });\n\n        // remove right columns\n        _.times(data.screenMask.length - (lastColumn + 1), () => {\n            data.screenMask.pop();\n            data.reels.pop();\n            _.each(data.winLines, (winLine) => {\n                winLine.tiles.pop();\n            });\n        });\n        //remove left columns\n        _.times(firstColumn, () => {\n            data.screenMask.shift();\n            data.reels.shift();\n            _.each(data.winLines, (winLine) => {\n                winLine.tiles.shift();\n            });\n        });\n    }\n\n    _trimEmptyRows(data) {\n        let tilesPerReel = data.screenMask[0].length;\n        let firstRow = -1, lastRow = -1;\n\n        _.times(tilesPerReel, (tileIndex) => {\n            let columnEmpty = true;\n            _.times(data.screenMask.length, (reelIndex) => {\n                if (data.screenMask[reelIndex][tileIndex]) columnEmpty = false;\n            });\n            if (!columnEmpty) {\n                if (firstRow === -1) firstRow = tileIndex;\n                lastRow = tileIndex;\n            }\n        });\n\n        _.each(data.screenMask, (reel, reelIndex) => {\n            // remove bottom tiles\n            _.times(reel.length - (lastRow + 1), () => {\n                data.screenMask[reelIndex].pop();\n                data.reels[reelIndex].pop();\n                _.each(data.winLines, (winLine) => {\n                    winLine.tiles[reelIndex].pop();\n                });\n            });\n            // remove top tiles\n            _.times(firstRow, () => {\n                data.screenMask[reelIndex].shift();\n                data.reels[reelIndex].shift();\n                _.each(data.winLines, (winLine) => {\n                    winLine.tiles[reelIndex].shift();\n                });\n            });\n        });\n    }\n\n    _isEmpty(reel) {\n        return this._getFirstTile(reel) === undefined;\n    }\n\n    /**\n     *\n     * @param reel\n     * @returns {undefined|Number}\n     * @private\n     */\n    _getFirstTile(reel) {\n        return _.find(reel, (tile) => tile !== 0);\n    }\n}\n\nmodule.exports = LaserFruitSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* NeonLinksParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n*\n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n*\n* After-parse logic can be added in the method _afterParseOperations(data).\n*\n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass LastChanceSaloonParser extends DopSlotParser {\n\n\t_roundingCorrection(data) {\n\t\tsuper._roundingCorrection(data);\n\n\t\tif (!data.game.choices) return;\n\n\t\tconst selectedChoice = this._getSelectedChoice(data);\n\t\tif (selectedChoice === 'collect') return;\n\n\t\tconst hasJackpotWins = data.jackpots && data.jackpots.win > 0;\n\t\tconst totalWin = hasJackpotWins ? this.winDetails.totalWin - data.jackpots.win : this.winDetails.totalWin;\n\t\tconst modifier =  totalWin === 0 ? -1 : 1;\n\t\tconst bonusAmount = data.game.pendingWin.amount * modifier;\n\t\tconst bonus = this.winDetails.totalWin === bonusAmount ? 0 : bonusAmount;\n\n\t\tthis.winDetails.otherWins.push({\n\t\t\ttype: 'gamble',\n\t\t\tamount: bonus,\n\t\t});\n\t}\n\n\t_getSelectedChoice(data) {\n\t\treturn data.responses.length > 1 && data.responses[1].game && data.responses[1].game.choices && data.responses[1].game.choices.selected;\n\t}\n}\n\nmodule.exports = LastChanceSaloonParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* LegendaryExcaliburParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n* \n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n* \n* After-parse logic can be added in the method _afterParseOperations(data).\n* \n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass LegendaryExcaliburParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\tthis.featureHandlers.unshift({name: 'randomWilds', cb: this._handleRandomWilds});\n\t}\n\n\t/**\n\t * Handler for the 'Nudge' feature\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t * @param {Array} data.reelsBuffer reels buffer array\n\t * @param {Array} data.nudge Nudge modification object\n\t * @param {Array} data.nudgeBonus Nudge modification object\n\t */\n\t_handleNudge(data, featureName = 'nudge') {\n\t\tlet nudgeData = data[featureName];\n\t\tlet reels = data.reels;\n\n\t\tnudgeData.forEach((nudge) => {\n\t\t\tlet buffer = data.reelsBuffer[nudge.index];\n\t\t\tlet flatten = _.flatten(buffer);\n\n\t\t\tlet startAt = buffer[0].length + (nudge.dir === 1 ? nudge.distance : -nudge.distance);\n\t\t\tlet endAt = startAt + buffer[1].length;\n\n\t\t\treels[nudge.index] = flatten.slice(startAt, endAt);\n\n\t\t\tvar fatTilesOnReel = _.where(data.fatTiles || [], { reel: nudge.index });\n\n\t\t\t//Nudge the fat tile as well\n\t\t\tif (fatTilesOnReel.length) {\n\t\t\t\tfatTilesOnReel.forEach(function (tile) {\n\t\t\t\t\ttile.targetPos += nudge.dir === 1 ? nudge.distance : -nudge.distance;\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Handler for the 'Random Wilds' feature\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t */\n\t_handleRandomWilds(data, featureName) {\n\t\tlet reels = data.reels;\n\t\tlet lockedTilesData = data[featureName];\n\n\t\tlockedTilesData.flat().forEach((tile) => {\n\t\t\treels[tile.reel][tile.index] = tile.tileId;\n\t\t});\n\t}\n}\n\nmodule.exports = LegendaryExcaliburParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * LionDanceParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n * \n * @class\n * @extends {DopSlotParser}\n */\nclass LionDanceParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\tthis.featureHandlers.unshift({ name: 'connectingTiles', cb: this._handleConnectingTiles });\n\t}\n\n\t_handleConnectingTiles(data, featureName) {\n\t\tlet feature = data[featureName].path;\n\n\t\tfeature.forEach((tile) => {\n\t\t\tdata.reels[tile.reel][tile.index] = tile.tileId;\n\t\t});\n\t}\n}\n\nmodule.exports = LionDanceParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nconst MYSTERY_TILE = 10;\n\n/**\n* LionsHoardParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n* \n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n* \n* After-parse logic can be added in the method _afterParseOperations(data).\n* \n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass LionsHoardParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\tthis.featureHandlers.unshift({ name: 'lockedPositions', cb: this._handleMysterySymbols });\n\t\tthis.featureHandlers.push({name: 'mystery', cb: this._handleMysterySwap }) // needs to be after locked tiles handler\n\t\tthis.featureHandlers.push({name: 'fatTiles', cb: this._handleFatTiles}) // needs to be after locked tiles handler\n\t}\n\n\t/**\n\t * @description - Mystery symbols handler because in the response they are 'lockedPositions'\n\t */\n\t_handleMysterySymbols(data, featureName) {\n\t\tconst feature = data[featureName];\n\t\tconst reels = data.reels;\n\n\t\tfeature.forEach(({ reel, index }) => {\n\t\t\tif (reels[reel] && reels[reel][index] !== 'undefined') {\n\t\t\t\treels[reel][index] = MYSTERY_TILE;\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * @description - Handle mystery swapped tiles\n\t */\n\t_handleMysterySwap(data, featureName) {\n\t\tconst { tiles: swappedPositions, toTile } = data[featureName];\n\t\tconst reels = data.reels;\n\n\t\tswappedPositions.forEach(({ reel, index }) => {\n\t\t\tif (reels[reel] && reels[reel][index] !== 'undefined') {\n\t\t\t\treels[reel][index] = toTile;\n\t\t\t}\n\t\t});\n\t}\n\n}\n\nmodule.exports = LionsHoardParser;\n","const DopSlotParser = require('../DopSlotParser');\nconst Config = require('../../../../config/Config');\n\nconst FEATURES = {\n  LOCKED_TILES: 'lockedTiles',\n};\n\nclass LondonTubeSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n    this.winDetails.lockedTiles = [];\n    this.featureHandlers.push({name: FEATURES.LOCKED_TILES, cb: this._handleMultipliers});\n  }\n\n  \t/**\n\t * @description showing multiplier on specific features activator\n\t * @param {object} data - The data that is returned from the server.\n\t * @param {string} [name] - The name of the array in the response.\n\t */\n\t_handleMultipliers(data, name) {\n\t\tif (!Config.hasMultipliers.includes(this.gameId)) return;\n\n    const {activator} = data;\n\t\tconst multipliers = data[name];\n    const hasInstantWin = activator && activator.features && activator.features.includes('InstantWin');\n    const hasWaysMultiplier = activator && activator.features && activator.features.includes('WaysMultiplier');\n    const hasWilds = activator && activator.features && activator.features.includes('Wilds');\n\n    if(hasWilds || !multipliers) {\n      return;\n    }\n\n    const hasBonus = hasInstantWin || hasWaysMultiplier;\n\n\t\tmultipliers.forEach(multiply => {\n\t\t\tconst { reel, index, multiplier, instantWin } = multiply;\n\t\t\tconst type = data.type || 0;\n\t\t\tconst previousMultiplier = this.winDetails.multipliers\n\t\t\t\t.find(m => m.reel === reel && m.index === index && m.type === type);\n      const prioritizedValue = hasInstantWin ? instantWin : multiplier;\n      const multi = hasBonus ? prioritizedValue : 0 ; // this is workaround for using lockedTiles asset overlapping with tiles\n      const model = hasInstantWin ? 'InstantWin' : '';\n\n\t\t\tif (previousMultiplier) {\n        previousMultiplier.multiplier = multi;\n      } else {\n        const multiPrefix = hasInstantWin ? `${multi}InstantWin` : multi;\n        this.winDetails.multipliers.push({ type, reel, index, multiplier: multiPrefix, model });\n      }\n\t\t});\n\t}\n\n  /**\n\t * ignores initial tile which triggers locked tiles and removes instant win tiles leaving only the cash prize and the lockedTile frame\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t * @param  {String} featureName\n\t */\n\t_handleFeature(data, featureName) {\n    const {activator} = data;\n    const hasInstantWin = activator && activator.features && activator.features.includes('InstantWin');\n    let featureData = data[featureName];\n\n    if(featureName === FEATURES.LOCKED_TILES && !hasInstantWin) return;\n\n    if(hasInstantWin) {\n      featureData = featureData.map(f => Object.assign({}, f, {tileId: 0})) // making them instant win tiles empty\n    }\n\n\t\tthis._applyReelsModifier(featureData, data.reels);\n\t}\n\n   /**\n   * @description Takes care of which multipliers and lockedTiles in the JP screen are displayed and which are not.\n   * @override\n   */\n   _afterParseOperations(data) {\n    const gameData = data.game;\n    const jpTiles = gameData.jackpotTiles;\n    const lastSpinData = this._getLastSpinData(this.winDetails, gameData);\n\n    this.winDetails.jackpotWins.forEach(jp => {\n      this._handleMultipliers({\n        [FEATURES.LOCKED_TILES]: lastSpinData[FEATURES.LOCKED_TILES],\n        type: jp.type\n      }, FEATURES.LOCKED_TILES);\n\n      this.winDetails.multipliers = this._removeMultipliers(jpTiles, jp.type);\n    });\n  }\n\n  _removeMultipliers(jpTiles, type) {\n    return this.winDetails.multipliers.filter(mplr => {\n      return !(jpTiles.some(jpTile => jpTile.reel === mplr.reel && jpTile.index === mplr.index) && type === mplr.type);\n    });\n  }\n}\n\nmodule.exports = LondonTubeSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nconst MAX_LEVEL = 3;\n\nclass LostRelics2SlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers = [\n      {name: 'lockedTiles', cb: this._handleFeature},\n      {name: 'randomWilds', cb: this._handleFeature},\n    ];\n  }\n\n  _beforeParseOperations(data) {\n    super._beforeParseOperations(data);\n\n    if (!data.game.jackpotTiles) return;\n    const { jackpotTiles, level } = data.game;\n\n    jackpotTiles.forEach(jp => {\n      const levelDiff = MAX_LEVEL - level;\n      jp.index -= levelDiff;\n      jp.reel -= levelDiff;\n    });\n\n  }\n\n  _afterParseOperations(data) {\n    super._afterParseOperations(data);\n\n    data.game.winLines = this._parseWinLines(data.game);\n    data.game.reels = this._parseReels(data.game);\n  }\n\n  _cloneReels() {\n    const { level, reels } = this.data.game;\n\n    return this._parseReels({ reels: super._cloneReels(reels), level: level });\n  }\n\n  _parseReels(data) {\n    const { reels, level } = data;\n\n    return this._parseReelsForLevel(reels, level);\n  }\n\n  _parseWinLines(data) {\n    const { winLines, level } = data;\n\n    winLines.forEach(winLine => {\n      winLine.tiles = this._parseReelsForLevel(winLine.tiles, level);\n    });\n\n    return winLines;\n  }\n\n  _parseReelsForLevel(reels, level) {\n    const startFrom = MAX_LEVEL - level;\n    const stopAt = (reels.length - 1) - startFrom;\n\n    return reels.reduce((acc, reel, reelIndex) => {\n      if (reelIndex < startFrom || reelIndex > stopAt) return acc;\n\n      acc.push(reel.reduce((indexes, id, index) => {\n        if (index < startFrom || index > stopAt) return indexes;\n\n        return indexes.concat(id);\n      }, []));\n\n      return acc;\n    }, []);\n  }\n\n  _flattenFreeSpins(freeSpins, result) {\n    super._flattenFreeSpins(freeSpins, result);\n\n    freeSpins.forEach(freeSpinData => {\n      freeSpinData.reels = this._parseReels(freeSpinData);\n      freeSpinData.winLines = this._parseWinLines(freeSpinData);\n    });\n  }\n}\n\nmodule.exports = LostRelics2SlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * LuckyDevilParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n * \n * @class\n * @extends {DopSlotParser}\n */\nclass LuckyDevilParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers.unshift({ name: 'fatMysterySwap', cb: this._handleFeature });\n\t\tthis.featureHandlers.unshift({ name: 'rainingMystery', cb: this._handleFeature });\n\t}\n}\n\nmodule.exports = LuckyDevilParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * LuckyMrGreenParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n * \n * @class\n * @extends {DopSlotParser}\n */\nclass LuckyMrGreenParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers.unshift({\n\t\t\tname: 'actOfGenerosity',\n\t\t\tcb: this._handleactOfGenerosity\n\t\t});\n\t}\n\n\t_handleactOfGenerosity(data, featureName) {\n\t\tlet reels = data.reels;\n\t\tlet raogData = data[featureName][0];\n\n\t\treels[raogData.reel][raogData.index] = raogData.toTile;\n\t}\n\n}\n\nmodule.exports = LuckyMrGreenParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass LuckyOktoberfestSlotParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers = [\n\t\t\t{ name: 'swapTiles', cb: this._handleSwapTiles },\n\t\t\t{ name: 'lockedTiles', cb: this._handleFeature },\n\t\t];\n\t}\n\n\t_handleSwapTiles(data) {\n\t\tvar reelsData = data.swapTiles.map(tile => {\n\t\t\ttile.toTile = tile.tileId;\n\t\t\treturn tile;\n\t\t});\n\n\t\tthis._applyReelsModifier(reelsData, data.reels);\n\t}\n}\n\nmodule.exports = LuckyOktoberfestSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* LunaFortunaParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n* \n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n* \n* After-parse logic can be added in the method _afterParseOperations(data).\n* \n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass LunaFortunaParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\n\t\t/**\n\t\t * NOTE: This game can have vertical winLines and uses cluster config for their reveal. \n\t\t */\n\t\tthis.featureHandlers.push({ name: 'loveSwap', cb: this._handleFeature });\n\t\tthis.featureHandlers.push({ name: 'randomWilds', cb: this._handleRandomWilds });\n\t\tthis.featureHandlers = this.featureHandlers.filter(handler => handler.name !== 'swapTiles');\n\t}\n\n\t_handleRandomWilds(data, featureName) {\n\t\tthis._moveTile(data[featureName], data.reels);\n\t}\n\n\t_moveTile(feature, reels) {\n\t\tfeature.forEach((tile) => {\n\t\t\tconst movedTile = tile.to;\n\t\t\treels[tile.reel][tile.index] = 0;\n\t\t\treels[movedTile.reel][movedTile.index] = tile.tileId;\n\t\t});\n\t}\n\n}\n\nmodule.exports = LunaFortunaParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nconst FEATURES = {\n  RANDOM_WILDS: 'randomWilds',\n  LOCKED_TILES: 'lockedTiles',\n};\n\n/**\n* MagicLabSlotParser. Handles parsing game specific features.*\n* @class\n* @extends {DopSlotParser}\n*/\nclass MagicLabSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers.push({ name: FEATURES.RANDOM_WILDS, cb: this._handleMplr });\n    this.featureHandlers.push({ name: FEATURES.LOCKED_TILES, cb: this._handleMplr });\n  }\n\n  _handleMplr(data, featureName) {\n    const feature = data[featureName];\n    const reels = data.reels;\n\n    feature.forEach(data => {\n      const { tileId, reel, index } = data;\n\n      if (reels[reel] && reels[reel][index]) {\n        reels[reel][index] = [ `${tileId}`, ...this._getMultiplierAssetId(data) ];\n      }\n    }); \n  }\n\n  _getMultiplierAssetId(tileOnePos) {\n    const { multiplier = 1 } = tileOnePos;\n    if (multiplier === 1) return [];\n\n    // So we have 4 type assets for multiplier, because mxMultiplier: x250 (center, first, second and third)\n    // 1. When we have multiplier <=9. Example: multiplier =x2 => we use asset: img_tile_multiplier_2_0 ('2' is multiplier value and '0' is the center type)\n    // 2. When multiplier is greater than 9.\n    // Example: multiplier = x453. We have assets for each number. Asset for 'x4', asset for '5' and asset for '3'\n    // [img_tile_multiplier_4_1 , img_tile_multiplier_5_2, img_tile_multiplier_3_3]\n    const multiplierValues = String(multiplier).split(\"\").map((num)=> Number(num)) // convert multiplier value to array\n    if (!multiplierValues.length) return;\n\n    if (multiplierValues.length === 1) {\n      return multiplierValues.map((value, i) => { // Example:  ['_multiplier_2_0']; -> [type_multiplier_position]\n        return `_multiplier_${value}_${i}` // '0' is central position\n      });\n    } else {\n      return multiplierValues.map((value, i) => { // Example: ['_multiplier_2_1', '_multiplier_2_2', '_multiplier_2_3']; -> [type_multiplier_position, type_multiplier_position]\n        return `_multiplier_${value}_${i+1}` // '1', '2' and '3' are the first, second and third symbol from the target value\n      });\n    }\n  }\n}\n\nmodule.exports = MagicLabSlotParser;","const DopSlotParser = require('../DopSlotParser');\nconst FAT_TILES_IDS = [15, 16, 17, 18, 19];\nconst TRANSPARENT_POS_ID = 0;\nconst EMPTY_POS_ID = 20;\nconst JP_TILE = 100;\n\n/**\n* MagicPowersMegaWaysSlotParser. Handles parsing game specific features.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass MagicPowersMegaWaysSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers = [\n      {name: 'randomWilds', cb: this._handleFeature},\n      {name: 'fatTiles', cb: this._handleMultipliers},\n      {name: 'swapFatTiles', cb: this._handleFeature},\n      {name: 'swapFatTiles', cb: this._handleMultipliers},\n    ];\n  }\n\n  _freeSpinsBeforeParseOperations(data) {\n    super._freeSpinsBeforeParseOperations(data);\n    this._replaceAreaUnderFT(data);\n  }\n\n  _beforeParseOperations(data) {\n    this._replaceAreaUnderFT(data.game);\n  }\n\n  /**\n   * @description Takes care of which multipliers in the JP screen are displayed and which are not.\n   * @override\n   */\n  _afterParseOperations(data) {\n    const gameData = data.game;\n    const jpTiles = gameData.jackpotTiles;\n    const lastSpinData = this._getLastSpinData(this.winDetails, gameData);\n\n    this.winDetails.jackpotWins.forEach(jp => {\n      this._handleMultipliers({ fatTiles: lastSpinData.fatTiles, type: jp.type }, 'fatTiles');\n      this._handleMultipliers({ swapFatTiles: lastSpinData.swapFatTiles, type: jp.type }, 'swapFatTiles');\n\n      this.winDetails.multipliers = this._removeMultipliers(jpTiles, jp.type)\n    });\n  }\n\n  _removeMultipliers(jpTiles, type) {\n    return this.winDetails.multipliers.filter(mplr => {\n      return !(jpTiles.some(jpTile => jpTile.reel === mplr.reel) && type === mplr.type)\n    });\n  }\n\n  _replaceAreaUnderFT(data) {\n    if (!data.reels) return;\n\n    const reels = data.reels;\n\n    return data.reels = reels.map(reel => {\n      if (reel.some(id => FAT_TILES_IDS.includes(id))) {\n        return reel.map(id => {\n          if (id !== TRANSPARENT_POS_ID) return id;\n          return EMPTY_POS_ID;\n        });\n      }\n\n      return reel;\n    });\n  }\n\n  /**\n   * @description FTs are not assembled from several pieces of tiles, but are one whole asset.\n   * Therefore, if a JP symbol is dropped, we must replace the FT with the id of the JP tile.\n   * @override\n   */\n  _handleJackpotTiles(jackpotTiles, reels) {\n    if(!jackpotTiles) return;\n\n    jackpotTiles.forEach(jpTile => {\n      const { toTile, tileId, tile, reel, index } = jpTile;\n\n      let id = JP_TILE;\n\n      if (toTile) id = toTile;\n      if (tileId) id = tileId;\n      if (tile) id = tile;\n\n      if (reels[reel] && reels[reel][index] !== 'undefined') {\n        if (reels[reel].some(id => FAT_TILES_IDS.includes(id))) {\n          for (let i = 0; i < reels[reel].length; i++) {\n            reels[reel][i] = i === 0 ? id : TRANSPARENT_POS_ID;\n          }\n        } else {\n          reels[reel][index] = id;\n        }\n      }\n    });\n  }\n}\n\nmodule.exports = MagicPowersMegaWaysSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* MajesticMysteriesPowerReelsParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n*\n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n*\n* After-parse logic can be added in the method _afterParseOperations(data).\n*\n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass MajesticMysteriesPowerReelsParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers = [\n      { name: 'swapTiles', cb: this._handleFeature }\n    ];\n\n  }\n}\n\nmodule.exports = MajesticMysteriesPowerReelsParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * MasqueradeParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n *\n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n *\n * After-parse logic can be added in the method _afterParseOperations(data).\n *\n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n *\n * @class\n * @extends {DopSlotParser}\n */\nclass MasqueradeParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers.unshift({\n\t\t\tname: 'swapMasks',\n\t\t\tcb: this._handleFeature\n\t\t});\n\t}\n\n\t_initReels (data) {\n\t\tsuper._initReels(data);\n\n\t\tlet reels = data.reels;\n\t\tlet length = reels.length;\n\t\tlet tilesCount = 0;\n\n\t\tconsole.log(data.reels);\n\n\t\tfor (let i = 0; i < length; i++) {\n\n\t\t\tif (i === 0 || i === 4) {\n\t\t\t\ttilesCount = 2;\n\t\t\t} else if (i === 1 || i === 3) {\n\t\t\t\ttilesCount = 1;\n\t\t\t} else {\n\t\t\t\ttilesCount = 0;\n\t\t\t}\n\n\t\t\tif (!tilesCount) continue;\n\n\t\t\tfor (let j = 0; j < tilesCount; j++) {\n\t\t\t\treels[i][reels[i].length - j - 1] = 0;\n\t\t\t}\n\t\t}\n\n\t\tdata.reels = reels;\n\t}\n}\n\nmodule.exports = MasqueradeParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * MayanGodsParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n * \n * @class\n * @extends {DopSlotParser}\n */\nclass MayanGodsParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers = [\n\t\t\t{ name: 'mayanKingTiles', cb: this._handleFeatureTiles },\n\t\t\t{ name: 'eclipseTiles', cb: this._handleFeatureTiles }\n\t\t];\n\t}\n\n\t_handleFeatureTiles (data, featureName) {\n\t\tdata[featureName].forEach((featData) => this._applyReelsModifier(featData, data.reels));\n\t}\n\n}\n\nmodule.exports = MayanGodsParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * MayhemParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n *\n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n *\n * After-parse logic can be added in the method _afterParseOperations(data).\n *\n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n *\n * @class\n * @extends {DopSlotParser}\n */\n\nclass MayhemSlotParser extends DopSlotParser {\n\n  constructor() {\n    super();\n\n    this.featureHandlers = [\n      { name: 'fatTiles', cb: this._handleFatTiles }\n    ];\n  }\n}\n\nmodule.exports = MayhemSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * MegaDragonParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n * \n * @class\n * @extends {DopSlotParser}\n */\nclass MegaDragonParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers.forEach((handler) => {\n\t\t\tif (handler.name === 'swapTiles') handler.cb = this._handleSwapTiles;\n\t\t});\n\t\tthis.featureHandlers.unshift({ name: 'swapWilds', cb: this._handleSwapTiles });\n\t}\n\n\t_handleSwapTiles(data, featName) {\n\t\tconst flatData = [].concat.apply([], data[featName]); // Flatten Data\n\t\tconst featData = flatData.filter((item) => {\n\t\t\treturn item.toTile !== null;\n\t\t});\n\n\t\tthis._applyReelsModifier(featData, data.reels);\n\t}\n\n\t_handleFatTiles(data, featName) {\n\t\tconst reels = data.reels;\n\t\tconst fatTilesData = data[featName];\n\n\t\tfatTilesData.forEach((item) => this._alterReelsTiles(item, reels));\n\t}\n\n\t_alterReelsTiles(item, reels) {\n\t\tconst { reel, index } = this._getStartReelIndex(item);\n\n\t\tfor (let i = 0; i < item.width; i++) {\n\t\t\tfor (let j = 0; j < item.height; j++) {\n\t\t\t\treels[reel + i][index + j] = item.tileId;\n\t\t\t}\n\t\t}\n\t}\n\n\t_getStartReelIndex(data) {\n\t\treturn {\n\t\t\treel: Math.min(data.reel, data.to.reel),\n\t\t\tindex: Math.min(data.targetPos, data.to.targetPos),\n\t\t};\n\t}\n}\n\nmodule.exports = MegaDragonParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass MegaPyramidSlotParser extends DopSlotParser {\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.featureHandlers.push({ name: 'cloningTiles', cb: this._handleCloningTiles });\n\t\tthis.featureHandlers.push({ name: 'lockedTiles', cb: this._handleFeature });\n\t}\n\n\t_handleCloningTiles(data) {\n\t\tdata.cloningTiles.forEach(tiles => {\n\t\t\ttiles.forEach(cloningData => {\n\t\t\t\tthis._applyReelsModifier(cloningData, data.reels);\n\t\t\t});\n\t\t});\n\t}\n}\n\nmodule.exports = MegaPyramidSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nconst FEATURES = {\n  RANDOM_WILDS: 'randomWilds',\n};\n/**\n*\n* @class MermaidsSlotParser\n* @extends {DopSlotParser}\n*/\nclass MermaidsSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers.push({ name: FEATURES.RANDOM_WILDS, cb: this._handleFeature });\n  }\n}\n\nmodule.exports = MermaidsSlotParser;","const DopSlotParser = require('../DopSlotParser');\nconst Config = require('../../../../config/Config');\n\n/**\n * MidasGoldSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n * \n * @class\n * @extends {DopSlotParser}\n */\nclass MidasGoldSlotParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t// { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\n        // this.featureHandlers = this.featureHandlers.concat([\n        //     {name: 'respin', cb: this._handleRespins}\n        // ]);\n    }\n\n    /**\n     * convert to ways\n     * @param gameId\n     * @param data\n     * @returns {{game: Object}}\n     */\n    parse(gameId, data) {\n\n\t    if (data.game.winLines.length) data.game.winLines = this._toWays(gameId, data.game);\n        if (data.game.respin && data.game.respin.length) {\n            let lastRespin = data.game.respin.length - 1;\n            data.game.respin[lastRespin].winLines = this._toWays(gameId, data.game.respin[lastRespin]);\n        }\n\n        return super.parse(gameId, data);\n    }\n\n    _toWays(gameId, spinData) {\n        // Midas can have win lines from only one symbol per spin\n        var newWinLines = [\n            {\n                amount: spinData.win.lines,\n                index: 0,\n                length: spinData.winLines[0].length,\n                ways: spinData.winLines.length,\n                multiplier: 1, // just for consistency\n                start: 0,\n                tile: spinData.winLines[0].tile,\n                tiles: [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]\n            }\n        ];\n\n        _.each(spinData.winLines, (winLine) => {\n            _.times(winLine.length, (reelIndex) => {\n                _.each(spinData.reelsBuffer[reelIndex][1], (tile, i) => {\n                    if (tile === winLine.tile) newWinLines[0].tiles[reelIndex][i] = 1;\n                }, this);\n            });\n        });\n\n        return newWinLines;\n    }\n\n    // _handleRespins(data) {\n\t //    let hide0s = Config.respinWinEndOnly.indexOf(this.gameId) !== -1;\n    //     data.respin.forEach((spin) => {\n    //         spin.amount = spin.win.total;\n    //         spin.type = this.freeSpinsCount++;\n    //         spin.hide0s = hide0s;\n    //     });\n    //     this.winDetails.respin = this.winDetails.respins = data.respin;\n    // }\n\n}\n\nmodule.exports = MidasGoldSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\nconst WILD_TILES_IDS = {\n  1: 14,\n  2: 15,\n  3: 16,\n  5: 17,\n  10: 18,\n};\nconst SHAKER_TILE = 12;\n\n/**\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass MidnightRomanceSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers.push({name: 'randomWilds', cb: this._handleSwapTiles});\n  }\n\n  /**\n   * @description Handles the swapping of tiles in specified reels with random small wilds, based on multiplier.\n   * @param {Object} data - An object containing information about the random wild tiles and the current state of the reels.\n   * @property {Array} randomWilds - An array of objects representing random wild tiles to be swapped.\n   * @property {number} reel - The index of the reel where the random wild tile is located.\n   * @property {number} multiplier - The multiplier associated with the random wild tile.\n   * @property {Array} reels - A 2D array representing the current state of the game reels.\n   */\n  _handleSwapTiles(data) {\n    const wildGlass = data.wildType.glass;\n    const randomWilds = data.randomWilds;\n    const reels = data.reels;\n\n    if (wildGlass === 'low') {\n      randomWilds.forEach(shakerTile => {\n        const { reel, multiplier } = shakerTile;\n        const id = SHAKER_TILE;\n\n          for (let i = 0; i < reels[reel].length; i++) {\n            reels[reel][i] ===  id ? reels[reel][i] = WILD_TILES_IDS[`${multiplier}`] : reels[reel][i];\n          }\n      });\n    }\n  }\n}\n\nmodule.exports = MidnightRomanceSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* MineBlownSlotParser. Handles parsing game specific features.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass MineBlownSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers.push({name: 'tnt', cb: this._handleTNT});\n    this.featureHandlers.push({name: 'dynamite', cb: this._handleFeature});\n  }\n\n  /**\n   * Handler for the 'TNT' feature\n   * @private\n   * @param  {Object} data Game data, contains\n   * screen reels and every game feature\n   */\n  _handleTNT(data) {\n    let reels = data.reels;\n    let positionsData = data.tnt.flatMap(tnt=>tnt.positions);\n    this._applyReelsModifier(positionsData, reels);\n  };\n\n  /**\n    * @overrides - uses bonus.name instead of spinMode for featureBuyName\n    * @return {Object} The parsed data\n    */\n  _generateOutput() {\n    const output = super._generateOutput();\n    output.transactions.featureBuyName = this.data.game.bonus && this.data.game.bonus.name || this.data.game.spinMode;\n    return output;\n  }\n}\n\nmodule.exports = MineBlownSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* MixAndMatchSlotParser. Handles parsing game specific features.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass MixAndMatchSlotParser extends DopSlotParser {\n  _handleWins(data) {\n    super._handleWins(data);\n\n    if (data.game.choices && data.game.winLines) {\n      this.winDetails.initialLinesWin = data.game.pendingWin.total;\n      this.winDetails.winLines = data.game.winLines;\n    }\n\n    // After accepting the exchange bonus, the last screen of the free spins is in a different response, than the one in which the jackpot was won.\n    // Here we collect information from both responses to properly visualize the screen on which we win the jackpot.\n    const mainData = this.data.responses[0];\n\n    if (data.game.gameData && mainData.jackpots && mainData.jackpots.win > 0) {\n      _.each(mainData.jackpots.pots, pot => {\n        const jackpot = this.winDetails.jackpotWins.find(jackpot => pot.id === jackpot.type);\n\n        if (jackpot) {\n          const lastSpinData = this._getLastSpinData(this.winDetails, data.game.gameData);\n\n          jackpot.reels = this._cloneReels(lastSpinData.reels);\n          this._handleJackpotTiles(mainData.game.jackpotTiles, jackpot.reels);\n        }\n      });\n    }\n  }\n\n  _addOtherWins(data, type) {\n    if (data.choices) this.otherWins.instantWin = [];\n    super._addOtherWins(data, type);\n  }\n\n  _roundingCorrection(data) {\n    if (!data.game.choices) return super._roundingCorrection(data);\n\n    const hasWheel = this._hasFeature(data.game, \"WheelBonus\");\n    const selectedChoice = this._getSelectedChoice(data);\n\n    if (!selectedChoice || selectedChoice === 'collect') return;\n\n    this.winDetails.otherWins.push({\n      type: hasWheel ? 'gamble' : 'winExchange',\n      amount: - data.game[ hasWheel ? 'wheelBonus' : 'winExchangeBonus' ].bonus.price.amount\n    });\n  }\n\n  _getSelectedChoice(data) {\n    return data.responses.length > 1 && data.responses[1].game && data.responses[1].game.choices && data.responses[1].game.choices.selected;\n  }\n\n  _hasFeature(data, feature) {\n    return data &&\n      data.activator &&\n      data.activator.features.length > 1 &&\n      data.activator.features.some(f => f === feature);\n  }\n}\n\nmodule.exports = MixAndMatchSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass MonstersUnchainedSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers.push({ name: 'randomWilds', cb: this._handleFeature });\n  }\n}\n\nmodule.exports = MonstersUnchainedSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nconst FEATURES = {\n  LOCKED_TILES: 'lockedTiles',\n  MOON_SYMBOLS: 'moonSymbols',\n};\n\nclass MoonSpellSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n    this.featureHandlers = this.featureHandlers.filter(f => f.name !== FEATURES.LOCKED_TILES);\n\n    this.featureHandlers.push({name: FEATURES.LOCKED_TILES, cb: this._handleMultipliers});\n    this.featureHandlers.push({name: FEATURES.MOON_SYMBOLS, cb: this._handleMultipliers});\n  }\n\n   /**\n   * @description Takes care of which multipliers and lockedTiles in the JP screen are displayed and which are not.\n   * @override\n   */\n   _afterParseOperations(data) {\n    const gameData = data.game;\n    const jpTiles = gameData.jackpotTiles;\n    const lastSpinData = this._getLastSpinData(this.winDetails, gameData);\n\n    Object.values(FEATURES).forEach(featureName => {\n      this.winDetails.jackpotWins.forEach(jp => {\n        this._handleMultipliers({\n          [featureName]: lastSpinData[featureName],\n          type: jp.type\n        }, featureName);\n\n        this.winDetails.multipliers = this._removeMultipliers(jpTiles, jp.type);\n      });\n    })\n  }\n\n  _removeMultipliers(jpTiles, type) {\n    return this.winDetails.multipliers.filter(mplr => {\n      return !(jpTiles.some(jpTile => jpTile.reel === mplr.reel && jpTile.index === mplr.index) && type === mplr.type);\n    });\n  }\n}\n\nmodule.exports = MoonSpellSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass MsRobinHoodSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n    this.featureHandlers = [\n      { name: 'swapTiles', cb: this._handleFeature },\n      { name: 'cloningTiles', cb: this._handleTileSplit },\n      { name: 'fatTiles', cb: this._handleFatTiles },\n    ];\n  }\n\n  _handleFatTiles(data, featureName) {\n    super._handleFatTiles(data, featureName);\n\n    const reels = data.reels;\n    const fatTilesData = data[featureName];\n\n    fatTilesData.forEach((tile) => {\n      const { index: startTileIndex, reel, height, width, tileId } = tile.to;\n      const endTileIndex = startTileIndex + height;\n      const gridWidthIndex = 0;\n\n      if (startTileIndex !== 0 ) return; // show only visible tiles\n\n      for (let tileIndex = startTileIndex; tileIndex < endTileIndex; tileIndex++) {\n        reels[reel][tileIndex] = `${tileId}_${tile.width}x${tile.height}_${gridWidthIndex}x${tileIndex}`;\n      }\n    });\n  }\n\n  _handleTileSplit({ reels, bufferFinal }) {\n    const buffer = bufferFinal;\n\n    for (let reelIndex = 0; reelIndex < buffer.length; reelIndex++) {\n      const tiles = buffer[reelIndex][1];\n      tiles.forEach((tile, index) => {\n        reels[reelIndex][index] = tile;\n      });\n    }\n  }\n}\n\nmodule.exports = MsRobinHoodSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass MultiplierRichesSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers.forEach(handler => {\n      if (handler.name === 'lockedTiles') handler.cb = this._handleLockedTiles;\n    });\n  }\n\n  /**\n  * Handler for the 'Nudge' feature\n  * @private\n  * @param  {Object} data Game data, contains\n  * screen reels and every game feature\n  * @param {Array} data.reelsBuffer reels buffer array\n  * @param {Array} data.nudge Nudge modification object\n  * @param {Array} data.nudgeBonus Nudge modification object\n  * @override is needed because of stateful multipliers\n  */\n  _handleNudge(data, featureName = 'nudge') {\n    let nudgeData = data[featureName];\n    let reels = data.reels;\n\n    nudgeData.forEach((nudge) => {\n      const buffer = nudge.buffer[1];\n      const direction = nudge.dir === 1 ? 1 : -1;\n      const distance = nudge.distance;\n      const multiplierId = distance - (distance * direction);\n\n      buffer[multiplierId] = 0;\n\n      reels[nudge.index] = nudge.buffer[1];\n    });\n  }\n\n  /**\n   * Handler for the 'Locked Tiles' feature\n   * @private\n   * @param  {Object} data Game data, contains\n   * screen reels and every game feature\n   * @override is needed because in next spin, after nudge with locked tile in previous spin,\n   * there are consecutive 1 indexes in buffer as result of multiplier collect.\n   * Tile assets with id 1 are flat and this affect lines placement,\n   * so tile with same index as collected multiplier must be replaced with id 0 to fix line's position.\n   */\n  _handleLockedTiles(data, featureName) {\n    let reels = data.reels;\n    let lockedTilesData = data[featureName];\n\n    lockedTilesData.forEach((tile) => {\n      reels[tile.reel][tile.index] = tile.tile;\n      this._clearConsecutiveIndexes(reels[tile.reel]);\n    });\n  }\n\n  _clearConsecutiveIndexes(reel) {\n    const lastIndex = reel.length - 1;\n\n    if (reel[0] === 1 && reel[0] === reel[1]) reel[0] = 0;\n    if (reel[lastIndex] === 1 && reel[lastIndex - 1] === reel[lastIndex]) reel[lastIndex] = 0;\n  }\n}\n\nmodule.exports = MultiplierRichesSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nconst PATCH_TYPE_IDS = {\n  0: '_patch_blue',\n  1: '_patch_purple',\n  2: '_patch_yellow',\n}\n\nconst FEATURES = {\n  PATCHES: 'patches',\n};\n\n/**\n* @class\n* @extends {DopSlotParser}\n*/\nclass MummyMegaWaysSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers.push({ name: FEATURES.PATCHES, cb: this._replaceAreaOverTiles });\n    this.featureHandlers.push({ name: 'randomWilds', cb: this._handleRandomWilds });\n  }\n\n  _handleRandomWilds(data, featureName) {\n    const reels = data.reels;\n    let randomWildsData = data[featureName];\n\n    randomWildsData.forEach(tile => {\n      if (tile.positions) {\n        const allWilds = [ tile, ...tile.positions];\n\n        allWilds.forEach(wild => {\n          reels[wild.reel][wild.index] = wild.tileId;\n        });\n      }\n    });\n  }\n\n  _replaceAreaOverTiles(data) {\n    if (!data.reels) return;\n\n    const { reels, [FEATURES.PATCHES]: patches } = data;\n    data.reels = reels.map((reel, reelIndex) => this._getReelData(reel, reelIndex, patches) );\n\n    return data.reels;\n  }\n\n  _getReelData(reelData = [], reelIndex, patches = []) {\n    return reelData.map((id, tileIndex, arr) => {\n      const tileOnePos = patches.find(tile => tile.index === tileIndex && tile.reel === reelIndex);\n\n      if (tileOnePos) {\n        return [`${id}`, PATCH_TYPE_IDS[tileOnePos.type] ];\n      } else {\n        return id;\n      }\n    });\n  }\n}\n\nmodule.exports = MummyMegaWaysSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * MysteryFruitSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n * \n * @class\n * @extends {DopSlotParser}\n */\nclass MysteryFruitSlotParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.otherWins.bonus.push('wheelBonus');\n\n        this.featureHandlers.unshift({ name: 'cloningTile', cb: this._handleCloningTile });\n    }\n\n    /**\n     * Handler for the 'Cloning Tile/Mystery Fruit' feature\n     * @private\n     * @param {Object} data Game data, contains\n     * screen reels and every game feature\n     * @param {Array} data.mysterySwap Array of tile modifications\n     * @param {Array} data.reels Screen reels state\n     */\n\n    _handleCloningTile(data) {\n        let reels = data.reels;\n        let tileSwaps = data.mysterySwap;\n\n       tileSwaps.forEach((tile) => {\n            if (reels[tile.reel] && reels[tile.reel][tile.index]) { // it could be outside the reels\n                reels[tile.reel][tile.index] = tile.toTile;\n            }\n        });\n    }\n\n}\n\nmodule.exports = MysteryFruitSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* MysteryReelsDeluxeSlotParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n*\n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n*\n* After-parse logic can be added in the method _afterParseOperations(data).\n*\n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass MysteryReelsDeluxeSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.otherWins.bonus.push('wheelBonus');\n\n    this.featureHandlers.unshift({ name: 'mystery', cb: this._handleMysteryTiles });\n  }\n\n  _handleMysteryTiles(data) {\n    let reels = data.reels;\n    let tileSwaps = data.mystery;\n\n    tileSwaps.forEach((tile) => {\n      if (reels[tile.reel] && reels[tile.reel][tile.index]) {\n        reels[tile.reel][tile.index] = tile.to.tileId;\n      }\n    });\n  }\n}\n\nmodule.exports = MysteryReelsDeluxeSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * MysteryReelsMegaWaysParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n *\n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n *\n * After-parse logic can be added in the method _afterParseOperations(data).\n *\n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n *\n * @class\n * @extends {DopSlotParser}\n */\nclass MysteryReelsMegaWaysParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers.unshift({\n\t\t\tname: 'cloningTile',\n\t\t\tcb: this._handleCloningTile\n\t\t});\n\t}\n\n\t_handleCloningTile(data, featureName = 'cloningTile') {\n\t\tconst reels = data.reels;\n\t\tconst featData = [].concat.apply([], data[featureName]); // Used to flatten the data.\n\n\t\tconsole.log('Flatten >>> ', featData);\n\n\t\tfeatData.forEach((item) => {\n\t\t\treels[item.reel][item.index] = item.toTile;\n\t\t});\n\t}\n\n}\n\nmodule.exports = MysteryReelsMegaWaysParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass MysticWheelSlotParser extends DopSlotParser {\n    constructor() {\n\t\t\t\tsuper();\n\n\t\t\t\tthis.otherWins.bonus.push('wheelBonus');\n\t\t}\n}\n\nmodule.exports = MysticWheelSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* NarcosMexicoParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n*\n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n*\n* After-parse logic can be added in the method _afterParseOperations(data).\n*\n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass NarcosMexicoParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers = [\n      { name: 'randomWilds', cb: this._handleFeature },\n      { name: 'fatTiles', cb: this._handleFatTiles },\n      { name: 'lockedTiles', cb: this._handleFeature },\n    ];\n  }\n\n  _handleWins(data) {\n    super._handleWins(data);\n\n    if (data.game.choices && data.game.winLines) {\n      this.winDetails.initialLinesWin = data.game.pendingWin.total;\n\n      data.game.winLines.forEach((line) => {\n        line.type = line.index + 1;\n      });\n\n      this.winDetails.winLines = data.game.winLines;\n    }\n\n  }\n\n  _addOtherWins(data, type) {\n    if (data.choices) {\n      this.otherWins.instantWin = [];\n\n      const hasWheel = this._hasFeature(data, \"DoubleCash\");\n      if (hasWheel && data.pendingWin) data.win = data.pendingWin;\n    }\n\n    super._addOtherWins(data, type);\n  }\n\n  _handleFatTiles(data, featureName) {\n    data[featureName] = this._alterIndex(data[featureName]);\n\n    super._handleFatTiles(data, featureName);\n  }\n\n  _alterIndex(data) {\n    const zonesToTiles = { '6': 12, '7': 13, '8': 14, '9': 15 };\n\n    return data.map((item) => {\n      return Object.assign({}, item, {\n        targetPos: item.index,\n        tileId: zonesToTiles[item.tileId]\n      });\n    });\n  }\n\n  _roundingCorrection(data) {\n    if (!data.game.choices) {\n      super._roundingCorrection(data);\n      return;\n    }\n\n    const selectedChoice = this._getSelectedChoice(data);\n    if (selectedChoice === 'collect') return;\n\n    const hasWheel = this._hasFeature(data.game, \"WheelBonus\");\n    const hasWinExchange = this._hasFeature(data.game, \"WinExchangeBonus\");\n\n    if (hasWheel) {\n      const modifier = selectedChoice === 'gamble' ? -1 : 1;\n      const bonusAmount = data.game.pendingWin.total * modifier;\n      const bonus = this.winDetails.totalWin === bonusAmount ? 0 : bonusAmount;\n\n      this.winDetails.otherWins.push({ type: 'gamble', amount: bonus });\n    }\n\n    if (hasWinExchange) {\n      const { freeSpinsPrice } = data.game.winExchangeBonus;\n\n      this.winDetails.otherWins.push({ type: 'winExchange', amount: -freeSpinsPrice.amount });\n    }\n  }\n\n  _getSelectedChoice(data) {\n    return data.responses.length > 1 && data.responses[1].game && data.responses[1].game.choices && data.responses[1].game.choices.selected;\n  }\n\n  _hasFeature(data, feature) {\n    return data &&\n      data.activator &&\n      data.activator.features.length > 1 &&\n      data.activator.features.some(f => f === feature);\n  }\n}\n\nmodule.exports = NarcosMexicoParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* NeonLinksParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n* \n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n* \n* After-parse logic can be added in the method _afterParseOperations(data).\n* \n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass NeonLinksParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers.unshift({ name: 'swapFatTiles', cb: this._handleFatTiles });\n\t}\n}\n\nmodule.exports = NeonLinksParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* OwnTheZoneParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n* \n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n* \n* After-parse logic can be added in the method _afterParseOperations(data).\n* \n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass NightRollerSlotParser extends DopSlotParser {\n\tconstructor() {\n\t\tsuper();\n\t\tthis.featureHandlers.push({ name: 'randomWilds', cb: this._handleFeature });\n\t}\n}\n\nmodule.exports = NightRollerSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass NinjaWaysSlotParser extends DopSlotParser {\n\n    constructor() {\n        super();\n\n        this.featureHandlers.push({ name: 'randomScatters', cb: this._handleFeature });\n        this.featureHandlers.push({ name: 'randomRows', cb: this._handleRandomRandomRows });\n    }\n\n    _handleRandomRandomRows(data){\n        let reels = data.reels;\n\n        data.randomRows.forEach((sequenceArray) => {\n            sequenceArray.forEach((tileArray) => {\n                tileArray.forEach((tile) => {\n                    if (tile === undefined) return;\n\n                    reels[tile.reel][tile.index] = tile.toTile;\n                });    \n            });\n        });\n    }\n\n}\n\nmodule.exports = NinjaWaysSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* PaddyPowerGoldMegaWaysParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n* \n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n* \n* After-parse logic can be added in the method _afterParseOperations(data).\n* \n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass PaddyPowerGoldMegaWaysParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers.unshift({ name: 'luckyLine', cb: this._handleLuckyLine });\n\t\tthis.featureHandlers.unshift({ name: 'wildStacks', cb: this._handleWildStacks });\n\t\tthis.featureHandlers.unshift({ name: 'randomWilds', cb: this._handleFeature });\n\t}\n\n\t_handleLuckyLine(data, featName = 'luckyLine') {\n\t\tconst reels = data.reels;\n\t\tconst luckyLineData = data[featName];\n\n\t\tluckyLineData.forEach((item) => {\n\t\t\treels[item.reel][item.index] = item.tileId;\n\t\t});\n\t}\n\n\t_handleWildStacks(data, featName = 'wildStacks') {\n\t\tconst reels = data.reels;\n\t\tconst wildStacksData = data[featName];\n\n\t\tlet currentReel = null;\n\t\t\n\t\twildStacksData.forEach((stack) => {\n\t\t\tcurrentReel = reels[stack.reel];\n\t\t\tcurrentReel = currentReel.map((_, index) => {\n\t\t\t\treturn !index ? stack.tileId : 0;\n\t\t\t});\n\n\t\t\treels[stack.reel] = currentReel;\n\t\t\tcurrentReel = null;\n\t\t});\n\t}\n}\n\nmodule.exports = PaddyPowerGoldMegaWaysParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nconst FEATURES = {\n  SPECIAL_SYMBOL: 'specialSymbol',\n};\n\n/**\n* PandorasTreasureSlotParser. Handles parsing game specific features.\n *\n* @class\n* @extends {DopSlotParser}\n*/\nclass PandorasTreasureSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers.push({ name: FEATURES.SPECIAL_SYMBOL, cb: this._handleFeature });\n  }\n}\n\nmodule.exports = PandorasTreasureSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* PeggySweetsParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n*\n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n*\n* After-parse logic can be added in the method _afterParseOperations(data).\n*\n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass PeggySweetsParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers.push({ name: 'randomWilds', cb: this._handleFeature });\n    this.featureHandlers.push({ name: 'doubleTiles', cb: this._handleFeature });\n  }\n}\n\nmodule.exports = PeggySweetsParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass PersianFortuneParser extends DopSlotParser {\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.featureHandlers = this.featureHandlers.filter(handler => handler.name !== 'lockedTiles');\n\t}\n}\n\nmodule.exports = PersianFortuneParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass PiggyPiratesSlotParser extends DopSlotParser {\n\n    constructor() {\n        super();\n\n        this.featureHandlers.push({ name: 'movingTiles', cb: this._handleMovingTiles });\n    }\n\n    /**\n     * @description Handler for the 'movingTiles' feature\n     * @private\n     * @param  {Object} data Game data, contains\n     * TODO may be moved to base if used by another game\n     */\n    _handleMovingTiles (data, featureName) {\n        const reels = data.reels;\n        const tiles = data[featureName];\n        tiles.forEach((tile) => {\n            if (tile.to.reel < 0 || tile.to.reel > 5) return; // pig fell off screen\n            reels[tile.to.reel][tile.to.index] = tile.tileId;\n        });\n    }\n}\n\nmodule.exports = PiggyPiratesSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nconst MISS_PIG_ID = 12;\nconst FAT_TILE_MULTI_ASSEMBLE_THRESHOLD = 5; // fat tile assets for reel Index 5 and up are based on multiplier\nconst MAX_WIN_ACTIVATOR = 'MaxWin';\n\nclass PiggyRiches2MegaWaysSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers = [\n      { name: 'lockedTiles', cb: this._handleLockedTiles },\n      { name: 'fatTiles', cb: this._handleFatTiles },\n    ];\n  }\n\n    /**\n   * @override Custom handler\n   * used in FS the slotSize is constantly changing, we use the screenMask prop to trim the visible buffer\n   * multipliers of lockedTiles can vary from x1 to x20000 so we also update the reels data with assembled multipliers\n   * we also have special scatter ID that is different in normal and special game\n   */\n  _handleLockedTiles(data) {\n    const { screenMask = [], progress:{ current, next }, lockedTiles = [] } = data;\n    if (!lockedTiles.length) return;\n\n    const reels = data.reels;\n    let visibleRows = screenMask[0].filter(entry => entry != 0).length; // gets the visible part of the buffer\n    const hasMaxWin = data.activator && data.activator.features.some(feature => feature === MAX_WIN_ACTIVATOR)\n    const isAtFsEnd = current === next || hasMaxWin;\n\n    lockedTiles.forEach(locked => {\n      const { multiplier = 1, reel, index, tileId } = locked;\n      let latestMulti = multiplier;\n      if (locked.action && locked.action.length) latestMulti = locked.action[locked.action.length - 1].next;\n\n      const id = tileId === MISS_PIG_ID? `${tileId}_1`: tileId;\n      const multiplierAssetName = this._getMultiplierAssetNames(multiplier);\n      if (locked.spins || isAtFsEnd && multiplierAssetName) reels[reel][index] = !hasMaxWin ? [id, ...multiplierAssetName] : [id];\n    });\n\n    reels.forEach(subArray => subArray.splice(0, subArray.length - visibleRows)); // based on the visible part of the buffer remove excess\n  }\n\n  _getMultiplierAssetNames(multiplier = 1) {\n    // So we have 5 type assets for multiplier. (one, two...five digit)\n    // 1. When we have multiplier <=9. Example: multiplier =x2 => we use asset: img_tile_multiplier2_1 ('2' is multiplier value and '1' is the number of digits)\n    // 2. When multiplier is greater than 9. Example: multiplier = x45. We have assets for the first and second digits of the number =>\n    // [img_tile_multiplier4_2_1 , img_tile_multiplier5_2_2] ('4' and '5' are multiplier values, '2' shows that it is a 2 digit number, '1' and '2' are the 1st and 2nd digit of the number)\n\n    if (multiplier === 0) return [];\n    const multiplierValues = String(multiplier).split(\"\").map((num)=> Number(num)) // convert multiplier value to array\n    if (!multiplierValues.length) return [];\n\n    if (multiplierValues.length === 1) {\n      return multiplierValues.map((value, i) => { // Example:  ['2_1']; -> [multiplier_type]\n        return `_multiplier${value}_${i+1}`\n      });\n    } else {\n      return multiplierValues.map((value, i) => { // Example: ['2_2_1', '2_2_2']; -> [multiplier_type_position, multiplier_type_position]\n        return `_multiplier${value}_${multiplierValues.length}_${i+1}` // '1' and '2' are first and second digit\n      });\n    }\n  }\n\n   /**\n   * @override Custom handler fatTile can have multi ranging from 2 to 7\n   * the fatTile is split in 7 tiles 0 to 5 are all are static\n   * 5 and 6 are dynamic due to changing multipliers\n   */\n   _handleFatTiles(data, featureName) {\n    const mrPigFatTiles = data[featureName];\n    const reels = data.reels;\n\n    if (mrPigFatTiles.length) {\n      mrPigFatTiles.forEach(tile => {\n        const { reel, multiplier, tileId } = tile;\n        for (let tileIndex = 0; tileIndex < reels[reel].length; tileIndex++) {\n          if (tileIndex < FAT_TILE_MULTI_ASSEMBLE_THRESHOLD) reels[reel][tileIndex] = [`${tileId}_${tileIndex}`];\n          else reels[reel][tileIndex] = [`${tileId}_${tileIndex}_${multiplier}`];\n        }\n      });\n    }\n  }\n\n  /**\n  \t * @override\n     * GameDesign: at the end of FS if we have JP spawn, we return to the main game screen and show jackpots\n     * therefore instead of overriding wins or jp handlers\n     * we override _cloneReels since its base use is in relation to handling JPs,\n     * if we have FS we would simply clone the main buffer instead of the latest in FS\n     * and use this as the jackpot buffer\n  */\n  _cloneReels(reels) {\n    const gameData = this.data.game;\n    const { freeSpins = [] } = gameData;\n    return freeSpins.length ? gameData.reels.map(reel => _.clone(reel)) : reels.map(reel => _.clone(reel));\n\t}\n}\n\nmodule.exports = PiggyRiches2MegaWaysSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\nconst IDS_CHANGED_IN_FS = [1,2,3,4,5,6,7,8,9,10];\n\nclass PiratesPartySlotParser extends DopSlotParser {\n\t_freeSpinsAfterParseOperations(extraSpin){\n\t\tlet reelsBuffer = extraSpin.reelsBuffer;\n\t\tlet reels = [];\n\n\t\tfor (let i = 0; i < reelsBuffer.length; i++) {\n\t\t  reels[i] = reelsBuffer[i][1];\n\t\t  for(let j = 0; j < reels[i].length; j++)\n\t\t\tif(IDS_CHANGED_IN_FS.includes(reels[i][j]))\n\t\t\t  reels[i][j]=reels[i][j]+\"S\";\n\t\t}\n\t\textraSpin.reels = reels;\n\t}\n}\n\nmodule.exports = PiratesPartySlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * @class\n * @extends {DopSlotParser}\n */\nclass PiratesPlentyBattleForGoldSlotParser extends DopSlotParser {\n\n    constructor() {\n        super();\n\n        this.featureHandlers.unshift({ name: 'progress', cb: this._handleFirstRow });\n    }\n\n    /**\n     * First row is locked until enough progress is collected. Whether first row is unlocked can be determined based on game.progress.unlocked.\n     * We don't pop the first row buffer and replace with 0 instead, because otherwise win lines will be misplaced.\n     * @param {Object} data\n     * @param {String} featureName\n     * @private\n     */\n    _handleFirstRow(data, featureName) {\n        let reels = data.reels,\n            progress = data[featureName];\n\n        if(!progress.unlocked) {\n            reels = reels.map(reel => reel[0] = 0);\n        }\n    }\n}\n\nmodule.exports = PiratesPlentyBattleForGoldSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* PiratesPlentyMegaWaysParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n* \n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n* \n* After-parse logic can be added in the method _afterParseOperations(data).\n* \n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass PiratesPlentyMegaWaysParser extends DopSlotParser {\n\n  constructor(){\n    super();\n\n    this.featureHandlers.unshift({ name: 'progress', cb: this._handleFirstRow });\n  }\n\n  _initReels(data) {\n    super._initReels(data);\n\n    const horizontalReels = data.horizontalReels[0][1];\n    data.reels.forEach((reel, i) => reel[0] = horizontalReels[i]);\n  }\n\n  _handleFirstRow(data, featureName) {\n    let reels = data.reels;\n    let progress = data[featureName];\n\n    if(!progress.unlocked) reels.forEach(reel => reel[0] = 0);\n  }\n\n}\n\nmodule.exports = PiratesPlentyMegaWaysParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * @class\n * @extends {DopSlotParser}\n */\nclass PiratesPlentySlotParser extends DopSlotParser {\n\n    _afterParseOperations(data) {\n        super._afterParseOperations(data);\n        this._handleSixthReel(data.game);\n    }\n\n    _freeSpinsBeforeParseOperations(gameData) {\n        super._freeSpinsBeforeParseOperations(gameData);\n        this._handleSixthReel(gameData);\n    }\n\n\t/**\n\t * Sixth reel is locked until enough progress is collected. Whether sixth reel is unlocked can be determined\n     * based on game.progress.reels .\n     * We don't pop the last reel buffer and replace with with 0 instead, because otherwise win lines will be misplaced.\n     * @param gameData\n     * @private\n     */\n    _handleSixthReel(gameData) {\n        if (!gameData.reels || !gameData.progress) return; //eg. gamble\n\n        if(gameData.reels.length > gameData.progress.reels) {\n            gameData.reels[gameData.reels.length-1] = [0,0,0];\n        }\n    }\n}\n\nmodule.exports = PiratesPlentySlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nconst COIN_ID = 12;\nconst BONUSES_IDS = [13, 14, 15, 16];\nconst IW_ACTIVATORS = ['Collect', 'BonusWin'];\nconst LOCK_SUFFIX = '_lock';\n\n/**\n* PlayWithTheDevilSlotParser. Handles parsing game specific features.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass PlayWithTheDevilSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers = [\n      { name: 'randomWilds', cb: this._handleFeature },\n      { name: 'lockedTiles', cb: this._handleFeature },\n      { name: 'swapTiles', cb: this._handleFeature },\n      { name: 'coinSymbols', cb: this._handleCoinSymbols },\n    ]\n  }\n\n  _handleCoinSymbols(data, featureName) {\n    data[featureName].forEach(symbol => {\n      const { tileId, multiplier, reel, index } = symbol;\n\n      if (data.reels[reel] && typeof data.reels[reel][index] !== 'undefined') {\n        data.reels[reel][index] = `${tileId}_x${multiplier}`;\n      }\n    });\n  }\n\n  _handleWins(data) {\n    this._handleUnlocks(data.game);\n    super._handleWins(data);\n  }\n\n  _afterParseOperations(data) {\n    super._afterParseOperations(data)\n    this._handleUnlocks(data.game);\n  }\n\n  _handleUnlocks(data) {\n    if (!data.reels || (data.activator && data.activator.features.some(feature => IW_ACTIVATORS.includes(feature)))) return;\n\n    data.reels.forEach((reel, reelIndex) => {\n      reel.forEach((id, tileIndex) => {\n        if ((typeof id === 'string' && (id.includes(COIN_ID)) || BONUSES_IDS.includes(id))) {\n          data.reels[reelIndex][tileIndex] = [id, LOCK_SUFFIX];\n        }\n      });\n    });\n  }\n}\n\nmodule.exports = PlayWithTheDevilSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nconst FEATURE_NAME = 'fatTiles';\nconst TRANSPARENT_POS_ID = 0;\nconst FAT_TILE_ID = 13;\nconst EMPTY_POS_ID = 20;\nconst JP_TILE = 100;\n\n/**\n * @class\n * @extends {DopSlotParser}\n */\nclass PrimateKingMegaWaysSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers = [];\n  }\n\n  /**\n   * Initializes the reels array with the current spin data object and apply screen mask\n   * @private\n   * @param  {Object} data Game data, contains\n   * screen reels and every game feature\n   */\n  _initReels(data) {\n    super._initReels(data);\n\n    if (data.progress.unlocked) return;\n\n    const progressReel = data.reels.pop().map(tile => (tile = 0));\n    data.reels.push(progressReel);\n  }\n\n  _freeSpinsBeforeParseOperations(data) {\n    super._freeSpinsBeforeParseOperations(data);\n    this._replaceAreaUnderFT(data);\n  }\n\n  _beforeParseOperations(data) {\n    this._replaceAreaUnderFT(data.game);\n  }\n\n  /**\n   * @description - adds a fatTile asset, with a multiplier, and adjusts its position on the reel\n   * @param  {Object} data Game data, contains\n   * screen reels and every game feature\n   * @return {Object} parsed reel\n   * @private\n   */\n  _replaceAreaUnderFT(data) {\n    if (!data.reels) return;\n\n    const reels = data.reels;\n    const fatTiles = data[FEATURE_NAME];\n\n    return (data.reels = reels.map((reel, reelIndex) => {\n      const fatTile = fatTiles && fatTiles.find(ft => ft.reel === reelIndex);\n      const multiplierAssetName = this._getMultiplierAssetNames(fatTile);\n\n      if (fatTile) {\n        return reel.map((id, index) => {\n          if (index === 0) return [`${FAT_TILE_ID}`, ...multiplierAssetName];\n          return EMPTY_POS_ID;\n        });\n      }\n\n      return reel;\n    }));\n  }\n\n  /**\n   * @description extracts and parses the Primate Fat tile multiplier\n   * @param  {Object} fatTile Primate Fat tile\n   * @return {String[]} names of all image parts of the multiplier\n   * @private\n   */\n  _getMultiplierAssetNames(fatTile) {\n    if (fatTile === undefined) return [];\n\n    const multiplierValues = String(fatTile.multiplier)\n      .split('')\n      .map(num => Number(num)); // convert multiplier value to array\n    if (!multiplierValues.length) return;\n\n    const multiplierValuesImgSources = multiplierValues.map((value, index) => {\n      return `_mplr_${multiplierValues.length}_digit${'_'.repeat(index)}${value}`;\n    });\n\n    multiplierValuesImgSources.unshift(`_mplr_${multiplierValues.length}_digitX`);\n\n    return multiplierValuesImgSources;\n  }\n\n  /**\n   * @description FTs are not assembled from several pieces of tiles, but are one whole asset.\n   * Therefore, if a JP symbol is dropped, we must replace the FT with the id of the JP tile.\n   * @override\n   */\n  _handleJackpotTiles(jackpotTiles, reels) {\n    if (!jackpotTiles) return;\n\n\n    jackpotTiles.forEach(jpTile => {\n      const { toTile, tileId, tile, reel, index } = jpTile;\n\n      let id = JP_TILE;\n\n      if (toTile) id = toTile;\n      if (tileId) id = tileId;\n      if (tile) id = tile;\n\n      if (reels[reel] && reels[reel][index] !== 'undefined') {\n        if (reels[reel].some(id => Array.isArray(id) && FAT_TILE_ID === Number(id[0]))) {\n          for (let i = 0; i < reels[reel].length; i++) {\n            reels[reel][i] = i === 0 ? id : TRANSPARENT_POS_ID;\n          }\n        } else {\n          reels[reel][index] = id;\n        }\n      }\n    });\n  }\n}\n\nmodule.exports = PrimateKingMegaWaysSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* @class\n* @extends {DopSlotParser}\n*/\nclass PrimateKingSlotParser extends DopSlotParser {\n    _applyScreenMask(data) {\n        if (!data) return;\n\n        const { progress, respin } = data;\n        const hasRespinProgress = respin && respin.length > 0;\n        const lastProgress = hasRespinProgress ? respin[respin.length-1].progress : progress;\n\n        if (lastProgress && lastProgress.unlocked) return;\n\n        super._applyScreenMask(data)\n    }\n}\n\nmodule.exports = PrimateKingSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass PussNBootsParser extends DopSlotParser {\n\n\tconstructor() {\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// {name: 'swapReels', cb: this._handleSwapReels}\n\n\t\tthis.featureHandlers.unshift({ name: 'randomRows', cb: this._handleFeature });\n\t}\n}\n\nmodule.exports = PussNBootsParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * RAsLegendParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n * \n * @class\n * @extends {DopSlotParser}\n */\nclass RAsLegendParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.otherWins.bonus.push(\n\t\t\t'wheelBonus',\n\t\t\t'pyramidBonus'\n\t\t);\n\t}\n\n}\n\nmodule.exports = RAsLegendParser;\n","const DopSlotParser = require('../DopSlotParser');\nconst FEATURE_NAME = 'fatTiles';\nconst TRANSPARENT_POS_ID = 0;\nconst EMPTY_POS_ID = 13;\nconst JP_TILE = 100;\n\n/**\n* RainbowJackpotsMegaWaysSlotParser. Handles parsing game specific features.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass RainbowJackpotsMegaWaysSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers = [\n      { name: 'pipeRandomTiles', cb: this._handleFeature },\n      { name: 'pipeScatters', cb: this._handleFeature },\n      { name: 'beerScatters', cb: this._handleFeature },\n      { name: 'fairyScatters', cb: this._handleFeature },\n      { name: 'scatters', cb: this._handleFeature },\n    ];\n  }\n\n  _freeSpinsBeforeParseOperations(data) {\n    super._freeSpinsBeforeParseOperations(data);\n    this._replaceAreaUnderFT(data);\n  }\n\n  _beforeParseOperations(data) {\n    this._replaceAreaUnderFT(data.game);\n  }\n\n  /**\n   * @description Takes care of which multipliers in the JP screen are displayed and which are not.\n   * @override\n   */\n  _afterParseOperations(data) {\n    const gameData = data.game;\n    const jpTiles = gameData.jackpotTiles;\n    const lastSpinData = this._getLastSpinData(this.winDetails, gameData);\n\n    this.winDetails.jackpotWins.forEach(jp => {\n      this._handleMultipliers({ fatTiles: lastSpinData.fatTiles, type: jp.type }, 'fatTiles');\n      this.winDetails.multipliers = this._removeMultipliers(jpTiles, jp.type)\n    });\n  }\n\n  _removeMultipliers(jpTiles, type) {\n    return this.winDetails.multipliers.filter(mplr => {\n      return !(jpTiles.some(jpTile => jpTile.reel === mplr.reel) && type === mplr.type)\n    });\n  }\n\n  _replaceAreaUnderFT(data) {\n    if (!data.reels) return;\n\n    const reels = data.reels;\n    const fatTiles = data[FEATURE_NAME];\n\n    return data.reels = reels.map((reel, reelIndex) => {\n      const fatTile = fatTiles && fatTiles.find(ft => ft.reel === reelIndex);\n\n      if (fatTile) {\n        const { height, tileId } = fatTile;\n\n        return reel.map((id, index) => {\n          if (!index) return [`${tileId}_ft`, `_x${height}`];\n          return EMPTY_POS_ID;\n        });\n      }\n\n      return reel;\n    });\n  }\n\n  /**\n   * @description FTs are not assembled from several pieces of tiles, but are one whole asset.\n   * Therefore, if a JP symbol is dropped, we must replace the FT with the id of the JP tile.\n   * @override\n   */\n  _handleJackpotTiles(jackpotTiles, reels) {\n    if(!jackpotTiles) return;\n\n    jackpotTiles.forEach(jpTile => {\n      const { toTile, tileId, tile, reel, index } = jpTile;\n\n      let id = JP_TILE;\n\n      if (toTile) id = toTile;\n      if (tileId) id = tileId;\n      if (tile) id = tile;\n\n      if (reels[reel] && reels[reel][index] !== 'undefined') {\n        if (reels[reel].some(id => Array.isArray(id))) {\n          for (let i = 0; i < reels[reel].length; i++) {\n            reels[reel][i] = i === 0 ? id : TRANSPARENT_POS_ID;\n          }\n        } else {\n          reels[reel][index] = id;\n        }\n      }\n    });\n  }\n}\n\nmodule.exports = RainbowJackpotsMegaWaysSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass RainbowJackpotsPowerLinesSlotParser extends DopSlotParser {\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.otherWins.instantWin.push('instantWinMega');\n\t}\n\n\t_beforeParseOperations(response) {\n\t\tlet freeSpinsMega = response.game.freeSpinsMega;\n\n\t\tif (!response.game.freeSpinsMega) return;\n\n\t\tresponse.game.freeSpins = freeSpinsMega;\n\t\tresponse.game.win.freeSpins = response.game.win.freeSpinsMega;\n\n\t\tfreeSpinsMega.forEach(freeSpinMega => {\n\t\t\tthis._beforeParseOperations({ game: freeSpinMega });\n\t\t});\n\n\t\tdelete response.game.freeSpinsMega;\n\t\tdelete response.game.win.freeSpinsMega;\n\t}\n\n\t_handleFatTiles(data, featureName) {\n\t\tlet reels = data.reels;\n\t\tlet fatTilesData = data[featureName];\n\n\t\tfatTilesData.forEach((tile) => {\n\t\t\tlet tileRight = tile.reel + tile.width;\n\n\t\t\tfor (let i = tile.reel; i < tileRight; i++) {\n\t\t\t\tlet tileBottom = tile.index + tile.height;\n\n\t\t\t\tfor (let j = tile.index; j < tileBottom; j++) {\n\t\t\t\t\tif (reels[i] && reels[i][j]) {\n\t\t\t\t\t\treels[i][j] = tile.tileId;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\nmodule.exports = RainbowJackpotsPowerLinesSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * RAsLegendParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n *\n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n *\n * After-parse logic can be added in the method _afterParseOperations(data).\n *\n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n *\n * @class\n * @extends {DopSlotParser}\n */\nclass RainbowJackpotsParser extends DopSlotParser {\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.otherWins.instantWin.push('instantWinMega');\n\t}\n\n\t_beforeParseOperations(response) {\n\t\tlet freeSpinsMega = response.game.freeSpinsMega;\n\n\t\tif (!response.game.freeSpinsMega) return;\n\n\t\tresponse.game.freeSpins = freeSpinsMega;\n\t\tresponse.game.win.freeSpins = response.game.win.freeSpinsMega;\n\n\t\tfreeSpinsMega.forEach(freeSpinMega => {\n\t\t\tthis._beforeParseOperations({ game: freeSpinMega });\n\t\t});\n\n\t\tdelete response.game.freeSpinsMega;\n\t\tdelete response.game.win.freeSpinsMega;\n\t}\n}\n\nmodule.exports = RainbowJackpotsParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * MayanGodsParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n * \n * @class\n * @extends {DopSlotParser}\n */\nclass ReactorSlotParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers = [\n\t\t\t{ name: 'randomTiles', cb: this._handleFeature },\n\t\t\t{ name: 'swapTiles', cb: this._handleFeature },\n\t\t\t{ name: 'randomWilds', cb: this._handleFeature },\n\t\t\t{ name: 'fatTiles', cb: this._handleFatTiles }\n\t\t];\n\t}\n\n}\n\nmodule.exports = ReactorSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass RedDiamondSlotParser extends DopSlotParser {\n    _nudgeJackpotTiles(lastSpinData, reels, data) {\n        const jackpotNudgeData = data.jackpotNudge || lastSpinData.jackpotNudge;\n\n        if (!jackpotNudgeData) return;\n\n        const nudgeData = lastSpinData.nudge || [];\n\n        jackpotNudgeData.forEach(jackpotNudge => {\n            const nudge = nudgeData.find(nudge => nudge.index === jackpotNudge.index);\n            const nudgeDistance = nudge ? (nudge.dir === 0 ? nudge.distance : -nudge.distance) : 0;\n            const jackpotNudgeDistance = jackpotNudge.dir === 1 ? jackpotNudge.distance : -jackpotNudge.distance;\n            const distance = jackpotNudgeDistance - nudgeDistance;\n            const buffer = lastSpinData.reelsBuffer[jackpotNudge.index];\n            const flatten = _.flatten(buffer);\n            const startAt = buffer[0].length + distance;\n            const endAt = startAt + buffer[1].length;\n\n            reels[jackpotNudge.index] = flatten.slice(startAt, endAt);\n        });\n\n        this._addJackpotTiles(data.jackpotTiles, reels);\n    }\n\n    _addJackpotTiles(jackpotTiles, reels) {\n        if(!jackpotTiles) return;\n\n        jackpotTiles.forEach(jpTile => {\n            const { reel, index } = jpTile;\n            const id = 100;// default jackpot tile id\n\n            if (reels[reel] && reels[reel][index] !== 'undefined') {\n                reels[reel][index] = id;\n            }\n        });\n    }\n\n    _handleJackpotTiles() {\n        return;\n    }\n}\n\nmodule.exports = RedDiamondSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* RedHotBBQSlotParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n*\n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n*\n* After-parse logic can be added in the method _afterParseOperations(data).\n*\n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass RedHotBBQSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers.unshift({ name: 'mysteryTiles', cb: this._handleFeature });\n  }\n}\n\nmodule.exports = RedHotBBQSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * ReelHeistParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n * \n * @class\n * @extends {DopSlotParser}\n */\nclass ReelHeistParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.otherWins.instantWin.push('instantWinCatch');\n\n\t\tthis.featureHandlers.unshift({\n\t\t\tname: 'cop',\n\t\t\tcb: this._handleCop\n\t\t});\n\n\t\tthis.featureHandlers.unshift({\n\t\t\tname: 'thieves',\n\t\t\tcb: this._handleThieves\n\t\t});\n\t}\n\n\t_handleCop (data, featureName) {\n\t\tconst reels = data.reels;\n\t\tconst copData = data[featureName];\n\n\t\tcopData.forEach((tile) => {\n\t\t\tif (!tile.saveCop) return;\n\n\t\t\treels[tile.to.reel][tile.to.index] = tile.tileId;\n\t\t});\n\t}\n\n\t_handleThieves (data, featureName) {\n\t\tconst reels = data.reels;\n\t\tconst length = reels.length;\n\t\tconst thievesData = data[featureName];\n\n\t\tthievesData.forEach((tile) => {\n\n\t\t\tconst copCheck = data.cop && data.cop.findIndex(function (cop) {\n\t\t\t\treturn cop.to.reel === tile.to.reel && cop.to.index === tile.to.index;\n\t\t\t}) > -1;\n\n\t\t\tif ((tile.to.reel < 0) || (tile.to.reel > length - 1) || copCheck) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\treels[tile.to.reel][tile.to.index] = tile.tileId;\n\t\t});\n\t}\n}\n\nmodule.exports = ReelHeistParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass ReelKeeperSlotParser extends DopSlotParser {\n    constructor() {\n        super();\n\n\t\tthis.featureHandlers.unshift({ name: 'movingTiles', cb: this._handleMovingWilds });\n    }\n\n    /**\n     * Handler for the 'Fat tiles' feature\n     * @private\n     * @param  {Object} data Game data, contains\n     * screen reels and every game feature\n     * @override different format of response data for fatTiles feature\n     */\n    _handleFatTiles(data, featureName) {\n        let reels = data.reels;\n        let fatTilesData = data[featureName];\n\n        fatTilesData.forEach((tile) => {\n            let reelIndex = tile.reel;\n\n            let tileBottom = tile.index + tile.height;\n\n            for (let j = tile.index; j < tileBottom; j++) {\n                if (reels[reelIndex] && reels[reelIndex][j]) {\n                    reels[reelIndex][j] = tile.tileId;\n                }\n            }\n        });\n    }\n\n    _handleMovingWilds(data, featureName) {\n\t\tlet reels = data.reels;\n\t\tlet movingWilds = data[featureName];\n\n\t\tmovingWilds.forEach((tile) => {\n            const reelTo = reels[tile.to.reel];\n            if (!reelTo) return;\n\n            for (let i = 0; i < tile.height; i++) {\n                if (reelTo[i]) {\n                    reelTo[i] = tile.tileId;\n                }\n            }\n\t\t\t\n\t\t});\n\t}\n}\n\nmodule.exports = ReelKeeperSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass ReelKingSlotParser extends DopSlotParser {\n    constructor() {\n\t\t\t\tsuper();\n\n\t\t\t\tthis.otherWins.bonus.push('bonus');\n\t\t}\n}\n\nmodule.exports = ReelKingSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* RegalBeastsSlotParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n* \n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n* \n* After-parse logic can be added in the method _afterParseOperations(data).\n* \n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass RegalBeastsSlotParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\tthis.featureHandlers.unshift({ name: 'randomWilds', cb: this._handleFeature });\n\t}\n\n\t//we change the line length to reflect the winning tiles in the winning line. there is a difference between the two since there are double and triple symbols.\n\t//if we don't do that an error is shown in DopSlotPanel._highlightLineAndTiles that reel = screen.children[i] is undefined \n\n\t_afterParseOperations(data) {\n\t\tif (!data.game.win.lines) return;\n\n\t\tthis._handleLinesLength(data.game.winLines);\n\t}\n\n\t_freeSpinsAfterParseOperations(extraSpin) {\n\t\tif (!extraSpin.win.lines) return;\n\n\t\tthis._handleLinesLength(extraSpin.winLines);\n\t}\n\n\t_handleLinesLength(winLines) {\n\t\twinLines.forEach(line => {\n\t\t\tlet tilesCount = 0;\n\n\t\t\tline.tiles.forEach(tile => tile > 0 && tilesCount++);\n\t\t\tline.length = tilesCount;\n\t\t});\n\t}\n\n\t//This method is overriden because there are fake swap tiles and they should not be displayed, which is why we check if isVisible is false.\n\n\t_applyReelsModifier(feature, reels) {\n\t\tfeature.forEach((tile) => {\n\t\t\tlet isNested = tile instanceof Array;\n\n\t\t\tif (isNested) this._applyReelsModifier(tile, reels);\n\t\t\telse {\n\t\t\t\tif (!tile.visible) return;\n\n\t\t\t\treels[tile.reel][tile.index] = typeof tile.toTile !== 'undefined' ? tile.toTile : tile.tileId;\n\t\t\t}\n\t\t});\n\t}\n}\n\nmodule.exports = RegalBeastsSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* ReptizillionsPowerReelsParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n* \n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n* \n* After-parse logic can be added in the method _afterParseOperations(data).\n* \n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass ReptizillionsPowerReelsParser extends DopSlotParser {\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.featureHandlers = [\n\t\t\t{ name: 'scatters', cb: this._handleFsScatters },\n\t\t\t{ name: 'movingTiles', cb: this._handleMovingTiles }\n\t\t];\n\t}\n\n\t_handleMovingTiles(data, featureName) {\n\t\tconst reels = data.reels;\n\t\tconst movingTiles = data[featureName];\n\n\t\tmovingTiles.forEach(({ tileId, to: { reel, index } }) => {\n\t\t\tif (reels[reel] && reels[reel][index]) {\n\t\t\t\treels[reel][index] = tileId;\n\t\t\t}\n\t\t});\n\t}\n\n\t_handleFsScatters(data, featureName) {\n\t\tconst reels = data.reels;\n\t\tconst scattersData = data[featureName];\n\n\t\tscattersData.forEach((tile) => {\n\t\t\tconst { tileRight, targetPos, id } = this._getScatterData(tile);\n\n\t\t\tthis._setTileIds(tile, tileRight, targetPos, reels, id);\n\t\t});\n\t}\n\n\t_getScatterData(tile) {\n\t\tconst tileRight = tile.reel + tile.width;\n\t\tconst targetPos = typeof tile.targetPos !== 'undefined' ? tile.targetPos : tile.index;\n\t\tconst id = typeof tile.tileId !== 'undefined' ? tile.tileId : tile.toTile;\n\n\t\treturn { tileRight, targetPos, id };\n\t}\n\n\t_setTileIds(tile, tileRight, targetPos, reels, id) {\n\t\tlet gridWidthIndex = 0;\n\n\t\tfor (let reelIndex = tile.reel; reelIndex < tileRight; reelIndex++) {\n\t\t\tconst tileBottom = targetPos + tile.height;\n\t\t\tlet gridHeightIndex = 0;\n\n\t\t\tfor (let tileIndex = targetPos; tileIndex < tileBottom; tileIndex++) {\n\t\t\t\tif (reels[reelIndex] && reels[reelIndex][tileIndex]) {\n\t\t\t\t\treels[reelIndex][tileIndex] = `${id}_${tile.width}x${tile.height}_${gridWidthIndex}x${gridHeightIndex}`;\n\t\t\t\t}\n\n\t\t\t\tgridHeightIndex += 1;\n\t\t\t}\n\n\t\t\tgridWidthIndex += 1;\n\t\t}\n\t}\n}\n\nmodule.exports = ReptizillionsPowerReelsParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* RiddleOfTheSphinxParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n*\n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n*\n* After-parse logic can be added in the method _afterParseOperations(data).\n*\n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass RiddleOfTheSphinxSlotParser extends DopSlotParser {\n\tconstructor() {\n\t\tsuper();\n\n\t\tconst featureName = 'swapTiles';\n\n\t\tthis.featureHandlers = this.featureHandlers.filter((handler) => handler.name !== featureName);\n\t\tthis.featureHandlers.push({ name: featureName, cb: this._handleSwapTiles });\n\t}\n\n\t// don't swap tiles which are outside of the screen reels\n\t_handleSwapTiles(data, featureName) {\n\t\tconst visibleTiles = data[featureName].filter((tile) => tile.visible);\n\n\t\tthis._applyReelsModifier(visibleTiles, data.reels);\n\t}\n}\n\nmodule.exports = RiddleOfTheSphinxSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\nconst EMPTY_TILES_ID = 0;\nconst REDUNDANT_TILES_ID = '';\nconst TOP_HORIZONTAL_REEL_INDEX = 0;\nconst BOTTOM_HORIZONTAL_REEL_INDEX = 8;\n\n/**\n * RisqueMegaWaysSlotParser. Handles parsing game specific features.\n *\n * @class\n * @extends {DopSlotParser}\n */\nclass RisqueMegaWaysSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers = [{ name: 'fatTiles', cb: this._handleFatTiles }];\n  }\n\n  /**\n   * @description Additional logic is needed to reflect the changes from the fat tiles data to the bottom horizontal reel.\n   */\n  _handleFatTiles(data, featureName) {\n    const reelsBuffer = data.reelsBuffer;\n    const tilesCountOnReel = reelsBuffer[0][1].length;\n    const fatTilesData = data[featureName];\n    const horizontalReelIndices = [BOTTOM_HORIZONTAL_REEL_INDEX, TOP_HORIZONTAL_REEL_INDEX];\n    const minCountEmptyPos = this._getRedundantRowsCount(reelsBuffer, tilesCountOnReel, horizontalReelIndices);// must be before super call\n    const maxReelHeight = tilesCountOnReel - minCountEmptyPos;\n\n    super._handleFatTiles(data, featureName);\n\n    reelsBuffer.forEach(([, reelMiddle, ], index) => {\n      const fatTile = fatTilesData.find(ft => ft.reel === index);\n\n      if (!fatTile) return;\n\n      // the last tile index behind FT must be on bottom horizontal reel\n      data.reels[index][fatTile.height-1] = maxReelHeight > fatTile.height ? EMPTY_TILES_ID : REDUNDANT_TILES_ID;\n      data.reels[index][reelMiddle.length-1] = fatTile.tileId;\n    });\n\n  }\n}\n\nmodule.exports = RisqueMegaWaysSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* RobinHoodsWildForestParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n* \n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n* \n* After-parse logic can be added in the method _afterParseOperations(data).\n* \n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass RobinHoodsWildForestParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers.unshift({ name: 'randomWilds', cb: this._handleRandomWilds });\n\t\tthis.featureHandlers.forEach(handler => {\n\t\t\tif (handler.name === 'lockedTiles') handler.cb = this._handleLockedTiles;\n\t\t});\n\t}\n\n\t_handleRandomWilds(data, featName = 'randomWilds') {\n\t\tthis._applyTiles(data[featName], data.reels);\n\t}\n\n\t_handleLockedTiles(data, featName = 'lockedTiles') {\n\t\tconst locksData = Object.assign({}, data, {\n\t\t\tlockedTiles: this._parseData(data, featName)\n\t\t});\n\n\t\tthis._handleFeature(locksData, featName);\n\t}\n\n\t_parseData(data, featName) {\n\t\tif (!data.targetTiles) return data[featName];\n\n\t\tlet parsed = [];\n\n\t\tif (data.targetTiles) {\n\t\t\tlet extraPositions = data.targetTiles.filter((item) => {\n\t\t\t\treturn data[featName].findIndex((pos) => {\n\t\t\t\t\treturn pos.reel === item.reel && pos.index === item.index;\n\t\t\t\t}) < 0;\n\t\t\t});\n\n\t\t\textraPositions = extraPositions.map((pos) => {\n\t\t\t\treturn { reel: pos.reel, index: pos.index, tile: pos.tileId }\n\t\t\t});\n\n\t\t\tparsed = [].concat(data[featName], extraPositions);\n\t\t}\n\n\t\treturn parsed;\n\t}\n\n\t_applyTiles(data, reels) {\n\t\tdata.forEach((tile) => {\n\t\t\tif (tile instanceof Array) {\n\t\t\t\treturn this._applyTiles(tile, reels);\n\t\t\t}\n\t\t\treels[tile.reel][tile.index] = tile.tileId;\n\t\t});\n\t}\n\n}\n\nmodule.exports = RobinHoodsWildForestParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * RocketMenParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n * \n * @class\n * @extends {DopSlotParser}\n */\nclass RocketMenParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.otherWins.bonus.push(\n\t\t\t'donParty',\n\t\t\t'targetPractice'\n\t\t);\n\n        this.featureHandlers.unshift({ name: 'donGolfClub',  cb: this._donGolfClub }); // respin in respin\n        this.featureHandlers.unshift({ name: 'kimHobby',  cb: this._handleFeature });\n\t\tthis.featureHandlers.unshift({ name: 'nuclearSpins',  cb: this._handleNuclearSpins }); // modifiers - apply nuke tiles\n\n        this.respinArray = [];\n    }\n\n\t_handleNuclearSpins (data, featureName) {\n\t\tconst reels = data.reels;\n\t\tconst nukeSpinsData = data[featureName];\n\t\tconst kimsNukes = nukeSpinsData.missiles.Kim;\n\t\tconst donsNukes = nukeSpinsData.missiles.Don;\n\t\tconst allNukes = kimsNukes.concat(donsNukes);\n\n\t\tallNukes.forEach((tile) => {\n\t\t\tif (tile.explode) return;\n\n\t\t\treels[tile.to.reel][tile.to.index] = tile.tileId;\n\t\t});\n\t}\n\n    // /**\n    //  * @inheritDoc\n    //  */\n    // _beforeParseOperations(data) {\n    //     data = data.game;\n    //     this._flattenNestedRespins(data);\n    //     console.warn(\"ALL RESPINS\",  this.respinArray);\n    // }\n\t//\n    // /**\n    //  *\n    //  * @param data\n    //  * @private\n    //  */\n    // _flattenNestedRespins (data) {\n    //     if(data.respin) {\n    //         let nextRespin = data.respin[0];\n    //         this.respinArray.push(nextRespin);\n    //         this._flattenNestedRespins(nextRespin);\n    //     }\n    // }\n\n    // /**\n    //  * @inheritDoc\n    //  */\n    // _handleFreeSpins(data, featureName = 'freeSpins') {\n    //     super._handleFreeSpins(data, featureName);\n\t//\n    //     // move free spins to respin, so the respins template is used\n    //     let winDetailsFS = this.winDetails.respins;\n    //     let freeSpins = this.winDetails.freeSpins;\n\t//\n    //     this.winDetails.respins = winDetailsFS ? winDetailsFS.concat(freeSpins) : freeSpins;\n    //     delete this.winDetails.freeSpins;\n    // }\n\n    _donGolfClub (data, featureName) {\n\t\tthis.winDetails.totalWin = 0;\n\t\tthis.winDetails.respin = this.winDetails.respins = this.respinArray;\n\n\t\t_.each(this.respinArray, function(respin, i){\n\t\t    respin.amount = respin.win.lines || 0;\n\t\t    respin.type = i + 1;\n\t\t    respin.reels = [];\n\n\t\t    this.winDetails.totalWin += respin.win.total;\n\n            _.each(respin.reelsBuffer, function(reelData){\n                respin.reels.push(reelData[1]);\n            }, this);\n        }, this);\n    }\n\n}\n\nmodule.exports = RocketMenParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass RomanEmperorsSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers = [{ name: 'randomWilds', cb: this._handleFeature }];\n  }\n}\n\nmodule.exports = RomanEmperorsSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\nconst Config = require('../../../../config/Config');\n\nconst FEATURES = {\n  FAT_TILES: 'fatTiles',\n  BONUS_SYMBOLS: 'bonusSymbols',\n  LOCKED_TILES: 'lockedTiles',\n};\nconst MULTIPLIER_TILE_ID = 11;\nconst FAT_DEFAULT_DATA = {height: 3, width: 1, index: 0, reel:2, tileId: 13};\n\nclass SakuraMasksSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n    this.featureHandlers = this.featureHandlers.filter(data => data.name !== FEATURES.FAT_TILES);\n    this.featureHandlers.push({name: FEATURES.BONUS_SYMBOLS, cb: this._handleMultipliers});\n    this.featureHandlers .push({name: FEATURES.FAT_TILES, cb: this._handleFatTiles}); // should happen after lockedTiles are parsed\n  }\n\n  _handleMultipliers(data, name) {\n    if (!Config.hasMultipliers.includes(this.gameId) || !data[name]) return;\n\n    const multipliers = data[name].filter(tile => tile.tileId === MULTIPLIER_TILE_ID);\n\n    if (!multipliers) return;\n\n    multipliers.forEach(multiply => {\n      const { reel, index, multiplier } = multiply;\n      const type = data.type || 0;\n      const previousMultiplier = this.winDetails.multipliers\n        .find(m => m.reel === reel && m.index === index && m.type === type);\n\n      // handles multiplier swapping features\n      if (previousMultiplier) previousMultiplier.multiplier = multiplier;\n      else this.winDetails.multipliers.push({ type, reel, index, multiplier });\n    });\n  }\n\n  _beforeParseOperations(response) {\n    response.responses.forEach(response => this._handleNestedData(response.game));\n  }\n\n  _handleNestedData(response) {\n    if(response.respin) {\n      response.respin.forEach(respin => this._parseFatLockedData(respin))\n    }\n\n    if(response.freeSpins) {\n      response.freeSpins.forEach(freeSpin => {\n        if(freeSpin.respin) {\n          freeSpin.respin.forEach(respin => this._parseFatLockedData(respin))\n        }\n      })\n    }\n  }\n\n  /**\n   * @param description - Adds fatTiles data from lockedTiles in order for assembled fatTiles to work in respins\n   *\n   */\n  _parseFatLockedData(respin) {\n    const lockedTiles = respin[FEATURES.LOCKED_TILES];\n    const fatTile = lockedTiles && lockedTiles.find(lock => lock.tileId === FAT_DEFAULT_DATA.tileId);\n\n    if(!fatTile) {\n      return;\n    }\n\n    respin.fatTiles = [FAT_DEFAULT_DATA];\n  }\n\n     /**\n   * @description Takes care of which multipliers and lockedTiles in the JP screen are displayed and which are not.\n   * @override\n   */\n  _afterParseOperations(data) {\n    const gameData = data.game;\n    const jpTiles = gameData.jackpotTiles;\n    const lastSpinData = this._getLastSpinData(this.winDetails, gameData);\n\n    this.winDetails.jackpotWins.forEach(jp => {\n      this._handleMultipliers({\n        [FEATURES.BONUS_SYMBOLS]: lastSpinData[FEATURES.BONUS_SYMBOLS],\n        type: jp.type\n      }, FEATURES.BONUS_SYMBOLS);\n\n      this.winDetails.multipliers = this._removeMultipliers(jpTiles, jp.type);\n    });\n  }\n\n  _removeMultipliers(jpTiles, type) {\n    return this.winDetails.multipliers.filter(mplr => {\n      return !(jpTiles.some(jpTile => jpTile.reel === mplr.reel && jpTile.index === mplr.index) && type === mplr.type);\n    });\n  }\n}\n\nmodule.exports = SakuraMasksSlotParser;","const DopSlotParser = require('../DopSlotParser');\nconst Config = require('../../../../config/Config');\n\nconst WARRIOR_ID = 14;\nconst PRINCESS_ID = 12;\n\n/**\n * SavannahPrideSlotParser. Handles parsing game specific features.\n * @class\n * @extends {DopSlotParser}\n */\nclass SavannahPrideSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    const swapTiles = this.featureHandlers.find(item => item.name === 'swapTiles');\n    this.featureHandlers.splice(this.featureHandlers.indexOf(swapTiles), 1);\n\n    this.featureHandlers.push({name: 'movingTiles', cb: this._handlePrincess});\n  }\n\n  /**\n   * Use assembled fat tiles only for full reel fat tiles. Replace partial fat tiles with single tiles.\n   * Shield ids are replaced with warrior ids if they are present in swap tiles.\n   */\n  _handleFatTiles(data, featureName) {\n    const reels = data.reels;\n    const fatTilesData = data[featureName];\n    const movingTilesData = data['movingTiles'] || [];\n\n    fatTilesData.forEach((tile) => {\n      const tileRight = tile.reel + tile.width;\n      const targetPos = typeof tile.targetPos !== 'undefined' ? tile.targetPos : tile.index;\n      const isSwapTile = data.swapTiles && data.swapTiles.some(swapTile => swapTile.reel === tile.reel);\n      const isFullReel = tile.index === 0 && !movingTilesData.find(({ to: { reel } }) => reel === tile.reel);\n      const id = typeof tile.tileId !== 'undefined' ? isSwapTile ? WARRIOR_ID : tile.tileId : tile.toTile;\n\n      for (let reelIndex = tile.reel; reelIndex < tileRight; reelIndex++) {\n        const tileBottom = targetPos + tile.height;\n        let gridHeightIndex = 0;\n\n        for (let tileIndex = targetPos; tileIndex < tileBottom; tileIndex++) {\n          if (reels[reelIndex] && reels[reelIndex][tileIndex]) {\n            if (!Config.assembledFatTiles.includes(this.gameId)) {\n              reels[reelIndex][tileIndex] = id;\n            } else {\n              if (isFullReel) {\n                reels[reelIndex][tileIndex] = `${id}_${gridHeightIndex + 1}`;\n              } else {\n                reels[reelIndex][tileIndex] = id;\n              }\n            }\n          }\n\n          gridHeightIndex += 1;\n        }\n      }\n    });\n  }\n\n  _handlePrincess(data, featureName) {\n    const movingTilesData = data[featureName] || [];\n\n    movingTilesData.forEach(({ to: { reel, index } }) => {\n      data.reels[reel][index] = PRINCESS_ID;\n    });\n  }\n}\n\nmodule.exports = SavannahPrideSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass SevenSevenSevenStrikeSlotParser extends DopSlotParser {\n\tconstructor() {\n\t\tsuper();\n\t\tthis.featureHandlers = [{ name: 'lockedTiles', cb: this._handleFeature }];\n\t}\n}\n\nmodule.exports = SevenSevenSevenStrikeSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass SevenSevenSevenSuperStrikeSlotParser extends DopSlotParser {\n  /**\n  * @overrides - uses bonus.name instead of spinMode for featureBuyName\n  * @return {Object} The parsed data\n  */\n  _generateOutput() {\n    const output = super._generateOutput();\n    output.transactions.featureBuyName = this.data.game.bonus && this.data.game.bonus.name || this.data.game.spinMode;\n    return output;\n  }\n}\n\nmodule.exports = SevenSevenSevenSuperStrikeSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass SevensLuckSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers = [\n      { name: 'fatTiles', cb: this._handleFatTiles },\n      { name: 'lockedTiles', cb: this._handleMultipliers },\n      { name: 'scatters', cb: this._handleMultipliers },\n    ];\n  }\n\n  // the game has expanding fatTile,\n  // if present in the response data, we combine 3 assets to visualize the fatTile\n  _handleFatTiles(data, featureName) {\n    const fatTiles = data[featureName];\n    const reels = data.reels;\n\n    if (!fatTiles) return;\n\n    fatTiles.forEach(tile => {\n      const { reel, tileId } = tile;\n      reels[reel] = [`${tileId}_0`, `${tileId}_1`, `${tileId}_2`];\n    });\n  }\n\n  _handleMultipliers(data, featureName) {\n    const tilesArray = data[featureName];\n    if(!tilesArray.length) return;\n\n    const reels = data.reels;\n\n    tilesArray.forEach(locked => {\n      const { multiplier = 1, reel, index, tileId } = locked;\n      reels[reel][index] = [tileId, `multiplier_` + multiplier]; // adds a multiplier over the tile\n    });\n  }\n}\n\nmodule.exports = SevensLuckSlotParser;","const bonusTypes = {\n  senior: 'Senior',\n  reel: 'Reel',\n  row: 'Row',\n  progress: 'Progress'\n};\n\nconst DopSlotParser = require('../DopSlotParser');\n\n/**\n* ShadowSocietySlotParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n*\n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n*\n* After-parse logic can be added in the method _afterParseOperations(data).\n*\n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass ShadowSocietySlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers.unshift(\n      { name: 'progressSymbols', cb: this._handleFatTiles },\n      { name: 'scatters', cb: this._handleFatTiles }\n    );\n  }\n\n  _applyScreenMask(data) {\n    const { reel: reelType, row: rowType } = bonusTypes;\n    const {\n      progress: { activeReels: currentReels, activeRows: currentRows } = {},\n      progressBonus: { type: progressType, value: progressValue } = {},\n      reels = []\n    } = data;\n\n    const activeReels = progressType === reelType ? progressValue : currentReels;\n    const activeRows = progressType === rowType ? progressValue : currentRows;\n\n    reels.forEach((reel, reelIndex) => {\n      reel.forEach((tile, tileIndex) => {\n        if (reelIndex >= activeReels || tileIndex >= activeRows) reels[reelIndex][tileIndex] = 0;\n      });\n    });\n  }\n}\n\nmodule.exports = ShadowSocietySlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * SheepGoneWildSlotParser. Handles parsing game specific features.\n *\n * @class\n * @extends {DopSlotParser}\n */\nclass SheepGoneWildSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers = [\n      { name: 'swapTiles', cb: this._handleSwapTiles },\n    ];\n  }\n\n  _handleSwapTiles(data) {\n    const featuresData = data.swapTiles.map(tile => {\n      tile.tileId = tile.to.tileId;\n\n      return tile;\n    });\n\n    this._applyReelsModifier(featuresData, data.reels);\n  }\n}\n\nmodule.exports = SheepGoneWildSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nconst FEATURES = {\n  FAT_TILES: 'fatTiles',\n  RANDOM_WILDS: 'randomWilds',\n}\nconst FAT_TILE_ID = 13;\nconst JACKPOT_TILE = 100;\nconst TEMPLATE = `${FAT_TILE_ID}_0x`\n\n/**\n* SirensRichesSlotParser. Handles parsing game specific features.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass SirensRichesSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers = [\n      { name: FEATURES.RANDOM_WILDS, cb: this._handleFeature },\n      { name: FEATURES.FAT_TILES, cb: this._replaceAreaUnderFT },\n    ]\n  }\n\n  _replaceAreaUnderFT(data) {\n    if (!data.reels) return;\n\n    const { reels, [FEATURES.FAT_TILES]: fatTiles, multiplier } = data;\n\n\n    return data.reels = reels.map((reel, reelIndex) => {\n      const fatTile = fatTiles && fatTiles.find(ft => ft.reel === reelIndex);\n\n      return fatTile\n        ? reel.map((id, i, arr) => i === arr.length - 1 ? `${TEMPLATE}${i}_multiplier_${multiplier}` : `${TEMPLATE}${i}`)\n        : reel;\n    });\n  }\n\n  _handleJackpotTiles(jackpotTiles, reels) {\n    if (!jackpotTiles) return;\n\n    jackpotTiles.forEach(jpTile => {\n      const { toTile, tileId, tile, reel, index, screen } = jpTile;\n      const currentTile = reels[reel][index];\n      const id = toTile || tileId || tile || JACKPOT_TILE;\n\n      if (reels[reel] && typeof currentTile !== 'undefined') {\n        reels[reel][index] = !screen && typeof currentTile === 'string' && currentTile.includes(FAT_TILE_ID) ? [currentTile, id] : id;\n      }\n    });\n  }\n}\n\nmodule.exports = SirensRichesSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * SnowWhiteRocksSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n *\n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n *\n * After-parse logic can be added in the method _afterParseOperations(data).\n *\n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n *\n * @class\n * @extends {DopSlotParser}\n */\nclass SnowWildAndThe7FeaturesSlotParser extends DopSlotParser {\n\n    constructor(){\n        super();\n        // the changes from lockedTiles data in Dwarf6 feature are not needed\n        this.featureHandlers = this.featureHandlers.filter(handler => handler.name !== 'lockedTiles');\n    }\n\n    /**\n     * Handler for the game-specific win types\n     * @private\n     * @param  {Object} data Game data, contains\n     * screen reels and every game feature\n     */\n\n    _handleWins(data) {\n        if(data.game.freeSpins){\n            data.game.freeSpins.forEach((freeSpin) => {\n\n                if(freeSpin.dwarf === \"Dwarf1\" || freeSpin.dwarf === \"Dwarf4\" || freeSpin.dwarf === \"Dwarf7\"){\n                    this._handleDwarf(freeSpin, freeSpin.dwarf.toLocaleLowerCase());\n                }\n                else if(freeSpin.dwarf === \"Dwarf3\"){\n                    this._handleDwarf3(freeSpin);\n                }\n            });\n        }\n\n        super._handleWins(data);\n    }\n\n    _handleDwarf(data, dwarf) {\n        let wildSwaps = data[dwarf];\n\n        wildSwaps.forEach((wild) => {\n            data.reelsBuffer[wild.reel][1][wild.index] = wild.toTile;\n        });\n\n        this._initReels(data);\n    }\n\n    _handleDwarf3(data) {\n        for (let i = 0; i < 3; i++) {\n            let horizontalReel = [];\n\n            for (let j = 0; j < 5; j++) {\n                horizontalReel.push(data.reels[j][i]);\n            }\n\n            let horizontalBuffer = _.flatten([data.dwarf3[i].bufferLeft, horizontalReel, data.dwarf3[i].bufferRight]);\n            let distance = data.dwarf3[i].dir === 0 ? data.dwarf3[i].distance : -data.dwarf3[i].distance;\n            let startIndex = horizontalReel.length + distance;\n            let slice = horizontalBuffer.slice(startIndex, startIndex + horizontalReel.length);\n\n            for (let l = 0; l < 5; l++) {\n                data.reels[l][i] = slice[l];\n            }\n        }\n    }\n}\n\nmodule.exports = SnowWildAndThe7FeaturesSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * SpinTownParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n *\n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n *\n * After-parse logic can be added in the method _afterParseOperations(data).\n *\n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n *\n * @class\n * @extends {DopSlotParser}\n */\nclass SpinTownParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers = [\n\t\t\t{ name: 'movingTiles', cb: this._handleMovingTiles },\n\t\t\t{ name: 'wildMultiplier', cb: this._handleWildMultiplier }\n\t\t];\n\t}\n\n\t_handleMovingTiles(data, featName) {\n\t\tconst reels = data.reels;\n\t\tconst movingTilesInsideReels = data[featName].filter((filterItem) => {\n\t\t\treturn (filterItem.to.reel >= 0) && (filterItem.to.reel < reels.length);\n\t\t});\n\n\t\tmovingTilesInsideReels.forEach((tile) => {\n\t\t\treels[tile.to.reel][tile.to.index] = tile.tileId;\n\t\t});\n\t}\n\n\t_handleWildMultiplier(data, featName) {\n\t\tconst reels = data.reels;\n\t\tconst wildMultiplierData = data[featName];\n\n\t\twildMultiplierData.forEach((tile) => {\n\t\t\treels[tile.reel][tile.index] = tile.tileId;\n\t\t});\n\t}\n\n}\n\nmodule.exports = SpinTownParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nconst FEATURES = {\n  PROGRESS: 'progress',\n};\n\nclass SteamSquadSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n    this.featureHandlers.push({name: FEATURES.PROGRESS, cb: this._handleMultipliers});\n  }\n\n  /**\n   * @description Shows frames on specific tiles. this is not displaying multipliers, because it's just a workaround for overlaying images\n   */\n  _handleMultipliers(data, name) {\n    const progress = data[name];\n\n    if(!progress.initialBooster) {\n        return;\n    }\n\n    const boosterPositions = data.reelsBuffer.map((_, reelIndex) => ({reel: reelIndex, index: progress.initialBooster}));\n    const lastReelIndex = data.reelsBuffer[0][1].length - 1;\n\n    boosterPositions.forEach(pos => {\n      const { reel, index } = pos;\n      const respinCount =  data.type || 0;\n      const multiPrefix = reel === 0 ? 'start' : reel === lastReelIndex ? 'end' : 'middle';\n\n      this.winDetails.multipliers.push({ type: respinCount, reel, index, multiplier: multiPrefix });\n    });\n  }\n}\n\nmodule.exports = SteamSquadSlotParser;","const DopSlotParser = require('../DopSlotParser');\nconst SCATTER_TILE = 11;\nconst EMPTY_FS_TILE = 12;\nconst ACTIVATED_SCATTER_TILE = 111;\n\n/**\n* StolenTreasuresSlotParser. Handles parsing game specific features.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass StolenTreasuresSlotParser extends DopSlotParser {\n  _initReels(data){\n    super._initReels(data);\n\n    if (data.spinMode !== 'FreeSpins') return;\n\n    this._replaceTiles(data, EMPTY_FS_TILE, 0);\n  }\n\n  _afterParseOperations(data) {\n    this._handleScatters(data.game || data);\n  }\n\n  _freeSpinsAfterParseOperations(data) {\n    this._handleScatters(data.game || data);\n  }\n\n  _handleScatters(data) {\n    if (!data.instantWin && data.spinMode !== 'FreeSpins') return;\n\n    this._replaceTiles(data, SCATTER_TILE, ACTIVATED_SCATTER_TILE);\n  }\n\n  _replaceTiles(data, fromId, toId) {\n    const reels = data.reels;\n\n    reels.forEach((reel, reelIndex) => reel.forEach((tileId, tileIndex) => {\n      if (tileId === fromId) data.reels[reelIndex][tileIndex] = toId;\n    }));\n  }\n}\n\nmodule.exports = StolenTreasuresSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* SugarliciousEveryWaySlotParser. Handles parsing game specific features.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass SugarliciousEveryWaySlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers = [\n      { name: 'scattersBomb', cb: this._handleScattersBomb }\n    ];\n  }\n\n  _handleScattersBomb(data) {\n    const { scattersBomb, reels } = data;\n\n    scattersBomb.forEach(({ tileId, reel, index, multiplier }) => { \n      if (reels[reel] && typeof reels[reel][index] !== 'undefined') reels[reel][index] = `${tileId}x${multiplier}`;\n    })\n  }\n}\n\nmodule.exports = SugarliciousEveryWaySlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * SumoSpinsSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n * \n * @class\n * @extends {DopSlotParser}\n */\nclass SumoSpinsSlotParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n    }\n\n    _handleFatTiles(data) {\n        // base DopSlotPanel uses data from fat tiles to update reels,\n        // in this game the reels buffer contains the correct tile information already\n        // so nothing to do\n    }\n}\n\nmodule.exports = SumoSpinsSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * SunFortuneParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n * \n * @class\n * @extends {DopSlotParser}\n */\nclass SunFortuneParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers.unshift({\n\t\t\tname: 'fatMysterySwap',\n\t\t\tcb: this._handleFeature\n\t\t});\n\n\t\tthis.featureHandlers.unshift({\n\t\t\tname: 'rainingMystery',\n\t\t\tcb: this._handleFeature\n\t\t});\n\n\t}\n\n}\n\nmodule.exports = SunFortuneParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass TenElementsParser extends DopSlotParser {\n\n\tconstructor() {\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// {name: 'swapReels', cb: this._handleSwapReels}\n\t}\n\n\t/**\n\t * Handler for the 'Fat tiles' feature\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t */\n\t_handleFatTiles(data, featureName) {\n\t\tlet reels = data.reels;\n\t\tlet fatTilesData = data[featureName];\n\t\tlet fatTileReplaceId = 11;\n\n\t\tfatTilesData.forEach((tile) => {\n\t\t\tlet tileRight = tile.reel + tile.width;\n\n\t\t\tfor (let i = tile.reel; i < tileRight; i++) {\n\t\t\t\tlet tileBottom = tile.targetPos + tile.height;\n\n\t\t\t\tfor (let j = tile.targetPos; j < tileBottom; j++) {\n\t\t\t\t\tif (reels[i] && reels[i][j]) {\n\t\t\t\t\t\treels[i][j] = fatTileReplaceId;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\nmodule.exports = TenElementsParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* 10001NightsMegaWaysSlotParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n*\n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n*\n* After-parse logic can be added in the method _afterParseOperations(data).\n*\n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n*\n* @class\n* @extends {DopSlotParser}\n*/\n  class TenThousandAndOneNightsMegaWaysSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers.unshift({ name: 'randomWilds', cb: this._handleFeature });\n  }\n}\n\nmodule.exports = TenThousandAndOneNightsMegaWaysSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* 10001NightsParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n* \n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n* \n* After-parse logic can be added in the method _afterParseOperations(data).\n* \n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass TenThousandAndOneNightsParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers.unshift({ name: 'randomWilds', cb: this._handleFeature });\n\t}\n}\n\nmodule.exports = TenThousandAndOneNightsParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass TheEqualizerSlotParser extends DopSlotParser {\n\n    constructor() {\n        super();\n\n        this.featureHandlers.push({ name: 'movingWilds', cb: this._handleMovingWilds });\n    }\n\n    _handleMovingWilds(data, featureName) {\n        let reels = data.reels;\n        let fatTilesData = data[featureName];\n\n        fatTilesData.forEach((tile) => {\n\n            for (let j = 0; j < tile.to.height; j++) {\n                reels[tile.to.reel][tile.to.index + j] = tile.tileId;\n            }\n\n        });\n    }\n\n}\n\nmodule.exports = TheEqualizerSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass TheGoodTheBadAndTheRichSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers = [{ name: 'randomWilds', cb: this._handleFeature }];\n  }\n}\n\nmodule.exports = TheGoodTheBadAndTheRichSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass TheGreatestTrainRobberySlotParser extends DopSlotParser {\n\n    constructor() {\n        super();\n\n        this.featureHandlers.unshift({ name: 'cloningTiles', cb: this._handleCloningTiles });\n        this.featureHandlers.unshift({ name: 'mysteryTiles', cb: this._handleMysteryTiles });\n    }\n\n    _handleMysteryTiles(data) {\n        data.mysteryTiles.forEach((tiles) => {\n            this._applyReelsModifier(tiles, data.reels);\n        });\n    }\n\n    _handleCloningTiles(data) {\n        data.cloningTiles.forEach((tiles) => {\n            this._applyReelsModifier(tiles, data.reels);\n        });\n    }\n\n}\n\nmodule.exports = TheGreatestTrainRobberySlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass TheWildHatterSlotParser extends DopSlotParser {\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.featureHandlers = [\n\t\t\t{ name: 'hatterLocks', cb: this._handleFeature },\n\t\t\t{ name: 'hatterSpins', cb: this._handleFeature },\n\t\t\t{ name: 'raogLocks', cb: this._handleFeature },\n\t\t];\n\t}\n\n\t_beforeParseOperations(response) {\n\t\tvar gameData = response.game;\n\n\t\tif (!gameData.hatterSwaps || !gameData.hatterSwaps.length) return;\n\n\t\tvar lastSwapId = gameData.hatterSwaps.pop();\n\n\t\t['hatterLocks', 'hatterSpins', 'raogLocks'].forEach(feature => {\n\t\t\tlet featureData = gameData[feature];\n\n\t\t\tif (!featureData) return;\n\n\t\t\tfeatureData.forEach((tiles, batchIndex) => {\n\t\t\t\ttiles.forEach((tile, tileIndex) => {\n\t\t\t\t\tif (tile.toTile === 11) return;\n\n\t\t\t\t\tfeatureData[batchIndex][tileIndex].toTile = lastSwapId;\n\t\t\t\t});\n\t\t\t});\n\t\t})\n\t}\n}\n\nmodule.exports = TheWildHatterSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nconst PRINCESS_ID = 12;\nconst PRINCE_ID = 13;\nconst FRAME_ID = 15;\n\n/**\n* @class\n* @extends {DopSlotParser}\n*/\nclass TheWildKissSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers = [\n      { name: 'lockedTiles', cb: this._handleLockedTiles },\n    ];\n  }\n\n  _handleLockedTiles(data, featureName) {\n    const reels = data.reels;\n    const hasPrincess = data[featureName].some(obj => obj.tileId === PRINCESS_ID)\n\n    for (const { reel, index, multiplier, tileId } of data[featureName]) {\n      const tile = data.reelsBuffer[reel][1][index];\n      const { to } = multiplier;\n      const hasFrame = FRAME_ID === tileId;\n      const hasMultiplier = to > 1;\n      const isPrincesTile = tileId === PRINCESS_ID;\n\n      // used  to overlay assets on top of each other for single pos\n      const assetsArray = []\n\n      if (hasPrincess){\n        isPrincesTile ? assetsArray.push(tileId) : assetsArray.push(PRINCE_ID)\n      }else{\n        assetsArray.push(tile)\n      }\n\n      if (hasFrame && !hasPrincess) assetsArray.push(FRAME_ID)\n      if (hasMultiplier) assetsArray.push(`multiplier_${to}`,)\n\n      reels[reel][index] = assetsArray\n    }\n  }\n}\n\nmodule.exports = TheWildKissSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass TheWishMasterMegaWaysSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers.unshift({ name: 'extraWilds', cb: this._handleFeature });\n    this.featureHandlers.unshift({ name: 'randomWilds', cb: this._handleFeature });\n    this.featureHandlers.unshift({ name: 'lockedReels', cb: this._handleFeature });\n  }\n}\n\nmodule.exports = TheWishMasterMegaWaysSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass ThorsLightningSlotParser extends DopSlotParser {\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis.featureHandlers = [\n\t\t\t{ name: 'randomTilesLava', cb: this._handleFeature },\n\t\t\t{ name: 'nudge', cb: this._handleMultiDirectionalNudge },\n\t\t\t{ name: 'lockedShields', cb: this._handleLockedShields },\n\t\t\t{ name: 'randomTiles', cb: this._handleFeature },\n\t\t];\n\t}\n\n\t_handleMultiDirectionalNudge(data) {\n\t\tdata.nudge.forEach(nudgeData => {\n\t\t\tnudgeData.forEach(nudge => {\n\t\t\t\tif (nudge.type === 'vertical') {\n\t\t\t\t\tthis._handleVerticalNudge(nudge, data);\n\t\t\t\t} else {\n\t\t\t\t\tthis._handleHorizontalNudge(nudge, data);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\t_handleVerticalNudge(nudge, data) {\n\t\tconst buffer = data.reelsBuffer[nudge.index][1];\n\t\tconst verticalBuffer = nudge.bufferLeft.concat(buffer, nudge.bufferRight);\n\t\tconst startIndex = buffer.length + (nudge.dir === 0 ? nudge.distance : -nudge.distance);\n\t\tconst endIndex = startIndex + buffer.length;\n\n\t\tdata.reels[nudge.index] = verticalBuffer.slice(startIndex, endIndex);\n\t}\n\n\t_handleHorizontalNudge(nudge, data) {\n\t\tlet horizontalReel = [];\n\n\t\tdata.reels.forEach(reel => {\n\t\t\thorizontalReel.push(reel[nudge.row]);\n\t\t});\n\n\t\tconst horizontalBuffer = nudge.bufferLeft.concat(horizontalReel, nudge.bufferRight);\n\t\tconst distance = nudge.dir === 0 ? nudge.distance : -nudge.distance;\n\t\tconst startIndex = horizontalReel.length + distance;\n\t\tconst endIndex = startIndex + horizontalReel.length;\n\t\tconst slice = horizontalBuffer.slice(startIndex, endIndex);\n\n\t\tdata.reels.forEach((reel, index) => {\n\t\t\treel[nudge.row] = slice[index];\n\t\t});\n\t}\n\n\t_handleLockedShields(data) {\n\t\tdata.lockedShields.forEach(shield => {\n\t\t\tdata.reels[shield.reel][shield.index] = shield.tile;\n\t\t});\n\t}\n}\n\nmodule.exports = ThorsLightningSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* ThorsVengeanceParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n* \n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n* \n* After-parse logic can be added in the method _afterParseOperations(data).\n* \n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass ThorsVengeanceParser extends DopSlotParser {\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.featureHandlers = [\n\t\t\t{name: 'nudge', cb: this._handleMultiDirectionalNudge},\n\t\t\t{name: 'fatTiles', cb: this._handleFatTiles},\n\t\t\t{name: 'swapTiles', cb: this._handleFeature},\n\t\t\t{name: 'scattersRAOG', cb: this._handleFeature}\n\t\t]\n\t}\n\n\t_handleMultiDirectionalNudge(data, feauteName = 'nudge') {\n\t\tdata[feauteName].forEach(nudge => {\n\t\t\tif (nudge.type === 'horizontal') this._handleHorizontalNudge(nudge, data);\n\t\t\telse this._handleVerticalNudge(nudge, data);\n\t\t});\n\t}\n\n\t_handleVerticalNudge(nudge, data) {\n\t\tconst topBuffer = data.reelsBuffer[nudge.index][0];\n\t\tconst buffer = data.reels[nudge.index];\n\t\tconst bottomBuffer = data.reelsBuffer[nudge.index][2];\n\n\t\tconst verticalBuffer = _.flatten([topBuffer, buffer, bottomBuffer]);\n\n\t\tconst startIndex = buffer.length + (nudge.dir === 1 ? nudge.distance : -nudge.distance);\n\t\tconst endIndex = startIndex + buffer.length;\n\n\t\tdata.reels[nudge.index] = verticalBuffer.slice(startIndex, endIndex);\n\t}\n\n\t_handleHorizontalNudge(nudge, data) {\n\t\tconst leftBuffer = nudge.bufferLeft;\n\t\tlet buffer = [];\n\t\tconst rightBuffer = nudge.bufferRight;\n\n\t\tdata.reels.forEach(reel => {\n\t\t\tbuffer.push(reel[nudge.index]);\n\t\t});\n\n\t\tconst horizontalBuffer = _.flatten([leftBuffer, buffer, rightBuffer]);\n\n\t\tconst distance = nudge.dir === 0 ? nudge.distance : -nudge.distance;\n\n\t\tconst startIndex = buffer.length + distance;\n\t\tconst endIndex = startIndex + buffer.length;\n\n\t\tconst newBuffer = horizontalBuffer.slice(startIndex, endIndex);\n\n\t\tdata.reels.forEach((reel, index) => {\n\t\t\treel[nudge.index] = newBuffer[index];\n\t\t});\n\t}\n}\n\nmodule.exports = ThorsVengeanceParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass ThreeKingdomsParser extends DopSlotParser {\n\n\tconstructor() {\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// {name: 'swapReels', cb: this._handleSwapReels}\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\t_afterParseOperations(data) {\n\t\tlet reels = data.game.reels;\n\n        if(!reels) return;\n\n\t\tdata.game.reels = reels.map((reel) => reel.map((tile) => {\n\t\t\tif (tile === 7 || tile === 8 || tile === 9) { tile = 200; }\n\n\t\t\treturn tile;\n\t\t}));\n\t}\n}\n\nmodule.exports = ThreeKingdomsParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * TotemicLightningParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n * \n * @class\n * @extends {DopSlotParser}\n */\nclass ThreeMusketeersSlotParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n        this.linesWin = 0;\n\n        this.otherWins.bonus.push(\n            'wheelBonus',\n            'barBonus'\n        );\n\n        this.otherWins.instantWin.push('randomOffer');\n\n        this.featureHandlers.unshift({ name: 'porthosWilds', cb: this._handleRandomWilds });\n        this.featureHandlers.unshift({ name: 'aramisWilds', cb: this._handleRandomWilds });\n        this.featureHandlers.unshift({ name: 'athosWilds', cb: this._handleRandomWilds });\n    }\n\n    /**\n     * Handler for the game-specific 'Random Wilds' feature\n     * @private\n     * @param  {Object} data Game data, contains\n     * screen reels and every game feature\n     */\n    _handleRandomWilds(data){\n        let randomWildsData = [];\n\t    let porthosWilds = data.porthosWilds;\n\t    let aramisWilds = data.aramisWilds;\n\t    let athosWilds = data.athosWilds;\n\n\t    if(porthosWilds) randomWildsData = randomWildsData.concat(porthosWilds);\n        if(aramisWilds) randomWildsData = randomWildsData.concat(aramisWilds);\n        if(athosWilds) randomWildsData = randomWildsData.concat(athosWilds);\n\n        let reels = data.reels;\n\n        randomWildsData.forEach((tileArray) => {\n            tileArray.forEach((tile) => {\n                if (tile === undefined) return;\n                reels[tile.reel][tile.index] = tile.toTile;\n            });\n\n        });\n    }\n}\n\nmodule.exports = ThreeMusketeersSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nconst JP_TILE_ID = 100;\nconst FS_TILE_ID = 11;\n\n/**\n* @class\n* @extends {DopSlotParser}\n*/\nclass TicketToWildSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers = [\n      { name: 'fatTiles', cb: this._handleFatTiles },\n      { name: 'longTermSymbols', cb: this._handleLongTermSymbols },\n    ]\n  }\n\n  /**\n   * @override Fat tiles with specific height are assembled\n   */\n  _handleFatTiles(data, featureName) {\n    const reels = data.reels;\n    const fatTilesData = data[featureName];\n\n    fatTilesData.forEach((tile) => {\n      const targetPos = tile.index;\n      const id = tile.tileId;\n      const tileBottom = targetPos + tile.height;\n\n      for (let tileIndex = targetPos; tileIndex < tileBottom; tileIndex++) {\n        if (reels[tile.to.reel] && reels[tile.to.reel][tileIndex]) {\n          const fsTile = reels[tile.to.reel][tileIndex] === FS_TILE_ID ? [`${reels[tile.to.reel][tileIndex]}`] : [];\n          const jpTile = reels[tile.to.reel][tileIndex] === JP_TILE_ID ? [`${reels[tile.to.reel][tileIndex]}`] : [];\n          const multiplier = tile.extras.multiplier > 1 && tileIndex === tileBottom - 1 ? [`_mplr_${tile.extras.multiplier}`] : [];\n\n          reels[tile.to.reel][tileIndex] = [`${id}_${tileIndex}`, ...multiplier, ...fsTile, ...jpTile];\n        }\n      }\n    });\n  }\n\n  /**\n   * @override display the tokens on the tiles\n   */\n  _handleLongTermSymbols(data, featureName){\n    if (!data.reels) return;\n\n    const { reels } = data;\n\n    data[featureName].forEach((token) => {\n      data.reels[token.reel][token.index] = [`${reels[token.reel][token.index]}`, `_${featureName}` ];\n    })\n\n    return data.reels;\n  }\n\n  /**\n   * @override handle jp tiles with fat tiles\n   */\n  _handleJackpotTiles(jackpotTiles, reels){\n    jackpotTiles.forEach((tile) => {\n      if(typeof reels[tile.reel][tile.index] !== 'number'){\n        reels[tile.reel][tile.index] = [...reels[tile.reel][tile.index], `${JP_TILE_ID}`];\n      }else{\n        reels[tile.reel][tile.index] = `${JP_TILE_ID}`;\n      }\n    })\n  }\n}\n\nmodule.exports = TicketToWildSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * TotemicLightningParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n * \n * @class\n * @extends {DopSlotParser}\n */\nclass TotemLightningPowerReelsParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\tthis.featureHandlers.unshift({ name: 'chainLightning', cb: this._handleFeature });\n\t}\n\n}\n\nmodule.exports = TotemLightningPowerReelsParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * TotemicLightningParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n * \n * @class\n * @extends {DopSlotParser}\n */\nclass TotemLightningParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\tthis.featureHandlers.unshift({ name: 'chainLightning', cb: this._handleFeature });\n\t}\n\n}\n\nmodule.exports = TotemLightningParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nconst FEATURES = {\n  FAT_TILES: 'fatTiles',\n  RANDOM_WILDS: 'randomWilds',\n  RANDOM_WAYS: 'randomWays',\n};\n\n/**\n* @classdesc TransylvaniaNightOfBloodSlotParser. Handles parsing game specific features.\n* @extends DopSlotParser\n* @class\n*/\nclass TransylvaniaNightOfBloodSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers = [\n      { name: FEATURES.FAT_TILES, cb: this._handleFatTiles },\n      { name: FEATURES.RANDOM_WILDS, cb: this._handleFeature },\n      { name: FEATURES.RANDOM_WAYS, cb: this._handleMultipliers },\n    ];\n  }\n\n  /**\n   * @description Takes care of which multipliers in the JP screen are displayed and which are not.\n   * @override\n   */\n  _afterParseOperations(data) {\n    const gameData = data.game;\n    const jpTiles = gameData.jackpotTiles;\n    const lastSpinData = this._getLastSpinData(this.winDetails, gameData);\n\n    this.winDetails.jackpotWins.forEach(jp => {\n      this._handleMultipliers({\n        randomWays: lastSpinData[FEATURES.RANDOM_WAYS],\n        type: jp.type\n      }, FEATURES.RANDOM_WAYS);\n\n      this.winDetails.multipliers = this._removeMultipliers(jpTiles, jp.type);\n    });\n  }\n\n  _removeMultipliers(jpTiles, type) {\n    return this.winDetails.multipliers.filter(mplr => {\n      return !(jpTiles.some(jpTile => jpTile.reel === mplr.reel && jpTile.index === mplr.index) && type === mplr.type);\n    });\n  }\n}\n\nmodule.exports = TransylvaniaNightOfBloodSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass TreasureMinePowerReelsSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers.push({ name: 'randomWilds', cb: this._handleFeature});\n    this.featureHandlers.push({ name: 'cloningTiles', cb: this._handleCloningTiles});\n  }\n\n  _handleCloningTiles(data, featureName) {\n    const feature = data[featureName];\n    const reels = data.reels;\n\n    feature.forEach(data => {\n      const { tileId, positions } = data;\n\n      if (!positions.length) return;\n\n      positions.forEach(pos => {\n        const { reel, index } = pos;\n\n        if (reels[reel] && reels[reel][index] !== 'undefined') {\n          reels[reel][index] = tileId;\n        }\n      });\n\n    });\n  }\n}\n\nmodule.exports = TreasureMinePowerReelsSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * TreasureMineSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n * \n * @class\n * @extends {DopSlotParser}\n */\nclass TreasureMineSlotParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.otherWins.bonus.push('caveBonus');\n\n        this.featureHandlers = this.featureHandlers.concat([\n            { name: 'cloningTile', cb: this._handleCloningTile},\n            { name: 'fatWild', cb: this._handleFatWild},\n        ]);\n    }\n\n    _handleCloningTile(data) {\n        let reels = data.reels;\n        let cloningTileData = data.cloningTile;\n        let toTileC = cloningTileData.toTile;\n\n        cloningTileData.clones.forEach((tile) => {\n            if (reels[tile.reel] && reels[tile.reel][tile.index]) { // it could be outside the reels\n                reels[tile.reel][tile.index] = toTileC;\n            }\n        });\n    }\n\n    _handleFatWild(data) {\n        let reels = data.reels;\n        let fatWild = data.fatWild[0];\n        let toTile = fatWild.tileId;\n\n        let currReel = fatWild.reel;\n        let currIndex = fatWild.targetPos;\n\n        let width = fatWild.width;\n        let height = fatWild.height;\n\n        _.times(width, function(i){\n            let reel = currReel + i;\n\n            _.times(height, function(j){\n                let index = currIndex + j;\n                reels[reel][index] = toTile;\n            },this);\n        },this);\n    }\n}\n\nmodule.exports = TreasureMineSlotParser;\n","import Config from '../../../../config/Config';\nconst DopSlotParser = require('../DopSlotParser');\n\nconst WILD_ID = 11;\nconst WILD_HEIGHT = 7;\n\n/**\n* TrillionaireMegaWaysSlotParser. Handles parsing game specific features.\n* @class\n* @extends {DopSlotParser}\n*/\nclass TrillionaireMegaWaysSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this._lockedCash = [];\n    this.featureHandlers.push({ name: 'cashSymbols', cb: this._handleCash });\n    this.featureHandlers.push({ name: 'cashCollector', cb: this._handleFsWild });\n    this.featureHandlers.push({ name: 'screenMask', cb: this._handleVisibleTiles });\n  }\n\n  /**\n   * @override - Show full length fat tile. Format id names with multiplier and match ids to assets\n   */\n  _handleFatTiles(data, featureName) {\n    const reels = data.reels;\n    const fatTilesData = data[featureName];\n\n    fatTilesData.forEach((tile) => {\n      const id = tile.tileId;\n      let gridHeightIndex = 0;\n      const reelIndex = tile.reel;\n\n      for (let tileIndex = tile.index; tileIndex < WILD_HEIGHT; tileIndex++) {\n        if (!Config.assembledFatTiles.includes(this.gameId)) {\n          reels[reelIndex][tileIndex] = id;\n        } else {\n          if (gridHeightIndex === WILD_HEIGHT - 1) {\n            // Format with multiplier (x2, x3 etc.)\n            reels[reelIndex][tileIndex] = `${id}_${gridHeightIndex}_${tile.height}`;\n          }\n          else {\n            // Replace id with 11 as we only have assets for the tops of the tiles with id 11 as they are all the same\n            reels[reelIndex][tileIndex] = `${WILD_ID}_${gridHeightIndex}`;\n          }\n        }\n\n        gridHeightIndex += 1;\n      }\n    });\n  }\n\n  /**\n   * @description - Remove unnecessary rows from buffer in fs.\n   */\n  _handleVisibleTiles(data) {\n    const { screenMask } = data;\n\n    if (!screenMask) return;\n\n    let visibleRows = screenMask[0].filter(entry => entry != 0).length; // gets the visible part of the buffer\n    data.reels.forEach(subArray => subArray.splice(0, subArray.length - visibleRows)); // based on the visible part of the buffer remove excess\n  }\n\n  /**\n   * @description - Don't show wild text on collector girl in fs.\n   */\n  _handleFsWild(data, featureName) {\n    const cashCollector = data[featureName] || [];\n\n    if (data.spinMode === \"FreeSpins\") {\n      cashCollector.forEach(tile => {\n        const { reel, index, tileId } = tile;\n        data.reels[reel][index] = `${tileId}_fs`;\n      });\n    }\n  }\n\n  _handleCash(data, featureName) {\n    const cashData = data[featureName] || [];\n\n    if (data.cashCollector || data.spinMode !== 'FreeSpins') {\n      this._lockedCash = [];\n    }\n\n    cashData.forEach(({ reel, index, initial, multiplier, tileId }) => {\n      if (initial && data.spinMode === \"FreeSpins\") {\n        this._lockedCash.push({ reel, index, value: initial.multiplier }); \n        // track initial values because we only have assets for multipliers before doubled by trillionaire\n      }\n\n      const match = this._lockedCash.find(cash => cash.reel === reel && cash.index === index);\n      const multi = initial ? initial.multiplier : match ? match.value : multiplier;\n      data.reels[reel][index] = `${tileId}_${multi}`;\n    });\n  }\n}\n\nmodule.exports = TrillionaireMegaWaysSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* TrillionaireParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n* \n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n* \n* After-parse logic can be added in the method _afterParseOperations(data).\n* \n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass TrillionaireParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\n\t\tthis.featureHandlers.push({ name: 'fatWilds', cb: this._handleFatTiles });\n\t}\n}\n\nmodule.exports = TrillionaireParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nconst TROPHY_FISH_IDS = [18,17,16,15]\nconst FISHERMAN_ID = 11\n\nclass TrophyFishSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers = [\n      { name: 'lockedTiles', cb: this._handleLocksAndMultipliers },\n    ];\n  }\n\n  // Many tiles can be locked in the different stages of the game\n  // some of the tiles may have a locket to indicate spins remaining, others may have multiplier value representing wins\n  // the handler groups them up by lockedTiles and based on locks/multiplier conditions handles the layering of the assets;\n  _handleLocksAndMultipliers(data, featureName) {\n    const tilesArray = data[featureName];\n    const { spinMode } = data;\n    const isInFreeSpins = spinMode ==='FreeSpins'\n\n    if(!tilesArray.length) return;\n    const reels = data.reels;\n\n    tilesArray.forEach(locked => {\n      const { value = {}, spins = {}, reel, index, tileId } = locked;\n      const { to = 0 } = spins;\n      const showLocks = to > 0 && !isInFreeSpins && tileId != FISHERMAN_ID;\n      const { multiplier = 0 } = value;\n\n      reels[reel][index] = [tileId];\n      if (multiplier && !TROPHY_FISH_IDS.includes(tileId)) reels[reel][index].push(`multiplier_x` + multiplier) // don't overlay multipliers for trophy fish\n      if (showLocks && tileId) reels[reel][index].push(`Lock_` + to) // don't show lock indicator for fisherman\n    });\n  }\n}\n\nmodule.exports = TrophyFishSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nconst TURTLE = {\n  MARKERS: {\n    LEFT: 'left',\n    RIGHT: 'right',\n  },\n  TILE_ID: {\n    LEFT_MARKER_ID: '11_1',\n    RIGHT_MARKER_ID: '11_2',\n    NORMAL_ID: 11,\n  }\n}\n\n/**\n*  @class\n* @extends {DopSlotParser}\n*/\nclass TurtleParadiseSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers.unshift({ name: 'turtleWilds', cb: this._handleTurtles });\n  }\n\n  _handleTurtles(data) {\n    const { turtleWilds, reels } = data;\n\n    turtleWilds.forEach(turtleWild => {\n      const { reel, index, marker } = turtleWild;\n\n      if (reels[reel] && typeof reels[reel][index] !== 'undefined') {\n        if (marker === TURTLE.MARKERS.LEFT) {\n          reels[reel][index] = TURTLE.TILE_ID.LEFT_MARKER_ID;\n        } else if (marker === TURTLE.MARKERS.RIGHT) {\n          reels[reel][index] = TURTLE.TILE_ID.RIGHT_MARKER_ID;\n        } else {\n          reels[reel][index] = TURTLE.TILE_ID.NORMAL_ID;\n        }\n      }\n    });\n  }\n}\n\nmodule.exports = TurtleParadiseSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass TwentyFourHourGrandPrixSlotParser extends DopSlotParser {\n\tconstructor() {\n\t\tsuper();\n\t\tthis.featureHandlers = [{ name: 'fatTiles', cb: this._handleFatTiles }];\n\t}\n\n\t/**\n\t * Handler for the 'Fat tiles' feature\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t * @override 'targetPos' property is renamed as 'index' in game data\n\t */\n\t_handleFatTiles(data, featureName) {\n\t\tlet reels = data.reels;\n\t\tlet fatTilesData = data[featureName];\n\n\t\tfatTilesData.forEach((tile) => {\n\t\t\tlet tileRight = tile.reel + tile.width;\n\n\t\t\tfor (let i = tile.reel; i < tileRight; i++) {\n\t\t\t\tlet tileBottom = tile.index + tile.height;\n\n\t\t\t\tfor (let j = tile.index; j < tileBottom; j++) {\n\t\t\t\t\tif (reels[i] && reels[i][j]) {\n\t\t\t\t\t\treels[i][j] = tile.tileId;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n}\n\nmodule.exports = TwentyFourHourGrandPrixSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nconst FAT_TILE_ID = 14;\nconst TRANSPARENT_POS_ID = 0;\n// const EMPTY_POS_ID = 20;\nconst JP_TILE = 100;\n\n/**\n* VaultCrackerMegaWaysSlotParser. Handles parsing game specific features.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass VaultCrackerMegaWaysSlotParser extends DopSlotParser {\n\n  _freeSpinsBeforeParseOperations(data) {\n    super._freeSpinsBeforeParseOperations(data);\n    this._replaceAreaUnderFT(data);\n  }\n\n  _beforeParseOperations(data) {\n    this._replaceAreaUnderFT(data.game);\n  }\n\n  _replaceAreaUnderFT(data) {\n    if (!data.reels) return;\n\n    const reels = data.reels;\n\n    data.reels = reels.map((reel, reelIndex) => {\n      const hasFatTile = reel.includes(FAT_TILE_ID);\n\n      if (hasFatTile) {\n        return [ FAT_TILE_ID ];\n      }\n\n      return reel;\n    });\n  }\n\n  /**\n   * @description FTs are not assembled from several pieces of tiles, but are one whole asset.\n   * Therefore, if a JP symbol is dropped, we must replace the FT with the id of the JP tile.\n   * @override\n   */\n  _handleJackpotTiles(jackpotTiles, reels) {\n    if(!jackpotTiles) return;\n\n    jackpotTiles.forEach(jpTile => {\n      const { reel, index } = jpTile;\n\n      if (reels[reel] && typeof reels[reel][index] !== 'undefined') {\n        if (reels[reel].some(id => typeof id === 'string' && id.includes(FAT_TILE_ID))) {\n          for (let i = 0; i < reels[reel].length; i++) {\n            reels[reel][i] = i === 0 ? JP_TILE : TRANSPARENT_POS_ID;\n          }\n        } else {\n          reels[reel][index] = JP_TILE;\n        }\n      }\n    });\n  }\n}\n\nmodule.exports = VaultCrackerMegaWaysSlotParser;","const DopSlotParser = require('../DopSlotParser');\nconst PREFIX_ID = 100;\nconst FAT_TILE_ID = 14;\n\n/**\n* VaultCrackerParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n* \n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n* \n* After-parse logic can be added in the method _afterParseOperations(data).\n* \n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass VaultCrackerParser extends DopSlotParser {\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.featureHandlers.forEach(handler => {\n\t\t\tif (handler.name === 'lockedTiles') handler.cb = this._handleLockedTiles;\n\t\t});\n\t}\n\n\t/**\n\t * Handler for the 'Locked Tiles' feature\n\t * @override\n\t */\n\t_handleLockedTiles(data, featureName) {\n\t\tlet reels = data.reels;\n\t\tlet lockedTilesData = data[featureName];\n\n\t\tlockedTilesData.forEach((tile) => {\n\t\t\tif (tile.tileId === FAT_TILE_ID) return; // the fat tile is also a locked tile, and the fat tiles handler is more appropriate here.\n\t\t\treels[tile.reel][tile.index] = tile.tileId;\n\t\t});\n\t}\n\n\n\t/**\n\t * @override To handle fat tile bottom half. Another asset id is used for it.\n\t */\n\t_handleFatTiles(data, featureName) {\n\t\tconst reels = data.reels;\n\t\tconst fatTilesData = data[featureName];\n\n\t\tfatTilesData.forEach((tile) => {\n\t\t\tconst { reel, index, tileId } = tile;\n\t\t\tconst tileBottom = index + 1;\n\n\t\t\tif (reels[reel]) {\n\t\t\t\tif (reels[reel][index]) reels[reel][index] = tileId;\n\t\t\t\tif (reels[reel][tileBottom]) reels[reel][tileBottom] = PREFIX_ID + tileId;\n\t\t\t}\n\t\t});\n\t}\n\n}\n\nmodule.exports = VaultCrackerParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nconst TILE_ID = 13;\n\nclass VickyVenturaSlotParser extends DopSlotParser {\n\n    constructor() {\n        super();\n    }\n\n    _applyScreenMask(data) {\n        super._applyScreenMask(data, TILE_ID);\n    }\n}\n\nmodule.exports = VickyVenturaSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nconst EMPTY_POS_ID = 20;\nconst JP_TILE = 100;\nconst FAT_TILE_ID = 11;\nconst SMALL_WILD_ID = 11;\n\n/**\n* VikingsLegacyEveryWaySlotParser. Handles parsing game specific features.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass VikingsLegacyEveryWaySlotParser extends DopSlotParser {\n\n/**\n\t * @override We don't have \"assembledFatTiles\", the fat tile asset is always a full reel height, in our case 4 visible tiles.\n   * It also has the same tileId as the small wild.\n\t */\n  _handleFatTiles(data, featureName) {\n    const reels = data.reels;\n    const fatTilesData = data[featureName];\n\n    fatTilesData.forEach((tile) => {\n      const targetPos = typeof tile.targetPos !== 'undefined' ? tile.targetPos : tile.index;\n      const id = typeof tile.tileId !== 'undefined' ? tile.tileId : tile.toTile;\n      const tileBottom = targetPos + tile.height;\n      let gridHeightIndex = 0;\n\n        for (let tileIndex = targetPos; tileIndex < tileBottom; tileIndex++) {\n          if (reels[tile.reel] && reels[tile.reel][tileIndex]) {\n            if (tile.height > 1) {\n              reels[tile.reel][0] === `${id}_fat` ? reels[tile.reel][tileIndex] = EMPTY_POS_ID : reels[tile.reel][0] = `${id}_fat`;\n            } else {\n              reels[tile.reel][tileIndex] = id;\n            }\n          }\n          gridHeightIndex += 1;\n        }\n    });\n  }\n\n  /**\n   * @override FTs are not assembled from several pieces of tiles, but are one whole asset.\n   * Therefore, if a JP symbol is dropped, we must replace the FT with the id of the JP tile and only display\n   * the small wilds where the fat wild should be.\n   */\n  _handleJackpotTiles(jackpotTiles, reels) {\n    if(!jackpotTiles) return;\n\n    jackpotTiles.forEach(jpTile => {\n      const { reel, index } = jpTile;\n\n      if (reels[reel] && typeof reels[reel][index] !== 'undefined') {\n        if (reels[reel].some(id => typeof id === 'string' && id.includes(FAT_TILE_ID))) {\n          for (let i = 0; i < reels[reel].length; i++) {\n            reels[reel][i] = (i === index) ? JP_TILE : SMALL_WILD_ID;\n          }\n        } else {\n          reels[reel][index] = JP_TILE;\n        }\n      }\n    });\n  }\n}\n\nmodule.exports = VikingsLegacyEveryWaySlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* JingleWaysMegaWaysParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n*\n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n*\n* After-parse logic can be added in the method _afterParseOperations(data).\n*\n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass ViralSpiralSlotParser extends DopSlotParser {\n\t/**\n\t * fixed an issue with tiles nudge when two kind of nudges are present (jackpotNudge and nudge)\n\t  @overrides\n\t */\n\t_nudgeJackpotTiles(lastSpinData, reels, data) {\n\t\tconst jackpotNudgeData = data.jackpotNudge || lastSpinData.jackpotNudge;\n\n\t\tif (!jackpotNudgeData) return;\n\n\t\t// const nudgeData = lastSpinData.nudge || [];\n\n\t\tjackpotNudgeData.forEach(jackpotNudge => {\n\t\t\t// it's unnecessary to combine the nudge distance with jackpotDistance, because the _handleNudge method handles that beforehand\n\t\t\t// const nudge = nudgeData.find(nudge => nudge.index === jackpotNudge.index);\n\t\t\t// const nudgeDistance = nudge ? (nudge.dir === 1 ? nudge.distance : -nudge.distance) : 0;\n\t\t\tconst jackpotNudgeDistance = jackpotNudge.dir === 1 ? jackpotNudge.distance : -jackpotNudge.distance;\n\t\t\t// const distance = jackpotNudgeDistance + nudgeDistance;\n\t\t\tconst distance = jackpotNudgeDistance;\n\t\t\tconst buffer = lastSpinData.reelsBuffer[jackpotNudge.index];\n\t\t\tconst flatten = _.flatten(buffer);\n\t\t\tconst startAt = buffer[0].length + distance;\n\t\t\tconst endAt = startAt + buffer[1].length;\n\n\t\t\treels[jackpotNudge.index] = flatten.slice(startAt, endAt);\n\t\t});\n\t}\n}\n\nmodule.exports = ViralSpiralSlotParser;","const DopSlotParser = require('../DopSlotParser');\nconst PREFIX_ID = 100;\n\nclass WarOfGodsSlotParser extends DopSlotParser {\n    /**\n     * @override To handle fat tile bottom half. Another asset id is used for it.\n     */\n    _handleFatTiles(data, featureName) {\n        const reels = data.reels;\n        const fatTilesData = data[featureName];\n\n        fatTilesData.forEach((tile) => {\n            const { reel, index, tileId } = tile;\n\n            if (reels[reel]) {\n                if (reels[reel][index]) reels[reel][index] = tileId;\n                if (reels[reel][index+1]) reels[reel][index+1] = PREFIX_ID + tileId;\n            }\n        });\n    }\n\n}\n\nmodule.exports = WarOfGodsSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass WellOfWishesParser extends DopSlotParser {\n\tconstructor() {\n\t\tsuper();\n\t\tthis.featureHandlers.push({ name: 'swapTiles', cb: this._handleSwapTiles });\n\t}\n\n\t_handleSwapTiles(data) {\n\t\tdata.swapTiles.forEach(tile => {\n\t\t\ttile.toTile = tile.tileId;\n\t\t});\n\t\tthis._applyReelsModifier(data.swapTiles, data.reels);\n\t}\n}\n\nmodule.exports = WellOfWishesParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nconst EXPAND_TYPES = {\n  REEL: 'Reel',\n  ROW: 'Row',\n};\n\n/**\n* @class\n* @extends {DopSlotParser}\n*/\nclass WheelOfAmpParser extends DopSlotParser {\n    _applyScreenMask({ screenMask, wheelBonus, progress: { activeReels, activeRows }, reels }) {\n        const expandType = wheelBonus && wheelBonus.spins[0].type || { };\n        const visibleReelsCount = expandType === EXPAND_TYPES.REEL\n          ? activeReels + 1 // add + 1 to the activeReels so we can display the additional reel after expand\n          : activeReels;\n        const visibleRowsCount = expandType === EXPAND_TYPES.ROW\n          ? activeRows + 1 // add + 1 to the activeRows so we can display the additional row after expand\n          : activeRows;\n\n        _.each(screenMask, (reel, reelIndex) => {\n            _.each(reel, (tile, tileIndex) => {\n                const isVisible = reelIndex < visibleReelsCount && tileIndex < visibleRowsCount;\n\n                if (!isVisible) reels[reelIndex][tileIndex] = 0;\n            });\n        });\n    }\n}\n\nmodule.exports = WheelOfAmpParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass WildCircusParser extends DopSlotParser {\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.featureHandlers.unshift({name: 'jester', cb: this._handleJesters});\n\t}\n\n\t/**\n\t * Handle Jester Wilds\n\t * @param {Object} data\n\t * @param {String} featureName\n\t * @private\n\t */\n\t_handleJesters(data, featureName) {\n\t\tconst reels = data.reels;\n\t\tconst featureData = data[featureName];\n\n\t\tfeatureData.forEach((item) => {\n\t\t\treels[item.reel][item.index] = item.tile;\n\t\t});\n\t}\n\n\t/**\n\t * Adds Other wins.\n\t * @param {Object} data\n\t * @param {String} type\n\t * @override\n\t * @private\n\t */\n\t_addOtherWins(data, type) {\n\n\t\tconst hasTrippleBonus = data.activator\n\t\t\t&& data.activator.features.indexOf('FlameBreathing') >= 0\n\t\t\t&& data.activator.features.indexOf('BearBalance') >= 0\n\t\t\t&& data.activator.features.indexOf('StrongMan') >= 0;\n\n\t\tif (hasTrippleBonus) {\n\n\t\t\tconst flameBreatherData = data.pickerBonus.find((item) => {\n\t\t\t\treturn item.name === 'FlameBreathing';\n\t\t\t});\n\t\t\tconst bearBalanceData = data.pickerBonus.find((item) => {\n\t\t\t\treturn item.name === 'BearBalance';\n\t\t\t});\n\n\t\t\tthis.winDetails.otherWins.push({type: 'bonus', amount: flameBreatherData.amount});\n\t\t\tthis.winDetails.otherWins.push({type: 'bonus', amount: bearBalanceData.amount});\n\t\t} else {\n\t\t\tObject.keys(this.otherWins).forEach((winType) => {\n\t\t\t\tthis.otherWins[winType].forEach((winName) => {\n\t\t\t\t\tif (data.win[winName]) {\n\t\t\t\t\t\tthis.winDetails.otherWins.push({type: winType, amount: data.win[winName]});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}, this);\n\t\t}\n\t}\n\n\t/**\n\t * Called before FS parsing.\n\t * @param {Object} data\n\t * @override\n\t * @private\n\t */\n\t_freeSpinsBeforeParseOperations(data) {\n\t\tObject.keys(this.otherWins).forEach((winType) => {\n\t\t\tthis.otherWins[winType].forEach((winName) => {\n\t\t\t\tif (data.win[winName]) {\n\t\t\t\t\tdata.otherWins.push({type: winType, amount: data.win[winName]});\n\t\t\t\t}\n\t\t\t});\n\t\t}, this);\n\t}\n\n\n}\n\nmodule.exports = WildCircusParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass WildElementsParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers.push({name: 'elementFatTiles', cb: this._handleFatTiles});\n\t\tthis.featureHandlers.push({name: 'swapFatTiles', cb: this._handleSwapFatTiles});\n\t}\n\n\t_handleSwapFatTiles(data, featureName) {\n\t\tlet reels = data.reels;\n\t\tvar featureData = data[featureName][0];\n\n\t\tfeatureData.forEach((tile) => {\n\t\t\tlet tileRight = tile.reel + tile.width;\n\n\t\t\tfor (let i = tile.reel; i < tileRight; i++) {\n\t\t\t\tlet tileBottom = tile.targetPos + tile.height;\n\n\t\t\t\tfor (let j = tile.targetPos; j < tileBottom; j++) {\n\t\t\t\t\tif (reels[i] && reels[i][j]) {\n\t\t\t\t\t\treels[i][j] = tile.tileId;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\nmodule.exports = WildElementsParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass WildFightSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.cachedLockedTiles = [];\n  }\n\n  /**\n * Hook that is called before a free spin features are parsed\n * @override to cache lockedTiles data for the last free spin, because in response data is missing\n * @private\n * @param  {Object} data Spin data, contains\n * screen reels and every game feature for the spin\n */\n  _freeSpinsBeforeParseOperations(data) {\n    if (data.lockedTiles) this.cachedLockedTiles = [...this.cachedLockedTiles, ...this._cacheLockedTiles(data.lockedTiles)];\n    if (this.cachedLockedTiles.length) data.lockedTiles = this.cachedLockedTiles;\n\n    super._freeSpinsBeforeParseOperations(data);\n  }\n\n  _cacheLockedTiles(lockedTiles) {\n    return lockedTiles.filter(tile => !this.cachedLockedTiles.find(cachedTile => cachedTile.reel === tile.reel && cachedTile.index === tile.index));\n  }\n}\n\nmodule.exports = WildFightSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nconst FEATURES = {\n  FAT_TILES: 'fatTiles',\n};\n\nclass WildHotChilliReels2SlotParser extends DopSlotParser {\n  constructor() {\n    super();\n    this._respinFatTilesData = [];\n  }\n\n  _beforeParseOperations(response) {\n    response.responses.forEach(response => this._handleNestedData(response.game));\n  }\n\n  _handleNestedData(response) {\n    if(response.respin) {\n      response.respin.forEach(respin => this._parseFatLockedData(response, respin))\n    }\n  }\n\n  _parseFatLockedData(data, respin) {\n    const fatTilesData = data[FEATURES.FAT_TILES];\n\n    if(!fatTilesData) {\n      return;\n    }\n\n    if (respin[FEATURES.FAT_TILES]) {\n      this._respinFatTilesData.push(...respin[FEATURES.FAT_TILES]);\n    }\n\n    respin.fatTiles = [...fatTilesData, ...this._respinFatTilesData];\n  }\n}\n\nmodule.exports = WildHotChilliReels2SlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nconst FAT_TILE_ID = 8;\n/**\n* WildHotChilliReelsParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n* \n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n* \n* After-parse logic can be added in the method _afterParseOperations(data).\n* \n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass WildHotChilliReelsParser extends DopSlotParser {\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.featureHandlers.forEach(handler => {\n\t\t\tif (handler.name === 'lockedTiles') handler.cb = this._handleLockedTiles;\n\t\t});\n\t}\n\n\t/**\n\t * Handler for the 'Locked Tiles' feature\n\t * @override\n\t */\n\t_handleLockedTiles(data, featureName) {\n\t\tlet reels = data.reels;\n\t\tlet lockedTilesData = data[featureName];\n\n\t\tlockedTilesData.forEach((tile) => {\n\t\t\tif (tile.tileId === FAT_TILE_ID) return; // the fat tile is also a locked tile, and the fat tiles handler is more appropriate here.\n\t\t\treels[tile.reel][tile.index] = tile.tileId;\n\t\t});\n\t}\n}\n\nmodule.exports = WildHotChilliReelsParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * WildNordsParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n * \n * @class\n * @extends {DopSlotParser}\n */\nclass WildNordsParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers.unshift({ name: 'wolfBeast', cb: this._handleFeature });\n\t\tthis.featureHandlers.unshift({ name: 'eagleBeast', cb: this._handleFeature });\n\t\tthis.featureHandlers.unshift({ name: 'bearBeast', cb: this._handleFeature });\n\n\t\tthis.featureHandlers.unshift({ name: 'swapTilesWolf', cb: this._handleFeature });\n\t\tthis.featureHandlers.unshift({ name: 'swapTilesEagle', cb: this._handleFeature });\n\t\tthis.featureHandlers.unshift({ name: 'swapTilesBear', cb: this._handleFeature });\n\t}\n\n}\n\nmodule.exports = WildNordsParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* JingleWaysMegaWaysParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n*\n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n*\n* After-parse logic can be added in the method _afterParseOperations(data).\n*\n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass WildTundraSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers = this.featureHandlers.filter(({ name }) => name !== 'fatTiles');\n    this.featureHandlers.push({name: 'fatTilesSwap', cb: this._handleFeature});\n  }\n}\n\nmodule.exports = WildTundraSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass WildWildChestParser extends DopSlotParser {\n\n\tconstructor() {\n\t\tsuper();\n\n\t\t/** @type {Number} Max amount of chests */\n\t\tthis.maxChests = 5;\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// {name: 'swapReels', cb: this._handleSwapReels}\n\t\tthis.featureHandlers.push({ name: 'nudgeFatTiles', cb: this._handleNudgeFatTiles });\n\n\t\tfor (let i = 1; i <= this.maxChests; i++) {\n\t\t\tthis.featureHandlers.push({ name: `lockedTiles_${i}`, cb: this._handleFeature });\n\t\t}\n\n\t}\n\n\t_beforeParseOperations(response) {\n\t\tvar respins = [];\n\t\tvar gameData = response.game;\n\n\t\tfor (let i = 1; i <= this.maxChests; i++) {\n\t\t\tvar respinId = `respin_${i}`;\n\t\t\tvar lockedTilesId = `lockedTiles_${i}`;\n\n\t\t\tif (!gameData[respinId]) continue;\n\n\t\t\tif (gameData[lockedTilesId]) {\n\t\t\t\tgameData[respinId][0][lockedTilesId] = gameData[lockedTilesId];\n\t\t\t}\n\n\t\t\trespins.push(...gameData[respinId]);\n\t\t}\n\n\t\tgameData.respin = respins.length ? respins : [];\n\t}\n\n\t/**\n\t* Handler for the 'Nudge Fat Tiles' feature\n\t* @description \"In this game only fat tiles are nudged in FS, bringing the whole tile to fit the reel\"\n\t* @private\n\t* @param {Object} data Game data, contains\n\t* screen reels and every game feature\n\t* @param {Array} data.nudgeFatTiles Array of nudge modifications\n\t* @param {Array} data.reelsBuffer reels buffer array\n\t* @param {Array} data.reels Screen reels state\n\t* @param {Number} data.nudgeFatTiles.distance Nudge distance in tiles\n\t*/\n\t_handleNudgeFatTiles(data) {\n\t\tconst nudgeFatTilesData = data.nudgeFatTiles;\n\t\tconst fatTilesData = data.fatTiles;\n\t\tconst reels = data.reels;\n\n\t\tnudgeFatTilesData.forEach((nudge) => {\n\t\t\tconst buffer = data.reelsBuffer[nudge.index];\n\t\t\tconst distance = nudge.dir === 1 ? - nudge.distance : nudge.distance;\n\t\t\tconst fatTile = fatTilesData.find((fatTile) => {\n\t\t\t\treturn fatTile.targetPos + distance === 0;\n\t\t\t});\n\n\t\t\tif (!fatTile) return;\n\n\t\t\treels[nudge.index] = _.times(buffer[1].length, () => {return fatTile.tileId;});\n\t\t});\n\t}\n\n\t/**\n\t * win details logic\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t * @param {Object} data.win Spin result winnings info\n\t * @param {Array} data.winLines Spin result win lines\n\t * @param {Object} data.winLines.pickerBonus Picker bonus win info\n\t * @param {Object} data.winLines.pathBonus Path bonus win info\n\t * @param {Object} data.winLines.pathPickerBonus Path picker bonus win info\n\t * @param {Object} data.winLines.multiPickerBonus Multi picker bonus win info\n\t */\n\t_handleWins(data) {\n\t\tsuper._handleWins(data);\n\t\tconst winDetails = this.winDetails;\n\n\t\tfor (let i = 1; i <= this.maxChests; i++) {\n\t\t\tif (data.game.win[`lines_swapReels_${i}`]) {\n\t\t\t\twinDetails.otherWins.push({ type: 'modifierWin', amount: data.game.win[`lines_swapReels_${i}`] });\n\t\t\t}\n\n\t\t\tif (data.game.win[`lines_randomTiles_${i}`]) {\n\t\t\t\twinDetails.otherWins.push({ type: 'modifierWin', amount: data.game.win[`lines_randomTiles_${i}`] });\n\t\t\t}\n\n\t\t\tif(data.game.win[`instantWin_${i}`]) {\n\t\t\t\twinDetails.otherWins.push({ type: 'instantWin', amount: data.game.win[`instantWin_${i}`] });\n\t\t\t}\n\t\t}\n\t}\n}\n\nmodule.exports = WildWildChestParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass WinEscalatorParser extends DopSlotParser {\n\n    constructor() {\n        super();\n\n        this.featureHandlers.unshift({ name: 'movingTiles', cb: this._handleMovingTiles });\n    }\n\n    _handleMovingTiles(data, featureName) {\n        let reels = data.reels;\n        let movingTiles = data[featureName];\n\n        movingTiles.forEach((tile) => {\n            if (reels[tile.to.reel][tile.to.index]) {\n                reels[tile.to.reel][tile.to.index] = tile.toTile;\n            }\n        });\n    }\n}\n\nmodule.exports = WinEscalatorParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass WingsOfRaSlotParser extends DopSlotParser {\n\n    constructor() {\n        super();\n\n        this.featureHandlers = [\n            { name: 'mysterySymbols', cb: this._handleMysterySymbols },\n        ];\n    }\n\n    /**\n     * Handler for the 'Mystery Symbols' feature\n     * @private\n     * @param  {Object} data Game data, contains\n     * @override because response data is nested\n     * screen reels and every game feature\n     */\n    _handleMysterySymbols(data) {\n        let reels = data.reels;\n        let mysterySymbolsData = data.mysterySymbols;\n        let toTile = mysterySymbolsData.toTile;\n\n        mysterySymbolsData.tiles.forEach(batchOfTiles => {\n            batchOfTiles.forEach(tile => reels[tile.reel][tile.index] = toTile);\n        });\n    }\n}\n\nmodule.exports = WingsOfRaSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass WinterWondersParser extends DopSlotParser {\n\n\tconstructor() {\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// {name: 'swapReels', cb: this._handleSwapReels}\n\t}\n\n\t/**\n\t* Handler for the 'Fat tiles' feature\n\t* @private\n\t* @param  {Object} data Game data, contains\n\t* screen reels and every game feature\n\t*/\n\t_handleFatTiles(data, featureName) {\n\t\tlet reels = data.reels;\n\t\tlet fatTilesData = data[featureName];\n\t\tlet fatTileReplaceId = 8;\n\n\t\tfatTilesData.forEach((tile) => {\n\t\t\tlet tileRight = tile.reel + tile.width;\n\n\t\t\tfor (let i = tile.reel; i < tileRight; i++) {\n\t\t\t\tlet tileBottom = tile.targetPos + tile.height;\n\n\t\t\t\tfor (let j = tile.targetPos; j < tileBottom; j++) {\n\t\t\t\t\tif (reels[i] && reels[i][j]) {\n\t\t\t\t\t\treels[i][j] = fatTileReplaceId;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\nmodule.exports = WinterWondersParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nconst SPECIAL_WILD_ID = 13;\nconst WILDS_NAME = 'randomWilds'\n\nclass WolfStacksMegaWaysSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n    this.featureHandlers.unshift({ name: WILDS_NAME, cb: this._handleWildFeature });\n  }\n\n  _handleWildFeature(data, featureName) {\n    if(!data.chainReactor) return;\n\n    const randomWilds = data[featureName];\n    const specialWildLocks = randomWilds.filter(wild => {\n        return !data.chainReactor.destroy.some(destroy => wild.reel === destroy.reel && wild.index === destroy.index);\n      }).map(w => ({index: w.index, reel: w.reel, tileId: SPECIAL_WILD_ID}));\n\n\n    this._applyReelsModifier(specialWildLocks, data.reels);\n  }\n}\n\nmodule.exports = WolfStacksMegaWaysSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* YearRoundRichesClusterbusterSlotParser. Handles parsing game specific features.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass YearRoundRichesClusterbusterSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers = [\n      { name: 'fatTiles', cb: this._handleFatTiles },\n      { name: 'swapTiles', cb: this._handleFeature },\n      { name: 'randomWilds', cb: this._handleFeature },\n      { name: 'cloningTiles', cb: this._handleFeature },\n    ];\n  }\n\n  /**\n   * @override Set proper win type.\n   */\n  _freeSpinsBeforeParseOperations(data) {\n    super._freeSpinsBeforeParseOperations(data);\n    const win = data.otherWins.find(win => win.type === 'instantWin');\n\n    if (win) win.type = 'multiplier';\n  }\n}\n\nmodule.exports = YearRoundRichesClusterbusterSlotParser;","const DopSlotParser = require(\"../DopSlotParser\");\n\nclass ZaidasFortuneSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n    this.featureHandlers.push({name: 'randomWilds', cb: this._handleFeature});\n  }\n}\n\nmodule.exports = ZaidasFortuneSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* ZeusLightningMegaWaysSlotParser. Handles parsing game specific features.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass ZeusLightningMegaWaysSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers = [\n      {name: 'fatTiles', cb: this._handleFatTiles},\n      {name: 'cloningTiles', cb: this._handleCloningFeature},\n      {name: 'swapTiles', cb: this._handleFeature},\n      {name: 'afterSwapCloningTiles', cb: this._handleCloningFeature},\n    ];\n  }\n\n  _handleCloningFeature(data, featureName) {\n    const reels = data.reels;\n\n    data[featureName].forEach(tileData => {\n      const { tileId, to: { reel, index } } = tileData;\n\n      if (reels[reel] && typeof reels[reel][index] !== 'undefined') {\n        reels[reel][index] = tileId;\n      }\n    });\n  }\n\n  _handleFatTiles(data, featureName) {\n    const reels = data.reels;\n    const fatTilesData = data[featureName];\n\n    fatTilesData.forEach((tile) => {\n      const { index, reel, height, tileId } = tile;\n      const targetIndex = index;\n      const targetReel = reel;\n      const targetHeight = height;\n      const targetId = tileId;\n      const reelSize = reels[targetReel].filter(id => id > 0).length;\n      const targetVisibleHeight = reels[targetReel].filter(id => id === targetId).length;\n      const isPartial = targetVisibleHeight !== targetHeight;\n      const inUpperBuffer = isPartial && targetIndex < 0;\n\n      let tileBottom = targetIndex + targetHeight;\n      let tilePiecesCounter = inUpperBuffer ? targetHeight - targetVisibleHeight + 1 : 1;\n\n      if (isPartial) tileBottom = inUpperBuffer ? targetVisibleHeight : reelSize;\n\n      for (let tileIndex = inUpperBuffer ? 0 : targetIndex; tileIndex < tileBottom; tileIndex++) {\n        if (reels[targetReel] && reels[targetReel][tileIndex]) {\n          if(targetHeight > 1) {\n            reels[targetReel][tileIndex] = tilePiecesCounter === targetHeight || tileIndex + 1 === reelSize\n              ? [`${targetId}_x${targetHeight}_${tilePiecesCounter}`, `${targetId}_wild`]\n              : `${targetId}_x${targetHeight}_${tilePiecesCounter}`;\n          }\n        }\n        tilePiecesCounter++;\n      }\n    });\n  }\n\n  /**\n   * @description To prevent unnecessary execution of feature handlers.\n   * @override\n   */\n  _flattenFreeSpins(freeSpins, result) {\n    freeSpins.forEach((freeSpin, i) => {\n\n      this._handleExtraSpin(freeSpin);\n      result.push(freeSpin);\n\n      if (freeSpin.respin) {\n        let respins = [];\n        this._flattenRespins(freeSpin.respin, respins);\n        freeSpin.respins = respins;\n\n        let lastRespin = _.last(respins);\n        if (lastRespin.freeSpins) {\n          this._flattenFreeSpins(lastRespin.freeSpins, result);\n        }\n      } else if (freeSpin.freeSpins) {\n        this._flattenFreeSpins(freeSpin.freeSpins, result);\n      }\n    });\n  }\n}\n\nmodule.exports = ZeusLightningMegaWaysSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass ZeusLightningPowerReelsSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers.push({ name: 'expandReels', cb: this._expandReels });\n  }\n  _expandReels(data) {\n    const { reels } = data;\n    const { toTile, reels: expandedReels } = data.expandReels;\n    const tilesCount = reels[0].length;\n\n    expandedReels.forEach(reel => {\n      for (let index = 0; index < tilesCount; index++) {\n        if(reels[reel][index] !== 10) {\n          reels[reel][index] = toTile;\n        }\n      }\n    });\n  }\n}\n\nmodule.exports = ZeusLightningPowerReelsSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* ZillardKingSlotParser. Handles parsing game specific features.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass ZillardKingSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n    this.featureHandlers.push({name: 'randomWilds', cb: this._handleFeature});\n  }\n\n  _applyScreenMask(data) {\n    if (!data) return;\n\n    const { progress } = data;\n\n    if (progress.unlocked) return;\n\n    super._applyScreenMask(data)\n  }\n}\n\nmodule.exports = ZillardKingSlotParser;","const DefaultParser = require('../../DefaultParser');\nconst gameLines = require('../../../config/NSGLines');\nconst Language = require('../../../utils/Language');\n\n/**\n *\tNSGParser. Handles parsing spin result data\n *\n * @class\n */\nclass NSGParser  extends DefaultParser{\n    constructor(){\n        super();\n        this.gameLines = gameLines;\n        this.lang = Language._instance._code;\n        this.freespin_id = 0;\n    }\n\n    setGameConfig(Config){\n        this._gameConfig = Config;\n        return this;\n    }\n\n    getGameConfig(){\n        return this._gameConfig;\n    }\n    \n    _Manager(){\n        let _response;\n        let _config = this.getGameConfig();\n        if(typeof _config.Reels.Manager == 'function'){\n            return _config.Reels.Manager(_config);\n        }\n        return {\n            getTile:function(x, y, fs=false, reelsConfig = false){\n                let ret = false;\n                let json = this.getResponse();\n                if(reelsConfig === false){\n                    reelsConfig = _config.Reels;\n                }\n                \n                if (json.reels) {\n                    if(typeof reelsConfig.ways == 'undefined' || (fs && reelsConfig.reelTypeFS == 'collector')){\n                        if(reelsConfig.reelType == 'collector' || reelsConfig.reelType == 'multi' || reelsConfig.reelType == 'block' || (fs && reelsConfig.reelTypeFS == 'collector')){\n                            if(reelsConfig.flip && !(fs && reelsConfig.reelTypeFS == 'collector')){\n                                let sc = (json.reels[x].length / (reelsConfig.screens || 3));\n                                ret = json.reels[x][json.reels[x].length - 1 - y + sc];\n                            }else{\n                                ret = json.reels[x][y];\n                            }\n                        }else{\n                            ret = json.reels[y].toString()[x];\n                        }\n                    }else{\n                        if(reelsConfig.Y2X){\n                            ret = json.reels[y][x];\n                        }else{\n                            ret = json.reels[x][y];\n                        }\n                    }\n                }\n                \n                return ret;\n            },\n            \n            setResponse:function(json){\n              _response = json;\n              return this;\n            },\n            \n            setGameData:function(data){\n              $.extend((_response.result.game.nsp || _response.result.game.mwg || {}),data);\n            },\n            \n            getResponse:function(raw){\n              try{\n                return (raw?_response:_response.result.game.nsp || _response.result.game.mwg) || {};\n              }catch(e){\n                return {};\n              }\n            },\n            \n            getLines:function(){\n                try{\n                    let response = this.getResponse();\n                    let ways = (response.lines || response.multiWays);\n                    if(!ways && response.win && response.win.ways){\n                        ways = response.win.ways;\n                    }\n                    return ways;\n                }catch(e){\n                    return [];\n                }\n            }\n        }\n    }\n    \n    _getWinLines(stake, reelsManager, multiplier=1){\n        let ret = [];\n        let lines = reelsManager.getLines();\n        let isLinesGame = !!this._gameConfig.Reels.lineIds;\n        for(let key in lines){\n            let line = lines[key];\n            let highlighTiles = [];\n            let cells = line.cells;\n            let winningMul = line.hasOwnProperty('multiplier') ? 1 : multiplier;\n            let amount = (line.winning?line.winning * winningMul:false) || this._calcLine((line.winSingleMul || line.winMul) * multiplier,stake);\n\n            if(isLinesGame){\n                if(line.lineCells){\n                    for(let i=0;i<line.cells.length;i++){\n                        highlighTiles.push(line.lineCells.indexOf(i) > -1?1:0);\n                    }\n                }else{\n                    for(let i=0;i<line.cells.length;i++){\n                        line.winStart = line.winStart || 0;\n                        highlighTiles.push((i>= line.winStart && i<=line.winStart*1+line.winCount*1)?1:0);\n                    }\n                }\n\n                if(typeof cells == 'object'){\n                    if(typeof cells[0] == 'object'){\n                        cells = line.line.join('');\n                    }else{\n                        cells = cells.join('');\n                    }\n                }\n                ret.push({\n                    index: this._gameConfig.Reels.lineIds[cells] - 1,\n                    // type: multiplier > 1 || line.multiplier > 1 ? 'multiplier' : (this._gameConfig.Reels.lineIds[cells]||cells),\n                    type: (this._gameConfig.Reels.lineIds[cells]||cells),\n                    multiplier: multiplier,\n                    tiles: highlighTiles.join(','),\n                    symbols: (Array.isArray(line.hit) ? line.hit : line.hit.split('')).join(','),\n                    start: line.winStart,\n                    length: line.winCount,\n                    amount: amount\n                });\n            }else{\n                let injectReelPosition = this.getGameConfig().Reels.injectReelPosition || null;\n                let injectReel = this.getGameConfig().Reels.injectReel || [];\n                let historyReelTiles = [];\n                let reels = reelsManager.getResponse().reels;\n                if(injectReelPosition == 'top'){\n                    for(let x in cells){\n                        historyReelTiles[x] = [];\n                        let sy = reels[x].length / 3;\n                        for(let y in cells[x]){\n                            if(y<0){\n                                y=0;\n                            }else{\n                                if(injectReel.indexOf(Number(x)) > -1){\n                                    y = sy-y+1;\n                                }else{\n                                    y = sy-y;\n                                }\n                            }\n                            historyReelTiles[x].push(y);\n                        }\n                    }\n                }else{\n                    for(let x in cells){\n                        let sy = reels[x].length / (this._gameConfig.Reels.Y2X ? 1 : (this._gameConfig.Reels.screens || 3));\n                        historyReelTiles[x] = [];\n                        for(let y in cells[x]){\n                            if(this._gameConfig.Reels.screens  == 2){\n                                y = cells[x][y];\n                                historyReelTiles[x].push(y-sy);\n                                continue;\n                            }\n                            historyReelTiles[x].push(sy-y);\n                        }\n                    }\n                }\n                \n                highlighTiles = JSON.stringify(historyReelTiles);\n                ret.push({\n                    index: key,\n                    type: key,\n                    multiplier: multiplier,\n                    ways: line.ways,\n                    tiles: highlighTiles,\n                    length: cells.length,\n                    amount: amount\n                });\n            }\n\n            \n        }\n\n        ret.sort(function(a,b){\n            if(a.type==b.type){\n                return 0;\n            }\n            return a.type < b.type?-1:1;\n        });\n        \n        return ret;\n    }\n    \n    _calcLine(mul,stake){\n        return stake*(mul/Object.keys(this._gameConfig.Reels.lineIds).length);\n    }\n\n    _convertCollectorToReels(collectorReels){\n        let reels = [];\n        for(let i=0;i<this._gameConfig.Reels.cols;i++){\n            reels.push([]);\n            for(let j=0;j<this._gameConfig.Reels.rows;j++){\n                reels[i].push('INIT_TILE');\n            }\n        }\n        for(let reel_id in collectorReels){\n            let tiles = collectorReels[reel_id];\n            let x = (reel_id % this._gameConfig.Reels.cols);\n            let y = Math.floor(reel_id / this._gameConfig.Reels.cols);\n            reels[x][y] = String(tiles[1]);\n        }\n        return reels;\n    }\n    \n    _getReels(reelsManager, gameType = 'main'){\n        let reels = [];\n        let json = {};\n        let ReelsManager = (reelsManager || this.ReelsManager);\n        let reelsConfig = this._gameConfig.Reels;\n        if(reelsConfig.hasOwnProperty(gameType)){\n            reelsConfig = reelsConfig[gameType];\n        }\n        let isCollector = reelsConfig.reelType == 'collector';\n        if(gameType == 'FS'){\n            isCollector = isCollector || reelsConfig.reelTypeFS == 'collector'\n        }\n        try{\n            json = ReelsManager.getResponse();\n        }catch(e){\n            return [];\n        }\n\n        if(isCollector){\n            json.reels = this._convertCollectorToReels(json.reels);\n            ReelsManager.setGameData({reels: json.reels});\n        }\n\n        if(!json.hasOwnProperty('reels')) return [];\n        \n        let reel = [];\n        \n        for(let i=0;i<reelsConfig.cols;i++){\n            reel = [];\n            let rows = 0;\n            if(reelsConfig.ways || reelsConfig.reelType == 'multi' || reelsConfig.reelType == 'block'){\n                if(reelsConfig.Y2X){\n                    rows = json.reels[i].length;\n                }else{\n                    rows = json.reels[i].length / (reelsConfig.screens || 3);\n                }\n            }else{\n                if(reelsConfig.Y2X){\n                    rows = json.reels[i].length;\n                }else{\n                    rows = json.reels.length / 3;\n                }\n            }\n\n            if(isCollector){\n                rows = json.reels[i].length;\n            }\n            if(reelsConfig.injectReelPosition == 'top'){\n                if(json.injectReel && json.injectReel.hasOwnProperty(i)){\n                    reel.push(json.injectReel[i][0]);\n                }\n            }\n            if(reelsConfig.extrasReelPosition == 'top'){\n                if(json.extrasReel && json.extrasReel.hasOwnProperty(i)){\n                    reel.push(json.extrasReel[i]);\n                }\n            }\n            for(let j=0;j<rows;j++){\n                let x = i;\n                let y, c1, c2, c3;\n                \n                if(isCollector){\n                    y = j;\n                    c1 = y;\n                    c2 = x;\n                    c3 = c2;\n                }else\n                if(reelsConfig.reelType == 'multi'){\n                    if(reelsConfig.screenType == 2){\n                        y = j + rows;\n                    }else{\n                        y = (rows - j + rows - 1);\n                    }\n                    c1 = x;\n                    c2 = y;\n                    c3 = c2;\n                }else\n                if(reelsConfig.reelType == 'block'){\n                    c3 = rows + j;\n                    y = (rows - j + rows - 1);\n                    c1 = x;\n                    c2 = y;\n                }else\n                if(typeof reelsConfig.ways == 'undefined'){\n                    y = Math.abs(reelsConfig.SCREEN_INDEX - j);\n                    c1 = y;\n                    c2 = x;\n                    c3 = c2;\n                }else{\n                    y = (rows - j + rows - 1);\n                    c1 = y;\n                    c2 = x;\n                    c3 = c2;\n                }\n\n                let overlayTile = '';\n                let tile = '';\n                \n                try{\n                    let t = json.randomWildOverlay[c1][c2];\n                    if(!t || typeof t == undefined) throw 0;\n                    overlayTile = t;\n                }catch(e){}\n                \n                try{\n                    let t = json.mysteryOverlay[c1][c2];\n                    if(!t || typeof t == undefined) throw 0;\n                    overlayTile = t;\n                }catch(e){}\n\n                try{\n                    let t = json.randomSymbolsOverlay[c1][c3];\n                    if(!t || typeof t == undefined) throw 0;\n                    overlayTile = t;\n                }catch(e){}\n\n                try{\n                    let t = json.lockedSymbolsOverlay[c1][c2]\n                    if(!t || typeof t == undefined) throw 0;\n                    overlayTile = t;\n                }catch(e){}\n\n                try{\n                    let t = json.overlay[c1][c2];\n                    if(!t || typeof t == undefined) throw 0;\n                    overlayTile = t;\n                }catch(e){}\n\n                try{\n                    let t = json.longTilesOverlay[c1][c2] != ' ' ? json.longTilesOverlay[c1][c2]/*+'3'*/ : overlayTile;\n                    if(!t || typeof t == undefined) throw 0;\n                    overlayTile = t;\n                }catch(e){}\n                \n                try{\n                    let t = json.fatTileOverlay[c1][c2] != ' ' ? json.fatTileOverlay[c1][c2]/*+'3x3'*/ : overlayTile;\n                    if(!t || typeof t == undefined) throw 0;\n                    overlayTile = t;\n                }catch(e){}\n\n                if(!overlayTile.match(/[a-z0-9]+/i) && json.flipCoin && json.flipCoin.symbol){\n                    overlayTile = ReelsManager.getTile(x,y);\n                    if(overlayTile == json.flipCoin.symbol){\n                        overlayTile = json.flipCoin.flipSymbol\n                    }\n                }\n\n                try{\n                    let c = json.reelsCashBefore[x].length;\n                    overlayTile = json.reelsCashBefore[x][(y-c)];\n                    if(overlayTile){\n                        overlayTile = 'W';\n                    }\n                }catch(e){}\n                \n                if (overlayTile && overlayTile.match(/[a-z0-9]+/i)) {\n                    tile = overlayTile;\n                }else{\n                    tile = ReelsManager.getTile(x, y, gameType != 'main', reelsConfig);\n                }\n\n                if(gameType != 'main' && reelsConfig.remapBonusSymbols){\n                    tile = reelsConfig.remapBonusSymbols[tile] || tile;\n                }\n\n                if(reelsConfig.tileParse){\n                    tile = reelsConfig.tileParse(tile);\n                }\n\n                reel.push(tile);\n            }\n            if(reelsConfig.injectReelPosition == 'bottom'){\n                if(json.injectReel && json.injectReel.hasOwnProperty(i)){\n                    reel.push(json.injectReel[i][0]);\n                }\n            }\n            if(reelsConfig.extrasReelPosition == 'bottom'){\n                if(json.extrasReel && json.extrasReel.hasOwnProperty(i)){\n                    reel.push(json.extrasReel[i]);\n                }\n            }\n            reels.push(reel);\n        }\n        \n        return reels;\n    }\n    \n    _getMultiplierBonus(scope){\n        let win = 0;\n        let json = scope || this.ReelsManager.getResponse();\n        \n        if(json.multiplier && json.multiplier.totalWinning){\n            win = json.multiplier.totalWinning;\n        }else if(json.instantWin && json.instantWin.total){\n            win = json.instantWin.total;\n        }\n        \n        return win*1;\n    }\n    \n    _getFreeSpins(spins, gameType = 'FS', modifierWin = 0, modifierWinType = 'multiplier'){\n        let ret = [];\n        if (spins) {\n            let index = 0;\n            let spinsLen = spins.length;\n            let lastReels = [];\n            for(let key in spins){\n                let fs = spins[key];\n                let winning = Number(fs.winning || 0);\n                if(fs.hasOwnProperty('win') && fs.win.winning){\n                    winning = fs.win.winning;\n                }\n                let spin = {winDetails:{}};\n                let ReelsManager = this._Manager();\n                if(this.isMWG){\n                    ReelsManager.setResponse({ success: 0, result: {game:{mwg:{}}} });\n                }else{\n                    ReelsManager.setResponse({ success: 0, result: {game:{nsp:{}}} });\n                }\n                if(fs.hasOwnProperty('reels') && ret.length){\n                    for(let k in fs.reels){\n                        let reel = fs.reels[k];\n                        if(!reel.length && typeof lastReels[k] != 'undefined'){\n                            fs.reels[k] = $.extend([], lastReels[k]);\n                        }\n                    }\n                }\n                \n                lastReels = fs.reels;\n                ReelsManager.setGameData(fs);\n                \n                spin.type = ++index;\n                \n                let otherWins = this._getOtherWins(fs, !this._gameConfig.Reels.noTilesModAccumulate && (this._gameConfig.Reels.reelTypeFS == 'collectorReel' || key >= (spinsLen-1)));\n\n                let multiplier = Number.isInteger(fs.multiplier) ? fs.multiplier:1;\n                spin.winLines = this._getWinLines(this.stake, ReelsManager, multiplier);\n                spin.amount = winning*1 + otherWins.win*1;\n                spin.reels = this._getReels(ReelsManager, gameType);\n                spin.respins = this._getFreeSpins((fs.reactions || []), gameType);\n                if(modifierWin > 0 && key == (spinsLen-1)){\n                    // otherWins.types.push({type: modifierWinType, amount: modifierWin});\n                    spin.amount += modifierWin*1;\n                }\n                spin.otherWins = otherWins.types;\n                spin.type = ++this.freespin_id;\n\n\n                ret.push(spin);\n            }\n        }\n        \n        return ret;\n    }\n    \n    _getOtherWins(game, accumulate = true){\n        let ret = [];\n        let win = 0;\n        let bonusType = ['ElephantTreasure','ChineseWilds'].indexOf(this.gameId) > -1 ? 'instantWin' : 'multiplier';\n        let g = game.nsp || game.mwg || game || {};\n        let multiplierBonusWin = this._getMultiplierBonus(g);\n        \n        if(multiplierBonusWin){\n            win += multiplierBonusWin*1;\n            ret.push({type: bonusType, amount:multiplierBonusWin});\n        }\n\n        if(game.win && game.win.limitedWin){\n            win += game.win.limitedWin*1;\n            ret.push({type:'limitedWin', amount:game.win.limitedWin});\n        }\n\n        let expand = g.expandTileOverlayWin;\n        if(expand && +expand.winning > 0){\n            win += expand.winning*1;\n            ret.push({type:'modifierWin', amount:expand.winning});\n        }else if(g.expand && g.expand.length){\n            g.expand.forEach(expand=>{\n                win += expand.win.winning*1;\n                ret.push({type:'modifierWin', amount:expand.win.winning});\n            });\n        }\n\n        if(g.hasOwnProperty('tilesMod') && accumulate){\n            for(let id in g.tilesMod){\n                let c = g.tilesMod[id];\n                let value = Number(c.value || 0);\n                //Extras reel\n                if(id.match(/[a-z]/i)){\n                    let oldValue = Number(g.tiles[id].value || 0);\n                    if(value > oldValue){\n                        value -= oldValue;\n                        let amount = value * this.stake;\n                        win += amount;\n                        ret.push({type:'modifierWin', amount});\n                    }\n                    continue;\n                }\n                if(c.action!='ways' && value > 0){\n                    let amount = value * this.stake;\n                    win += amount;\n                    ret.push({type:'modifierWin', amount});\n                }\n            }\n        }\n\n        if(g.hasOwnProperty('winAmounts')){\n            g.winAmounts.forEach(v => {\n                let amount = v.value * this.stake;\n                win += amount;\n                ret.push({type:'modifierWin', amount});\n            });\n        }\n\n        if(g.cashCollector){\n            g.cashCollector.forEach(c =>{\n                win += c.win.winning*1;\n                ret.push({type:'modifierWin', amount:c.win.winning});\n            });\n        }\n\n        if(g.cashCollector){\n            g.cashCollector.forEach(c =>{\n                win += c.win.winning*1;\n                ret.push({type:'modifierWin', amount:c.win.winning});\n            });\n        }\n        \n        if(g.cashPotsAfter){\n            g.cashPotsAfter.forEach(amount =>{\n                ret.push({type:'multiplier', amount: amount * this.stake});\n            });\n        }\n        \n        return {types: ret, win: win};\n    }\n    \n    _getJackpotsWin(jackpots){\n        var ret = [];\n        if(jackpots && jackpots.pots){\n            jackpots.pots.forEach(function(pot){\n                if (pot.win > 0) {\n                    ret.push({ type: pot.id, amount: pot.win });\n                }\n            });\n        }\n\n        return ret;\n    }\n\n\tparse(gameId, serverData) {\n\t\tif (!this._gameConfig) {\n\t\t\tconsole.warn(`No game installed: ${gameId}`);\n\t\t\treturn;\n        }\n        this.gameId = gameId;\n        let res = {};\n\t\tlet transactions;\n        if(serverData.responses){\n            res = serverData.responses[0];\n            transactions = serverData.transactions;\n        }else\n        if(serverData.result.history.responses){\n            res = serverData.result.history.responses[0];\n\t\t    transactions = serverData.result.history.transactions;\n        }else{\n            res = serverData.result.history;\n            transactions = serverData.result.history.transactions;\n        }\n\n\t\tlet json = { success: 0, result: res };\n\t\tlet game = json.result.game;\n        let user = json.result.user;\n        let gameResult = json.result.game.nsp || json.result.game.mwg;\n        \n        this.stake = game.win.stake || game.stake;\n        this.isMWG = !!json.result.game.mwg;\n\t\tthis.ReelsManager = this._Manager();\n\t\tthis.ReelsManager.setResponse(json);\n\t\tthis.ReelsManager.setGameData(gameResult);\n\n        let jackpots = this.ReelsManager.getResponse(true).result.jackpots;\n\t\tlet totalWin = Number(game.win.total)+Number((jackpots||{win:0}).win);\n\n\t\tlet history = {\n\t\t\tgameDetails: {\n\t\t\t\tgameId,\n\t\t\t\troundId: transactions.roundId,\n\t\t\t\tprevRoundId: transactions.prevRoundId,\n\t\t\t\tnextRoundId: transactions.nextRoundId,\n\t\t\t\tserverTimeStart: transactions.startTime,\n\t\t\t\tserverTimeEnd: transactions.endTime,\n\t\t\t},\n\t\t\ttransactions: {\n\t\t\t\ttotalBet: Number(this.stake),\n\t\t\t\ttotalWin,\n                featureBuyCost: gameResult.featureBuy ? gameResult.featureBuy.price*this.stake : undefined,\n\t\t\t\tfeatureBuyName: gameResult.featureBuy ? gameResult.featureBuy.name : undefined,\n\t\t\t\tbalance: {\n                    cash: user.balance.cash,\n                    freeBets: user.balance.freeBets,\n                    sessionCash: user.balance.sessionCash,\n\t\t\t\t\tsessionFreeBets: user.balance.sessionFreeBets,\n\t\t\t\t\tbonus: user.balance.bonus\n                }\n\t\t\t},\n\t\t\treels: this._getReels(),\n            regulations: json.result.regulations,\n            promo: json.result.promo\n\t\t};\n\n        let multiplier = Number.isInteger(this.ReelsManager.getResponse().multiplier) ? this.ReelsManager.getResponse().multiplier:1;\n        let winLines = this._getWinLines(this.stake, this.ReelsManager, multiplier);\n        let totalWinLines = 0;\n        let win_correction = Math.round(game.win.total * 100 + (jackpots?jackpots.win*100:0)) - Math.round(totalWin * 100);\n        let response = this.ReelsManager.getResponse();\n        let collector = null\n        let bundleSpins = null;\n\n        if(this._gameConfig.Reels.reelType == 'collector' || this._gameConfig.Reels.reelTypeFS == 'collector'){\n            if(response.collector && response.collector.spins){\n                response.collector.spins.forEach(spin => {\n                    for(let i=0, l=this._gameConfig.Reels.rows*this._gameConfig.Reels.cols;i<l;i++){\n                        if( ! spin.reels[i]){\n                            spin.reels[i] = response.collector.screen[i];\n                        }\n                    }\n                });\n                collector = response.collector;\n            }\n        }\n\n        if(this._gameConfig.Reels.reelTypeFS == 'collectorReel'){\n            collector = response.collector;\n        }\n\n        if(gameResult.spins){\n            bundleSpins = gameResult;\n        }\n\n\t\t$.extend(history, { winDetails: {\n            winLines: winLines,\n            initialLinesWin: totalWinLines,\n\t\t\tfreeSpins: [].concat(\n                            this._getFreeSpins((response.freeSpins || response.respins || bundleSpins || collector || {spins: []}).spins),\n                            this._getFreeSpins((response.collectorFreeSpins || {spins: []}).spins, 'collectorFreeSpins', (response.collectorFreeSpins ? response.collectorFreeSpins.collectorFreeSpinWinning : 0))\n                        ),\n            respins: this._getFreeSpins((response.reactions || []), 'main'),\n\t\t\totherWins: this._getOtherWins(json.result.game).types,\n\t\t\tjackpotWins: this._getJackpotsWin(jackpots),\n\t\t\ttotalWinCorrection: win_correction ? win_correction/100: null,\n\t\t\ttotalWin: parseFloat(totalWin).toFixed(2),\n\t\t},\n\t\t});\n\n\t\treturn history;\n\t}\n}\n\nmodule.exports = NSGParser;","const NSGSlotParser = require('./NSGSlotParser');\nconst LeprechaunsMagicSlotParser = require('./games/LeprechaunsMagicSlotParser');\nconst GoldenLampsSlotParser = require('./games/GoldenLampsSlotParser');\nconst GoldenToadSlotParser = require('./games/GoldenToadSlotParser');\nconst NeptunesRichesSlotParser = require('./games/NeptunesRichesSlotParser');\nconst ChineseWildsSlotParser = require('./games/ChineseWildsSlotParser');\nconst ElephantTreasureSlotParser = require('./games/ElephantTreasureSlotParser');\nconst RedHotSlotSlotParser = require('./games/RedHotSlotSlotParser');\nconst MacauRacingSlotParser = require('./games/MacauRacingSlotParser');\nconst LuckyCarnivalSlotParser = require('./games/LuckyCarnivalSlotParser');\nconst AsianFortuneSlotParser = require('./games/AsianFortuneSlotParser');\nconst DragonPearlSlotParser = require('./games/DragonPearlSlotParser');\nconst AliBabasLuckSlotParser = require('./games/AliBabasLuckSlotParser');\nconst CasinoSpinSlotParser = require('./games/CasinoSpinSlotParser');\nconst LeprechaunsMagicMegawaysSlotParser = require('./games/LeprechaunsMagicMegawaysSlotParser');\nconst AliBabasLuckMegawaysSlotParser = require('./games/AliBabasLuckMegawaysSlotParser');\nconst AliBabasLuckPowerReelsSlotParser = require('./games/AliBabasLuckPowerReelsSlotParser');\nconst LeprechaunsMagicPowerReelsSlotParser = require('./games/LeprechaunsMagicPowerReelsSlotParser');\nconst CobraQueenSlotParser = require('./games/CobraQueenSlotParser');\nconst DreamDestinySlotParser = require('./games/DreamDestinySlotParser');\nconst AmazonIslandMegaWaysSlotParser = require('./games/AmazonIslandMegaWaysSlotParser');\nconst EpicTreasureSlotParser = require('./games/EpicTreasureSlotParser');\nconst EpicTreasure2SlotParser = require('./games/EpicTreasure2SlotParser');\nconst EightysSpinsSlotParser = require('./games/EightysSpinsSlotParser');\nconst WantedWildzSlotParser = require('./games/WantedWildzSlotParser');\nconst WantedWildzExtremeSlotParser = require('./games/WantedWildzExtremeSlotParser');\nconst CottonGangAffairSlotParser = require('./games/CottonGangAffairSlotParser');\nconst DesertLegendsSpinsSlotParser = require('./games/DesertLegendsSpinsSlotParser');\nconst JellyMULTIHOPSSlotParser = require('./games/JellyMULTIHOPSSlotParser');\nconst SeaBoatAdventureSlotParser = require('./games/SeaBoatAdventureSlotParser');\nconst NightmareFamilyMegaWaysSlotParser = require('./games/NightmareFamilyMegaWaysSlotParser');\nconst ChristmasMULTIHOPSSlotParser = require('./games/ChristmasMULTIHOPSSlotParser');\nconst MidnightThirstSlotParser = require('./games/MidnightThirstSlotParser');\nconst DrFrancashsteinSlotParser = require('./games/DrFrancashsteinSlotParser');\nconst DontHitPlzSlotParser = require('./games/DontHitPlzSlotParser');\nconst SwordStompSlotParser = require('./games/SwordStompSlotParser');\nconst PurrPowerSlotParser = require('./games/PurrPowerSlotParser');\nconst GlowDigSlotParser = require('./games/GlowDigSlotParser');\nconst LosMuertosLocosSlotParser = require('./games/LosMuertosLocosSlotParser');\nconst RumbleMuttsSlotParser = require('./games/RumbleMuttsSlotParser');\nconst SeaBoatAdventureMegaWaysSlotParser = require('./games/SeaBoatAdventureMegaWaysSlotParser');\nconst FishNFishSlotParser = require('./games/FishNFishSlotParser');\nconst AztecShamansMegaWaysSlotParser = require('./games/AztecShamansMegaWaysSlotParser');\nconst ArcOfZeusSlotParser = require('./games/ArcOfZeusSlotParser');\n/**\n * NSGSlotParserFactory.\n *\n * @class\n */\nclass NSGSlotParserFactory {\n\tconstructor() {\n\t\t/** @type {Object} Game specific parsers */\n\t\tthis.parsers = {\n\t\t\tLeprechaunsMagic: LeprechaunsMagicSlotParser,\n\t\t\tGoldenLamps: GoldenLampsSlotParser,\n            GoldenToad: GoldenToadSlotParser,\n            NeptunesRiches: NeptunesRichesSlotParser,\n            ChineseWilds: ChineseWildsSlotParser,\n            ElephantTreasure: ElephantTreasureSlotParser,\n            RedHotSlot: RedHotSlotSlotParser,\n            MacauRacing: MacauRacingSlotParser,\n\t\t\tLuckyCarnival: LuckyCarnivalSlotParser,\n\t\t\tAsianFortune: AsianFortuneSlotParser,\n\t\t\tDragonPearl: DragonPearlSlotParser,\n\t\t\tAliBabasLuck: AliBabasLuckSlotParser,\n\t\t\tCasinoSpin: CasinoSpinSlotParser,\n\t\t\tLeprechaunsMagicMegaways: LeprechaunsMagicMegawaysSlotParser,\n\t\t\tLeprechaunsMagicPowerReels: LeprechaunsMagicPowerReelsSlotParser,\n\t\t\tAliBabasLuckMegaways: AliBabasLuckMegawaysSlotParser,\n\t\t\tAliBabasLuckPowerReels: AliBabasLuckPowerReelsSlotParser,\n\t\t\tCobraQueen: CobraQueenSlotParser,\n\t\t\tDreamDestiny: DreamDestinySlotParser,\n\t\t\tAmazonIslandMegaWays: AmazonIslandMegaWaysSlotParser,\n\t\t\tEpicTreasure: EpicTreasureSlotParser,\n\t\t\t'80sSpins': EightysSpinsSlotParser,\n\t\t\tWantedWildz: WantedWildzSlotParser,\n\t\t\tWantedWildzExtreme: WantedWildzExtremeSlotParser,\n\t\t\tCottonGangAffair: CottonGangAffairSlotParser,\n\t\t\tDesertLegendsSpins: DesertLegendsSpinsSlotParser,\n\t\t\tJellyMULTIHOPS: JellyMULTIHOPSSlotParser,\n\t\t\tSeaBoatAdventure: SeaBoatAdventureSlotParser,\n\t\t\tNightmareFamilyMegaWays: NightmareFamilyMegaWaysSlotParser,\n\t\t\tChristmasMULTIHOPS: ChristmasMULTIHOPSSlotParser,\n\t\t\tMidnightThirst: MidnightThirstSlotParser,\n\t\t\tDrFrancashstein: DrFrancashsteinSlotParser,\n\t\t\tDontHitPlz: DontHitPlzSlotParser,\n\t\t\tSwordStomp: SwordStompSlotParser,\n\t\t\tPurrPower: PurrPowerSlotParser,\n\t\t\tEpicTreasure2: EpicTreasure2SlotParser,\n\t\t\tGlowDig: GlowDigSlotParser,\n\t\t\tLosMuertosLocos: LosMuertosLocosSlotParser,\n\t\t\tSeaBoatAdventureMegaWays: SeaBoatAdventureMegaWaysSlotParser,\n\t\t\tFishNFish: FishNFishSlotParser,\n\t\t\tRumbleMutts: RumbleMuttsSlotParser,\n\t\t\tAztecShamansMegaWays: AztecShamansMegaWaysSlotParser,\n\t\t\tArcOfZeus: ArcOfZeusSlotParser\n\t\t};\n\t}\n\n\t/**\n\t * Creates an appropriate parser instance for the specified game id\n\t * Game specific parsers are preferred, default parser is used if one is not found\n\t * @param  {String} gameId The game id\n\t * @return {NSGSlotParser} The slot parser instance\n\t */\n\tcreateParser(gameId) {\n\t\tif (gameId in this.parsers) {\n\t\t\treturn new this.parsers[gameId]();\n\t\t}\n\n\t\treturn new NSGSlotParser();\n\t}\n}\n\nmodule.exports = NSGSlotParserFactory;\n","const NSGSlotParser = require('../NSGSlotParser');\n\nclass AliBabasLuckMegawaysSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n            Reels:{\n                ways:{\n                    min: 2,\n                    max: 5\n                },\n                cols: 6,\n                translateTile:[]\n            }\n        });\n\t}\n}\n\nmodule.exports = AliBabasLuckMegawaysSlotParser;","const NSGSlotParser = require('../NSGSlotParser');\n\nclass AliBabasLuckPowerReelsSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n            Reels:{\n                rows: 6,\n                cols: 8,\n                SCREEN_INDEX:11,\n                translateTile:['S'],\n                reelType: 'multi',\n                lineIds:this.gameLines.AliBabasLuckPowerReels,\n                linesMap: {\n                    '66666666': [6,6,6,6,6,6,6,6],\n                    '77777777': [7,7,7,7,7,7,7,7],\n                    '88888888': [8,8,8,8,8,8,8,8],\n                    '99999999': [9,9,9,9,9,9,9,9],\n                    '1010101010101010': [10,10,10,10,10,10,10,10],\n                    '1111111111111111': [11,11,11,11,11,11,11,11],\n                    '67676767': [6,7,6,7,6,7,6,7],\n                    '78787878': [7,8,7,8,7,8,7,8],\n                    '89898989': [8,9,8,9,8,9,8,9],\n                    '910910910910': [9,10,9,10,9,10,9,10],\n                    '1011101110111011': [10,11,10,11,10,11,10,11],\n                    '76767676': [7,6,7,6,7,6,7,6],\n                    '87878787': [8,7,8,7,8,7,8,7],\n                    '98989898': [9,8,9,8,9,8,9,8],\n                    '109109109109': [10,9,10,9,10,9,10,9],\n                    '1110111011101110': [11,10,11,10,11,10,11,10],\n                    '67891011109': [6,7,8,9,10,11,10,9],\n                    '78910111098': [7,8,9,10,11,10,9,8],\n                    '89101110987': [8,9,10,11,10,9,8,7],\n                    '91011109876': [9,10,11,10,9,8,7,6],\n                    '10111098767': [10,11,10,9,8,7,6,7],\n                    '1110987678': [11,10,9,8,7,6,7,8],\n                    '109876789': [10,9,8,7,6,7,8,9],\n                    '987678910': [9,8,7,6,7,8,9,10],\n                    '8767891011': [8,7,6,7,8,9,10,11],\n                    '76789101110': [7,6,7,8,9,10,11,10],\n                    '6667891011': [6,6,6,7,8,9,10,11],\n                    '7777891010': [7,7,7,7,8,9,10,10],\n                    '101010109877': [10,10,10,10,9,8,7,7],\n                    '111111109876': [11,11,11,10,9,8,7,6],\n                }\n            }\n        });\n\t}\n}\n\nmodule.exports = AliBabasLuckPowerReelsSlotParser;","const NSGSlotParser = require('../NSGSlotParser');\n\nclass AliBabasLuckSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n            Reels:{\n                rows:3,\n                cols:5,\n                lineIds:this.gameLines.AliBabasLuck,\n                SCREEN_INDEX:5,\n                translateTile:['S']\n            }\n        });\n\t}\n}\n\nmodule.exports = AliBabasLuckSlotParser;\n","const NSGSlotParser = require('../NSGSlotParser');\n\nclass AmazonIslandMegaWaysSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        this.setGameConfig({\n            Reels:{\n                ways:{\n                    min: 2,\n                    max: 7\n                },\n                cols: 6,\n                translateTile:[],\n                injectReel: [1,2,3,4],\n                injectReelPosition: 'top'\n            }\n        });\n\t}\n}\n\nmodule.exports = AmazonIslandMegaWaysSlotParser;","const NSGSlotParser = require('../NSGSlotParser');\n\nclass ArcOfZeusSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n            Reels:{\n                cols: 6,\n                rows: 5,\n                reactions: true,\n                translateTile:[],\n                screens: 2,\n                reelType:'block',\n                reelTypeFS: 'collectorReel',\n                noTilesModAccumulate: true,\n                flip: true\n            }\n        });\n\t}\n}\n\nmodule.exports = ArcOfZeusSlotParser;","const NSGSlotParser = require('../NSGSlotParser');\n\nclass AsianFortuneSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n                Reels:{\n                    rows:3,\n                    cols:5,\n                    lineIds:this.gameLines.AsianFortune,\n                    SCREEN_INDEX:5,\n                    translateTile:['S']\n            }\n        });\n\t}\n}\n\nmodule.exports = AsianFortuneSlotParser;\n","\nconst NSGSlotParser = require('../NSGSlotParser');\n\nclass AztecShamansMegaWaysSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        this.setGameConfig({\n            Reels:{\n                ways:{\n                    min: 2,\n                    max: 7\n                },\n                cols: 6,\n                reelTypeFS: 'collectorReel',\n                translateTile:[]\n            }\n        });\n\t}\n}\n\nmodule.exports = AztecShamansMegaWaysSlotParser;","const NSGSlotParser = require('../NSGSlotParser');\n\nclass CasinoSpinSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n            Reels:{\n                rows:3,\n                cols:5,\n                lineIds:this.gameLines.CasinoSpin,\n                SCREEN_INDEX:5,\n                translateTile:['S']\n            }\n        });\n\t}\n}\n\nmodule.exports = CasinoSpinSlotParser;\n","const NSGSlotParser = require('../NSGSlotParser');\n\nclass ChineseWildsSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n            Reels:{\n                rows:4,\n                cols:5,\n                lineIds:this.gameLines.ChineseWilds,\n                SCREEN_INDEX:7,\n                translateTile:['S','W','O']\n            }\n        });\n\t}\n}\n\nmodule.exports = ChineseWildsSlotParser;\n","const NSGSlotParser = require('../NSGSlotParser');\n\nclass ChristmasMULTIHOPSSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n            Reels:{\n                cols: 7,\n                rows: 7,\n                reactions: true,\n                translateTile:['W'],\n                screens: 2,\n                reelType:'block',\n                flip: true,\n                tileParse: tile => tile[0] === 'W' ? 'W' : tile\n            }\n        });\n\t}\n}\n\nmodule.exports = ChristmasMULTIHOPSSlotParser;","const NSGSlotParser = require('../NSGSlotParser');\r\n\r\nclass CobraQueenSlotParser extends NSGSlotParser {\r\n\tconstructor() {\r\n        super();\r\n        \r\n        this.setGameConfig({\r\n            Reels:{\r\n                rows:3,\r\n                cols:5,\r\n                lineIds:this.gameLines.CobraQueen,\r\n                SCREEN_INDEX:5,\r\n                translateTile:['S']\r\n            }\r\n        });\r\n\t}\r\n}\r\n\r\nmodule.exports = CobraQueenSlotParser;","const NSGSlotParser = require('../NSGSlotParser');\n\nclass GottonGangAffairSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n            Reels:{\n                rows: 3,\n                cols: 5,\n                ways: true,\n                SCREEN_INDEX:5,\n                translateTile:['W'],\n                reelType: 'multi'\n            }\n        });\n\t}\n}\n\nmodule.exports = GottonGangAffairSlotParser;","const NSGSlotParser = require('../NSGSlotParser');\n\nclass DesertLegendsSpinsSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n            Reels:{\n                rows:3,\n                cols:5,\n                lineIds:this.gameLines.DesertLegendsSpins,\n                reelType: 'multi',\n                SCREEN_INDEX:5,\n                translateTile:['S']\n            }\n        });\n\t}\n}\n\nmodule.exports = DesertLegendsSpinsSlotParser;\n","const NSGSlotParser = require('../NSGSlotParser');\n\nclass DontHitPlzSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n            Reels:{\n                cols: 5,\n                rows: 5,\n                reactions: true,\n                translateTile:[],\n                screens: 2,\n                reelType:'block',\n                flip: true,\n                // tileParse: tile => tile[0] === 'W' ? 'W' : tile,\n                collectorFreeSpins: {\n                    rows: 5,\n                    cols: 5,\n                    reelType: 'multi',\n                    SCREEN_INDEX: 5\n                }\n            }\n        });\n\t}\n}\n\nmodule.exports = DontHitPlzSlotParser;","const NSGSlotParser = require('../NSGSlotParser');\n\nclass DrFrancashsteinSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n            Reels:{\n                cols: 7,\n                rows: 5,\n                reactions: true,\n                translateTile:['W'],\n                screens: 2,\n                reelType:'block',\n                flip: true,\n                tileParse: tile => tile[0] === 'W' ? 'W' : tile\n            }\n        });\n\t}\n}\n\nmodule.exports = DrFrancashsteinSlotParser;","const NSGSlotParser = require('../NSGSlotParser');\n\nclass DragonPearlSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n            flippedReels:true,\n            Reels:{\n                rows:5,\n                cols:3,\n                lineIds:this.gameLines.DragonPearl,\n                SCREEN_INDEX:9,\n                translateTile:['X'],\n                offsets: 1\n            },\n        });\n\t}\n}\n\nmodule.exports = DragonPearlSlotParser;\n","const NSGSlotParser = require('../NSGSlotParser');\n\nclass DreamDestinySlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n            Reels:{\n                rows:3,\n                cols:5,\n                lineIds:this.gameLines.DreamDestiny,\n                SCREEN_INDEX:5,\n                translateTile:['S']\n            }\n        });\n\t}\n}\n\nmodule.exports = DreamDestinySlotParser;\n","const NSGSlotParser = require('../NSGSlotParser');\n\nclass EightysSpinsSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        this.setGameConfig({\n            Reels:{\n                rows: 5,\n                cols: 5,\n                translateTile:[],\n                SCREEN_INDEX: 0,\n                ways: {\n                    min: 5,\n                    max: 5\n                },\n                Y2X: true,\n                remapBonusSymbols:{M:'CM'},\n                reelType: 'multi',\n                reelTypeFS: 'collector',\n\n                Manager: function(_config){\n                        let _response;\n                        let manager = {\n                            getTile:(x, y, fs=false) => {\n                                let ret = false;\n                                let json = manager.getResponse();\n                                \n                                if (json.reels) {\n                                    if(fs){\n                                        y = json.reels[x].length - 1 - y;\n                                        ret = json.reels[y][x];\n                                    }else{\n                                        ret = json.reels[y][x];\n                                    }\n                                }\n                                \n                                return ret;\n                            },\n                            \n                            setResponse:function(json){\n                              _response = json;\n                              return manager;\n                            },\n                            \n                            setGameData:function(data){\n                              $.extend((_response.result.game.nsp || _response.result.game.mwg || {}),data);\n                            },\n                            \n                            getResponse:function(raw){\n                              try{\n                                return (raw?_response:_response.result.game.nsp || _response.result.game.mwg) || {};\n                              }catch(e){\n                                return {};\n                              }\n                            },\n                            \n                            getLines:function(){\n                                try{\n                                    let response = manager.getResponse();\n                                    let ways = (response.lines || response.multiWays);\n                                    if(!ways && response.win && response.win.ways){\n                                        ways = response.win.ways;\n                                    }\n                                    return ways;\n                                }catch(e){\n                                    return [];\n                                }\n                            }\n                        }\n\n                        return manager;\n                    }\n            }\n        });\n\t}\n}\n\nmodule.exports = EightysSpinsSlotParser;","const NSGSlotParser = require('../NSGSlotParser');\n\nclass ElephantTreasureSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n                Reels:{\n                    rows:3,\n                    cols:5,\n                    lineIds:this.gameLines.ElephantTreasure,\n                    SCREEN_INDEX:5,\n                    translateTile:['S','W','O','U']\n            }\n        });\n\t}\n}\n\nmodule.exports = ElephantTreasureSlotParser;\n","const NSGSlotParser = require('../NSGSlotParser');\n\nclass EpicTreasure2SlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        this.setGameConfig({\n            Reels:{\n                rows: 5,\n                cols: 5,\n                translateTile:[],\n                SCREEN_INDEX: 0,\n                lineIds:this.gameLines.EpicTreasure2,\n                reelType: 'collector'\n            }\n        });\n\t}\n}\n\nmodule.exports = EpicTreasure2SlotParser;","const NSGSlotParser = require('../NSGSlotParser');\n\nclass EpicTreasureSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        this.setGameConfig({\n            Reels:{\n                rows: 5,\n                cols: 5,\n                translateTile:[],\n                SCREEN_INDEX: 0,\n                lineIds:this.gameLines.EpicTreasure,\n                reelType: 'collector'\n            }\n        });\n\t}\n}\n\nmodule.exports = EpicTreasureSlotParser;","const NSGSlotParser = require('../NSGSlotParser');\n\nclass FishNFishSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n            Reels:{\n                rows: 4,\n                cols: 5,\n                translateTile:['S'],\n                screenType:2,\n                SCREEN_INDEX:3,\n                reelType: 'multi',\n                reelTypeFS: 'collectorReel',\n                lineIds:this.gameLines.FishNFish,\n                extrasReel: [0,1,2,3,4],\n                extrasReelPosition: 'top'\n            }\n        });\n\t}\n}\n\nmodule.exports = FishNFishSlotParser;","const NSGSlotParser = require('../NSGSlotParser');\n\nclass GlowDigSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n            Reels:{\n                rows: 4,\n                cols: 5,\n                translateTile:['S'],\n                screenType:2,\n                SCREEN_INDEX:3,\n                reelType: 'multi',\n                reelTypeFS: 'collectorReel',\n                lineIds:this.gameLines.GlowDig,\n                extrasReel: [0,1,2,3,4],\n                extrasReelPosition: 'top'\n            }\n        });\n\t}\n}\n\nmodule.exports = GlowDigSlotParser;","const NSGSlotParser = require('../NSGSlotParser');\n\nclass GoldenLampsSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n            flippedReels:true,\n            Reels:{\n                rows:3,\n                cols:5,\n                lineIds:this.gameLines.GoldenLamps,\n                SCREEN_INDEX:0,\n                translateTile:['S','W']\n            }\n        });\n\t}\n}\n\nmodule.exports = GoldenLampsSlotParser;\n","const NSGSlotParser = require('../NSGSlotParser');\n\nclass GoldenToadSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n            Reels:{\n                rows:3,\n                cols:5,\n                lineIds: this.gameLines.GoldenToad,\n                SCREEN_INDEX:5,\n                translateTile:['S','W','V','U']\n            }\n        });\n\t}\n}\n\nmodule.exports = GoldenToadSlotParser;\n","const NSGSlotParser = require('../NSGSlotParser');\n\nclass JellyMULTIHOPSSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n            Reels:{\n                cols: 7,\n                rows: 7,\n                reactions: true,\n                translateTile:['W'],\n                screens: 2,\n                reelType:'block',\n                flip: true,\n                tileParse: tile => tile[0] === 'W' ? 'W' : tile\n            }\n        });\n\t}\n}\n\nmodule.exports = JellyMULTIHOPSSlotParser;","const NSGSlotParser = require('../NSGSlotParser');\n\nclass LeprechaunsMagicMegawaysSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n            Reels:{\n                ways:{\n                    min: 2,\n                    max: 5\n                },\n                cols: 6,\n                translateTile:[]\n            }\n        });\n\t}\n}\n\nmodule.exports = LeprechaunsMagicMegawaysSlotParser;","const NSGSlotParser = require('../NSGSlotParser');\n\nclass LeprechaunsMagicPowerReelsSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n            Reels:{\n                rows: 6,\n                cols: 8,\n                SCREEN_INDEX:11,\n                translateTile:['S'],\n                reelType: 'multi',\n                lineIds:this.gameLines.LeprechaunsMagicPowerReels,\n                linesMap: {\n                    '66666666': [6,6,6,6,6,6,6,6],\n                    '77777777': [7,7,7,7,7,7,7,7],\n                    '88888888': [8,8,8,8,8,8,8,8],\n                    '99999999': [9,9,9,9,9,9,9,9],\n                    '1010101010101010': [10,10,10,10,10,10,10,10],\n                    '1111111111111111': [11,11,11,11,11,11,11,11],\n                    '67676767': [6,7,6,7,6,7,6,7],\n                    '78787878': [7,8,7,8,7,8,7,8],\n                    '89898989': [8,9,8,9,8,9,8,9],\n                    '910910910910': [9,10,9,10,9,10,9,10],\n                    '1011101110111011': [10,11,10,11,10,11,10,11],\n                    '76767676': [7,6,7,6,7,6,7,6],\n                    '87878787': [8,7,8,7,8,7,8,7],\n                    '98989898': [9,8,9,8,9,8,9,8],\n                    '109109109109': [10,9,10,9,10,9,10,9],\n                    '1110111011101110': [11,10,11,10,11,10,11,10],\n                    '67891011109': [6,7,8,9,10,11,10,9],\n                    '78910111098': [7,8,9,10,11,10,9,8],\n                    '89101110987': [8,9,10,11,10,9,8,7],\n                    '91011109876': [9,10,11,10,9,8,7,6],\n                    '10111098767': [10,11,10,9,8,7,6,7],\n                    '1110987678': [11,10,9,8,7,6,7,8],\n                    '109876789': [10,9,8,7,6,7,8,9],\n                    '987678910': [9,8,7,6,7,8,9,10],\n                    '8767891011': [8,7,6,7,8,9,10,11],\n                    '76789101110': [7,6,7,8,9,10,11,10],\n                    '6667891011': [6,6,6,7,8,9,10,11],\n                    '7777891010': [7,7,7,7,8,9,10,10],\n                    '101010109877': [10,10,10,10,9,8,7,7],\n                    '111111109876': [11,11,11,10,9,8,7,6],\n                }\n            }\n        });\n\t}\n}\n\nmodule.exports = LeprechaunsMagicPowerReelsSlotParser;","const NSGSlotParser = require('../NSGSlotParser');\n\nclass LeprechaunsMagicSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n            Reels:{\n                rows:3,\n                cols:5,\n                lineIds:this.gameLines.LeprechaunsMagic,\n                SCREEN_INDEX:5,\n                translateTile:['S']\n            }\n        });\n\t}\n}\n\nmodule.exports = LeprechaunsMagicSlotParser;\n","const NSGSlotParser = require('../NSGSlotParser');\n\nclass LosMuertosLocosSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n            Reels:{\n                rows: 4,\n                cols: 5,\n                SCREEN_INDEX:7,\n                translateTile:['W','S'],\n                reelType: 'multi',\n                lineIds:this.gameLines.LosMuertosLocos,\n            }\n        });\n\t}\n}\n\nmodule.exports = LosMuertosLocosSlotParser;","const NSGSlotParser = require('../NSGSlotParser');\n\nclass LuckyCarnivalSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n                Reels:{\n                    rows:3,\n                    cols:5,\n                    lineIds:this.gameLines.LuckyCarnival,\n                    SCREEN_INDEX:5,\n                    translateTile:['S']\n            }\n        });\n\t}\n}\n\nmodule.exports = LuckyCarnivalSlotParser;\n","const NSGSlotParser = require('../NSGSlotParser');\n\nclass MacauRacingSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n                Reels:{\n                    rows:3,\n                    cols:5,\n                    lineIds:this.gameLines.MacauRacing,\n                    SCREEN_INDEX:5,\n                    translateTile:['S','U','W']\n            }\n        });\n\t}\n}\n\nmodule.exports = MacauRacingSlotParser;\n","const NSGSlotParser = require('../NSGSlotParser');\n\nclass MidnightThirstSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n            Reels:{\n                cols: 5,\n                rows: 4,\n                reactions: true,\n                translateTile:[],\n                screens: 2,\n                reelType:'block',\n                flip: true,\n            }\n        });\n\t}\n}\n\nmodule.exports = MidnightThirstSlotParser;","const NSGSlotParser = require('../NSGSlotParser');\n\nclass NeptunesRichesSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n            Reels:{\n                rows:3,\n                cols:5,\n                lineIds:this.gameLines.NeptunesRiches,\n                SCREEN_INDEX:5,\n                translateTile:['S','W']\n            }\n        });\n\t}\n}\n\nmodule.exports = NeptunesRichesSlotParser;\n","const NSGSlotParser = require('../NSGSlotParser');\n\nclass NightmareFamilyMegaWaysSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        this.setGameConfig({\n            Reels:{\n                ways:{\n                    min: 2,\n                    max: 7\n                },\n                cols: 6,\n                translateTile:[],\n                injectReel: [1,2,3,4],\n                injectReelPosition: 'top'\n            }\n        });\n\t}\n}\n\nmodule.exports = NightmareFamilyMegaWaysSlotParser;","const NSGSlotParser = require('../NSGSlotParser');\n\nclass PurrPowerSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n            Reels:{\n                cols: 5,\n                rows: 6,\n                reactions: true,\n                translateTile:[],\n                screens: 2,\n                reelType:'block',\n                reelTypeFS:'collector',\n                flip: true\n            }\n        });\n\t}\n}\n\nmodule.exports = PurrPowerSlotParser;","const NSGSlotParser = require('../NSGSlotParser');\n\nclass RedHotSlotSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n                Reels:{\n                    rows:3,\n                    cols:5,\n                    lineIds:this.gameLines.RedHotSlot,\n                    SCREEN_INDEX:5,\n                    translateTile:['S','P','W','U','W','Y']\n            }\n        });\n\t}\n}\n\nmodule.exports = RedHotSlotSlotParser;\n","const NSGSlotParser = require('../NSGSlotParser');\n\nclass RumbleMuttsSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n            Reels:{\n                rows: 4,\n                cols: 5,\n                SCREEN_INDEX:7,\n                translateTile:['W','S','B','C'],\n                reelType: 'multi',\n                lineIds:this.gameLines.RumbleMutts,\n                collectorFreeSpins: {\n                    rows: 5,\n                    cols: 5,\n                    reelType: 'multi',\n                    SCREEN_INDEX: 5\n                }\n            }\n        });\n\t}\n}\n\nmodule.exports = RumbleMuttsSlotParser;","\nconst NSGSlotParser = require('../NSGSlotParser');\n\nclass SeaBoatAdventureMegaWaysSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        this.setGameConfig({\n            Reels:{\n                ways:{\n                    min: 2,\n                    max: 7\n                },\n                cols: 6,\n                reelTypeFS: 'collectorReel',\n                translateTile:[]\n            }\n        });\n\t}\n}\n\nmodule.exports = SeaBoatAdventureMegaWaysSlotParser;","const NSGSlotParser = require('../NSGSlotParser');\n\nclass SeaBoatAdventureSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        this.setGameConfig({\n            Reels:{\n                rows: 5,\n                cols: 5,\n                translateTile:[],\n                SCREEN_INDEX: 0,\n                lineIds:this.gameLines.SeaBoatAdventure,\n                reelType: 'collector'\n            }\n        });\n\t}\n}\n\nmodule.exports = SeaBoatAdventureSlotParser;","const NSGSlotParser = require('../NSGSlotParser');\n\nclass SwordStompSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n            Reels:{\n                rows: 3,\n                cols: 5,\n                SCREEN_INDEX:5,\n                translateTile:['W','S'],\n                reelType: 'multi',\n                lineIds:this.gameLines.SwordStomp,\n            }\n        });\n\t}\n}\n\nmodule.exports = SwordStompSlotParser;","const NSGSlotParser = require('../NSGSlotParser');\n\nclass WantedWildzExtremeSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n            Reels:{\n                rows: 3,\n                cols: 5,\n                SCREEN_INDEX:5,\n                translateTile:['W'],\n                reelType: 'multi',\n                lineIds:this.gameLines.WantedWildz,\n            }\n        });\n\t}\n}\n\nmodule.exports = WantedWildzExtremeSlotParser;","const NSGSlotParser = require('../NSGSlotParser');\n\nclass WantedWildzSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n            Reels:{\n                rows: 3,\n                cols: 5,\n                SCREEN_INDEX:5,\n                translateTile:['W'],\n                reelType: 'multi',\n                lineIds:this.gameLines.WantedWildz,\n            }\n        });\n\t}\n}\n\nmodule.exports = WantedWildzSlotParser;","const Handlebars = require('hbsfy/runtime');\nconst Cards = require('../../../../templates/Partials/cards.hbs');\nconst Number = require('../../../../templates/Partials/number.hbs');\nconst InfoRoulette = require('../../../../templates/Partials/infoRoulette.hbs');\nconst KeyValueMap = require('../../../config/KeyValueMap');\nconst DefaultParser = require('../../DefaultParser');\n\n/**\n *\tCayTableParser - this is currently a Parser for both EuropeanRoulette and PuntoBanco.\n *\tTODO: This class will need to be refacoted and made a lot less custom, a base parser similar to the DopSlotParser\n *\tfor Dop table games.\n *\n * @class\n */\nclass CayTableParser extends DefaultParser {\n\tregisterPartials(gameId) {\n\t\tlet partials = CayTableParser._getPartials(gameId);\n\t\tHandlebars.registerPartial('outcome', partials.outcome);\n\t\tHandlebars.registerPartial('info', partials.info);\n\t}\n\n\t/**\n\t *\n\t * @param {String} gameId\n\t * @param {Object} data\n\t * @description parse the actual server data\n\t * @returns {void}\n\t * @private\n\t */\n\tparse(gameId, data) {\n\t\tif (KeyValueMap[gameId] && KeyValueMap[gameId].pre) {\n\t\t\tdata = CayTableParser._mapKeys(KeyValueMap[gameId].pre, data);\n\t\t}\n\n\t\tlet { game, user, promo } = data.responses[0];\n\t\tlet transactions = data.transactions;\n\t\tlet combine = gameId === 'EuropeanRoulette'; // if true combine similar stakes and wins into groups\n\t\tlet actualWins = CayTableParser._filterWins(game); // apparently win of 0 is a thing also handles the case with limited wins\n\t\tlet stake = CayTableParser._extractSubKeys(CayTableParser._parseObject(game.stake, 'Stake', combine));\n\t\tlet wins = CayTableParser._extractSubKeys(CayTableParser._parseObject(actualWins, 'Win', combine));\n\n\t\tlet history = {\n\t\t\tgameDetails: {\n\t\t\t\tgameId,\n\t\t\t\troundId: transactions.roundId,\n\t\t\t\tprevRoundId: transactions.prevRoundId,\n\t\t\t\tnextRoundId: transactions.nextRoundId,\n\t\t\t\tserverTimeStart: transactions.startTime,\n\t\t\t\tserverTimeEnd: transactions.endTime,\n\t\t\t\twinner: game.winner\n\t\t\t},\n\t\t\ttransactions: {\n\t\t\t\tstake,\n\t\t\t\tbalance: {\n\t\t\t\t\tcash: user.balance.cash,\n\t\t\t\t\tfreeBets: user.balance.freeBets,\n\t\t\t\t\tsessionCash: user.balance.sessionCash,\n\t\t\t\t\tsessionFreeBets: user.balance.sessionFreeBets,\n\t\t\t\t\tbonus: user.balance.bonus\n\t\t\t\t}\n\t\t\t},\n\t\t\tregulations: data.regulations, // not .responses[0]\n\t\t\twinDetails: wins,\n\t\t\tcards: game.cards,\n\t\t\tnumber: game.ballPosition,\n\t\t\tpromo\n\t\t};\n\n\t\tif (game) { // TODO: this is temporary fix when the server returns game:null. It analyzed be taken more seriously\n\t\t\treturn KeyValueMap[gameId] && KeyValueMap[gameId].post\n\t\t\t\t? CayTableParser._mapKeys(KeyValueMap[gameId].post, history) : history;\n\t\t}\n\t}\n\n\tstatic _extractSubKeys(stakes) {\n\t\tvar groups = {};\n\n\t\tvar numbers = ['first', 'second', 'third'];\n\n\t\tvar names = {\n\t\t\tcolor: {\n\t\t\t\tpattern: /(red|black)/,\n\t\t\t\textractFn: (key) => key,\n\t\t\t\torderIndex: (key) => key\n\t\t\t},\n\t\t\tsmall_big: {\n\t\t\t\tpattern: /(small|big)/,\n\t\t\t\textractFn: (key) => key,\n\t\t\t\torderIndex: (key) => key\n\t\t\t},\n\t\t\teven_odd: {\n\t\t\t\tpattern: /(odd|even)/,\n\t\t\t\textractFn: (key) => key,\n\t\t\t\torderIndex: (key) => key\n\t\t\t},\n\t\t\tcolumn: {\n\t\t\t\tpattern: /column\\_(\\d+)/,\n\t\t\t\textractFn: (key, matches) => numbers[parseInt(matches[1], 10)] + '_column',\n\t\t\t\torderIndex: (key, matches) => parseInt(matches[1], 10)\n\t\t\t},\n\t\t\tdozen: {\n\t\t\t\tpattern: /dozen\\_(\\d+)/,\n\t\t\t\textractFn: (key, matches) => numbers[parseInt(matches[1], 10)] + '_dozen',\n\t\t\t\torderIndex: (key, matches) => parseInt(matches[1], 10)\n\t\t\t},\n\t\t\tsix_line: {\n\t\t\t\tpattern: /sixLine\\_(\\d+)/,\n\t\t\t\textractFn: (key, matches) => {\n\t\t\t\t\tvar idx = parseInt(matches[1], 10);\n\t\t\t\t\treturn [...Array(6).keys()].map((n, i) => idx * 3 + n + 1).join(' - ');\n\t\t\t\t},\n\t\t\t\torderIndex: (key, matches) => parseInt(matches[1], 10)\n\t\t\t},\n\t\t\tstraight: {\n\t\t\t\tpattern: /straight\\_(\\d+)/,\n\t\t\t\textractFn: (key, matches) => matches[1],\n\t\t\t\torderIndex: (key, matches) => parseInt(matches[1], 10)\n\t\t\t},\n\t\t\tstreet: {\n\t\t\t\tpattern: /street\\_(\\d+)/,\n\t\t\t\textractFn: (key, matches) => {\n\t\t\t\t\tvar idx = parseInt(matches[1], 10);\n\t\t\t\t\treturn [...Array(3).keys()].map((n, i) => idx * 3 + n + 1).join(' - ');\n\t\t\t\t},\n\t\t\t\torderIndex: (key, matches) => parseInt(matches[1], 10)\n\t\t\t},\n\t\t\ttrio: {\n\t\t\t\tpattern: /trio\\_(\\d+)/,\n\t\t\t\textractFn: (key, matches) => {\n\t\t\t\t\tswitch(matches[1]) {\n\t\t\t\t\t\tcase '0': return [0, 1, 2].join(' - ');\n\t\t\t\t\t\tcase '1': return [0, 2, 3].join(' - ');\n\t\t\t\t\t\tdefault:  return 'trio ' + matches[1]; // should not happen maybe?\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\torderIndex: (key, matches) => parseInt(matches[1], 10)\n\t\t\t},\n\t\t\tcorner: {\n\t\t\t\tpattern: /corner\\_(\\d+)/,\n\t\t\t\textractFn: (key, matches) => {\n\t\t\t\t\tvar idx = parseInt(matches[1], 10);\n\n\t\t\t\t\t// edge case\n\t\t\t\t\tif (idx == 22) return [0,1,2,3].join(' - ');\n\n\t\t\t\t\tvar lower = 0;\n\t\t\t\t\twhile(idx >= 0) {\n\t\t\t\t\t\tif (++lower % 3 == 0) lower++;\n\t\t\t\t\t\tidx--;\n\t\t\t\t\t}\n\t\t\t\t\treturn [lower, lower + 1, lower + 3, lower + 4].join(' - ');\n\t\t\t\t},\n\t\t\t\torderIndex: (key, matches) => {\n\t\t\t\t\tvar idx = parseInt(matches[1], 10)\n\t\t\t\t\tif (idx == 22) return 0;\n\t\t\t\t\treturn idx + 1;\n\t\t\t\t}\n\t\t\t},\n\t\t\tsplit: {\n\t\t\t\tpattern: /split\\_(\\d+)/,\n\t\t\t\textractFn: (key, matches) => {\n\t\t\t\t\tvar idx = parseInt(matches[1], 10);\n\n\t\t\t\t\t// edge cases\n\t\t\t\t\tswitch(idx) {\n\t\t\t\t\t\tcase 57: return [0,1].join(' - ');\n\t\t\t\t\t\tcase 58: return [0,2].join(' - ');\n\t\t\t\t\t\tcase 59: return [0,3].join(' - ');\n\t\t\t\t\t}\n\n\t\t\t\t    var first = 0;\n\t\t\t\t    var second = 1;\n\t\t\t\t    var c1 = 0;\n\t\t\t\t    var c2 = 0;\n\t\t\t\t    for (var i = 0; i <= idx; i++) {\n\t\t\t\t       first++;\n\t\t\t\t       second++;\n\t\t\t\t       c1++;\n\t\t\t\t       c2++;\n\t\t\t\t       if (c1 == 3) first -= 2;\n\t\t\t\t       if (c1 == 5) c1 = 0;\n\t\t\t\t       if (c2 == 6) {\n\t\t\t\t         c2 = 1;\n\t\t\t\t         second -= 2;\n\t\t\t\t       }\n\t\t\t\t    }\n\t\t\t\t    return [first, second].join(' - ');\n\t\t\t\t},\n\t\t\t\torderIndex: (key, matches) => {\n\t\t\t\t\tvar idx = parseInt(matches[1], 10);\n\t\t\t\t\tif (idx < 57) return idx + 3;\n\t\t\t\t\treturn idx - 57;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tObject.keys(stakes).forEach((stake) => {\n\t\t\tvar matched = false;\n\t\t\tvar matches = null;\n\t\t\tObject.keys(names).forEach((groupName) => {\n\t\t\t\tmatches = stake.match(names[groupName].pattern);\n\t\t\t\tif (matched || !matches) return;\n\t\t\t\tmatched = true;\n\t\t\t\tif (!groups[groupName]) groups[groupName] = [];\n\t\t\t\tgroups[groupName].push({key: names[groupName].extractFn(stake, matches), value: stakes[stake].total, order: names[groupName].orderIndex(stake, matches)});\n\t\t\t});\n\t\t\tif (!matched) {\n\t\t\t\tgroups[stake] = stakes[stake];\n\t\t\t}\n\t\t});\n\n\t\tvar sortedGroups = {};\n\n\t\tvar keys = Object.keys(groups);\n\t\tkeys.sort();\n\n\t\tif (groups.totalWin) {\n\t\t\tkeys.splice(keys.indexOf('totalWin'), 1);\n\t\t}\n\t\tif (groups.totalStake) {\n\t\t\tkeys.splice(keys.indexOf('totalStake'), 1);\n\t\t}\n\n\t\tkeys.forEach((key) => {\n\t\t\tsortedGroups[key] = {sub: {}};\n\t\t\tgroups[key].sort((a,b) => a.order - b.order);\n\t\t\tgroups[key].forEach((group) => {\n\t\t\t\tsortedGroups[key].sub[group.key] = group.value;\n\t\t\t});\n\t\t});\n\n\t\tif (groups.totalWin) {\n\t\t\tsortedGroups['totalWin'] = groups.totalWin;\n\t\t}\n\n\t\tif (groups.totalStake) {\n\t\t\tsortedGroups['totalStake'] = groups.totalStake;\n\t\t}\n\n\t\treturn sortedGroups;\n\t}\n\n\t/**\n\t *\n\t * @param {Object} data\n\t * @description returns only none 0 wins\n\t * @returns {Object}\n\t * @private\n\t */\n\tstatic _filterWins(data){\n\t\tlet wins = data.win;\n\n\t\treturn Object.keys(wins)\n\t\t\t.filter((type) => parseFloat(wins[type]) > 0)\n\t\t\t.reduce((acc, type) => {\n\t\t\t\tacc[type] = wins[type];\n\n\t\t\t\treturn acc;\n\t\t\t}, {});\n\t}\n\n\t/**\n\t *\n\t * @param {Object} obj - Object to be parsed\n\t * @param {String} name - name of data set, eg. Stake, Win, used for total naming\n\t * @param {Boolean}[combine=false] combine into groups\n\t * @description returns proper partial depending of the game\n\t * @returns {Object}\n\t * @private\n\t */\n\tstatic _parseObject(obj, name, combine = false) {\n\t\tif (typeof obj === 'number') {\n\t\t\treturn [{ type: 'total' + name, amount: obj }];\n\t\t}\n\n\t\tif (typeof obj === 'object') {\n\t\t\treturn Object.keys(obj)\n\t\t\t\t.reduce((acc, key) => {\n\t\t\t\t\tif(!combine){\n\t\t\t\t\t\tlet singleName = key === 'total' ? 'total' + name : key;\n\t\t\t\t\t\tacc[singleName] = { total: obj[key] };\n\t\t\t\t\t\treturn acc;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlet group = key.split('_')[0]; // eg. straight_12 -> straight\n\n\t\t\t\t\t\tlet groupName;\n\t\t\t\t\t\t// don't group total win and limited win\n\t\t\t\t\t\tif (group === 'total') groupName = 'total' + name;\n\t\t\t\t\t\telse if (group === 'limitedWin') groupName = 'limitedWin';\n\t\t\t\t\t\t// generate group name\n\t\t\t\t\t\telse groupName = group + 'Total'; // eg. straightTotal\n\n\t\t\t\t\t\tif (acc[groupName]) return acc;\n\n\t\t\t\t\t\tacc[groupName] = CayTableParser._extractGroup(group, obj);\n\t\t\t\t\t\treturn acc;\n\t\t\t\t\t}\n\t\t\t\t}, {});\n\t\t}\n\n\t\tconsole.error(\"Table history parser. Unexpected data format when parsing\", obj);\n\t\treturn null;\n\t}\n\n\t/**\n\t *\n\t * @param {String} id - game id\n\t * @description returns proper partioal depending of the game\n\t * @returns {Object}\n\t * @private\n\t */\n\tstatic _getPartials(id) {\n\t\tlet info,\n\t\t\toutcome;\n\n\t\tif (id.toLowerCase().indexOf('roulette') > -1) {\n\t\t\tinfo = InfoRoulette;\n\t\t\toutcome = Number;\n\t\t}\n\n\t\treturn { info, outcome };\n\t}\n\n\t/**\n\t *\n\t * @param {String} group - the name of the group\n\t * @param {Object} collection - the collection from which the group is been extracted\n\t * @description extract similar properties from collection ane group them,\n\t\tfor example similar wins from all wins, for example all split wins (split_0, split_1) will be grouped into\n\t\tone object with total property(containing all split wins sum), and sub properties containing all info for all\n\t \tindividual split wins\n\t * @returns {Object}\n\t * @private\n\t */\n\tstatic _extractGroup(group, collection) {\n\t\tlet total = 0;\n\t\tlet sub = Object.keys(collection)\n\t\t\t.filter((key) => key.includes(group))\n\t\t\t.reduce((acc, key) => {\n\t\t\t\ttotal += parseInt(collection[key], 10);\n\t\t\t\tacc[key] = collection[key];\n                return acc;\n            }, {});\n\n\t\treturn (group !== 'total' && group !== 'limitedWin')? { total, sub } : { total };\n\t}\n\n\t/**\n\t *\n\t * @param {Object} map\n\t * @param {Object} obj\n\t * @description traverse object 'obj' recursively and replaces every key that is a also a key on 'map' object with the value in map(map[key])\n\t * @returns {Object}\n\t * @private\n\t */\n\tstatic _mapKeys(map, obj) {\n\t\treturn Object.keys(obj).reduce((acc, key) => {\n\t\t\tlet k = map[key] || key;\n\n\t\t\tacc[k] = typeof obj[key] === 'object' && obj[key] !== null ? CayTableParser._mapKeys(map, obj[key]) : obj[key];\n\n\t\t\treturn acc;\n\t\t}, {});\n\t}\n}\n\nmodule.exports = CayTableParser;\n","const CayTableParser = require('./CayTableParser');\nconst BlackJackParser = require('./games/BlackJackParser');\nconst ThreeCardBragParser = require('./games/ThreeCardBragParser');\nconst VideoPokerParser = require('./games/VideoPokerParser');\n\nclass CayTableParserFactory {\n\n    constructor() {\n        this.parsers = {\n        };\n    }\n\n    /**\n     * Creates an appropriate parser instance for the specified game id\n     * @param  {String} gameId The game id\n     * @return {CayTableParser} The table parser instance\n     */\n    createParser(gameId) {\n        // search for specific parser\n        gameId = gameId.toLowerCase();\n        var keys = Object.keys(this.parsers);\n        for (var i = 0; i < keys.length; i++) {\n            if (keys[i].toLowerCase() == gameId) {\n                return new this.parsers[keys[i]]();\n            }\n        }\n\n        // check for generic blackjack parser\n        if (gameId.toLowerCase().indexOf('blackjack') > -1) {\n            return new BlackJackParser();\n        }\n        \n        // check for generic 3 card brag parser\n        if (gameId.toLowerCase().indexOf('brag') > -1) {\n            return new ThreeCardBragParser();\n        }\n        // check for generic video poker parser\n        if (gameId.toLowerCase().indexOf('vp') > -1) {\n            return new VideoPokerParser();\n        }\n        \n        // return the roulette parser\n        return new CayTableParser();\n    }\n}\n\nmodule.exports = CayTableParserFactory;","const Handlebars = require('hbsfy/runtime');\nconst Hands = require('../../../../../templates/Partials/hands.hbs');\nconst InfoBlackJack = require('../../../../../templates/Partials/infoBlackjack.hbs');\nconst DefaultParser = require('../../../DefaultParser');\n\nconst HANDS_ORDER = [\n    'dealer', \n    'hand_0', \n    'hand_0_split_0',\n    'sidebet_0',\n    'sidebet_1000',\n    'hand_1', \n    'hand_1_split_0',\n    'sidebet_1',\n    'sidebet_1001',\n    'hand_2', \n    'hand_2_split_0',\n    'sidebet_2',\n    'sidebet_1002', \n    'insurance_hand_0',\n    'insurance_hand_1',\n    'insurance_hand_2',\n    'total'\n];\n\nclass BlackJackParser extends DefaultParser {\n    registerPartials() {\n        Handlebars.registerPartial('outcome', Hands);\n        Handlebars.registerPartial('info', InfoBlackJack);\n    }\n\n    /**\n     * This method parses the response from the server and returns a suitable object that can be used to add the data\n     * to the handlebars.\n     * @param {String} gameId - gameId of the project\n     * @param {Object} data - the data received from the server (before any sort of manipulation).\n     * @returns {Object} an object with all the data ready for the handlebars\n     */\n    parse(gameId, data) {\n        this.gameId = gameId;\n        this.data = data;\n\n        var currData = this.nextResponse( data );\n        var hands = this.extractHands(currData);\n\n        var result = {\n            gameDetails: {\n                gameId: this.gameId,\n                roundId: currData.transactions.roundId,\n                prevRoundId: currData.transactions.prevRoundId,\n                nextRoundId: currData.transactions.nextRoundId,\n                serverTimeStart: currData.transactions.startTime,\n                serverTimeEnd: currData.transactions.endTime,\n            },\n            transactions: {\n                balance: {\n                    cash: currData.user.balance.cash,\n                    freeBets: currData.user.balance.freeBets,\n                    sessionCash: currData.user.balance.sessionCash,\n                    sessionFreeBets: currData.user.balance.sessionFreeBets,\n                    bonus: currData.user.balance.bonus\n                }\n            },\n            regulations: data.regulations,\n            winDetails: this.extractWinDetails(currData.game.win),\n            hands: hands,\n            sideBets: this.extractSideBets(hands),\n            handScores: this.extractHandInfo(hands),\n            totalStake: this.extractTotalStake(hands, 'stake'),\n            totalSideBetsStake: this.extractTotalStake(hands, 'insurance'),\n            totalWins: Number(currData.game.win.total),\n            promo: currData.promo\n        };\n\n        while(currData = this.nextResponse(data)) {\n            hands = this.extractHands(currData);\n\n            result.hands = hands;\n            result.sideBets = this.extractSideBets(hands);\n            result.handScores = this.extractHandInfo(hands);\n            result.totalStake = this.extractTotalStake(hands, 'stake');\n            result.totalSideBetsStake = this.extractTotalStake(hands, 'insurance');\n            result.winDetails = this.extractWinDetails(currData.game.win);\n            result.totalWins = Number(currData.game.win.total);\n        }\n        return result;\n    }\n\n    nextResponse(data) {\n        // single response data\n        if (!data.responses) {\n            if (this.responseHandled) return null;\n            this.responseHandled = true;\n            return data;\n        }\n\n        if (typeof this.responseIndex == \"undefined\") {\n            this.responseIndex = 0;\n        } else {\n            this.responseIndex++;\n        }\n\n        if (this.responseIndex >= data.responses.length) {\n            return null;\n        }\n\n        let responseData = data.responses[this.responseIndex];\n\n        let userData = {};\n        //use the first response as it will have the correct Balance before Stake/Balance after Bet values\n        userData.balance = data.responses[0].user.balance;\n        userData.balance.cash.atEnd = data.responses[data.responses.length-1].user.balance.cash.atEnd;\n        userData.balance.freeBets.atEnd = data.responses[data.responses.length-1].user.balance.freeBets.atEnd;\n        userData.balance.sessionCash.atEnd = data.responses[data.responses.length-1].user.balance.sessionCash.atEnd;\n        userData.balance.sessionFreeBets.atEnd = data.responses[data.responses.length-1].user.balance.sessionFreeBets.atEnd;\n\n        //use the last response as it will have the most up to date info\n        responseData.user = userData;\n        responseData.transactions = data.transactions\n        return responseData;\n    }\n\n    extractHands(data) {\n        var hands = {};\n\n        hands.dealer = data.game.gameData.dealerHand;\n        hands.dealer.stake = 0;\n\n        data.game.gameData.lastPayouts.forEach((payout, index) => {\n            var key = payout.playersHand.handPosition - 1;\n            var key_str = 'hand_' + key;\n            var key_split = 'hand_' + key + '_split_0';\n            if (key >= 1000) {\n                key_str = 'sidebet_' + (key - 1000);\n            }\n\n            hands[key_str] = payout.playersHand;\n            hands[key_str].hasInsurance = !!payout.isInsured;\n\n            if (payout.playersSplitHand) {\n                hands[key_split] = payout.playersSplitHand;\n                hands[key_split].hasInsurance = !!payout.isInsured;\n            }\n        });\n\n        return hands;\n    }\n\n    /**\n     * Sanitze spin data object\n     * @private\n     * @return {Object} Sanitized data\n     */\n    sanitizeData(data) {\n        //This check is used in case of HERMES gpanel results\n        if(data.result && data.result.history) data = data.result.history;\n\n        let multiResponseFormat = !!data.responses; //Check for multiple responses format\n        if(multiResponseFormat){ //We are using multi-response format\n            const transactions = data.transactions;\n            const responses = data.responses;\n            const regulations = data.regulations;\n\n            const userData = {};\n            //use the first response as it will have the correct Balance before Stake/Balance after Bet values\n            userData.balance = data.responses[0].user.balance;\n            userData.balance.cash.atEnd = data.responses[data.responses.length-1].user.balance.cash.atEnd;\n            userData.balance.freeBets.atEnd = data.responses[data.responses.length-1].user.balance.freeBets.atEnd;\n            userData.balance.sessionCash.atEnd = data.responses[data.responses.length-1].user.balance.sessionCash.atEnd;\n            userData.balance.sessionFreeBets.atEnd = data.responses[data.responses.length-1].user.balance.sessionFreeBets.atEnd;\n\n            data = responses[responses.length-1]; //Use the main spin response for now\n            data.user = userData;\n            data.transactions = transactions || data.result.history.transactions;\n            data.responses = responses;\n            data.regulations = regulations;\n        }\n\n        if (data && data.result && data.result.history) {\n            data = data.result.history;\n        }\n\n        if (!data.transactions) data.transactions = {}; // allow it ;)\n        if (!data.regulations) data.regulations = {}; // allow it ;)\n        // TODO: this is temporary fix when the server returns game:null.\n        if (!data.game) {\n            data = {\n                gameDetails: {\n                    gameId: this.gameId,\n                    roundId: data.transactions.roundId,\n                    prevRoundId: data.transactions.prevRoundId,\n                    nextRoundId: data.transactions.nextRoundId,\n                    serverTimeStart: data.transactions.startTime,\n                    serverTimeEnd: data.transactions.endTime,\n                },\n                transactions: {\n                    totalBet: null,\n                    totalWin: null,\n                    balance: {\n                        cash: data.user.balance.cash,\n                        freeBets: data.user.balance.freeBets,\n                        sessionCash: data.user.balance.sessionCash,\n                        sessionFreeBets: data.user.balance.sessionFreeBets,\n                        bonus: data.user.balance.bonus\n                    },\n                },\n                regulations: data.regulations,\n                winDetails: null,\n                reels: null,\n                promo: data.promo\n            };\n\n            data.hasGameData = false;\n        }else{\n            data.hasGameData = true;\n        }\n\n        return data;\n    }\n\n    /**\n     * Filters and maps through the hands object from the response and returns a suitable object for the handleBars\n     * (score,handNames,cards,stakes);\n     * @param {Object} handsObj\n     * @returns {Object} - an object with all the necessary hand data for the history\n     */\n    extractHandInfo(handsObj = this.data.game.gameData.hands) {\n        return this.sortHandsOrder(handsObj)\n            .map((hand) => {\n                let uniqueAction = handsObj[hand].hasBlackjack || handsObj[hand].isDoubled ? '(BlackJack)' : '';\n                if(handsObj[hand].hasBlackjack) uniqueAction = '(BlackJack)';\n                if(handsObj[hand].isDoubled) uniqueAction = '(Double Down)';\n                if(handsObj[hand].handPosition >= 1000) uniqueAction = '(Sidebet)';\n\n                return {\n                    score: handsObj[hand].sum,\n                    handName: hand.toUpperCase(),\n                    uniqueAction: uniqueAction,\n                    stake: handsObj[hand].stake,\n                    cards: handsObj[hand].cards\n                };\n        });\n    }\n\n    /**\n     * This method takes the handsObj from the response and sums up all stakes in it, depending on the type.\n     * @param {Object} handsObj\n     * @param {String} type - types of stakes (insurance stakes or normal stakes)\n     * @returns {Number} sum of stakes in hands object\n     */\n    extractTotalStake(handsObj = this.data.game.gameData.hands, type) {\n        if (type == \"insurance\") {\n            return this.sortHandsOrder(handsObj)\n                        .filter((hand) => type == \"insurance\" ? handsObj[hand].hasInsurance : true)\n                        .map((hand) => handsObj[hand].sideBet)\n                        .reduce((a, b) => a + b, 0);\n        }\n\n        return this.sortHandsOrder(handsObj)\n                .filter((hand) => type !== 'stake' ? handsObj[hand].hasInsurance : true)\n                .map((hand) => type !== 'stake' ? Number(handsObj[hand].stake)/2 : Number(handsObj[hand].stake))\n                .reduce((a,b) => a + b, 0);\n    }\n\n    /**\n     * This method returns a converted hand object, where the keys are upper-cased to match the Texts.js keys, and\n     * the values are converted to Integers.\n     * @param {Object} winObj\n     * @returns {Object}\n     */\n    extractWinDetails(winObj = this.data.game.win) {\n        var result = {};\n        var mappedWinObj = {};\n        Object.keys(winObj).forEach((key) => {\n            var splitted = key.split('_');\n            if (splitted[1] && !isNaN(splitted[1])) {\n                splitted[1] = parseInt(splitted[1], 10) - 1;\n            }\n            mappedWinObj[splitted.join('_')] = winObj[key];\n        });\n        this.sortHandsOrder(mappedWinObj)\n                    .forEach((win) => {\n                        if (win == \"total\") return; \n                        result[win.toUpperCase()] = Number(mappedWinObj[win]); \n                    });\n        return result;\n    }\n\n    /**\n     * This method returns an array of all insurance bets (the names of the insured hand and the amounts).\n     * @param {Object} handsObj\n     * @returns {Array} insuranceArray - if there are any insurance bets\n     */\n    extractSideBets(handsObj = this.data.game.gameData.hands) {\n        let insuranceArray = [];\n        let hands = this.sortHandsOrder(handsObj)\n                        .filter((hand) => hand !== 'dealer' && handsObj[hand].hasInsurance && !hand.includes('split'));\n\n        if(!hands.length) return [];\n\n        hands.forEach((hand) => {\n            let output = {};\n            output.name = hand.toUpperCase();\n            output.stake = Number(handsObj[hand].stake/2);\n            insuranceArray.push(output);\n        });\n        return insuranceArray;\n    }\n\n    /**\n     * Returns an array of handNames with the correct order.\n     * @param {Object} handObj\n     * @returns {Array.<string>}\n     */\n    sortHandsOrder(handObj = this.data.game.gameData.hands) {\n        return HANDS_ORDER.filter((hand) => Object.keys(handObj).includes(hand))\n    }\n\n}\n\nmodule.exports = BlackJackParser;","const Handlebars = require('hbsfy/runtime');\nconst Hands = require('../../../../../templates/Partials/hands.hbs');\nconst InfoBlackJack = require('../../../../../templates/Partials/infoBlackjack.hbs');\nconst DefaultParser = require('../../../DefaultParser');\n\nconst HANDS_ORDER = [\n    'dealer',\n    'ante', \n    'ante_bonus', \n    'pair_bonus',\n    'play',\n    'total'\n];\n\nclass ThreeCardBragParser extends DefaultParser {\n    registerPartials() {\n        Handlebars.registerPartial('outcome', Hands);\n        Handlebars.registerPartial('info', InfoBlackJack);\n    }\n\n    /**\n     * This method parses the response from the server and returns a suitable object that can be used to add the data\n     * to the handlebars.\n     * @param {String} gameId - gameId of the project\n     * @param {Object} data - the data received from the server (before any sort of manipulation).\n     * @returns {Object} an object with all the data ready for the handlebars\n     */\n    parse(gameId, data) {\n        this.gameId = gameId;\n        this.data = data;\n\n        var currData = this.nextResponse( data );\n        var hands = this.extractHands(currData);\n\n        var result = {\n            gameDetails: {\n                gameId: this.gameId,\n                roundId: currData.transactions.roundId,\n                prevRoundId: currData.transactions.prevRoundId,\n                nextRoundId: currData.transactions.nextRoundId,\n                serverTimeStart: currData.transactions.startTime,\n                serverTimeEnd: currData.transactions.endTime,\n            },\n            transactions: {\n                balance: {\n                    cash: currData.user.balance.cash,\n                    freeBets: currData.user.balance.freeBets,\n                    sessionCash: currData.user.balance.sessionCash,\n                    sessionFreeBets: currData.user.balance.sessionFreeBets,\n                    bonus: currData.user.balance.bonus\n                }\n            },\n            regulations: data.regulations,\n            winDetails: this.extractWinDetails(currData.game.win),\n            hands: hands,\n            // sideBets: this.extractSideBets(hands),\n            handScores: this.extractHandInfo(hands),\n            totalStake: this.extractTotalStake(hands, 'stake'),\n            // totalSideBetsStake: this.extractTotalStake(hands, 'insurance'),\n            totalWins: Number(currData.game.win.total),\n            promo: currData.promo\n        };\n\n        while(currData = this.nextResponse(data)) {\n            hands = this.extractHands(currData);\n            result.hands = hands;\n            // result.sideBets = this.extractSideBets(hands);\n            result.handScores = this.extractHandInfo(hands);\n            result.totalStake = this.extractTotalStake(hands, 'stake');\n            // result.totalSideBetsStake = this.extractTotalStake(hands, 'insurance');\n            result.winDetails = this.extractWinDetails(currData.game.win);\n            result.totalWins = Number(currData.game.win.total);\n        }\n        return result;\n    }\n\n    nextResponse(data) {\n        // single response data\n        if (!data.responses) {\n            if (this.responseHandled) return null;\n            this.responseHandled = true;\n            return data;\n        }\n\n        if (typeof this.responseIndex == \"undefined\") {\n            this.responseIndex = 0;\n        } else {\n            this.responseIndex++;\n        }\n\n        if (this.responseIndex >= data.responses.length) {\n            return null;\n        }\n\n        let responseData = data.responses[this.responseIndex];\n\n        let userData = {};\n        //use the first response as it will have the correct Balance before Stake/Balance after Bet values\n        userData.balance = data.responses[0].user.balance;\n        userData.balance.cash.atEnd = data.responses[data.responses.length-1].user.balance.cash.atEnd;\n        userData.balance.freeBets.atEnd = data.responses[data.responses.length-1].user.balance.freeBets.atEnd;\n        userData.balance.sessionCash.atEnd = data.responses[data.responses.length-1].user.balance.sessionCash.atEnd;\n        userData.balance.sessionFreeBets.atEnd = data.responses[data.responses.length-1].user.balance.sessionFreeBets.atEnd;\n\n        //use the last response as it will have the most up to date info\n        responseData.user = userData;\n        responseData.transactions = data.transactions\n        return responseData;\n    }\n\n    extractHands(data) {\n        var hands = {};\n\n        // hands.dealer = data.game.gameData.dealerHand;\n        // hands.dealer.stake = 0;\n\n        // data.game.gameData.payoutData.forEach((payout, index) => {\n        //     var key = payout.playersHand.handPosition - 1;\n        //     var key_str = 'hand_' + key;\n        //     var key_split = 'hand_' + key + '_split_0';\n        //     if (key >= 1000) {\n        //         key_str = 'sidebet_' + (key - 1000);\n        //     }\n\n        //     hands[key_str] = payout.playersHand;\n        //     hands[key_str].hasInsurance = !!payout.isInsured;\n\n        //     if (payout.playersSplitHand) {\n        //         hands[key_split] = payout.playersSplitHand;\n        //         hands[key_split].hasInsurance = !!payout.isInsured;\n        //     }\n        // });\n        if(data.game.gameData.playerHand != null) {\n            hands.ante = data.game.gameData.playerHand;\n        }\n        \n        if(data.game.gameData.dealerHand) {\n            hands.dealer = data.game.gameData.dealerHand;\n        }\n       \n        return hands;\n    }\n\n    /**\n     * Sanitze spin data object\n     * @private\n     * @return {Object} Sanitized data\n     */\n    sanitizeData(data) {\n        //This check is used in case of HERMES gpanel results\n        // if(data.result && data.result.history) data = data.result.history;\n\n        let multiResponseFormat = !!data.responses; //Check for multiple responses format\n        if(multiResponseFormat){ //We are using multi-response format\n            const transactions = data.transactions;\n            const responses = data.responses;\n            const regulations = data.regulations;\n\n            const userData = {};\n            //use the first response as it will have the correct Balance before Stake/Balance after Bet values\n            userData.balance = data.responses[0].user.balance;\n            userData.balance.cash.atEnd = data.responses[data.responses.length-1].user.balance.cash.atEnd;\n            userData.balance.freeBets.atEnd = data.responses[data.responses.length-1].user.balance.freeBets.atEnd;\n            userData.balance.sessionCash.atEnd = data.responses[data.responses.length-1].user.balance.sessionCash.atEnd;\n            userData.balance.sessionFreeBets.atEnd = data.responses[data.responses.length-1].user.balance.sessionFreeBets.atEnd;\n\n            data = responses[responses.length-1]; //Use the main spin response for now\n            data.user = userData;\n            data.transactions = transactions || data.result.history.transactions;\n            data.responses = responses;\n            data.regulations = regulations;\n        }\n\n        if (data && data.result && data.result.history) {\n            data = data.result.history;\n        }\n\n        if (!data.transactions) data.transactions = {}; // allow it ;)\n        if (!data.regulations) data.regulations = {}; // allow it ;)\n        // TODO: this is temporary fix when the server returns game:null.\n        if (!data.game) {\n            data = {\n                gameDetails: {\n                    gameId: this.gameId,\n                    roundId: data.transactions.roundId,\n                    prevRoundId: data.transactions.prevRoundId,\n                    nextRoundId: data.transactions.nextRoundId,\n                    serverTimeStart: data.transactions.startTime,\n                    serverTimeEnd: data.transactions.endTime,\n                },\n                transactions: {\n                    totalBet: null,\n                    totalWin: null,\n                    balance: {\n                        cash: data.user.balance.cash,\n                        freeBets: data.user.balance.freeBets,\n                        sessionCash: data.user.balance.sessionCash,\n                        sessionFreeBets: data.user.balance.sessionFreeBets,\n                        bonus: data.user.balance.bonus\n                    },\n                },\n                regulations: data.regulations,\n                winDetails: null,\n                reels: null,\n                promo: data.promo\n            };\n\n            data.hasGameData = false;\n        }else{\n            data.hasGameData = true;\n        }\n\n        return data;\n    }\n\n    /**\n     * Filters and maps through the hands object from the response and returns a suitable object for the handleBars\n     * (score,handNames,cards,stakes);\n     * @param {Object} handsObj\n     * @returns {Object} - an object with all the necessary hand data for the history\n     */\n    extractHandInfo(handsObj = this.data.game.gameData.hands) {\n        return this.sortHandsOrder(handsObj)\n            .map((hand) => {\n                // let uniqueAction = handsObj[hand].hasBlackjack || handsObj[hand].isDoubled ? '(BlackJack)' : '';\n                // if(handsObj[hand].hasBlackjack) uniqueAction = '(BlackJack)';\n                // if(handsObj[hand].isDoubled) uniqueAction = '(Double Down)';\n                // if(handsObj[hand].handPosition >= 1000) uniqueAction = '(Sidebet)';\n\n                return {\n                    score: handsObj[hand].winAmount,\n                    handName: hand.toUpperCase(),\n                    // uniqueAction: uniqueAction,\n                    stake: handsObj[hand].stake,\n                    cards: this.fixCardsFormat(handsObj[hand].cards)\n                };\n        });\n    }\n\n    fixCardsFormat(cards = []) {\n        var fixedCards = [];\n        cards.forEach((card)=> {\n            fixedCards.push(card.string);\n        });\n\n        return fixedCards;\n    }\n\n    /**\n     * This method takes the handsObj from the response and sums up all stakes in it, depending on the type.\n     * @param {Object} handsObj\n     * @param {String} type - types of stakes (insurance stakes or normal stakes)\n     * @returns {Number} sum of stakes in hands object\n     */\n    extractTotalStake(handsObj = this.data.game.gameData.hands, type) {\n        if (type == \"insurance\") {\n            return this.sortHandsOrder(handsObj)\n                        .filter((hand) => type == \"insurance\" ? handsObj[hand].hasInsurance : true)\n                        .map((hand) => handsObj[hand].sideBet)\n                        .reduce((a, b) => a + b, 0);\n        }\n\n        return this.sortHandsOrder(handsObj)\n                .filter((hand) => type !== 'stake' ? handsObj[hand].hasInsurance : true)\n                .map((hand) => type !== 'stake' ? Number(handsObj[hand].stake)/2 : Number(handsObj[hand].stake))\n                .reduce((a,b) => a + b, 0);\n    }\n\n    /**\n     * This method returns a converted hand object, where the keys are upper-cased to match the Texts.js keys, and\n     * the values are converted to Integers.\n     * @param {Object} winObj\n     * @returns {Object}\n     */\n    extractWinDetails(winObj = this.data.game.win) {\n        var result = {};\n        var mappedWinObj = {};\n        Object.keys(winObj).forEach((key) => {\n            var splitted = key.split('_');\n            if (splitted[1] && !isNaN(splitted[1])) {\n                splitted[1] = parseInt(splitted[1], 10) - 1;\n            }\n            mappedWinObj[splitted.join('_')] = winObj[key];\n        });\n        this.sortHandsOrder(mappedWinObj)\n                    .forEach((win) => {\n                        if (win == \"total\") return; \n                        result[win.toUpperCase()] = Number(mappedWinObj[win]); \n                    });\n\n        console.log(result);\n        return result;\n    }\n\n    /**\n     * This method returns an array of all insurance bets (the names of the insured hand and the amounts).\n     * @param {Object} handsObj\n     * @returns {Array} insuranceArray - if there are any insurance bets\n     */\n    extractSideBets(handsObj = this.data.game.gameData.hands) {\n        let insuranceArray = [];\n        let hands = this.sortHandsOrder(handsObj)\n                        .filter((hand) => hand !== 'dealer' && handsObj[hand].hasInsurance && !hand.includes('split'));\n\n        if(!hands.length) return [];\n\n        hands.forEach((hand) => {\n            let output = {};\n            output.name = hand.toUpperCase();\n            output.stake = Number(handsObj[hand].stake/2);\n            insuranceArray.push(output);\n        });\n        return insuranceArray;\n    }\n\n    /**\n     * Returns an array of handNames with the correct order.\n     * @param {Object} handObj\n     * @returns {Array.<string>}\n     */\n    sortHandsOrder(handObj = this.data.game.gameData.hands) {\n        return HANDS_ORDER.filter((hand) => Object.keys(handObj).includes(hand))\n    }\n\n}\n\nmodule.exports = ThreeCardBragParser;","const Handlebars = require('hbsfy/runtime');\nconst Hands = require('../../../../../templates/Partials/hands.hbs');\nconst InfoBlackJack = require('../../../../../templates/Partials/infoVideoPoker.hbs');\nconst DefaultParser = require('../../../DefaultParser');\n\nconst HANDS_TYPE = [\n    'Royal flush',\n    'Straight flush',\n    'Four of a Kind',\n    'hand_3',\n    'Full House',\n    'Flush',\n    'Straight',\n    'Three of a Kind',\n    'Two Pair',\n    'Jacks or Better'\n];\n\nclass VideoPokerParser extends DefaultParser {\n    registerPartials() {\n        Handlebars.registerPartial('outcome', Hands);\n        Handlebars.registerPartial('info', InfoBlackJack);\n        Handlebars.registerHelper(\"log\", function(something) {\n            console.log(something);\n          });\n    }\n\n    /**\n     * This method parses the response from the server and returns a suitable object that can be used to add the data\n     * to the handlebars.\n     * @param {String} gameId - gameId of the project\n     * @param {Object} data - the data received from the server (before any sort of manipulation).\n     * @returns {Object} an object with all the data ready for the handlebars\n     */\n    parse(gameId, data) {\n        this.gameId = gameId;\n        this.data = data;\n\n        var currData = this.nextResponse( data );\n        var hands = this.extractHands(currData);\n        var result = {\n            gameDetails: {\n                gameId: this.gameId,\n                roundId: currData.transactions.roundId,\n                prevRoundId: currData.transactions.prevRoundId,\n                nextRoundId: currData.transactions.nextRoundId,\n                serverTimeStart: currData.transactions.startTime,\n                serverTimeEnd: currData.transactions.endTime,\n            },\n            transactions: {\n                balance: {\n                    cash: currData.user.balance.cash,\n                    freeBets: currData.user.balance.freeBets,\n                    sessionCash: currData.user.balance.sessionCash,\n                    sessionFreeBets: currData.user.balance.sessionFreeBets,\n                    bonus: currData.user.balance.bonus\n                }\n            },\n            regulations: data.regulations,\n            winDetails: this.extractWinDetails(currData.game.win),\n            hands: hands,\n            // sideBets: this.extractSideBets(hands),\n            handScores: this.extractHandInfo(hands),\n            totalStake: this.extractTotalStake(hands, 'stake'),\n            // totalSideBetsStake: this.extractTotalStake(hands, 'insurance'),\n            totalWins: Number(currData.game.win.total),\n            promo: currData.promo\n        };\n        // console.log(\"~~~~~LAST CHECK\", result.handScores, this.extractHandInfo(hands));\n        while(currData = this.nextResponse(data)) {\n            hands = this.extractHands(currData);\n            result.hands = hands;\n            // result.sideBets = this.extractSideBets(hands);\n            result.handScores = this.extractHandInfo(hands);\n            result.totalStake = this.extractTotalStake(hands, 'stake');\n            // result.totalSideBetsStake = this.extractTotalStake(hands, 'insurance');\n            result.winDetails = this.extractWinDetails(currData.game.win);\n            result.totalWins = Number(currData.game.win.total);\n        }\n        return result;\n    }\n\n    nextResponse(data) {\n        // single response data\n        if (!data.responses) {\n            if (this.responseHandled) return null;\n            this.responseHandled = true;\n            return data;\n        }\n\n        if (typeof this.responseIndex == \"undefined\") {\n            this.responseIndex = 0;\n        } else {\n            this.responseIndex++;\n        }\n\n        if (this.responseIndex >= data.responses.length) {\n            return null;\n        }\n\n        let responseData = data.responses[this.responseIndex];\n\n        let userData = {};\n        //use the first response as it will have the correct Balance before Stake/Balance after Bet values\n        userData.balance = data.responses[0].user.balance;\n        userData.balance.cash.atEnd = data.responses[data.responses.length-1].user.balance.cash.atEnd;\n        userData.balance.freeBets.atEnd = data.responses[data.responses.length-1].user.balance.freeBets.atEnd;\n        userData.balance.sessionCash.atEnd = data.responses[data.responses.length-1].user.balance.sessionCash.atEnd;\n        userData.balance.sessionFreeBets.atEnd = data.responses[data.responses.length-1].user.balance.sessionFreeBets.atEnd;\n\n        //use the last response as it will have the most up to date info\n        responseData.user = userData;\n        responseData.transactions = data.transactions\n        return responseData;\n    }\n\n    extractHands(data) {\n        var hands = {};\n\n        data.game.gameData.payoutData.forEach((payout, index) => {\n            if (payout.className.indexOf(\"VideoPokerDrawDto\") != -1) {\n                payout.playerHands.forEach((hand, handId) => {\n                    var key_str = 'hand_' + handId;\n                    hands[key_str] = hand;\n                });\n            } \n        });\n        \n        return hands;\n    }\n\n    /**\n     * Sanitze spin data object\n     * @private\n     * @return {Object} Sanitized data\n     */\n    sanitizeData(data) {\n        //This check is used in case of HERMES gpanel results\n        // if(data.result && data.result.history) data = data.result.history;\n\n        let multiResponseFormat = !!data.responses; //Check for multiple responses format\n        if(multiResponseFormat){ //We are using multi-response format\n            const transactions = data.transactions;\n            const responses = data.responses;\n            const regulations = data.regulations;\n\n            const userData = {};\n            //use the first response as it will have the correct Balance before Stake/Balance after Bet values\n            userData.balance = data.responses[0].user.balance;\n            userData.balance.cash.atEnd = data.responses[data.responses.length-1].user.balance.cash.atEnd;\n            userData.balance.freeBets.atEnd = data.responses[data.responses.length-1].user.balance.freeBets.atEnd;\n            userData.balance.sessionCash.atEnd = data.responses[data.responses.length-1].user.balance.sessionCash.atEnd;\n            userData.balance.sessionFreeBets.atEnd = data.responses[data.responses.length-1].user.balance.sessionFreeBets.atEnd;\n\n            data = responses[responses.length-1]; //Use the main spin response for now\n            data.user = userData;\n            data.transactions = transactions || data.result.history.transactions;\n            data.responses = responses;\n            data.regulations = regulations;\n        }\n\n        if (data && data.result && data.result.history) {\n            data = data.result.history;\n        }\n\n        if (!data.transactions) data.transactions = {}; // allow it ;)\n        if (!data.regulations) data.regulations = {}; // allow it ;)\n        // TODO: this is temporary fix when the server returns game:null.\n        if (!data.game) {\n            data = {\n                gameDetails: {\n                    gameId: this.gameId,\n                    roundId: data.transactions.roundId,\n                    prevRoundId: data.transactions.prevRoundId,\n                    nextRoundId: data.transactions.nextRoundId,\n                    serverTimeStart: data.transactions.startTime,\n                    serverTimeEnd: data.transactions.endTime,\n                },\n                transactions: {\n                    totalBet: null,\n                    totalWin: null,\n                    balance: {\n                        cash: data.user.balance.cash,\n                        freeBets: data.user.balance.freeBets,\n                        sessionCash: data.user.balance.sessionCash,\n                        sessionFreeBets: data.user.balance.sessionFreeBets,\n                        bonus: data.user.balance.bonus\n                    },\n                },\n                regulations: data.regulations,\n                winDetails: null,\n                reels: null,\n                promo: data.promo\n            };\n\n            data.hasGameData = false;\n        }else{\n            data.hasGameData = true;\n        }\n\n        return data;\n    }\n\n    /**\n     * Filters and maps through the hands object from the response and returns a suitable object for the handleBars\n     * (score,handNames,cards,stakes);\n     * @param {Object} handsObj\n     * @returns {Object} - an object with all the necessary hand data for the history\n     */\n    extractHandInfo(handsObj = this.data.game.gameData.hands) {\n        return Object.keys(handsObj)\n            .map((hand) => {\n                return {\n                    score: handsObj[hand].winAmount,\n                    handName: hand.toUpperCase().split(\"_\").join(\" [\") + \"]\",\n                    combinationName: handsObj[hand].winAmount > 0 ? handsObj[hand].winningCombination.combinationName.split(\"_\").join(\" \") : \"\",\n                    stake: handsObj[hand].stake,\n                    cards: handsObj[hand].cards\n                };\n        });\n    }\n\n    fixCardsFormat(cards = []) {\n        var fixedCards = [];\n        cards.forEach((card)=> {\n            fixedCards.push(card.string);\n        });\n\n        return fixedCards;\n    }\n\n    /**\n     * This method takes the handsObj from the response and sums up all stakes in it, depending on the type.\n     * @param {Object} handsObj\n     * @param {String} type - types of stakes (insurance stakes or normal stakes)\n     * @returns {Number} sum of stakes in hands object\n     */\n    extractTotalStake(handsObj = this.data.game.gameData.hands, type) {\n        return this.sortHandsOrder(handsObj)\n                .filter((hand) => type !== 'stake' ? handsObj[hand].hasInsurance : true)\n                .map((hand) => type !== 'stake' ? Number(handsObj[hand].stake)/2 : Number(handsObj[hand].stake))\n                .reduce((a,b) => a + b, 0);\n    }\n\n    /**\n     * This method returns a converted hand object, where the keys are upper-cased to match the Texts.js keys, and\n     * the values are converted to Integers.\n     * @param {Object} winObj\n     * @returns {Object}\n     */\n    extractWinDetails(winObj = this.data.game.win) {\n        var result = {};\n        var mappedWinObj = {};\n        // Object.keys(winObj).forEach((key) => {\n        //     var splitted = key.split('_');\n        //     if (splitted[1] && !isNaN(splitted[1])) {\n        //         splitted[1] = parseInt(splitted[1], 10) + 1;\n        //     }\n        //     mappedWinObj[splitted.join('_')] = winObj[key];\n        // });\n        this.sortHandsOrder(mappedWinObj)\n                    .forEach((win) => {\n                        if (win == \"total\") return; \n                        result[win.toUpperCase()] = Number(mappedWinObj[win]); \n                    });\n\n        return result;\n    }\n\n    /**\n     * This method returns an array of all insurance bets (the names of the insured hand and the amounts).\n     * @param {Object} handsObj\n     * @returns {Array} insuranceArray - if there are any insurance bets\n     */\n    extractSideBets(handsObj = this.data.game.gameData.hands) {\n        let insuranceArray = [];\n        let hands = this.sortHandsOrder(handsObj)\n                        .filter((hand) => hand !== 'dealer' && handsObj[hand].hasInsurance && !hand.includes('split'));\n\n        if(!hands.length) return [];\n\n        hands.forEach((hand) => {\n            let output = {};\n            output.name = hand.toUpperCase();\n            output.stake = Number(handsObj[hand].stake/2);\n            insuranceArray.push(output);\n        });\n        return insuranceArray;\n    }\n\n    /**\n     * Returns an array of handNames with the correct order.\n     * @param {Object} handObj\n     * @returns {Array.<string>}\n     */\n    sortHandsOrder(handObj = this.data.game.gameData.hands) {\n        return HANDS_TYPE.filter((hand) => Object.keys(handObj).includes(hand))\n    }\n}\nmodule.exports = VideoPokerParser;","const Handlebars = require('hbsfy/runtime');\nconst Cards = require('../../../../templates/Partials/cards.hbs');\nconst Number = require('../../../../templates/Partials/number.hbs');\nconst InfoRoulette = require('../../../../templates/Partials/infoRoulette.hbs');\nconst InfoPuntoBanco = require('../../../../templates/Partials/infoPuntoBanco.hbs');\nconst KeyValueMap = require('../../../config/KeyValueMap');\nconst DefaultParser = require('../../DefaultParser');\n\n/**\n *\tDopTableParser - this is currently a Parser for both roulette and punto banco.\n *\tTODO: This class will need to be refacoted and made a lot less custom, a base parser similar to the DopSlotParser\n *\tfor Dop table games.\n *\n * @class\n */\nclass DopTableParser extends DefaultParser {\n\n\t/**\n\t *\n\t * @param {String} gameId\n\t * @param {Object} serverData\n\t * @description parse the actual server data\n\t * @returns {void}\n\t * @private\n\t */\n\tparse(gameId, serverData) {\n\t\tlet data = serverData.responses[0]; // Baccarat and Roulette have no actions, so always in [0]\n\n\t\tif (KeyValueMap[gameId] && KeyValueMap[gameId].pre) {\n\t\t\tdata = DopTableParser._mapKeys(KeyValueMap[gameId].pre, data);\n\t\t}\n\n\t\tlet { game, user, transactions, promo } = data;\n\t\tlet combine = (gameId === 'EuropeanRoulette' || gameId === 'PlatinumRoulette' || gameId === 'PlatinumRouletteSingleZero'); // if true combine similar stakes and wins into groups\n\t\tlet actualWins = DopTableParser._filterWins(game); // apparently win of 0 is a thing also handles the case with limited wins\n\t\tlet partials = DopTableParser._getPartials(gameId);\n\t\tlet stake = DopTableParser._parseObject(game.stake, 'Stake', combine);\n\t\tlet wins = DopTableParser._parseObject(actualWins, 'Win', combine);\n\n\t\tHandlebars.registerPartial('outcome', partials.outcome);\n\t\tHandlebars.registerPartial('info', partials.info);\n\n\t\tlet history = {\n\t\t\tgameDetails: {\n\t\t\t\tgameId,\n\t\t\t\troundId: transactions.roundId,\n\t\t\t\tprevRoundId: transactions.prevRoundId,\n\t\t\t\tnextRoundId: transactions.nextRoundId,\n\t\t\t\tserverTimeStart: transactions.startTime,\n\t\t\t\tserverTimeEnd: transactions.endTime,\n\t\t\t\twinner: game.winner\n\t\t\t},\n\t\t\ttransactions: {\n\t\t\t\tstake,\n\t\t\t\tbalance: {\n\t\t\t\t\tcash: user.balance.cash,\n\t\t\t\t\tfreeBets: user.balance.freeBets,\n\t\t\t\t\tsessionCash: data.user.balance.sessionCash,\n\t\t\t\t\tsessionFreeBets: data.user.balance.sessionFreeBets,\n\t\t\t\t\tbonus: user.balance.bonus\n\t\t\t\t}\n\t\t\t},\n\t\t\tregulations: serverData.regulations,\n\t\t\twinDetails: wins,\n\t\t\tcards: game.cards,\n\t\t\tnumber: game.ballPosition,\n\t\t\tpromo\n\t\t};\n\n\t\tif (game) { // TODO: this is temporary fix when the server returns game:null. It analyzed be taken more seriously\n\t\t\treturn KeyValueMap[gameId] && KeyValueMap[gameId].post\n\t\t\t\t? DopTableParser._mapKeys(KeyValueMap[gameId].post, history) : history;\n\t\t}\n\t}\n\n\t/**\n\t *\n\t * @param {Object} data\n\t * @description returns only none 0 wins\n\t * @returns {Object}\n\t * @private\n\t */\n\tstatic _filterWins(data){\n\t\tlet wins = data.win;\n\n\t\treturn Object.keys(wins)\n\t\t\t.filter((type) => parseFloat(wins[type]) > 0)\n\t\t\t.reduce((acc, type) => {\n\t\t\t\tacc[type] = wins[type];\n\n\t\t\t\treturn acc;\n\t\t\t}, {});\n\t}\n\n\t/**\n\t *\n\t * @param {Object} obj - Object to be parsed\n\t * @param {String} name - name of data set, eg. Stake, Win, used for total naming\n\t * @param {Boolean}[combine=false] combine into groups\n\t * @description returns proper partial depending of the game\n\t * @returns {Object}\n\t * @private\n\t */\n\tstatic _parseObject(obj, name, combine = false) {\n\t\tif (typeof obj === 'number') {\n\t\t\treturn [{ type: 'total' + name, amount: obj }];\n\t\t}\n\n\t\tif (typeof obj === 'object') {\n\t\t\treturn Object.keys(obj)\n\t\t\t\t.reduce((acc, key) => {\n\t\t\t\t\tif(!combine){\n\t\t\t\t\t\tlet singleName = key === 'total' ? 'total' + name : key;\n\t\t\t\t\t\tacc[singleName] = { total: obj[key] };\n\t\t\t\t\t\treturn acc;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlet group = key.split('_')[0]; // eg. straight_12 -> straight\n\t\t\t\t\t\tlet groupName = (group === 'total') ? 'total' + name : group;\n\t\t\t\t\t\tif (acc[groupName]) return acc;\n\n\t\t\t\t\t\tacc[groupName] = DopTableParser._extractGroup(group, obj);\n\t\t\t\t\t\treturn acc;\n\t\t\t\t\t}\n\t\t\t\t}, {});\n\t\t}\n\n\t\tconsole.error(\"Table history parser. Unexpected data format when parsing\", obj);\n\t\treturn null;\n\t}\n\n\t/**\n\t *\n\t * @param {String} id - game id\n\t * @description returns proper partioal depending of the game\n\t * @returns {Object}\n\t * @private\n\t */\n\tstatic _getPartials(id) {\n\t\tlet info,\n\t\t\toutcome;\n\n\t\tif (id === 'EuropeanRoulette' || id === 'PlatinumRoulette' || id === 'PlatinumRouletteSingleZero') {\n\t\t\tinfo = InfoRoulette;\n\t\t\toutcome = Number;\n\t\t}\n\n\t\tif (id === 'PuntoBanco') {\n\t\t\tinfo = InfoPuntoBanco;\n\t\t\toutcome = Cards;\n\t\t}\n\n\t\treturn { info, outcome };\n\t}\n\n\t/**\n\t *\n\t * @param {String} group - the name of the group\n\t * @param {Object} collection - the collection from which the group is been extracted\n\t * @description extract similar properties from collection ane group them,\n\t\tfor example similar wins from all wins, for example all split wins (split_0, split_1) will be grouped into\n\t\tone object with total property(containing all split wins sum), and sub properties containing all info for all\n\t \tindividual split wins\n\t * @returns {Object}\n\t * @private\n\t */\n\tstatic _extractGroup(group, collection) {\n\t\tif(group === 'total' || group === 'limitedWin') return { total: collection[group] };\n\n\t\tlet sub = Object.keys(collection)\n\t\t\t.filter((key) => key.includes(group))\n\t\t\t.reduce((acc, key) => {\n\t\t\t\tacc[key] = collection[key];\n                return acc;\n            }, {});\n\n\t\treturn { sub };\n\t}\n\n\t/**\n\t *\n\t * @param {Object} map\n\t * @param {Object} obj\n\t * @description traverse object 'obj' recursively and replaces every key that is a also a key on 'map' object with the value in map(map[key])\n\t * @returns {Object}\n\t * @private\n\t */\n\tstatic _mapKeys(map, obj) {\n\t\treturn Object.keys(obj).reduce((acc, key) => {\n\t\t\tlet k = map[key] || key;\n\n\t\t\tacc[k] = typeof obj[key] === 'object' && obj[key] !== null && key !== 'responses' ? DopTableParser._mapKeys(map, obj[key]) : obj[key];\n\n\t\t\treturn acc;\n\t\t}, {});\n\t}\n}\n\nmodule.exports = DopTableParser;\n","const DopTableParser = require('./DopTableParser');\nconst BlackJackParser = require('./games/BlackJackParser');\n\nclass DopTableParserFactory {\n\n    constructor() {\n        this.parsers = {\n            //currently EuropeanRoulette, PlatinumRoulette and PuntoBanco use DopTableParser\n            ClassicBlackjack: BlackJackParser,\n            DONDBlackjack: BlackJackParser,\n            PlatinumBlackjack: BlackJackParser,\n            PlatinumBlackjackSideBetsPA: BlackJackParser,\n        };\n    }\n\n    /**\n     * Creates an appropriate parser instance for the specified game id\n     * @param  {String} gameId The game id\n     * @return {DopTableParser} The table parser instance\n     */\n    createParser(gameId) {\n        if(gameId in this.parsers) {\n            return new this.parsers[gameId]();\n        }\n\n        return new DopTableParser();\n    }\n}\n\nmodule.exports = DopTableParserFactory;","const Handlebars = require('hbsfy/runtime');\nconst Hands = require('../../../../../templates/Partials/hands.hbs');\nconst InfoBlackJack = require('../../../../../templates/Partials/infoBlackjack.hbs');\nconst DefaultParser = require('../../../DefaultParser');\nconst Language = require('../../../../utils/Language');\n\nconst HANDS_ORDER = [\n    'dealer',\n    'hand_0',\n    'hand_0_side_0',\n    'hand_0_side_1',\n    'hand_0_side_2',\n    'hand_0_split_0',\n    'hand_1',\n    'hand_1_side_0',\n    'hand_1_side_1',\n    'hand_1_side_2',\n    'hand_1_split_0',\n    'hand_2',\n    'hand_2_side_0',\n    'hand_2_side_1',\n    'hand_2_side_2',\n    'hand_2_split_0',\n    'insurance_hand_0',\n    'insurance_hand_1',\n    'insurance_hand_2',\n    'total',\n    'limitedWin',\n];\n\nclass BlackJackParser extends DefaultParser {\n\n    /**\n     * This method parses the response from the server and returns a suitable object that can be used to add the data\n     * to the handlebars.\n     * @param {String} gameId - gameId of the project\n     * @param {Object} data - the data received from the server (before any sort of manipulation).\n     * @returns {Object} an object with all the data ready for the handlebars\n     */\n    parse(gameId, data) {\n        this.gameId = gameId;\n        this.data = data;\n        this.limitedWin = this.data.game.win.limitedWin;\n        this.handsData = this.data.game.gameData && this.data.game.gameData.hands;\n\n        //This check is used in case of HERMES gpanel results\n        if(this.data.result && this.data.result.history) this.data = this.data.result.history;\n\n        Handlebars.registerPartial('outcome', Hands);\n        Handlebars.registerPartial('info', InfoBlackJack);\n\n        return {\n            gameDetails: {\n                gameId: this.gameId,\n                roundId: this.data.transactions.roundId,\n                prevRoundId: this.data.transactions.prevRoundId,\n                nextRoundId: this.data.transactions.nextRoundId,\n                serverTimeStart: this.data.transactions.startTime,\n                serverTimeEnd: this.data.transactions.endTime,\n            },\n            transactions: {\n                balance: {\n                    cash: this.data.user.balance.cash,\n                    freeBets: this.data.user.balance.freeBets,\n                    sessionCash: this.data.user.balance.sessionCash,\n                    sessionFreeBets: this.data.user.balance.sessionFreeBets,\n                    bonus: this.data.user.balance.bonus\n                }\n            },\n            regulations: this.data.regulations,\n            winDetails: this.extractWinDetails(this.data.game.win),\n            hands: this.handsData,\n            sideBets: this.handsData && this.extractSideBets(this.handsData),\n            handScores: this.handsData && this.extractHandInfo(this.handsData),\n            totalStake: this.handsData && this.extractTotalStake(this.handsData, 'stake'),\n            totalSideBetsStake: this.handsData && this.extractSidebetTotalStake(this.handsData, 'insurance'),\n            totalWins: Number(this.data.game.win.total),\n            promo: this.data.promo\n        };\n    }\n\n    /**\n     * Sanitze spin data object\n     * @private\n     * @return {Object} Sanitized data\n     */\n    sanitizeData(data) {\n        //This check is used in case of HERMES gpanel results\n        if(data.result && data.result.history) data = data.result.history;\n\n        let multiResponseFormat = !!data.responses; //Check for multiple responses format\n        if(multiResponseFormat){ //We are using multi-response format\n            const transactions = data.transactions;\n            const responses = data.responses;\n            const regulations = data.regulations;\n            const userData = {};\n\n            if (!responses[responses.length - 1].game.win.limitedWin) {\n                //use the first response as it will have the correct Balance before Stake/Balance after Bet values\n                userData.balance = responses[0].user.balance;\n                userData.balance.cash.atEnd = responses[responses.length - 1].user.balance.cash.atEnd;\n                userData.balance.freeBets.atEnd = responses[responses.length - 1].user.balance.freeBets.atEnd;\n                userData.balance.sessionCash.atEnd = responses[responses.length - 1].user.balance.sessionCash.atEnd;\n                userData.balance.sessionFreeBets.atEnd = responses[responses.length - 1].user.balance.sessionFreeBets.atEnd;\n            } else {\n                //use the last response as it will have the correct values for balance after bet and balance at end\n                userData.balance = responses[responses.length - 1].user.balance;\n                //use the first response as it will have the correct values for balance at start\n                userData.balance.cash.atStart = responses[0].user.balance.cash.atStart;\n                userData.balance.freeBets.atStart = responses[0].user.balance.freeBets.atStart;\n                userData.balance.sessionCash.atStart = responses[0].user.balance.sessionCash.atStart;\n                userData.balance.sessionFreeBets.atStart = responses[0].user.balance.sessionFreeBets.atStart;\n            }\n\n            data = responses[responses.length-1]; //Use the main spin response for now\n            data.user = userData;\n            data.transactions = transactions || data.result.history.transactions;\n            data.responses = responses;\n            data.regulations = regulations;\n        }\n\n        if (data && data.result && data.result.history) {\n            data = data.result.history;\n        }\n\n        if (!data.transactions) data.transactions = {}; // allow it ;)\n        if (!data.regulations) data.regulations = {}; // allow it ;)\n        // TODO: this is temporary fix when the server returns game:null.\n        if (!data.game) {\n            data = {\n                gameDetails: {\n                    gameId: this.gameId,\n                    roundId: data.transactions.roundId,\n                    prevRoundId: data.transactions.prevRoundId,\n                    nextRoundId: data.transactions.nextRoundId,\n                    serverTimeStart: data.transactions.startTime,\n                    serverTimeEnd: data.transactions.endTime,\n                },\n                transactions: {\n                    totalBet: null,\n                    totalWin: null,\n                    balance: {\n                        cash: data.user.balance.cash,\n                        freeBets: data.user.balance.freeBets,\n                        sessionCash: data.user.balance.sessionCash,\n                        sessionFreeBets: data.user.balance.sessionFreeBets,\n                        bonus: data.user.balance.bonus\n                    },\n                },\n                regulations: data.regulations,\n                winDetails: null,\n                reels: null,\n                promo: data.promo\n            };\n\n            data.hasGameData = false;\n        }else{\n            const autofinish = data.game.autofinish;\n\n            if (!data.game.gameData && autofinish && Array.isArray(autofinish) && autofinish.length) {\n                data.game.gameData = data.game.autofinish[autofinish.length-1].gameData;\n            }\n\n            data.hasGameData = true;\n        }\n\n        return data;\n    }\n\n    /**\n     * Filters and maps through the hands object from the response and returns a suitable object for the handleBars\n     * (score,handNames,cards,stakes);\n     * @param {Object} handsObj\n     * @returns {Object} - an object with all the necessary hand data for the history\n     */\n    extractHandInfo(handsObj) {\n        return this.sortHandsOrder(handsObj)\n            .map((hand) => {\n                let uniqueAction = '';\n                if(handsObj[hand].hasBlackjack) uniqueAction = `(${ Language.texts.GH_BLACKJACK })`;\n                if(handsObj[hand].isDoubled) uniqueAction = `(${ Language.texts.GH_DOUBLE_DOWN })`;\n                if(handsObj[hand].offerState === 'offerAccept') uniqueAction = `(${ Language.texts.GH_OFFER_ACCEPTED })`;\n                if(handsObj[hand].isSurrendered) uniqueAction = `(${ Language.texts.GH_SURRENDERED })`;\n\n                return {\n                    score: handsObj[hand].score,\n                    handName: hand.toUpperCase(),\n                    uniqueAction: uniqueAction,\n                    stake: handsObj[hand].stake,\n                    cards: handsObj[hand].cards\n                };\n        });\n    }\n\n    /**\n     * This method takes the handsObj from the response and sums up all stakes in it, depending on the type.\n     * @param {Object} handsObj\n     * @param {String} type - types of stakes (insurance stakes or normal stakes)\n     * @returns {Number} sum of stakes in hands object\n     */\n    extractTotalStake(handsObj, type) {\n        return this.sortHandsOrder(handsObj)\n            .filter((hand) => type !== 'stake' ? handsObj[hand].hasInsurance : true)\n            .map((hand) => type !== 'stake' ? Number(handsObj[hand].stake)/2 : Number(handsObj[hand].stake))\n            .reduce((a,b) => a + b, 0);\n    }\n\n    /**\n     * This method takes the handsObj from the response and sums up all sidebet stakes for each and plus the insurance stakes\n     * @param {Object} handsObj\n     * @returns {Number} sum of all sidebet stakes in hands object\n     */\n    extractSidebetTotalStake(handsObj) {\n        const insuranceStake = this.extractTotalStake(handsObj, 'insurance');\n        const sidebetStakes = this.sortHandsOrder(handsObj)\n            .filter((hand) => Boolean(handsObj[hand].sideBet))\n            .flatMap(hand => handsObj[hand].sideBet.map((sideBet) => Number(sideBet.stake)))\n            .reduce((total, stake) => total + stake, 0);\n\n        return insuranceStake+sidebetStakes;\n    }\n\n    /**\n     * This method returns a converted hand object, where the keys are upper-cased to match the Texts.js keys, and\n     * the values are converted to Integers.\n     * @param {Object} winObj\n     * @returns {Object}\n     */\n    extractWinDetails(winObj) {\n        const res = this.sortHandsOrder(winObj)\n            .filter((hand) => hand !== 'total')\n            .reduce((acc, win) => {\n                if (win === 'limitedWin') acc['GH_LIMITED_WIN'] = Number(winObj[win]);\n                else acc[win.toUpperCase()] = Number(winObj[win]);\n\n                return acc;\n        }, {});\n\n        return res;\n    }\n\n    /**\n     * This method returns an array of all insurance bets (the names of the insured hand and the amounts).\n     * @param {Object} handsObj\n     * @returns {Array} sidebetsArray - if there are any insurance bets\n     */\n    extractSideBets(handsObj) {\n        let sidebetsArray = [];\n        let hands = this.sortHandsOrder(handsObj)\n        .filter((hand) => {\n            return hand !== 'dealer' && ((handsObj[hand].hasInsurance && !hand.includes('split') || handsObj[hand].sideBet));\n        });\n\n        if(!hands.length) return;\n\n        hands.forEach((handType) => {\n            const hand = handsObj[handType];\n\n            if(hand.sideBet) {\n                hand.sideBet.forEach((sideBet) => {\n                    sidebetsArray.push({\n                        name: Language.texts[sideBet.name.toUpperCase()],\n                        stake: Number(sideBet.stake),\n                    });\n                });\n            }\n\n            if(hand.hasInsurance){\n                sidebetsArray.push({\n                    name: `${Language.texts[handType.toUpperCase()]} ${Language.texts.INSURANCE}`,\n                    stake: Number(hand.stake/2),\n                });\n            }\n\n        });\n\n        return sidebetsArray;\n    }\n\n    /**\n     * Returns an array of handNames with the correct order.\n     * @param {Object} handObj\n     * @returns {Array.<string>}\n     */\n    sortHandsOrder(handObj = {}) {\n        return HANDS_ORDER.filter((hand) => Object.keys(handObj).includes(hand))\n    }\n\n}\n\nmodule.exports = BlackJackParser;","const CacheHelper = require('./CacheHelper');\n\nclass AssetsHelper extends CacheHelper {\n\n  getTranslations(args = {}) {\n    const {\n      games, lang = this.lang, onProgress, onComplete, onError,\n    } = args;\n\n    if (!games) {\n      throw new Error('Invalid game entered.');\n    }\n\n    const result = {};\n\n    const promises = games.map(game => {\n      const override = this.parseGameName(game);\n\n      return this.getTranslationsFile(override)\n        .then((translations) => { // fallback move in setOptions relative to supported languages\n          const subLang = lang.substring(0, 2);\n          const fallbackLang = 'en';\n\n          if (translations[lang]) {\n            result[game] = translations[lang];\n          } else if (translations[subLang]) {\n            result[game] = translations[subLang];\n          } else {\n            result[game] = translations[fallbackLang];\n          }\n\n          if (onProgress) {\n            onProgress({ game, value: result[override] });\n          }\n        });\n    });\n\n    return Promise.all(promises)\n      .then(() => result)\n      .catch((e) => {\n        if (onError) onError(e);\n        return {};\n      });\n  }\n\n  /**\n   * @param {{}} args\n   * @param {Function} args.onComplete\n   * @param {Function} args.onUpdate\n   * @param {Function} args.onError\n   * @param {String} imageType\n   * @param {Array.<String>} args.games\n   * @param {Function} parser\n */\n  getImages(imageType, args = {}, parser) {\n    const {\n      games, onProgress, onComplete, onError,\n    } = args;\n\n    const result = {};\n\n    if (!games) {\n      throw new Error('Invalid games array entered.');\n    }\n\n    if (!imageType) {\n      throw new Error('Specify a image type please. banners | features | ...');\n    }\n\n    for (const game of games) {\n      const override = this.parseGameName(game);\n\n      this.getManifestFile(override).then(file => {\n        const images = file[imageType];\n        result[game] = parser(images, args, imageType);\n\n        if (onProgress) {\n          onProgress({ game, value: result[override] });\n        }\n      }).catch(e => {\n        console.warn(`${game} folder was not found in assets or something else went wrong ${e}`);\n\n        if (onError) {\n          onError(error);\n        }\n      }).then(() => onComplete && onComplete(result));\n    }\n  }\n\n  /**\n   * @param {Array.<Object>} tiles\n   * @param {Object} args\n   * @param {Array} args.games\n   * @param {String} args.lang\n   * @returns {Array.<Object>}\n   */\n  tilesDataParser(tiles, args) {\n    if (!tiles.en) return console.error('History: no english found for game. English language in mandatory');\n\n    return tiles.en.map((tile) => {\n      // Try to find localized tile\n      const localized = tiles[args.lang] && tiles[args.lang].find(item => tile.id === item.id);\n      let result = localized || tile;\n\n      if (!result.src.includes(this.cdn)) {\n        result.src =  `${this.cdn}games/${result.src}`;\n      }\n\n      return result;\n    });\n  }\n\n  getTiles(args) {\n    return this.getImages('tiles', args, this.tilesDataParser.bind(this));\n  }\n\n}\n\nmodule.exports = AssetsHelper;\n","const overrides = require('./Overrides');\n\nclass CacheHelper {\n  constructor({\n    cdn, provider, timestamp, lang,\n  } = {}) {\n    this.cdn = cdn || null;\n    this.provider = provider || null;\n    this.timestamp = timestamp || '';\n    this.lang = lang || 'en';\n    this.cache = {};\n  }\n\n  setOptions({\n    cdn, provider, timestamp, lang,\n  } = {}) {\n    if (cdn) this.cdn = cdn;\n    if (provider) this.provider = provider;\n    if (timestamp) this.timestamp = timestamp;\n    if (lang) this.lang = lang;\n  }\n\n  getManifestFile(game) {\n    return new Promise(resolve => {\n        if (!this.cache[game]) this.cache[game] = {};\n\n        let { manifest } = this.cache[game];\n\n        if (!manifest) {\n          const path = `${this.cdn}games/${game}/files.json${this.timestamp}`;\n\n          fetch(path).then(response => response.json()).then(data => {\n            this.cache[game].manifest = data;\n            return resolve(data);\n          }).catch(e => {\n            console.error(e);\n          });\n        } else {\n            return resolve(manifest);\n        }\n    });\n  }\n\n  getTranslationsFile(game) {\n    return this.getManifestFile(game).then((file) => {\n      let { translations } = this.cache[game];\n\n      if (!translations) {\n        const locale = file.locale.find(f => f.id === 'translations');\n\n        const path = `${this.cdn}games/${locale.src}`;\n\n        return fetch(path)\n          .then((response) => response.json())\n          .then((translations) => {\n            this.cache[game].translations = translations;\n\n            return translations;\n        })\n      } else {\n        return Promise.resolve(translations);\n      }\n\n    });\n  }\n\n  parseGameName(game) {\n    let override = game;\n\n    if (overrides.default[game]) {\n      override = overrides.default[game];\n    }\n\n    if (this.provider && overrides[this.provider] && overrides[this.provider][game]) {\n      override = overrides[this.provider][game];\n    }\n\n    return override;\n  }\n}\n\nmodule.exports =  CacheHelper;\n","const Format = require('./Format');\n\nconst RIGHT_POSITION_CURRENCIES = [\n\t'NOK', // kr symbol\n\t'SEK', // kr symbol\n\t'DKK', // kr symbol\n\t'AMD', // ֏ symbol\n\t'BGN', // лв. symbol\n\t'CZK', // Kč symbol\n\t'GEL', // ₾ symbol\n\t'VN2', // VN2 symbol\n\t'KR2', // KR2 symbol\n\t'ID2', // ID2 symbol\n]\n\nconst CURRENCIES = {\n\t'NOK': {\n\t\tthousands: '',\n\t\tdecimals: ',',\n\t\tposition: 'right',\n\t},\n};\n\n\nclass Currency {\n\t/** @type {string} */\n\t_code = 'USD';\n\n\t/** @type {string} */\n\t_symbol = '$';\n\n\t/** @type {string} */\n\t_position = 'left';\n\n\t/** @type {string} */\n\t_thousands = ',';\n\n\t/** @type {string} */\n\t_decimals = '.';\n\n\t/** @type {number} */\n\t_digits = 2;\n\n\t/** @type {string} */\n\t_formatting = '$%s';\n\n\tstatic singleton = new Currency({});\n\n\tstatic set(cfg) {\n\t\treturn this.singleton.set(cfg);\n\t}\n\n\tstatic format(number) {\n\t\treturn this.singleton.format(number);\n\t}\n\n\t/**\n\t * Constructor.\n\t *\n\t * @param {Object} object\n\t */\n\tconstructor(object) {\n\t\tif (this._exists(object)) this.set(object);\n\t}\n\n\t/**\n\t * Setup the currency config.\n\t *\n\t * @param {Object} object\n\t * @param {string|null} [object.code]\n\t * @param {string|null} [object.symbol]\n\t * @param {string|null} [object.position]\n\t * @param {string|null} [object.thousands]\n\t * @param {string|null} [object.decimals]\n\t * @param {number|null} [object.digits]\n\t */\n\tset(object) {\n\t\tif (this._exists(object.code)) this._code = object.code;\n\n\t\t// BGP-669 hardcoded currencies config for standalone instance of history(e.g. backoffice)\n\t\t// for games this config comes from bridge\n\t\tif(CURRENCIES[this._code]) {\n\t\t\tthis._thousands = CURRENCIES[this._code].thousands;\n\t\t\tthis._decimals = CURRENCIES[this._code].decimals;\n\t\t\tthis._position = CURRENCIES[this._code].position;\n\t\t}\n\n\t\tif (this._exists(object.symbol)) this._symbol = object.symbol;\n\t\tif (this._exists(object.position)) {\n\t\t\tthis._position = object.position;\n\t\t} else if (RIGHT_POSITION_CURRENCIES.includes(this._code)) { // if position is defined in object RIGHT_POSITION_CURRENCIES won't be applied\n\t\t\tthis._position = 'right'\n\t\t}\n\t\tif (this._exists(object.thousands)) this._thousands = object.thousands;\n\t\tif (this._exists(object.decimals)) this._decimals = object.decimals;\n\t\tif (this._exists(object.digits)) this._digits = object.digits;\n\t\tthis._formatting = (this._position === 'right') ? '%s' + this._symbol : this._symbol + '%s';\n\t}\n\n\t/**\n\t * Format a number\n\t *\n\t * @param {number} number\n\t * @returns {string}\n\t */\n\tformat(number) {\n\t\treturn Format.currency(number, this._code, this._formatting, this._decimals, this._thousands, this._digits);\n\t}\n\n\t_exists(el) {\n\t\treturn typeof el !== 'undefined' && el !== null;\n\t}\n\t\n\t/** @returns {string} */\n\tget code() {\n\t\treturn this._code;\n\t}\n\n\t/** @returns {string} */\n\tget symbol() {\n\t\treturn this._symbol;\n\t}\n\n\t/** @returns {string} 'left' or 'right' */\n\tget position() {\n\t\treturn this._position;\n\t}\n\n\t/** @returns {string} */\n\tget thousands() {\n\t\treturn this._thousands;\n\t}\n\n\t/** @returns {string} */\n\tget decimals() {\n\t\treturn this._decimals;\n\t}\n\n\t/** @returns {number} */\n\tget digits() {\n\t\treturn this._digits;\n\t}\n\n\t/** @returns {string} */\n\tget formatting() {\n\t\treturn this._formatting;\n\t}\n}\n\nmodule.exports = new Currency({});","\nclass FeatureBuyParser {\n\n  constructor (assetsHelper) {\n    this.assetsHelper = assetsHelper;\n  }\n\n  parse(gameId, language, data) {\n    return this.getTranslations(gameId, language)\n      .then(translations => {\n        if (data.transactions && data.transactions.featureBuyCost) {\n          const currenrFbName = data.transactions.featureBuyName;\n\n          if (translations[currenrFbName]) {\n            data.transactions.featureBuyName = translations[currenrFbName].name || translations[currenrFbName];\n          }\n        }\n\n        return data;\n      });\n  }\n\n  getTranslations(gameId, lang) {\n    return new Promise(resolve => {\n      this.assetsHelper.getTranslations({ games: [gameId], lang })\n        .then((translations) => resolve(translations[gameId] ? translations[gameId].features : []));\n    });\n  }\n}\n\nmodule.exports = FeatureBuyParser;","const EXCLUDED_PROPS = [\n\t'rtp', // rtp is number passed as string but is not money based\n\t'responses' // avoid endless recursion, data is already in .game\n];\n\nclass Format {\n\t/**\n\t * PHP-like number format.\n\t *\n\t * @param {number} number\n\t * @param {number} decimals\n\t * @param {string} decPoint\n\t * @param {string} thousandsSep\n\t * @returns {string}\n\t * @static\n\t */\n\tstatic number(number, decimals, decPoint, thousandsSep) {\n\t\tlet tmp = (number + '').replace(/[^0-9+\\-Ee.]/g, '');\n\t\tvar n = !isFinite(+ tmp) ? 0 : + tmp,\n\t\t\tprec = !isFinite(+decimals) ? 0 : Math.abs(decimals),\n\t\t\tsep = (typeof thousandsSep === 'undefined') ? ' ' : thousandsSep,\n\t\t\tdec = (typeof decPoint === 'undefined') ? '.' : decPoint,\n\t\t\ts,\n\t\t\ttoFixedFix = function (n, prec) {\n\t\t\t\tvar k = Math.pow(10, prec);\n\t\t\t\treturn '' + (Math.round(n * k) / k)\n\t\t\t\t\t\t.toFixed(prec);\n\t\t\t};\n\t\t// Fix for IE parseFloat(0.55).toFixed(0) = 0;\n\t\ts = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');\n\t\tif (s[0].length > 3) {\n\t\t\ts[0] = s[0].replace(/\\B(?=(?:\\d{3})+(?!\\d))/g, sep);\n\t\t}\n\t\tif ((s[1] || '')\n\t\t\t\t.length < prec) {\n\t\t\ts[1] = s[1] || '';\n\t\t\ts[1] += new Array(prec - s[1].length + 1)\n\t\t\t\t.join('0');\n\t\t}\n\t\treturn s.join(dec);\n\t}\n\n\t/**\n\t * Format currency using the PHP-like number format.\n\t *\n\t * @param {number} number\n\t * @param {string} currency\n\t * @param {string} [format]\n\t * @param {string} [decimals]\n\t * @param {string} [thousands]\n\t * @param {number} [digits]\n\t * @returns {string}\n\t * @static\n\t */\n\tcurrency(number, currency, format, decimals, thousands, digits) {\n\t\t// Current issues with using const Currencies.\n\t\t// 1 New currencies don't provide format, decimals, thousand and digits data.\n\t\t// 2 Mismatch between slots' format and below values (eg. in slot games JPY has digits = 2\n\t\t// var config = Currencies[currency];\n\t\t//\n\t\t// if (typeof config === 'undefined') {\n\t\t// \tconsole.warn(\"No configuration found for currency\", currency);\n\t\t// \tconfig = {\n\t\t// \t\t\"format\": format,\n\t\t// \t\t\"thousands\": thousands,\n\t\t// \t\t\"decimals\": decimals,\n\t\t// \t\t\"digits\": digits\n\t\t// \t};\n\t\t// \tCurrencies[currency] = config;\n\t\t// }\n\t\t//\n\t\t// var decPoint = decimals || config.decimals;\n\t\t// var thousandsSep = thousands || config.thousands;\n\t\t//\n\t\t// digits = digits || config.digits;\n\t\t// format = format || config.format;\n\n\t\tif (typeof digits == 'undefined' || digits === null) digits = 2;\n\t\tif (typeof format == 'undefined' || format === null) format = '$%s';\n\n\t\tvar l = Math.pow(10, digits);\n\t\tvar a = Math.round(number * l) / l;\n\t\tvar n;\n\n\t\tif (a < 0) n = ('-' + format).replace(\"%s\", Format.number(Math.abs(a), digits, decimals, thousands));\n\t\telse n = format.replace(\"%s\", Format.number(a, digits, decimals, thousands));\n\t\treturn n;\n\t}\n\n\t/**\n\t * Convert any number to 1/something.\n\t *\n\t * @param {number} number\n\t * @returns {string}\n\t * @static\n\t */\n\tstatic fraction(number) {\n\t\treturn '1/' + (number ? (1 / number).toFixed(1) : '0.0');\n\t}\n\n\t/**\n\t * Parse any number as a float, but don't return NaN, just 0.\n\t *\n\t * @param {number} number\n\t * @returns {number}\n\t * @static\n\t */\n\tstatic float(number) {\n\t\treturn number ? parseFloat(number) : '0';\n\t}\n\n\t/**\n\t * Parse any number as an integer, but don't return NaN, just 0.\n\t *\n\t * @param {number} number\n\t * @returns {number}\n\t * @static\n\t */\n\tstatic integer(number) {\n\t\treturn number ? parseInt(number) : '0';\n\t}\n\n\t/**\n\t * Convert any float to percent string.\n\t *\n\t * @param {number} number\n\t * @param {number} digits\n\t * @returns {string}\n\t * @static\n\t */\n\tstatic percent(number, digits) {\n\t\tif (!digits && digits !== 0) digits = 4;\n\t\tvar tail = '';\n\t\tfor (var i = 0; i < digits; i ++) tail += '0';\n\t\treturn number ? (number * 100).toFixed(digits) + '%' : '0.' + tail + '%';\n\t}\n\n\t/**\n\t * @param {object} obj\n\t * Parses the whole response converting money values stored as strings to Number.\n\t * These values are necessary as number for internal calculations such as total wins, rounding corrections.\n\t * Formatting the number back as currency in the template is done by the Currency class.\n\t */\n\tconvertMoneyToNumber(obj) {\n\t\tlet value;\n\n\t\tconst stringIsNumber = (value) => {\n\t\t\treturn typeof value === 'string' && !isNaN(parseFloat(value)) && isFinite(value);\n\t\t}\n\n\t\tfor (let prop in obj) {\n\t\t\tif (obj.hasOwnProperty(prop)) {\n\t\t\t\tif (EXCLUDED_PROPS.includes(prop)) continue;\n\n\t\t\t\tvalue = obj[prop];\n\n\t\t\t\tif (typeof value === 'object') {\n\t\t\t\t\tthis.convertMoneyToNumber(value);\n\t\t\t\t} else if (stringIsNumber(value)) {\n\t\t\t\t\tobj[prop] = parseFloat(value);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n}\n\nmodule.exports = new Format({});","const Texts = require('../config/Texts');\nconst Config = require('../config/Config');\n\n/**\n * Exposes singleton with preset texts for a given language code.\n * Usage: call required class with language code param (constructor or change method),\n * elsewhere - only require and call Language.texts.KEY_NAME\n */\nclass Language {\n    /**\n     * Singleton\n     * @type {Language}\n     * @private\n     */\n\tstatic _instance = null;\n\n    /**\n     * @type {string}\n     * @private\n     */\n\t_code = '';\n\n    /**\n     * @type {Object}\n     * @private\n     */\n\t_texts = null;\n\n    /**\n     * @param {string} code\n     */\n\tconstructor(code) {\n\t\tif (!Config.defaults.lang) {\n\t\t\tthrow new Error('Missing default language.');\n\t\t}\n\n\t\tcode = Language.supported(code);\n\n\t\tif (!Language._default) {\n\t\t\tthis._code = code;\n\t\t\tthis._texts = Texts[code];\n\t\t\tLanguage._instance = this;\n\t\t} else {\n\t\t\tconsole.warn('Language has already been instantiated.');\n\t\t}\n\t}\n\n    /**\n     * @param {string} code\n     */\n\tstatic change(code) {\n\t\tconst instance = Language.instance;\n\n\t\tcode = Language.supported(code);\n\n\t\tinstance._code = code;\n\t\tinstance._texts = Texts[code];\n\t\tconsole.info('Language changed to:', code);\n\t}\n\n    /**\n     * @returns {Language}\n     */\n\tstatic get instance() {\n\t\tif (!Language._instance) Language._instance = new Language(Config.defaults.lang);\n\n\t\treturn Language._instance;\n\t}\n\n    /**\n     * @returns {Object} current language texts\n     */\n\tstatic get texts() {\n\t\treturn Language.instance._texts;\n\t}\n\n    /**\n     * Code support check with fallbacks\n     * @param code\n     * @returns {string} original code if supported, fallback to base or default if not\n     */\n\tstatic supported(code) {\n\t\tif (typeof code === 'undefined') return Config.defaults.lang;\n\t\tif (!Texts.hasOwnProperty(code)) {\n\t\t\tlet baseCode = code.substr(0, 2); // for example en-US => en\n\n\t\t\tif (!Texts.hasOwnProperty(baseCode)) {\n\t\t\t\tconsole.error(`Language code was not found: ${code}, falling back to default: ${Config.defaults.lang}`);\n\n\t\t\t\treturn Config.defaults.lang;\n\t\t\t} else {\n\t\t\t\tconsole.warn(`Language was not found: ${code}, fallback available: ${baseCode}`);\n\n\t\t\t\treturn baseCode;\n\t\t\t}\n\t\t}\n\n\t\treturn code;\n\t}\n\n\t/**\n     * @returns {String} current language code\n     */\n\tstatic currentCode() {\n\t\treturn Language.instance._code.toLowerCase().trim();\n\t}\n}\n\nmodule.exports = Language;\n","module.exports = {\n    default: {\n      PlatinumBlackjack: 'PlatinumBlackjackSideBets',\n      BlackjackOriginal: 'BlackjackPremium3H',\n      BlackjackOriginalSideBets: 'BlackjackPremium3HPlus',\n      BlackjackOriginalCashOut: 'BlackjackPremium3HCashOut',\n      BlackjackClassic: 'BlackjackStandard3H',\n      RouletteClassic: 'RouletteEuropean',\n      RouletteOriginalMoneyBack: 'RouletteMoneyBack',\n      RouletteOriginalStats: 'RoulettePremiumPlus',\n      RoulettePremium: 'RoulettePremium2018',\n      PaddyPowerGoldHaxe: 'PaddyPowerGold',\n    },\n    paddyMars: {\n      PlatinumBlackjack: 'PlatinumBlackjackSideBets',\n      PaddyPowerGold: 'PaddyPowerGoldPaddy',\n      PaddyPowerGoldHaxe: 'PaddyPowerGoldPaddy',\n      PaddysLuckyMine: 'PaddysLuckyMinePaddy',\n      BlackjackOriginal: 'BlackjackPremium3HPaddy',\n      BlackjackOriginalSideBets: 'BlackjackPremium3HPlusPaddy',\n      BlackjackOriginalCashOut: 'BlackjackPremium3HCashOutPaddy',\n      BlackjackClassic: 'BlackjackStandard3HPaddy',\n      BlackjackPremiumSideBets: 'BlackjackPremiumSideBetsPaddy',\n      RouletteClassic: 'RouletteEuropeanPaddy',\n      RouletteOriginalMoneyBack: 'RouletteMoneyBackPaddy',\n      RouletteOriginalStats: 'RoulettePremiumPlusPaddy',\n      RoulettePremium: 'RoulettePremium2018Paddy',\n    },\n  };","const Currency = require ('../utils/Currency');\nconst Handlebars = require('hbsfy/runtime');\nconst Language = require('./Language');\nconst Config = require('../config/Config');\nconst moment = require('moment');\n\nconst toSlash = (string) => string.replace(/(?:^|\\.?)([A-Z])/g, (x, y) => `_${y}`).replace(/^_/, '').toUpperCase();\nconst ROULETTE_COLORS = {\n\tred: [1, 3, 5, 7, 9, 12, 14, 16, 18, 19, 21, 23, 25, 27, 30, 32, 34, 36],\n\tblack: [2, 4, 6, 8, 10, 11, 13, 15, 17, 20, 22, 24, 26, 28, 29, 31, 33, 35],\n};\nconst SUITS = [\n\t{ code: 'c', value: 'clubs'},\n\t{ code: 'd', value: 'diamonds'},\n\t{ code: 'h', value: 'hearts'},\n\t{ code: 's', value: 'spades'},\n];\n\nHandlebars.registerHelper('getCardRank', (card) => {\n    return card.split('')[0];\n});\n\nHandlebars.registerHelper('sum', function (first, second) {\n\treturn parseInt(first) + parseInt(second);\n});\n\nHandlebars.registerHelper('ifCond', function (v1, v2, options) {\n\tif (v1 === v2) {\n\t\treturn options.fn(this);\n\t}\n\n\treturn options.inverse(this);\n});\n\nHandlebars.registerHelper('ifNot', function (v1, v2, options) {\n\tif (v1 !== v2) {\n\t\treturn options.fn(this);\n\t}\n\n\treturn options.inverse(this);\n});\n\nHandlebars.registerHelper('isArray', (value) => {\n\treturn Array.isArray(value);\n});\n\nHandlebars.registerHelper('formatSum', function (sum, hideDecimal, hideZero) {\n\tif (hideZero && sum === 0) return '';\n\n\tCurrency.set({ digits: hideDecimal === true ? 0 : 2 });\n\n\treturn Currency.format(sum);\n});\n\nHandlebars.registerHelper('selectLastElement', function(array) {\n\treturn array[array.length-1];\n});\n\nHandlebars.registerHelper('math', function (lvalue, operator, rvalue, options) {\n\tlvalue = parseFloat(lvalue);\n\trvalue = parseFloat(rvalue);\n\n\treturn {\n\t\t'+': lvalue + rvalue,\n\t\t'-': lvalue - rvalue,\n\t\t'*': lvalue * rvalue,\n\t\t'/': lvalue / rvalue,\n\t\t'%': lvalue % rvalue,\n\t}[operator];\n});\n\nHandlebars.registerHelper('compare', function (lvalue, comparator, rvalue) {\n\tlvalue = parseFloat(lvalue);\n\trvalue = parseFloat(rvalue);\n\n\treturn {\n\t\t'>': lvalue > rvalue,\n\t\t'<': lvalue < rvalue,\n\t\t'=': lvalue == rvalue,\n\t\t'>=': lvalue <= rvalue,\n\t\t'<=': lvalue >= rvalue,\n\t}[comparator];\n});\n\nHandlebars.registerHelper('isSelected', function (selectedIndex, currentIndex) {\n\treturn selectedIndex === currentIndex ? 'selected' : '';\n});\n\nHandlebars.registerHelper('localTime', function (timeStringUTC) {\n\treturn moment.utc(timeStringUTC).local().format('YYYY-MM-DD HH:mm:ss (Z)');\n});\n\nHandlebars.registerHelper('ifNum', function (num, options) {\n\tif (_.isNumber(num)) {\n\t\treturn options.fn(this);\n\t} else {\n\t\treturn options.inverse(this);\n\t}\n});\n\nHandlebars.registerHelper('notUndefinedOrNull', function (value) {\n\treturn typeof(value) !== 'undefined' && value !== null;\n});\n\nHandlebars.registerHelper('translate', function (keyword) {\n\treturn Language.texts[keyword];\n});\n\nHandlebars.registerHelper('translateTableWinner', function (win) {\n\tif (win === 'banker') return Language.texts.GH_BANKER;\n\tif (win === 'player') return Language.texts.GH_PLAYER;\n\tif (win === 'tie') return Language.texts.GH_TIE;\n\tif (win === 'bankerPair') return Language.texts.GH_BANKER_PAIR;\n\tif (win === 'playerPair') return Language.texts.GH_PLAYER_PAIR;\n\tif (win === 'total') return Language.texts.GH_GAME_TOTAL;\n\n\treturn '';\n});\n\nHandlebars.registerHelper('translateFromKey', function(key, loose) {\n    key = key || '';\n    let text = Language.texts[`GH_${toSlash(key)}`];\n\n    if (text) return text;\n\n    // this is only added if we want to skip the warn for some reason\n    let skipWarn = typeof loose === 'boolean' && loose;\n    !skipWarn && console.warn('There is no text for key: ', key);\n\n    return key;\n});\n\nHandlebars.registerHelper('getNumberColor', function (number) {\n\tif (typeof number === 'string') number = parseInt(number);\n\treturn Object.keys(ROULETTE_COLORS).reduce((acc, color) => (ROULETTE_COLORS[color].includes(number)) ? color : acc, 'green');\n});\n\nHandlebars.registerHelper('translateScratchGameText', function(keyword) {\n\tswitch(keyword) {\n\t\tcase 'matchNumbersBonus':\n\t\t\treturn Language.texts.SCRATCH_MATCH_NUMBER_BONUS;\n\t\tcase 'sumOfSevenBonus':\n\t\t\treturn Language.texts.SCRATCH_SUM_OF_SEVEN_BONUS;\n\t\tcase 'matchSymbolsBonus':\n\t\t\treturn Language.texts.SCRATCH_MATCH_SYMBOLS_BONUS;\n\t\tcase 'matchAmountsBonus':\n\t\t\treturn Language.texts.SCRATCH_MATCH_AMOUNTS_BONUS;\n\t\tcase 'freeCard':\n\t\t\treturn Language.texts.SCRATCH_FREE_CARD;\n\t\tcase 'cashPrize':\n\t\t\treturn Language.texts.SCRATCH_CASH_PRIZE;\n\t}\n\treturn `!!${keyword}!!`;\n});\n\nHandlebars.registerHelper('translateOtherWin', function (keyword) {\n\tif (keyword === 'bonus' || keyword === 'multiPickerBonus') {\n\t\treturn Language.texts.GH_BONUS_WIN;\n\t}\telse if (keyword === 'instantWin' || keyword === 'instantWinMega'\n            || keyword === 'instantWin_1' || keyword === 'instantWin_2'\n            || keyword === 'instantWin_3' || keyword === 'instantWin_4'\n            || keyword === 'instantWin_5') {\n\t\treturn Language.texts.GH_INSTANT_WIN;\n\t}\telse if (keyword === 'multiplier') {\n\t\treturn Language.texts.GH_MULTIPLIER_WINS;\n\t}\telse if (keyword === 'gamble') {\n\t\treturn Language.texts.GH_GAMBLE_WINS;\n\t}\telse if (keyword === 'limitedWin') {\n\t\treturn Language.texts.GH_LIMITED_WIN;\n\t} \telse if (keyword === 'modifierWin') {\n\t\treturn Language.texts.GH_MODIFIER_WIN;\n\t}\telse if (keyword === 'dragonWheel') {\n\t\treturn Language.texts.GH_MULTIPLIER_WINS;\n\t}\telse if (keyword === 'totalCoinsWin') {\n\t\treturn Language.texts.TOTAL_COINS_WIN;\n\t} \telse if (keyword === 'winExchange') {\n\t\treturn Language.texts.WIN_EXCHANGE;\n  \t} \telse if (keyword === 'halfCollected') {\n\t\treturn Language.texts.HALF_COLLECT;\n  \t} \telse if (keyword === 'fullCollected') {\n\t\treturn Language.texts.FULL_COLLECT;\n  \t}\telse {\n\t\treturn `!!${keyword}!!`;\n\t}\n});\n\nHandlebars.registerHelper('getTileAsset', function (tiles, tileId) {\n\tlet tile = tiles.find((item) => item.id === `img_tile${tileId}`);\n    if(!tile) return console.error(`History: img_tile${tileId} image not found`);\n    return tile.src;\n});\n\nHandlebars.registerHelper('getCardAsset', function (tiles, card) {\n\tconst tile = tiles.find((item) => item.id === `card-${card}`);\n\n\tif(!tile) return console.error(`History: card-${card} image not found`);\n\n\treturn tile.src;\n});\n\nHandlebars.registerHelper('getCardSuit', (card) => {\n\treturn getCardSuit(card);\n});\n\nHandlebars.registerHelper('getCardSuitAsset', (tiles, card) => {\n\tconst suit = getCardSuit(card);\n\tconst tile = tiles.find((item) => item.id === suit);\n\n\tif(!tile) return console.error(`History: ${suit} image not found`);\n\n\treturn tile.src;\n});\n\nHandlebars.registerHelper('hasAdditionalWayWin', function (gameId, tiles) {\n\tif (!_.contains(Config.hasAdditionalWin.wayWin, gameId) || !tiles.every((x) => Array.isArray(x))) return false;\n\n\t\tconst winPos = [];\n\t\ttiles.forEach((reelTiles, reel) => {\n\t\t\treelTiles.forEach((tile, index) => {\n\t\t\t\tif (tile) winPos.push({reel, index})\n\t\t\t});\n\t\t});\n\n\treturn winPos;\n});\n\nHandlebars.registerHelper('hasAdditionalScatterWin', function (gameId, tiles, spinData) {\n\tif (!_.contains(Config.hasAdditionalWin.scatterWin, gameId) ||\n\t\t!tiles.every((x) => Array.isArray(x)) ||\n\t\t!spinData.scatters || (spinData.scatters && spinData.scatters.length === 0)) return false;\n\n\t\tconst winPos = [];\n\t\ttiles.forEach((reelTiles, reel) => {\n\t\t\treelTiles.forEach((tile, index) => {\n\t\t\t\tif (tile) winPos.push({reel, index})\n\t\t\t});\n\t\t});\n\n\treturn winPos.every((x) => spinData.scatters.some(y => x.reel === y.reel && x.index === y.index));\n});\n\nHandlebars.registerHelper('isWays', function (gameId) {\n\treturn _.contains(Config.ways, gameId);\n});\n\nHandlebars.registerHelper('isCluster', function (gameId) {\n\treturn _.contains(Config.cluster, gameId);\n});\n\nHandlebars.registerHelper('isScatter', function (gameId) {\n\treturn _.contains(Config.scatterWins, gameId);\n});\n\nHandlebars.registerHelper('isDemo', function (promo) {\n\treturn promo && promo.mode === 'demo'\n});\n\nHandlebars.registerHelper('isVoucher', function (promo) {\n\treturn promo && promo.type === 'voucher'\n});\n\nHandlebars.registerHelper('validNumber', function (amount) {\n\treturn (typeof amount === 'number' || !isNaN(parseInt(amount))) &&\n\t\tparseInt(amount) !== 0;\n});\n\nHandlebars.registerHelper('hasHorizontalReels', function (gameId) {\n\treturn (_.contains(Config.horizontalReels.bottom, gameId) || _.contains(Config.horizontalReels.topAndBottom, gameId));\n});\n\nHandlebars.registerHelper('hasMultiplierFeature', function (gameId) {\n\treturn _.contains(Config.hasMultipliers, gameId);\n});\n\nHandlebars.registerHelper('hasMultipliers', function (root, reel, index, options = {}) {\n\tconst { data: { winDetails: { multipliers = [] } = {} } } = root;\n\tconst { type = 0 } = options;\n\n\tconst { multiplier } = getSpecific(multipliers, reel, index, type);\n\n\treturn typeof multiplier !== 'undefined';\n});\n\nHandlebars.registerHelper('getMultipliers', function (root, reel, index, options = {}) {\n\tconst { tiles, data: { winDetails: { multipliers } } } = root;\n\tconst { type = 0 } = options;\n\n\tconst { multiplier } = getSpecific(multipliers, reel, index, type);\n\n\tconst image = tiles.find(asset => asset.id === `multiplier_${multiplier}`);\n\tif (!image) return console.error(`History: multiplier_${multiplier} image not found`);\n\n\treturn image.src;\n});\n\nconst getSpecific = (objects, reel, index, type) => {\n\tconst found = objects.find(object => object.reel === reel && object.index === index && object.type === type);\n\n\treturn typeof found !== 'undefined' ? found : {};\n}\n\nlet getCardSuit = (card) => {\n\tlet suitCode = card.split('')[1].toLowerCase(); //'c', 'd'...\n\tlet suitObj = SUITS.find((suit) => suit.code === suitCode);\n\treturn suitObj.value;\n};\n","// hbsfy compiled Handlebars template\nvar HandlebarsCompiler = require('hbsfy/runtime');\nmodule.exports = HandlebarsCompiler.template({\"1\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"        <div class=\\\"player border-base\\\">\\n            <h3 class=\\\"label-type\\\">\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_GAME_PLAYER\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n            <div class=\\\"hand cards-\"\n    + alias3(container.lambda(((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.cards : stack1)) != null ? stack1.player : stack1)) != null ? stack1.length : stack1), depth0))\n    + \"\\\">\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.cards : stack1)) != null ? stack1.player : stack1)) != null ? stack1[\"2\"] : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(2, data, 0),\"inverse\":container.program(4, data, 0),\"data\":data})) != null ? stack1 : \"\")\n    + \"                <div class=\\\"card card-1\\\">\\n                    <img src=\\\"\"\n    + alias3((helpers.getCardAsset || (depth0 && depth0.getCardAsset) || alias2).call(alias1,(depth0 != null ? depth0.tiles : depth0),((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.cards : stack1)) != null ? stack1.player : stack1)) != null ? stack1[\"0\"] : stack1),{\"name\":\"getCardAsset\",\"hash\":{},\"data\":data}))\n    + \"\\\" alt=\\\"\\\">\\n                </div>\\n                <div class=\\\"card card-2\\\">\\n                    <img src=\\\"\"\n    + alias3((helpers.getCardAsset || (depth0 && depth0.getCardAsset) || alias2).call(alias1,(depth0 != null ? depth0.tiles : depth0),((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.cards : stack1)) != null ? stack1.player : stack1)) != null ? stack1[\"1\"] : stack1),{\"name\":\"getCardAsset\",\"hash\":{},\"data\":data}))\n    + \"\\\" alt=\\\"\\\">\\n                </div>\\n            </div>\\n        </div>\\n\";\n},\"2\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return \"                    <div class=\\\"card card-0\\\">\\n                        <img src=\\\"\"\n    + container.escapeExpression((helpers.getCardAsset || (depth0 && depth0.getCardAsset) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.tiles : depth0),((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.cards : stack1)) != null ? stack1.player : stack1)) != null ? stack1[\"2\"] : stack1),{\"name\":\"getCardAsset\",\"hash\":{},\"data\":data}))\n    + \"\\\" alt=\\\"\\\">\\n                    </div>\\n\";\n},\"4\":function(container,depth0,helpers,partials,data) {\n    return \"                    <div class=\\\"card card-0 hidden\\\">\\n                        <img src=\\\"\"\n    + container.escapeExpression((helpers.getCardAsset || (depth0 && depth0.getCardAsset) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.tiles : depth0),0,{\"name\":\"getCardAsset\",\"hash\":{},\"data\":data}))\n    + \"\\\" alt=\\\"\\\">\\n                    </div>\\n\";\n},\"6\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"        <div class=\\\"banker border-base\\\">\\n            <h3 class=\\\"label-type\\\">\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_GAME_BANKER\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n            <div class=\\\"hand cards-\"\n    + alias3(container.lambda(((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.cards : stack1)) != null ? stack1.banker : stack1)) != null ? stack1.length : stack1), depth0))\n    + \"\\\">\\n                <div class=\\\"card card-0\\\">\\n                    <img  src=\\\"\"\n    + alias3((helpers.getCardAsset || (depth0 && depth0.getCardAsset) || alias2).call(alias1,(depth0 != null ? depth0.tiles : depth0),((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.cards : stack1)) != null ? stack1.banker : stack1)) != null ? stack1[\"0\"] : stack1),{\"name\":\"getCardAsset\",\"hash\":{},\"data\":data}))\n    + \"\\\" alt=\\\"\\\">\\n                </div>\\n                <div class=\\\"card card-1\\\">\\n                    <img  src=\\\"\"\n    + alias3((helpers.getCardAsset || (depth0 && depth0.getCardAsset) || alias2).call(alias1,(depth0 != null ? depth0.tiles : depth0),((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.cards : stack1)) != null ? stack1.banker : stack1)) != null ? stack1[\"1\"] : stack1),{\"name\":\"getCardAsset\",\"hash\":{},\"data\":data}))\n    + \"\\\" alt=\\\"\\\">\\n                </div>\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.cards : stack1)) != null ? stack1.banker : stack1)) != null ? stack1[\"2\"] : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(7, data, 0),\"inverse\":container.program(9, data, 0),\"data\":data})) != null ? stack1 : \"\")\n    + \"            </div>\\n        </div>\\n\";\n},\"7\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return \"                    <div class=\\\"card card-2\\\">\\n                        <img  src=\\\"\"\n    + container.escapeExpression((helpers.getCardAsset || (depth0 && depth0.getCardAsset) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.tiles : depth0),((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.cards : stack1)) != null ? stack1.banker : stack1)) != null ? stack1[\"2\"] : stack1),{\"name\":\"getCardAsset\",\"hash\":{},\"data\":data}))\n    + \"\\\" alt=\\\"\\\">\\n                    </div>\\n\";\n},\"9\":function(container,depth0,helpers,partials,data) {\n    return \"                    <div class=\\\"card card-2 hidden\\\">\\n                        <img src=\\\"\"\n    + container.escapeExpression((helpers.getCardAsset || (depth0 && depth0.getCardAsset) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.tiles : depth0),0,{\"name\":\"getCardAsset\",\"hash\":{},\"data\":data}))\n    + \"\\\" alt=\\\"\\\" >\\n                    </div>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return \"<div class=\\\"row cards\\\">\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.cards : stack1)) != null ? stack1.player : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.cards : stack1)) != null ? stack1.banker : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(6, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"</div>\";\n},\"useData\":true});\n","// hbsfy compiled Handlebars template\nvar HandlebarsCompiler = require('hbsfy/runtime');\nmodule.exports = HandlebarsCompiler.template({\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n    return \"<div class=\\\"row hands\\\">\\n    <div class=\\\"score\\\"></div>\\n    <div class=\\\"cards\\\"></div>\\n</div>\";\n},\"useData\":true});\n","// hbsfy compiled Handlebars template\nvar HandlebarsCompiler = require('hbsfy/runtime');\nmodule.exports = HandlebarsCompiler.template({\"1\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"    <div>\\n        <h3>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_HANDS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n\\n        <div class=\\\"details\\\">\\n\"\n    + ((stack1 = helpers.each.call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.handScores : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(2, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"            <div class=\\\"right total\\\"><span class=\\\"italic\\\">\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_GAME_TOTAL\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</span> - \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.totalStake : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</div>\\n        </div>\\n\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.sideBets : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(7, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"    </div>\\n\";\n},\"2\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, alias3=container.lambda;\n\n  return \"                <div class=\\\"handLabels\\\">\\n                    <div class=\\\"left big\\\">\"\n    + alias2((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(alias1,(depth0 != null ? depth0.handName : depth0),{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \" \"\n    + alias2(alias3((depth0 != null ? depth0.uniqueAction : depth0), depth0))\n    + \"</div>\\n\"\n    + ((stack1 = helpers.unless.call(alias1,(data && data.first),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(3, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                </div>\\n                <div class=\\\"hand\\\">\\n                    <div class=\\\"score\\\">\"\n    + alias2(alias3((depth0 != null ? depth0.score : depth0), depth0))\n    + \"</div>\\n\"\n    + ((stack1 = helpers.each.call(alias1,(depth0 != null ? depth0.cards : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(5, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                </div>\\n\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                        <div class=\\\"right\\\"><span class=\\\"italic\\\">\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"STAKE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</span> - \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.stake : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</div>\\n\";\n},\"5\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                        <div class=\\\"cards\\\">\\n                            <div class=\\\"\"\n    + alias3((helpers.getCardSuit || (depth0 && depth0.getCardSuit) || alias2).call(alias1,depth0,{\"name\":\"getCardSuit\",\"hash\":{},\"data\":data}))\n    + \"\\\" style=\\\"background-image: url('\"\n    + alias3((helpers.getCardSuitAsset || (depth0 && depth0.getCardSuitAsset) || alias2).call(alias1,(depths[2] != null ? depths[2].tiles : depths[2]),depth0,{\"name\":\"getCardSuitAsset\",\"hash\":{},\"data\":data}))\n    + \"')\\\">\"\n    + alias3((helpers.getCardRank || (depth0 && depth0.getCardRank) || alias2).call(alias1,depth0,{\"name\":\"getCardRank\",\"hash\":{},\"data\":data}))\n    + \"</div>\\n                        </div>\\n\";\n},\"7\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"            <h3>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_SIDE_BETS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n            <div class=\\\"details\\\">\\n\"\n    + ((stack1 = helpers.each.call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.sideBets : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(8, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                <div class=\\\"right total withPadding\\\"><span class=\\\"italic\\\">\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_GAME_TOTAL\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</span> - \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.totalSideBetsStake : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</div>\\n            </div>\\n\";\n},\"8\":function(container,depth0,helpers,partials,data) {\n    var alias1=container.escapeExpression, alias2=depth0 != null ? depth0 : (container.nullContext || {}), alias3=helpers.helperMissing;\n\n  return \"                    <div class=\\\"handLabels withPadding\\\">\\n                        <div class=\\\"left\\\">\"\n    + alias1(container.lambda((depth0 != null ? depth0.name : depth0), depth0))\n    + \"</div>\\n                        <div class=\\\"right\\\">\"\n    + alias1((helpers.translate || (depth0 && depth0.translate) || alias3).call(alias2,\"STAKE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \" - \"\n    + alias1((helpers.formatSum || (depth0 && depth0.formatSum) || alias3).call(alias2,(depth0 != null ? depth0.stake : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</div>\\n                    </div>\\n\";\n},\"10\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return \"        <h3>\"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),\"GH_TRANSACTIONS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n\"\n    + ((stack1 = container.invokePartial(partials.transactions,depth0,{\"name\":\"transactions\",\"hash\":{\"isBonusRound\":((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.promo : stack1)) != null ? stack1.mode : stack1),\"transactionDetails\":((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.transactions : stack1)},\"data\":data,\"indent\":\"        \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"12\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return ((stack1 = helpers.each.call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(13, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"            <div class=\\\"right total withPadding\\\"><span class=\\\"italic\\\">\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_GAME_TOTAL\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</span> - \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.totalWins : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</div>\\n\";\n},\"13\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),depth0,{\"name\":\"if\",\"hash\":{},\"fn\":container.program(14, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"14\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                <div class=\\\"handLabels withPadding\\\">\\n                    <div class=\\\"left\\\">\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,(data && data.key),{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":</div>\\n                    <div class=\\\"right\\\">\"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,depth0,{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</div>\\n                </div>\\n\";\n},\"16\":function(container,depth0,helpers,partials,data) {\n    return \"            <div>\"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),\"GH_NO_WINS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</div>\\n\";\n},\"18\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"        <h3>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_GAME_DETAILS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n        <table class=\\\"details\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\n            <tr>\\n                <td>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_ROUND_ID\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":</td>\\n                <td class=\\\"text-right\\\">\"\n    + alias3(container.lambda(((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.gameDetails : stack1)) != null ? stack1.roundId : stack1), depth0))\n    + \"</td>\\n            </tr>\\n            <tr>\\n                <td>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_SERVER_TIME_START\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":</td>\\n                <td class=\\\"text-right\\\">\"\n    + alias3((helpers.localTime || (depth0 && depth0.localTime) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.gameDetails : stack1)) != null ? stack1.serverTimeStart : stack1),{\"name\":\"localTime\",\"hash\":{},\"data\":data}))\n    + \"</tr>\\n            <tr>\\n                <td>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_SERVER_TIME_END\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":</td>\\n                <td class=\\\"text-right\\\">\"\n    + alias3((helpers.localTime || (depth0 && depth0.localTime) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.gameDetails : stack1)) != null ? stack1.serverTimeEnd : stack1),{\"name\":\"localTime\",\"hash\":{},\"data\":data}))\n    + \"</td>\\n            </tr>\\n\"\n    + ((stack1 = helpers.each.call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.regulations : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(19, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"        </table>\\n\";\n},\"19\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return ((stack1 = helpers[\"if\"].call(alias1,(helpers.notUndefinedOrNull || (depth0 && depth0.notUndefinedOrNull) || helpers.helperMissing).call(alias1,depth0,{\"name\":\"notUndefinedOrNull\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(20, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"20\":function(container,depth0,helpers,partials,data) {\n    var alias1=container.escapeExpression;\n\n  return \"                    <tr>\\n                        <td>\"\n    + alias1((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),(data && data.key),{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":</td>\\n                        <td class=\\\"right\\\">\"\n    + alias1(container.lambda(depth0, depth0))\n    + \"</td>\\n                    </tr>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.hands : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n<div>\\n\"\n    + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.hideTransactionDetails : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(10, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n    <h3>\"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(alias1,\"GH_WIN_DETAILS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n    <div class=\\\"details\\\">\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.totalWins : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(12, data, 0, blockParams, depths),\"inverse\":container.program(16, data, 0, blockParams, depths),\"data\":data})) != null ? stack1 : \"\")\n    + \"    </div>\\n\\n\"\n    + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.hideGameDetails : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(18, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"</div>\\n\";\n},\"usePartial\":true,\"useData\":true,\"useDepths\":true});\n","// hbsfy compiled Handlebars template\nvar HandlebarsCompiler = require('hbsfy/runtime');\nmodule.exports = HandlebarsCompiler.template({\"1\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"        <h3>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_GAME_DETAILS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n        <table class=\\\"details\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\n            <tr>\\n                <td>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_ROUND_ID\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":</td>\\n                <td>\"\n    + alias3(container.lambda(((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.gameDetails : stack1)) != null ? stack1.roundId : stack1), depth0))\n    + \"</td>\\n            </tr>\\n            <tr>\\n                <td>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_GAME_WINNER\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":</td>\\n                <td>\"\n    + alias3((helpers.translateTableWinner || (depth0 && depth0.translateTableWinner) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.gameDetails : stack1)) != null ? stack1.winner : stack1),{\"name\":\"translateTableWinner\",\"hash\":{},\"data\":data}))\n    + \"</td>\\n            </tr>\\n            <tr>\\n                <td>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_SERVER_TIME_START\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":</td>\\n                <td>\"\n    + alias3((helpers.localTime || (depth0 && depth0.localTime) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.gameDetails : stack1)) != null ? stack1.serverTimeStart : stack1),{\"name\":\"localTime\",\"hash\":{},\"data\":data}))\n    + \"</td>\\n            </tr>\\n            <tr>\\n                <td>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_SERVER_TIME_END\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":</td>\\n                <td>\"\n    + alias3((helpers.localTime || (depth0 && depth0.localTime) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.gameDetails : stack1)) != null ? stack1.serverTimeEnd : stack1),{\"name\":\"localTime\",\"hash\":{},\"data\":data}))\n    + \"</td>\\n            </tr>\\n\"\n    + ((stack1 = helpers.each.call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.regulations : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(2, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"        </table>\\n\";\n},\"2\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return ((stack1 = helpers[\"if\"].call(alias1,(helpers.notUndefinedOrNull || (depth0 && depth0.notUndefinedOrNull) || helpers.helperMissing).call(alias1,depth0,{\"name\":\"notUndefinedOrNull\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"3\":function(container,depth0,helpers,partials,data) {\n    var alias1=container.escapeExpression;\n\n  return \"                    <tr>\\n                        <td>\"\n    + alias1((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),(data && data.key),{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":</td>\\n                        <td>\"\n    + alias1(container.lambda(depth0, depth0))\n    + \"</td>\\n                    </tr>\\n\";\n},\"5\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"            <tr>\\n                <td>\"\n    + alias3((helpers.translateFromKey || (depth0 && depth0.translateFromKey) || alias2).call(alias1,(data && data.key),true,{\"name\":\"translateFromKey\",\"hash\":{},\"data\":data}))\n    + \":</td>\\n                <td>\"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.total : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</td>\\n            </tr>\\n\";\n},\"7\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return \"        <h3>\"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),\"GH_TRANSACTIONS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n\"\n    + ((stack1 = container.invokePartial(partials.transactions,depth0,{\"name\":\"transactions\",\"hash\":{\"isBonusRound\":((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.promo : stack1)) != null ? stack1.mode : stack1),\"transactionDetails\":((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.transactions : stack1)},\"data\":data,\"indent\":\"        \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"9\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(10, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"10\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                <tr>\\n                    <td>\"\n    + alias3((helpers.translateFromKey || (depth0 && depth0.translateFromKey) || alias2).call(alias1,(data && data.key),true,{\"name\":\"translateFromKey\",\"hash\":{},\"data\":data}))\n    + \":</td>\\n                    <td>\"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.total : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</td>\\n                </tr>\\n\";\n},\"12\":function(container,depth0,helpers,partials,data) {\n    return \"            <td>\"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),\"GH_NO_WINS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</td>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"<div class=\\\"column\\\">\\n\"\n    + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.hideGameDetails : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n    <h3>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_GAME_STAKE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n    <table class=\\\"details\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\n\\n\"\n    + ((stack1 = helpers.each.call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.transactions : stack1)) != null ? stack1.stake : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(5, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n    </table>\\n</div>\\n\\n<div class=\\\"column\\\">\\n\"\n    + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.hideTransactionDetails : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(7, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n    <h3>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_WIN_DETAILS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n    <table class=\\\"details\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.totalWin : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(9, data, 0),\"inverse\":container.program(12, data, 0),\"data\":data})) != null ? stack1 : \"\")\n    + \"    </table>\\n</div>\\n\";\n},\"usePartial\":true,\"useData\":true});\n","// hbsfy compiled Handlebars template\nvar HandlebarsCompiler = require('hbsfy/runtime');\nmodule.exports = HandlebarsCompiler.template({\"1\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return \"            <tr class=\\\"mainRow\\\">\\n                <!-- TODO the second 'true' parameter is added only added to skip the warn 'There is no text for key' -->\\n                <td>\"\n    + container.escapeExpression((helpers.translateFromKey || (depth0 && depth0.translateFromKey) || helpers.helperMissing).call(alias1,(data && data.key),true,{\"name\":\"translateFromKey\",\"hash\":{},\"data\":data}))\n    + \":</td>\\n                \"\n    + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.total : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(2, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n            </tr>\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.sub : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"2\":function(container,depth0,helpers,partials,data) {\n    return \"<td>\"\n    + container.escapeExpression((helpers.formatSum || (depth0 && depth0.formatSum) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.total : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</td>\";\n},\"4\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.sub : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(5, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"5\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                    <tr class=\\\"subRow\\\">\\n                        <td>\"\n    + alias3((helpers.translateFromKey || (depth0 && depth0.translateFromKey) || alias2).call(alias1,(data && data.key),true,{\"name\":\"translateFromKey\",\"hash\":{},\"data\":data}))\n    + \":</td>\\n                        <td>\"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,depth0,{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</td>\\n                    </tr>\\n\";\n},\"7\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return \"        <h3>\"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),\"GH_TRANSACTIONS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n\"\n    + ((stack1 = container.invokePartial(partials.transactions,depth0,{\"name\":\"transactions\",\"hash\":{\"isBonusRound\":((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.promo : stack1)) != null ? stack1.mode : stack1),\"transactionDetails\":((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.transactions : stack1)},\"data\":data,\"indent\":\"        \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"9\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"        <h3>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_GAME_DETAILS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n        <table class=\\\"details\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\n            <tr>\\n                <td>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_ROUND_ID\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":</td>\\n                <td class=\\\"text-right\\\">\"\n    + alias3(container.lambda(((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.gameDetails : stack1)) != null ? stack1.roundId : stack1), depth0))\n    + \"</td>\\n            </tr>\\n            <tr>\\n                <td>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_SERVER_TIME_START\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":</td>\\n                <td class=\\\"text-right\\\">\"\n    + alias3((helpers.localTime || (depth0 && depth0.localTime) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.gameDetails : stack1)) != null ? stack1.serverTimeStart : stack1),{\"name\":\"localTime\",\"hash\":{},\"data\":data}))\n    + \"</td>\\n            </tr>\\n            <tr>\\n                <td>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_SERVER_TIME_END\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":</td>\\n                <td class=\\\"text-right\\\">\"\n    + alias3((helpers.localTime || (depth0 && depth0.localTime) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.gameDetails : stack1)) != null ? stack1.serverTimeEnd : stack1),{\"name\":\"localTime\",\"hash\":{},\"data\":data}))\n    + \"</td>\\n            </tr>\\n\"\n    + ((stack1 = helpers.each.call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.regulations : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(10, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"        </table>\\n\";\n},\"10\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return ((stack1 = helpers[\"if\"].call(alias1,(helpers.notUndefinedOrNull || (depth0 && depth0.notUndefinedOrNull) || helpers.helperMissing).call(alias1,depth0,{\"name\":\"notUndefinedOrNull\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(11, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"11\":function(container,depth0,helpers,partials,data) {\n    var alias1=container.escapeExpression;\n\n  return \"                    <tr>\\n                        <td>\"\n    + alias1((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),(data && data.key),{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":</td>\\n                        <td>\"\n    + alias1(container.lambda(depth0, depth0))\n    + \"</td>\\n                    </tr>\\n\";\n},\"13\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(14, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"14\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return \"                <tr class=\\\"mainRow\\\">\\n                    <td>\"\n    + container.escapeExpression((helpers.translateFromKey || (depth0 && depth0.translateFromKey) || helpers.helperMissing).call(alias1,(data && data.key),true,{\"name\":\"translateFromKey\",\"hash\":{},\"data\":data}))\n    + \":</td>\\n                    \"\n    + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.total : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(2, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n                </tr>\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.sub : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(15, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"15\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.sub : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(16, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"16\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                        <tr class=\\\"subRow\\\">\\n                            <td>\"\n    + alias3((helpers.translateFromKey || (depth0 && depth0.translateFromKey) || alias2).call(alias1,(data && data.key),true,{\"name\":\"translateFromKey\",\"hash\":{},\"data\":data}))\n    + \":</td>\\n                            <td>\"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,depth0,{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</td>\\n                        </tr>\\n\";\n},\"18\":function(container,depth0,helpers,partials,data) {\n    return \"            <td>\"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),\"GH_NO_WINS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</td>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"<div class=\\\"column\\\">\\n    <h3>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_GAME_STAKE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n    <table class=\\\"details\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\n\"\n    + ((stack1 = helpers.each.call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.transactions : stack1)) != null ? stack1.stake : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"    </table>\\n</div>\\n\\n<div class=\\\"column\\\">\\n\"\n    + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.hideTransactionDetails : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(7, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.hideGameDetails : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(9, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n    <h3>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_WIN_DETAILS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n    <table class=\\\"details\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.totalWin : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(13, data, 0),\"inverse\":container.program(18, data, 0),\"data\":data})) != null ? stack1 : \"\")\n    + \"    </table>\\n</div>\\n\";\n},\"usePartial\":true,\"useData\":true});\n","// hbsfy compiled Handlebars template\nvar HandlebarsCompiler = require('hbsfy/runtime');\nmodule.exports = HandlebarsCompiler.template({\"1\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"    <div>\\n        <h3>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_HANDS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n\\n        <div class=\\\"details\\\">\\n\"\n    + ((stack1 = helpers.each.call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.handScores : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(2, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"            <div class=\\\"right total\\\"><span class=\\\"italic\\\">\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_GAME_TOTAL\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</span> - \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.totalStake : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</div>\\n        </div>\\n\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.sideBets : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(7, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"    </div>\\n\";\n},\"2\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=container.lambda, alias2=container.escapeExpression, alias3=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return \"                <div class=\\\"handLabels\\\">\\n                    <div class=\\\"left italic\\\">\"\n    + alias2(alias1((depth0 != null ? depth0.handName : depth0), depth0))\n    + \" \"\n    + alias2(alias1((depth0 != null ? depth0.combinationName : depth0), depth0))\n    + \"</div>\\n\"\n    + ((stack1 = helpers.unless.call(alias3,(data && data.first),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(3, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                </div>\\n                <div class=\\\"hand\\\">\\n                    <div class=\\\"score\\\">\"\n    + alias2(alias1((depth0 != null ? depth0.score : depth0), depth0))\n    + \"</div>\\n\"\n    + ((stack1 = helpers.each.call(alias3,(depth0 != null ? depth0.cards : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(5, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                </div>\\n\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                        <div class=\\\"right\\\"><span class=\\\"italic\\\">\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_GAME_TOTAL\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</span> - \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.score : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</div>\\n\";\n},\"5\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                        <div class=\\\"cards\\\">\\n                            <div class=\\\"\"\n    + alias3((helpers.getCardSuit || (depth0 && depth0.getCardSuit) || alias2).call(alias1,depth0,{\"name\":\"getCardSuit\",\"hash\":{},\"data\":data}))\n    + \"\\\" style=\\\"background-image: url('\"\n    + alias3(container.lambda((depths[2] != null ? depths[2].assetsPath : depths[2]), depth0))\n    + alias3((helpers.getCardSuitAsset || (depth0 && depth0.getCardSuitAsset) || alias2).call(alias1,depth0,((stack1 = ((stack1 = (depths[2] != null ? depths[2].data : depths[2])) != null ? stack1.gameDetails : stack1)) != null ? stack1.gameId : stack1),{\"name\":\"getCardSuitAsset\",\"hash\":{},\"data\":data}))\n    + \"')\\\">\"\n    + alias3((helpers.getCardRank || (depth0 && depth0.getCardRank) || alias2).call(alias1,depth0,{\"name\":\"getCardRank\",\"hash\":{},\"data\":data}))\n    + \"</div>\\n                        </div>\\n\";\n},\"7\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"            <h3>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_SIDE_BETS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n            <div class=\\\"details\\\">\\n\"\n    + ((stack1 = helpers.each.call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.sideBets : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(8, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                <div class=\\\"right total withPadding\\\"><span class=\\\"italic\\\">\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_GAME_TOTAL\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</span> - \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.totalSideBetsStake : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</div>\\n            </div>\\n\";\n},\"8\":function(container,depth0,helpers,partials,data) {\n    var alias1=container.escapeExpression, alias2=depth0 != null ? depth0 : (container.nullContext || {}), alias3=helpers.helperMissing;\n\n  return \"                    <div class=\\\"handLabels withPadding\\\">\\n                        <div class=\\\"left\\\">\"\n    + alias1(container.lambda((depth0 != null ? depth0.name : depth0), depth0))\n    + \"</div>\\n                        <div class=\\\"right\\\">\"\n    + alias1((helpers.translate || (depth0 && depth0.translate) || alias3).call(alias2,\"STAKE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \" - \"\n    + alias1((helpers.formatSum || (depth0 && depth0.formatSum) || alias3).call(alias2,(depth0 != null ? depth0.stake : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</div>\\n                    </div>\\n\";\n},\"10\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return \"        <h3>\"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),\"GH_TRANSACTIONS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n\"\n    + ((stack1 = container.invokePartial(partials.transactions,depth0,{\"name\":\"transactions\",\"hash\":{\"isBonusRound\":((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.promo : stack1)) != null ? stack1.mode : stack1),\"transactionDetails\":((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.transactions : stack1)},\"data\":data,\"indent\":\"        \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"12\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return ((stack1 = helpers.each.call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(13, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"            <div class=\\\"right total withPadding\\\"><span class=\\\"italic\\\">\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_GAME_TOTAL\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</span> - \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.totalWins : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</div>\\n\";\n},\"13\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),depth0,{\"name\":\"if\",\"hash\":{},\"fn\":container.program(14, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"14\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                <div class=\\\"handLabels withPadding\\\">\\n                    <div class=\\\"left\\\">\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,(data && data.key),{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":</div>\\n                    <div class=\\\"right\\\">\"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,depth0,{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</div>\\n                </div>\\n\";\n},\"16\":function(container,depth0,helpers,partials,data) {\n    return \"            <div>\"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),\"GH_NO_WINS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</div>\\n\";\n},\"18\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"        <h3>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_GAME_DETAILS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n        <table class=\\\"details\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\n            <tr>\\n                <td>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_ROUND_ID\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":</td>\\n                <td class=\\\"text-right\\\">\"\n    + alias3(container.lambda(((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.gameDetails : stack1)) != null ? stack1.roundId : stack1), depth0))\n    + \"</td>\\n            </tr>\\n            <tr>\\n                <td>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_SERVER_TIME_START\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":</td>\\n                <td class=\\\"text-right\\\">\"\n    + alias3((helpers.localTime || (depth0 && depth0.localTime) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.gameDetails : stack1)) != null ? stack1.serverTimeStart : stack1),{\"name\":\"localTime\",\"hash\":{},\"data\":data}))\n    + \"</tr>\\n            <tr>\\n                <td>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_SERVER_TIME_END\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":</td>\\n                <td class=\\\"text-right\\\">\"\n    + alias3((helpers.localTime || (depth0 && depth0.localTime) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.gameDetails : stack1)) != null ? stack1.serverTimeEnd : stack1),{\"name\":\"localTime\",\"hash\":{},\"data\":data}))\n    + \"</td>\\n            </tr>\\n\"\n    + ((stack1 = helpers.each.call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.regulations : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(19, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"        </table>\\n\";\n},\"19\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return ((stack1 = helpers[\"if\"].call(alias1,(helpers.notUndefinedOrNull || (depth0 && depth0.notUndefinedOrNull) || helpers.helperMissing).call(alias1,depth0,{\"name\":\"notUndefinedOrNull\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(20, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"20\":function(container,depth0,helpers,partials,data) {\n    var alias1=container.escapeExpression;\n\n  return \"                    <tr>\\n                        <td>\"\n    + alias1((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),(data && data.key),{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":</td>\\n                        <td class=\\\"right\\\">\"\n    + alias1(container.lambda(depth0, depth0))\n    + \"</td>\\n                    </tr>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.hands : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n<div>\\n\"\n    + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.hideTransactionDetails : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(10, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n    <h3>\"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(alias1,\"GH_WIN_DETAILS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n    <div class=\\\"details\\\">\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.totalWins : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(12, data, 0, blockParams, depths),\"inverse\":container.program(16, data, 0, blockParams, depths),\"data\":data})) != null ? stack1 : \"\")\n    + \"    </div>\\n\\n\"\n    + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.hideGameDetails : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(18, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"</div>\\n\";\n},\"usePartial\":true,\"useData\":true,\"useDepths\":true});\n","// hbsfy compiled Handlebars template\nvar HandlebarsCompiler = require('hbsfy/runtime');\nmodule.exports = HandlebarsCompiler.template({\"1\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"    <div class=\\\"row\\\">\\n        <h3>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_BALL_POSITION\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n        <div class=\\\"numbers \"\n    + alias3((helpers.getNumberColor || (depth0 && depth0.getNumberColor) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.number : stack1),{\"name\":\"getNumberColor\",\"hash\":{},\"data\":data}))\n    + \"\\\">\"\n    + alias3(container.lambda(((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.number : stack1), depth0))\n    + \"</div>\\n    </div>\\n\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.limitedWinTotal : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"4\":function(container,depth0,helpers,partials,data) {\n    return \"    <div class=\\\"row\\\">\\n        <h3>\"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),\"GH_LIMITED_WIN\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n    </div>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.number : stack1),{\"name\":\"if\",\"hash\":{\"includeZero\":true},\"fn\":container.program(1, data, 0),\"inverse\":container.program(3, data, 0),\"data\":data})) != null ? stack1 : \"\");\n},\"useData\":true});\n","// hbsfy compiled Handlebars template\nvar HandlebarsCompiler = require('hbsfy/runtime');\nmodule.exports = HandlebarsCompiler.template({\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n    return \"<div class=\\\"demo-round-note\\\">\\n    <div class=\\\"demo-round-note-icon\\\">\\n      <i aria-hidden=\\\"true\\\" class=\\\"v-icon material-icons\\\">info</i>\\n    </div>\\n    <div class=\\\"demo-round-note-text\\\">\\n      \"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),\"GH_SNEAK_PEEK_ACTIVE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"\\n    </div>\\n</div>\\n\";\n},\"useData\":true});\n","// hbsfy compiled Handlebars template\nvar HandlebarsCompiler = require('hbsfy/runtime');\nmodule.exports = HandlebarsCompiler.template({\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n    return \"<div class=\\\"free-round-note\\\">\\n    <div class=\\\"free-round-note-icon\\\">\\n      <i aria-hidden=\\\"true\\\" class=\\\"v-icon material-icons\\\">info</i>\\n    </div>\\n    <div class=\\\"free-round-note-text\\\">\\n        \"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),\"GH_FREE_ROUNDS_ACTIVE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"\\n    </div>\\n</div>\\n\";\n},\"useData\":true});\n","// hbsfy compiled Handlebars template\nvar HandlebarsCompiler = require('hbsfy/runtime');\nmodule.exports = HandlebarsCompiler.template({\"1\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"    <tr class=\\\"server-time-end\\\">\\n        <td>\\n            <span class=\\\"label\\\">\\n                \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_SERVER_TIME_END\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n            </span>\\n            <span class=\\\"value\\\">\\n                \"\n    + alias3((helpers.localTime || (depth0 && depth0.localTime) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.detailsData : depth0)) != null ? stack1.serverTimeEnd : stack1),{\"name\":\"localTime\",\"hash\":{},\"data\":data}))\n    + \"\\n            </span>\\n        </td>\\n    </tr>\\n\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return ((stack1 = helpers[\"if\"].call(alias1,(helpers.notUndefinedOrNull || (depth0 && depth0.notUndefinedOrNull) || helpers.helperMissing).call(alias1,depth0,{\"name\":\"notUndefinedOrNull\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"4\":function(container,depth0,helpers,partials,data) {\n    var alias1=container.escapeExpression;\n\n  return \"            <tr>\\n                <td>\\n                    <span class=\\\"label\\\">\\n                        \"\n    + alias1((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),(data && data.key),{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                    </span>\\n                    <span class=\\\"value currency-amount\\\">\\n                        \"\n    + alias1(container.lambda(depth0, depth0))\n    + \"\\n                    </span>\\n                </td>\\n            </tr>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"<table class=\\\"details\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\n    <tr class=\\\"round-id\\\">\\n        <td>\\n            <span class=\\\"label\\\">\\n                \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_ROUND_ID\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n            </span>\\n            <span class=\\\"value\\\">\\n                #\"\n    + alias3(container.lambda(((stack1 = (depth0 != null ? depth0.detailsData : depth0)) != null ? stack1.roundId : stack1), depth0))\n    + \"\\n            </span>\\n        </td>\\n    </tr>\\n    <tr class=\\\"server-time-start\\\">\\n        <td>\\n            <span class=\\\"label\\\">\\n                \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_SERVER_TIME_START\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n            </span>\\n            <span class=\\\"value\\\">\\n                \"\n    + alias3((helpers.localTime || (depth0 && depth0.localTime) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.detailsData : depth0)) != null ? stack1.serverTimeStart : stack1),{\"name\":\"localTime\",\"hash\":{},\"data\":data}))\n    + \"\\n            </span>\\n        </td>\\n    </tr>\\n\"\n    + ((stack1 = (helpers.ifNot || (depth0 && depth0.ifNot) || alias2).call(alias1,(depth0 != null ? depth0.compactView : depth0),true,{\"name\":\"ifNot\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + ((stack1 = helpers.each.call(alias1,(depth0 != null ? depth0.regulationsData : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"</table>\";\n},\"useData\":true});\n","// hbsfy compiled Handlebars template\nvar HandlebarsCompiler = require('hbsfy/runtime');\nmodule.exports = HandlebarsCompiler.template({\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n    var helper, alias1=container.lambda, alias2=container.escapeExpression, alias3=depth0 != null ? depth0 : (container.nullContext || {}), alias4=helpers.helperMissing;\n\n  return \"<div class=\\\"item free-spin-details free-spin-details-\"\n    + alias2(alias1((depth0 != null ? depth0.type : depth0), depth0))\n    + \"\\\" data-freespin-id=\\\"\"\n    + alias2(((helper = (helper = helpers.prefix || (depth0 != null ? depth0.prefix : depth0)) != null ? helper : alias4),(typeof helper === \"function\" ? helper.call(alias3,{\"name\":\"prefix\",\"hash\":{},\"data\":data}) : helper)))\n    + alias2(alias1((depth0 != null ? depth0.type : depth0), depth0))\n    + \"\\\">\\n    <span class=\\\"label\\\">\\n        <a>\\n            \"\n    + alias2((helpers.translate || (depth0 && depth0.translate) || alias4).call(alias3,(depth0 != null ? depth0.label : depth0),{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n        </a>\\n    </span>\\n    <span class=\\\"value currency-amount\\\">\\n        \"\n    + alias2((helpers.formatSum || (depth0 && depth0.formatSum) || alias4).call(alias3,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n    </span>\\n</div>\";\n},\"useData\":true});\n","// hbsfy compiled Handlebars template\nvar HandlebarsCompiler = require('hbsfy/runtime');\nmodule.exports = HandlebarsCompiler.template({\"1\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = container.invokePartial(partials.winLinesDetails,depth0,{\"name\":\"winLinesDetails\",\"hash\":{\"spinData\":depth0,\"gameId\":(depth0 != null ? depth0.gameId : depth0),\"lineIdPrefix\":(depth0 != null ? depth0.prefix : depth0),\"linesData\":(depth0 != null ? depth0.winLines : depth0)},\"data\":data,\"indent\":\"    \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n    var stack1, helper, alias1=container.lambda, alias2=container.escapeExpression, alias3=depth0 != null ? depth0 : (container.nullContext || {}), alias4=helpers.helperMissing;\n\n  return \"<div class=\\\"item free-spin-details free-spin-details-\"\n    + alias2(alias1((depth0 != null ? depth0.type : depth0), depth0))\n    + \"\\\" data-freespin-id=\\\"\"\n    + alias2(((helper = (helper = helpers.prefix || (depth0 != null ? depth0.prefix : depth0)) != null ? helper : alias4),(typeof helper === \"function\" ? helper.call(alias3,{\"name\":\"prefix\",\"hash\":{},\"data\":data}) : helper)))\n    + alias2(alias1((depth0 != null ? depth0.type : depth0), depth0))\n    + \"\\\" data-spin-winline-set=\\\"\"\n    + alias2(alias1((depth0 != null ? depth0.winLineSet : depth0), depth0))\n    + \"\\\">\\n    <span class=\\\"label\\\">\\n        <a>\\n            \"\n    + alias2((helpers.translate || (depth0 && depth0.translate) || alias4).call(alias3,(depth0 != null ? depth0.label : depth0),{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \" #\"\n    + alias2((helpers.math || (depth0 && depth0.math) || alias4).call(alias3,(depth0 != null ? depth0.index : depth0),\"+\",1,{\"name\":\"math\",\"hash\":{},\"data\":data}))\n    + \"\\n        </a>\\n    </span>\\n    <span class=\\\"value\\\">\"\n    + alias2((helpers.formatSum || (depth0 && depth0.formatSum) || alias4).call(alias3,(depth0 != null ? depth0.amount : depth0),false,(depth0 != null ? depth0.hide0s : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n</div>\\n\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias3,(depth0 != null ? depth0.winLines : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"usePartial\":true,\"useData\":true});\n","// hbsfy compiled Handlebars template\nvar HandlebarsCompiler = require('hbsfy/runtime');\nmodule.exports = HandlebarsCompiler.template({\"1\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.reels : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(2, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"2\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n  return \"            <td css='reel-index-\"\n    + alias4(((helper = (helper = helpers.index || (data && data.index)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"index\",\"hash\":{},\"data\":data}) : helper)))\n    + \"' data-reel-index='\"\n    + alias4(((helper = (helper = helpers.index || (data && data.index)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"index\",\"hash\":{},\"data\":data}) : helper)))\n    + \"'>\\n\"\n    + ((stack1 = helpers.each.call(alias1,depth0,{\"name\":\"each\",\"hash\":{},\"fn\":container.program(3, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"            </td>\\n\";\n},\"3\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),depth0,{\"name\":\"if\",\"hash\":{\"includeZero\":true},\"fn\":container.program(4, data, 0, blockParams, depths),\"inverse\":container.program(6, data, 0, blockParams, depths),\"data\":data})) != null ? stack1 : \"\");\n},\"4\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return ((stack1 = container.invokePartial(partials.tilesData,depth0,{\"name\":\"tilesData\",\"hash\":{\"options\":depths[2],\"reel\":(container.data(data, 1) && container.data(data, 1).index),\"data\":depth0},\"data\":data,\"indent\":\"                        \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"6\":function(container,depth0,helpers,partials,data) {\n    return \"                        <div>\\n                        </div>\\n\";\n},\"8\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.reels : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(9, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"9\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n  return \"            <td class='reel-index-\"\n    + alias4(((helper = (helper = helpers.index || (data && data.index)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"index\",\"hash\":{},\"data\":data}) : helper)))\n    + \"' data-reel-index='\"\n    + alias4(((helper = (helper = helpers.index || (data && data.index)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"index\",\"hash\":{},\"data\":data}) : helper)))\n    + \"'>\\n\"\n    + ((stack1 = helpers.each.call(alias1,depth0,{\"name\":\"each\",\"hash\":{},\"fn\":container.program(10, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"            </td>\\n\";\n},\"10\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return ((stack1 = container.invokePartial(partials.tilesData,depth0,{\"name\":\"tilesData\",\"hash\":{\"options\":depths[2],\"reel\":(container.data(data, 1) && container.data(data, 1).index),\"data\":depth0},\"data\":data,\"indent\":\"                    \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"<tr class='spin-screen-\"\n    + alias3(((helper = (helper = helpers.prefix || (depth0 != null ? depth0.prefix : depth0)) != null ? helper : alias2),(typeof helper === \"function\" ? helper.call(alias1,{\"name\":\"prefix\",\"hash\":{},\"data\":data}) : helper)))\n    + alias3(container.lambda((depth0 != null ? depth0.type : depth0), depth0))\n    + \" spin-screen' style=\\\"display: none;\\\">\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(helpers.hasHorizontalReels || (depth0 && depth0.hasHorizontalReels) || alias2).call(alias1,(depth0 != null ? depth0.gId : depth0),{\"name\":\"hasHorizontalReels\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0, blockParams, depths),\"inverse\":container.program(8, data, 0, blockParams, depths),\"data\":data})) != null ? stack1 : \"\")\n    + \"</tr>\";\n},\"usePartial\":true,\"useData\":true,\"useDepths\":true});\n","// hbsfy compiled Handlebars template\nvar HandlebarsCompiler = require('hbsfy/runtime');\nmodule.exports = HandlebarsCompiler.template({\"1\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.data : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(2, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"2\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return \"            <span>\"\n    + ((stack1 = container.lambda(depth0, depth0)) != null ? stack1 : \"\")\n    + \"</span>\\n            <img class=\\\"tile-img\\\" style=\\\"\"\n    + ((stack1 = helpers.unless.call(alias1,(data && data.last),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.program(5, data, 0),\"data\":data})) != null ? stack1 : \"\")\n    + ((stack1 = helpers[\"if\"].call(alias1,(data && data.index),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(7, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\\" src=\\\"\"\n    + container.escapeExpression((helpers.getTileAsset || (depth0 && depth0.getTileAsset) || helpers.helperMissing).call(alias1,((stack1 = (data && data.root)) && stack1.tiles),depth0,{\"name\":\"getTileAsset\",\"hash\":{},\"data\":data}))\n    + \"\\\" alt=\\\"\\\">\\n\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n    return \"position:absolute;\";\n},\"5\":function(container,depth0,helpers,partials,data) {\n    return \"position:relative;\";\n},\"7\":function(container,depth0,helpers,partials,data) {\n    var helper;\n\n  return \"z-index:\"\n    + container.escapeExpression(((helper = (helper = helpers.index || (data && data.index)) != null ? helper : helpers.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"index\",\"hash\":{},\"data\":data}) : helper)))\n    + \";\";\n},\"9\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing;\n\n  return \"        <span>\"\n    + ((stack1 = container.lambda((depth0 != null ? depth0.data : depth0), depth0)) != null ? stack1 : \"\")\n    + \"</span>\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(helpers.hasMultiplierFeature || (depth0 && depth0.hasMultiplierFeature) || alias2).call(alias1,((stack1 = (data && data.root)) && stack1.gameId),{\"name\":\"hasMultiplierFeature\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(10, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"        <img class=\\\"tile-img\\\" src=\\\"\"\n    + container.escapeExpression((helpers.getTileAsset || (depth0 && depth0.getTileAsset) || alias2).call(alias1,((stack1 = (data && data.root)) && stack1.tiles),(depth0 != null ? depth0.data : depth0),{\"name\":\"getTileAsset\",\"hash\":{},\"data\":data}))\n    + \"\\\" alt=\\\"\\\">\\n\";\n},\"10\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return ((stack1 = helpers[\"if\"].call(alias1,(helpers.hasMultipliers || (depth0 && depth0.hasMultipliers) || helpers.helperMissing).call(alias1,(data && data.root),(depth0 != null ? depth0.reel : depth0),(data && data.index),(depth0 != null ? depth0.options : depth0),{\"name\":\"hasMultipliers\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(11, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"11\":function(container,depth0,helpers,partials,data) {\n    return \"                    <img style=\\\"position:absolute;\\\" src=\\\"\"\n    + container.escapeExpression((helpers.getMultipliers || (depth0 && depth0.getMultipliers) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),(data && data.root),(depth0 != null ? depth0.reel : depth0),(data && data.index),(depth0 != null ? depth0.options : depth0),{\"name\":\"getMultipliers\",\"hash\":{},\"data\":data}))\n    + \"\\\" alt=\\\"\\\">\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return \"<div>\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(helpers.isArray || (depth0 && depth0.isArray) || helpers.helperMissing).call(alias1,(depth0 != null ? depth0.data : depth0),{\"name\":\"isArray\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.program(9, data, 0),\"data\":data})) != null ? stack1 : \"\")\n    + \"</div>\\n\";\n},\"useData\":true});\n","// hbsfy compiled Handlebars template\nvar HandlebarsCompiler = require('hbsfy/runtime');\nmodule.exports = HandlebarsCompiler.template({\"1\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"        <tr class=\\\"total-stake\\\">\\n            <td>\\n                <span class=\\\"label\\\">\\n                    \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_TOTAL_STAKE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                </span>\\n                <span class=\\\"value currency-amount right\\\">\\n                    \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.transactionDetails : depth0)) != null ? stack1.totalBet : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                </span>\\n            </td>\\n        </tr>\\n\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"        <tr>\\n            <td>\\n                <span class=\\\"label\\\">\\n                    \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_FEATURE_BUY_COST\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                </span>\\n                <span class=\\\"value currency-amount right\\\">\\n                    \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.transactionDetails : depth0)) != null ? stack1.featureBuyCost : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                </span>\\n            </td>\\n        </tr>\\n        <tr>\\n            <td>\\n                <span class=\\\"label\\\">\\n                    \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_FEATURE_BUY_NAME\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                </span>\\n                <span class=\\\"value currency-amount right\\\">\\n                    \"\n    + alias3(container.lambda(((stack1 = (depth0 != null ? depth0.transactionDetails : depth0)) != null ? stack1.featureBuyName : stack1), depth0))\n    + \"\\n                </span>\\n            </td>\\n        </tr>\\n\";\n},\"5\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"        <tr class=\\\"total-win\\\">\\n            <td>\\n                <span class=\\\"label\\\">\\n                    \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_TOTAL_WIN\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                </span>\\n                <span class=\\\"value currency-amount right\\\">\\n                    \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.transactionDetails : depth0)) != null ? stack1.totalWin : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                </span>\\n            </td>\\n        </tr>\\n\";\n},\"7\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"        <tr>\\n            <td>\\n                <span class=\\\"label\\\">\\n                    \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_LIMITED_WIN\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                </span>\\n                <span class=\\\"value currency-amount right\\\">\\n                    \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.transactionDetails : depth0)) != null ? stack1.limitedWin : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                </span>\\n            </td>\\n        </tr>\\n\";\n},\"9\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = (helpers.ifNot || (depth0 && depth0.ifNot) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.compactView : depth0),true,{\"name\":\"ifNot\",\"hash\":{},\"fn\":container.program(10, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"10\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"        <tr class=\\\"balance-title\\\">\\n            <td>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_BALANCE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</td>\\n        </tr>\\n\\n        <tr class=\\\"balance-before-stake\\\">\\n            <td>\\n                <span class=\\\"label\\\">\\n                    \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_BEFORE_STAKE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                </span>\\n                <span class=\\\"value currency-amount right\\\">\\n                    \"\n    + alias3(helpers.log.call(alias1,(depth0 != null ? depth0.transactionDetails : depth0),{\"name\":\"log\",\"hash\":{},\"data\":data}))\n    + \"\\n\\n                    \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.transactionDetails : depth0)) != null ? stack1.balance : stack1)) != null ? stack1.cash : stack1)) != null ? stack1.atStart : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                </span>\\n            </td>\\n        </tr>\\n\\n        <tr class=\\\"balance-after-stake\\\">\\n            <td>\\n                <span class=\\\"label\\\">\\n                    \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_AFTER_STAKE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                </span>\\n                <span class=\\\"value currency-amount right\\\">\\n                    \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.transactionDetails : depth0)) != null ? stack1.balance : stack1)) != null ? stack1.cash : stack1)) != null ? stack1.afterBet : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                </span>\\n            </td>\\n        </tr>\\n\\n        <tr class=\\\"balance-at-end\\\">\\n            <td>\\n                <span class=\\\"label\\\">\\n                    \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_AT_END\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                </span>\\n                <span class=\\\"value currency-amount right\\\">\\n                    \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.transactionDetails : depth0)) != null ? stack1.balance : stack1)) != null ? stack1.cash : stack1)) != null ? stack1.atEnd : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                </span>\\n            <td>\\n        </tr>\\n\";\n},\"12\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"        <tr class=\\\"balance-title\\\">\\n            <td>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_FREEBETS_BALANCE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</td>\\n        </tr>\\n\\n        <tr class=\\\"balance-before-stake\\\">\\n            <td>\\n                <span class=\\\"label\\\">\\n                    \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_BEFORE_STAKE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                </span>\\n                <span class=\\\"value currency-amount right\\\">\\n                    \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.transactionDetails : depth0)) != null ? stack1.balance : stack1)) != null ? stack1.freeBets : stack1)) != null ? stack1.atStart : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                </span>\\n            </td>\\n        </tr>\\n\\n        <tr class=\\\"balance-after-stake\\\">\\n            <td>\\n                <span class=\\\"label\\\">\\n                    \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_AFTER_STAKE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                </span>\\n                <span class=\\\"value currency-amount right\\\">\\n                    \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.transactionDetails : depth0)) != null ? stack1.balance : stack1)) != null ? stack1.freeBets : stack1)) != null ? stack1.afterBet : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                </span>\\n            </td>\\n        </tr>\\n\\n        <tr class=\\\"balance-at-end\\\">\\n            <td>\\n                <span class=\\\"label\\\">\\n                    \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_AT_END\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                </span>\\n                <span class=\\\"value currency-amount right\\\">\\n                    \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.transactionDetails : depth0)) != null ? stack1.balance : stack1)) != null ? stack1.freeBets : stack1)) != null ? stack1.atEnd : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                </span>\\n            <td>\\n        </tr>\\n\";\n},\"14\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return ((stack1 = helpers.unless.call(alias1,(helpers.isVoucher || (depth0 && depth0.isVoucher) || helpers.helperMissing).call(alias1,(depth0 != null ? depth0.promo : depth0),{\"name\":\"isVoucher\",\"hash\":{},\"data\":data}),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(15, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"15\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"            <tr class=\\\"balance-title\\\">\\n            <td>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_BONUS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</td>\\n        </tr>\\n\\n        <tr class=\\\"balance-before-stake\\\">\\n            <td>\\n                <span class=\\\"label\\\">\\n                    \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_BEFORE_STAKE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                </span>\\n                <span class=\\\"value currency-amount right\\\">\\n                    \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.transactionDetails : depth0)) != null ? stack1.balance : stack1)) != null ? stack1.bonus : stack1)) != null ? stack1.atStart : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                </span>\\n            </td>\\n        </tr>\\n\\n        <tr class=\\\"balance-after-stake\\\">\\n            <td>\\n                <span class=\\\"label\\\">\\n                    \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_AFTER_STAKE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                </span>\\n                <span class=\\\"value currency-amount right\\\">\\n                    \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.transactionDetails : depth0)) != null ? stack1.balance : stack1)) != null ? stack1.bonus : stack1)) != null ? stack1.afterBet : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                </span>\\n            </td>\\n        </tr>\\n\\n        <tr class=\\\"balance-at-end\\\">\\n            <td>\\n                <span class=\\\"label\\\">\\n                    \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_AT_END\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                </span>\\n                <span class=\\\"value currency-amount right\\\">\\n                    \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.transactionDetails : depth0)) != null ? stack1.balance : stack1)) != null ? stack1.bonus : stack1)) != null ? stack1.atEnd : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                </span>\\n            <td>\\n        </tr>\\n\";\n},\"17\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"        <tr class=\\\"balance-title\\\">\\n            <td>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_SESSION_BALANCE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</td>\\n        </tr>\\n\\n        <tr class=\\\"balance-before-stake\\\">\\n            <td>\\n                <span class=\\\"label\\\">\\n                    \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_BEFORE_STAKE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                </span>\\n                <span class=\\\"value currency-amount right\\\">\\n                    \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.transactionDetails : depth0)) != null ? stack1.balance : stack1)) != null ? stack1.sessionCash : stack1)) != null ? stack1.atStart : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                </span>\\n            </td>\\n        </tr>\\n\\n        <tr class=\\\"balance-after-stake\\\">\\n            <td>\\n                <span class=\\\"label\\\">\\n                    \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_AFTER_STAKE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                </span>\\n                <span class=\\\"value currency-amount right\\\">\\n                    \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.transactionDetails : depth0)) != null ? stack1.balance : stack1)) != null ? stack1.sessionCash : stack1)) != null ? stack1.afterBet : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                </span>\\n            </td>\\n        </tr>\\n\\n        <tr class=\\\"balance-at-end\\\">\\n            <td>\\n                <span class=\\\"label\\\">\\n                    \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_AT_END\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                </span>\\n                <span class=\\\"value currency-amount right\\\">\\n                    \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.transactionDetails : depth0)) != null ? stack1.balance : stack1)) != null ? stack1.sessionCash : stack1)) != null ? stack1.atEnd : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                </span>\\n            <td>\\n        </tr>\\n\";\n},\"19\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"        <tr class=\\\"balance-title\\\">\\n            <td>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_SESSION_FREEBETS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</td>\\n        </tr>\\n\\n        <tr class=\\\"balance-before-stake\\\">\\n            <td>\\n                <span class=\\\"label\\\">\\n                    \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_BEFORE_STAKE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                </span>\\n                <span class=\\\"value currency-amount right\\\">\\n                    \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.transactionDetails : depth0)) != null ? stack1.balance : stack1)) != null ? stack1.sessionFreeBets : stack1)) != null ? stack1.atStart : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                </span>\\n            </td>\\n        </tr>\\n\\n        <tr class=\\\"balance-after-stake\\\">\\n            <td>\\n                <span class=\\\"label\\\">\\n                    \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_AFTER_STAKE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                </span>\\n                <span class=\\\"value currency-amount right\\\">\\n                    \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.transactionDetails : depth0)) != null ? stack1.balance : stack1)) != null ? stack1.sessionFreeBets : stack1)) != null ? stack1.afterBet : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                </span>\\n            </td>\\n        </tr>\\n\\n        <tr class=\\\"balance-at-end\\\">\\n            <td>\\n                <span class=\\\"label\\\">\\n                    \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_AT_END\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                </span>\\n                <span class=\\\"value currency-amount right\\\">\\n                    \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.transactionDetails : depth0)) != null ? stack1.balance : stack1)) != null ? stack1.sessionFreeBets : stack1)) != null ? stack1.atEnd : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                </span>\\n            <td>\\n        </tr>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing;\n\n  return \"<table class=\\\"details\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\n\\n\"\n    + ((stack1 = (helpers.ifNum || (depth0 && depth0.ifNum) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.transactionDetails : depth0)) != null ? stack1.totalBet : stack1),{\"name\":\"ifNum\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = (helpers.ifNum || (depth0 && depth0.ifNum) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.transactionDetails : depth0)) != null ? stack1.featureBuyCost : stack1),{\"name\":\"ifNum\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = (helpers.ifNum || (depth0 && depth0.ifNum) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.transactionDetails : depth0)) != null ? stack1.totalWin : stack1),{\"name\":\"ifNum\",\"hash\":{},\"fn\":container.program(5, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = (helpers.ifNum || (depth0 && depth0.ifNum) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.transactionDetails : depth0)) != null ? stack1.limitedWin : stack1),{\"name\":\"ifNum\",\"hash\":{},\"fn\":container.program(7, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers.unless.call(alias1,(helpers.isVoucher || (depth0 && depth0.isVoucher) || alias2).call(alias1,(depth0 != null ? depth0.promo : depth0),{\"name\":\"isVoucher\",\"hash\":{},\"data\":data}),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(9, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(helpers.validNumber || (depth0 && depth0.validNumber) || alias2).call(alias1,((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.transactionDetails : depth0)) != null ? stack1.balance : stack1)) != null ? stack1.freeBets : stack1)) != null ? stack1.atStart : stack1),{\"name\":\"validNumber\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(12, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.isBonusRound : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(14, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(helpers.validNumber || (depth0 && depth0.validNumber) || alias2).call(alias1,((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.transactionDetails : depth0)) != null ? stack1.balance : stack1)) != null ? stack1.sessionCash : stack1)) != null ? stack1.atStart : stack1),{\"name\":\"validNumber\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(17, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(helpers.validNumber || (depth0 && depth0.validNumber) || alias2).call(alias1,((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.transactionDetails : depth0)) != null ? stack1.balance : stack1)) != null ? stack1.sessionFreeBets : stack1)) != null ? stack1.atStart : stack1),{\"name\":\"validNumber\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(19, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n</table>\";\n},\"useData\":true});\n","// hbsfy compiled Handlebars template\nvar HandlebarsCompiler = require('hbsfy/runtime');\nmodule.exports = HandlebarsCompiler.template({\"1\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return ((stack1 = helpers.unless.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.swapReels : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(2, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"2\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=container.lambda, alias2=container.escapeExpression, alias3=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return \"            <div class=\\\"line-details fs row\\\" data-freespin-id=\\\"\"\n    + alias2(alias1((depths[1] != null ? depths[1].lineIdPrefix : depths[1]), depth0))\n    + alias2(alias1((depths[1] != null ? depths[1].type : depths[1]), depth0))\n    + \"\\\" data-line-id=\\\"\"\n    + alias2(alias1((depth0 != null ? depth0.index : depth0), depth0))\n    + \"\\\" data-line-tiles=\\\"\"\n    + alias2(alias1((depth0 != null ? depth0.tiles : depth0), depth0))\n    + \"\\\" data-line-start=\\\"\"\n    + alias2(alias1((depth0 != null ? depth0.start : depth0), depth0))\n    + \"\\\" data-line-length=\\\"\"\n    + alias2(alias1((depth0 != null ? depth0.length : depth0), depth0))\n    + \"\\\" data-spin-winline-set=\\\"\"\n    + alias2(alias1((depths[1] != null ? depths[1].winLineSet : depths[1]), depth0))\n    + \"\\\">\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias3,(helpers.hasAdditionalWayWin || (depth0 && depth0.hasAdditionalWayWin) || helpers.helperMissing).call(alias3,((stack1 = ((stack1 = ((stack1 = (data && data.root)) && stack1.data)) && stack1.gameDetails)) && stack1.gameId),(depth0 != null ? depth0.tiles : depth0),(depths[1] != null ? depths[1].spinData : depths[1]),{\"name\":\"hasAdditionalWayWin\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0, blockParams, depths),\"inverse\":container.program(5, data, 0, blockParams, depths),\"data\":data})) != null ? stack1 : \"\")\n    + \"            </div>\\n\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression, alias4=container.lambda;\n\n  return \"                    <span class=\\\"line-number label\\\"> - \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_WIN_WAYS_TITLE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \" #\"\n    + alias3((helpers.math || (depth0 && depth0.math) || alias2).call(alias1,(data && data.index),\"+\",1,{\"name\":\"math\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                    <span class=\\\"line-win-amount value currency-amount\\\">\"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                    <br>\\n                    <span class=\\\"line-number label\\\"> &emsp;- \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_WIN_WAYS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                    <span class=\\\"line-win-amount value currency-amount\\\">\"\n    + alias3(alias4((depth0 != null ? depth0.ways : depth0), depth0))\n    + \"</span>\\n                    <br>\\n                    <span class=\\\"line-number label\\\"> &emsp;- \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_LENGTH\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                    <span class=\\\"line-win-amount value currency-amount\\\">\"\n    + alias3(alias4((depth0 != null ? depth0.length : depth0), depth0))\n    + \"</span>\\n\";\n},\"5\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return ((stack1 = helpers[\"if\"].call(alias1,(helpers.hasAdditionalScatterWin || (depth0 && depth0.hasAdditionalScatterWin) || helpers.helperMissing).call(alias1,((stack1 = ((stack1 = ((stack1 = (data && data.root)) && stack1.data)) && stack1.gameDetails)) && stack1.gameId),(depth0 != null ? depth0.tiles : depth0),(depths[1] != null ? depths[1].spinData : depths[1]),{\"name\":\"hasAdditionalScatterWin\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(6, data, 0, blockParams, depths),\"inverse\":container.program(8, data, 0, blockParams, depths),\"data\":data})) != null ? stack1 : \"\");\n},\"6\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                    <span class=\\\"label\\\">\\n                        - \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_SCATTER_WIN_TITLE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \" #\"\n    + alias3((helpers.math || (depth0 && depth0.math) || alias2).call(alias1,(data && data.index),\"+\",1,{\"name\":\"math\",\"hash\":{},\"data\":data}))\n    + \"\\n                    </span>\\n                    <span class=\\\"value currency-amount\\\">\\n                        \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                    </span>\\n                    <br>\\n                    <span class=\\\"label\\\">\\n                        &emsp;- \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_CLUSTER_COUNT\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"\\n                    </span>\\n                    <span class=\\\"value currency-amount\\\">\\n                        \"\n    + alias3(container.lambda((depth0 != null ? depth0.length : depth0), depth0))\n    + \"\\n                    </span>\\n\";\n},\"8\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return ((stack1 = helpers[\"if\"].call(alias1,(helpers.isWays || (depth0 && depth0.isWays) || helpers.helperMissing).call(alias1,(depths[1] != null ? depths[1].gameId : depths[1]),{\"name\":\"isWays\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(9, data, 0, blockParams, depths),\"inverse\":container.program(12, data, 0, blockParams, depths),\"data\":data})) != null ? stack1 : \"\");\n},\"9\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression, alias4=container.lambda;\n\n  return \"                    <span class=\\\"line-number label\\\"> - \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_WIN_WAYS_TITLE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \" #\"\n    + alias3((helpers.math || (depth0 && depth0.math) || alias2).call(alias1,(data && data.index),\"+\",1,{\"name\":\"math\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                    <span class=\\\"line-win-amount value currency-amount\\\">\"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                    <br>\\n                    <span class=\\\"line-number label\\\"> &emsp;- \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_WIN_WAYS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                    <span class=\\\"line-win-amount value currency-amount\\\">\"\n    + alias3(alias4((depth0 != null ? depth0.ways : depth0), depth0))\n    + \"</span>\\n                    <br>\\n                    <span class=\\\"line-number label\\\"> &emsp;- \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_LENGTH\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                    <span class=\\\"line-win-amount value currency-amount\\\">\"\n    + alias3(alias4((depth0 != null ? depth0.length : depth0), depth0))\n    + \"</span>\\n\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(helpers.compare || (depth0 && depth0.compare) || alias2).call(alias1,(depth0 != null ? depth0.multiplier : depth0),\">\",1,{\"name\":\"compare\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(10, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\";\n},\"10\":function(container,depth0,helpers,partials,data) {\n    var alias1=container.escapeExpression;\n\n  return \"                        <br>\\n                        <span class=\\\"line-number label\\\"> &emsp;- \"\n    + alias1((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),\"GH_MULTIPLIER\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                        <span class=\\\"line-win-amount value currency-amount\\\">\"\n    + alias1(container.lambda((depth0 != null ? depth0.multiplier : depth0), depth0))\n    + \"</span>\\n\";\n},\"12\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return ((stack1 = helpers[\"if\"].call(alias1,(helpers.isCluster || (depth0 && depth0.isCluster) || helpers.helperMissing).call(alias1,(depths[1] != null ? depths[1].gameId : depths[1]),{\"name\":\"isCluster\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(13, data, 0, blockParams, depths),\"inverse\":container.program(18, data, 0, blockParams, depths),\"data\":data})) != null ? stack1 : \"\");\n},\"13\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return ((stack1 = helpers[\"if\"].call(alias1,(helpers.isScatter || (depth0 && depth0.isScatter) || alias2).call(alias1,(depths[1] != null ? depths[1].gameId : depths[1]),{\"name\":\"isScatter\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(14, data, 0, blockParams, depths),\"inverse\":container.program(16, data, 0, blockParams, depths),\"data\":data})) != null ? stack1 : \"\")\n    + \"                    <span class=\\\"line-win-amount value currency-amount\\\">\"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                    <br>\\n                    <span class=\\\"line-number label\\\"> &emsp;- \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_CLUSTER_COUNT\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                    <span class=\\\"line-win-amount value\\\">\"\n    + alias3(container.lambda((depth0 != null ? depth0.length : depth0), depth0))\n    + \"</span>\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(helpers.compare || (depth0 && depth0.compare) || alias2).call(alias1,(depth0 != null ? depth0.multiplier : depth0),\">\",1,{\"name\":\"compare\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(10, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\";\n},\"14\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                        <span class=\\\"line-number label\\\"> - \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_SCATTER_WIN_TITLE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \" #\"\n    + alias3((helpers.math || (depth0 && depth0.math) || alias2).call(alias1,(data && data.index),\"+\",1,{\"name\":\"math\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n\";\n},\"16\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                        <span class=\\\"line-number label\\\"> - \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_CLUSTER_TITLE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \" #\"\n    + alias3((helpers.math || (depth0 && depth0.math) || alias2).call(alias1,(data && data.index),\"+\",1,{\"name\":\"math\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n\";\n},\"18\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                    <span class=\\\"line-number label\\\"> - \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_LINE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \" #\"\n    + alias3((helpers.sum || (depth0 && depth0.sum) || alias2).call(alias1,(depth0 != null ? depth0.index : depth0),1,{\"name\":\"sum\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                    <span class=\\\"line-win-amount value currency-amount\\\">\"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(helpers.compare || (depth0 && depth0.compare) || alias2).call(alias1,(depth0 != null ? depth0.multiplier : depth0),\">\",1,{\"name\":\"compare\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(19, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n                \";\n},\"19\":function(container,depth0,helpers,partials,data) {\n    var alias1=container.escapeExpression;\n\n  return \"                        <br>\\n                        <span class=\\\"line-number label\\\"> \"\n    + alias1((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),\"GH_MULTIPLIER\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                        <span class=\\\"line-win-amount value currency-amount\\\">\"\n    + alias1(container.lambda((depth0 != null ? depth0.multiplier : depth0), depth0))\n    + \"</span>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression, alias5=container.lambda;\n\n  return \"<div class=\\\"wins lines-list lines-list-\"\n    + alias4(((helper = (helper = helpers.lineIdPrefix || (depth0 != null ? depth0.lineIdPrefix : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"lineIdPrefix\",\"hash\":{},\"data\":data}) : helper)))\n    + alias4(alias5((depth0 != null ? depth0.type : depth0), depth0))\n    + \"\\\" data-freespin-id=\\\"\"\n    + alias4(((helper = (helper = helpers.lineIdPrefix || (depth0 != null ? depth0.lineIdPrefix : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"lineIdPrefix\",\"hash\":{},\"data\":data}) : helper)))\n    + alias4(alias5((depth0 != null ? depth0.type : depth0), depth0))\n    + \"\\\">\\n\"\n    + ((stack1 = helpers.each.call(alias1,(depth0 != null ? depth0.linesData : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(1, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"</div>\";\n},\"useData\":true,\"useDepths\":true});\n","// hbsfy compiled Handlebars template\nvar HandlebarsCompiler = require('hbsfy/runtime');\nmodule.exports = HandlebarsCompiler.template({\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n    return \"<div class=\\\"casino-game-history message\\\">\\n    History is initialized here!\\n</div>\";\n},\"useData\":true});\n","// hbsfy compiled Handlebars template\nvar HandlebarsCompiler = require('hbsfy/runtime');\nmodule.exports = HandlebarsCompiler.template({\"1\":function(container,depth0,helpers,partials,data) {\n    return \"no-result\";\n},\"3\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return \"                            <td align=\\\"center\\\">\\n\"\n    + ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),depth0,{\"name\":\"if\",\"hash\":{},\"fn\":container.program(4, data, 0, blockParams, depths),\"inverse\":container.program(6, data, 0, blockParams, depths),\"data\":data})) != null ? stack1 : \"\")\n    + \"                            </td>\\n\";\n},\"4\":function(container,depth0,helpers,partials,data) {\n    var alias1=container.escapeExpression;\n\n  return \"                                <span class=\\\"symbol\\\">\"\n    + alias1(container.lambda((depth0 != null ? depth0.symbol : depth0), depth0))\n    + \"</span>\\n                                <span class=\\\"amount\\\">\"\n    + alias1((helpers.formatSum || (depth0 && depth0.formatSum) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.prize : depth0),false,true,{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n\";\n},\"6\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    return \"                                <img src=\\\"\"\n    + container.escapeExpression((helpers.getTileAsset || (depth0 && depth0.getTileAsset) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),(depths[1] != null ? depths[1].tiles : depths[1]),99,{\"name\":\"getTileAsset\",\"hash\":{},\"data\":data}))\n    + \"\\\" class=\\\"diamond\\\" />\\n\";\n},\"8\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return \"                        <tr>\\n\"\n    + ((stack1 = helpers.each.call(alias1,(depth0 != null ? depth0.dices : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(9, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                            <td align=\\\"center\\\">\"\n    + container.escapeExpression((helpers.formatSum || (depth0 && depth0.formatSum) || helpers.helperMissing).call(alias1,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                        </tr>\\n\";\n},\"9\":function(container,depth0,helpers,partials,data) {\n    return \"                                <td align=\\\"center\\\">\"\n    + container.escapeExpression(container.lambda(depth0, depth0))\n    + \"</td>\\n\";\n},\"11\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return \"                    <tr>\\n\"\n    + ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),depth0,{\"name\":\"each\",\"hash\":{},\"fn\":container.program(12, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                    </tr>\\n\";\n},\"12\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    return \"                        <td align=\\\"center\\\"><img src=\\\"\"\n    + container.escapeExpression((helpers.getTileAsset || (depth0 && depth0.getTileAsset) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),(depths[2] != null ? depths[2].tiles : depths[2]),depth0,{\"name\":\"getTileAsset\",\"hash\":{},\"data\":data}))\n    + \"\\\" /></td>\\n\";\n},\"14\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return \"                    <tr>\\n\"\n    + ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),depth0,{\"name\":\"each\",\"hash\":{},\"fn\":container.program(15, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                    </tr>\\n\";\n},\"15\":function(container,depth0,helpers,partials,data) {\n    return \"                        <td align=\\\"center\\\">\"\n    + container.escapeExpression((helpers.formatSum || (depth0 && depth0.formatSum) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),depth0,false,true,{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</td>\\n\";\n},\"17\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.hideGameDetails : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(18, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.hideTransactionDetails : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(20, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"18\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                <h3>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_GAME_DETAILS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n                <table class=\\\"details\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\n                    <tr>\\n                        <td>\\n                            <span class=\\\"label\\\">\\n                                \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_ROUND_ID\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                            </span>\\n                            <span class=\\\"value\\\">\\n                                #\"\n    + alias3(container.lambda(((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.gameDetails : stack1)) != null ? stack1.roundId : stack1), depth0))\n    + \"\\n                            </span>\\n                        </td>\\n                    </tr>\\n                    <tr>\\n                        <td>\\n                            <span class=\\\"label\\\">\\n                                \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_SERVER_TIME_START\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                            </span>\\n                            <span class=\\\"value\\\">\\n                                \"\n    + alias3((helpers.localTime || (depth0 && depth0.localTime) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.gameDetails : stack1)) != null ? stack1.serverTimeStart : stack1),{\"name\":\"localTime\",\"hash\":{},\"data\":data}))\n    + \"\\n                            </span>\\n                        </td>\\n                    </tr>\\n                    <tr>\\n                        <td>\\n                            <span class=\\\"label\\\">\\n                                \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_SERVER_TIME_END\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                            </span>\\n                            <span class=\\\"value\\\">\\n                                \"\n    + alias3((helpers.localTime || (depth0 && depth0.localTime) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.gameDetails : stack1)) != null ? stack1.serverTimeEnd : stack1),{\"name\":\"localTime\",\"hash\":{},\"data\":data}))\n    + \"\\n                            </span>\\n                        </td>\\n                    </tr>\\n                </table>\\n\";\n},\"20\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return \"                <h3>\"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),\"GH_TRANSACTIONS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n\"\n    + ((stack1 = container.invokePartial(partials.transactions,depth0,{\"name\":\"transactions\",\"hash\":{\"isBonusRound\":((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.promo : stack1)) != null ? stack1.mode : stack1),\"transactionDetails\":((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.transactions : stack1)},\"data\":data,\"indent\":\"                \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"22\":function(container,depth0,helpers,partials,data) {\n    return \"            <p class=\\\"message\\\">\"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),\"GH_NO_HISTORY\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</p>\\n\";\n},\"24\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=container.lambda, alias2=container.escapeExpression, alias3=depth0 != null ? depth0 : (container.nullContext || {}), alias4=helpers.helperMissing;\n\n  return \"                    <tr>\\n                        <td colspan=\\\"2\\\">\\n                            <div class=\\\"item free-spin-details free-spin-details-\"\n    + alias2(alias1(((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.freeCard : stack1)) != null ? stack1.type : stack1), depth0))\n    + \"\\\" data-freespin-id=\\\"\"\n    + alias2(alias1(((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.freeCard : stack1)) != null ? stack1.type : stack1), depth0))\n    + \"\\\">\\n                                <span class=\\\"label\\\">\\n                                    <a>\\n                                        \"\n    + alias2((helpers.translateScratchGameText || (depth0 && depth0.translateScratchGameText) || alias4).call(alias3,\"freeCard\",{\"name\":\"translateScratchGameText\",\"hash\":{},\"data\":data}))\n    + \"\\n                                    </a>\\n                                </span>\\n                                <span class=\\\"value currency-amount\\\">\"\n    + alias2((helpers.formatSum || (depth0 && depth0.formatSum) || alias4).call(alias3,((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.freeCard : stack1)) != null ? stack1.amount : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                            </div>\\n\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias3,((stack1 = ((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.freeCard : stack1)) != null ? stack1.otherWins : stack1)) != null ? stack1.length : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(25, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias3,((stack1 = ((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.freeCard : stack1)) != null ? stack1.scratchWins : stack1)) != null ? stack1.length : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(29, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                        </td>\\n                    </tr>\\n\";\n},\"25\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return \"                                <div class=\\\"wins\\\">\\n\"\n    + ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.freeCard : stack1)) != null ? stack1.otherWins : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(26, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                                </div>\\n\";\n},\"26\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = (helpers.ifNot || (depth0 && depth0.ifNot) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.amount : depth0),0,{\"name\":\"ifNot\",\"hash\":{},\"fn\":container.program(27, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"27\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                                        <div class=\\\"details-row\\\">\\n                                            <span class=\\\"label\\\">- \"\n    + alias3((helpers.translateOtherWin || (depth0 && depth0.translateOtherWin) || alias2).call(alias1,(depth0 != null ? depth0.type : depth0),{\"name\":\"translateOtherWin\",\"hash\":{},\"data\":data}))\n    + \":</span>\\n                                            <span class=\\\"pull-right value currency-amount\\\">\"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                                        </div>\\n\";\n},\"29\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return \"                                <div class=\\\"wins\\\">\\n\"\n    + ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.freeCard : stack1)) != null ? stack1.scratchWins : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(30, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                                </div>\\n\";\n},\"30\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = (helpers.ifNot || (depth0 && depth0.ifNot) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.amount : depth0),0,{\"name\":\"ifNot\",\"hash\":{},\"fn\":container.program(31, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"31\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                                        <div class=\\\"details-row\\\">\\n                                            <span class=\\\"label\\\">- \"\n    + alias3((helpers.translateScratchGameText || (depth0 && depth0.translateScratchGameText) || alias2).call(alias1,(depth0 != null ? depth0.type : depth0),{\"name\":\"translateScratchGameText\",\"hash\":{},\"data\":data}))\n    + \":</span>\\n                                            <span class=\\\"pull-right value currency-amount\\\">\"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                                        </div>\\n\";\n},\"33\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.jackpotWins : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(34, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"34\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                    <tr>\\n                        <td>\\n                            <span class=\\\"label\\\">\\n                                \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_JACKPOT_WIN\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                            </span>\\n                            <span class=\\\"value currency-amount\\\">\\n                                \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                            </span>\\n                        </td>\\n                    </tr>\\n\";\n},\"36\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.otherWins : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(37, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"37\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = (helpers.ifNot || (depth0 && depth0.ifNot) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.amount : depth0),0,{\"name\":\"ifNot\",\"hash\":{},\"fn\":container.program(38, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"38\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                    <tr>\\n                        <td>\\n                            <span class=\\\"label\\\">\\n                                \"\n    + alias3((helpers.translateOtherWin || (depth0 && depth0.translateOtherWin) || alias2).call(alias1,(depth0 != null ? depth0.type : depth0),{\"name\":\"translateOtherWin\",\"hash\":{},\"data\":data}))\n    + \":\\n                            </span>\\n                            <span class=\\\"value currency-amount\\\">\\n                                \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                            </span>\\n                        </td>\\n                    </tr>\\n\";\n},\"40\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.scratchWins : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(41, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"41\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = (helpers.ifNot || (depth0 && depth0.ifNot) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.amount : depth0),0,{\"name\":\"ifNot\",\"hash\":{},\"fn\":container.program(42, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"42\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                    <tr>\\n                        <td>\\n                            <span class=\\\"label\\\">\\n                                \"\n    + alias3((helpers.translateScratchGameText || (depth0 && depth0.translateScratchGameText) || alias2).call(alias1,(depth0 != null ? depth0.type : depth0),{\"name\":\"translateScratchGameText\",\"hash\":{},\"data\":data}))\n    + \":\\n                            </span>\\n                            <span class=\\\"value currency-amount\\\">\\n                                \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                            </span>\\n                        </td>\\n                    </tr>\\n\";\n},\"44\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                <tr>\\n                    <td>\\n                        <span class=\\\"label\\\">\\n                            \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_ROUND_CORRECTION\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                        </span>\\n                        <span class=\\\"value currency-amount\\\">\\n                            \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.totalWinCorrection : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                        </span>\\n                    </td>\\n                </tr>\\n\";\n},\"46\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = helpers.unless.call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.limitedWin : stack1),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(47, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"47\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"            <tr class=\\\"totalWin\\\">\\n                <td>\\n                    <span class=\\\"label\\\">\\n                        \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_TOTAL_WIN\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                    </span>\\n                    <span class=\\\"value currency-amount\\\">\\n                        \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.totalWin : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                    </span>\\n                </td>\\n            </tr>\\n\";\n},\"49\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                <tr>\\n                    <td>\\n                        <span class=\\\"label\\\">\\n                            \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_LIMITED_WIN\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                        </span>\\n                        <span class=\\\"value currency-amount right\\\">\\n                            \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.limitedWin : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                        </span>\\n                    </td>\\n                </tr>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression, alias4=container.lambda;\n\n  return \"<div class=\\\"casino-game-history \"\n    + ((stack1 = helpers.unless.call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.reels : stack1),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(1, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\\">\\n    <table class=\\\"scratch-game-history-result\\\">\\n        <tr>\\n            <td valign=\\\"top\\\" width=\\\"50%\\\" class=\\\"scratch-game-cell\\\">\\n                <h3 class=\\\"scratchh3\\\">\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"SCRATCH_MATCH_NUMBER_BONUS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n                <table width=\\\"100%\\\">\\n                    <tr>\\n                        <td align=\\\"center\\\" valign=\\\"middle\\\">\\n                            \"\n    + alias3(alias4(((stack1 = ((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.matchNumbersBonus : stack1)) != null ? stack1.luckySymbols : stack1)) != null ? stack1[\"0\"] : stack1), depth0))\n    + \"\\n                        </td>\\n\"\n    + ((stack1 = helpers.each.call(alias1,((stack1 = ((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.matchNumbersBonus : stack1)) != null ? stack1.prizes : stack1)) != null ? stack1[\"0\"] : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(3, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                    </tr>\\n                    <tr>\\n                        <td align=\\\"center\\\" valign=\\\"middle\\\">\\n                            \"\n    + alias3(alias4(((stack1 = ((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.matchNumbersBonus : stack1)) != null ? stack1.luckySymbols : stack1)) != null ? stack1[\"1\"] : stack1), depth0))\n    + \"\\n                        </td>\\n\"\n    + ((stack1 = helpers.each.call(alias1,((stack1 = ((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.matchNumbersBonus : stack1)) != null ? stack1.prizes : stack1)) != null ? stack1[\"1\"] : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(3, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                    </tr>\\n                </table>\\n            </td>\\n            <td valign=\\\"top\\\" width=\\\"50%\\\" class=\\\"scratch-game-cell\\\">\\n                <h3 class=\\\"scratchh3\\\">\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"SCRATCH_SUM_OF_SEVEN_BONUS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n                <table width=\\\"100%\\\">\\n\"\n    + ((stack1 = helpers.each.call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.sumOfSevenBonus : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(8, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                </table>\\n            </td>\\n        </tr>\\n        <tr>\\n            <td valign=\\\"top\\\" width=\\\"50%\\\" class=\\\"scratch-game-cell\\\">\\n                <h3 class=\\\"scratchh3\\\">\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"SCRATCH_MATCH_SYMBOLS_BONUS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n                <table width=\\\"100%\\\">\\n\"\n    + ((stack1 = helpers.each.call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.screens : stack1)) != null ? stack1.symbols : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(11, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                </table>\\n            </td>\\n            <td valign=\\\"top\\\" width=\\\"50%\\\" class=\\\"scratch-game-cell\\\">\\n                <h3 class=\\\"scratchh3\\\">\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"SCRATCH_MATCH_AMOUNTS_BONUS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n                <table width=\\\"100%\\\">\\n\"\n    + ((stack1 = helpers.each.call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.screens : stack1)) != null ? stack1.amounts : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(14, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                </table>\\n            </td>\\n        </tr>\\n    </table>\\n    <div class=\\\"details-column scratch-details-column\\\">\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.data : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(17, data, 0, blockParams, depths),\"inverse\":container.program(22, data, 0, blockParams, depths),\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n        <h3>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_GAME_RESULTS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n        <table class=\\\"details\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.freeCard : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(24, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.jackpotWins : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(33, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.otherWins : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(36, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.scratchWins : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(40, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.totalWinCorrection : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(44, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = (helpers.ifNum || (depth0 && depth0.ifNum) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.totalWin : stack1),{\"name\":\"ifNum\",\"hash\":{},\"fn\":container.program(46, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = (helpers.ifNum || (depth0 && depth0.ifNum) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.limitedWin : stack1),{\"name\":\"ifNum\",\"hash\":{},\"fn\":container.program(49, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"        </table>\\n    </div>\\n\\n</div>\\n\";\n},\"usePartial\":true,\"useData\":true,\"useDepths\":true});\n","// hbsfy compiled Handlebars template\nvar HandlebarsCompiler = require('hbsfy/runtime');\nmodule.exports = HandlebarsCompiler.template({\"1\":function(container,depth0,helpers,partials,data) {\n    return \"no-result\";\n},\"3\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return \"\t    <div class=\\\"screen-scale-wrapper\\\">\\n        <div class=\\\"spin-screen-wrapper result-column\\\">\\n\t        <svg viewBox=\\\"0 0 800 1000\\\" preserveAspectRatio=\\\"xMinYMin slice\\\" width=\\\"800\\\" height=\\\"1000\\\" class=\\\"lines-overlay\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n\t            <g class=\\\"lines-container\\\"></g>\\n\t        </svg>\\n\\n\t        <table class=\\\"main-screen reels\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\n\t            <tr class='spin-screen-0 spin-screen'>\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(helpers.hasHorizontalReels || (depth0 && depth0.hasHorizontalReels) || helpers.helperMissing).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.gameDetails : stack1)) != null ? stack1.gameId : stack1),{\"name\":\"hasHorizontalReels\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(4, data, 0, blockParams, depths),\"inverse\":container.program(11, data, 0, blockParams, depths),\"data\":data})) != null ? stack1 : \"\")\n    + \"\t            </tr>\\n\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.respins : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(15, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.freeSpins : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(18, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.heldRespins : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(23, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.jackpotWins : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(25, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\t        </table>\\n\t    </div>\\n\t</div>\\n\";\n},\"4\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.reels : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(5, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"5\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n  return \"                            <td class='reel-index-\"\n    + alias4(((helper = (helper = helpers.index || (data && data.index)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"index\",\"hash\":{},\"data\":data}) : helper)))\n    + \"' data-reel-index='\"\n    + alias4(((helper = (helper = helpers.index || (data && data.index)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"index\",\"hash\":{},\"data\":data}) : helper)))\n    + \"'>\\n\"\n    + ((stack1 = helpers.each.call(alias1,depth0,{\"name\":\"each\",\"hash\":{},\"fn\":container.program(6, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                            </td>\\n\";\n},\"6\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),depth0,{\"name\":\"if\",\"hash\":{\"includeZero\":true},\"fn\":container.program(7, data, 0, blockParams, depths),\"inverse\":container.program(9, data, 0, blockParams, depths),\"data\":data})) != null ? stack1 : \"\");\n},\"7\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return ((stack1 = container.invokePartial(partials.tilesData,depth0,{\"name\":\"tilesData\",\"hash\":{\"reel\":(container.data(data, 1) && container.data(data, 1).index),\"data\":depth0},\"data\":data,\"indent\":\"                                        \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"9\":function(container,depth0,helpers,partials,data) {\n    return \"                                        <div>\\n                                        </div>\\n\";\n},\"11\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.reels : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(12, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"12\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n  return \"                            <td class='reel-index-\"\n    + alias4(((helper = (helper = helpers.index || (data && data.index)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"index\",\"hash\":{},\"data\":data}) : helper)))\n    + \"' data-reel-index='\"\n    + alias4(((helper = (helper = helpers.index || (data && data.index)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"index\",\"hash\":{},\"data\":data}) : helper)))\n    + \"'>\\n\"\n    + ((stack1 = helpers.each.call(alias1,depth0,{\"name\":\"each\",\"hash\":{},\"fn\":container.program(13, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                            </td>\\n\";\n},\"13\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return ((stack1 = container.invokePartial(partials.tilesData,depth0,{\"name\":\"tilesData\",\"hash\":{\"reel\":(container.data(data, 1) && container.data(data, 1).index),\"data\":depth0},\"data\":data,\"indent\":\"                                    \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"15\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.respins : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(16, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"16\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = container.invokePartial(partials.spinScreen,depth0,{\"name\":\"spinScreen\",\"hash\":{\"tiles\":((stack1 = (data && data.root)) && stack1.tiles),\"aPath\":((stack1 = (data && data.root)) && stack1.assetsPath),\"gId\":((stack1 = ((stack1 = ((stack1 = (data && data.root)) && stack1.data)) && stack1.gameDetails)) && stack1.gameId)},\"data\":data,\"indent\":\"                        \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"18\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.freeSpins : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(19, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"19\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return \"                        <!-- TODO TITLE -->\\n\"\n    + ((stack1 = container.invokePartial(partials.spinScreen,depth0,{\"name\":\"spinScreen\",\"hash\":{\"tiles\":((stack1 = (data && data.root)) && stack1.tiles),\"aPath\":((stack1 = (data && data.root)) && stack1.assetsPath),\"gId\":((stack1 = ((stack1 = ((stack1 = (data && data.root)) && stack1.data)) && stack1.gameDetails)) && stack1.gameId)},\"data\":data,\"indent\":\"                        \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.respins : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(20, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\";\n},\"20\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.respins : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(21, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"21\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = container.invokePartial(partials.spinScreen,depth0,{\"name\":\"spinScreen\",\"hash\":{\"index\":(data && data.index),\"tiles\":((stack1 = (data && data.root)) && stack1.tiles),\"aPath\":((stack1 = (data && data.root)) && stack1.assetsPath),\"gId\":((stack1 = ((stack1 = ((stack1 = (data && data.root)) && stack1.data)) && stack1.gameDetails)) && stack1.gameId)},\"data\":data,\"indent\":\"                                \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"23\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.heldRespins : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(16, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"25\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.jackpotWins : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(26, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"26\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.reels : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(27, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"27\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = container.invokePartial(partials.spinScreen,depth0,{\"name\":\"spinScreen\",\"hash\":{\"tiles\":((stack1 = (data && data.root)) && stack1.tiles),\"aPath\":((stack1 = (data && data.root)) && stack1.assetsPath),\"gId\":((stack1 = ((stack1 = ((stack1 = (data && data.root)) && stack1.data)) && stack1.gameDetails)) && stack1.gameId)},\"data\":data,\"indent\":\"                            \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"29\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing;\n\n  return ((stack1 = helpers[\"if\"].call(alias1,(helpers.isDemo || (depth0 && depth0.isDemo) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.promo : stack1),{\"name\":\"isDemo\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(30, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(helpers.isVoucher || (depth0 && depth0.isVoucher) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.promo : stack1),{\"name\":\"isVoucher\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(32, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.hideGameDetails : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(34, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.hideTransactionDetails : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(36, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(38, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\";\n},\"30\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = container.invokePartial(partials.demoRoundNote,depth0,{\"name\":\"demoRoundNote\",\"data\":data,\"indent\":\"                \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"32\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = container.invokePartial(partials.freeRoundNote,depth0,{\"name\":\"freeRoundNote\",\"data\":data,\"indent\":\"                \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"34\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return \"                <h3>\"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),\"GH_GAME_DETAILS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n\"\n    + ((stack1 = container.invokePartial(partials.gameDetails,depth0,{\"name\":\"gameDetails\",\"hash\":{\"regulationsData\":((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.regulations : stack1),\"detailsData\":((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.gameDetails : stack1)},\"data\":data,\"indent\":\"                \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"36\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return \"                <h3>\"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),\"GH_TRANSACTIONS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n\"\n    + ((stack1 = container.invokePartial(partials.transactions,depth0,{\"name\":\"transactions\",\"hash\":{\"promo\":((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.promo : stack1),\"isBonusRound\":((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.promo : stack1)) != null ? stack1.mode : stack1),\"transactionDetails\":((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.transactions : stack1)},\"data\":data,\"indent\":\"                \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"38\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"\\n            <h3>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_SPIN_DETAILS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n\\n            <table class=\\\"details\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\n\t\t\t\t\t<tr>\\n                        <!-- Initial Spin -->\\n                        <td colspan=\\\"2\\\" class=\\\"group-title free-spin-details free-spin-details-0 initial-spin\\\" data-freespin-id=\\\"0\\\" data-spin-winline-set=\\\"\"\n    + alias3(container.lambda(((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.winLineSet : stack1), depth0))\n    + \"\\\">\\n                            <a>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_INITIAL_SPIN\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</a>\\n                        </td>\\n\t\t\t\t\t</tr>\\n\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.initialLinesWin : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(39, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                    <!-- Initial Spin Wins -->\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.winLines : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(41, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.nudges : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(64, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.respins : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(69, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.freeSpins : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(72, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.heldRespins : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(79, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.jackpotWins : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(81, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.otherWins : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(87, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.totalWinCorrection : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(91, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = (helpers.ifNum || (depth0 && depth0.ifNum) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.transactions : stack1)) != null ? stack1.totalWin : stack1),{\"name\":\"ifNum\",\"hash\":{},\"fn\":container.program(93, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n            </table>\\n\\n\";\n},\"39\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                        <tr class=\\\"symbol-wins\\\">\\n                            <td colspan=\\\"2\\\">\\n                                <div class=\\\"item\\\">\\n                                <span class=\\\"label\\\">\\n                                    \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_SYMBOL_WINS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                                </span>\\n                                <span class=\\\"value currency-amount\\\">\"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.initialLinesWin : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                                </div>\\n                            </td>\\n                        </tr>\\n\";\n},\"41\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return \"                        <tbody class=\\\"lines-list-0\\\" data-freespin-id=\\\"0\\\">\\n\"\n    + ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.winLines : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(42, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                        </tbody>\\n\";\n},\"42\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = helpers.unless.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.swapReels : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(43, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"43\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression, alias4=container.lambda;\n\n  return \"                                    <tr class=\\\"line-details fs\\\" data-freespin-id=\\\"0\\\" data-line-id=\\\"\"\n    + alias3((helpers.math || (depth0 && depth0.math) || alias2).call(alias1,(depth0 != null ? depth0.type : depth0),\"-\",\"1\",{\"name\":\"math\",\"hash\":{},\"data\":data}))\n    + \"\\\" data-line-tiles=\\\"\"\n    + alias3(alias4((depth0 != null ? depth0.tiles : depth0), depth0))\n    + \"\\\" data-line-start=\\\"\"\n    + alias3(alias4((depth0 != null ? depth0.start : depth0), depth0))\n    + \"\\\" data-line-length=\\\"\"\n    + alias3(alias4((depth0 != null ? depth0.length : depth0), depth0))\n    + \"\\\" data-spin-winline-set=\\\"\"\n    + alias3(alias4(((stack1 = ((stack1 = ((stack1 = (data && data.root)) && stack1.data)) && stack1.winDetails)) && stack1.winLineSet), depth0))\n    + \"\\\">\\n                                        <td>\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(helpers.hasAdditionalWayWin || (depth0 && depth0.hasAdditionalWayWin) || alias2).call(alias1,((stack1 = ((stack1 = ((stack1 = (data && data.root)) && stack1.data)) && stack1.gameDetails)) && stack1.gameId),(depth0 != null ? depth0.tiles : depth0),((stack1 = ((stack1 = (data && data.root)) && stack1.data)) && stack1.spinData),{\"name\":\"hasAdditionalWayWin\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(44, data, 0),\"inverse\":container.program(46, data, 0),\"data\":data})) != null ? stack1 : \"\")\n    + \"                                        </td>\\n                                    </tr>\\n\";\n},\"44\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression, alias4=container.lambda;\n\n  return \"                                                  <span class=\\\"label\\\">\\n                                                    - \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_WIN_WAYS_TITLE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \" #\"\n    + alias3((helpers.math || (depth0 && depth0.math) || alias2).call(alias1,(data && data.index),\"+\",1,{\"name\":\"math\",\"hash\":{},\"data\":data}))\n    + \"\\n                                                </span>\\n                                                <span class=\\\"value currency-amount\\\">\\n                                                    \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                                                </span>\\n                                                <br>\\n                                                <span class=\\\"label\\\">\\n                                                    &emsp;- \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_WIN_WAYS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"\\n                                                </span>\\n                                                <span class=\\\"value currency-amount\\\">\\n                                                    \"\n    + alias3(alias4((depth0 != null ? depth0.ways : depth0), depth0))\n    + \"\\n                                                </span>\\n                                                <br>\\n                                                <span class=\\\"label\\\">\\n                                                    &emsp;- \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_LENGTH\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"\\n                                                </span>\\n                                                <span class=\\\"value currency-amount\\\">\\n                                                    \"\n    + alias3(alias4((depth0 != null ? depth0.length : depth0), depth0))\n    + \"\\n                                                </span>\\n\";\n},\"46\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return ((stack1 = helpers[\"if\"].call(alias1,(helpers.hasAdditionalScatterWin || (depth0 && depth0.hasAdditionalScatterWin) || helpers.helperMissing).call(alias1,((stack1 = ((stack1 = ((stack1 = (data && data.root)) && stack1.data)) && stack1.gameDetails)) && stack1.gameId),(depth0 != null ? depth0.tiles : depth0),((stack1 = ((stack1 = (data && data.root)) && stack1.data)) && stack1.spinData),{\"name\":\"hasAdditionalScatterWin\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(47, data, 0),\"inverse\":container.program(49, data, 0),\"data\":data})) != null ? stack1 : \"\");\n},\"47\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                                                <span class=\\\"label\\\">\\n                                                    - \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_SCATTER_WIN_TITLE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \" #\"\n    + alias3((helpers.math || (depth0 && depth0.math) || alias2).call(alias1,(data && data.index),\"+\",1,{\"name\":\"math\",\"hash\":{},\"data\":data}))\n    + \"\\n                                                </span>\\n                                                <span class=\\\"value currency-amount\\\">\\n                                                    \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                                                </span>\\n                                                <br>\\n                                                <span class=\\\"label\\\">\\n                                                    &emsp;- \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_CLUSTER_COUNT\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"\\n                                                </span>\\n                                                <span class=\\\"value currency-amount\\\">\\n                                                    \"\n    + alias3(container.lambda((depth0 != null ? depth0.length : depth0), depth0))\n    + \"\\n                                                </span>\\n\";\n},\"49\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return ((stack1 = helpers[\"if\"].call(alias1,(helpers.isWays || (depth0 && depth0.isWays) || helpers.helperMissing).call(alias1,((stack1 = ((stack1 = ((stack1 = (data && data.root)) && stack1.data)) && stack1.gameDetails)) && stack1.gameId),{\"name\":\"isWays\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(50, data, 0),\"inverse\":container.program(53, data, 0),\"data\":data})) != null ? stack1 : \"\");\n},\"50\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression, alias4=container.lambda;\n\n  return \"                                                <span class=\\\"label\\\">\\n                                                    - \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_WIN_WAYS_TITLE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \" #\"\n    + alias3((helpers.math || (depth0 && depth0.math) || alias2).call(alias1,(data && data.index),\"+\",1,{\"name\":\"math\",\"hash\":{},\"data\":data}))\n    + \"\\n                                                </span>\\n                                                <span class=\\\"value currency-amount\\\">\\n                                                    \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                                                </span>\\n                                                <br>\\n                                                <span class=\\\"label\\\">\\n                                                    &emsp;- \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_WIN_WAYS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"\\n                                                </span>\\n                                                <span class=\\\"value currency-amount\\\">\\n                                                    \"\n    + alias3(alias4((depth0 != null ? depth0.ways : depth0), depth0))\n    + \"\\n                                                </span>\\n                                                <br>\\n                                                <span class=\\\"label\\\">\\n                                                    &emsp;- \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_LENGTH\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"\\n                                                </span>\\n                                                <span class=\\\"value currency-amount\\\">\\n                                                    \"\n    + alias3(alias4((depth0 != null ? depth0.length : depth0), depth0))\n    + \"\\n                                                </span>\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(helpers.compare || (depth0 && depth0.compare) || alias2).call(alias1,(depth0 != null ? depth0.multiplier : depth0),\">\",1,{\"name\":\"compare\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(51, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"51\":function(container,depth0,helpers,partials,data) {\n    var alias1=container.escapeExpression;\n\n  return \"                                                    <br>\\n                                                    <span class=\\\"label\\\">\\n                                                        &emsp;- \"\n    + alias1((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),\"GH_MULTIPLIER\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"\\n                                                    </span>\\n                                                    <span class=\\\"value currency-amount\\\">\\n                                                        \"\n    + alias1(container.lambda((depth0 != null ? depth0.multiplier : depth0), depth0))\n    + \"\\n                                                    </span>\\n\";\n},\"53\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return ((stack1 = helpers[\"if\"].call(alias1,(helpers.isCluster || (depth0 && depth0.isCluster) || helpers.helperMissing).call(alias1,((stack1 = ((stack1 = ((stack1 = (data && data.root)) && stack1.data)) && stack1.gameDetails)) && stack1.gameId),{\"name\":\"isCluster\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(54, data, 0),\"inverse\":container.program(61, data, 0),\"data\":data})) != null ? stack1 : \"\");\n},\"54\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return ((stack1 = helpers[\"if\"].call(alias1,(helpers.isScatter || (depth0 && depth0.isScatter) || alias2).call(alias1,((stack1 = ((stack1 = ((stack1 = (data && data.root)) && stack1.data)) && stack1.gameDetails)) && stack1.gameId),{\"name\":\"isScatter\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(55, data, 0),\"inverse\":container.program(57, data, 0),\"data\":data})) != null ? stack1 : \"\")\n    + \"                                                <span class=\\\"line-win-amount value currency-amount\\\">\"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                                                <br>\\n                                                <span class=\\\"line-number label\\\"> &emsp;- \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_CLUSTER_COUNT\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                                                <span class=\\\"line-win-amount value\\\">\"\n    + alias3(container.lambda((depth0 != null ? depth0.length : depth0), depth0))\n    + \"</span>\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(helpers.compare || (depth0 && depth0.compare) || alias2).call(alias1,(depth0 != null ? depth0.multiplier : depth0),\">\",1,{\"name\":\"compare\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(59, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\";\n},\"55\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                                                    <span class=\\\"label\\\"> - \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_SCATTER_WIN_TITLE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \" #\"\n    + alias3((helpers.math || (depth0 && depth0.math) || alias2).call(alias1,(data && data.index),\"+\",1,{\"name\":\"math\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n\";\n},\"57\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                                                    <span class=\\\"label\\\"> - \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_CLUSTER_TITLE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \" #\"\n    + alias3((helpers.math || (depth0 && depth0.math) || alias2).call(alias1,(data && data.index),\"+\",1,{\"name\":\"math\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n\";\n},\"59\":function(container,depth0,helpers,partials,data) {\n    var alias1=container.escapeExpression;\n\n  return \"                                                    <br>\\n                                                    <span class=\\\"line-number label\\\"> &emsp;- \"\n    + alias1((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),\"GH_MULTIPLIER\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                                                    <span class=\\\"line-win-amount value currency-amount\\\">\"\n    + alias1(container.lambda((depth0 != null ? depth0.multiplier : depth0), depth0))\n    + \"</span>\\n\";\n},\"61\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                                                <span class=\\\"label\\\">\\n                                                    - \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_LINE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \" #\"\n    + alias3(container.lambda((depth0 != null ? depth0.type : depth0), depth0))\n    + \"\\n                                                </span>\\n                                                <span class=\\\"value currency-amount\\\">\\n                                                    \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                                                </span>\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(helpers.compare || (depth0 && depth0.compare) || alias2).call(alias1,(depth0 != null ? depth0.multiplier : depth0),\">\",1,{\"name\":\"compare\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(62, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                                            \";\n},\"62\":function(container,depth0,helpers,partials,data) {\n    var alias1=container.escapeExpression;\n\n  return \"                                                    <br>\\n                                                    <span class=\\\"line-number label\\\"> \"\n    + alias1((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),\"GH_MULTIPLIER\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                                                    <span class=\\\"line-win-amount value currency-amount\\\">\"\n    + alias1(container.lambda((depth0 != null ? depth0.multiplier : depth0), depth0))\n    + \"</span>\\n\";\n},\"64\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return \"                        <tr>\\n                            <td colspan=\\\"2\\\" class=\\\"group-title\\\">\"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(alias1,\"GH_NUDGE_WINS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</td>\\n                        </tr>\\n\"\n    + ((stack1 = helpers.each.call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.nudges : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(65, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"65\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return \"                            <tr>\\n                                <td colspan=\\\"2\\\">\\n\"\n    + ((stack1 = container.invokePartial(partials.spinDetails,depth0,{\"name\":\"spinDetails\",\"hash\":{\"index\":(data && data.index),\"gameId\":((stack1 = ((stack1 = ((stack1 = (data && data.root)) && stack1.data)) && stack1.gameDetails)) && stack1.gameId),\"label\":\"GH_NUDGE\"},\"data\":data,\"indent\":\"                                    \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? depth0.otherWins : depth0)) != null ? stack1.length : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(66, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                                </td>\\n                            </tr>\\n\";\n},\"66\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return \"                                        <div class=\\\"wins\\\">\\n\"\n    + ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.otherWins : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(67, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                                        </div>\\n\";\n},\"67\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                                                <div class=\\\"details-row\\\">\\n                                                    <span class=\\\"label\\\">- \"\n    + alias3((helpers.translateOtherWin || (depth0 && depth0.translateOtherWin) || alias2).call(alias1,(depth0 != null ? depth0.type : depth0),{\"name\":\"translateOtherWin\",\"hash\":{},\"data\":data}))\n    + \":</span>\\n                                                    <span class=\\\"pull-right value currency-amount\\\">\"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                                                </div>\\n\";\n},\"69\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return \"                        <tr>\\n                            <td colspan=\\\"2\\\" class=\\\"group-title\\\">\"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(alias1,\"GH_RESPINS_TITLE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</td>\\n                        </tr>\\n\"\n    + ((stack1 = helpers.each.call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.respins : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(70, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"70\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return \"                            <tr>\\n                                <td colspan=\\\"2\\\">\\n\"\n    + ((stack1 = container.invokePartial(partials.spinDetails,depth0,{\"name\":\"spinDetails\",\"hash\":{\"index\":(data && data.index),\"gameId\":((stack1 = ((stack1 = ((stack1 = (data && data.root)) && stack1.data)) && stack1.gameDetails)) && stack1.gameId),\"label\":\"GH_RESPIN\"},\"data\":data,\"indent\":\"                                    \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? depth0.otherWins : depth0)) != null ? stack1.length : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(66, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                                </td>\\n                            </tr>\\n\";\n},\"72\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return \"                        <tr>\\n                            <td colspan=\\\"2\\\" class=\\\"group-title\\\">\"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(alias1,\"GH_FREE_SPINS_TITLE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</td>\\n                        </tr>\\n\\n\"\n    + ((stack1 = helpers.each.call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.freeSpins : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(73, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"73\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return \"                            <tr>\\n                                <td colspan=\\\"2\\\">\\n\\n\"\n    + ((stack1 = container.invokePartial(partials.spinDetails,depth0,{\"name\":\"spinDetails\",\"hash\":{\"index\":(data && data.index),\"label\":\"GH_FREE_SPIN\",\"gameId\":((stack1 = ((stack1 = ((stack1 = (data && data.root)) && stack1.data)) && stack1.gameDetails)) && stack1.gameId)},\"data\":data,\"indent\":\"                                    \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.otherWins : depth0)) != null ? stack1.length : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(66, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.respins : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(74, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                                </td>\\n                            </tr>\\n\";\n},\"74\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return \"\\n\"\n    + ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.respins : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(75, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"75\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return \"                                            <tr>\\n\\n                                                <td colspan=\\\"2\\\" class=\\\"respin-in-free-spin\\\">\\n\\n\"\n    + ((stack1 = container.invokePartial(partials.spinDetails,depth0,{\"name\":\"spinDetails\",\"hash\":{\"index\":(data && data.index),\"label\":\"GH_RESPIN\",\"gameId\":((stack1 = ((stack1 = ((stack1 = (data && data.root)) && stack1.data)) && stack1.gameDetails)) && stack1.gameId)},\"data\":data,\"indent\":\"                                                    \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? depth0.otherWins : depth0)) != null ? stack1.length : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(76, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                                                </td>\\n                                            </tr>\\n\";\n},\"76\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return \"                                                        <div class=\\\"wins\\\">\\n\"\n    + ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.otherWins : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(77, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                                                        </div>\\n\";\n},\"77\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                                                                <div class=\\\"details-row\\\">\\n                                                                    <span class=\\\"label\\\">- \"\n    + alias3((helpers.translateOtherWin || (depth0 && depth0.translateOtherWin) || alias2).call(alias1,(depth0 != null ? depth0.type : depth0),{\"name\":\"translateOtherWin\",\"hash\":{},\"data\":data}))\n    + \":</span>\\n                                                                    <span class=\\\"pull-right value currency-amount\\\">\"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                                                                </div>\\n\";\n},\"79\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return \"                        <tr>\\n                            <td colspan=\\\"2\\\" class=\\\"group-title\\\">\"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(alias1,\"GH_RESPINS_TITLE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</td>\\n                        </tr>\\n\"\n    + ((stack1 = helpers.each.call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.heldRespins : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(70, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"81\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.jackpotWins : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(82, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"82\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return \"                            <tr class=\\\"jackpot-win\\\">\\n                                <td>\\n\"\n    + ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.reels : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(83, data, 0),\"inverse\":container.program(85, data, 0),\"data\":data})) != null ? stack1 : \"\")\n    + \"                                </td>\\n                            </tr>\\n\";\n},\"83\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = container.invokePartial(partials.jackpotDetails,depth0,{\"name\":\"jackpotDetails\",\"hash\":{\"label\":\"GH_JACKPOT_WIN\",\"gameId\":((stack1 = ((stack1 = ((stack1 = (data && data.root)) && stack1.data)) && stack1.gameDetails)) && stack1.gameId)},\"data\":data,\"indent\":\"                                        \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"85\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                                        <span class=\\\"label\\\">\\n                                            \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_JACKPOT_WIN\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                                        </span>\\n                                        <span class=\\\"value currency-amount\\\">\\n                                            \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                                        </span>\\n\";\n},\"87\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.otherWins : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(88, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"88\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = (helpers.ifNot || (depth0 && depth0.ifNot) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.amount : depth0),0,{\"name\":\"ifNot\",\"hash\":{},\"fn\":container.program(89, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"89\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                            <tr>\\n                                <td>\\n\t\t\t\t\t\t\t\t\t<span class=\\\"label\\\">\\n\t\t\t\t\t\t\t\t\t\t\"\n    + alias3((helpers.translateOtherWin || (depth0 && depth0.translateOtherWin) || alias2).call(alias1,(depth0 != null ? depth0.type : depth0),{\"name\":\"translateOtherWin\",\"hash\":{},\"data\":data}))\n    + \":\\n\t\t\t\t\t\t\t\t\t</span>\\n\t\t\t\t\t\t\t\t\t<span class=\\\"value currency-amount\\\">\\n\t\t\t\t\t\t\t\t\t\t\"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n\t\t\t\t\t\t\t\t\t</span>\\n\t\t\t\t\t\t\t\t</td>\\n                            </tr>\\n\";\n},\"91\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                        <tr>\\n\t\t\t\t\t\t\t<td>\\n\t\t\t\t\t\t\t\t<span class=\\\"label\\\">\\n\t\t\t\t\t\t\t\t\t\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_ROUND_CORRECTION\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n\t\t\t\t\t\t\t\t</span>\\n\t\t\t\t\t\t\t\t<span class=\\\"value currency-amount\\\">\\n\t\t\t\t\t\t\t\t\t\"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.totalWinCorrection : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n\t\t\t\t\t\t\t\t</span>\\n\t\t\t\t\t\t\t</td>\\n                        </tr>\\n\";\n},\"93\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                    <tr class=\\\"totalWin\\\">\\n                        <td>\\n\t\t\t\t\t\t\t<span class=\\\"label\\\">\\n\t\t\t\t\t\t\t\t\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_TOTAL_WIN\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n\t\t\t\t\t\t\t</span>\\n\t\t\t\t\t\t\t<span class=\\\"value currency-amount\\\">\\n\t\t\t\t\t\t\t\t\"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.totalWin : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n\t\t\t\t\t\t\t</span>\\n\t\t\t\t\t\t</td>\\n                    </tr>\\n\";\n},\"95\":function(container,depth0,helpers,partials,data) {\n    return \"            <p class=\\\"message\\\">\"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),\"GH_NO_HISTORY\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</p>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return \"<div class=\\\"casino-game-history \"\n    + ((stack1 = helpers.unless.call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.reels : stack1),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(1, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\\">\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.reels : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n    <div class=\\\"details-column\\\">\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.data : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(29, data, 0, blockParams, depths),\"inverse\":container.program(95, data, 0, blockParams, depths),\"data\":data})) != null ? stack1 : \"\")\n    + \"    </div>\\n\\n</div>\\n\";\n},\"usePartial\":true,\"useData\":true,\"useDepths\":true});\n","// hbsfy compiled Handlebars template\nvar HandlebarsCompiler = require('hbsfy/runtime');\nmodule.exports = HandlebarsCompiler.template({\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n    var stack1, helper;\n\n  return \"<div class=\\\"casino-game-history table \"\n    + container.escapeExpression(((helper = (helper = helpers.gameId || (depth0 != null ? depth0.gameId : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"gameId\",\"hash\":{},\"data\":data}) : helper)))\n    + \"\\\">\\n    <!-- cards for Baccarat and numbers for Roulette -->\\n\"\n    + ((stack1 = container.invokePartial(partials.outcome,depth0,{\"name\":\"outcome\",\"data\":data,\"indent\":\"    \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n    + \"\\n    <div class=\\\"row result\\\">\\n        <div class=\\\"history-info\\\">\\n\"\n    + ((stack1 = container.invokePartial(partials.info,depth0,{\"name\":\"info\",\"data\":data,\"indent\":\"            \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n    + \"        </div>\\n    </div>\\n\\n</div>\\n\";\n},\"usePartial\":true,\"useData\":true});\n","// hbsfy compiled Handlebars template\nvar HandlebarsCompiler = require('hbsfy/runtime');\nmodule.exports = HandlebarsCompiler.template({\"1\":function(container,depth0,helpers,partials,data) {\n    return \"no-result\";\n},\"3\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing;\n\n  return ((stack1 = helpers[\"if\"].call(alias1,(helpers.isDemo || (depth0 && depth0.isDemo) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.promo : stack1),{\"name\":\"isDemo\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(4, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(helpers.isVoucher || (depth0 && depth0.isVoucher) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.promo : stack1),{\"name\":\"isVoucher\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(6, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.hideGameDetails : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(8, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.hideTransactionDetails : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(10, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(12, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"    </div>\\n\\n    <div class=\\\"game-details-section\\\">\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.reels : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(14, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n        <div class=\\\"details-column spin-details\\\">\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.data : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(40, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\";\n},\"4\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = container.invokePartial(partials.demoRoundNote,depth0,{\"name\":\"demoRoundNote\",\"data\":data,\"indent\":\"                \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"6\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = container.invokePartial(partials.freeRoundNote,depth0,{\"name\":\"freeRoundNote\",\"data\":data,\"indent\":\"                \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"8\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = container.invokePartial(partials.gameDetails,depth0,{\"name\":\"gameDetails\",\"hash\":{\"compactView\":true,\"regulationsData\":((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.regulations : stack1),\"detailsData\":((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.gameDetails : stack1)},\"data\":data,\"indent\":\"                \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"10\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = container.invokePartial(partials.transactions,depth0,{\"name\":\"transactions\",\"hash\":{\"compactView\":true,\"promo\":((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.promo : stack1),\"isBonusRound\":((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.promo : stack1)) != null ? stack1.mode : stack1),\"transactionDetails\":((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.transactions : stack1)},\"data\":data,\"indent\":\"                \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"12\":function(container,depth0,helpers,partials,data) {\n    return \"\";\n},\"14\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing;\n\n  return \"    \t    <div class=\\\"screen-scale-wrapper\\\">\\n            <div class=\\\"spin-screen-wrapper result-column\\\">\\n                <h3>\"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_GAME_DETAILS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n    \t        <svg viewBox=\\\"0 0 800 1000\\\" preserveAspectRatio=\\\"xMinYMin slice\\\" width=\\\"800\\\" height=\\\"1000\\\" class=\\\"lines-overlay\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n    \t            <g class=\\\"lines-container\\\"></g>\\n    \t        </svg>\\n\\n    \t        <table class=\\\"main-screen reels\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\n    \t            <tr class='spin-screen-0 spin-screen'>\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(helpers.hasHorizontalReels || (depth0 && depth0.hasHorizontalReels) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.gameDetails : stack1)) != null ? stack1.gameId : stack1),{\"name\":\"hasHorizontalReels\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(15, data, 0, blockParams, depths),\"inverse\":container.program(22, data, 0, blockParams, depths),\"data\":data})) != null ? stack1 : \"\")\n    + \"    \t            </tr>\\n\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.respins : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(26, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.freeSpins : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(29, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.heldRespins : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(34, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.jackpotWins : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(36, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"    \t        </table>\\n    \t    </div>\\n    \t</div>\\n\";\n},\"15\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.reels : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(16, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"16\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n  return \"                                <td class='reel-index-\"\n    + alias4(((helper = (helper = helpers.index || (data && data.index)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"index\",\"hash\":{},\"data\":data}) : helper)))\n    + \"' data-reel-index='\"\n    + alias4(((helper = (helper = helpers.index || (data && data.index)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"index\",\"hash\":{},\"data\":data}) : helper)))\n    + \"'>\\n\"\n    + ((stack1 = helpers.each.call(alias1,depth0,{\"name\":\"each\",\"hash\":{},\"fn\":container.program(17, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                                </td>\\n\";\n},\"17\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),depth0,{\"name\":\"if\",\"hash\":{\"includeZero\":true},\"fn\":container.program(18, data, 0, blockParams, depths),\"inverse\":container.program(20, data, 0, blockParams, depths),\"data\":data})) != null ? stack1 : \"\");\n},\"18\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return ((stack1 = container.invokePartial(partials.tilesData,depth0,{\"name\":\"tilesData\",\"hash\":{\"reel\":(container.data(data, 1) && container.data(data, 1).index),\"data\":depth0},\"data\":data,\"indent\":\"                                            \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"20\":function(container,depth0,helpers,partials,data) {\n    return \"                                            <div>\\n                                            </div>\\n\";\n},\"22\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.reels : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(23, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"23\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n  return \"                                <td class='reel-index-\"\n    + alias4(((helper = (helper = helpers.index || (data && data.index)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"index\",\"hash\":{},\"data\":data}) : helper)))\n    + \"' data-reel-index='\"\n    + alias4(((helper = (helper = helpers.index || (data && data.index)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"index\",\"hash\":{},\"data\":data}) : helper)))\n    + \"'>\\n\"\n    + ((stack1 = helpers.each.call(alias1,depth0,{\"name\":\"each\",\"hash\":{},\"fn\":container.program(24, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                                </td>\\n\";\n},\"24\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return ((stack1 = container.invokePartial(partials.tilesData,depth0,{\"name\":\"tilesData\",\"hash\":{\"reel\":(container.data(data, 1) && container.data(data, 1).index),\"data\":depth0},\"data\":data,\"indent\":\"                                        \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"26\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.respins : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(27, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"27\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return ((stack1 = container.invokePartial(partials.spinScreen,depth0,{\"name\":\"spinScreen\",\"hash\":{\"tiles\":(depths[1] != null ? depths[1].tiles : depths[1]),\"aPath\":(depths[1] != null ? depths[1].assetsPath : depths[1]),\"gId\":((stack1 = ((stack1 = (depths[1] != null ? depths[1].data : depths[1])) != null ? stack1.gameDetails : stack1)) != null ? stack1.gameId : stack1)},\"data\":data,\"indent\":\"                            \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"29\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.freeSpins : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(30, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"30\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return \"                            <!-- TODO TITLE -->\\n\"\n    + ((stack1 = container.invokePartial(partials.spinScreen,depth0,{\"name\":\"spinScreen\",\"hash\":{\"tiles\":(depths[1] != null ? depths[1].tiles : depths[1]),\"aPath\":(depths[1] != null ? depths[1].assetsPath : depths[1]),\"gId\":((stack1 = ((stack1 = (depths[1] != null ? depths[1].data : depths[1])) != null ? stack1.gameDetails : stack1)) != null ? stack1.gameId : stack1)},\"data\":data,\"indent\":\"                            \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.respins : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(31, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\";\n},\"31\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.respins : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(32, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"32\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return ((stack1 = container.invokePartial(partials.spinScreen,depth0,{\"name\":\"spinScreen\",\"hash\":{\"index\":(data && data.index),\"tiles\":(depths[2] != null ? depths[2].tiles : depths[2]),\"aPath\":(depths[2] != null ? depths[2].assetsPath : depths[2]),\"gId\":((stack1 = ((stack1 = (depths[2] != null ? depths[2].data : depths[2])) != null ? stack1.gameDetails : stack1)) != null ? stack1.gameId : stack1)},\"data\":data,\"indent\":\"                                    \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"34\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.heldRespins : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(27, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"36\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.jackpotWins : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(37, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"37\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.reels : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(38, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"38\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return ((stack1 = container.invokePartial(partials.spinScreen,depth0,{\"name\":\"spinScreen\",\"hash\":{\"tiles\":(depths[1] != null ? depths[1].tiles : depths[1]),\"aPath\":(depths[1] != null ? depths[1].assetsPath : depths[1]),\"gId\":((stack1 = ((stack1 = (depths[1] != null ? depths[1].data : depths[1])) != null ? stack1.gameDetails : stack1)) != null ? stack1.gameId : stack1)},\"data\":data,\"indent\":\"                                \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"40\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"\\n\\n                <h3>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_SPIN_DETAILS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n\\n                <table class=\\\"details\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\n    \t\t\t\t\t<tr>\\n                            <!-- Initial Spin -->\\n                            <td colspan=\\\"2\\\" class=\\\"group-title free-spin-details free-spin-details-0 initial-spin\\\" data-freespin-id=\\\"0\\\" data-spin-winline-set=\\\"\"\n    + alias3(container.lambda(((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.winLineSet : stack1), depth0))\n    + \"\\\">\\n                                <a>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_INITIAL_SPIN\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</a>\\n                            </td>\\n    \t\t\t\t\t</tr>\\n\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.initialLinesWin : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(41, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                        <!-- Initial Spin Wins -->\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.winLines : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(43, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.otherWins : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(66, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.nudges : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(70, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.respins : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(75, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.freeSpins : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(78, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.heldRespins : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(85, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.jackpotWins : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(87, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.totalWinCorrection : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(93, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = (helpers.ifNum || (depth0 && depth0.ifNum) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.transactions : stack1)) != null ? stack1.totalWin : stack1),{\"name\":\"ifNum\",\"hash\":{},\"fn\":container.program(95, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n                </table>\\n\\n\";\n},\"41\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                            <tr class=\\\"symbol-wins\\\">\\n                                <td colspan=\\\"2\\\">\\n                                    <div class=\\\"item\\\">\\n                                    <span class=\\\"label\\\">\\n                                        \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_SYMBOL_WINS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                                    </span>\\n                                    <span class=\\\"value currency-amount\\\">\"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.initialLinesWin : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                                    </div>\\n                                </td>\\n                            </tr>\\n\";\n},\"43\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return \"                            <tbody class=\\\"lines-list-0\\\" data-freespin-id=\\\"0\\\">\\n\"\n    + ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.winLines : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(44, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                            </tbody>\\n\";\n},\"44\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return ((stack1 = helpers.unless.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.swapReels : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(45, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"45\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression, alias4=container.lambda;\n\n  return \"                                        <tr class=\\\"line-details fs\\\" data-freespin-id=\\\"0\\\" data-line-id=\\\"\"\n    + alias3((helpers.math || (depth0 && depth0.math) || alias2).call(alias1,(depth0 != null ? depth0.type : depth0),\"-\",\"1\",{\"name\":\"math\",\"hash\":{},\"data\":data}))\n    + \"\\\" data-line-tiles=\\\"\"\n    + alias3(alias4((depth0 != null ? depth0.tiles : depth0), depth0))\n    + \"\\\" data-line-start=\\\"\"\n    + alias3(alias4((depth0 != null ? depth0.start : depth0), depth0))\n    + \"\\\" data-line-length=\\\"\"\n    + alias3(alias4((depth0 != null ? depth0.length : depth0), depth0))\n    + \"\\\" data-spin-winline-set=\\\"\"\n    + alias3(alias4(((stack1 = ((stack1 = (depths[1] != null ? depths[1].data : depths[1])) != null ? stack1.winDetails : stack1)) != null ? stack1.winLineSet : stack1), depth0))\n    + \"\\\">\\n                                            <td>\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(helpers.hasAdditionalWayWin || (depth0 && depth0.hasAdditionalWayWin) || alias2).call(alias1,((stack1 = ((stack1 = (depths[1] != null ? depths[1].data : depths[1])) != null ? stack1.gameDetails : stack1)) != null ? stack1.gameId : stack1),(depth0 != null ? depth0.tiles : depth0),((stack1 = ((stack1 = (data && data.root)) && stack1.data)) && stack1.spinData),{\"name\":\"hasAdditionalWayWin\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(46, data, 0, blockParams, depths),\"inverse\":container.program(48, data, 0, blockParams, depths),\"data\":data})) != null ? stack1 : \"\")\n    + \"                                            </td>\\n                                        </tr>\\n\";\n},\"46\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression, alias4=container.lambda;\n\n  return \"                                                     <span class=\\\"label\\\">\\n                                                        - \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_WIN_WAYS_TITLE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \" #\"\n    + alias3((helpers.math || (depth0 && depth0.math) || alias2).call(alias1,(data && data.index),\"+\",1,{\"name\":\"math\",\"hash\":{},\"data\":data}))\n    + \"\\n                                                    </span>\\n                                                    <span class=\\\"value currency-amount\\\">\\n                                                        \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                                                    </span>\\n                                                    <br>\\n                                                    <span class=\\\"label\\\">\\n                                                        &emsp;- \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_WIN_WAYS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"\\n                                                    </span>\\n                                                    <span class=\\\"value currency-amount\\\">\\n                                                        \"\n    + alias3(alias4((depth0 != null ? depth0.ways : depth0), depth0))\n    + \"\\n                                                    </span>\\n                                                    <br>\\n                                                    <span class=\\\"label\\\">\\n                                                        &emsp;- \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_LENGTH\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"\\n                                                    </span>\\n                                                    <span class=\\\"value currency-amount\\\">\\n                                                        \"\n    + alias3(alias4((depth0 != null ? depth0.length : depth0), depth0))\n    + \"\\n                                                    </span>\\n\";\n},\"48\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return ((stack1 = helpers[\"if\"].call(alias1,(helpers.hasAdditionalScatterWin || (depth0 && depth0.hasAdditionalScatterWin) || helpers.helperMissing).call(alias1,((stack1 = ((stack1 = (depths[1] != null ? depths[1].data : depths[1])) != null ? stack1.gameDetails : stack1)) != null ? stack1.gameId : stack1),(depth0 != null ? depth0.tiles : depth0),((stack1 = ((stack1 = (data && data.root)) && stack1.data)) && stack1.spinData),{\"name\":\"hasAdditionalScatterWin\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(49, data, 0, blockParams, depths),\"inverse\":container.program(51, data, 0, blockParams, depths),\"data\":data})) != null ? stack1 : \"\");\n},\"49\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                                                    <span class=\\\"label\\\">\\n                                                        - \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_SCATTER_WIN_TITLE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \" #\"\n    + alias3((helpers.math || (depth0 && depth0.math) || alias2).call(alias1,(data && data.index),\"+\",1,{\"name\":\"math\",\"hash\":{},\"data\":data}))\n    + \"\\n                                                    </span>\\n                                                    <span class=\\\"value currency-amount\\\">\\n                                                        \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                                                    </span>\\n                                                    <br>\\n                                                    <span class=\\\"label\\\">\\n                                                        &emsp;- \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_CLUSTER_COUNT\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"\\n                                                    </span>\\n                                                    <span class=\\\"value currency-amount\\\">\\n                                                        \"\n    + alias3(container.lambda((depth0 != null ? depth0.length : depth0), depth0))\n    + \"\\n                                                    </span>\\n\";\n},\"51\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return ((stack1 = helpers[\"if\"].call(alias1,(helpers.isWays || (depth0 && depth0.isWays) || helpers.helperMissing).call(alias1,((stack1 = ((stack1 = (depths[1] != null ? depths[1].data : depths[1])) != null ? stack1.gameDetails : stack1)) != null ? stack1.gameId : stack1),{\"name\":\"isWays\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(52, data, 0, blockParams, depths),\"inverse\":container.program(55, data, 0, blockParams, depths),\"data\":data})) != null ? stack1 : \"\");\n},\"52\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression, alias4=container.lambda;\n\n  return \"                                                    <span class=\\\"label\\\">\\n                                                        - \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_WIN_WAYS_TITLE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \" #\"\n    + alias3((helpers.math || (depth0 && depth0.math) || alias2).call(alias1,(data && data.index),\"+\",1,{\"name\":\"math\",\"hash\":{},\"data\":data}))\n    + \"\\n                                                    </span>\\n                                                    <span class=\\\"value currency-amount\\\">\\n                                                        \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                                                    </span>\\n                                                    <br>\\n                                                    <span class=\\\"label\\\">\\n                                                        &emsp;- \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_WIN_WAYS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"\\n                                                    </span>\\n                                                    <span class=\\\"value currency-amount\\\">\\n                                                        \"\n    + alias3(alias4((depth0 != null ? depth0.ways : depth0), depth0))\n    + \"\\n                                                    </span>\\n                                                    <br>\\n                                                    <span class=\\\"label\\\">\\n                                                        &emsp;- \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_LENGTH\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"\\n                                                    </span>\\n                                                    <span class=\\\"value currency-amount\\\">\\n                                                        \"\n    + alias3(alias4((depth0 != null ? depth0.length : depth0), depth0))\n    + \"\\n                                                    </span>\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(helpers.compare || (depth0 && depth0.compare) || alias2).call(alias1,(depth0 != null ? depth0.multiplier : depth0),\">\",1,{\"name\":\"compare\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(53, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"53\":function(container,depth0,helpers,partials,data) {\n    var alias1=container.escapeExpression;\n\n  return \"                                                        <br>\\n                                                        <span class=\\\"label\\\">\\n                                                            &emsp;- \"\n    + alias1((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),\"GH_MULTIPLIER\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"\\n                                                        </span>\\n                                                        <span class=\\\"value currency-amount\\\">\\n                                                            \"\n    + alias1(container.lambda((depth0 != null ? depth0.multiplier : depth0), depth0))\n    + \"\\n                                                        </span>\\n\";\n},\"55\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return ((stack1 = helpers[\"if\"].call(alias1,(helpers.isCluster || (depth0 && depth0.isCluster) || helpers.helperMissing).call(alias1,((stack1 = ((stack1 = (depths[1] != null ? depths[1].data : depths[1])) != null ? stack1.gameDetails : stack1)) != null ? stack1.gameId : stack1),{\"name\":\"isCluster\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(56, data, 0, blockParams, depths),\"inverse\":container.program(63, data, 0, blockParams, depths),\"data\":data})) != null ? stack1 : \"\");\n},\"56\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return ((stack1 = helpers[\"if\"].call(alias1,(helpers.isScatter || (depth0 && depth0.isScatter) || alias2).call(alias1,((stack1 = ((stack1 = (depths[1] != null ? depths[1].data : depths[1])) != null ? stack1.gameDetails : stack1)) != null ? stack1.gameId : stack1),{\"name\":\"isScatter\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(57, data, 0, blockParams, depths),\"inverse\":container.program(59, data, 0, blockParams, depths),\"data\":data})) != null ? stack1 : \"\")\n    + \"                                                    <span class=\\\"line-win-amount value currency-amount\\\">\"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                                                    <br>\\n                                                    <span class=\\\"line-number label\\\"> &emsp;- \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_CLUSTER_COUNT\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                                                    <span class=\\\"line-win-amount value\\\">\"\n    + alias3(container.lambda((depth0 != null ? depth0.length : depth0), depth0))\n    + \"</span>\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(helpers.compare || (depth0 && depth0.compare) || alias2).call(alias1,(depth0 != null ? depth0.multiplier : depth0),\">\",1,{\"name\":\"compare\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(61, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\";\n},\"57\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                                                        <span class=\\\"label\\\"> - \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_SCATTER_WIN_TITLE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \" #\"\n    + alias3((helpers.math || (depth0 && depth0.math) || alias2).call(alias1,(data && data.index),\"+\",1,{\"name\":\"math\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n\";\n},\"59\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                                                        <span class=\\\"label\\\"> - \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_CLUSTER_TITLE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \" #\"\n    + alias3((helpers.math || (depth0 && depth0.math) || alias2).call(alias1,(data && data.index),\"+\",1,{\"name\":\"math\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n\";\n},\"61\":function(container,depth0,helpers,partials,data) {\n    var alias1=container.escapeExpression;\n\n  return \"                                                        <br>\\n                                                        <span class=\\\"line-number label\\\"> &emsp;- \"\n    + alias1((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),\"GH_MULTIPLIER\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                                                        <span class=\\\"line-win-amount value currency-amount\\\">\"\n    + alias1(container.lambda((depth0 != null ? depth0.multiplier : depth0), depth0))\n    + \"</span>\\n\";\n},\"63\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                                                    <span class=\\\"label\\\">\\n                                                        - \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_LINE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \" #\"\n    + alias3(container.lambda((depth0 != null ? depth0.type : depth0), depth0))\n    + \"\\n                                                    </span>\\n                                                    <span class=\\\"value currency-amount\\\">\\n                                                        \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                                                    </span>\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(helpers.compare || (depth0 && depth0.compare) || alias2).call(alias1,(depth0 != null ? depth0.multiplier : depth0),\">\",1,{\"name\":\"compare\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(64, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                                                \";\n},\"64\":function(container,depth0,helpers,partials,data) {\n    var alias1=container.escapeExpression;\n\n  return \"                                                        <br>\\n                                                        <span class=\\\"line-number label\\\"> \"\n    + alias1((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),\"GH_MULTIPLIER\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                                                        <span class=\\\"line-win-amount value currency-amount\\\">\"\n    + alias1(container.lambda((depth0 != null ? depth0.multiplier : depth0), depth0))\n    + \"</span>\\n\";\n},\"66\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.otherWins : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(67, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"67\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = (helpers.ifNot || (depth0 && depth0.ifNot) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.amount : depth0),0,{\"name\":\"ifNot\",\"hash\":{},\"fn\":container.program(68, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"68\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                                <tr>\\n                                    <td>\\n    \t\t\t\t\t\t\t\t\t<span class=\\\"label\\\">\\n    \t\t\t\t\t\t\t\t\t\t\"\n    + alias3((helpers.translateOtherWin || (depth0 && depth0.translateOtherWin) || alias2).call(alias1,(depth0 != null ? depth0.type : depth0),{\"name\":\"translateOtherWin\",\"hash\":{},\"data\":data}))\n    + \":\\n    \t\t\t\t\t\t\t\t\t</span>\\n    \t\t\t\t\t\t\t\t\t<span class=\\\"value currency-amount\\\">\\n    \t\t\t\t\t\t\t\t\t\t\"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n    \t\t\t\t\t\t\t\t\t</span>\\n    \t\t\t\t\t\t\t\t</td>\\n                                </tr>\\n\";\n},\"70\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return \"                            <tr>\\n                                <td colspan=\\\"2\\\" class=\\\"group-title\\\">\"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(alias1,\"GH_NUDGE_WINS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</td>\\n                            </tr>\\n\"\n    + ((stack1 = helpers.each.call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.nudges : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(71, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"71\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return \"                                <tr>\\n                                    <td colspan=\\\"2\\\">\\n\"\n    + ((stack1 = container.invokePartial(partials.spinDetails,depth0,{\"name\":\"spinDetails\",\"hash\":{\"index\":(data && data.index),\"gameId\":((stack1 = ((stack1 = (depths[1] != null ? depths[1].data : depths[1])) != null ? stack1.gameDetails : stack1)) != null ? stack1.gameId : stack1),\"label\":\"GH_NUDGE\"},\"data\":data,\"indent\":\"                                        \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? depth0.otherWins : depth0)) != null ? stack1.length : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(72, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                                    </td>\\n                                </tr>\\n\";\n},\"72\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return \"                                            <div class=\\\"wins\\\">\\n\"\n    + ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.otherWins : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(73, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                                            </div>\\n\";\n},\"73\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                                                    <div class=\\\"details-row\\\">\\n                                                        <span class=\\\"label\\\">- \"\n    + alias3((helpers.translateOtherWin || (depth0 && depth0.translateOtherWin) || alias2).call(alias1,(depth0 != null ? depth0.type : depth0),{\"name\":\"translateOtherWin\",\"hash\":{},\"data\":data}))\n    + \":</span>\\n                                                        <span class=\\\"pull-right value currency-amount\\\">\"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                                                    </div>\\n\";\n},\"75\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return \"                            <tr>\\n                                <td colspan=\\\"2\\\" class=\\\"group-title\\\">\"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(alias1,\"GH_RESPINS_TITLE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</td>\\n                            </tr>\\n\"\n    + ((stack1 = helpers.each.call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.respins : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(76, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"76\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return \"                                <tr>\\n                                    <td colspan=\\\"2\\\">\\n\"\n    + ((stack1 = container.invokePartial(partials.spinDetails,depth0,{\"name\":\"spinDetails\",\"hash\":{\"index\":(data && data.index),\"gameId\":((stack1 = ((stack1 = (depths[1] != null ? depths[1].data : depths[1])) != null ? stack1.gameDetails : stack1)) != null ? stack1.gameId : stack1),\"label\":\"GH_RESPIN\"},\"data\":data,\"indent\":\"                                        \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? depth0.otherWins : depth0)) != null ? stack1.length : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(72, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                                    </td>\\n                                </tr>\\n\";\n},\"78\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return \"                            <tr>\\n                                <td colspan=\\\"2\\\" class=\\\"group-title\\\">\"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(alias1,\"GH_FREE_SPINS_TITLE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</td>\\n                            </tr>\\n\\n\"\n    + ((stack1 = helpers.each.call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.freeSpins : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(79, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"79\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return \"                                <tr>\\n                                    <td colspan=\\\"2\\\">\\n\\n\"\n    + ((stack1 = container.invokePartial(partials.spinDetails,depth0,{\"name\":\"spinDetails\",\"hash\":{\"index\":(data && data.index),\"label\":\"GH_FREE_SPIN\",\"gameId\":((stack1 = ((stack1 = (depths[1] != null ? depths[1].data : depths[1])) != null ? stack1.gameDetails : stack1)) != null ? stack1.gameId : stack1)},\"data\":data,\"indent\":\"                                        \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.otherWins : depth0)) != null ? stack1.length : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(72, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.respins : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(80, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                                    </td>\\n                                </tr>\\n\";\n},\"80\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return \"\\n\"\n    + ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.respins : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(81, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"81\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return \"                                                <tr>\\n\\n                                                    <td colspan=\\\"2\\\" class=\\\"respin-in-free-spin\\\">\\n\\n\"\n    + ((stack1 = container.invokePartial(partials.spinDetails,depth0,{\"name\":\"spinDetails\",\"hash\":{\"index\":(data && data.index),\"label\":\"GH_RESPIN\",\"gameId\":((stack1 = ((stack1 = (depths[2] != null ? depths[2].data : depths[2])) != null ? stack1.gameDetails : stack1)) != null ? stack1.gameId : stack1)},\"data\":data,\"indent\":\"                                                        \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? depth0.otherWins : depth0)) != null ? stack1.length : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(82, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                                                    </td>\\n                                                </tr>\\n\";\n},\"82\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return \"                                                            <div class=\\\"wins\\\">\\n\"\n    + ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.otherWins : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(83, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                                                            </div>\\n\";\n},\"83\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                                                                    <div class=\\\"details-row\\\">\\n                                                                        <span class=\\\"label\\\">- \"\n    + alias3((helpers.translateOtherWin || (depth0 && depth0.translateOtherWin) || alias2).call(alias1,(depth0 != null ? depth0.type : depth0),{\"name\":\"translateOtherWin\",\"hash\":{},\"data\":data}))\n    + \":</span>\\n                                                                        <span class=\\\"pull-right value currency-amount\\\">\"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                                                                    </div>\\n\";\n},\"85\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return \"                            <tr>\\n                                <td colspan=\\\"2\\\" class=\\\"group-title\\\">\"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(alias1,\"GH_RESPINS_TITLE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</td>\\n                            </tr>\\n\"\n    + ((stack1 = helpers.each.call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.heldRespins : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(76, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"87\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.jackpotWins : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(88, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"88\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return \"                                <tr class=\\\"jackpot-win\\\">\\n                                    <td>\\n\"\n    + ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.reels : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(89, data, 0, blockParams, depths),\"inverse\":container.program(91, data, 0, blockParams, depths),\"data\":data})) != null ? stack1 : \"\")\n    + \"                                    </td>\\n                                </tr>\\n\";\n},\"89\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return ((stack1 = container.invokePartial(partials.jackpotDetails,depth0,{\"name\":\"jackpotDetails\",\"hash\":{\"label\":\"GH_JACKPOT_WIN\",\"gameId\":((stack1 = ((stack1 = (depths[2] != null ? depths[2].data : depths[2])) != null ? stack1.gameDetails : stack1)) != null ? stack1.gameId : stack1)},\"data\":data,\"indent\":\"                                            \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"91\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                                            <span class=\\\"label\\\">\\n                                                \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_JACKPOT_WIN\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                                            </span>\\n                                            <span class=\\\"value currency-amount\\\">\\n                                                \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                                            </span>\\n\";\n},\"93\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                            <tr>\\n    \t\t\t\t\t\t\t<td>\\n    \t\t\t\t\t\t\t\t<span class=\\\"label\\\">\\n    \t\t\t\t\t\t\t\t\t\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_ROUND_CORRECTION\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n    \t\t\t\t\t\t\t\t</span>\\n    \t\t\t\t\t\t\t\t<span class=\\\"value currency-amount\\\">\\n    \t\t\t\t\t\t\t\t\t\"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.totalWinCorrection : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n    \t\t\t\t\t\t\t\t</span>\\n    \t\t\t\t\t\t\t</td>\\n                            </tr>\\n\";\n},\"95\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                        <tr class=\\\"totalWin\\\">\\n                            <td>\\n    \t\t\t\t\t\t\t<span class=\\\"label\\\">\\n    \t\t\t\t\t\t\t\t\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_TOTAL_WIN\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n    \t\t\t\t\t\t\t</span>\\n    \t\t\t\t\t\t\t<span class=\\\"value currency-amount\\\">\\n    \t\t\t\t\t\t\t\t\"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.totalWin : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n    \t\t\t\t\t\t\t</span>\\n    \t\t\t\t\t\t</td>\\n                        </tr>\\n\";\n},\"97\":function(container,depth0,helpers,partials,data) {\n    return \"                <p class=\\\"message\\\">\"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),\"GH_NO_HISTORY\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</p>\\n\";\n},\"99\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return \"        <div class=\\\"details-column\\\">\\n            <h3>\"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(alias1,\"GH_ADDITIONAL_DETAILS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n\"\n    + ((stack1 = container.invokePartial(partials.gameDetails,depth0,{\"name\":\"gameDetails\",\"hash\":{\"regulationsData\":((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.regulations : stack1),\"detailsData\":((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.gameDetails : stack1)},\"data\":data,\"indent\":\"            \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.hideTransactionDetails : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(100, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"        </div>\\n\";\n},\"100\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = container.invokePartial(partials.transactions,depth0,{\"name\":\"transactions\",\"hash\":{\"promo\":((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.promo : stack1),\"isBonusRound\":((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.promo : stack1)) != null ? stack1.mode : stack1),\"transactionDetails\":((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.transactions : stack1)},\"data\":data,\"indent\":\"                \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return \"<div class=\\\"casino-game-history tigent-history \"\n    + ((stack1 = helpers.unless.call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.reels : stack1),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(1, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\\">\\n    <div class=\\\"details-column\\\">\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.data : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0, blockParams, depths),\"inverse\":container.program(97, data, 0, blockParams, depths),\"data\":data})) != null ? stack1 : \"\")\n    + \"        </div>\\n    </div>\\n\\n\"\n    + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.hideGameDetails : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(99, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"</div>\\n\";\n},\"usePartial\":true,\"useData\":true,\"useDepths\":true});\n"]}