@umang-boss/claudemon 1.7.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -9
- package/cli/doctor.ts +34 -0
- package/cli/install.ts +24 -1
- package/cli/shared.ts +6 -3
- package/dist/award-xp.mjs +10361 -944
- package/dist/award-xp.mjs.map +2 -2
- package/dist/cli.mjs +8737 -476
- package/dist/cli.mjs.map +2 -2
- package/dist/increment-counter.mjs +8651 -430
- package/dist/increment-counter.mjs.map +2 -2
- package/dist/server.mjs +10639 -952
- package/dist/server.mjs.map +2 -2
- package/hooks/post-tool-use.sh +12 -6
- package/hooks/stop.sh +9 -6
- package/hooks/user-prompt-submit.sh +7 -6
- package/package.json +1 -1
- package/scripts/download-colorscripts.ts +103 -186
- package/scripts/generate-pokemon-data.ts +433 -0
- package/scripts/transform-pokemon-data.ts +167 -0
- package/sprites/colorscripts/small/152-chikorita.txt +11 -0
- package/sprites/colorscripts/small/153-bayleef.txt +13 -0
- package/sprites/colorscripts/small/154-meganium.txt +15 -0
- package/sprites/colorscripts/small/155-cyndaquil.txt +10 -0
- package/sprites/colorscripts/small/156-quilava.txt +11 -0
- package/sprites/colorscripts/small/157-typhlosion.txt +14 -0
- package/sprites/colorscripts/small/158-totodile.txt +10 -0
- package/sprites/colorscripts/small/159-croconaw.txt +14 -0
- package/sprites/colorscripts/small/160-feraligatr.txt +14 -0
- package/sprites/colorscripts/small/161-sentret.txt +14 -0
- package/sprites/colorscripts/small/162-furret.txt +12 -0
- package/sprites/colorscripts/small/163-hoothoot.txt +11 -0
- package/sprites/colorscripts/small/164-noctowl.txt +20 -0
- package/sprites/colorscripts/small/165-ledyba.txt +10 -0
- package/sprites/colorscripts/small/166-ledian.txt +12 -0
- package/sprites/colorscripts/small/167-spinarak.txt +8 -0
- package/sprites/colorscripts/small/168-ariados.txt +12 -0
- package/sprites/colorscripts/small/169-crobat.txt +16 -0
- package/sprites/colorscripts/small/170-chinchou.txt +11 -0
- package/sprites/colorscripts/small/171-lanturn.txt +13 -0
- package/sprites/colorscripts/small/172-pichu.txt +11 -0
- package/sprites/colorscripts/small/173-cleffa.txt +9 -0
- package/sprites/colorscripts/small/174-igglybuff.txt +10 -0
- package/sprites/colorscripts/small/175-togepi.txt +10 -0
- package/sprites/colorscripts/small/176-togetic.txt +12 -0
- package/sprites/colorscripts/small/177-natu.txt +10 -0
- package/sprites/colorscripts/small/178-xatu.txt +19 -0
- package/sprites/colorscripts/small/179-mareep.txt +11 -0
- package/sprites/colorscripts/small/180-flaaffy.txt +12 -0
- package/sprites/colorscripts/small/181-ampharos.txt +14 -0
- package/sprites/colorscripts/small/182-bellossom.txt +15 -0
- package/sprites/colorscripts/small/183-marill.txt +10 -0
- package/sprites/colorscripts/small/184-azumarill.txt +19 -0
- package/sprites/colorscripts/small/185-sudowoodo.txt +18 -0
- package/sprites/colorscripts/small/186-politoed.txt +18 -0
- package/sprites/colorscripts/small/187-hoppip.txt +11 -0
- package/sprites/colorscripts/small/188-skiploom.txt +10 -0
- package/sprites/colorscripts/small/189-jumpluff.txt +12 -0
- package/sprites/colorscripts/small/190-aipom.txt +11 -0
- package/sprites/colorscripts/small/191-sunkern.txt +10 -0
- package/sprites/colorscripts/small/192-sunflora.txt +12 -0
- package/sprites/colorscripts/small/193-yanma.txt +9 -0
- package/sprites/colorscripts/small/194-wooper.txt +10 -0
- package/sprites/colorscripts/small/195-quagsire.txt +17 -0
- package/sprites/colorscripts/small/196-espeon.txt +16 -0
- package/sprites/colorscripts/small/197-umbreon.txt +15 -0
- package/sprites/colorscripts/small/198-murkrow.txt +12 -0
- package/sprites/colorscripts/small/199-slowking.txt +21 -0
- package/sprites/colorscripts/small/200-misdreavus.txt +11 -0
- package/sprites/colorscripts/small/201-unown.txt +12 -0
- package/sprites/colorscripts/small/202-wobbuffet.txt +18 -0
- package/sprites/colorscripts/small/203-girafarig.txt +13 -0
- package/sprites/colorscripts/small/204-pineco.txt +11 -0
- package/sprites/colorscripts/small/205-forretress.txt +10 -0
- package/sprites/colorscripts/small/206-dunsparce.txt +14 -0
- package/sprites/colorscripts/small/207-gligar.txt +13 -0
- package/sprites/colorscripts/small/208-steelix.txt +21 -0
- package/sprites/colorscripts/small/209-snubbull.txt +11 -0
- package/sprites/colorscripts/small/210-granbull.txt +13 -0
- package/sprites/colorscripts/small/211-qwilfish.txt +12 -0
- package/sprites/colorscripts/small/212-scizor.txt +19 -0
- package/sprites/colorscripts/small/213-shuckle.txt +15 -0
- package/sprites/colorscripts/small/214-heracross.txt +21 -0
- package/sprites/colorscripts/small/215-sneasel.txt +12 -0
- package/sprites/colorscripts/small/216-teddiursa.txt +11 -0
- package/sprites/colorscripts/small/217-ursaring.txt +13 -0
- package/sprites/colorscripts/small/218-slugma.txt +12 -0
- package/sprites/colorscripts/small/219-magcargo.txt +12 -0
- package/sprites/colorscripts/small/220-swinub.txt +8 -0
- package/sprites/colorscripts/small/221-piloswine.txt +12 -0
- package/sprites/colorscripts/small/222-corsola.txt +11 -0
- package/sprites/colorscripts/small/223-remoraid.txt +9 -0
- package/sprites/colorscripts/small/224-octillery.txt +15 -0
- package/sprites/colorscripts/small/225-delibird.txt +17 -0
- package/sprites/colorscripts/small/226-mantine.txt +11 -0
- package/sprites/colorscripts/small/227-skarmory.txt +20 -0
- package/sprites/colorscripts/small/228-houndour.txt +11 -0
- package/sprites/colorscripts/small/229-houndoom.txt +13 -0
- package/sprites/colorscripts/small/230-kingdra.txt +18 -0
- package/sprites/colorscripts/small/231-phanpy.txt +9 -0
- package/sprites/colorscripts/small/232-donphan.txt +12 -0
- package/sprites/colorscripts/small/233-porygon2.txt +15 -0
- package/sprites/colorscripts/small/234-stantler.txt +14 -0
- package/sprites/colorscripts/small/235-smeargle.txt +12 -0
- package/sprites/colorscripts/small/236-tyrogue.txt +12 -0
- package/sprites/colorscripts/small/237-hitmontop.txt +16 -0
- package/sprites/colorscripts/small/238-smoochum.txt +11 -0
- package/sprites/colorscripts/small/239-elekid.txt +11 -0
- package/sprites/colorscripts/small/240-magby.txt +11 -0
- package/sprites/colorscripts/small/241-miltank.txt +18 -0
- package/sprites/colorscripts/small/242-blissey.txt +18 -0
- package/sprites/colorscripts/small/243-raikou.txt +19 -0
- package/sprites/colorscripts/small/244-entei.txt +19 -0
- package/sprites/colorscripts/small/245-suicune.txt +20 -0
- package/sprites/colorscripts/small/246-larvitar.txt +11 -0
- package/sprites/colorscripts/small/247-pupitar.txt +11 -0
- package/sprites/colorscripts/small/248-tyranitar.txt +20 -0
- package/sprites/colorscripts/small/249-lugia.txt +21 -0
- package/sprites/colorscripts/small/250-ho-oh.txt +26 -0
- package/sprites/colorscripts/small/251-celebi.txt +10 -0
- package/sprites/colorscripts/small/252-treecko.txt +12 -0
- package/sprites/colorscripts/small/253-grovyle.txt +12 -0
- package/sprites/colorscripts/small/254-sceptile.txt +18 -0
- package/sprites/colorscripts/small/255-torchic.txt +11 -0
- package/sprites/colorscripts/small/256-combusken.txt +14 -0
- package/sprites/colorscripts/small/257-blaziken.txt +18 -0
- package/sprites/colorscripts/small/258-mudkip.txt +10 -0
- package/sprites/colorscripts/small/259-marshtomp.txt +12 -0
- package/sprites/colorscripts/small/260-swampert.txt +18 -0
- package/sprites/colorscripts/small/261-poochyena.txt +10 -0
- package/sprites/colorscripts/small/262-mightyena.txt +12 -0
- package/sprites/colorscripts/small/263-zigzagoon.txt +9 -0
- package/sprites/colorscripts/small/264-linoone.txt +11 -0
- package/sprites/colorscripts/small/265-wurmple.txt +10 -0
- package/sprites/colorscripts/small/266-silcoon.txt +10 -0
- package/sprites/colorscripts/small/267-beautifly.txt +13 -0
- package/sprites/colorscripts/small/268-cascoon.txt +10 -0
- package/sprites/colorscripts/small/269-dustox.txt +11 -0
- package/sprites/colorscripts/small/270-lotad.txt +9 -0
- package/sprites/colorscripts/small/271-lombre.txt +12 -0
- package/sprites/colorscripts/small/272-ludicolo.txt +20 -0
- package/sprites/colorscripts/small/273-seedot.txt +10 -0
- package/sprites/colorscripts/small/274-nuzleaf.txt +13 -0
- package/sprites/colorscripts/small/275-shiftry.txt +18 -0
- package/sprites/colorscripts/small/276-taillow.txt +9 -0
- package/sprites/colorscripts/small/277-swellow.txt +11 -0
- package/sprites/colorscripts/small/278-wingull.txt +8 -0
- package/sprites/colorscripts/small/279-pelipper.txt +15 -0
- package/sprites/colorscripts/small/280-ralts.txt +10 -0
- package/sprites/colorscripts/small/281-kirlia.txt +13 -0
- package/sprites/colorscripts/small/282-gardevoir.txt +19 -0
- package/sprites/colorscripts/small/283-surskit.txt +11 -0
- package/sprites/colorscripts/small/284-masquerain.txt +13 -0
- package/sprites/colorscripts/small/285-shroomish.txt +9 -0
- package/sprites/colorscripts/small/286-breloom.txt +14 -0
- package/sprites/colorscripts/small/287-slakoth.txt +9 -0
- package/sprites/colorscripts/small/288-vigoroth.txt +12 -0
- package/sprites/colorscripts/small/289-slaking.txt +14 -0
- package/sprites/colorscripts/small/290-nincada.txt +8 -0
- package/sprites/colorscripts/small/291-ninjask.txt +16 -0
- package/sprites/colorscripts/small/292-shedinja.txt +15 -0
- package/sprites/colorscripts/small/293-whismur.txt +9 -0
- package/sprites/colorscripts/small/294-loudred.txt +13 -0
- package/sprites/colorscripts/small/295-exploud.txt +18 -0
- package/sprites/colorscripts/small/296-makuhita.txt +11 -0
- package/sprites/colorscripts/small/297-hariyama.txt +13 -0
- package/sprites/colorscripts/small/298-azurill.txt +11 -0
- package/sprites/colorscripts/small/299-nosepass.txt +10 -0
- package/sprites/colorscripts/small/300-skitty.txt +11 -0
- package/sprites/colorscripts/small/301-delcatty.txt +12 -0
- package/sprites/colorscripts/small/302-sableye.txt +16 -0
- package/sprites/colorscripts/small/303-mawile.txt +15 -0
- package/sprites/colorscripts/small/304-aron.txt +7 -0
- package/sprites/colorscripts/small/305-lairon.txt +10 -0
- package/sprites/colorscripts/small/306-aggron.txt +18 -0
- package/sprites/colorscripts/small/307-meditite.txt +11 -0
- package/sprites/colorscripts/small/308-medicham.txt +14 -0
- package/sprites/colorscripts/small/309-electrike.txt +9 -0
- package/sprites/colorscripts/small/310-manectric.txt +18 -0
- package/sprites/colorscripts/small/311-plusle.txt +11 -0
- package/sprites/colorscripts/small/312-minun.txt +11 -0
- package/sprites/colorscripts/small/313-volbeat.txt +11 -0
- package/sprites/colorscripts/small/314-illumise.txt +11 -0
- package/sprites/colorscripts/small/315-roselia.txt +12 -0
- package/sprites/colorscripts/small/316-gulpin.txt +10 -0
- package/sprites/colorscripts/small/317-swalot.txt +10 -0
- package/sprites/colorscripts/small/318-carvanha.txt +11 -0
- package/sprites/colorscripts/small/319-sharpedo.txt +20 -0
- package/sprites/colorscripts/small/320-wailmer.txt +13 -0
- package/sprites/colorscripts/small/321-wailord.txt +18 -0
- package/sprites/colorscripts/small/322-numel.txt +10 -0
- package/sprites/colorscripts/small/323-camerupt.txt +12 -0
- package/sprites/colorscripts/small/324-torkoal.txt +15 -0
- package/sprites/colorscripts/small/325-spoink.txt +11 -0
- package/sprites/colorscripts/small/326-grumpig.txt +11 -0
- package/sprites/colorscripts/small/327-spinda.txt +12 -0
- package/sprites/colorscripts/small/328-trapinch.txt +11 -0
- package/sprites/colorscripts/small/329-vibrava.txt +11 -0
- package/sprites/colorscripts/small/330-flygon.txt +18 -0
- package/sprites/colorscripts/small/331-cacnea.txt +10 -0
- package/sprites/colorscripts/small/332-cacturne.txt +15 -0
- package/sprites/colorscripts/small/333-swablu.txt +9 -0
- package/sprites/colorscripts/small/334-altaria.txt +16 -0
- package/sprites/colorscripts/small/335-zangoose.txt +12 -0
- package/sprites/colorscripts/small/336-seviper.txt +11 -0
- package/sprites/colorscripts/small/337-lunatone.txt +13 -0
- package/sprites/colorscripts/small/338-solrock.txt +17 -0
- package/sprites/colorscripts/small/339-barboach.txt +8 -0
- package/sprites/colorscripts/small/340-whiscash.txt +13 -0
- package/sprites/colorscripts/small/341-corphish.txt +11 -0
- package/sprites/colorscripts/small/342-crawdaunt.txt +17 -0
- package/sprites/colorscripts/small/343-baltoy.txt +12 -0
- package/sprites/colorscripts/small/344-claydol.txt +17 -0
- package/sprites/colorscripts/small/345-lileep.txt +11 -0
- package/sprites/colorscripts/small/346-cradily.txt +13 -0
- package/sprites/colorscripts/small/347-anorith.txt +11 -0
- package/sprites/colorscripts/small/348-armaldo.txt +16 -0
- package/sprites/colorscripts/small/349-feebas.txt +12 -0
- package/sprites/colorscripts/small/350-milotic.txt +18 -0
- package/sprites/colorscripts/small/351-castform.txt +11 -0
- package/sprites/colorscripts/small/352-kecleon.txt +11 -0
- package/sprites/colorscripts/small/353-shuppet.txt +11 -0
- package/sprites/colorscripts/small/354-banette.txt +11 -0
- package/sprites/colorscripts/small/355-duskull.txt +12 -0
- package/sprites/colorscripts/small/356-dusclops.txt +13 -0
- package/sprites/colorscripts/small/357-tropius.txt +14 -0
- package/sprites/colorscripts/small/358-chimecho.txt +12 -0
- package/sprites/colorscripts/small/359-absol.txt +19 -0
- package/sprites/colorscripts/small/360-wynaut.txt +12 -0
- package/sprites/colorscripts/small/361-snorunt.txt +11 -0
- package/sprites/colorscripts/small/362-glalie.txt +15 -0
- package/sprites/colorscripts/small/363-spheal.txt +9 -0
- package/sprites/colorscripts/small/364-sealeo.txt +10 -0
- package/sprites/colorscripts/small/365-walrein.txt +15 -0
- package/sprites/colorscripts/small/366-clamperl.txt +11 -0
- package/sprites/colorscripts/small/367-huntail.txt +13 -0
- package/sprites/colorscripts/small/368-gorebyss.txt +12 -0
- package/sprites/colorscripts/small/369-relicanth.txt +14 -0
- package/sprites/colorscripts/small/370-luvdisc.txt +10 -0
- package/sprites/colorscripts/small/371-bagon.txt +11 -0
- package/sprites/colorscripts/small/372-shelgon.txt +12 -0
- package/sprites/colorscripts/small/373-salamence.txt +15 -0
- package/sprites/colorscripts/small/374-beldum.txt +10 -0
- package/sprites/colorscripts/small/375-metang.txt +12 -0
- package/sprites/colorscripts/small/376-metagross.txt +14 -0
- package/sprites/colorscripts/small/377-regirock.txt +17 -0
- package/sprites/colorscripts/small/378-regice.txt +17 -0
- package/sprites/colorscripts/small/379-registeel.txt +16 -0
- package/sprites/colorscripts/small/380-latias.txt +15 -0
- package/sprites/colorscripts/small/381-latios.txt +16 -0
- package/sprites/colorscripts/small/382-kyogre.txt +15 -0
- package/sprites/colorscripts/small/383-groudon.txt +19 -0
- package/sprites/colorscripts/small/384-rayquaza.txt +26 -0
- package/sprites/colorscripts/small/385-jirachi.txt +11 -0
- package/sprites/colorscripts/small/386-deoxys-normal.txt +12 -0
- package/sprites/colorscripts/small/387-turtwig.txt +12 -0
- package/sprites/colorscripts/small/388-grotle.txt +12 -0
- package/sprites/colorscripts/small/389-torterra.txt +13 -0
- package/sprites/colorscripts/small/390-chimchar.txt +12 -0
- package/sprites/colorscripts/small/391-monferno.txt +13 -0
- package/sprites/colorscripts/small/392-infernape.txt +13 -0
- package/sprites/colorscripts/small/393-piplup.txt +11 -0
- package/sprites/colorscripts/small/394-prinplup.txt +12 -0
- package/sprites/colorscripts/small/395-empoleon.txt +14 -0
- package/sprites/colorscripts/small/396-starly.txt +10 -0
- package/sprites/colorscripts/small/397-staravia.txt +13 -0
- package/sprites/colorscripts/small/398-staraptor.txt +14 -0
- package/sprites/colorscripts/small/399-bidoof.txt +9 -0
- package/sprites/colorscripts/small/400-bibarel.txt +12 -0
- package/sprites/colorscripts/small/401-kricketot.txt +12 -0
- package/sprites/colorscripts/small/402-kricketune.txt +13 -0
- package/sprites/colorscripts/small/403-shinx.txt +12 -0
- package/sprites/colorscripts/small/404-luxio.txt +12 -0
- package/sprites/colorscripts/small/405-luxray.txt +16 -0
- package/sprites/colorscripts/small/406-budew.txt +10 -0
- package/sprites/colorscripts/small/407-roserade.txt +16 -0
- package/sprites/colorscripts/small/408-cranidos.txt +11 -0
- package/sprites/colorscripts/small/409-rampardos.txt +13 -0
- package/sprites/colorscripts/small/410-shieldon.txt +11 -0
- package/sprites/colorscripts/small/411-bastiodon.txt +13 -0
- package/sprites/colorscripts/small/412-burmy.txt +12 -0
- package/sprites/colorscripts/small/413-wormadam-plant.txt +13 -0
- package/sprites/colorscripts/small/414-mothim.txt +11 -0
- package/sprites/colorscripts/small/415-combee.txt +10 -0
- package/sprites/colorscripts/small/416-vespiquen.txt +17 -0
- package/sprites/colorscripts/small/417-pachirisu.txt +13 -0
- package/sprites/colorscripts/small/418-buizel.txt +11 -0
- package/sprites/colorscripts/small/419-floatzel.txt +12 -0
- package/sprites/colorscripts/small/420-cherubi.txt +10 -0
- package/sprites/colorscripts/small/421-cherrim.txt +15 -0
- package/sprites/colorscripts/small/422-shellos.txt +11 -0
- package/sprites/colorscripts/small/423-gastrodon.txt +16 -0
- package/sprites/colorscripts/small/424-ambipom.txt +14 -0
- package/sprites/colorscripts/small/425-drifloon.txt +12 -0
- package/sprites/colorscripts/small/426-drifblim.txt +17 -0
- package/sprites/colorscripts/small/427-buneary.txt +12 -0
- package/sprites/colorscripts/small/428-lopunny.txt +17 -0
- package/sprites/colorscripts/small/429-mismagius.txt +15 -0
- package/sprites/colorscripts/small/430-honchkrow.txt +12 -0
- package/sprites/colorscripts/small/431-glameow.txt +12 -0
- package/sprites/colorscripts/small/432-purugly.txt +12 -0
- package/sprites/colorscripts/small/433-chingling.txt +11 -0
- package/sprites/colorscripts/small/434-stunky.txt +11 -0
- package/sprites/colorscripts/small/435-skuntank.txt +14 -0
- package/sprites/colorscripts/small/436-bronzor.txt +9 -0
- package/sprites/colorscripts/small/437-bronzong.txt +15 -0
- package/sprites/colorscripts/small/438-bonsly.txt +11 -0
- package/sprites/colorscripts/small/439-mime-jr..txt +12 -0
- package/sprites/colorscripts/small/440-happiny.txt +11 -0
- package/sprites/colorscripts/small/441-chatot.txt +12 -0
- package/sprites/colorscripts/small/442-spiritomb.txt +15 -0
- package/sprites/colorscripts/small/443-gible.txt +11 -0
- package/sprites/colorscripts/small/444-gabite.txt +12 -0
- package/sprites/colorscripts/small/445-garchomp.txt +17 -0
- package/sprites/colorscripts/small/446-munchlax.txt +11 -0
- package/sprites/colorscripts/small/447-riolu.txt +10 -0
- package/sprites/colorscripts/small/448-lucario.txt +19 -0
- package/sprites/colorscripts/small/449-hippopotas.txt +10 -0
- package/sprites/colorscripts/small/450-hippowdon.txt +13 -0
- package/sprites/colorscripts/small/451-skorupi.txt +12 -0
- package/sprites/colorscripts/small/452-drapion.txt +15 -0
- package/sprites/colorscripts/small/453-croagunk.txt +10 -0
- package/sprites/colorscripts/small/454-toxicroak.txt +16 -0
- package/sprites/colorscripts/small/455-carnivine.txt +13 -0
- package/sprites/colorscripts/small/456-finneon.txt +10 -0
- package/sprites/colorscripts/small/457-lumineon.txt +13 -0
- package/sprites/colorscripts/small/458-mantyke.txt +10 -0
- package/sprites/colorscripts/small/459-snover.txt +11 -0
- package/sprites/colorscripts/small/460-abomasnow.txt +16 -0
- package/sprites/colorscripts/small/461-weavile.txt +19 -0
- package/sprites/colorscripts/small/462-magnezone.txt +17 -0
- package/sprites/colorscripts/small/463-lickilicky.txt +17 -0
- package/sprites/colorscripts/small/464-rhyperior.txt +17 -0
- package/sprites/colorscripts/small/465-tangrowth.txt +15 -0
- package/sprites/colorscripts/small/466-electivire.txt +17 -0
- package/sprites/colorscripts/small/467-magmortar.txt +17 -0
- package/sprites/colorscripts/small/468-togekiss.txt +14 -0
- package/sprites/colorscripts/small/469-yanmega.txt +12 -0
- package/sprites/colorscripts/small/470-leafeon.txt +17 -0
- package/sprites/colorscripts/small/471-glaceon.txt +16 -0
- package/sprites/colorscripts/small/472-gliscor.txt +12 -0
- package/sprites/colorscripts/small/473-mamoswine.txt +15 -0
- package/sprites/colorscripts/small/474-porygon-z.txt +19 -0
- package/sprites/colorscripts/small/475-gallade.txt +18 -0
- package/sprites/colorscripts/small/476-probopass.txt +13 -0
- package/sprites/colorscripts/small/477-dusknoir.txt +18 -0
- package/sprites/colorscripts/small/478-froslass.txt +17 -0
- package/sprites/colorscripts/small/479-rotom.txt +15 -0
- package/sprites/colorscripts/small/480-uxie.txt +16 -0
- package/sprites/colorscripts/small/481-mesprit.txt +15 -0
- package/sprites/colorscripts/small/482-azelf.txt +16 -0
- package/sprites/colorscripts/small/483-dialga.txt +23 -0
- package/sprites/colorscripts/small/484-palkia.txt +20 -0
- package/sprites/colorscripts/small/485-heatran.txt +15 -0
- package/sprites/colorscripts/small/486-regigigas.txt +16 -0
- package/sprites/colorscripts/small/487-giratina-altered.txt +18 -0
- package/sprites/colorscripts/small/488-cresselia.txt +18 -0
- package/sprites/colorscripts/small/489-phione.txt +10 -0
- package/sprites/colorscripts/small/490-manaphy.txt +11 -0
- package/sprites/colorscripts/small/491-darkrai.txt +15 -0
- package/sprites/colorscripts/small/492-shaymin-land.txt +9 -0
- package/sprites/colorscripts/small/493-arceus.txt +15 -0
- package/sprites/colorscripts/small/494-victini.txt +16 -0
- package/sprites/colorscripts/small/495-snivy.txt +10 -0
- package/sprites/colorscripts/small/496-servine.txt +11 -0
- package/sprites/colorscripts/small/497-serperior.txt +12 -0
- package/sprites/colorscripts/small/498-tepig.txt +10 -0
- package/sprites/colorscripts/small/499-pignite.txt +12 -0
- package/sprites/colorscripts/small/500-emboar.txt +14 -0
- package/sprites/colorscripts/small/501-oshawott.txt +10 -0
- package/sprites/colorscripts/small/502-dewott.txt +13 -0
- package/sprites/colorscripts/small/503-samurott.txt +13 -0
- package/sprites/colorscripts/small/504-patrat.txt +10 -0
- package/sprites/colorscripts/small/505-watchog.txt +12 -0
- package/sprites/colorscripts/small/506-lillipup.txt +10 -0
- package/sprites/colorscripts/small/507-herdier.txt +12 -0
- package/sprites/colorscripts/small/508-stoutland.txt +16 -0
- package/sprites/colorscripts/small/509-purrloin.txt +12 -0
- package/sprites/colorscripts/small/510-liepard.txt +19 -0
- package/sprites/colorscripts/small/511-pansage.txt +12 -0
- package/sprites/colorscripts/small/512-simisage.txt +14 -0
- package/sprites/colorscripts/small/513-pansear.txt +11 -0
- package/sprites/colorscripts/small/514-simisear.txt +12 -0
- package/sprites/colorscripts/small/515-panpour.txt +12 -0
- package/sprites/colorscripts/small/516-simipour.txt +12 -0
- package/sprites/colorscripts/small/517-munna.txt +8 -0
- package/sprites/colorscripts/small/518-musharna.txt +15 -0
- package/sprites/colorscripts/small/519-pidove.txt +9 -0
- package/sprites/colorscripts/small/520-tranquill.txt +11 -0
- package/sprites/colorscripts/small/521-unfezant.txt +17 -0
- package/sprites/colorscripts/small/522-blitzle.txt +12 -0
- package/sprites/colorscripts/small/523-zebstrika.txt +13 -0
- package/sprites/colorscripts/small/524-roggenrola.txt +10 -0
- package/sprites/colorscripts/small/525-boldore.txt +12 -0
- package/sprites/colorscripts/small/526-gigalith.txt +18 -0
- package/sprites/colorscripts/small/527-woobat.txt +9 -0
- package/sprites/colorscripts/small/528-swoobat.txt +15 -0
- package/sprites/colorscripts/small/529-drilbur.txt +10 -0
- package/sprites/colorscripts/small/530-excadrill.txt +16 -0
- package/sprites/colorscripts/small/531-audino.txt +16 -0
- package/sprites/colorscripts/small/532-timburr.txt +11 -0
- package/sprites/colorscripts/small/533-gurdurr.txt +13 -0
- package/sprites/colorscripts/small/534-conkeldurr.txt +17 -0
- package/sprites/colorscripts/small/535-tympole.txt +8 -0
- package/sprites/colorscripts/small/536-palpitoad.txt +10 -0
- package/sprites/colorscripts/small/537-seismitoad.txt +15 -0
- package/sprites/colorscripts/small/538-throh.txt +17 -0
- package/sprites/colorscripts/small/539-sawk.txt +17 -0
- package/sprites/colorscripts/small/540-sewaddle.txt +10 -0
- package/sprites/colorscripts/small/541-swadloon.txt +9 -0
- package/sprites/colorscripts/small/542-leavanny.txt +12 -0
- package/sprites/colorscripts/small/543-venipede.txt +8 -0
- package/sprites/colorscripts/small/544-whirlipede.txt +9 -0
- package/sprites/colorscripts/small/545-scolipede.txt +19 -0
- package/sprites/colorscripts/small/546-cottonee.txt +8 -0
- package/sprites/colorscripts/small/547-whimsicott.txt +17 -0
- package/sprites/colorscripts/small/548-petilil.txt +10 -0
- package/sprites/colorscripts/small/549-lilligant.txt +18 -0
- package/sprites/colorscripts/small/550-basculin-red-striped.txt +13 -0
- package/sprites/colorscripts/small/551-sandile.txt +9 -0
- package/sprites/colorscripts/small/552-krokorok.txt +12 -0
- package/sprites/colorscripts/small/553-krookodile.txt +16 -0
- package/sprites/colorscripts/small/554-darumaka.txt +9 -0
- package/sprites/colorscripts/small/555-darmanitan-standard.txt +18 -0
- package/sprites/colorscripts/small/556-maractus.txt +18 -0
- package/sprites/colorscripts/small/557-dwebble.txt +10 -0
- package/sprites/colorscripts/small/558-crustle.txt +16 -0
- package/sprites/colorscripts/small/559-scraggy.txt +9 -0
- package/sprites/colorscripts/small/560-scrafty.txt +18 -0
- package/sprites/colorscripts/small/561-sigilyph.txt +20 -0
- package/sprites/colorscripts/small/562-yamask.txt +9 -0
- package/sprites/colorscripts/small/563-cofagrigus.txt +18 -0
- package/sprites/colorscripts/small/564-tirtouga.txt +9 -0
- package/sprites/colorscripts/small/565-carracosta.txt +17 -0
- package/sprites/colorscripts/small/566-archen.txt +9 -0
- package/sprites/colorscripts/small/567-archeops.txt +20 -0
- package/sprites/colorscripts/small/568-trubbish.txt +10 -0
- package/sprites/colorscripts/small/569-garbodor.txt +16 -0
- package/sprites/colorscripts/small/570-zorua.txt +10 -0
- package/sprites/colorscripts/small/571-zoroark.txt +18 -0
- package/sprites/colorscripts/small/572-minccino.txt +11 -0
- package/sprites/colorscripts/small/573-cinccino.txt +16 -0
- package/sprites/colorscripts/small/574-gothita.txt +10 -0
- package/sprites/colorscripts/small/575-gothorita.txt +11 -0
- package/sprites/colorscripts/small/576-gothitelle.txt +17 -0
- package/sprites/colorscripts/small/577-solosis.txt +8 -0
- package/sprites/colorscripts/small/578-duosion.txt +11 -0
- package/sprites/colorscripts/small/579-reuniclus.txt +15 -0
- package/sprites/colorscripts/small/580-ducklett.txt +11 -0
- package/sprites/colorscripts/small/581-swanna.txt +12 -0
- package/sprites/colorscripts/small/582-vanillite.txt +9 -0
- package/sprites/colorscripts/small/583-vanillish.txt +12 -0
- package/sprites/colorscripts/small/584-vanilluxe.txt +17 -0
- package/sprites/colorscripts/small/585-deerling.txt +12 -0
- package/sprites/colorscripts/small/586-sawsbuck.txt +13 -0
- package/sprites/colorscripts/small/587-emolga.txt +14 -0
- package/sprites/colorscripts/small/588-karrablast.txt +10 -0
- package/sprites/colorscripts/small/589-escavalier.txt +19 -0
- package/sprites/colorscripts/small/590-foongus.txt +10 -0
- package/sprites/colorscripts/small/591-amoonguss.txt +14 -0
- package/sprites/colorscripts/small/592-frillish-male.txt +11 -0
- package/sprites/colorscripts/small/593-jellicent-male.txt +17 -0
- package/sprites/colorscripts/small/594-alomomola.txt +12 -0
- package/sprites/colorscripts/small/595-joltik.txt +9 -0
- package/sprites/colorscripts/small/596-galvantula.txt +15 -0
- package/sprites/colorscripts/small/597-ferroseed.txt +9 -0
- package/sprites/colorscripts/small/598-ferrothorn.txt +14 -0
- package/sprites/colorscripts/small/599-klink.txt +9 -0
- package/sprites/colorscripts/small/600-klang.txt +11 -0
- package/sprites/colorscripts/small/601-klinklang.txt +17 -0
- package/sprites/colorscripts/small/602-tynamo.txt +7 -0
- package/sprites/colorscripts/small/603-eelektrik.txt +11 -0
- package/sprites/colorscripts/small/604-eelektross.txt +12 -0
- package/sprites/colorscripts/small/605-elgyem.txt +11 -0
- package/sprites/colorscripts/small/606-beheeyem.txt +18 -0
- package/sprites/colorscripts/small/607-litwick.txt +10 -0
- package/sprites/colorscripts/small/608-lampent.txt +10 -0
- package/sprites/colorscripts/small/609-chandelure.txt +18 -0
- package/sprites/colorscripts/small/610-axew.txt +11 -0
- package/sprites/colorscripts/small/611-fraxure.txt +12 -0
- package/sprites/colorscripts/small/612-haxorus.txt +18 -0
- package/sprites/colorscripts/small/613-cubchoo.txt +10 -0
- package/sprites/colorscripts/small/614-beartic.txt +17 -0
- package/sprites/colorscripts/small/615-cryogonal.txt +16 -0
- package/sprites/colorscripts/small/616-shelmet.txt +9 -0
- package/sprites/colorscripts/small/617-accelgor.txt +16 -0
- package/sprites/colorscripts/small/618-stunfisk.txt +12 -0
- package/sprites/colorscripts/small/619-mienfoo.txt +11 -0
- package/sprites/colorscripts/small/620-mienshao.txt +18 -0
- package/sprites/colorscripts/small/621-druddigon.txt +19 -0
- package/sprites/colorscripts/small/622-golett.txt +10 -0
- package/sprites/colorscripts/small/623-golurk.txt +16 -0
- package/sprites/colorscripts/small/624-pawniard.txt +11 -0
- package/sprites/colorscripts/small/625-bisharp.txt +17 -0
- package/sprites/colorscripts/small/626-bouffalant.txt +16 -0
- package/sprites/colorscripts/small/627-rufflet.txt +12 -0
- package/sprites/colorscripts/small/628-braviary.txt +20 -0
- package/sprites/colorscripts/small/629-vullaby.txt +11 -0
- package/sprites/colorscripts/small/630-mandibuzz.txt +18 -0
- package/sprites/colorscripts/small/631-heatmor.txt +14 -0
- package/sprites/colorscripts/small/632-durant.txt +12 -0
- package/sprites/colorscripts/small/633-deino.txt +11 -0
- package/sprites/colorscripts/small/634-zweilous.txt +12 -0
- package/sprites/colorscripts/small/635-hydreigon.txt +16 -0
- package/sprites/colorscripts/small/636-larvesta.txt +11 -0
- package/sprites/colorscripts/small/637-volcarona.txt +16 -0
- package/sprites/colorscripts/small/638-cobalion.txt +20 -0
- package/sprites/colorscripts/small/639-terrakion.txt +16 -0
- package/sprites/colorscripts/small/640-virizion.txt +19 -0
- package/sprites/colorscripts/small/641-tornadus-incarnate.txt +19 -0
- package/sprites/colorscripts/small/642-thundurus-incarnate.txt +20 -0
- package/sprites/colorscripts/small/643-reshiram.txt +22 -0
- package/sprites/colorscripts/small/644-zekrom.txt +21 -0
- package/sprites/colorscripts/small/645-landorus-incarnate.txt +19 -0
- package/sprites/colorscripts/small/646-kyurem.txt +17 -0
- package/sprites/colorscripts/small/647-keldeo-ordinary.txt +19 -0
- package/sprites/colorscripts/small/648-meloetta-aria.txt +12 -0
- package/sprites/colorscripts/small/649-genesect.txt +18 -0
- package/sprites/colorscripts/small/650-chespin.txt +12 -0
- package/sprites/colorscripts/small/651-quilladin.txt +12 -0
- package/sprites/colorscripts/small/652-chesnaught.txt +13 -0
- package/sprites/colorscripts/small/653-fennekin.txt +11 -0
- package/sprites/colorscripts/small/654-braixen.txt +12 -0
- package/sprites/colorscripts/small/655-delphox.txt +13 -0
- package/sprites/colorscripts/small/656-froakie.txt +11 -0
- package/sprites/colorscripts/small/657-frogadier.txt +12 -0
- package/sprites/colorscripts/small/658-greninja.txt +12 -0
- package/sprites/colorscripts/small/659-bunnelby.txt +14 -0
- package/sprites/colorscripts/small/660-diggersby.txt +16 -0
- package/sprites/colorscripts/small/661-fletchling.txt +9 -0
- package/sprites/colorscripts/small/662-fletchinder.txt +11 -0
- package/sprites/colorscripts/small/663-talonflame.txt +15 -0
- package/sprites/colorscripts/small/664-scatterbug.txt +12 -0
- package/sprites/colorscripts/small/665-spewpa.txt +10 -0
- package/sprites/colorscripts/small/666-vivillon.txt +14 -0
- package/sprites/colorscripts/small/667-litleo.txt +11 -0
- package/sprites/colorscripts/small/668-pyroar-male.txt +14 -0
- package/sprites/colorscripts/small/669-flabebe.txt +10 -0
- package/sprites/colorscripts/small/670-floette.txt +12 -0
- package/sprites/colorscripts/small/671-florges.txt +15 -0
- package/sprites/colorscripts/small/672-skiddo.txt +10 -0
- package/sprites/colorscripts/small/673-gogoat.txt +12 -0
- package/sprites/colorscripts/small/674-pancham.txt +11 -0
- package/sprites/colorscripts/small/675-pangoro.txt +18 -0
- package/sprites/colorscripts/small/676-furfrou.txt +15 -0
- package/sprites/colorscripts/small/677-espurr.txt +10 -0
- package/sprites/colorscripts/small/678-meowstic-male.txt +16 -0
- package/sprites/colorscripts/small/679-honedge.txt +13 -0
- package/sprites/colorscripts/small/680-doublade.txt +13 -0
- package/sprites/colorscripts/small/681-aegislash-shield.txt +19 -0
- package/sprites/colorscripts/small/682-spritzee.txt +9 -0
- package/sprites/colorscripts/small/683-aromatisse.txt +16 -0
- package/sprites/colorscripts/small/684-swirlix.txt +9 -0
- package/sprites/colorscripts/small/685-slurpuff.txt +16 -0
- package/sprites/colorscripts/small/686-inkay.txt +11 -0
- package/sprites/colorscripts/small/687-malamar.txt +18 -0
- package/sprites/colorscripts/small/688-binacle.txt +13 -0
- package/sprites/colorscripts/small/689-barbaracle.txt +17 -0
- package/sprites/colorscripts/small/690-skrelp.txt +12 -0
- package/sprites/colorscripts/small/691-dragalge.txt +17 -0
- package/sprites/colorscripts/small/692-clauncher.txt +10 -0
- package/sprites/colorscripts/small/693-clawitzer.txt +15 -0
- package/sprites/colorscripts/small/694-helioptile.txt +10 -0
- package/sprites/colorscripts/small/695-heliolisk.txt +16 -0
- package/sprites/colorscripts/small/696-tyrunt.txt +10 -0
- package/sprites/colorscripts/small/697-tyrantrum.txt +18 -0
- package/sprites/colorscripts/small/698-amaura.txt +13 -0
- package/sprites/colorscripts/small/699-aurorus.txt +19 -0
- package/sprites/colorscripts/small/700-sylveon.txt +17 -0
- package/sprites/colorscripts/small/701-hawlucha.txt +16 -0
- package/sprites/colorscripts/small/702-dedenne.txt +15 -0
- package/sprites/colorscripts/small/703-carbink.txt +8 -0
- package/sprites/colorscripts/small/704-goomy.txt +8 -0
- package/sprites/colorscripts/small/705-sliggoo.txt +12 -0
- package/sprites/colorscripts/small/706-goodra.txt +16 -0
- package/sprites/colorscripts/small/707-klefki.txt +17 -0
- package/sprites/colorscripts/small/708-phantump.txt +12 -0
- package/sprites/colorscripts/small/709-trevenant.txt +17 -0
- package/sprites/colorscripts/small/710-pumpkaboo-average.txt +11 -0
- package/sprites/colorscripts/small/711-gourgeist-average.txt +17 -0
- package/sprites/colorscripts/small/712-bergmite.txt +10 -0
- package/sprites/colorscripts/small/713-avalugg.txt +14 -0
- package/sprites/colorscripts/small/714-noibat.txt +11 -0
- package/sprites/colorscripts/small/715-noivern.txt +16 -0
- package/sprites/colorscripts/small/716-xerneas.txt +24 -0
- package/sprites/colorscripts/small/717-yveltal.txt +23 -0
- package/sprites/colorscripts/small/718-zygarde-50.txt +24 -0
- package/sprites/colorscripts/small/719-diancie.txt +21 -0
- package/sprites/colorscripts/small/720-hoopa.txt +11 -0
- package/sprites/colorscripts/small/721-volcanion.txt +22 -0
- package/sprites/colorscripts/small/722-rowlet.txt +10 -0
- package/sprites/colorscripts/small/723-dartrix.txt +12 -0
- package/sprites/colorscripts/small/724-decidueye.txt +20 -0
- package/sprites/colorscripts/small/725-litten.txt +12 -0
- package/sprites/colorscripts/small/726-torracat.txt +13 -0
- package/sprites/colorscripts/small/727-incineroar.txt +17 -0
- package/sprites/colorscripts/small/728-popplio.txt +11 -0
- package/sprites/colorscripts/small/729-brionne.txt +13 -0
- package/sprites/colorscripts/small/730-primarina.txt +19 -0
- package/sprites/colorscripts/small/731-pikipek.txt +12 -0
- package/sprites/colorscripts/small/732-trumbeak.txt +12 -0
- package/sprites/colorscripts/small/733-toucannon.txt +12 -0
- package/sprites/colorscripts/small/734-yungoos.txt +9 -0
- package/sprites/colorscripts/small/735-gumshoos.txt +13 -0
- package/sprites/colorscripts/small/736-grubbin.txt +8 -0
- package/sprites/colorscripts/small/737-charjabug.txt +11 -0
- package/sprites/colorscripts/small/738-vikavolt.txt +17 -0
- package/sprites/colorscripts/small/739-crabrawler.txt +12 -0
- package/sprites/colorscripts/small/740-crabominable.txt +13 -0
- package/sprites/colorscripts/small/741-oricorio-baile.txt +11 -0
- package/sprites/colorscripts/small/742-cutiefly.txt +11 -0
- package/sprites/colorscripts/small/743-ribombee.txt +15 -0
- package/sprites/colorscripts/small/744-rockruff.txt +12 -0
- package/sprites/colorscripts/small/745-lycanroc-midday.txt +15 -0
- package/sprites/colorscripts/small/746-wishiwashi-solo.txt +8 -0
- package/sprites/colorscripts/small/747-mareanie.txt +11 -0
- package/sprites/colorscripts/small/748-toxapex.txt +17 -0
- package/sprites/colorscripts/small/749-mudbray.txt +13 -0
- package/sprites/colorscripts/small/750-mudsdale.txt +16 -0
- package/sprites/colorscripts/small/751-dewpider.txt +11 -0
- package/sprites/colorscripts/small/752-araquanid.txt +14 -0
- package/sprites/colorscripts/small/753-fomantis.txt +11 -0
- package/sprites/colorscripts/small/754-lurantis.txt +18 -0
- package/sprites/colorscripts/small/755-morelull.txt +13 -0
- package/sprites/colorscripts/small/756-shiinotic.txt +15 -0
- package/sprites/colorscripts/small/757-salandit.txt +10 -0
- package/sprites/colorscripts/small/758-salazzle.txt +17 -0
- package/sprites/colorscripts/small/759-stufful.txt +11 -0
- package/sprites/colorscripts/small/760-bewear.txt +17 -0
- package/sprites/colorscripts/small/761-bounsweet.txt +11 -0
- package/sprites/colorscripts/small/762-steenee.txt +13 -0
- package/sprites/colorscripts/small/763-tsareena.txt +17 -0
- package/sprites/colorscripts/small/764-comfey.txt +18 -0
- package/sprites/colorscripts/small/765-oranguru.txt +16 -0
- package/sprites/colorscripts/small/766-passimian.txt +17 -0
- package/sprites/colorscripts/small/767-wimpod.txt +8 -0
- package/sprites/colorscripts/small/768-golisopod.txt +18 -0
- package/sprites/colorscripts/small/769-sandygast.txt +12 -0
- package/sprites/colorscripts/small/770-palossand.txt +17 -0
- package/sprites/colorscripts/small/771-pyukumuku.txt +11 -0
- package/sprites/colorscripts/small/772-type-null.txt +19 -0
- package/sprites/colorscripts/small/773-silvally.txt +22 -0
- package/sprites/colorscripts/small/774-minior-red-meteor.txt +10 -0
- package/sprites/colorscripts/small/775-komala.txt +11 -0
- package/sprites/colorscripts/small/776-turtonator.txt +17 -0
- package/sprites/colorscripts/small/777-togedemaru.txt +15 -0
- package/sprites/colorscripts/small/778-mimikyu-disguised.txt +16 -0
- package/sprites/colorscripts/small/779-bruxish.txt +11 -0
- package/sprites/colorscripts/small/780-drampa.txt +14 -0
- package/sprites/colorscripts/small/781-dhelmise.txt +19 -0
- package/sprites/colorscripts/small/782-jangmo-o.txt +13 -0
- package/sprites/colorscripts/small/783-hakamo-o.txt +15 -0
- package/sprites/colorscripts/small/784-kommo-o.txt +18 -0
- package/sprites/colorscripts/small/785-tapu-koko.txt +20 -0
- package/sprites/colorscripts/small/786-tapu-lele.txt +20 -0
- package/sprites/colorscripts/small/787-tapu-bulu.txt +20 -0
- package/sprites/colorscripts/small/788-tapu-fini.txt +20 -0
- package/sprites/colorscripts/small/789-cosmog.txt +11 -0
- package/sprites/colorscripts/small/790-cosmoem.txt +11 -0
- package/sprites/colorscripts/small/791-solgaleo.txt +21 -0
- package/sprites/colorscripts/small/792-lunala.txt +20 -0
- package/sprites/colorscripts/small/793-nihilego.txt +17 -0
- package/sprites/colorscripts/small/794-buzzwole.txt +21 -0
- package/sprites/colorscripts/small/795-pheromosa.txt +21 -0
- package/sprites/colorscripts/small/796-xurkitree.txt +19 -0
- package/sprites/colorscripts/small/797-celesteela.txt +21 -0
- package/sprites/colorscripts/small/798-kartana.txt +20 -0
- package/sprites/colorscripts/small/799-guzzlord.txt +20 -0
- package/sprites/colorscripts/small/800-necrozma.txt +19 -0
- package/sprites/colorscripts/small/801-magearna.txt +21 -0
- package/sprites/colorscripts/small/802-marshadow.txt +18 -0
- package/sprites/colorscripts/small/803-poipole.txt +14 -0
- package/sprites/colorscripts/small/804-naganadel.txt +22 -0
- package/sprites/colorscripts/small/805-stakataka.txt +20 -0
- package/sprites/colorscripts/small/806-blacephalon.txt +18 -0
- package/sprites/colorscripts/small/807-zeraora.txt +17 -0
- package/sprites/colorscripts/small/808-meltan.txt +10 -0
- package/sprites/colorscripts/small/809-melmetal.txt +16 -0
- package/sprites/colorscripts/small/810-grookey.txt +13 -0
- package/sprites/colorscripts/small/811-thwackey.txt +14 -0
- package/sprites/colorscripts/small/812-rillaboom.txt +18 -0
- package/sprites/colorscripts/small/813-scorbunny.txt +15 -0
- package/sprites/colorscripts/small/814-raboot.txt +16 -0
- package/sprites/colorscripts/small/815-cinderace.txt +22 -0
- package/sprites/colorscripts/small/816-sobble.txt +14 -0
- package/sprites/colorscripts/small/817-drizzile.txt +15 -0
- package/sprites/colorscripts/small/818-inteleon.txt +24 -0
- package/sprites/colorscripts/small/819-skwovet.txt +12 -0
- package/sprites/colorscripts/small/820-greedent.txt +17 -0
- package/sprites/colorscripts/small/821-rookidee.txt +9 -0
- package/sprites/colorscripts/small/822-corvisquire.txt +11 -0
- package/sprites/colorscripts/small/823-corviknight.txt +17 -0
- package/sprites/colorscripts/small/824-blipbug.txt +15 -0
- package/sprites/colorscripts/small/825-dottler.txt +12 -0
- package/sprites/colorscripts/small/826-orbeetle.txt +18 -0
- package/sprites/colorscripts/small/827-nickit.txt +12 -0
- package/sprites/colorscripts/small/828-thievul.txt +17 -0
- package/sprites/colorscripts/small/829-gossifleur.txt +10 -0
- package/sprites/colorscripts/small/830-eldegoss.txt +16 -0
- package/sprites/colorscripts/small/831-wooloo.txt +11 -0
- package/sprites/colorscripts/small/832-dubwool.txt +16 -0
- package/sprites/colorscripts/small/833-chewtle.txt +13 -0
- package/sprites/colorscripts/small/834-drednaw.txt +15 -0
- package/sprites/colorscripts/small/835-yamper.txt +11 -0
- package/sprites/colorscripts/small/836-boltund.txt +16 -0
- package/sprites/colorscripts/small/837-rolycoly.txt +10 -0
- package/sprites/colorscripts/small/838-carkol.txt +13 -0
- package/sprites/colorscripts/small/839-coalossal.txt +22 -0
- package/sprites/colorscripts/small/840-applin.txt +10 -0
- package/sprites/colorscripts/small/841-flapple.txt +17 -0
- package/sprites/colorscripts/small/842-appletun.txt +17 -0
- package/sprites/colorscripts/small/843-silicobra.txt +11 -0
- package/sprites/colorscripts/small/844-sandaconda.txt +14 -0
- package/sprites/colorscripts/small/845-cramorant.txt +16 -0
- package/sprites/colorscripts/small/846-arrokuda.txt +9 -0
- package/sprites/colorscripts/small/847-barraskewda.txt +11 -0
- package/sprites/colorscripts/small/848-toxel.txt +12 -0
- package/sprites/colorscripts/small/849-toxtricity-amped.txt +21 -0
- package/sprites/colorscripts/small/850-sizzlipede.txt +6 -0
- package/sprites/colorscripts/small/851-centiskorch.txt +16 -0
- package/sprites/colorscripts/small/852-clobbopus.txt +10 -0
- package/sprites/colorscripts/small/853-grapploct.txt +15 -0
- package/sprites/colorscripts/small/854-sinistea.txt +8 -0
- package/sprites/colorscripts/small/855-polteageist.txt +16 -0
- package/sprites/colorscripts/small/856-hatenna.txt +13 -0
- package/sprites/colorscripts/small/857-hattrem.txt +12 -0
- package/sprites/colorscripts/small/858-hatterene.txt +18 -0
- package/sprites/colorscripts/small/859-impidimp.txt +11 -0
- package/sprites/colorscripts/small/860-morgrem.txt +13 -0
- package/sprites/colorscripts/small/861-grimmsnarl.txt +18 -0
- package/sprites/colorscripts/small/862-obstagoon.txt +17 -0
- package/sprites/colorscripts/small/863-perrserker.txt +17 -0
- package/sprites/colorscripts/small/864-cursola.txt +17 -0
- package/sprites/colorscripts/small/865-sirfetchd.txt +27 -0
- package/sprites/colorscripts/small/866-mr.-rime.txt +18 -0
- package/sprites/colorscripts/small/867-runerigus.txt +16 -0
- package/sprites/colorscripts/small/868-milcery.txt +10 -0
- package/sprites/colorscripts/small/869-alcremie.txt +16 -0
- package/sprites/colorscripts/small/870-falinks.txt +13 -0
- package/sprites/colorscripts/small/871-pincurchin.txt +10 -0
- package/sprites/colorscripts/small/872-snom.txt +8 -0
- package/sprites/colorscripts/small/873-frosmoth.txt +17 -0
- package/sprites/colorscripts/small/874-stonjourner.txt +18 -0
- package/sprites/colorscripts/small/875-eiscue-ice.txt +19 -0
- package/sprites/colorscripts/small/876-indeedee-male.txt +15 -0
- package/sprites/colorscripts/small/877-morpeko-full-belly.txt +12 -0
- package/sprites/colorscripts/small/878-cufant.txt +12 -0
- package/sprites/colorscripts/small/879-copperajah.txt +16 -0
- package/sprites/colorscripts/small/880-dracozolt.txt +18 -0
- package/sprites/colorscripts/small/881-arctozolt.txt +19 -0
- package/sprites/colorscripts/small/882-dracovish.txt +17 -0
- package/sprites/colorscripts/small/883-arctovish.txt +15 -0
- package/sprites/colorscripts/small/884-duraludon.txt +19 -0
- package/sprites/colorscripts/small/885-dreepy.txt +10 -0
- package/sprites/colorscripts/small/886-drakloak.txt +13 -0
- package/sprites/colorscripts/small/887-dragapult.txt +21 -0
- package/sprites/colorscripts/small/888-zacian.txt +19 -0
- package/sprites/colorscripts/small/889-zamazenta.txt +20 -0
- package/sprites/colorscripts/small/890-eternatus.txt +26 -0
- package/sprites/colorscripts/small/891-kubfu.txt +12 -0
- package/sprites/colorscripts/small/892-urshifu-single-strike.txt +18 -0
- package/sprites/colorscripts/small/893-zarude.txt +16 -0
- package/sprites/colorscripts/small/894-regieleki.txt +16 -0
- package/sprites/colorscripts/small/895-regidrago.txt +20 -0
- package/sprites/colorscripts/small/896-glastrier.txt +20 -0
- package/sprites/colorscripts/small/897-spectrier.txt +18 -0
- package/sprites/colorscripts/small/898-calyrex.txt +19 -0
- package/sprites/colorscripts/small/899-wyrdeer.txt +23 -0
- package/sprites/colorscripts/small/900-kleavor.txt +20 -0
- package/sprites/colorscripts/small/901-ursaluna.txt +16 -0
- package/sprites/colorscripts/small/902-basculegion-male.txt +15 -0
- package/sprites/colorscripts/small/903-sneasler.txt +20 -0
- package/sprites/colorscripts/small/904-overqwil.txt +21 -0
- package/sprites/colorscripts/small/905-enamorus-incarnate.txt +21 -0
- package/src/engine/constants.ts +3 -3
- package/src/engine/encounters.ts +8 -5
- package/src/engine/evolution-data.ts +1193 -0
- package/src/engine/pokemon-data.ts +8659 -509
- package/src/engine/reactions.ts +156 -0
- package/src/engine/starter-pool.ts +134 -1
- package/src/engine/types.ts +3 -0
- package/src/gamification/achievements.ts +2 -2
- package/src/server/tools/catch.ts +4 -2
- package/src/server/tools/feed.ts +3 -0
- package/src/server/tools/help.ts +17 -1
- package/src/server/tools/pet.ts +3 -0
- package/src/server/tools/play.ts +5 -2
- package/src/server/tools/pokedex.ts +4 -4
- package/src/state/schemas.ts +2 -2
- package/statusline/buddy-status.sh +23 -11
package/dist/cli.mjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../cli/shared.ts", "../cli/install.ts", "../cli/uninstall.ts", "../cli/update.ts", "../src/engine/constants.ts", "../src/engine/types.ts", "../src/state/io.ts", "../node_modules/zod/v3/helpers/util.js", "../node_modules/zod/v3/ZodError.js", "../node_modules/zod/v3/locales/en.js", "../node_modules/zod/v3/errors.js", "../node_modules/zod/v3/helpers/parseUtil.js", "../node_modules/zod/v3/helpers/typeAliases.js", "../node_modules/zod/v3/helpers/errorUtil.js", "../node_modules/zod/v3/types.js", "../node_modules/zod/v3/external.js", "../node_modules/zod/index.js", "../src/state/schemas.ts", "../src/engine/pokemon-data.ts", "../src/state/state-manager.ts", "../src/engine/version-check.ts", "../cli/doctor.ts", "../cli/index.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Shared types and utilities for Claudemon CLI commands.\n * Centralizes Claude Code config interfaces and common helpers.\n */\n\nimport { resolve, dirname } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { existsSync, constants as fsConstants } from \"node:fs\";\nimport { readFile, writeFile, access as fsAccess } from \"node:fs/promises\";\n\n// \u2500\u2500 Config shape interfaces \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport interface McpServerEntry {\n command: string;\n args: string[];\n env: Record<string, string>;\n}\n\nexport interface ClaudeConfig {\n mcpServers?: Record<string, McpServerEntry>;\n [key: string]: unknown;\n}\n\nexport interface HookCommand {\n type: \"command\";\n command: string;\n timeout: number;\n}\n\nexport interface HookMatcher {\n matcher?: string;\n hooks: HookCommand[];\n}\n\nexport interface StatusLineConfig {\n type: \"command\";\n command: string;\n refreshInterval: number;\n}\n\nexport interface ClaudeSettings {\n hooks?: Record<string, HookMatcher[]>;\n statusLine?: StatusLineConfig;\n [key: string]: unknown;\n}\n\n// \u2500\u2500 Constants \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst HOME = process.env[\"HOME\"];\nif (!HOME) {\n console.error(\"Error: HOME environment variable is not set.\");\n process.exit(1);\n}\n\nexport const CLI_HOME = HOME;\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\n// Resolve project root \u2014 works from both src (cli/) and compiled (dist/cli/)\nlet projectDir = resolve(dirname(__dirname));\nif (projectDir.endsWith(\"/dist\") || projectDir.endsWith(\"\\\\dist\")) {\n projectDir = resolve(projectDir, \"..\");\n}\nexport const PROJECT_DIR = projectDir;\nexport const CLAUDE_DIR = `${HOME}/.claude`;\nexport const CLAUDE_CONFIG = `${HOME}/.claude.json`;\nexport const CLAUDE_SETTINGS = `${CLAUDE_DIR}/settings.json`;\nexport const STATE_DIR = `${HOME}/.claudemon`;\nexport const SKILL_SRC = `${PROJECT_DIR}/skills/buddy/SKILL.md`;\nexport const SKILL_DEST_DIR = `${CLAUDE_DIR}/skills/buddy`;\nexport const SKILL_DEST = `${SKILL_DEST_DIR}/SKILL.md`;\nexport const HOOK_SCRIPT = `${PROJECT_DIR}/hooks/post-tool-use.sh`;\nexport const STOP_HOOK_SCRIPT = `${PROJECT_DIR}/hooks/stop.sh`;\nexport const USER_PROMPT_HOOK_SCRIPT = `${PROJECT_DIR}/hooks/user-prompt-submit.sh`;\nexport const STATUSLINE_SCRIPT = `${PROJECT_DIR}/statusline/buddy-status.sh`;\nexport const SERVER_ENTRY_TS = `${PROJECT_DIR}/src/server/index.ts`;\nexport const SERVER_ENTRY_JS = `${PROJECT_DIR}/dist/server.mjs`;\n/** Legacy tsc output path \u2014 kept for backward compatibility */\nexport const SERVER_ENTRY_JS_LEGACY = `${PROJECT_DIR}/dist/src/server/index.js`;\n\n/** Find the best runtime \u2014 Bun (fastest) > bundled node > legacy node */\nexport function getRuntime(): { command: string; serverEntry: string } {\n // Prefer bun (fastest \u2014 native TS, ~120ms startup)\n const bunCandidates = [`${HOME}/.bun/bin/bun`, \"/usr/local/bin/bun\", \"/usr/bin/bun\"];\n for (const p of bunCandidates) {\n if (existsSync(p)) {\n return { command: p, serverEntry: SERVER_ENTRY_TS };\n }\n }\n\n // No bun \u2014 use bundled ESM with node (~600ms but works everywhere)\n if (existsSync(SERVER_ENTRY_JS)) {\n return { command: \"node\", serverEntry: SERVER_ENTRY_JS };\n }\n\n // Fall back to legacy tsc output\n if (existsSync(SERVER_ENTRY_JS_LEGACY)) {\n return { command: \"node\", serverEntry: SERVER_ENTRY_JS_LEGACY };\n }\n\n // Last resort: assume bun in PATH\n return { command: \"bun\", serverEntry: SERVER_ENTRY_TS };\n}\n\n// \u2500\u2500 Helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport function ok(msg: string): void {\n console.log(` \\u2713 ${msg}`);\n}\n\nexport function fail(msg: string): void {\n console.error(` \\u2717 ${msg}`);\n}\n\nexport function info(msg: string): void {\n console.log(` - ${msg}`);\n}\n\nexport async function readJson<T>(path: string): Promise<T | null> {\n try {\n await fsAccess(path, fsConstants.F_OK);\n const text = await readFile(path, \"utf-8\");\n return JSON.parse(text) as T;\n } catch {\n return null;\n }\n}\n\nexport async function writeJson(path: string, data: unknown): Promise<void> {\n await writeFile(path, JSON.stringify(data, null, 2) + \"\\n\", \"utf-8\");\n}\n", "/**\n * Claudemon CLI Installer.\n * Registers MCP server, hooks, and skill into Claude Code.\n *\n * Usage: bun run cli/install.ts\n */\n\nimport { mkdir, copyFile, chmod, access } from \"node:fs/promises\";\nimport { constants as fsConstants } from \"node:fs\";\nimport { spawnSync } from \"node:child_process\";\n\nimport type { ClaudeConfig, ClaudeSettings, HookCommand, HookMatcher } from \"./shared.js\";\nimport {\n ok,\n fail,\n readJson,\n writeJson,\n CLAUDE_DIR,\n CLAUDE_CONFIG,\n CLAUDE_SETTINGS,\n STATE_DIR,\n SKILL_SRC,\n SKILL_DEST_DIR,\n SKILL_DEST,\n HOOK_SCRIPT,\n STOP_HOOK_SCRIPT,\n USER_PROMPT_HOOK_SCRIPT,\n STATUSLINE_SCRIPT,\n getRuntime,\n} from \"./shared.js\";\n\n// \u2500\u2500 Step 1: Check Prerequisites \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function checkPrerequisites(): Promise<boolean> {\n let allGood = true;\n\n // Check runtime (bun preferred, node works too)\n try {\n const bunResult = spawnSync(\"bun\", [\"--version\"], { stdio: \"pipe\" });\n if (!bunResult.error) {\n ok(`Bun runtime: v${bunResult.stdout?.toString().trim()} (fast mode)`);\n } else {\n throw new Error(\"no bun\");\n }\n } catch {\n const nodeResult = spawnSync(\"node\", [\"--version\"], { stdio: \"pipe\" });\n if (!nodeResult.error) {\n ok(`Node.js runtime: ${nodeResult.stdout?.toString().trim()}`);\n } else {\n fail(\"No runtime found. Install Node.js 18+ from https://nodejs.org\");\n allGood = false;\n }\n }\n\n // Check Claude Code directory\n try {\n await access(CLAUDE_DIR, fsConstants.F_OK);\n ok(\"Claude Code directory: ~/.claude/\");\n } catch {\n fail(\"Claude Code not found. Install Claude Code first: https://claude.ai/download\");\n console.error(\" Expected directory: ~/.claude/\");\n allGood = false;\n }\n\n return allGood;\n}\n\n// \u2500\u2500 Step 2: Create State Directory \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function createStateDirectory(): Promise<void> {\n await mkdir(STATE_DIR, { recursive: true });\n ok(`State directory: ${STATE_DIR}/`);\n}\n\n// \u2500\u2500 Step 3: Register MCP Server \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function registerMcpServer(): Promise<void> {\n const existing = await readJson<ClaudeConfig>(CLAUDE_CONFIG);\n const config: ClaudeConfig = existing ?? {};\n\n if (!config.mcpServers) {\n config.mcpServers = {};\n }\n\n config.mcpServers[\"claudemon\"] = {\n command: getRuntime().command,\n args: [getRuntime().serverEntry],\n env: {},\n };\n\n await writeJson(CLAUDE_CONFIG, config);\n ok(\"MCP server: registered in ~/.claude.json\");\n}\n\n// \u2500\u2500 Step 4: Install Hooks \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function installHooks(): Promise<void> {\n const existing = await readJson<ClaudeSettings>(CLAUDE_SETTINGS);\n const settings: ClaudeSettings = existing ?? {};\n\n if (!settings.hooks) {\n settings.hooks = {};\n }\n\n const ourHook: HookCommand = {\n type: \"command\",\n command: HOOK_SCRIPT,\n timeout: 5000,\n };\n\n const ourMatcher: HookMatcher = {\n matcher: \"Bash|Write|Edit|Read|Grep|Glob\",\n hooks: [ourHook],\n };\n\n // Check if PostToolUse already has our matcher\n const postToolUse = settings.hooks[\"PostToolUse\"];\n if (postToolUse) {\n // Remove any existing claudemon matcher (idempotent reinstall)\n const filtered = postToolUse.filter(\n (m) => !m.hooks.some((h) => h.command.includes(\"post-tool-use.sh\")),\n );\n filtered.push(ourMatcher);\n settings.hooks[\"PostToolUse\"] = filtered;\n } else {\n settings.hooks[\"PostToolUse\"] = [ourMatcher];\n }\n\n // \u2500\u2500 Stop hook (extracts buddy comments from responses) \u2500\u2500\u2500\u2500\n const stopHook: HookCommand = {\n type: \"command\",\n command: STOP_HOOK_SCRIPT,\n timeout: 3000,\n };\n\n const stopEntry: HookMatcher = {\n hooks: [stopHook],\n };\n\n const stopHooks = settings.hooks[\"Stop\"];\n if (stopHooks) {\n const filtered = stopHooks.filter((m) => !m.hooks.some((h) => h.command.includes(\"stop.sh\")));\n filtered.push(stopEntry);\n settings.hooks[\"Stop\"] = filtered;\n } else {\n settings.hooks[\"Stop\"] = [stopEntry];\n }\n\n // \u2500\u2500 UserPromptSubmit hook (reacts to Pokemon name mentions) \u2500\n const userPromptHook: HookCommand = {\n type: \"command\",\n command: USER_PROMPT_HOOK_SCRIPT,\n timeout: 3000,\n };\n\n const userPromptEntry: HookMatcher = {\n hooks: [userPromptHook],\n };\n\n const userPromptHooks = settings.hooks[\"UserPromptSubmit\"];\n if (userPromptHooks) {\n const filtered = userPromptHooks.filter(\n (m) => !m.hooks.some((h) => h.command.includes(\"user-prompt-submit.sh\")),\n );\n filtered.push(userPromptEntry);\n settings.hooks[\"UserPromptSubmit\"] = filtered;\n } else {\n settings.hooks[\"UserPromptSubmit\"] = [userPromptEntry];\n }\n\n await writeJson(CLAUDE_SETTINGS, settings);\n ok(\"Hooks: PostToolUse, Stop, UserPromptSubmit configured in ~/.claude/settings.json\");\n}\n\n// \u2500\u2500 Step 5: Register Status Line \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function registerStatusLine(): Promise<void> {\n const existing = await readJson<ClaudeSettings>(CLAUDE_SETTINGS);\n const settings: ClaudeSettings = existing ?? {};\n\n // Merge status line config without overwriting other settings\n settings.statusLine = {\n type: \"command\",\n command: STATUSLINE_SCRIPT,\n refreshInterval: 1,\n };\n\n await writeJson(CLAUDE_SETTINGS, settings);\n ok(\"Status line: registered in ~/.claude/settings.json\");\n}\n\n// \u2500\u2500 Step 6: Install Skill \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function installSkill(): Promise<void> {\n await mkdir(SKILL_DEST_DIR, { recursive: true });\n await copyFile(SKILL_SRC, SKILL_DEST);\n ok(\"Skill: /buddy command installed to ~/.claude/skills/buddy/\");\n}\n\n// \u2500\u2500 Step 7: Set Script Permissions \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function setScriptPermissions(): Promise<void> {\n await chmod(HOOK_SCRIPT, 0o755);\n ok(\"Hook script: post-tool-use.sh set executable\");\n await chmod(STOP_HOOK_SCRIPT, 0o755);\n ok(\"Hook script: stop.sh set executable\");\n await chmod(USER_PROMPT_HOOK_SCRIPT, 0o755);\n ok(\"Hook script: user-prompt-submit.sh set executable\");\n await chmod(STATUSLINE_SCRIPT, 0o755);\n ok(\"Status line script: set executable\");\n}\n\n// \u2500\u2500 Main \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport async function install(): Promise<void> {\n console.log(\"\");\n console.log(\"Claudemon Installer\");\n console.log(\"===================\");\n console.log(\"\");\n console.log(\"Checking prerequisites...\");\n\n const prereqOk = await checkPrerequisites();\n if (!prereqOk) {\n console.log(\"\");\n fail(\"Prerequisites not met. Fix the issues above and try again.\");\n process.exit(1);\n }\n\n console.log(\"\");\n console.log(\"Installing...\");\n\n await createStateDirectory();\n await registerMcpServer();\n await installHooks();\n await registerStatusLine();\n await installSkill();\n await setScriptPermissions();\n\n console.log(\"\");\n console.log(\"\\u2713 Claudemon installed successfully!\");\n console.log(\"\");\n console.log(\"Next steps:\");\n console.log(\" 1. Start a new Claude Code session\");\n console.log(\" 2. Type /buddy starter to pick your first Pokemon!\");\n console.log(\"\");\n console.log(\"Run 'bun run cli/doctor.ts' to verify installation.\");\n console.log(\"\");\n}\n\n// Run if executed directly\ninstall().catch((err: unknown) => {\n const message = err instanceof Error ? err.message : String(err);\n console.error(`\\nInstallation failed: ${message}`);\n process.exit(1);\n});\n", "/**\n * Claudemon CLI Uninstaller.\n * Cleanly removes MCP server, hooks, and skill from Claude Code.\n *\n * Usage: bun run cli/uninstall.ts\n */\n\nimport { rm, access } from \"node:fs/promises\";\nimport { constants as fsConstants } from \"node:fs\";\n\nimport type { ClaudeConfig, ClaudeSettings } from \"./shared.js\";\nimport {\n ok,\n info,\n readJson,\n writeJson,\n CLAUDE_CONFIG,\n CLAUDE_SETTINGS,\n STATE_DIR,\n SKILL_DEST_DIR,\n} from \"./shared.js\";\n\n// \u2500\u2500 Step 1: Remove MCP Server Registration \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function removeMcpServer(): Promise<void> {\n const config = await readJson<ClaudeConfig>(CLAUDE_CONFIG);\n if (!config) {\n info(\"MCP server: ~/.claude.json not found (nothing to remove)\");\n return;\n }\n\n if (!config.mcpServers || !config.mcpServers[\"claudemon\"]) {\n info(\"MCP server: not registered (nothing to remove)\");\n return;\n }\n\n delete config.mcpServers[\"claudemon\"];\n\n // Clean up empty mcpServers object\n if (Object.keys(config.mcpServers).length === 0) {\n delete config.mcpServers;\n }\n\n await writeJson(CLAUDE_CONFIG, config);\n ok(\"MCP server: removed from ~/.claude.json\");\n}\n\n// \u2500\u2500 Step 2: Remove Hooks \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function removeHooks(): Promise<void> {\n const settings = await readJson<ClaudeSettings>(CLAUDE_SETTINGS);\n if (!settings) {\n info(\"Hooks: ~/.claude/settings.json not found (nothing to remove)\");\n return;\n }\n\n if (!settings.hooks) {\n info(\"Hooks: no hooks found (nothing to remove)\");\n return;\n }\n\n // Remove PostToolUse hook\n if (settings.hooks[\"PostToolUse\"]) {\n const filtered = settings.hooks[\"PostToolUse\"].filter(\n (m) => !m.hooks.some((h) => h.command.includes(\"post-tool-use.sh\")),\n );\n if (filtered.length === 0) {\n delete settings.hooks[\"PostToolUse\"];\n } else {\n settings.hooks[\"PostToolUse\"] = filtered;\n }\n }\n\n // Remove Stop hook\n if (settings.hooks[\"Stop\"]) {\n const filtered = settings.hooks[\"Stop\"].filter(\n (m) => !m.hooks.some((h) => h.command.includes(\"stop.sh\")),\n );\n if (filtered.length === 0) {\n delete settings.hooks[\"Stop\"];\n } else {\n settings.hooks[\"Stop\"] = filtered;\n }\n }\n\n // Remove UserPromptSubmit hook\n if (settings.hooks[\"UserPromptSubmit\"]) {\n const filtered = settings.hooks[\"UserPromptSubmit\"].filter(\n (m) => !m.hooks.some((h) => h.command.includes(\"user-prompt-submit.sh\")),\n );\n if (filtered.length === 0) {\n delete settings.hooks[\"UserPromptSubmit\"];\n } else {\n settings.hooks[\"UserPromptSubmit\"] = filtered;\n }\n }\n\n // Clean up empty hooks object\n if (Object.keys(settings.hooks).length === 0) {\n delete settings.hooks;\n }\n\n await writeJson(CLAUDE_SETTINGS, settings);\n ok(\"Hooks: removed PostToolUse, Stop, UserPromptSubmit entries from ~/.claude/settings.json\");\n}\n\n// \u2500\u2500 Step 3: Remove Skill \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function removeSkill(): Promise<void> {\n try {\n await access(`${SKILL_DEST_DIR}/SKILL.md`, fsConstants.F_OK);\n } catch {\n info(\"Skill: ~/.claude/skills/buddy/ not found (nothing to remove)\");\n return;\n }\n\n await rm(SKILL_DEST_DIR, { recursive: true, force: true });\n ok(\"Skill: removed ~/.claude/skills/buddy/\");\n}\n\n// \u2500\u2500 Step 4: Preserve State Data \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function preserveStateData(): Promise<void> {\n try {\n await access(`${STATE_DIR}/state.json`, fsConstants.F_OK);\n info(`Your Pokemon data is preserved at ${STATE_DIR}/. Delete manually to remove.`);\n } catch {\n info(`State directory: ${STATE_DIR}/ (kept, no state file found)`);\n }\n}\n\n// \u2500\u2500 Main \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport async function uninstall(): Promise<void> {\n console.log(\"\");\n console.log(\"Claudemon Uninstaller\");\n console.log(\"=====================\");\n console.log(\"\");\n console.log(\"Removing Claudemon from Claude Code...\");\n console.log(\"\");\n\n await removeMcpServer();\n await removeHooks();\n await removeSkill();\n await preserveStateData();\n\n console.log(\"\");\n console.log(\"\\u2713 Claudemon uninstalled successfully.\");\n console.log(\"\");\n}\n\n// Run if executed directly\nuninstall().catch((err: unknown) => {\n const message = err instanceof Error ? err.message : String(err);\n console.error(`\\nUninstall failed: ${message}`);\n process.exit(1);\n});\n", "/**\n * Claudemon CLI Updater.\n * Re-registers MCP server, hooks, skill, and status line without\n * touching the user's saved state/Pokemon data.\n *\n * Effectively: uninstall registrations + reinstall registrations.\n * State directory (~/.claudemon/) is preserved completely.\n *\n * Usage: bun run cli/update.ts\n */\n\nimport { mkdir, copyFile, chmod, access } from \"node:fs/promises\";\nimport { constants as fsConstants, existsSync, readdirSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { spawnSync } from \"node:child_process\";\n\nimport type { ClaudeConfig, ClaudeSettings, HookCommand, HookMatcher } from \"./shared.js\";\nimport {\n ok,\n fail,\n info,\n readJson,\n writeJson,\n CLAUDE_DIR,\n CLAUDE_CONFIG,\n CLAUDE_SETTINGS,\n STATE_DIR,\n SKILL_SRC,\n SKILL_DEST_DIR,\n SKILL_DEST,\n HOOK_SCRIPT,\n STOP_HOOK_SCRIPT,\n USER_PROMPT_HOOK_SCRIPT,\n STATUSLINE_SCRIPT,\n PROJECT_DIR,\n getRuntime,\n} from \"./shared.js\";\n\n// \u2500\u2500 Step 1: Check Prerequisites \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function checkPrerequisites(): Promise<boolean> {\n let allGood = true;\n\n try {\n const bunResult = spawnSync(\"bun\", [\"--version\"], { stdio: \"pipe\" });\n if (!bunResult.error) {\n ok(`Bun runtime: v${bunResult.stdout?.toString().trim()} (fast mode)`);\n } else {\n throw new Error(\"no bun\");\n }\n } catch {\n const nodeResult = spawnSync(\"node\", [\"--version\"], { stdio: \"pipe\" });\n if (!nodeResult.error) {\n ok(`Node.js runtime: ${nodeResult.stdout?.toString().trim()}`);\n } else {\n fail(\"No runtime found. Install Node.js 18+\");\n allGood = false;\n }\n }\n\n try {\n await access(CLAUDE_DIR, fsConstants.F_OK);\n ok(\"Claude Code directory: ~/.claude/\");\n } catch {\n fail(\"Claude Code not found at ~/.claude/\");\n allGood = false;\n }\n\n return allGood;\n}\n\n// \u2500\u2500 Step 2: Remove Old Registrations \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function removeOldMcpServer(): Promise<void> {\n const config = await readJson<ClaudeConfig>(CLAUDE_CONFIG);\n if (!config?.mcpServers?.[\"claudemon\"]) {\n info(\"MCP server: not previously registered\");\n return;\n }\n delete config.mcpServers[\"claudemon\"];\n if (Object.keys(config.mcpServers).length === 0) {\n delete config.mcpServers;\n }\n await writeJson(CLAUDE_CONFIG, config);\n ok(\"MCP server: removed old registration\");\n}\n\nasync function removeOldHooks(): Promise<void> {\n const settings = await readJson<ClaudeSettings>(CLAUDE_SETTINGS);\n if (!settings?.hooks) {\n info(\"Hooks: none found\");\n return;\n }\n\n const hookTypes = [\"PostToolUse\", \"Stop\", \"UserPromptSubmit\"] as const;\n const patterns = [\"post-tool-use.sh\", \"stop.sh\", \"user-prompt-submit.sh\"] as const;\n\n for (let i = 0; i < hookTypes.length; i++) {\n const hookType = hookTypes[i]!;\n const pattern = patterns[i]!;\n const entries = settings.hooks[hookType];\n if (entries) {\n const filtered = entries.filter((m) => !m.hooks.some((h) => h.command.includes(pattern)));\n if (filtered.length === 0) {\n delete settings.hooks[hookType];\n } else {\n settings.hooks[hookType] = filtered;\n }\n }\n }\n\n if (Object.keys(settings.hooks).length === 0) {\n delete settings.hooks;\n }\n\n await writeJson(CLAUDE_SETTINGS, settings);\n ok(\"Hooks: removed old registrations\");\n}\n\n// \u2500\u2500 Step 3: Re-register Everything \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function registerMcpServer(): Promise<void> {\n const existing = await readJson<ClaudeConfig>(CLAUDE_CONFIG);\n const config: ClaudeConfig = existing ?? {};\n\n if (!config.mcpServers) {\n config.mcpServers = {};\n }\n\n config.mcpServers[\"claudemon\"] = {\n command: getRuntime().command,\n args: [getRuntime().serverEntry],\n env: {},\n };\n\n await writeJson(CLAUDE_CONFIG, config);\n ok(\"MCP server: registered in ~/.claude.json\");\n}\n\nasync function installHooks(): Promise<void> {\n const existing = await readJson<ClaudeSettings>(CLAUDE_SETTINGS);\n const settings: ClaudeSettings = existing ?? {};\n\n if (!settings.hooks) {\n settings.hooks = {};\n }\n\n // PostToolUse hook\n const ourHook: HookCommand = {\n type: \"command\",\n command: HOOK_SCRIPT,\n timeout: 5000,\n };\n const ourMatcher: HookMatcher = {\n matcher: \"Bash|Write|Edit|Read|Grep|Glob\",\n hooks: [ourHook],\n };\n const postToolUse = settings.hooks[\"PostToolUse\"];\n if (postToolUse) {\n const filtered = postToolUse.filter(\n (m) => !m.hooks.some((h) => h.command.includes(\"post-tool-use.sh\")),\n );\n filtered.push(ourMatcher);\n settings.hooks[\"PostToolUse\"] = filtered;\n } else {\n settings.hooks[\"PostToolUse\"] = [ourMatcher];\n }\n\n // Stop hook\n const stopHook: HookCommand = { type: \"command\", command: STOP_HOOK_SCRIPT, timeout: 3000 };\n const stopEntry: HookMatcher = { hooks: [stopHook] };\n const stopHooks = settings.hooks[\"Stop\"];\n if (stopHooks) {\n const filtered = stopHooks.filter((m) => !m.hooks.some((h) => h.command.includes(\"stop.sh\")));\n filtered.push(stopEntry);\n settings.hooks[\"Stop\"] = filtered;\n } else {\n settings.hooks[\"Stop\"] = [stopEntry];\n }\n\n // UserPromptSubmit hook\n const userPromptHook: HookCommand = {\n type: \"command\",\n command: USER_PROMPT_HOOK_SCRIPT,\n timeout: 3000,\n };\n const userPromptEntry: HookMatcher = { hooks: [userPromptHook] };\n const userPromptHooks = settings.hooks[\"UserPromptSubmit\"];\n if (userPromptHooks) {\n const filtered = userPromptHooks.filter(\n (m) => !m.hooks.some((h) => h.command.includes(\"user-prompt-submit.sh\")),\n );\n filtered.push(userPromptEntry);\n settings.hooks[\"UserPromptSubmit\"] = filtered;\n } else {\n settings.hooks[\"UserPromptSubmit\"] = [userPromptEntry];\n }\n\n await writeJson(CLAUDE_SETTINGS, settings);\n ok(\"Hooks: PostToolUse, Stop, UserPromptSubmit configured\");\n}\n\nasync function registerStatusLine(): Promise<void> {\n const existing = await readJson<ClaudeSettings>(CLAUDE_SETTINGS);\n const settings: ClaudeSettings = existing ?? {};\n\n settings.statusLine = {\n type: \"command\",\n command: STATUSLINE_SCRIPT,\n refreshInterval: 1,\n };\n\n await writeJson(CLAUDE_SETTINGS, settings);\n ok(\"Status line: registered\");\n}\n\nasync function installSkill(): Promise<void> {\n await mkdir(SKILL_DEST_DIR, { recursive: true });\n await copyFile(SKILL_SRC, SKILL_DEST);\n ok(\"Skill: /buddy command updated\");\n}\n\nasync function setScriptPermissions(): Promise<void> {\n await chmod(HOOK_SCRIPT, 0o755);\n await chmod(STOP_HOOK_SCRIPT, 0o755);\n await chmod(USER_PROMPT_HOOK_SCRIPT, 0o755);\n await chmod(STATUSLINE_SCRIPT, 0o755);\n ok(\"Scripts: set executable\");\n}\n\n// \u2500\u2500 Step 4: Check for Missing Colorscripts \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function checkColorscripts(): Promise<{ missing: number; total: number }> {\n const smallDir = join(PROJECT_DIR, \"sprites\", \"colorscripts\", \"small\");\n let missing = 0;\n const total = 151;\n\n for (let id = 1; id <= total; id++) {\n // We don't know the name mapping without importing the data module,\n // so check if any file starting with the ID exists\n const prefix = `${id}-`;\n const dirExists = existsSync(smallDir);\n if (!dirExists) {\n missing = total;\n break;\n }\n\n // Check for files matching the pattern\n const files = readdirSync(smallDir).filter((f) => f.startsWith(prefix) && f.endsWith(\".txt\"));\n if (files.length === 0) {\n missing++;\n }\n }\n\n return { missing, total };\n}\n\n// \u2500\u2500 Step 5: State Preservation Check \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function checkStatePreserved(): Promise<void> {\n try {\n await access(`${STATE_DIR}/state.json`, fsConstants.F_OK);\n ok(\"State data: preserved (not modified)\");\n } catch {\n info(\"State data: no save file found (run /buddy starter to begin)\");\n }\n}\n\n// \u2500\u2500 Main \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport async function update(): Promise<void> {\n console.log(\"\");\n console.log(\"Claudemon Updater\");\n console.log(\"=================\");\n console.log(\"\");\n console.log(\"Checking prerequisites...\");\n\n const prereqOk = await checkPrerequisites();\n if (!prereqOk) {\n console.log(\"\");\n fail(\"Prerequisites not met. Fix the issues above and try again.\");\n process.exit(1);\n }\n\n console.log(\"\");\n console.log(\"Removing old registrations...\");\n await removeOldMcpServer();\n await removeOldHooks();\n\n console.log(\"\");\n console.log(\"Re-registering...\");\n await registerMcpServer();\n await installHooks();\n await registerStatusLine();\n await installSkill();\n await setScriptPermissions();\n\n console.log(\"\");\n console.log(\"Checking sprites...\");\n const { missing, total } = await checkColorscripts();\n if (missing === 0) {\n ok(`Colorscripts: all ${total} sprites present`);\n } else if (missing === total) {\n fail(`Colorscripts: sprite directory not found. Run: bun run download-sprites`);\n } else {\n info(`Colorscripts: ${missing}/${total} missing. Run: bun run download-sprites`);\n }\n\n console.log(\"\");\n await checkStatePreserved();\n\n console.log(\"\");\n console.log(\"\\u2713 Claudemon updated successfully!\");\n console.log(\"\");\n console.log(\"Start a new Claude Code session to use the updated version.\");\n console.log(\"\");\n}\n\n// Run if executed directly\nupdate().catch((err: unknown) => {\n const message = err instanceof Error ? err.message : String(err);\n console.error(`\\nUpdate failed: ${message}`);\n process.exit(1);\n});\n", "/**\n * Shared constants for Claudemon.\n * All magic numbers and configuration values live here.\n */\n\nimport type { XpEventType, CodingStat, TrainerTitle, Badge } from \"./types.js\";\n\n// \u2500\u2500 Game Limits \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const MAX_PARTY_SIZE = 6;\nexport const MAX_LEVEL = 100;\nexport const STARTER_LEVEL = 5;\nexport const MAX_HAPPINESS = 255;\nexport const TOTAL_POKEMON = 151;\n\n// \u2500\u2500 XP Awards per Event \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const XP_AWARDS: Record<\n XpEventType,\n { xp: number; stat: CodingStat | null; boost: number }\n> = {\n commit: { xp: 15, stat: \"velocity\", boost: 1 },\n test_pass: { xp: 12, stat: \"stability\", boost: 1 },\n test_written: { xp: 10, stat: \"stability\", boost: 1 },\n build_success: { xp: 10, stat: \"stability\", boost: 1 },\n bug_fix: { xp: 8, stat: \"debugging\", boost: 1 },\n lint_fix: { xp: 6, stat: \"debugging\", boost: 1 },\n file_create: { xp: 5, stat: \"velocity\", boost: 0 },\n file_edit: { xp: 3, stat: \"velocity\", boost: 0 },\n search: { xp: 1, stat: \"wisdom\", boost: 0 },\n large_refactor: { xp: 20, stat: \"wisdom\", boost: 2 },\n session_start: { xp: 5, stat: \"stamina\", boost: 1 },\n daily_streak: { xp: 15, stat: \"stamina\", boost: 1 },\n pet: { xp: 2, stat: null, boost: 0 },\n};\n\n// \u2500\u2500 Stat Display Names \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const STAT_DISPLAY_NAMES: Record<CodingStat, string> = {\n stamina: \"STAMINA\",\n debugging: \"DEBUGGING\",\n stability: \"STABILITY\",\n velocity: \"VELOCITY\",\n wisdom: \"WISDOM\",\n};\n\n// \u2500\u2500 Encounter Rate \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** XP thresholds for encounter triggers by speed setting */\nexport const ENCOUNTER_THRESHOLDS = {\n fast: 100,\n normal: 250,\n slow: 500,\n} as const;\n\nexport type EncounterSpeed = keyof typeof ENCOUNTER_THRESHOLDS;\n\n/** Default encounter speed */\nexport const DEFAULT_ENCOUNTER_SPEED: EncounterSpeed = \"normal\";\n\n// \u2500\u2500 Reaction Cooldown \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const DEFAULT_REACTION_COOLDOWN_MS = 30_000;\n\n// \u2500\u2500 Trainer Titles (by highest Pokemon level) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const TRAINER_TITLES: readonly TrainerTitle[] = [\n { minLevel: 1, title: \"Bug Catcher\" },\n { minLevel: 6, title: \"Youngster\" },\n { minLevel: 11, title: \"Hiker\" },\n { minLevel: 21, title: \"Ace Trainer\" },\n { minLevel: 31, title: \"Cooltrainer\" },\n { minLevel: 41, title: \"Veteran\" },\n { minLevel: 51, title: \"Elite Four\" },\n { minLevel: 61, title: \"Champion\" },\n { minLevel: 76, title: \"Pokemon Master\" },\n { minLevel: 91, title: \"Professor\" },\n];\n\n// \u2500\u2500 Badge Definitions \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const BADGES: readonly Badge[] = [\n {\n type: \"blaze\",\n name: \"Blaze Badge\",\n description: \"Fix 50 bugs \u2014 unlocks Fire Stone evolutions\",\n condition: { type: \"counter\", counter: \"bugs_fixed\", threshold: 50 },\n },\n {\n type: \"flow\",\n name: \"Flow Badge\",\n description: \"Pass 100 tests \u2014 unlocks Water Stone evolutions\",\n condition: { type: \"counter\", counter: \"tests_passed\", threshold: 100 },\n },\n {\n type: \"spark\",\n name: \"Spark Badge\",\n description: \"Make 200 commits \u2014 unlocks Thunder Stone evolutions\",\n condition: { type: \"counter\", counter: \"commits\", threshold: 200 },\n },\n {\n type: \"lunar\",\n name: \"Lunar Badge\",\n description: \"Code for 30 days (weekends off OK) \u2014 unlocks Moon Stone evolutions\",\n condition: { type: \"streak\", minDays: 30 },\n },\n {\n type: \"growth\",\n name: \"Growth Badge\",\n description: \"Edit 500 files \u2014 unlocks Leaf Stone evolutions\",\n condition: { type: \"counter\", counter: \"files_edited\", threshold: 500 },\n },\n];\n\n// \u2500\u2500 State File Paths \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** Resolved at call time so tests can override HOME */\nexport function getStateDir(): string {\n return `${process.env[\"HOME\"] ?? \"~\"}/.claudemon`;\n}\nexport function getStateFile(): string {\n return `${getStateDir()}/state.json`;\n}\nexport function getStatusFile(): string {\n return `${getStateDir()}/status.json`;\n}\n\n// \u2500\u2500 Terminal Bell \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const BELL = \"\\x07\";\n", "/**\n * Core type definitions for Claudemon.\n * Single source of truth for all shared interfaces and types.\n */\n\n// \u2500\u2500 Mood Types \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const MOOD_TYPES = [\"happy\", \"worried\", \"sleepy\", \"energetic\", \"proud\", \"neutral\"] as const;\nexport type MoodType = (typeof MOOD_TYPES)[number];\n\n// \u2500\u2500 Pokemon Types \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const POKEMON_TYPES = [\n \"Normal\",\n \"Fire\",\n \"Water\",\n \"Electric\",\n \"Grass\",\n \"Ice\",\n \"Fighting\",\n \"Poison\",\n \"Ground\",\n \"Flying\",\n \"Psychic\",\n \"Bug\",\n \"Rock\",\n \"Ghost\",\n \"Dragon\",\n] as const;\n\nexport type PokemonType = (typeof POKEMON_TYPES)[number];\n\nexport const EXP_GROUPS = [\"fast\", \"medium_fast\", \"medium_slow\", \"slow\"] as const;\n\nexport type ExpGroup = (typeof EXP_GROUPS)[number];\n\nexport const RARITY_TIERS = [\"common\", \"uncommon\", \"rare\", \"legendary\", \"mythical\"] as const;\n\nexport type RarityTier = (typeof RARITY_TIERS)[number];\n\n// \u2500\u2500 Base Stats (Gen 1 layout) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport interface BaseStats {\n readonly hp: number;\n readonly attack: number;\n readonly defense: number;\n readonly speed: number;\n readonly special: number;\n}\n\n// \u2500\u2500 Pokemon Species (static, immutable Pokedex entry) \u2500\u2500\u2500\u2500\u2500\u2500\n\nexport interface Pokemon {\n readonly id: number;\n readonly name: string;\n readonly types: readonly [PokemonType, PokemonType?];\n readonly baseStats: BaseStats;\n readonly expGroup: ExpGroup;\n readonly evolutionChainId: number;\n readonly rarity: RarityTier;\n readonly catchRate: number; // 1-255, higher = easier to catch\n readonly description: string; // Short flavor text\n}\n\n// \u2500\u2500 Evolution \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport type EvolutionMethod =\n | { readonly type: \"level\"; readonly level: number }\n | { readonly type: \"badge\"; readonly badge: BadgeType }\n | { readonly type: \"collaboration\" }\n | { readonly type: \"stat\"; readonly stat: CodingStat; readonly minValue: number };\n\nexport interface EvolutionLink {\n readonly from: number; // Pokemon ID\n readonly to: number; // Pokemon ID\n readonly method: EvolutionMethod;\n}\n\nexport interface EvolutionChain {\n readonly id: number;\n readonly links: readonly EvolutionLink[];\n}\n\n// \u2500\u2500 Coding Stats (mapped from Gen 1 stats) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const CODING_STATS = [\"stamina\", \"debugging\", \"stability\", \"velocity\", \"wisdom\"] as const;\n\nexport type CodingStat = (typeof CODING_STATS)[number];\n\nexport interface CodingStats {\n stamina: number; // HP \u2192 session endurance, streaks\n debugging: number; // Attack \u2192 bug-finding, error fixing\n stability: number; // Defense \u2192 test coverage, build reliability\n velocity: number; // Speed \u2192 throughput, commits, edits\n wisdom: number; // Special \u2192 deep problem-solving, refactors\n}\n\n/** Maps Gen 1 base stats to coding stats for initial values */\nexport const BASE_STAT_TO_CODING: Record<keyof BaseStats, CodingStat> = {\n hp: \"stamina\",\n attack: \"debugging\",\n defense: \"stability\",\n speed: \"velocity\",\n special: \"wisdom\",\n} as const;\n\n// \u2500\u2500 Badges (replace evolution stones) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const BADGE_TYPES = [\n \"blaze\", // Fire Stone \u2192 50 bugs fixed\n \"flow\", // Water Stone \u2192 100 tests passed\n \"spark\", // Thunder Stone \u2192 200 commits\n \"lunar\", // Moon Stone \u2192 30-day streak\n \"growth\", // Leaf Stone \u2192 500 files edited\n] as const;\n\nexport type BadgeType = (typeof BADGE_TYPES)[number];\n\nexport interface Badge {\n readonly type: BadgeType;\n readonly name: string;\n readonly description: string;\n readonly condition: BadgeCondition;\n}\n\nexport type BadgeCondition =\n | { readonly type: \"counter\"; readonly counter: EventCounterKey; readonly threshold: number }\n | { readonly type: \"streak\"; readonly minDays: number };\n\n// \u2500\u2500 Owned Pokemon (user's individual Pokemon instance) \u2500\u2500\u2500\u2500\u2500\u2500\n\nexport interface OwnedPokemon {\n readonly id: string; // Unique instance ID (UUID)\n pokemonId: number;\n nickname: string | null;\n level: number;\n currentXp: number;\n totalXp: number;\n codingStats: CodingStats;\n happiness: number; // 0-255\n caughtAt: string; // ISO date\n evolvedAt: string | null;\n isActive: boolean;\n personality: string | null;\n shiny: boolean; // Future: always false in v1\n isStarter: boolean;\n}\n\n// \u2500\u2500 Player State (single source of truth) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport interface PlayerState {\n readonly trainerId: string;\n trainerName: string;\n party: OwnedPokemon[]; // Max 6\n pcBox: OwnedPokemon[]; // Overflow storage\n pokedex: PokedexState;\n badges: BadgeType[];\n achievements: UnlockedAchievement[];\n counters: EventCounters;\n streak: StreakData;\n config: BuddyConfig;\n startedAt: string; // ISO date\n totalXpEarned: number;\n totalSessions: number;\n pendingEncounter: WildEncounter | null;\n xpSinceLastEncounter: number;\n recentToolTypes: string[]; // Track tool diversity for bonus encounters\n lastEncounterTime: number; // Timestamp of last encounter (for cooldown)\n mood: MoodType; // Current mood of the active Pokemon\n moodSetAt: number; // Timestamp when mood was last set\n lastFedAt: number; // Timestamp of last feed action\n lastTrainedAt: number; // Timestamp of last train action\n lastPlayedAt: number; // Timestamp of last play (quiz completed) action\n pendingQuiz: PendingQuiz | null; // Active quiz awaiting answer\n shareStats: ShareStats; // Win/loss/tie record from compare\n}\n\n// \u2500\u2500 Share Stats \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport interface ShareStats {\n wins: number;\n losses: number;\n ties: number;\n}\n\n// \u2500\u2500 Pokedex \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport interface PokedexEntry {\n seen: boolean;\n caught: boolean;\n firstSeen: string | null; // ISO date\n firstCaught: string | null;\n}\n\nexport interface PokedexState {\n entries: Record<number, PokedexEntry>; // Keyed by Pokedex number 1-151\n totalSeen: number;\n totalCaught: number;\n}\n\n// \u2500\u2500 Achievements \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport interface Achievement {\n readonly id: string;\n readonly name: string;\n readonly description: string;\n readonly category: \"trainer\" | \"coding\" | \"pokemon\" | \"secret\";\n readonly condition: AchievementCondition;\n}\n\nexport type AchievementCondition =\n | { readonly type: \"counter\"; readonly counter: EventCounterKey; readonly threshold: number }\n | { readonly type: \"level\"; readonly minLevel: number }\n | { readonly type: \"pokedex\"; readonly minCaught: number }\n | { readonly type: \"streak\"; readonly minDays: number }\n | { readonly type: \"badge\"; readonly badge: BadgeType }\n | { readonly type: \"evolution\" }\n | { readonly type: \"party_size\"; readonly minSize: number };\n\nexport interface UnlockedAchievement {\n readonly achievementId: string;\n readonly unlockedAt: string; // ISO date\n}\n\n// \u2500\u2500 Event Counters \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const EVENT_COUNTER_KEYS = [\n \"commits\",\n \"tests_passed\",\n \"tests_failed\",\n \"tests_written\",\n \"builds_succeeded\",\n \"builds_failed\",\n \"bugs_fixed\",\n \"lint_fixes\",\n \"files_created\",\n \"files_edited\",\n \"searches\",\n \"large_refactors\",\n \"errors_encountered\",\n \"sessions\",\n \"prs_merged\",\n] as const;\n\nexport type EventCounterKey = (typeof EVENT_COUNTER_KEYS)[number];\n\nexport type EventCounters = Record<EventCounterKey, number>;\n\n// \u2500\u2500 Streaks \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport interface StreakData {\n currentStreak: number;\n longestStreak: number;\n lastActiveDate: string | null; // ISO date \"2026-04-13\"\n totalDaysActive: number;\n}\n\n// \u2500\u2500 Config \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport interface BuddyConfig {\n muted: boolean;\n reactionCooldownMs: number; // Default 30000\n statusLineEnabled: boolean;\n bellEnabled: boolean; // Terminal bell on level-up/encounters\n encounterSpeed: \"fast\" | \"normal\" | \"slow\"; // Configurable encounter frequency\n xpSharePercent: number; // 0-100, default 25. Percentage of XP shared to inactive party\n}\n\n// \u2500\u2500 XP Events (what triggers XP awards) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const XP_EVENT_TYPES = [\n \"commit\",\n \"test_pass\",\n \"test_written\",\n \"build_success\",\n \"bug_fix\",\n \"lint_fix\",\n \"file_create\",\n \"file_edit\",\n \"search\",\n \"large_refactor\",\n \"session_start\",\n \"daily_streak\",\n \"pet\",\n] as const;\n\nexport type XpEventType = (typeof XP_EVENT_TYPES)[number];\n\nexport interface XpEvent {\n readonly type: XpEventType;\n readonly xp: number;\n readonly statBoost: CodingStat | null;\n readonly boostAmount: number;\n}\n\n// \u2500\u2500 Pending Quiz (for /buddy play) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport interface PendingQuiz {\n readonly type: \"type_matchup\" | \"stat_compare\" | \"evolution\" | \"pokedex_trivia\";\n readonly question: string;\n readonly options: readonly string[];\n readonly correctAnswer: number; // 1-4\n}\n\n// \u2500\u2500 Encounters \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport interface WildEncounter {\n readonly pokemonId: number;\n readonly level: number;\n readonly catchCondition: CatchCondition;\n}\n\nexport interface CatchCondition {\n readonly requiredStat: CodingStat | null;\n readonly minStatValue: number;\n readonly requiredLevel: number;\n}\n\n// \u2500\u2500 Level Up Result \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport interface LevelUpResult {\n readonly previousLevel: number;\n readonly newLevel: number;\n readonly pendingEvolution: EvolutionLink | null;\n}\n\n// \u2500\u2500 Trainer Titles \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport interface TrainerTitle {\n readonly minLevel: number;\n readonly title: string;\n}\n\n// \u2500\u2500 Legendary Quest \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport interface LegendaryQuest {\n readonly pokemonId: number;\n readonly name: string;\n readonly steps: readonly QuestStep[];\n}\n\nexport interface QuestStep {\n readonly description: string;\n readonly condition: AchievementCondition;\n}\n", "/**\n * Atomic file I/O helpers for state persistence.\n * All disk writes go through atomicWrite to prevent corruption.\n * Uses only Node.js APIs (no Bun-specific APIs) for compatibility.\n */\n\nimport {\n readFile,\n writeFile,\n rename,\n mkdir,\n copyFile,\n unlink,\n stat,\n access,\n} from \"node:fs/promises\";\nimport { constants } from \"node:fs\";\n\n/** Write data atomically via temp file + rename */\nexport async function atomicWrite(path: string, data: string): Promise<void> {\n const tmpPath = `${path}.${Date.now()}.tmp`;\n await writeFile(tmpPath, data, \"utf-8\");\n await rename(tmpPath, path);\n}\n\n/** Read and parse JSON, returning null if file doesn't exist or contains invalid JSON */\nexport async function safeRead<T>(path: string): Promise<T | null> {\n try {\n await access(path, constants.F_OK);\n } catch {\n return null;\n }\n try {\n const text = await readFile(path, \"utf-8\");\n if (!text.trim()) {\n return null;\n }\n return JSON.parse(text) as T;\n } catch {\n return null;\n }\n}\n\n/** Ensure directory exists, creating parents as needed */\nexport async function ensureDir(path: string): Promise<void> {\n await mkdir(path, { recursive: true });\n}\n\n/**\n * Backup a corrupted file by copying it to `<path>.corrupt.<timestamp>`.\n */\nexport async function backupCorrupted(path: string): Promise<string> {\n const backupPath = `${path}.corrupt.${Date.now()}`;\n try {\n await copyFile(path, backupPath);\n } catch {\n // If copy fails, nothing to back up\n }\n return backupPath;\n}\n\nconst LOCK_MAX_AGE_MS = 5000;\nconst LOCK_RETRY_DELAY_MS = 100;\n\n/**\n * Execute a function while holding a simple file lock.\n */\nexport async function withLock<T>(lockPath: string, fn: () => Promise<T>): Promise<T> {\n try {\n const lockStat = await stat(lockPath);\n const lockAge = Date.now() - lockStat.mtimeMs;\n if (lockAge < LOCK_MAX_AGE_MS) {\n await new Promise((r) => setTimeout(r, LOCK_RETRY_DELAY_MS));\n }\n } catch {\n // No lock file\n }\n\n await writeFile(lockPath, String(Date.now()), \"utf-8\");\n try {\n return await fn();\n } finally {\n try {\n await unlink(lockPath);\n } catch {\n // Ignore\n }\n }\n}\n", "export var util;\n(function (util) {\n util.assertEqual = (_) => { };\n function assertIs(_arg) { }\n util.assertIs = assertIs;\n function assertNever(_x) {\n throw new Error();\n }\n util.assertNever = assertNever;\n util.arrayToEnum = (items) => {\n const obj = {};\n for (const item of items) {\n obj[item] = item;\n }\n return obj;\n };\n util.getValidEnumValues = (obj) => {\n const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n const filtered = {};\n for (const k of validKeys) {\n filtered[k] = obj[k];\n }\n return util.objectValues(filtered);\n };\n util.objectValues = (obj) => {\n return util.objectKeys(obj).map(function (e) {\n return obj[e];\n });\n };\n util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n : (object) => {\n const keys = [];\n for (const key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n keys.push(key);\n }\n }\n return keys;\n };\n util.find = (arr, checker) => {\n for (const item of arr) {\n if (checker(item))\n return item;\n }\n return undefined;\n };\n util.isInteger = typeof Number.isInteger === \"function\"\n ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n : (val) => typeof val === \"number\" && Number.isFinite(val) && Math.floor(val) === val;\n function joinValues(array, separator = \" | \") {\n return array.map((val) => (typeof val === \"string\" ? `'${val}'` : val)).join(separator);\n }\n util.joinValues = joinValues;\n util.jsonStringifyReplacer = (_, value) => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n return value;\n };\n})(util || (util = {}));\nexport var objectUtil;\n(function (objectUtil) {\n objectUtil.mergeShapes = (first, second) => {\n return {\n ...first,\n ...second, // second overwrites first\n };\n };\n})(objectUtil || (objectUtil = {}));\nexport const ZodParsedType = util.arrayToEnum([\n \"string\",\n \"nan\",\n \"number\",\n \"integer\",\n \"float\",\n \"boolean\",\n \"date\",\n \"bigint\",\n \"symbol\",\n \"function\",\n \"undefined\",\n \"null\",\n \"array\",\n \"object\",\n \"unknown\",\n \"promise\",\n \"void\",\n \"never\",\n \"map\",\n \"set\",\n]);\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return ZodParsedType.undefined;\n case \"string\":\n return ZodParsedType.string;\n case \"number\":\n return Number.isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n case \"boolean\":\n return ZodParsedType.boolean;\n case \"function\":\n return ZodParsedType.function;\n case \"bigint\":\n return ZodParsedType.bigint;\n case \"symbol\":\n return ZodParsedType.symbol;\n case \"object\":\n if (Array.isArray(data)) {\n return ZodParsedType.array;\n }\n if (data === null) {\n return ZodParsedType.null;\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return ZodParsedType.promise;\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return ZodParsedType.map;\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return ZodParsedType.set;\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return ZodParsedType.date;\n }\n return ZodParsedType.object;\n default:\n return ZodParsedType.unknown;\n }\n};\n", "import { util } from \"./helpers/util.js\";\nexport const ZodIssueCode = util.arrayToEnum([\n \"invalid_type\",\n \"invalid_literal\",\n \"custom\",\n \"invalid_union\",\n \"invalid_union_discriminator\",\n \"invalid_enum_value\",\n \"unrecognized_keys\",\n \"invalid_arguments\",\n \"invalid_return_type\",\n \"invalid_date\",\n \"invalid_string\",\n \"too_small\",\n \"too_big\",\n \"invalid_intersection_types\",\n \"not_multiple_of\",\n \"not_finite\",\n]);\nexport const quotelessJson = (obj) => {\n const json = JSON.stringify(obj, null, 2);\n return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nexport class ZodError extends Error {\n get errors() {\n return this.issues;\n }\n constructor(issues) {\n super();\n this.issues = [];\n this.addIssue = (sub) => {\n this.issues = [...this.issues, sub];\n };\n this.addIssues = (subs = []) => {\n this.issues = [...this.issues, ...subs];\n };\n const actualProto = new.target.prototype;\n if (Object.setPrototypeOf) {\n // eslint-disable-next-line ban/ban\n Object.setPrototypeOf(this, actualProto);\n }\n else {\n this.__proto__ = actualProto;\n }\n this.name = \"ZodError\";\n this.issues = issues;\n }\n format(_mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\") {\n issue.unionErrors.map(processError);\n }\n else if (issue.code === \"invalid_return_type\") {\n processError(issue.returnTypeError);\n }\n else if (issue.code === \"invalid_arguments\") {\n processError(issue.argumentsError);\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n // if (typeof el === \"string\") {\n // curr[el] = curr[el] || { _errors: [] };\n // } else if (typeof el === \"number\") {\n // const errorArray: any = [];\n // errorArray._errors = [];\n // curr[el] = curr[el] || errorArray;\n // }\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(this);\n return fieldErrors;\n }\n static assert(value) {\n if (!(value instanceof ZodError)) {\n throw new Error(`Not a ZodError: ${value}`);\n }\n }\n toString() {\n return this.message;\n }\n get message() {\n return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n }\n get isEmpty() {\n return this.issues.length === 0;\n }\n flatten(mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of this.issues) {\n if (sub.path.length > 0) {\n const firstEl = sub.path[0];\n fieldErrors[firstEl] = fieldErrors[firstEl] || [];\n fieldErrors[firstEl].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n }\n get formErrors() {\n return this.flatten();\n }\n}\nZodError.create = (issues) => {\n const error = new ZodError(issues);\n return error;\n};\n", "import { ZodIssueCode } from \"../ZodError.js\";\nimport { util, ZodParsedType } from \"../helpers/util.js\";\nconst errorMap = (issue, _ctx) => {\n let message;\n switch (issue.code) {\n case ZodIssueCode.invalid_type:\n if (issue.received === ZodParsedType.undefined) {\n message = \"Required\";\n }\n else {\n message = `Expected ${issue.expected}, received ${issue.received}`;\n }\n break;\n case ZodIssueCode.invalid_literal:\n message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n break;\n case ZodIssueCode.unrecognized_keys:\n message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n break;\n case ZodIssueCode.invalid_union:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_union_discriminator:\n message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n break;\n case ZodIssueCode.invalid_enum_value:\n message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n break;\n case ZodIssueCode.invalid_arguments:\n message = `Invalid function arguments`;\n break;\n case ZodIssueCode.invalid_return_type:\n message = `Invalid function return type`;\n break;\n case ZodIssueCode.invalid_date:\n message = `Invalid date`;\n break;\n case ZodIssueCode.invalid_string:\n if (typeof issue.validation === \"object\") {\n if (\"includes\" in issue.validation) {\n message = `Invalid input: must include \"${issue.validation.includes}\"`;\n if (typeof issue.validation.position === \"number\") {\n message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n }\n }\n else if (\"startsWith\" in issue.validation) {\n message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n }\n else if (\"endsWith\" in issue.validation) {\n message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n }\n else {\n util.assertNever(issue.validation);\n }\n }\n else if (issue.validation !== \"regex\") {\n message = `Invalid ${issue.validation}`;\n }\n else {\n message = \"Invalid\";\n }\n break;\n case ZodIssueCode.too_small:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"bigint\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue.minimum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.too_big:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"bigint\")\n message = `BigInt must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly` : issue.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(issue.maximum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.custom:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_intersection_types:\n message = `Intersection results could not be merged`;\n break;\n case ZodIssueCode.not_multiple_of:\n message = `Number must be a multiple of ${issue.multipleOf}`;\n break;\n case ZodIssueCode.not_finite:\n message = \"Number must be finite\";\n break;\n default:\n message = _ctx.defaultError;\n util.assertNever(issue);\n }\n return { message };\n};\nexport default errorMap;\n", "import defaultErrorMap from \"./locales/en.js\";\nlet overrideErrorMap = defaultErrorMap;\nexport { defaultErrorMap };\nexport function setErrorMap(map) {\n overrideErrorMap = map;\n}\nexport function getErrorMap() {\n return overrideErrorMap;\n}\n", "import { getErrorMap } from \"../errors.js\";\nimport defaultErrorMap from \"../locales/en.js\";\nexport const makeIssue = (params) => {\n const { data, path, errorMaps, issueData } = params;\n const fullPath = [...path, ...(issueData.path || [])];\n const fullIssue = {\n ...issueData,\n path: fullPath,\n };\n if (issueData.message !== undefined) {\n return {\n ...issueData,\n path: fullPath,\n message: issueData.message,\n };\n }\n let errorMessage = \"\";\n const maps = errorMaps\n .filter((m) => !!m)\n .slice()\n .reverse();\n for (const map of maps) {\n errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n }\n return {\n ...issueData,\n path: fullPath,\n message: errorMessage,\n };\n};\nexport const EMPTY_PATH = [];\nexport function addIssueToContext(ctx, issueData) {\n const overrideMap = getErrorMap();\n const issue = makeIssue({\n issueData: issueData,\n data: ctx.data,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap, // contextual error map is first priority\n ctx.schemaErrorMap, // then schema-bound map if available\n overrideMap, // then global override map\n overrideMap === defaultErrorMap ? undefined : defaultErrorMap, // then global default map\n ].filter((x) => !!x),\n });\n ctx.common.issues.push(issue);\n}\nexport class ParseStatus {\n constructor() {\n this.value = \"valid\";\n }\n dirty() {\n if (this.value === \"valid\")\n this.value = \"dirty\";\n }\n abort() {\n if (this.value !== \"aborted\")\n this.value = \"aborted\";\n }\n static mergeArray(status, results) {\n const arrayValue = [];\n for (const s of results) {\n if (s.status === \"aborted\")\n return INVALID;\n if (s.status === \"dirty\")\n status.dirty();\n arrayValue.push(s.value);\n }\n return { status: status.value, value: arrayValue };\n }\n static async mergeObjectAsync(status, pairs) {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n });\n }\n return ParseStatus.mergeObjectSync(status, syncPairs);\n }\n static mergeObjectSync(status, pairs) {\n const finalObject = {};\n for (const pair of pairs) {\n const { key, value } = pair;\n if (key.status === \"aborted\")\n return INVALID;\n if (value.status === \"aborted\")\n return INVALID;\n if (key.status === \"dirty\")\n status.dirty();\n if (value.status === \"dirty\")\n status.dirty();\n if (key.value !== \"__proto__\" && (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n finalObject[key.value] = value.value;\n }\n }\n return { status: status.value, value: finalObject };\n }\n}\nexport const INVALID = Object.freeze({\n status: \"aborted\",\n});\nexport const DIRTY = (value) => ({ status: \"dirty\", value });\nexport const OK = (value) => ({ status: \"valid\", value });\nexport const isAborted = (x) => x.status === \"aborted\";\nexport const isDirty = (x) => x.status === \"dirty\";\nexport const isValid = (x) => x.status === \"valid\";\nexport const isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n", "export {};\n", "export var errorUtil;\n(function (errorUtil) {\n errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n // biome-ignore lint:\n errorUtil.toString = (message) => typeof message === \"string\" ? message : message?.message;\n})(errorUtil || (errorUtil = {}));\n", "import { ZodError, ZodIssueCode, } from \"./ZodError.js\";\nimport { defaultErrorMap, getErrorMap } from \"./errors.js\";\nimport { errorUtil } from \"./helpers/errorUtil.js\";\nimport { DIRTY, INVALID, OK, ParseStatus, addIssueToContext, isAborted, isAsync, isDirty, isValid, makeIssue, } from \"./helpers/parseUtil.js\";\nimport { util, ZodParsedType, getParsedType } from \"./helpers/util.js\";\nclass ParseInputLazyPath {\n constructor(parent, value, path, key) {\n this._cachedPath = [];\n this.parent = parent;\n this.data = value;\n this._path = path;\n this._key = key;\n }\n get path() {\n if (!this._cachedPath.length) {\n if (Array.isArray(this._key)) {\n this._cachedPath.push(...this._path, ...this._key);\n }\n else {\n this._cachedPath.push(...this._path, this._key);\n }\n }\n return this._cachedPath;\n }\n}\nconst handleResult = (ctx, result) => {\n if (isValid(result)) {\n return { success: true, data: result.value };\n }\n else {\n if (!ctx.common.issues.length) {\n throw new Error(\"Validation failed but no issues detected.\");\n }\n return {\n success: false,\n get error() {\n if (this._error)\n return this._error;\n const error = new ZodError(ctx.common.issues);\n this._error = error;\n return this._error;\n },\n };\n }\n};\nfunction processCreateParams(params) {\n if (!params)\n return {};\n const { errorMap, invalid_type_error, required_error, description } = params;\n if (errorMap && (invalid_type_error || required_error)) {\n throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n }\n if (errorMap)\n return { errorMap: errorMap, description };\n const customMap = (iss, ctx) => {\n const { message } = params;\n if (iss.code === \"invalid_enum_value\") {\n return { message: message ?? ctx.defaultError };\n }\n if (typeof ctx.data === \"undefined\") {\n return { message: message ?? required_error ?? ctx.defaultError };\n }\n if (iss.code !== \"invalid_type\")\n return { message: ctx.defaultError };\n return { message: message ?? invalid_type_error ?? ctx.defaultError };\n };\n return { errorMap: customMap, description };\n}\nexport class ZodType {\n get description() {\n return this._def.description;\n }\n _getType(input) {\n return getParsedType(input.data);\n }\n _getOrReturnCtx(input, ctx) {\n return (ctx || {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n });\n }\n _processInputParams(input) {\n return {\n status: new ParseStatus(),\n ctx: {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n },\n };\n }\n _parseSync(input) {\n const result = this._parse(input);\n if (isAsync(result)) {\n throw new Error(\"Synchronous parse encountered promise.\");\n }\n return result;\n }\n _parseAsync(input) {\n const result = this._parse(input);\n return Promise.resolve(result);\n }\n parse(data, params) {\n const result = this.safeParse(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n safeParse(data, params) {\n const ctx = {\n common: {\n issues: [],\n async: params?.async ?? false,\n contextualErrorMap: params?.errorMap,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n return handleResult(ctx, result);\n }\n \"~validate\"(data) {\n const ctx = {\n common: {\n issues: [],\n async: !!this[\"~standard\"].async,\n },\n path: [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n if (!this[\"~standard\"].async) {\n try {\n const result = this._parseSync({ data, path: [], parent: ctx });\n return isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n };\n }\n catch (err) {\n if (err?.message?.toLowerCase()?.includes(\"encountered\")) {\n this[\"~standard\"].async = true;\n }\n ctx.common = {\n issues: [],\n async: true,\n };\n }\n }\n return this._parseAsync({ data, path: [], parent: ctx }).then((result) => isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n });\n }\n async parseAsync(data, params) {\n const result = await this.safeParseAsync(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n async safeParseAsync(data, params) {\n const ctx = {\n common: {\n issues: [],\n contextualErrorMap: params?.errorMap,\n async: true,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n const result = await (isAsync(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult));\n return handleResult(ctx, result);\n }\n refine(check, message) {\n const getIssueProperties = (val) => {\n if (typeof message === \"string\" || typeof message === \"undefined\") {\n return { message };\n }\n else if (typeof message === \"function\") {\n return message(val);\n }\n else {\n return message;\n }\n };\n return this._refinement((val, ctx) => {\n const result = check(val);\n const setError = () => ctx.addIssue({\n code: ZodIssueCode.custom,\n ...getIssueProperties(val),\n });\n if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n return result.then((data) => {\n if (!data) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n if (!result) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n refinement(check, refinementData) {\n return this._refinement((val, ctx) => {\n if (!check(val)) {\n ctx.addIssue(typeof refinementData === \"function\" ? refinementData(val, ctx) : refinementData);\n return false;\n }\n else {\n return true;\n }\n });\n }\n _refinement(refinement) {\n return new ZodEffects({\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"refinement\", refinement },\n });\n }\n superRefine(refinement) {\n return this._refinement(refinement);\n }\n constructor(def) {\n /** Alias of safeParseAsync */\n this.spa = this.safeParseAsync;\n this._def = def;\n this.parse = this.parse.bind(this);\n this.safeParse = this.safeParse.bind(this);\n this.parseAsync = this.parseAsync.bind(this);\n this.safeParseAsync = this.safeParseAsync.bind(this);\n this.spa = this.spa.bind(this);\n this.refine = this.refine.bind(this);\n this.refinement = this.refinement.bind(this);\n this.superRefine = this.superRefine.bind(this);\n this.optional = this.optional.bind(this);\n this.nullable = this.nullable.bind(this);\n this.nullish = this.nullish.bind(this);\n this.array = this.array.bind(this);\n this.promise = this.promise.bind(this);\n this.or = this.or.bind(this);\n this.and = this.and.bind(this);\n this.transform = this.transform.bind(this);\n this.brand = this.brand.bind(this);\n this.default = this.default.bind(this);\n this.catch = this.catch.bind(this);\n this.describe = this.describe.bind(this);\n this.pipe = this.pipe.bind(this);\n this.readonly = this.readonly.bind(this);\n this.isNullable = this.isNullable.bind(this);\n this.isOptional = this.isOptional.bind(this);\n this[\"~standard\"] = {\n version: 1,\n vendor: \"zod\",\n validate: (data) => this[\"~validate\"](data),\n };\n }\n optional() {\n return ZodOptional.create(this, this._def);\n }\n nullable() {\n return ZodNullable.create(this, this._def);\n }\n nullish() {\n return this.nullable().optional();\n }\n array() {\n return ZodArray.create(this);\n }\n promise() {\n return ZodPromise.create(this, this._def);\n }\n or(option) {\n return ZodUnion.create([this, option], this._def);\n }\n and(incoming) {\n return ZodIntersection.create(this, incoming, this._def);\n }\n transform(transform) {\n return new ZodEffects({\n ...processCreateParams(this._def),\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"transform\", transform },\n });\n }\n default(def) {\n const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodDefault({\n ...processCreateParams(this._def),\n innerType: this,\n defaultValue: defaultValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n });\n }\n brand() {\n return new ZodBranded({\n typeName: ZodFirstPartyTypeKind.ZodBranded,\n type: this,\n ...processCreateParams(this._def),\n });\n }\n catch(def) {\n const catchValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodCatch({\n ...processCreateParams(this._def),\n innerType: this,\n catchValue: catchValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n });\n }\n describe(description) {\n const This = this.constructor;\n return new This({\n ...this._def,\n description,\n });\n }\n pipe(target) {\n return ZodPipeline.create(this, target);\n }\n readonly() {\n return ZodReadonly.create(this);\n }\n isOptional() {\n return this.safeParse(undefined).success;\n }\n isNullable() {\n return this.safeParse(null).success;\n }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;\n// const uuidRegex =\n// /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst jwtRegex = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\nconst durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n// /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n// /^[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// const emailRegex =\n// /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n// /^[a-z0-9.!#$%&\u2019*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nconst ipv4CidrRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/;\n// const ipv6Regex =\n// /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\nconst ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;\nconst ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// https://base64.guru/standards/base64url\nconst base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n let secondsRegexSource = `[0-5]\\\\d`;\n if (args.precision) {\n secondsRegexSource = `${secondsRegexSource}\\\\.\\\\d{${args.precision}}`;\n }\n else if (args.precision == null) {\n secondsRegexSource = `${secondsRegexSource}(\\\\.\\\\d+)?`;\n }\n const secondsQuantifier = args.precision ? \"+\" : \"?\"; // require seconds if precision is nonzero\n return `([01]\\\\d|2[0-3]):[0-5]\\\\d(:${secondsRegexSource})${secondsQuantifier}`;\n}\nfunction timeRegex(args) {\n return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetimeRegex(args) {\n let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n const opts = [];\n opts.push(args.local ? `Z?` : `Z`);\n if (args.offset)\n opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n regex = `${regex}(${opts.join(\"|\")})`;\n return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n return true;\n }\n return false;\n}\nfunction isValidJWT(jwt, alg) {\n if (!jwtRegex.test(jwt))\n return false;\n try {\n const [header] = jwt.split(\".\");\n if (!header)\n return false;\n // Convert base64url to base64\n const base64 = header\n .replace(/-/g, \"+\")\n .replace(/_/g, \"/\")\n .padEnd(header.length + ((4 - (header.length % 4)) % 4), \"=\");\n const decoded = JSON.parse(atob(base64));\n if (typeof decoded !== \"object\" || decoded === null)\n return false;\n if (\"typ\" in decoded && decoded?.typ !== \"JWT\")\n return false;\n if (!decoded.alg)\n return false;\n if (alg && decoded.alg !== alg)\n return false;\n return true;\n }\n catch {\n return false;\n }\n}\nfunction isValidCidr(ip, version) {\n if ((version === \"v4\" || !version) && ipv4CidrRegex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6CidrRegex.test(ip)) {\n return true;\n }\n return false;\n}\nexport class ZodString extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = String(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.string) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.string,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.length < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.length > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"length\") {\n const tooBig = input.data.length > check.value;\n const tooSmall = input.data.length < check.value;\n if (tooBig || tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n if (tooBig) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n else if (tooSmall) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n status.dirty();\n }\n }\n else if (check.kind === \"email\") {\n if (!emailRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"email\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"emoji\") {\n if (!emojiRegex) {\n emojiRegex = new RegExp(_emojiRegex, \"u\");\n }\n if (!emojiRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"emoji\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"uuid\") {\n if (!uuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"uuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"nanoid\") {\n if (!nanoidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"nanoid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid\") {\n if (!cuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid2\") {\n if (!cuid2Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid2\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ulid\") {\n if (!ulidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ulid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"url\") {\n try {\n new URL(input.data);\n }\n catch {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"regex\") {\n check.regex.lastIndex = 0;\n const testResult = check.regex.test(input.data);\n if (!testResult) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"regex\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"trim\") {\n input.data = input.data.trim();\n }\n else if (check.kind === \"includes\") {\n if (!input.data.includes(check.value, check.position)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { includes: check.value, position: check.position },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"toLowerCase\") {\n input.data = input.data.toLowerCase();\n }\n else if (check.kind === \"toUpperCase\") {\n input.data = input.data.toUpperCase();\n }\n else if (check.kind === \"startsWith\") {\n if (!input.data.startsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { startsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"endsWith\") {\n if (!input.data.endsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { endsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"datetime\") {\n const regex = datetimeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"datetime\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"date\") {\n const regex = dateRegex;\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"date\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"time\") {\n const regex = timeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"time\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"duration\") {\n if (!durationRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"duration\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ip\") {\n if (!isValidIP(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ip\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"jwt\") {\n if (!isValidJWT(input.data, check.alg)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"jwt\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cidr\") {\n if (!isValidCidr(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cidr\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64\") {\n if (!base64Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64url\") {\n if (!base64urlRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _regex(regex, validation, message) {\n return this.refinement((data) => regex.test(data), {\n validation,\n code: ZodIssueCode.invalid_string,\n ...errorUtil.errToObj(message),\n });\n }\n _addCheck(check) {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n email(message) {\n return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n }\n url(message) {\n return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n }\n emoji(message) {\n return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n }\n uuid(message) {\n return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n }\n nanoid(message) {\n return this._addCheck({ kind: \"nanoid\", ...errorUtil.errToObj(message) });\n }\n cuid(message) {\n return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n }\n cuid2(message) {\n return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n }\n ulid(message) {\n return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n }\n base64(message) {\n return this._addCheck({ kind: \"base64\", ...errorUtil.errToObj(message) });\n }\n base64url(message) {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return this._addCheck({\n kind: \"base64url\",\n ...errorUtil.errToObj(message),\n });\n }\n jwt(options) {\n return this._addCheck({ kind: \"jwt\", ...errorUtil.errToObj(options) });\n }\n ip(options) {\n return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n }\n cidr(options) {\n return this._addCheck({ kind: \"cidr\", ...errorUtil.errToObj(options) });\n }\n datetime(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"datetime\",\n precision: null,\n offset: false,\n local: false,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"datetime\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n offset: options?.offset ?? false,\n local: options?.local ?? false,\n ...errorUtil.errToObj(options?.message),\n });\n }\n date(message) {\n return this._addCheck({ kind: \"date\", message });\n }\n time(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"time\",\n precision: null,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"time\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n ...errorUtil.errToObj(options?.message),\n });\n }\n duration(message) {\n return this._addCheck({ kind: \"duration\", ...errorUtil.errToObj(message) });\n }\n regex(regex, message) {\n return this._addCheck({\n kind: \"regex\",\n regex: regex,\n ...errorUtil.errToObj(message),\n });\n }\n includes(value, options) {\n return this._addCheck({\n kind: \"includes\",\n value: value,\n position: options?.position,\n ...errorUtil.errToObj(options?.message),\n });\n }\n startsWith(value, message) {\n return this._addCheck({\n kind: \"startsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n endsWith(value, message) {\n return this._addCheck({\n kind: \"endsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n min(minLength, message) {\n return this._addCheck({\n kind: \"min\",\n value: minLength,\n ...errorUtil.errToObj(message),\n });\n }\n max(maxLength, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxLength,\n ...errorUtil.errToObj(message),\n });\n }\n length(len, message) {\n return this._addCheck({\n kind: \"length\",\n value: len,\n ...errorUtil.errToObj(message),\n });\n }\n /**\n * Equivalent to `.min(1)`\n */\n nonempty(message) {\n return this.min(1, errorUtil.errToObj(message));\n }\n trim() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"trim\" }],\n });\n }\n toLowerCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n });\n }\n toUpperCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n });\n }\n get isDatetime() {\n return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n }\n get isDate() {\n return !!this._def.checks.find((ch) => ch.kind === \"date\");\n }\n get isTime() {\n return !!this._def.checks.find((ch) => ch.kind === \"time\");\n }\n get isDuration() {\n return !!this._def.checks.find((ch) => ch.kind === \"duration\");\n }\n get isEmail() {\n return !!this._def.checks.find((ch) => ch.kind === \"email\");\n }\n get isURL() {\n return !!this._def.checks.find((ch) => ch.kind === \"url\");\n }\n get isEmoji() {\n return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n }\n get isUUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n }\n get isNANOID() {\n return !!this._def.checks.find((ch) => ch.kind === \"nanoid\");\n }\n get isCUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n }\n get isCUID2() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n }\n get isULID() {\n return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n }\n get isIP() {\n return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n }\n get isCIDR() {\n return !!this._def.checks.find((ch) => ch.kind === \"cidr\");\n }\n get isBase64() {\n return !!this._def.checks.find((ch) => ch.kind === \"base64\");\n }\n get isBase64url() {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return !!this._def.checks.find((ch) => ch.kind === \"base64url\");\n }\n get minLength() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxLength() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodString.create = (params) => {\n return new ZodString({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodString,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / 10 ** decCount;\n}\nexport class ZodNumber extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n this.step = this.multipleOf;\n }\n _parse(input) {\n if (this._def.coerce) {\n input.data = Number(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.number) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.number,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"int\") {\n if (!util.isInteger(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: \"integer\",\n received: \"float\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (floatSafeRemainder(input.data, check.value) !== 0) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"finite\") {\n if (!Number.isFinite(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_finite,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodNumber({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodNumber({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n int(message) {\n return this._addCheck({\n kind: \"int\",\n message: errorUtil.toString(message),\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value: value,\n message: errorUtil.toString(message),\n });\n }\n finite(message) {\n return this._addCheck({\n kind: \"finite\",\n message: errorUtil.toString(message),\n });\n }\n safe(message) {\n return this._addCheck({\n kind: \"min\",\n inclusive: true,\n value: Number.MIN_SAFE_INTEGER,\n message: errorUtil.toString(message),\n })._addCheck({\n kind: \"max\",\n inclusive: true,\n value: Number.MAX_SAFE_INTEGER,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n get isInt() {\n return !!this._def.checks.find((ch) => ch.kind === \"int\" || (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n }\n get isFinite() {\n let max = null;\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"finite\" || ch.kind === \"int\" || ch.kind === \"multipleOf\") {\n return true;\n }\n else if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n else if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return Number.isFinite(min) && Number.isFinite(max);\n }\n}\nZodNumber.create = (params) => {\n return new ZodNumber({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodNumber,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBigInt extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n }\n _parse(input) {\n if (this._def.coerce) {\n try {\n input.data = BigInt(input.data);\n }\n catch {\n return this._getInvalidInput(input);\n }\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.bigint) {\n return this._getInvalidInput(input);\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n type: \"bigint\",\n minimum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n type: \"bigint\",\n maximum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (input.data % check.value !== BigInt(0)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _getInvalidInput(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.bigint,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodBigInt({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodBigInt({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodBigInt.create = (params) => {\n return new ZodBigInt({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodBigInt,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBoolean extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = Boolean(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.boolean) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.boolean,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodBoolean.create = (params) => {\n return new ZodBoolean({\n typeName: ZodFirstPartyTypeKind.ZodBoolean,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodDate extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = new Date(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.date) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.date,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (Number.isNaN(input.data.getTime())) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_date,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.getTime() < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n message: check.message,\n inclusive: true,\n exact: false,\n minimum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.getTime() > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n message: check.message,\n inclusive: true,\n exact: false,\n maximum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return {\n status: status.value,\n value: new Date(input.data.getTime()),\n };\n }\n _addCheck(check) {\n return new ZodDate({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n min(minDate, message) {\n return this._addCheck({\n kind: \"min\",\n value: minDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n max(maxDate, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n get minDate() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min != null ? new Date(min) : null;\n }\n get maxDate() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max != null ? new Date(max) : null;\n }\n}\nZodDate.create = (params) => {\n return new ZodDate({\n checks: [],\n coerce: params?.coerce || false,\n typeName: ZodFirstPartyTypeKind.ZodDate,\n ...processCreateParams(params),\n });\n};\nexport class ZodSymbol extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.symbol) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.symbol,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodSymbol.create = (params) => {\n return new ZodSymbol({\n typeName: ZodFirstPartyTypeKind.ZodSymbol,\n ...processCreateParams(params),\n });\n};\nexport class ZodUndefined extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.undefined,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodUndefined.create = (params) => {\n return new ZodUndefined({\n typeName: ZodFirstPartyTypeKind.ZodUndefined,\n ...processCreateParams(params),\n });\n};\nexport class ZodNull extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.null) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.null,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodNull.create = (params) => {\n return new ZodNull({\n typeName: ZodFirstPartyTypeKind.ZodNull,\n ...processCreateParams(params),\n });\n};\nexport class ZodAny extends ZodType {\n constructor() {\n super(...arguments);\n // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n this._any = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodAny.create = (params) => {\n return new ZodAny({\n typeName: ZodFirstPartyTypeKind.ZodAny,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnknown extends ZodType {\n constructor() {\n super(...arguments);\n // required\n this._unknown = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodUnknown.create = (params) => {\n return new ZodUnknown({\n typeName: ZodFirstPartyTypeKind.ZodUnknown,\n ...processCreateParams(params),\n });\n};\nexport class ZodNever extends ZodType {\n _parse(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.never,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n}\nZodNever.create = (params) => {\n return new ZodNever({\n typeName: ZodFirstPartyTypeKind.ZodNever,\n ...processCreateParams(params),\n });\n};\nexport class ZodVoid extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.void,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodVoid.create = (params) => {\n return new ZodVoid({\n typeName: ZodFirstPartyTypeKind.ZodVoid,\n ...processCreateParams(params),\n });\n};\nexport class ZodArray extends ZodType {\n _parse(input) {\n const { ctx, status } = this._processInputParams(input);\n const def = this._def;\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (def.exactLength !== null) {\n const tooBig = ctx.data.length > def.exactLength.value;\n const tooSmall = ctx.data.length < def.exactLength.value;\n if (tooBig || tooSmall) {\n addIssueToContext(ctx, {\n code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n minimum: (tooSmall ? def.exactLength.value : undefined),\n maximum: (tooBig ? def.exactLength.value : undefined),\n type: \"array\",\n inclusive: true,\n exact: true,\n message: def.exactLength.message,\n });\n status.dirty();\n }\n }\n if (def.minLength !== null) {\n if (ctx.data.length < def.minLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.minLength.message,\n });\n status.dirty();\n }\n }\n if (def.maxLength !== null) {\n if (ctx.data.length > def.maxLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.maxLength.message,\n });\n status.dirty();\n }\n }\n if (ctx.common.async) {\n return Promise.all([...ctx.data].map((item, i) => {\n return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n })).then((result) => {\n return ParseStatus.mergeArray(status, result);\n });\n }\n const result = [...ctx.data].map((item, i) => {\n return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n });\n return ParseStatus.mergeArray(status, result);\n }\n get element() {\n return this._def.type;\n }\n min(minLength, message) {\n return new ZodArray({\n ...this._def,\n minLength: { value: minLength, message: errorUtil.toString(message) },\n });\n }\n max(maxLength, message) {\n return new ZodArray({\n ...this._def,\n maxLength: { value: maxLength, message: errorUtil.toString(message) },\n });\n }\n length(len, message) {\n return new ZodArray({\n ...this._def,\n exactLength: { value: len, message: errorUtil.toString(message) },\n });\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodArray.create = (schema, params) => {\n return new ZodArray({\n type: schema,\n minLength: null,\n maxLength: null,\n exactLength: null,\n typeName: ZodFirstPartyTypeKind.ZodArray,\n ...processCreateParams(params),\n });\n};\nfunction deepPartialify(schema) {\n if (schema instanceof ZodObject) {\n const newShape = {};\n for (const key in schema.shape) {\n const fieldSchema = schema.shape[key];\n newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n }\n return new ZodObject({\n ...schema._def,\n shape: () => newShape,\n });\n }\n else if (schema instanceof ZodArray) {\n return new ZodArray({\n ...schema._def,\n type: deepPartialify(schema.element),\n });\n }\n else if (schema instanceof ZodOptional) {\n return ZodOptional.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodNullable) {\n return ZodNullable.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodTuple) {\n return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n }\n else {\n return schema;\n }\n}\nexport class ZodObject extends ZodType {\n constructor() {\n super(...arguments);\n this._cached = null;\n /**\n * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n * If you want to pass through unknown properties, use `.passthrough()` instead.\n */\n this.nonstrict = this.passthrough;\n // extend<\n // Augmentation extends ZodRawShape,\n // NewOutput extends util.flatten<{\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // }>,\n // NewInput extends util.flatten<{\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }>\n // >(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<T, Augmentation>,\n // UnknownKeys,\n // Catchall,\n // NewOutput,\n // NewInput\n // > {\n // return new ZodObject({\n // ...this._def,\n // shape: () => ({\n // ...this._def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // }\n /**\n * @deprecated Use `.extend` instead\n * */\n this.augment = this.extend;\n }\n _getCached() {\n if (this._cached !== null)\n return this._cached;\n const shape = this._def.shape();\n const keys = util.objectKeys(shape);\n this._cached = { shape, keys };\n return this._cached;\n }\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.object) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const { status, ctx } = this._processInputParams(input);\n const { shape, keys: shapeKeys } = this._getCached();\n const extraKeys = [];\n if (!(this._def.catchall instanceof ZodNever && this._def.unknownKeys === \"strip\")) {\n for (const key in ctx.data) {\n if (!shapeKeys.includes(key)) {\n extraKeys.push(key);\n }\n }\n }\n const pairs = [];\n for (const key of shapeKeys) {\n const keyValidator = shape[key];\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (this._def.catchall instanceof ZodNever) {\n const unknownKeys = this._def.unknownKeys;\n if (unknownKeys === \"passthrough\") {\n for (const key of extraKeys) {\n pairs.push({\n key: { status: \"valid\", value: key },\n value: { status: \"valid\", value: ctx.data[key] },\n });\n }\n }\n else if (unknownKeys === \"strict\") {\n if (extraKeys.length > 0) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.unrecognized_keys,\n keys: extraKeys,\n });\n status.dirty();\n }\n }\n else if (unknownKeys === \"strip\") {\n }\n else {\n throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n }\n }\n else {\n // run catchall validation\n const catchall = this._def.catchall;\n for (const key of extraKeys) {\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n ),\n alwaysSet: key in ctx.data,\n });\n }\n }\n if (ctx.common.async) {\n return Promise.resolve()\n .then(async () => {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n alwaysSet: pair.alwaysSet,\n });\n }\n return syncPairs;\n })\n .then((syncPairs) => {\n return ParseStatus.mergeObjectSync(status, syncPairs);\n });\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get shape() {\n return this._def.shape();\n }\n strict(message) {\n errorUtil.errToObj;\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strict\",\n ...(message !== undefined\n ? {\n errorMap: (issue, ctx) => {\n const defaultError = this._def.errorMap?.(issue, ctx).message ?? ctx.defaultError;\n if (issue.code === \"unrecognized_keys\")\n return {\n message: errorUtil.errToObj(message).message ?? defaultError,\n };\n return {\n message: defaultError,\n };\n },\n }\n : {}),\n });\n }\n strip() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strip\",\n });\n }\n passthrough() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"passthrough\",\n });\n }\n // const AugmentFactory =\n // <Def extends ZodObjectDef>(def: Def) =>\n // <Augmentation extends ZodRawShape>(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n // Def[\"unknownKeys\"],\n // Def[\"catchall\"]\n // > => {\n // return new ZodObject({\n // ...def,\n // shape: () => ({\n // ...def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // };\n extend(augmentation) {\n return new ZodObject({\n ...this._def,\n shape: () => ({\n ...this._def.shape(),\n ...augmentation,\n }),\n });\n }\n /**\n * Prior to zod@1.0.12 there was a bug in the\n * inferred type of merged objects. Please\n * upgrade if you are experiencing issues.\n */\n merge(merging) {\n const merged = new ZodObject({\n unknownKeys: merging._def.unknownKeys,\n catchall: merging._def.catchall,\n shape: () => ({\n ...this._def.shape(),\n ...merging._def.shape(),\n }),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n });\n return merged;\n }\n // merge<\n // Incoming extends AnyZodObject,\n // Augmentation extends Incoming[\"shape\"],\n // NewOutput extends {\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // },\n // NewInput extends {\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }\n // >(\n // merging: Incoming\n // ): ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"],\n // NewOutput,\n // NewInput\n // > {\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n setKey(key, schema) {\n return this.augment({ [key]: schema });\n }\n // merge<Incoming extends AnyZodObject>(\n // merging: Incoming\n // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n // ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"]\n // > {\n // // const mergedShape = objectUtil.mergeShapes(\n // // this._def.shape(),\n // // merging._def.shape()\n // // );\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n catchall(index) {\n return new ZodObject({\n ...this._def,\n catchall: index,\n });\n }\n pick(mask) {\n const shape = {};\n for (const key of util.objectKeys(mask)) {\n if (mask[key] && this.shape[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n omit(mask) {\n const shape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (!mask[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n /**\n * @deprecated\n */\n deepPartial() {\n return deepPartialify(this);\n }\n partial(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n const fieldSchema = this.shape[key];\n if (mask && !mask[key]) {\n newShape[key] = fieldSchema;\n }\n else {\n newShape[key] = fieldSchema.optional();\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n required(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (mask && !mask[key]) {\n newShape[key] = this.shape[key];\n }\n else {\n const fieldSchema = this.shape[key];\n let newField = fieldSchema;\n while (newField instanceof ZodOptional) {\n newField = newField._def.innerType;\n }\n newShape[key] = newField;\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n keyof() {\n return createZodEnum(util.objectKeys(this.shape));\n }\n}\nZodObject.create = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.strictCreate = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strict\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.lazycreate = (shape, params) => {\n return new ZodObject({\n shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const options = this._def.options;\n function handleResults(results) {\n // return first issue-free validation if it exists\n for (const result of results) {\n if (result.result.status === \"valid\") {\n return result.result;\n }\n }\n for (const result of results) {\n if (result.result.status === \"dirty\") {\n // add issues from dirty option\n ctx.common.issues.push(...result.ctx.common.issues);\n return result.result;\n }\n }\n // return invalid\n const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return Promise.all(options.map(async (option) => {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n return {\n result: await option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n }),\n ctx: childCtx,\n };\n })).then(handleResults);\n }\n else {\n let dirty = undefined;\n const issues = [];\n for (const option of options) {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n const result = option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n });\n if (result.status === \"valid\") {\n return result;\n }\n else if (result.status === \"dirty\" && !dirty) {\n dirty = { result, ctx: childCtx };\n }\n if (childCtx.common.issues.length) {\n issues.push(childCtx.common.issues);\n }\n }\n if (dirty) {\n ctx.common.issues.push(...dirty.ctx.common.issues);\n return dirty.result;\n }\n const unionErrors = issues.map((issues) => new ZodError(issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n }\n get options() {\n return this._def.options;\n }\n}\nZodUnion.create = (types, params) => {\n return new ZodUnion({\n options: types,\n typeName: ZodFirstPartyTypeKind.ZodUnion,\n ...processCreateParams(params),\n });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n////////// //////////\n////////// ZodDiscriminatedUnion //////////\n////////// //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n if (type instanceof ZodLazy) {\n return getDiscriminator(type.schema);\n }\n else if (type instanceof ZodEffects) {\n return getDiscriminator(type.innerType());\n }\n else if (type instanceof ZodLiteral) {\n return [type.value];\n }\n else if (type instanceof ZodEnum) {\n return type.options;\n }\n else if (type instanceof ZodNativeEnum) {\n // eslint-disable-next-line ban/ban\n return util.objectValues(type.enum);\n }\n else if (type instanceof ZodDefault) {\n return getDiscriminator(type._def.innerType);\n }\n else if (type instanceof ZodUndefined) {\n return [undefined];\n }\n else if (type instanceof ZodNull) {\n return [null];\n }\n else if (type instanceof ZodOptional) {\n return [undefined, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodNullable) {\n return [null, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodBranded) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodReadonly) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodCatch) {\n return getDiscriminator(type._def.innerType);\n }\n else {\n return [];\n }\n};\nexport class ZodDiscriminatedUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const discriminator = this.discriminator;\n const discriminatorValue = ctx.data[discriminator];\n const option = this.optionsMap.get(discriminatorValue);\n if (!option) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union_discriminator,\n options: Array.from(this.optionsMap.keys()),\n path: [discriminator],\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n else {\n return option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n get discriminator() {\n return this._def.discriminator;\n }\n get options() {\n return this._def.options;\n }\n get optionsMap() {\n return this._def.optionsMap;\n }\n /**\n * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n * have a different value for each object in the union.\n * @param discriminator the name of the discriminator property\n * @param types an array of object schemas\n * @param params\n */\n static create(discriminator, options, params) {\n // Get all the valid discriminator values\n const optionsMap = new Map();\n // try {\n for (const type of options) {\n const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n if (!discriminatorValues.length) {\n throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n }\n for (const value of discriminatorValues) {\n if (optionsMap.has(value)) {\n throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n }\n optionsMap.set(value, type);\n }\n }\n return new ZodDiscriminatedUnion({\n typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n discriminator,\n options,\n optionsMap,\n ...processCreateParams(params),\n });\n }\n}\nfunction mergeValues(a, b) {\n const aType = getParsedType(a);\n const bType = getParsedType(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n const bKeys = util.objectKeys(b);\n const sharedKeys = util.objectKeys(a).filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n if (a.length !== b.length) {\n return { valid: false };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n else if (aType === ZodParsedType.date && bType === ZodParsedType.date && +a === +b) {\n return { valid: true, data: a };\n }\n else {\n return { valid: false };\n }\n}\nexport class ZodIntersection extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const handleParsed = (parsedLeft, parsedRight) => {\n if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n return INVALID;\n }\n const merged = mergeValues(parsedLeft.value, parsedRight.value);\n if (!merged.valid) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_intersection_types,\n });\n return INVALID;\n }\n if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n status.dirty();\n }\n return { status: status.value, value: merged.data };\n };\n if (ctx.common.async) {\n return Promise.all([\n this._def.left._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n this._def.right._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n ]).then(([left, right]) => handleParsed(left, right));\n }\n else {\n return handleParsed(this._def.left._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }), this._def.right._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }));\n }\n }\n}\nZodIntersection.create = (left, right, params) => {\n return new ZodIntersection({\n left: left,\n right: right,\n typeName: ZodFirstPartyTypeKind.ZodIntersection,\n ...processCreateParams(params),\n });\n};\n// type ZodTupleItems = [ZodTypeAny, ...ZodTypeAny[]];\nexport class ZodTuple extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (ctx.data.length < this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n return INVALID;\n }\n const rest = this._def.rest;\n if (!rest && ctx.data.length > this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n status.dirty();\n }\n const items = [...ctx.data]\n .map((item, itemIndex) => {\n const schema = this._def.items[itemIndex] || this._def.rest;\n if (!schema)\n return null;\n return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n })\n .filter((x) => !!x); // filter nulls\n if (ctx.common.async) {\n return Promise.all(items).then((results) => {\n return ParseStatus.mergeArray(status, results);\n });\n }\n else {\n return ParseStatus.mergeArray(status, items);\n }\n }\n get items() {\n return this._def.items;\n }\n rest(rest) {\n return new ZodTuple({\n ...this._def,\n rest,\n });\n }\n}\nZodTuple.create = (schemas, params) => {\n if (!Array.isArray(schemas)) {\n throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n }\n return new ZodTuple({\n items: schemas,\n typeName: ZodFirstPartyTypeKind.ZodTuple,\n rest: null,\n ...processCreateParams(params),\n });\n};\nexport class ZodRecord extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const pairs = [];\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n for (const key in ctx.data) {\n pairs.push({\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (ctx.common.async) {\n return ParseStatus.mergeObjectAsync(status, pairs);\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get element() {\n return this._def.valueType;\n }\n static create(first, second, third) {\n if (second instanceof ZodType) {\n return new ZodRecord({\n keyType: first,\n valueType: second,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(third),\n });\n }\n return new ZodRecord({\n keyType: ZodString.create(),\n valueType: first,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(second),\n });\n }\n}\nexport class ZodMap extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.map) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.map,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n return {\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n };\n });\n if (ctx.common.async) {\n const finalMap = new Map();\n return Promise.resolve().then(async () => {\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n });\n }\n else {\n const finalMap = new Map();\n for (const pair of pairs) {\n const key = pair.key;\n const value = pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n }\n }\n}\nZodMap.create = (keyType, valueType, params) => {\n return new ZodMap({\n valueType,\n keyType,\n typeName: ZodFirstPartyTypeKind.ZodMap,\n ...processCreateParams(params),\n });\n};\nexport class ZodSet extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.set) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.set,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const def = this._def;\n if (def.minSize !== null) {\n if (ctx.data.size < def.minSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.minSize.message,\n });\n status.dirty();\n }\n }\n if (def.maxSize !== null) {\n if (ctx.data.size > def.maxSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.maxSize.message,\n });\n status.dirty();\n }\n }\n const valueType = this._def.valueType;\n function finalizeSet(elements) {\n const parsedSet = new Set();\n for (const element of elements) {\n if (element.status === \"aborted\")\n return INVALID;\n if (element.status === \"dirty\")\n status.dirty();\n parsedSet.add(element.value);\n }\n return { status: status.value, value: parsedSet };\n }\n const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n if (ctx.common.async) {\n return Promise.all(elements).then((elements) => finalizeSet(elements));\n }\n else {\n return finalizeSet(elements);\n }\n }\n min(minSize, message) {\n return new ZodSet({\n ...this._def,\n minSize: { value: minSize, message: errorUtil.toString(message) },\n });\n }\n max(maxSize, message) {\n return new ZodSet({\n ...this._def,\n maxSize: { value: maxSize, message: errorUtil.toString(message) },\n });\n }\n size(size, message) {\n return this.min(size, message).max(size, message);\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodSet.create = (valueType, params) => {\n return new ZodSet({\n valueType,\n minSize: null,\n maxSize: null,\n typeName: ZodFirstPartyTypeKind.ZodSet,\n ...processCreateParams(params),\n });\n};\nexport class ZodFunction extends ZodType {\n constructor() {\n super(...arguments);\n this.validate = this.implement;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.function) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.function,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n function makeArgsIssue(args, error) {\n return makeIssue({\n data: args,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_arguments,\n argumentsError: error,\n },\n });\n }\n function makeReturnsIssue(returns, error) {\n return makeIssue({\n data: returns,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_return_type,\n returnTypeError: error,\n },\n });\n }\n const params = { errorMap: ctx.common.contextualErrorMap };\n const fn = ctx.data;\n if (this._def.returns instanceof ZodPromise) {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(async function (...args) {\n const error = new ZodError([]);\n const parsedArgs = await me._def.args.parseAsync(args, params).catch((e) => {\n error.addIssue(makeArgsIssue(args, e));\n throw error;\n });\n const result = await Reflect.apply(fn, this, parsedArgs);\n const parsedReturns = await me._def.returns._def.type\n .parseAsync(result, params)\n .catch((e) => {\n error.addIssue(makeReturnsIssue(result, e));\n throw error;\n });\n return parsedReturns;\n });\n }\n else {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(function (...args) {\n const parsedArgs = me._def.args.safeParse(args, params);\n if (!parsedArgs.success) {\n throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n }\n const result = Reflect.apply(fn, this, parsedArgs.data);\n const parsedReturns = me._def.returns.safeParse(result, params);\n if (!parsedReturns.success) {\n throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n }\n return parsedReturns.data;\n });\n }\n }\n parameters() {\n return this._def.args;\n }\n returnType() {\n return this._def.returns;\n }\n args(...items) {\n return new ZodFunction({\n ...this._def,\n args: ZodTuple.create(items).rest(ZodUnknown.create()),\n });\n }\n returns(returnType) {\n return new ZodFunction({\n ...this._def,\n returns: returnType,\n });\n }\n implement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n strictImplement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n static create(args, returns, params) {\n return new ZodFunction({\n args: (args ? args : ZodTuple.create([]).rest(ZodUnknown.create())),\n returns: returns || ZodUnknown.create(),\n typeName: ZodFirstPartyTypeKind.ZodFunction,\n ...processCreateParams(params),\n });\n }\n}\nexport class ZodLazy extends ZodType {\n get schema() {\n return this._def.getter();\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const lazySchema = this._def.getter();\n return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n }\n}\nZodLazy.create = (getter, params) => {\n return new ZodLazy({\n getter: getter,\n typeName: ZodFirstPartyTypeKind.ZodLazy,\n ...processCreateParams(params),\n });\n};\nexport class ZodLiteral extends ZodType {\n _parse(input) {\n if (input.data !== this._def.value) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_literal,\n expected: this._def.value,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n get value() {\n return this._def.value;\n }\n}\nZodLiteral.create = (value, params) => {\n return new ZodLiteral({\n value: value,\n typeName: ZodFirstPartyTypeKind.ZodLiteral,\n ...processCreateParams(params),\n });\n};\nfunction createZodEnum(values, params) {\n return new ZodEnum({\n values,\n typeName: ZodFirstPartyTypeKind.ZodEnum,\n ...processCreateParams(params),\n });\n}\nexport class ZodEnum extends ZodType {\n _parse(input) {\n if (typeof input.data !== \"string\") {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(this._def.values);\n }\n if (!this._cache.has(input.data)) {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get options() {\n return this._def.values;\n }\n get enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Values() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n extract(values, newDef = this._def) {\n return ZodEnum.create(values, {\n ...this._def,\n ...newDef,\n });\n }\n exclude(values, newDef = this._def) {\n return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {\n ...this._def,\n ...newDef,\n });\n }\n}\nZodEnum.create = createZodEnum;\nexport class ZodNativeEnum extends ZodType {\n _parse(input) {\n const nativeEnumValues = util.getValidEnumValues(this._def.values);\n const ctx = this._getOrReturnCtx(input);\n if (ctx.parsedType !== ZodParsedType.string && ctx.parsedType !== ZodParsedType.number) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(util.getValidEnumValues(this._def.values));\n }\n if (!this._cache.has(input.data)) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get enum() {\n return this._def.values;\n }\n}\nZodNativeEnum.create = (values, params) => {\n return new ZodNativeEnum({\n values: values,\n typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n ...processCreateParams(params),\n });\n};\nexport class ZodPromise extends ZodType {\n unwrap() {\n return this._def.type;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.promise && ctx.common.async === false) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.promise,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const promisified = ctx.parsedType === ZodParsedType.promise ? ctx.data : Promise.resolve(ctx.data);\n return OK(promisified.then((data) => {\n return this._def.type.parseAsync(data, {\n path: ctx.path,\n errorMap: ctx.common.contextualErrorMap,\n });\n }));\n }\n}\nZodPromise.create = (schema, params) => {\n return new ZodPromise({\n type: schema,\n typeName: ZodFirstPartyTypeKind.ZodPromise,\n ...processCreateParams(params),\n });\n};\nexport class ZodEffects extends ZodType {\n innerType() {\n return this._def.schema;\n }\n sourceType() {\n return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n ? this._def.schema.sourceType()\n : this._def.schema;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const effect = this._def.effect || null;\n const checkCtx = {\n addIssue: (arg) => {\n addIssueToContext(ctx, arg);\n if (arg.fatal) {\n status.abort();\n }\n else {\n status.dirty();\n }\n },\n get path() {\n return ctx.path;\n },\n };\n checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n if (effect.type === \"preprocess\") {\n const processed = effect.transform(ctx.data, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(processed).then(async (processed) => {\n if (status.value === \"aborted\")\n return INVALID;\n const result = await this._def.schema._parseAsync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n });\n }\n else {\n if (status.value === \"aborted\")\n return INVALID;\n const result = this._def.schema._parseSync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n }\n }\n if (effect.type === \"refinement\") {\n const executeRefinement = (acc) => {\n const result = effect.refinement(acc, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(result);\n }\n if (result instanceof Promise) {\n throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n }\n return acc;\n };\n if (ctx.common.async === false) {\n const inner = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n // return value is ignored\n executeRefinement(inner.value);\n return { status: status.value, value: inner.value };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((inner) => {\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n return executeRefinement(inner.value).then(() => {\n return { status: status.value, value: inner.value };\n });\n });\n }\n }\n if (effect.type === \"transform\") {\n if (ctx.common.async === false) {\n const base = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (!isValid(base))\n return INVALID;\n const result = effect.transform(base.value, checkCtx);\n if (result instanceof Promise) {\n throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n }\n return { status: status.value, value: result };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => {\n if (!isValid(base))\n return INVALID;\n return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({\n status: status.value,\n value: result,\n }));\n });\n }\n }\n util.assertNever(effect);\n }\n}\nZodEffects.create = (schema, effect, params) => {\n return new ZodEffects({\n schema,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect,\n ...processCreateParams(params),\n });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n return new ZodEffects({\n schema,\n effect: { type: \"preprocess\", transform: preprocess },\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n ...processCreateParams(params),\n });\n};\nexport { ZodEffects as ZodTransformer };\nexport class ZodOptional extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.undefined) {\n return OK(undefined);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodOptional.create = (type, params) => {\n return new ZodOptional({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodOptional,\n ...processCreateParams(params),\n });\n};\nexport class ZodNullable extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.null) {\n return OK(null);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodNullable.create = (type, params) => {\n return new ZodNullable({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodNullable,\n ...processCreateParams(params),\n });\n};\nexport class ZodDefault extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n let data = ctx.data;\n if (ctx.parsedType === ZodParsedType.undefined) {\n data = this._def.defaultValue();\n }\n return this._def.innerType._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n removeDefault() {\n return this._def.innerType;\n }\n}\nZodDefault.create = (type, params) => {\n return new ZodDefault({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n defaultValue: typeof params.default === \"function\" ? params.default : () => params.default,\n ...processCreateParams(params),\n });\n};\nexport class ZodCatch extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n // newCtx is used to not collect issues from inner types in ctx\n const newCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n };\n const result = this._def.innerType._parse({\n data: newCtx.data,\n path: newCtx.path,\n parent: {\n ...newCtx,\n },\n });\n if (isAsync(result)) {\n return result.then((result) => {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n });\n }\n else {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n }\n }\n removeCatch() {\n return this._def.innerType;\n }\n}\nZodCatch.create = (type, params) => {\n return new ZodCatch({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n ...processCreateParams(params),\n });\n};\nexport class ZodNaN extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.nan) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.nan,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n}\nZodNaN.create = (params) => {\n return new ZodNaN({\n typeName: ZodFirstPartyTypeKind.ZodNaN,\n ...processCreateParams(params),\n });\n};\nexport const BRAND = Symbol(\"zod_brand\");\nexport class ZodBranded extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const data = ctx.data;\n return this._def.type._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n unwrap() {\n return this._def.type;\n }\n}\nexport class ZodPipeline extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.common.async) {\n const handleAsync = async () => {\n const inResult = await this._def.in._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return DIRTY(inResult.value);\n }\n else {\n return this._def.out._parseAsync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n };\n return handleAsync();\n }\n else {\n const inResult = this._def.in._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return {\n status: \"dirty\",\n value: inResult.value,\n };\n }\n else {\n return this._def.out._parseSync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n }\n static create(a, b) {\n return new ZodPipeline({\n in: a,\n out: b,\n typeName: ZodFirstPartyTypeKind.ZodPipeline,\n });\n }\n}\nexport class ZodReadonly extends ZodType {\n _parse(input) {\n const result = this._def.innerType._parse(input);\n const freeze = (data) => {\n if (isValid(data)) {\n data.value = Object.freeze(data.value);\n }\n return data;\n };\n return isAsync(result) ? result.then((data) => freeze(data)) : freeze(result);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodReadonly.create = (type, params) => {\n return new ZodReadonly({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodReadonly,\n ...processCreateParams(params),\n });\n};\n////////////////////////////////////////\n////////////////////////////////////////\n////////// //////////\n////////// z.custom //////////\n////////// //////////\n////////////////////////////////////////\n////////////////////////////////////////\nfunction cleanParams(params, data) {\n const p = typeof params === \"function\" ? params(data) : typeof params === \"string\" ? { message: params } : params;\n const p2 = typeof p === \"string\" ? { message: p } : p;\n return p2;\n}\nexport function custom(check, _params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n if (check)\n return ZodAny.create().superRefine((data, ctx) => {\n const r = check(data);\n if (r instanceof Promise) {\n return r.then((r) => {\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n });\n }\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n return;\n });\n return ZodAny.create();\n}\nexport { ZodType as Schema, ZodType as ZodSchema };\nexport const late = {\n object: ZodObject.lazycreate,\n};\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n// requires TS 4.4+\nclass Class {\n constructor(..._) { }\n}\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nexport const coerce = {\n string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n boolean: ((arg) => ZodBoolean.create({\n ...arg,\n coerce: true,\n })),\n bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nexport { anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, dateType as date, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, instanceOfType as instanceof, intersectionType as intersection, lazyType as lazy, literalType as literal, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, recordType as record, setType as set, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, voidType as void, };\nexport const NEVER = INVALID;\n", "export * from \"./errors.js\";\nexport * from \"./helpers/parseUtil.js\";\nexport * from \"./helpers/typeAliases.js\";\nexport * from \"./helpers/util.js\";\nexport * from \"./types.js\";\nexport * from \"./ZodError.js\";\n", "import * as z from \"./v3/external.js\";\nexport * from \"./v3/external.js\";\nexport { z };\nexport default z;\n", "/**\n * Zod validation schemas for state files.\n * Catches disk corruption early at load boundaries.\n */\n\nimport { z } from \"zod\";\n\nimport { BADGE_TYPES, CODING_STATS, EVENT_COUNTER_KEYS, MOOD_TYPES } from \"../engine/types.js\";\n\n// ---- Shared Primitives ----\n\nconst BadgeTypeSchema = z.enum(BADGE_TYPES);\n\n// ---- Coding Stats ----\n\nexport const CodingStatsSchema = z.object({\n stamina: z.number(),\n debugging: z.number(),\n stability: z.number(),\n velocity: z.number(),\n wisdom: z.number(),\n});\n\n// ---- Owned Pokemon ----\n\nexport const OwnedPokemonSchema = z.object({\n id: z.string(),\n pokemonId: z.number().int().min(1).max(151),\n nickname: z.string().nullable(),\n level: z.number().int().min(1).max(100),\n currentXp: z.number().int().min(0),\n totalXp: z.number().int().min(0),\n codingStats: CodingStatsSchema,\n happiness: z.number().int().min(0).max(255),\n caughtAt: z.string(),\n evolvedAt: z.string().nullable(),\n isActive: z.boolean(),\n personality: z.string().nullable(),\n shiny: z.boolean().default(false),\n isStarter: z.boolean().default(false),\n});\n\n// ---- Event Counters ----\n\n// Cast needed: Object.fromEntries loses key specificity, but keys are guaranteed by EVENT_COUNTER_KEYS\nexport const EventCountersSchema = z.object(\n Object.fromEntries(\n EVENT_COUNTER_KEYS.map((key) => [key, z.number().int().min(0).default(0)]),\n ) as Record<(typeof EVENT_COUNTER_KEYS)[number], z.ZodDefault<z.ZodNumber>>,\n);\n\n// ---- Streak Data ----\n\nexport const StreakDataSchema = z.object({\n currentStreak: z.number().int().min(0).default(0),\n longestStreak: z.number().int().min(0).default(0),\n lastActiveDate: z.string().nullable().default(null),\n totalDaysActive: z.number().int().min(0).default(0),\n});\n\n// ---- Buddy Config ----\n\nexport const BuddyConfigSchema = z.object({\n muted: z.boolean().default(false),\n reactionCooldownMs: z.number().int().min(0).default(30_000),\n statusLineEnabled: z.boolean().default(true),\n bellEnabled: z.boolean().default(true),\n encounterSpeed: z.enum([\"fast\", \"normal\", \"slow\"]).default(\"normal\"),\n xpSharePercent: z.number().min(0).max(100).default(25),\n});\n\n// ---- Pokedex ----\n\nexport const PokedexEntrySchema = z.object({\n seen: z.boolean(),\n caught: z.boolean(),\n firstSeen: z.string().nullable(),\n firstCaught: z.string().nullable(),\n});\n\nexport const PokedexStateSchema = z.object({\n entries: z.record(z.coerce.number(), PokedexEntrySchema).default({}),\n totalSeen: z.number().int().min(0).default(0),\n totalCaught: z.number().int().min(0).default(0),\n});\n\n// ---- Achievements ----\n\nexport const UnlockedAchievementSchema = z.object({\n achievementId: z.string(),\n unlockedAt: z.string(),\n});\n\n// ---- Share Stats ----\n\nexport const ShareStatsSchema = z.object({\n wins: z.number().int().min(0).default(0),\n losses: z.number().int().min(0).default(0),\n ties: z.number().int().min(0).default(0),\n});\n\n// ---- Pending Quiz ----\n\nexport const PendingQuizSchema = z.object({\n type: z.enum([\"type_matchup\", \"stat_compare\", \"evolution\", \"pokedex_trivia\"]),\n question: z.string(),\n options: z.array(z.string()),\n correctAnswer: z.number().int().min(1).max(4),\n});\n\n// ---- Catch Condition ----\n\nexport const CatchConditionSchema = z.object({\n requiredStat: z.enum(CODING_STATS).nullable(),\n minStatValue: z.number(),\n requiredLevel: z.number(),\n});\n\n// ---- Wild Encounter ----\n\nexport const WildEncounterSchema = z.object({\n pokemonId: z.number().int().min(1).max(151),\n level: z.number().int().min(1).max(100),\n catchCondition: CatchConditionSchema,\n});\n\n// ---- Player State (top-level) ----\n\nexport const PlayerStateSchema = z.object({\n trainerId: z.string(),\n trainerName: z.string(),\n party: z.array(OwnedPokemonSchema).max(6),\n pcBox: z.array(OwnedPokemonSchema).default([]),\n pokedex: PokedexStateSchema,\n badges: z.array(BadgeTypeSchema).default([]),\n achievements: z.array(UnlockedAchievementSchema).default([]),\n counters: EventCountersSchema,\n streak: StreakDataSchema,\n config: BuddyConfigSchema,\n startedAt: z.string(),\n totalXpEarned: z.number().int().min(0).default(0),\n totalSessions: z.number().int().min(0).default(0),\n pendingEncounter: WildEncounterSchema.nullable().default(null),\n xpSinceLastEncounter: z.number().int().min(0).default(0),\n recentToolTypes: z.array(z.string()).default([]),\n lastEncounterTime: z.number().int().min(0).default(0),\n mood: z.enum(MOOD_TYPES).default(\"neutral\"),\n moodSetAt: z.number().default(0),\n lastFedAt: z.number().default(0),\n lastTrainedAt: z.number().default(0),\n lastPlayedAt: z.number().default(0),\n pendingQuiz: PendingQuizSchema.nullable().default(null),\n shareStats: ShareStatsSchema.default({ wins: 0, losses: 0, ties: 0 }),\n});\n", "/**\n * Complete Gen 1 Pokedex \u2014 all 151 Pokemon with actual base stats,\n * catch rates, and coding-themed descriptions.\n */\n\nimport type { Pokemon } from \"./types.js\";\n\nexport const POKEDEX: readonly Pokemon[] = [\n // pokemon-data.ts \u2014 #001\u2013#151\n // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\n // \u2500\u2500 Bulbasaur line (chain 1) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 1,\n name: \"Bulbasaur\",\n types: [\"Grass\", \"Poison\"],\n baseStats: { hp: 45, attack: 49, defense: 49, speed: 45, special: 65 },\n expGroup: \"medium_slow\",\n evolutionChainId: 1,\n rarity: \"uncommon\",\n catchRate: 45,\n description: \"Grows features on its back like a well-maintained monorepo.\",\n },\n {\n id: 2,\n name: \"Ivysaur\",\n types: [\"Grass\", \"Poison\"],\n baseStats: { hp: 60, attack: 62, defense: 63, speed: 60, special: 80 },\n expGroup: \"medium_slow\",\n evolutionChainId: 1,\n rarity: \"uncommon\",\n catchRate: 45,\n description: \"Its codebase blooms after each successful refactor.\",\n },\n {\n id: 3,\n name: \"Venusaur\",\n types: [\"Grass\", \"Poison\"],\n baseStats: { hp: 80, attack: 82, defense: 83, speed: 80, special: 100 },\n expGroup: \"medium_slow\",\n evolutionChainId: 1,\n rarity: \"uncommon\",\n catchRate: 45,\n description: \"A fully-deployed app in production with zero downtime.\",\n },\n\n // \u2500\u2500 Charmander line (chain 2) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 4,\n name: \"Charmander\",\n types: [\"Fire\"],\n baseStats: { hp: 39, attack: 52, defense: 43, speed: 65, special: 50 },\n expGroup: \"medium_slow\",\n evolutionChainId: 2,\n rarity: \"uncommon\",\n catchRate: 45,\n description: \"Its tail flame flickers when a hot-reload completes.\",\n },\n {\n id: 5,\n name: \"Charmeleon\",\n types: [\"Fire\"],\n baseStats: { hp: 58, attack: 64, defense: 58, speed: 80, special: 65 },\n expGroup: \"medium_slow\",\n evolutionChainId: 2,\n rarity: \"uncommon\",\n catchRate: 45,\n description: \"Aggressively refactors legacy code with fiery PRs.\",\n },\n {\n id: 6,\n name: \"Charizard\",\n types: [\"Fire\", \"Flying\"],\n baseStats: { hp: 78, attack: 84, defense: 78, speed: 100, special: 85 },\n expGroup: \"medium_slow\",\n evolutionChainId: 2,\n rarity: \"uncommon\",\n catchRate: 45,\n description: \"Deploys microservices at scale from 30,000 feet.\",\n },\n\n // \u2500\u2500 Squirtle line (chain 3) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 7,\n name: \"Squirtle\",\n types: [\"Water\"],\n baseStats: { hp: 44, attack: 48, defense: 65, speed: 43, special: 50 },\n expGroup: \"medium_slow\",\n evolutionChainId: 3,\n rarity: \"uncommon\",\n catchRate: 45,\n description: \"Puts out fires in production with calm precision.\",\n },\n {\n id: 8,\n name: \"Wartortle\",\n types: [\"Water\"],\n baseStats: { hp: 59, attack: 63, defense: 80, speed: 58, special: 65 },\n expGroup: \"medium_slow\",\n evolutionChainId: 3,\n rarity: \"uncommon\",\n catchRate: 45,\n description: \"Its fluffy tail hides a robust error-handling layer.\",\n },\n {\n id: 9,\n name: \"Blastoise\",\n types: [\"Water\"],\n baseStats: { hp: 79, attack: 83, defense: 100, speed: 78, special: 85 },\n expGroup: \"medium_slow\",\n evolutionChainId: 3,\n rarity: \"uncommon\",\n catchRate: 45,\n description: \"Dual cannons blast through integration test suites.\",\n },\n\n // \u2500\u2500 Caterpie line (chain 4) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 10,\n name: \"Caterpie\",\n types: [\"Bug\"],\n baseStats: { hp: 45, attack: 30, defense: 35, speed: 45, special: 20 },\n expGroup: \"medium_fast\",\n evolutionChainId: 4,\n rarity: \"common\",\n catchRate: 255,\n description: \"Crawls through your codebase finding tiny bugs.\",\n },\n {\n id: 11,\n name: \"Metapod\",\n types: [\"Bug\"],\n baseStats: { hp: 50, attack: 20, defense: 55, speed: 30, special: 25 },\n expGroup: \"medium_fast\",\n evolutionChainId: 4,\n rarity: \"common\",\n catchRate: 120,\n description: \"Hardens code with type annotations and waits to ship.\",\n },\n {\n id: 12,\n name: \"Butterfree\",\n types: [\"Bug\", \"Flying\"],\n baseStats: { hp: 60, attack: 45, defense: 50, speed: 70, special: 80 },\n expGroup: \"medium_fast\",\n evolutionChainId: 4,\n rarity: \"common\",\n catchRate: 45,\n description: \"Spreads beautiful documentation across every module.\",\n },\n\n // \u2500\u2500 Weedle line (chain 5) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 13,\n name: \"Weedle\",\n types: [\"Bug\", \"Poison\"],\n baseStats: { hp: 40, attack: 35, defense: 30, speed: 50, special: 20 },\n expGroup: \"medium_fast\",\n evolutionChainId: 5,\n rarity: \"common\",\n catchRate: 255,\n description: \"Injects subtle bugs that only appear in production.\",\n },\n {\n id: 14,\n name: \"Kakuna\",\n types: [\"Bug\", \"Poison\"],\n baseStats: { hp: 45, attack: 25, defense: 50, speed: 35, special: 25 },\n expGroup: \"medium_fast\",\n evolutionChainId: 5,\n rarity: \"common\",\n catchRate: 120,\n description: \"Sits in code review limbo, hardening its defenses.\",\n },\n {\n id: 15,\n name: \"Beedrill\",\n types: [\"Bug\", \"Poison\"],\n baseStats: { hp: 65, attack: 80, defense: 40, speed: 75, special: 45 },\n expGroup: \"medium_fast\",\n evolutionChainId: 5,\n rarity: \"common\",\n catchRate: 45,\n description: \"Drills through bug backlogs with twin stingers.\",\n },\n\n // \u2500\u2500 Pidgey line (chain 6) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 16,\n name: \"Pidgey\",\n types: [\"Normal\", \"Flying\"],\n baseStats: { hp: 40, attack: 45, defense: 40, speed: 56, special: 35 },\n expGroup: \"medium_slow\",\n evolutionChainId: 6,\n rarity: \"common\",\n catchRate: 255,\n description: \"The first commit of every project \u2014 small but brave.\",\n },\n {\n id: 17,\n name: \"Pidgeotto\",\n types: [\"Normal\", \"Flying\"],\n baseStats: { hp: 63, attack: 60, defense: 55, speed: 71, special: 50 },\n expGroup: \"medium_slow\",\n evolutionChainId: 6,\n rarity: \"common\",\n catchRate: 120,\n description: \"Scouts the codebase for unused imports from above.\",\n },\n {\n id: 18,\n name: \"Pidgeot\",\n types: [\"Normal\", \"Flying\"],\n baseStats: { hp: 83, attack: 80, defense: 75, speed: 91, special: 70 },\n expGroup: \"medium_slow\",\n evolutionChainId: 6,\n rarity: \"common\",\n catchRate: 45,\n description: \"Delivers hotfixes at mach speed across environments.\",\n },\n\n // \u2500\u2500 Rattata line (chain 7) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 19,\n name: \"Rattata\",\n types: [\"Normal\"],\n baseStats: { hp: 30, attack: 56, defense: 35, speed: 72, special: 25 },\n expGroup: \"medium_fast\",\n evolutionChainId: 7,\n rarity: \"common\",\n catchRate: 255,\n description: \"Gnaws through spaghetti code one line at a time.\",\n },\n {\n id: 20,\n name: \"Raticate\",\n types: [\"Normal\"],\n baseStats: { hp: 55, attack: 81, defense: 60, speed: 97, special: 50 },\n expGroup: \"medium_fast\",\n evolutionChainId: 7,\n rarity: \"common\",\n catchRate: 127,\n description: \"Chews through technical debt with razor-sharp teeth.\",\n },\n\n // \u2500\u2500 Spearow line (chain 8) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 21,\n name: \"Spearow\",\n types: [\"Normal\", \"Flying\"],\n baseStats: { hp: 40, attack: 60, defense: 30, speed: 70, special: 31 },\n expGroup: \"medium_fast\",\n evolutionChainId: 8,\n rarity: \"common\",\n catchRate: 255,\n description: \"Angrily squawks at every linting error it finds.\",\n },\n {\n id: 22,\n name: \"Fearow\",\n types: [\"Normal\", \"Flying\"],\n baseStats: { hp: 65, attack: 90, defense: 65, speed: 100, special: 61 },\n expGroup: \"medium_fast\",\n evolutionChainId: 8,\n rarity: \"common\",\n catchRate: 90,\n description: \"Its long beak drills deep into nested callback hell.\",\n },\n\n // \u2500\u2500 Ekans line (chain 9) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 23,\n name: \"Ekans\",\n types: [\"Poison\"],\n baseStats: { hp: 35, attack: 60, defense: 44, speed: 55, special: 40 },\n expGroup: \"medium_fast\",\n evolutionChainId: 9,\n rarity: \"common\",\n catchRate: 255,\n description: \"Slithers through your code looking for Python jokes.\",\n },\n {\n id: 24,\n name: \"Arbok\",\n types: [\"Poison\"],\n baseStats: { hp: 60, attack: 85, defense: 69, speed: 80, special: 65 },\n expGroup: \"medium_fast\",\n evolutionChainId: 9,\n rarity: \"common\",\n catchRate: 90,\n description: \"Its hood pattern warns of deprecated API usage.\",\n },\n\n // \u2500\u2500 Pikachu line (chain 10) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 25,\n name: \"Pikachu\",\n types: [\"Electric\"],\n baseStats: { hp: 35, attack: 55, defense: 30, speed: 90, special: 50 },\n expGroup: \"medium_fast\",\n evolutionChainId: 10,\n rarity: \"uncommon\",\n catchRate: 190,\n description: \"Sparks of inspiration for every new feature branch.\",\n },\n {\n id: 26,\n name: \"Raichu\",\n types: [\"Electric\"],\n baseStats: { hp: 60, attack: 90, defense: 55, speed: 100, special: 90 },\n expGroup: \"medium_fast\",\n evolutionChainId: 10,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Overclocked and shipping features at lightning speed.\",\n },\n\n // \u2500\u2500 Sandshrew line (chain 11) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 27,\n name: \"Sandshrew\",\n types: [\"Ground\"],\n baseStats: { hp: 50, attack: 75, defense: 85, speed: 40, special: 30 },\n expGroup: \"medium_fast\",\n evolutionChainId: 11,\n rarity: \"common\",\n catchRate: 255,\n description: \"Digs through stack traces to find root causes.\",\n },\n {\n id: 28,\n name: \"Sandslash\",\n types: [\"Ground\"],\n baseStats: { hp: 75, attack: 100, defense: 110, speed: 65, special: 55 },\n expGroup: \"medium_fast\",\n evolutionChainId: 11,\n rarity: \"common\",\n catchRate: 90,\n description: \"Slashes through merge conflicts with sharp claws.\",\n },\n\n // \u2500\u2500 Nidoran\u2640 line (chain 12) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 29,\n name: \"Nidoran\u2640\",\n types: [\"Poison\"],\n baseStats: { hp: 55, attack: 47, defense: 52, speed: 41, special: 40 },\n expGroup: \"medium_slow\",\n evolutionChainId: 12,\n rarity: \"common\",\n catchRate: 235,\n description: \"A small but venomous code reviewer.\",\n },\n {\n id: 30,\n name: \"Nidorina\",\n types: [\"Poison\"],\n baseStats: { hp: 70, attack: 62, defense: 67, speed: 56, special: 55 },\n expGroup: \"medium_slow\",\n evolutionChainId: 12,\n rarity: \"common\",\n catchRate: 120,\n description: \"Files detailed bug reports with surgical precision.\",\n },\n {\n id: 31,\n name: \"Nidoqueen\",\n types: [\"Poison\", \"Ground\"],\n baseStats: { hp: 90, attack: 82, defense: 87, speed: 76, special: 75 },\n expGroup: \"medium_slow\",\n evolutionChainId: 12,\n rarity: \"uncommon\",\n catchRate: 45,\n description: \"Reigns over the CI pipeline with an iron claw.\",\n },\n\n // \u2500\u2500 Nidoran\u2642 line (chain 13) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 32,\n name: \"Nidoran\u2642\",\n types: [\"Poison\"],\n baseStats: { hp: 46, attack: 57, defense: 40, speed: 50, special: 40 },\n expGroup: \"medium_slow\",\n evolutionChainId: 13,\n rarity: \"common\",\n catchRate: 235,\n description: \"Pokes holes in flawed logic with its tiny horn.\",\n },\n {\n id: 33,\n name: \"Nidorino\",\n types: [\"Poison\"],\n baseStats: { hp: 61, attack: 72, defense: 57, speed: 65, special: 55 },\n expGroup: \"medium_slow\",\n evolutionChainId: 13,\n rarity: \"common\",\n catchRate: 120,\n description: \"Charges through code reviews leaving no bug alive.\",\n },\n {\n id: 34,\n name: \"Nidoking\",\n types: [\"Poison\", \"Ground\"],\n baseStats: { hp: 81, attack: 92, defense: 77, speed: 85, special: 75 },\n expGroup: \"medium_slow\",\n evolutionChainId: 13,\n rarity: \"uncommon\",\n catchRate: 45,\n description: \"Commands the deployment army with absolute authority.\",\n },\n\n // \u2500\u2500 Clefairy line (chain 14) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 35,\n name: \"Clefairy\",\n types: [\"Normal\"],\n baseStats: { hp: 70, attack: 45, defense: 48, speed: 35, special: 60 },\n expGroup: \"fast\",\n evolutionChainId: 14,\n rarity: \"uncommon\",\n catchRate: 150,\n description: \"Waves its fingers and magically fixes build errors.\",\n },\n {\n id: 36,\n name: \"Clefable\",\n types: [\"Normal\"],\n baseStats: { hp: 95, attack: 70, defense: 73, speed: 60, special: 85 },\n expGroup: \"fast\",\n evolutionChainId: 14,\n rarity: \"uncommon\",\n catchRate: 25,\n description: \"Its metronome randomly picks the perfect algorithm.\",\n },\n\n // \u2500\u2500 Vulpix line (chain 15) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 37,\n name: \"Vulpix\",\n types: [\"Fire\"],\n baseStats: { hp: 38, attack: 41, defense: 40, speed: 65, special: 65 },\n expGroup: \"medium_fast\",\n evolutionChainId: 15,\n rarity: \"uncommon\",\n catchRate: 190,\n description: \"Six tails, six microservices, all perfectly split.\",\n },\n {\n id: 38,\n name: \"Ninetales\",\n types: [\"Fire\"],\n baseStats: { hp: 73, attack: 76, defense: 75, speed: 100, special: 100 },\n expGroup: \"medium_fast\",\n evolutionChainId: 15,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Lives for 1000 sprints and remembers every retro.\",\n },\n\n // \u2500\u2500 Jigglypuff line (chain 16) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 39,\n name: \"Jigglypuff\",\n types: [\"Normal\"],\n baseStats: { hp: 115, attack: 45, defense: 20, speed: 20, special: 25 },\n expGroup: \"fast\",\n evolutionChainId: 16,\n rarity: \"common\",\n catchRate: 170,\n description: \"Sings your linter to sleep so it stops complaining.\",\n },\n {\n id: 40,\n name: \"Wigglytuff\",\n types: [\"Normal\"],\n baseStats: { hp: 140, attack: 70, defense: 45, speed: 45, special: 50 },\n expGroup: \"fast\",\n evolutionChainId: 16,\n rarity: \"common\",\n catchRate: 50,\n description: \"Inflates estimates until deadlines feel comfortable.\",\n },\n\n // \u2500\u2500 Zubat line (chain 17) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 41,\n name: \"Zubat\",\n types: [\"Poison\", \"Flying\"],\n baseStats: { hp: 40, attack: 45, defense: 35, speed: 55, special: 40 },\n expGroup: \"medium_fast\",\n evolutionChainId: 17,\n rarity: \"common\",\n catchRate: 255,\n description: \"Appears in every cave and every node_modules folder.\",\n },\n {\n id: 42,\n name: \"Golbat\",\n types: [\"Poison\", \"Flying\"],\n baseStats: { hp: 75, attack: 80, defense: 70, speed: 90, special: 75 },\n expGroup: \"medium_fast\",\n evolutionChainId: 17,\n rarity: \"common\",\n catchRate: 90,\n description: \"Drains memory leaks dry with its gaping mouth.\",\n },\n\n // \u2500\u2500 Oddish line (chain 18) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 43,\n name: \"Oddish\",\n types: [\"Grass\", \"Poison\"],\n baseStats: { hp: 45, attack: 50, defense: 55, speed: 30, special: 75 },\n expGroup: \"medium_slow\",\n evolutionChainId: 18,\n rarity: \"common\",\n catchRate: 255,\n description: \"Plants seeds of good architecture in every repo.\",\n },\n {\n id: 44,\n name: \"Gloom\",\n types: [\"Grass\", \"Poison\"],\n baseStats: { hp: 60, attack: 65, defense: 70, speed: 40, special: 85 },\n expGroup: \"medium_slow\",\n evolutionChainId: 18,\n rarity: \"common\",\n catchRate: 120,\n description: \"Its stinky code smell reveals hidden anti-patterns.\",\n },\n {\n id: 45,\n name: \"Vileplume\",\n types: [\"Grass\", \"Poison\"],\n baseStats: { hp: 75, attack: 80, defense: 85, speed: 50, special: 100 },\n expGroup: \"medium_slow\",\n evolutionChainId: 18,\n rarity: \"uncommon\",\n catchRate: 45,\n description: \"Releases toxic spore clouds of breaking changes.\",\n },\n\n // \u2500\u2500 Paras line (chain 19) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 46,\n name: \"Paras\",\n types: [\"Bug\", \"Grass\"],\n baseStats: { hp: 35, attack: 70, defense: 55, speed: 25, special: 55 },\n expGroup: \"medium_fast\",\n evolutionChainId: 19,\n rarity: \"common\",\n catchRate: 190,\n description: \"Parasitic dependencies slowly take over your build.\",\n },\n {\n id: 47,\n name: \"Parasect\",\n types: [\"Bug\", \"Grass\"],\n baseStats: { hp: 60, attack: 95, defense: 80, speed: 30, special: 80 },\n expGroup: \"medium_fast\",\n evolutionChainId: 19,\n rarity: \"common\",\n catchRate: 75,\n description: \"Fully consumed by its dependency tree mushroom.\",\n },\n\n // \u2500\u2500 Venonat line (chain 20) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 48,\n name: \"Venonat\",\n types: [\"Bug\", \"Poison\"],\n baseStats: { hp: 60, attack: 55, defense: 50, speed: 45, special: 40 },\n expGroup: \"medium_fast\",\n evolutionChainId: 20,\n rarity: \"common\",\n catchRate: 190,\n description: \"Big compound eyes spot off-by-one errors instantly.\",\n },\n {\n id: 49,\n name: \"Venomoth\",\n types: [\"Bug\", \"Poison\"],\n baseStats: { hp: 70, attack: 65, defense: 60, speed: 90, special: 90 },\n expGroup: \"medium_fast\",\n evolutionChainId: 20,\n rarity: \"common\",\n catchRate: 75,\n description: \"Attracted to the light of your monitor at 3 AM.\",\n },\n\n // \u2500\u2500 Diglett line (chain 21) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 50,\n name: \"Diglett\",\n types: [\"Ground\"],\n baseStats: { hp: 10, attack: 55, defense: 25, speed: 95, special: 45 },\n expGroup: \"medium_fast\",\n evolutionChainId: 21,\n rarity: \"common\",\n catchRate: 255,\n description: \"Tunnels through layers of abstraction underground.\",\n },\n {\n id: 51,\n name: \"Dugtrio\",\n types: [\"Ground\"],\n baseStats: { hp: 35, attack: 80, defense: 50, speed: 120, special: 70 },\n expGroup: \"medium_fast\",\n evolutionChainId: 21,\n rarity: \"common\",\n catchRate: 50,\n description: \"Three heads, three parallel threads, zero deadlocks.\",\n },\n\n // \u2500\u2500 Meowth line (chain 22) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 52,\n name: \"Meowth\",\n types: [\"Normal\"],\n baseStats: { hp: 40, attack: 45, defense: 35, speed: 90, special: 40 },\n expGroup: \"medium_fast\",\n evolutionChainId: 22,\n rarity: \"common\",\n catchRate: 255,\n description: \"Collects shiny GitHub stars with Pay Day commits.\",\n },\n {\n id: 53,\n name: \"Persian\",\n types: [\"Normal\"],\n baseStats: { hp: 65, attack: 70, defense: 60, speed: 115, special: 65 },\n expGroup: \"medium_fast\",\n evolutionChainId: 22,\n rarity: \"common\",\n catchRate: 90,\n description: \"Elegantly refactors code with aristocratic taste.\",\n },\n\n // \u2500\u2500 Psyduck line (chain 23) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 54,\n name: \"Psyduck\",\n types: [\"Water\"],\n baseStats: { hp: 50, attack: 52, defense: 48, speed: 55, special: 50 },\n expGroup: \"medium_fast\",\n evolutionChainId: 23,\n rarity: \"common\",\n catchRate: 190,\n description: \"Perpetual headache from reading undocumented APIs.\",\n },\n {\n id: 55,\n name: \"Golduck\",\n types: [\"Water\"],\n baseStats: { hp: 80, attack: 82, defense: 78, speed: 85, special: 80 },\n expGroup: \"medium_fast\",\n evolutionChainId: 23,\n rarity: \"common\",\n catchRate: 75,\n description: \"Headache cleared \u2014 now streams data at full speed.\",\n },\n\n // \u2500\u2500 Mankey line (chain 24) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 56,\n name: \"Mankey\",\n types: [\"Fighting\"],\n baseStats: { hp: 40, attack: 80, defense: 35, speed: 70, special: 35 },\n expGroup: \"medium_fast\",\n evolutionChainId: 24,\n rarity: \"common\",\n catchRate: 190,\n description: \"Rage-codes after the third failed CI build.\",\n },\n {\n id: 57,\n name: \"Primeape\",\n types: [\"Fighting\"],\n baseStats: { hp: 65, attack: 105, defense: 60, speed: 95, special: 60 },\n expGroup: \"medium_fast\",\n evolutionChainId: 24,\n rarity: \"common\",\n catchRate: 75,\n description: \"Permanently angry at whoever wrote this regex.\",\n },\n\n // \u2500\u2500 Growlithe line (chain 25) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 58,\n name: \"Growlithe\",\n types: [\"Fire\"],\n baseStats: { hp: 55, attack: 70, defense: 45, speed: 60, special: 50 },\n expGroup: \"slow\",\n evolutionChainId: 25,\n rarity: \"uncommon\",\n catchRate: 190,\n description: \"A loyal guard dog watching over your test suite.\",\n },\n {\n id: 59,\n name: \"Arcanine\",\n types: [\"Fire\"],\n baseStats: { hp: 90, attack: 110, defense: 80, speed: 95, special: 80 },\n expGroup: \"slow\",\n evolutionChainId: 25,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Legendary speed \u2014 ships features before the sprint ends.\",\n },\n\n // \u2500\u2500 Poliwag line (chain 26) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 60,\n name: \"Poliwag\",\n types: [\"Water\"],\n baseStats: { hp: 40, attack: 50, defense: 40, speed: 90, special: 40 },\n expGroup: \"medium_slow\",\n evolutionChainId: 26,\n rarity: \"common\",\n catchRate: 255,\n description: \"Its spiral belly visualizes recursive algorithms.\",\n },\n {\n id: 61,\n name: \"Poliwhirl\",\n types: [\"Water\"],\n baseStats: { hp: 65, attack: 65, defense: 65, speed: 90, special: 50 },\n expGroup: \"medium_slow\",\n evolutionChainId: 26,\n rarity: \"common\",\n catchRate: 120,\n description: \"Hypnotizes reviewers into approving any PR.\",\n },\n {\n id: 62,\n name: \"Poliwrath\",\n types: [\"Water\", \"Fighting\"],\n baseStats: { hp: 90, attack: 85, defense: 95, speed: 70, special: 70 },\n expGroup: \"medium_slow\",\n evolutionChainId: 26,\n rarity: \"uncommon\",\n catchRate: 45,\n description: \"Punches through blockers in the sprint backlog.\",\n },\n\n // \u2500\u2500 Abra line (chain 27) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 63,\n name: \"Abra\",\n types: [\"Psychic\"],\n baseStats: { hp: 25, attack: 20, defense: 15, speed: 90, special: 105 },\n expGroup: \"medium_slow\",\n evolutionChainId: 27,\n rarity: \"uncommon\",\n catchRate: 200,\n description: \"Teleports away before you can finish code review.\",\n },\n {\n id: 64,\n name: \"Kadabra\",\n types: [\"Psychic\"],\n baseStats: { hp: 40, attack: 35, defense: 30, speed: 105, special: 120 },\n expGroup: \"medium_slow\",\n evolutionChainId: 27,\n rarity: \"uncommon\",\n catchRate: 100,\n description: \"Bends spoons and type systems with psychic power.\",\n },\n {\n id: 65,\n name: \"Alakazam\",\n types: [\"Psychic\"],\n baseStats: { hp: 55, attack: 50, defense: 45, speed: 120, special: 135 },\n expGroup: \"medium_slow\",\n evolutionChainId: 27,\n rarity: \"uncommon\",\n catchRate: 50,\n description: \"IQ of 5000 \u2014 solves NP-hard problems before lunch.\",\n },\n\n // \u2500\u2500 Machop line (chain 28) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 66,\n name: \"Machop\",\n types: [\"Fighting\"],\n baseStats: { hp: 70, attack: 80, defense: 50, speed: 35, special: 35 },\n expGroup: \"medium_slow\",\n evolutionChainId: 28,\n rarity: \"common\",\n catchRate: 180,\n description: \"Brute-forces solutions when elegance fails.\",\n },\n {\n id: 67,\n name: \"Machoke\",\n types: [\"Fighting\"],\n baseStats: { hp: 80, attack: 100, defense: 70, speed: 45, special: 50 },\n expGroup: \"medium_slow\",\n evolutionChainId: 28,\n rarity: \"common\",\n catchRate: 90,\n description: \"Flexes while benchmarking O(n) algorithms.\",\n },\n {\n id: 68,\n name: \"Machamp\",\n types: [\"Fighting\"],\n baseStats: { hp: 90, attack: 130, defense: 80, speed: 55, special: 65 },\n expGroup: \"medium_slow\",\n evolutionChainId: 28,\n rarity: \"uncommon\",\n catchRate: 45,\n description: \"Four arms type on four keyboards simultaneously.\",\n },\n\n // \u2500\u2500 Bellsprout line (chain 29) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 69,\n name: \"Bellsprout\",\n types: [\"Grass\", \"Poison\"],\n baseStats: { hp: 50, attack: 75, defense: 35, speed: 40, special: 70 },\n expGroup: \"medium_slow\",\n evolutionChainId: 29,\n rarity: \"common\",\n catchRate: 255,\n description: \"Sprouts new feature branches in every direction.\",\n },\n {\n id: 70,\n name: \"Weepinbell\",\n types: [\"Grass\", \"Poison\"],\n baseStats: { hp: 65, attack: 90, defense: 50, speed: 55, special: 85 },\n expGroup: \"medium_slow\",\n evolutionChainId: 29,\n rarity: \"common\",\n catchRate: 120,\n description: \"Weeps acidic tears over poorly formatted JSON.\",\n },\n {\n id: 71,\n name: \"Victreebel\",\n types: [\"Grass\", \"Poison\"],\n baseStats: { hp: 80, attack: 105, defense: 65, speed: 70, special: 100 },\n expGroup: \"medium_slow\",\n evolutionChainId: 29,\n rarity: \"uncommon\",\n catchRate: 45,\n description: \"Devours entire legacy codebases for breakfast.\",\n },\n\n // \u2500\u2500 Tentacool line (chain 30) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 72,\n name: \"Tentacool\",\n types: [\"Water\", \"Poison\"],\n baseStats: { hp: 40, attack: 40, defense: 35, speed: 70, special: 100 },\n expGroup: \"slow\",\n evolutionChainId: 30,\n rarity: \"common\",\n catchRate: 190,\n description: \"Wraps tentacles around every open port it finds.\",\n },\n {\n id: 73,\n name: \"Tentacruel\",\n types: [\"Water\", \"Poison\"],\n baseStats: { hp: 80, attack: 70, defense: 65, speed: 100, special: 120 },\n expGroup: \"slow\",\n evolutionChainId: 30,\n rarity: \"common\",\n catchRate: 60,\n description: \"80 tentacles manage 80 microservice connections.\",\n },\n\n // \u2500\u2500 Geodude line (chain 31) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 74,\n name: \"Geodude\",\n types: [\"Rock\", \"Ground\"],\n baseStats: { hp: 40, attack: 80, defense: 100, speed: 20, special: 30 },\n expGroup: \"medium_slow\",\n evolutionChainId: 31,\n rarity: \"common\",\n catchRate: 255,\n description: \"Rock-solid test coverage that never crumbles.\",\n },\n {\n id: 75,\n name: \"Graveler\",\n types: [\"Rock\", \"Ground\"],\n baseStats: { hp: 55, attack: 95, defense: 115, speed: 35, special: 45 },\n expGroup: \"medium_slow\",\n evolutionChainId: 31,\n rarity: \"common\",\n catchRate: 120,\n description: \"Rolls downhill through your deployment pipeline.\",\n },\n {\n id: 76,\n name: \"Golem\",\n types: [\"Rock\", \"Ground\"],\n baseStats: { hp: 80, attack: 110, defense: 130, speed: 45, special: 55 },\n expGroup: \"medium_slow\",\n evolutionChainId: 31,\n rarity: \"uncommon\",\n catchRate: 45,\n description: \"An immovable fortress of defensive programming.\",\n },\n\n // \u2500\u2500 Ponyta line (chain 32) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 77,\n name: \"Ponyta\",\n types: [\"Fire\"],\n baseStats: { hp: 50, attack: 85, defense: 55, speed: 90, special: 65 },\n expGroup: \"medium_fast\",\n evolutionChainId: 32,\n rarity: \"common\",\n catchRate: 190,\n description: \"Gallops through PRs at blazing review speed.\",\n },\n {\n id: 78,\n name: \"Rapidash\",\n types: [\"Fire\"],\n baseStats: { hp: 65, attack: 100, defense: 70, speed: 105, special: 80 },\n expGroup: \"medium_fast\",\n evolutionChainId: 32,\n rarity: \"common\",\n catchRate: 60,\n description: \"The fastest hot-reload in the entire stable.\",\n },\n\n // \u2500\u2500 Slowpoke line (chain 33) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 79,\n name: \"Slowpoke\",\n types: [\"Water\", \"Psychic\"],\n baseStats: { hp: 90, attack: 65, defense: 65, speed: 15, special: 40 },\n expGroup: \"medium_fast\",\n evolutionChainId: 33,\n rarity: \"common\",\n catchRate: 190,\n description: \"Still processing the build from three hours ago.\",\n },\n {\n id: 80,\n name: \"Slowbro\",\n types: [\"Water\", \"Psychic\"],\n baseStats: { hp: 95, attack: 75, defense: 110, speed: 30, special: 80 },\n expGroup: \"medium_fast\",\n evolutionChainId: 33,\n rarity: \"common\",\n catchRate: 75,\n description: \"Finally understood the bug \u2014 after the fix shipped.\",\n },\n\n // \u2500\u2500 Magnemite line (chain 34) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 81,\n name: \"Magnemite\",\n types: [\"Electric\"],\n baseStats: { hp: 25, attack: 35, defense: 70, speed: 45, special: 95 },\n expGroup: \"medium_fast\",\n evolutionChainId: 34,\n rarity: \"common\",\n catchRate: 190,\n description: \"Magnetically attracted to poorly shielded APIs.\",\n },\n {\n id: 82,\n name: \"Magneton\",\n types: [\"Electric\"],\n baseStats: { hp: 50, attack: 60, defense: 95, speed: 70, special: 120 },\n expGroup: \"medium_fast\",\n evolutionChainId: 34,\n rarity: \"common\",\n catchRate: 60,\n description: \"Three units linked \u2014 a perfectly load-balanced cluster.\",\n },\n\n // \u2500\u2500 Farfetch'd (chain 35) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 83,\n name: \"Farfetch'd\",\n types: [\"Normal\", \"Flying\"],\n baseStats: { hp: 52, attack: 65, defense: 55, speed: 60, special: 58 },\n expGroup: \"medium_fast\",\n evolutionChainId: 35,\n rarity: \"uncommon\",\n catchRate: 45,\n description: \"Carries a leek and a far-fetched technical proposal.\",\n },\n\n // \u2500\u2500 Doduo line (chain 36) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 84,\n name: \"Doduo\",\n types: [\"Normal\", \"Flying\"],\n baseStats: { hp: 35, attack: 85, defense: 45, speed: 75, special: 35 },\n expGroup: \"medium_fast\",\n evolutionChainId: 36,\n rarity: \"common\",\n catchRate: 190,\n description: \"Two heads pair-programming on the same keyboard.\",\n },\n {\n id: 85,\n name: \"Dodrio\",\n types: [\"Normal\", \"Flying\"],\n baseStats: { hp: 60, attack: 110, defense: 70, speed: 100, special: 60 },\n expGroup: \"medium_fast\",\n evolutionChainId: 36,\n rarity: \"common\",\n catchRate: 45,\n description: \"Three heads mob-programming at triple velocity.\",\n },\n\n // \u2500\u2500 Seel line (chain 37) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 86,\n name: \"Seel\",\n types: [\"Water\"],\n baseStats: { hp: 65, attack: 45, defense: 55, speed: 45, special: 70 },\n expGroup: \"medium_fast\",\n evolutionChainId: 37,\n rarity: \"common\",\n catchRate: 190,\n description: \"Seels the deal on every code review approval.\",\n },\n {\n id: 87,\n name: \"Dewgong\",\n types: [\"Water\", \"Ice\"],\n baseStats: { hp: 90, attack: 70, defense: 80, speed: 70, special: 95 },\n expGroup: \"medium_fast\",\n evolutionChainId: 37,\n rarity: \"common\",\n catchRate: 75,\n description: \"Gracefully glides through frozen legacy codebases.\",\n },\n\n // \u2500\u2500 Grimer line (chain 38) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 88,\n name: \"Grimer\",\n types: [\"Poison\"],\n baseStats: { hp: 80, attack: 80, defense: 50, speed: 25, special: 40 },\n expGroup: \"medium_fast\",\n evolutionChainId: 38,\n rarity: \"common\",\n catchRate: 190,\n description: \"Born from toxic waste left by npm install.\",\n },\n {\n id: 89,\n name: \"Muk\",\n types: [\"Poison\"],\n baseStats: { hp: 105, attack: 105, defense: 75, speed: 50, special: 65 },\n expGroup: \"medium_fast\",\n evolutionChainId: 38,\n rarity: \"common\",\n catchRate: 75,\n description: \"An amorphous blob of unmaintainable spaghetti code.\",\n },\n\n // \u2500\u2500 Shellder line (chain 39) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 90,\n name: \"Shellder\",\n types: [\"Water\"],\n baseStats: { hp: 30, attack: 65, defense: 100, speed: 40, special: 45 },\n expGroup: \"slow\",\n evolutionChainId: 39,\n rarity: \"common\",\n catchRate: 190,\n description: \"Clamps shut on any PR that lacks test coverage.\",\n },\n {\n id: 91,\n name: \"Cloyster\",\n types: [\"Water\", \"Ice\"],\n baseStats: { hp: 50, attack: 95, defense: 180, speed: 70, special: 85 },\n expGroup: \"slow\",\n evolutionChainId: 39,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"Impenetrable defense \u2014 180 DEF, zero vulnerabilities.\",\n },\n\n // \u2500\u2500 Gastly line (chain 40) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 92,\n name: \"Gastly\",\n types: [\"Ghost\", \"Poison\"],\n baseStats: { hp: 30, attack: 35, defense: 30, speed: 80, special: 100 },\n expGroup: \"medium_slow\",\n evolutionChainId: 40,\n rarity: \"common\",\n catchRate: 190,\n description: \"A phantom bug that vanishes when you add logging.\",\n },\n {\n id: 93,\n name: \"Haunter\",\n types: [\"Ghost\", \"Poison\"],\n baseStats: { hp: 45, attack: 50, defense: 45, speed: 95, special: 115 },\n expGroup: \"medium_slow\",\n evolutionChainId: 40,\n rarity: \"common\",\n catchRate: 90,\n description: \"Haunts your codebase with race conditions at night.\",\n },\n {\n id: 94,\n name: \"Gengar\",\n types: [\"Ghost\", \"Poison\"],\n baseStats: { hp: 60, attack: 65, defense: 60, speed: 110, special: 130 },\n expGroup: \"medium_slow\",\n evolutionChainId: 40,\n rarity: \"uncommon\",\n catchRate: 45,\n description: \"Hides in your shadow and whispers edge cases.\",\n },\n\n // \u2500\u2500 Onix (chain 41) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 95,\n name: \"Onix\",\n types: [\"Rock\", \"Ground\"],\n baseStats: { hp: 35, attack: 45, defense: 160, speed: 70, special: 30 },\n expGroup: \"medium_fast\",\n evolutionChainId: 41,\n rarity: \"uncommon\",\n catchRate: 45,\n description: \"A monolith that refuses to be broken into services.\",\n },\n\n // \u2500\u2500 Drowzee line (chain 42) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 96,\n name: \"Drowzee\",\n types: [\"Psychic\"],\n baseStats: { hp: 60, attack: 48, defense: 45, speed: 42, special: 90 },\n expGroup: \"medium_fast\",\n evolutionChainId: 42,\n rarity: \"common\",\n catchRate: 190,\n description: \"Eats your dreams of shipping on time.\",\n },\n {\n id: 97,\n name: \"Hypno\",\n types: [\"Psychic\"],\n baseStats: { hp: 85, attack: 73, defense: 70, speed: 67, special: 115 },\n expGroup: \"medium_fast\",\n evolutionChainId: 42,\n rarity: \"common\",\n catchRate: 75,\n description: \"Hypnotizes you into one more commit before bed.\",\n },\n\n // \u2500\u2500 Krabby line (chain 43) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 98,\n name: \"Krabby\",\n types: [\"Water\"],\n baseStats: { hp: 30, attack: 105, defense: 90, speed: 50, special: 25 },\n expGroup: \"medium_fast\",\n evolutionChainId: 43,\n rarity: \"common\",\n catchRate: 225,\n description: \"Pinches off small bugs with oversized claws.\",\n },\n {\n id: 99,\n name: \"Kingler\",\n types: [\"Water\"],\n baseStats: { hp: 55, attack: 130, defense: 115, speed: 75, special: 50 },\n expGroup: \"medium_fast\",\n evolutionChainId: 43,\n rarity: \"common\",\n catchRate: 60,\n description: \"King of crustacean-driven development.\",\n },\n\n // \u2500\u2500 Voltorb line (chain 44) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 100,\n name: \"Voltorb\",\n types: [\"Electric\"],\n baseStats: { hp: 40, attack: 30, defense: 50, speed: 100, special: 55 },\n expGroup: \"medium_fast\",\n evolutionChainId: 44,\n rarity: \"common\",\n catchRate: 190,\n description: \"Looks like a Pokeball but explodes like rm -rf.\",\n },\n {\n id: 101,\n name: \"Electrode\",\n types: [\"Electric\"],\n baseStats: { hp: 60, attack: 50, defense: 70, speed: 140, special: 80 },\n expGroup: \"medium_fast\",\n evolutionChainId: 44,\n rarity: \"common\",\n catchRate: 60,\n description: \"The fastest self-destruct in deployment history.\",\n },\n\n // \u2500\u2500 Exeggcute line (chain 45) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 102,\n name: \"Exeggcute\",\n types: [\"Grass\", \"Psychic\"],\n baseStats: { hp: 60, attack: 40, defense: 80, speed: 40, special: 60 },\n expGroup: \"slow\",\n evolutionChainId: 45,\n rarity: \"uncommon\",\n catchRate: 90,\n description: \"Six eggs \u2014 six microservices waiting to hatch.\",\n },\n {\n id: 103,\n name: \"Exeggutor\",\n types: [\"Grass\", \"Psychic\"],\n baseStats: { hp: 95, attack: 95, defense: 85, speed: 55, special: 125 },\n expGroup: \"slow\",\n evolutionChainId: 45,\n rarity: \"uncommon\",\n catchRate: 45,\n description: \"Three heads arguing about which framework to use.\",\n },\n\n // \u2500\u2500 Cubone line (chain 46) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 104,\n name: \"Cubone\",\n types: [\"Ground\"],\n baseStats: { hp: 50, attack: 50, defense: 95, speed: 35, special: 40 },\n expGroup: \"medium_fast\",\n evolutionChainId: 46,\n rarity: \"common\",\n catchRate: 190,\n description: \"Mourns its deprecated parent class with a bone club.\",\n },\n {\n id: 105,\n name: \"Marowak\",\n types: [\"Ground\"],\n baseStats: { hp: 60, attack: 80, defense: 110, speed: 45, special: 50 },\n expGroup: \"medium_fast\",\n evolutionChainId: 46,\n rarity: \"common\",\n catchRate: 75,\n description: \"Wields its bone like a seasoned vim power user.\",\n },\n\n // \u2500\u2500 Hitmonlee (chain 47) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 106,\n name: \"Hitmonlee\",\n types: [\"Fighting\"],\n baseStats: { hp: 50, attack: 120, defense: 53, speed: 87, special: 35 },\n expGroup: \"medium_fast\",\n evolutionChainId: 47,\n rarity: \"uncommon\",\n catchRate: 45,\n description: \"Kicks bugs out of the codebase with spring-loaded legs.\",\n },\n\n // \u2500\u2500 Hitmonchan (chain 48) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 107,\n name: \"Hitmonchan\",\n types: [\"Fighting\"],\n baseStats: { hp: 50, attack: 105, defense: 79, speed: 76, special: 35 },\n expGroup: \"medium_fast\",\n evolutionChainId: 48,\n rarity: \"uncommon\",\n catchRate: 45,\n description: \"Punches out rapid-fire commits like a boxing champ.\",\n },\n\n // \u2500\u2500 Lickitung (chain 49) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 108,\n name: \"Lickitung\",\n types: [\"Normal\"],\n baseStats: { hp: 90, attack: 55, defense: 75, speed: 30, special: 60 },\n expGroup: \"medium_fast\",\n evolutionChainId: 49,\n rarity: \"uncommon\",\n catchRate: 45,\n description: \"Licks every file in the repo to mark its territory.\",\n },\n\n // \u2500\u2500 Koffing line (chain 50) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 109,\n name: \"Koffing\",\n types: [\"Poison\"],\n baseStats: { hp: 40, attack: 65, defense: 95, speed: 35, special: 60 },\n expGroup: \"medium_fast\",\n evolutionChainId: 50,\n rarity: \"common\",\n catchRate: 190,\n description: \"Emits toxic fumes of code smell from every method.\",\n },\n {\n id: 110,\n name: \"Weezing\",\n types: [\"Poison\"],\n baseStats: { hp: 65, attack: 90, defense: 120, speed: 60, special: 85 },\n expGroup: \"medium_fast\",\n evolutionChainId: 50,\n rarity: \"common\",\n catchRate: 60,\n description: \"Double the heads, double the code review comments.\",\n },\n\n // \u2500\u2500 Rhyhorn line (chain 51) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 111,\n name: \"Rhyhorn\",\n types: [\"Ground\", \"Rock\"],\n baseStats: { hp: 80, attack: 85, defense: 95, speed: 25, special: 30 },\n expGroup: \"slow\",\n evolutionChainId: 51,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Charges through refactors without looking back.\",\n },\n {\n id: 112,\n name: \"Rhydon\",\n types: [\"Ground\", \"Rock\"],\n baseStats: { hp: 105, attack: 130, defense: 120, speed: 40, special: 45 },\n expGroup: \"slow\",\n evolutionChainId: 51,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"Drills through database schemas like solid rock.\",\n },\n\n // \u2500\u2500 Chansey (chain 52) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 113,\n name: \"Chansey\",\n types: [\"Normal\"],\n baseStats: { hp: 250, attack: 5, defense: 5, speed: 50, special: 105 },\n expGroup: \"fast\",\n evolutionChainId: 52,\n rarity: \"rare\",\n catchRate: 30,\n description: \"Carries a healing egg that restores crashed servers.\",\n },\n\n // \u2500\u2500 Tangela (chain 53) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 114,\n name: \"Tangela\",\n types: [\"Grass\"],\n baseStats: { hp: 65, attack: 55, defense: 115, speed: 60, special: 100 },\n expGroup: \"medium_fast\",\n evolutionChainId: 53,\n rarity: \"uncommon\",\n catchRate: 45,\n description: \"A tangled mess of spaghetti code come to life.\",\n },\n\n // \u2500\u2500 Kangaskhan (chain 54) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 115,\n name: \"Kangaskhan\",\n types: [\"Normal\"],\n baseStats: { hp: 105, attack: 95, defense: 80, speed: 90, special: 40 },\n expGroup: \"medium_fast\",\n evolutionChainId: 54,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Carries a child process in its pouch at all times.\",\n },\n\n // \u2500\u2500 Horsea line (chain 55) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 116,\n name: \"Horsea\",\n types: [\"Water\"],\n baseStats: { hp: 30, attack: 40, defense: 70, speed: 60, special: 70 },\n expGroup: \"medium_fast\",\n evolutionChainId: 55,\n rarity: \"common\",\n catchRate: 225,\n description: \"Sprays ink to obfuscate its source code.\",\n },\n {\n id: 117,\n name: \"Seadra\",\n types: [\"Water\"],\n baseStats: { hp: 55, attack: 65, defense: 95, speed: 85, special: 95 },\n expGroup: \"medium_fast\",\n evolutionChainId: 55,\n rarity: \"common\",\n catchRate: 75,\n description: \"Spins in whirlpools of async/await callbacks.\",\n },\n\n // \u2500\u2500 Goldeen line (chain 56) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 118,\n name: \"Goldeen\",\n types: [\"Water\"],\n baseStats: { hp: 45, attack: 67, defense: 60, speed: 63, special: 50 },\n expGroup: \"medium_fast\",\n evolutionChainId: 56,\n rarity: \"common\",\n catchRate: 225,\n description: \"Splashes uselessly until it learns a real framework.\",\n },\n {\n id: 119,\n name: \"Seaking\",\n types: [\"Water\"],\n baseStats: { hp: 80, attack: 92, defense: 65, speed: 68, special: 80 },\n expGroup: \"medium_fast\",\n evolutionChainId: 56,\n rarity: \"common\",\n catchRate: 60,\n description: \"Its horn pierces through the toughest tech debt.\",\n },\n\n // \u2500\u2500 Staryu line (chain 57) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 120,\n name: \"Staryu\",\n types: [\"Water\"],\n baseStats: { hp: 30, attack: 45, defense: 55, speed: 85, special: 70 },\n expGroup: \"slow\",\n evolutionChainId: 57,\n rarity: \"uncommon\",\n catchRate: 225,\n description: \"Its core gem glows green when all tests pass.\",\n },\n {\n id: 121,\n name: \"Starmie\",\n types: [\"Water\", \"Psychic\"],\n baseStats: { hp: 60, attack: 75, defense: 85, speed: 115, special: 100 },\n expGroup: \"slow\",\n evolutionChainId: 57,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"Spins rapidly generating perfect code coverage.\",\n },\n\n // \u2500\u2500 Mr. Mime (chain 58) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 122,\n name: \"Mr. Mime\",\n types: [\"Psychic\"],\n baseStats: { hp: 40, attack: 45, defense: 65, speed: 90, special: 100 },\n expGroup: \"medium_fast\",\n evolutionChainId: 58,\n rarity: \"uncommon\",\n catchRate: 45,\n description: \"Creates invisible walls of input validation.\",\n },\n\n // \u2500\u2500 Scyther (chain 59) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 123,\n name: \"Scyther\",\n types: [\"Bug\", \"Flying\"],\n baseStats: { hp: 70, attack: 110, defense: 80, speed: 105, special: 55 },\n expGroup: \"medium_fast\",\n evolutionChainId: 59,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Slices through code reviews with mantis precision.\",\n },\n\n // \u2500\u2500 Jynx (chain 60) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 124,\n name: \"Jynx\",\n types: [\"Ice\", \"Psychic\"],\n baseStats: { hp: 65, attack: 50, defense: 35, speed: 95, special: 95 },\n expGroup: \"medium_fast\",\n evolutionChainId: 60,\n rarity: \"uncommon\",\n catchRate: 45,\n description: \"Freezes flaky tests with a psychic stare.\",\n },\n\n // \u2500\u2500 Electabuzz (chain 61) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 125,\n name: \"Electabuzz\",\n types: [\"Electric\"],\n baseStats: { hp: 65, attack: 83, defense: 57, speed: 105, special: 85 },\n expGroup: \"medium_fast\",\n evolutionChainId: 61,\n rarity: \"uncommon\",\n catchRate: 45,\n description: \"Powers through builds with raw electrical energy.\",\n },\n\n // \u2500\u2500 Magmar (chain 62) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 126,\n name: \"Magmar\",\n types: [\"Fire\"],\n baseStats: { hp: 65, attack: 95, defense: 57, speed: 93, special: 85 },\n expGroup: \"medium_fast\",\n evolutionChainId: 62,\n rarity: \"uncommon\",\n catchRate: 45,\n description: \"Burns through CPU cycles with fiery computation.\",\n },\n\n // \u2500\u2500 Pinsir (chain 63) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 127,\n name: \"Pinsir\",\n types: [\"Bug\"],\n baseStats: { hp: 65, attack: 125, defense: 100, speed: 85, special: 55 },\n expGroup: \"slow\",\n evolutionChainId: 63,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Crushes bugs in its pincers with extreme prejudice.\",\n },\n\n // \u2500\u2500 Tauros (chain 64) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 128,\n name: \"Tauros\",\n types: [\"Normal\"],\n baseStats: { hp: 75, attack: 100, defense: 95, speed: 110, special: 70 },\n expGroup: \"slow\",\n evolutionChainId: 64,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Charges through sprint goals like a raging bull.\",\n },\n\n // \u2500\u2500 Magikarp line (chain 65) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 129,\n name: \"Magikarp\",\n types: [\"Water\"],\n baseStats: { hp: 20, attack: 10, defense: 55, speed: 80, special: 20 },\n expGroup: \"slow\",\n evolutionChainId: 65,\n rarity: \"common\",\n catchRate: 255,\n description: \"Splashes helplessly \u2014 but keep leveling it up.\",\n },\n {\n id: 130,\n name: \"Gyarados\",\n types: [\"Water\", \"Flying\"],\n baseStats: { hp: 95, attack: 125, defense: 79, speed: 81, special: 100 },\n expGroup: \"slow\",\n evolutionChainId: 65,\n rarity: \"rare\",\n catchRate: 45,\n description: \"That intern project? It became the main product.\",\n },\n\n // \u2500\u2500 Lapras (chain 66) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 131,\n name: \"Lapras\",\n types: [\"Water\", \"Ice\"],\n baseStats: { hp: 130, attack: 85, defense: 80, speed: 60, special: 95 },\n expGroup: \"slow\",\n evolutionChainId: 66,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Ferries developers safely across the data lake.\",\n },\n\n // \u2500\u2500 Ditto (chain 67) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 132,\n name: \"Ditto\",\n types: [\"Normal\"],\n baseStats: { hp: 48, attack: 48, defense: 48, speed: 48, special: 48 },\n expGroup: \"medium_fast\",\n evolutionChainId: 67,\n rarity: \"uncommon\",\n catchRate: 35,\n description: \"Transforms into whatever interface you need.\",\n },\n\n // \u2500\u2500 Eevee line (chain 68) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 133,\n name: \"Eevee\",\n types: [\"Normal\"],\n baseStats: { hp: 55, attack: 55, defense: 50, speed: 55, special: 65 },\n expGroup: \"medium_fast\",\n evolutionChainId: 68,\n rarity: \"uncommon\",\n catchRate: 45,\n description: \"Unstable DNA \u2014 could evolve into any framework.\",\n },\n {\n id: 134,\n name: \"Vaporeon\",\n types: [\"Water\"],\n baseStats: { hp: 130, attack: 65, defense: 60, speed: 65, special: 110 },\n expGroup: \"medium_fast\",\n evolutionChainId: 68,\n rarity: \"uncommon\",\n catchRate: 45,\n description: \"Flows like water through every data pipeline.\",\n },\n {\n id: 135,\n name: \"Jolteon\",\n types: [\"Electric\"],\n baseStats: { hp: 65, attack: 65, defense: 60, speed: 130, special: 110 },\n expGroup: \"medium_fast\",\n evolutionChainId: 68,\n rarity: \"uncommon\",\n catchRate: 45,\n description: \"Electrifyingly fast iteration on feature branches.\",\n },\n {\n id: 136,\n name: \"Flareon\",\n types: [\"Fire\"],\n baseStats: { hp: 65, attack: 130, defense: 60, speed: 65, special: 110 },\n expGroup: \"medium_fast\",\n evolutionChainId: 68,\n rarity: \"uncommon\",\n catchRate: 45,\n description: \"Sets ablaze any code that fails to meet standards.\",\n },\n\n // \u2500\u2500 Porygon (chain 69) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 137,\n name: \"Porygon\",\n types: [\"Normal\"],\n baseStats: { hp: 65, attack: 60, defense: 70, speed: 40, special: 75 },\n expGroup: \"medium_fast\",\n evolutionChainId: 69,\n rarity: \"uncommon\",\n catchRate: 45,\n description: \"Made entirely of code \u2014 the first digital Pokemon.\",\n },\n\n // \u2500\u2500 Omanyte line (chain 70) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 138,\n name: \"Omanyte\",\n types: [\"Rock\", \"Water\"],\n baseStats: { hp: 35, attack: 40, defense: 100, speed: 35, special: 90 },\n expGroup: \"medium_fast\",\n evolutionChainId: 70,\n rarity: \"uncommon\",\n catchRate: 45,\n description: \"Resurrected from fossilized COBOL source code.\",\n },\n {\n id: 139,\n name: \"Omastar\",\n types: [\"Rock\", \"Water\"],\n baseStats: { hp: 70, attack: 60, defense: 125, speed: 55, special: 115 },\n expGroup: \"medium_fast\",\n evolutionChainId: 70,\n rarity: \"uncommon\",\n catchRate: 45,\n description: \"Ancient wisdom makes it a master of legacy systems.\",\n },\n\n // \u2500\u2500 Kabuto line (chain 71) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 140,\n name: \"Kabuto\",\n types: [\"Rock\", \"Water\"],\n baseStats: { hp: 30, attack: 80, defense: 90, speed: 55, special: 45 },\n expGroup: \"medium_fast\",\n evolutionChainId: 71,\n rarity: \"uncommon\",\n catchRate: 45,\n description: \"A fossil-era bug tracker brought back to life.\",\n },\n {\n id: 141,\n name: \"Kabutops\",\n types: [\"Rock\", \"Water\"],\n baseStats: { hp: 60, attack: 115, defense: 105, speed: 80, special: 70 },\n expGroup: \"medium_fast\",\n evolutionChainId: 71,\n rarity: \"uncommon\",\n catchRate: 45,\n description: \"Scythe arms slice through deprecated code swiftly.\",\n },\n\n // \u2500\u2500 Aerodactyl (chain 72) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 142,\n name: \"Aerodactyl\",\n types: [\"Rock\", \"Flying\"],\n baseStats: { hp: 80, attack: 105, defense: 65, speed: 130, special: 60 },\n expGroup: \"slow\",\n evolutionChainId: 72,\n rarity: \"rare\",\n catchRate: 45,\n description: \"A prehistoric predator revived from amber backups.\",\n },\n\n // \u2500\u2500 Snorlax (chain 73) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 143,\n name: \"Snorlax\",\n types: [\"Normal\"],\n baseStats: { hp: 160, attack: 110, defense: 65, speed: 30, special: 65 },\n expGroup: \"slow\",\n evolutionChainId: 73,\n rarity: \"rare\",\n catchRate: 25,\n description: \"Blocks the deployment path until poked with a PR.\",\n },\n\n // \u2500\u2500 Articuno (chain 74) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 144,\n name: \"Articuno\",\n types: [\"Ice\", \"Flying\"],\n baseStats: { hp: 90, attack: 85, defense: 100, speed: 85, special: 125 },\n expGroup: \"slow\",\n evolutionChainId: 74,\n rarity: \"legendary\",\n catchRate: 3,\n description: \"Freezes production bugs in their tracks instantly.\",\n },\n\n // \u2500\u2500 Zapdos (chain 75) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 145,\n name: \"Zapdos\",\n types: [\"Electric\", \"Flying\"],\n baseStats: { hp: 90, attack: 90, defense: 85, speed: 100, special: 125 },\n expGroup: \"slow\",\n evolutionChainId: 75,\n rarity: \"legendary\",\n catchRate: 3,\n description: \"Strikes flaky tests with divine thunderbolts.\",\n },\n\n // \u2500\u2500 Moltres (chain 76) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 146,\n name: \"Moltres\",\n types: [\"Fire\", \"Flying\"],\n baseStats: { hp: 90, attack: 100, defense: 90, speed: 90, special: 125 },\n expGroup: \"slow\",\n evolutionChainId: 76,\n rarity: \"legendary\",\n catchRate: 3,\n description: \"Its flames burn away technical debt from the ashes.\",\n },\n\n // \u2500\u2500 Dratini line (chain 77) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 147,\n name: \"Dratini\",\n types: [\"Dragon\"],\n baseStats: { hp: 41, attack: 64, defense: 45, speed: 50, special: 50 },\n expGroup: \"slow\",\n evolutionChainId: 77,\n rarity: \"rare\",\n catchRate: 45,\n description: \"A tiny dragon hatched from a well-typed generic.\",\n },\n {\n id: 148,\n name: \"Dragonair\",\n types: [\"Dragon\"],\n baseStats: { hp: 61, attack: 84, defense: 65, speed: 70, special: 70 },\n expGroup: \"slow\",\n evolutionChainId: 77,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Gracefully refactors code with serpentine elegance.\",\n },\n {\n id: 149,\n name: \"Dragonite\",\n types: [\"Dragon\", \"Flying\"],\n baseStats: { hp: 91, attack: 134, defense: 95, speed: 80, special: 100 },\n expGroup: \"slow\",\n evolutionChainId: 77,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Delivers flawless deploys across any ocean of code.\",\n },\n\n // \u2500\u2500 Mewtwo (chain 78) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 150,\n name: \"Mewtwo\",\n types: [\"Psychic\"],\n baseStats: { hp: 106, attack: 110, defense: 90, speed: 130, special: 154 },\n expGroup: \"slow\",\n evolutionChainId: 78,\n rarity: \"legendary\",\n catchRate: 3,\n description: \"Engineered in a lab to write perfect code forever.\",\n },\n\n // \u2500\u2500 Mew (chain 79) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 151,\n name: \"Mew\",\n types: [\"Psychic\"],\n baseStats: { hp: 100, attack: 100, defense: 100, speed: 100, special: 100 },\n expGroup: \"medium_slow\",\n evolutionChainId: 79,\n rarity: \"mythical\",\n catchRate: 45,\n description: \"Contains the DNA of every programming language.\",\n },\n] as const satisfies readonly Pokemon[];\n\n// \u2500\u2500 Lookup Maps \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const POKEMON_BY_ID: ReadonlyMap<number, Pokemon> = new Map(POKEDEX.map((p) => [p.id, p]));\n\nexport const POKEMON_BY_NAME: ReadonlyMap<string, Pokemon> = new Map(\n POKEDEX.map((p) => [p.name.toLowerCase(), p]),\n);\n", "/**\n * Singleton state manager for Claudemon.\n * All state reads/writes flow through this class.\n */\n\nimport { access as fsAccess } from \"node:fs/promises\";\nimport { constants as fsConst } from \"node:fs\";\nimport { getStateDir, getStateFile, getStatusFile } from \"../engine/constants.js\";\nimport type {\n PlayerState,\n OwnedPokemon,\n EventCounterKey,\n EventCounters,\n StreakData,\n BuddyConfig,\n PokedexState,\n WildEncounter,\n MoodType,\n} from \"../engine/types.js\";\nimport { EVENT_COUNTER_KEYS } from \"../engine/types.js\";\nimport { atomicWrite, safeRead, ensureDir, backupCorrupted, withLock } from \"./io.js\";\nimport { PlayerStateSchema } from \"./schemas.js\";\nimport { POKEMON_BY_ID } from \"../engine/pokemon-data.js\";\n\n/** Compact status payload for the shell status line script */\ninterface StatusPayload {\n name: string; // Species name (used for sprite filename lookup)\n displayName: string; // \"Nickname (Species)\" or just \"Species\" for display\n level: number;\n xpPercent: number;\n speciesId: number;\n evolutionReady: boolean;\n mood: MoodType;\n}\n\n/** Build a zeroed-out EventCounters record */\nfunction emptyCounters(): EventCounters {\n const counters = {} as Record<string, number>;\n for (const key of EVENT_COUNTER_KEYS) {\n counters[key] = 0;\n }\n return counters as EventCounters;\n}\n\n/** Build default streak data */\nfunction emptyStreak(): StreakData {\n return {\n currentStreak: 0,\n longestStreak: 0,\n lastActiveDate: null,\n totalDaysActive: 0,\n };\n}\n\n/** Build default config */\nfunction defaultConfig(): BuddyConfig {\n return {\n muted: false,\n reactionCooldownMs: 30_000,\n statusLineEnabled: true,\n bellEnabled: true,\n encounterSpeed: \"normal\",\n xpSharePercent: 25,\n };\n}\n\n/** Build empty pokedex */\nfunction emptyPokedex(): PokedexState {\n return {\n entries: {},\n totalSeen: 0,\n totalCaught: 0,\n };\n}\n\n/** Get today's date as YYYY-MM-DD in local timezone */\nfunction todayDateString(): string {\n const now = new Date();\n const year = now.getFullYear();\n const month = String(now.getMonth() + 1).padStart(2, \"0\");\n const day = String(now.getDate()).padStart(2, \"0\");\n return `${year}-${month}-${day}`;\n}\n\nexport class StateManager {\n private static instance: StateManager | null = null;\n private state: PlayerState | null = null;\n /** Timestamp of the last successful load from disk */\n private lastLoadTime: number = 0;\n /** How long (in ms) cached state is considered fresh before re-reading disk */\n private static readonly CACHE_TTL_MS = 1000;\n\n /** Debounce timer for writeStatus \u2014 limits disk writes to at most once per second */\n private statusWriteTimer: ReturnType<typeof setTimeout> | null = null;\n /** Payload queued for the next debounced status write */\n private pendingStatusPayload: StatusPayload | null = null;\n /** Maximum frequency for status file writes (ms) */\n private static readonly STATUS_DEBOUNCE_MS = 1000;\n\n private constructor() {}\n\n /** Get the singleton StateManager instance */\n static getInstance(): StateManager {\n if (!StateManager.instance) {\n StateManager.instance = new StateManager();\n }\n return StateManager.instance;\n }\n\n /** Load state from disk. Returns cached state if loaded within the last second. */\n async load(): Promise<PlayerState | null> {\n // Return cached state if fresh enough (avoids redundant disk reads from MCP tool calls)\n if (\n this.state &&\n this.lastLoadTime > 0 &&\n Date.now() - this.lastLoadTime < StateManager.CACHE_TTL_MS\n ) {\n return this.state;\n }\n\n await ensureDir(getStateDir());\n\n const stateFile = getStateFile();\n let fileExists = true;\n try {\n await fsAccess(stateFile, fsConst.F_OK);\n } catch {\n fileExists = false;\n }\n if (!fileExists) {\n return null;\n }\n\n const raw = await safeRead<unknown>(stateFile);\n if (raw === null) {\n // File exists but safeRead returned null \u2014 empty or invalid JSON\n const backupPath = await backupCorrupted(stateFile);\n process.stderr.write(\n `[claudemon] State file was corrupted and has been backed up to ${backupPath}\\n` +\n `[claudemon] You'll need to pick a new starter with buddy_starter.\\n`,\n );\n return null;\n }\n\n try {\n // Zod output is structurally compatible but not nominally identical to PlayerState\n const parsed = PlayerStateSchema.parse(raw) as PlayerState;\n this.state = parsed;\n this.lastLoadTime = Date.now();\n return this.state;\n } catch (err: unknown) {\n // Schema validation failed \u2014 data on disk doesn't match expected shape\n const backupPath = await backupCorrupted(stateFile);\n const message = err instanceof Error ? err.message : String(err);\n process.stderr.write(\n `[claudemon] State validation failed: ${message}\\n` +\n `[claudemon] Corrupted data backed up to ${backupPath}\\n` +\n `[claudemon] You'll need to pick a new starter with buddy_starter.\\n`,\n );\n return null;\n }\n }\n\n /** Save current state to disk atomically, protected by file lock */\n async save(): Promise<void> {\n if (!this.state) {\n throw new Error(\"Cannot save: state not loaded. Call load() or initializePlayer() first.\");\n }\n const stateDir = getStateDir();\n await ensureDir(stateDir);\n const lockPath = `${stateDir}/state.lock`;\n await withLock(lockPath, async () => {\n const json = JSON.stringify(this.state, null, 2);\n await atomicWrite(getStateFile(), json);\n });\n // After saving, in-memory state matches disk \u2014 refresh cache timestamp\n this.lastLoadTime = Date.now();\n }\n\n /** Get current state (throws if not loaded) */\n getState(): PlayerState {\n if (!this.state) {\n throw new Error(\"State not loaded. Call load() first.\");\n }\n return this.state;\n }\n\n /** Check if this is first run (no state file exists) */\n async isFirstRun(): Promise<boolean> {\n try {\n await fsAccess(getStateFile(), fsConst.F_OK);\n return false;\n } catch {\n return true;\n }\n }\n\n /** Initialize new player state after starter selection */\n async initializePlayer(\n trainerId: string,\n trainerName: string,\n starter: OwnedPokemon,\n ): Promise<PlayerState> {\n const now = new Date().toISOString();\n\n const state: PlayerState = {\n trainerId,\n trainerName,\n party: [starter],\n pcBox: [],\n pokedex: emptyPokedex(),\n badges: [],\n achievements: [],\n counters: emptyCounters(),\n streak: emptyStreak(),\n config: defaultConfig(),\n startedAt: now,\n totalXpEarned: 0,\n totalSessions: 0,\n pendingEncounter: null,\n xpSinceLastEncounter: 0,\n recentToolTypes: [],\n lastEncounterTime: 0,\n mood: \"neutral\",\n moodSetAt: 0,\n lastFedAt: 0,\n lastTrainedAt: 0,\n lastPlayedAt: 0,\n pendingQuiz: null,\n shareStats: { wins: 0, losses: 0, ties: 0 },\n };\n\n this.state = state;\n await this.save();\n return this.state;\n }\n\n /** Get the active Pokemon from the party (isActive === true) */\n getActivePokemon(): OwnedPokemon | null {\n if (!this.state) {\n return null;\n }\n return this.state.party.find((p) => p.isActive) ?? null;\n }\n\n /** Increment an event counter by amount (default 1) and save (lock-protected) */\n async incrementCounter(key: EventCounterKey, amount: number = 1): Promise<void> {\n const state = this.getState();\n state.counters[key] += amount;\n await this.save();\n }\n\n /**\n * Update daily streak with weekend grace period.\n * Allows up to 2 days off without breaking the streak (covers weekends).\n * Streak counts \"coding days\" not \"consecutive calendar days\".\n */\n async updateStreak(): Promise<void> {\n const state = this.getState();\n const today = todayDateString();\n const { streak } = state;\n\n if (streak.lastActiveDate === today) {\n return;\n }\n\n if (streak.lastActiveDate === null) {\n streak.currentStreak = 1;\n streak.totalDaysActive = 1;\n } else {\n const last = new Date(streak.lastActiveDate);\n const now = new Date(today);\n const diffMs = now.getTime() - last.getTime();\n const diffDays = Math.round(diffMs / (1000 * 60 * 60 * 24));\n\n // Grace period: up to 2 days off (covers weekends)\n // 1 day gap = next day (consecutive) \u2713\n // 2 day gap = skipped 1 day (e.g., Friday \u2192 Sunday) \u2713\n // 3 day gap = skipped 2 days (e.g., Friday \u2192 Monday) \u2713\n // 4+ day gap = streak broken\n if (diffDays <= 3) {\n streak.currentStreak += 1;\n } else {\n streak.currentStreak = 1;\n }\n streak.totalDaysActive += 1;\n }\n\n if (streak.currentStreak > streak.longestStreak) {\n streak.longestStreak = streak.currentStreak;\n }\n\n streak.lastActiveDate = today;\n await this.save();\n }\n\n /**\n * Write compact status JSON for the shell status line script.\n * Debounced: at most one disk write per STATUS_DEBOUNCE_MS.\n * The payload is computed immediately so it always reflects the latest state,\n * but the actual I/O is deferred and coalesced.\n */\n async writeStatus(evolutionReady: boolean = false): Promise<void> {\n const active = this.getActivePokemon();\n if (!active) {\n return;\n }\n\n const state = this.getState();\n\n // XP percent is currentXp as a rough percentage toward next level\n // Exact formula depends on exp group; use a simple ratio for the status line\n const xpPercent =\n active.level >= 100\n ? 100\n : Math.min(100, Math.floor((active.currentXp / Math.max(1, active.currentXp + 50)) * 100));\n\n // Look up species name for sprite lookup and display\n const species = POKEMON_BY_ID.get(active.pokemonId);\n const speciesName = species?.name ?? `Pokemon #${active.pokemonId}`;\n const displayName = active.nickname ? `${active.nickname} (${speciesName})` : speciesName;\n\n const payload: StatusPayload = {\n name: speciesName,\n displayName,\n level: active.level,\n xpPercent,\n speciesId: active.pokemonId,\n evolutionReady,\n mood: state.mood ?? \"neutral\",\n };\n\n // Always update the pending payload to the latest values\n this.pendingStatusPayload = payload;\n\n // If a write is already scheduled, it will pick up the updated payload\n if (this.statusWriteTimer) return;\n\n this.statusWriteTimer = setTimeout(() => {\n void (async () => {\n this.statusWriteTimer = null;\n if (this.pendingStatusPayload) {\n const stateDir = getStateDir();\n await ensureDir(stateDir);\n await atomicWrite(getStatusFile(), JSON.stringify(this.pendingStatusPayload));\n this.pendingStatusPayload = null;\n }\n })();\n }, StateManager.STATUS_DEBOUNCE_MS);\n }\n\n /** Flush any pending debounced status write immediately.\n * Call before process exit to ensure the last status update is persisted. */\n async flushStatus(): Promise<void> {\n if (this.statusWriteTimer) {\n clearTimeout(this.statusWriteTimer);\n this.statusWriteTimer = null;\n }\n if (this.pendingStatusPayload) {\n const stateDir = getStateDir();\n await ensureDir(stateDir);\n await atomicWrite(getStatusFile(), JSON.stringify(this.pendingStatusPayload));\n this.pendingStatusPayload = null;\n }\n }\n\n /** Set a pending wild encounter on state. */\n setPendingEncounter(encounter: WildEncounter): void {\n const state = this.getState();\n state.pendingEncounter = encounter;\n }\n\n /** Clear the pending wild encounter from state. */\n clearPendingEncounter(): void {\n const state = this.getState();\n state.pendingEncounter = null;\n }\n\n /** Write encounter notification to status JSON so status line can show it. */\n async writeEncounterStatus(pokemonName: string): Promise<void> {\n const active = this.getActivePokemon();\n if (!active) return;\n\n const xpPercent =\n active.level >= 100\n ? 100\n : Math.min(100, Math.floor((active.currentXp / Math.max(1, active.currentXp + 50)) * 100));\n\n const species = POKEMON_BY_ID.get(active.pokemonId);\n const speciesName = species?.name ?? `Pokemon #${active.pokemonId}`;\n const displayLabel = active.nickname ? `${active.nickname} (${speciesName})` : speciesName;\n\n const payload = {\n name: speciesName,\n displayName: displayLabel,\n level: active.level,\n xpPercent,\n speciesId: active.pokemonId,\n evolutionReady: false,\n encounter: `Wild ${pokemonName} appeared!`,\n };\n\n await ensureDir(getStateDir());\n await atomicWrite(getStatusFile(), JSON.stringify(payload));\n }\n\n /** Reset singleton for testing purposes */\n static resetInstance(): void {\n StateManager.instance = null;\n }\n\n /** Invalidate the in-memory cache, forcing the next load() to read from disk */\n invalidateCache(): void {\n this.lastLoadTime = 0;\n }\n}\n", "/**\n * Version check module for Claudemon.\n * Checks npm registry for newer versions, caching results for 24 hours.\n * Designed to be non-blocking \u2014 never delays server startup.\n */\n\nimport { readFile, writeFile, mkdir } from \"node:fs/promises\";\nimport { readFileSync, existsSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { getStateDir } from \"./constants.js\";\n\n// \u2500\u2500 Types \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\ninterface VersionCache {\n lastCheck: number; // timestamp ms\n latestVersion: string; // e.g., \"1.5.0\"\n currentVersion: string; // version at time of check\n}\n\nexport interface UpdateInfo {\n hasUpdate: boolean;\n latest: string;\n current: string;\n}\n\n// \u2500\u2500 Constants \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst CHECK_INTERVAL_MS = 24 * 60 * 60 * 1000; // 24 hours\nconst FETCH_TIMEOUT_MS = 5000;\nconst NPM_REGISTRY_URL = \"https://registry.npmjs.org/@umang-boss/claudemon/latest\";\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\n// \u2500\u2500 Module-level cache \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nlet cachedUpdateInfo: UpdateInfo | null = null;\n\n/** Retrieve the last update check result (populated by checkForUpdate). */\nexport function getLastUpdateCheck(): UpdateInfo | null {\n return cachedUpdateInfo;\n}\n\n// \u2500\u2500 Public API \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/**\n * Get current package version from the nearest package.json.\n * Searches upward from the module directory.\n */\nexport function getCurrentVersion(): string {\n const candidates = [\n join(__dirname, \"..\", \"..\", \"package.json\"),\n join(__dirname, \"..\", \"package.json\"),\n ];\n for (const p of candidates) {\n if (existsSync(p)) {\n try {\n const pkg = JSON.parse(readFileSync(p, \"utf-8\")) as {\n version?: string;\n };\n return pkg.version ?? \"unknown\";\n } catch {\n continue;\n }\n }\n }\n return \"unknown\";\n}\n\n/**\n * Check npm registry for the latest version. Non-blocking, cached.\n *\n * - Returns cached result if checked within the last 24 hours.\n * - Fetches from npm registry with a 5-second timeout.\n * - Fails silently on network errors (returns null).\n * - Stores result in module-level cache for instructions builder.\n */\nexport async function checkForUpdate(): Promise<UpdateInfo | null> {\n const current = getCurrentVersion();\n if (current === \"unknown\") return null;\n\n const cacheFile = getCacheFilePath();\n\n // Check disk cache first\n try {\n if (existsSync(cacheFile)) {\n const raw = await readFile(cacheFile, \"utf-8\");\n const cached = JSON.parse(raw) as VersionCache;\n if (Date.now() - cached.lastCheck < CHECK_INTERVAL_MS) {\n const result: UpdateInfo = {\n hasUpdate: isNewerVersion(cached.latestVersion, current),\n latest: cached.latestVersion,\n current,\n };\n cachedUpdateInfo = result;\n return result;\n }\n }\n } catch {\n /* cache miss \u2014 proceed to registry */\n }\n\n // Fetch from npm registry\n try {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n\n const res = await fetch(NPM_REGISTRY_URL, {\n signal: controller.signal,\n });\n clearTimeout(timeout);\n\n if (!res.ok) return null;\n\n const data = (await res.json()) as { version?: string };\n const latest = data.version ?? current;\n\n // Persist cache to disk\n const cache: VersionCache = {\n lastCheck: Date.now(),\n latestVersion: latest,\n currentVersion: current,\n };\n try {\n const dir = dirname(cacheFile);\n await mkdir(dir, { recursive: true });\n await writeFile(cacheFile, JSON.stringify(cache), \"utf-8\");\n } catch {\n /* non-critical \u2014 cache write failure is fine */\n }\n\n const result: UpdateInfo = {\n hasUpdate: isNewerVersion(latest, current),\n latest,\n current,\n };\n cachedUpdateInfo = result;\n return result;\n } catch {\n // Network error, abort, or timeout \u2014 silently skip\n return null;\n }\n}\n\n// \u2500\u2500 Internal Helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** Path to the on-disk version cache file. Resolved at call time for testability. */\nfunction getCacheFilePath(): string {\n return join(getStateDir(), \"version-check.json\");\n}\n\n/**\n * Simple semver comparison: is version `a` strictly newer than version `b`?\n * Compares major.minor.patch numerically.\n */\nfunction isNewerVersion(a: string, b: string): boolean {\n const pa = a.split(\".\").map(Number);\n const pb = b.split(\".\").map(Number);\n for (let i = 0; i < 3; i++) {\n const va = pa[i] ?? 0;\n const vb = pb[i] ?? 0;\n if (va > vb) return true;\n if (va < vb) return false;\n }\n return false;\n}\n", "/**\n * Claudemon Doctor \u2014 diagnostic tool.\n * Checks the health of the Claudemon installation.\n *\n * Usage: bun run cli/doctor.ts\n */\n\nimport { access, stat, unlink, readdir, readFile } from \"node:fs/promises\";\nimport { constants as fsConstants, existsSync } from \"node:fs\";\nimport { resolve, dirname } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { spawnSync } from \"node:child_process\";\nimport { StateManager } from \"../src/state/state-manager.js\";\nimport { PlayerStateSchema } from \"../src/state/schemas.js\";\nimport { checkForUpdate, getCurrentVersion } from \"../src/engine/version-check.js\";\n\nimport type { ClaudeConfig, ClaudeSettings } from \"./shared.js\";\nimport {\n readJson,\n info,\n CLAUDE_CONFIG,\n CLAUDE_SETTINGS,\n STATE_DIR,\n SKILL_DEST,\n HOOK_SCRIPT,\n} from \"./shared.js\";\n\n// \u2500\u2500 Local Constants \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst STATE_FILE = `${STATE_DIR}/state.json`;\nconst LOCK_FILE = `${STATE_DIR}/state.lock`;\nconst LOCK_MAX_AGE_MS = 5000;\nconst EXPECTED_SPRITE_COUNT = 151;\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n// Sprite dir: check multiple candidate paths (works from source, dist, and npm global)\nfunction findColorscriptDir(): string | null {\n const candidates = [\n resolve(dirname(__dirname), \"sprites\", \"colorscripts\", \"small\"),\n resolve(dirname(__dirname), \"..\", \"sprites\", \"colorscripts\", \"small\"),\n resolve(__dirname, \"..\", \"sprites\", \"colorscripts\", \"small\"),\n resolve(__dirname, \"..\", \"..\", \"sprites\", \"colorscripts\", \"small\"),\n ];\n for (const c of candidates) {\n if (existsSync(c)) return c;\n }\n return null;\n}\nconst COLORSCRIPT_DIR = findColorscriptDir();\n\n// \u2500\u2500 Helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\ninterface CheckResult {\n label: string;\n passed: boolean;\n detail: string;\n}\n\nfunction formatCheck(result: CheckResult): string {\n const icon = result.passed ? \"\\u2713\" : \"\\u2717\";\n return `[${icon}] ${result.label}: ${result.detail}`;\n}\n\n// \u2500\u2500 Check 1: Bun Version \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function checkBun(): Promise<CheckResult> {\n try {\n const result = spawnSync(\"bun\", [\"--version\"], { stdio: \"pipe\" });\n if (result.error) throw result.error;\n const output = result.stdout?.toString().trim();\n return { label: \"Bun runtime\", passed: true, detail: `v${output}` };\n } catch {\n return { label: \"Bun runtime\", passed: false, detail: \"not found\" };\n }\n}\n\n// \u2500\u2500 Check 2: State Directory \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function checkStateDir(): Promise<CheckResult> {\n try {\n await access(STATE_DIR, fsConstants.F_OK);\n return { label: \"State directory\", passed: true, detail: \"~/.claudemon/\" };\n } catch {\n return {\n label: \"State directory\",\n passed: false,\n detail: \"~/.claudemon/ not found (run installer)\",\n };\n }\n}\n\n// \u2500\u2500 Check 3: State File \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function checkStateFile(): Promise<CheckResult> {\n try {\n await access(STATE_FILE, fsConstants.F_OK);\n } catch {\n return { label: \"State file\", passed: false, detail: \"not found (run /buddy starter first)\" };\n }\n\n try {\n const text = await readFile(STATE_FILE, \"utf-8\");\n const data = JSON.parse(text) as Record<string, unknown>;\n\n // Check for active pokemon\n const party = data[\"party\"];\n if (Array.isArray(party) && party.length > 0) {\n const active = party.find(\n (p: unknown) =>\n typeof p === \"object\" &&\n p !== null &&\n \"isActive\" in p &&\n (p as Record<string, unknown>)[\"isActive\"] === true,\n );\n if (active && typeof active === \"object\" && \"pokemonId\" in active) {\n return {\n label: \"State file\",\n passed: true,\n detail: `valid, active Pokemon #${(active as Record<string, unknown>)[\"pokemonId\"]}`,\n };\n }\n return { label: \"State file\", passed: true, detail: \"valid, but no active Pokemon set\" };\n }\n\n return { label: \"State file\", passed: true, detail: \"valid JSON, no party members yet\" };\n } catch {\n return { label: \"State file\", passed: false, detail: \"exists but invalid JSON\" };\n }\n}\n\n// \u2500\u2500 Check 4: MCP Server Registration \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function checkMcpServer(): Promise<CheckResult> {\n const config = await readJson<ClaudeConfig>(CLAUDE_CONFIG);\n if (!config) {\n return { label: \"MCP server\", passed: false, detail: \"~/.claude.json not found\" };\n }\n\n if (config.mcpServers && config.mcpServers[\"claudemon\"]) {\n return { label: \"MCP server\", passed: true, detail: \"registered in ~/.claude.json\" };\n }\n\n return { label: \"MCP server\", passed: false, detail: \"not registered in ~/.claude.json\" };\n}\n\n// \u2500\u2500 Check 5: Hooks \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function checkHooks(): Promise<CheckResult> {\n const settings = await readJson<ClaudeSettings>(CLAUDE_SETTINGS);\n if (!settings) {\n return { label: \"Hooks\", passed: false, detail: \"~/.claude/settings.json not found\" };\n }\n\n if (!settings.hooks || !settings.hooks[\"PostToolUse\"]) {\n return { label: \"Hooks\", passed: false, detail: \"no PostToolUse hooks configured\" };\n }\n\n const hasOurHook = settings.hooks[\"PostToolUse\"].some((m) =>\n m.hooks.some((h) => h.command.includes(\"post-tool-use.sh\")),\n );\n\n if (hasOurHook) {\n return { label: \"Hooks\", passed: true, detail: \"PostToolUse configured\" };\n }\n\n return { label: \"Hooks\", passed: false, detail: \"PostToolUse exists but missing Claudemon hook\" };\n}\n\n// \u2500\u2500 Check 6: Skill \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function checkSkill(): Promise<CheckResult> {\n try {\n await access(SKILL_DEST, fsConstants.F_OK);\n return { label: \"Skill\", passed: true, detail: \"/buddy command installed\" };\n } catch {\n return { label: \"Skill\", passed: false, detail: \"~/.claude/skills/buddy/SKILL.md not found\" };\n }\n}\n\n// \u2500\u2500 Check 7: Hook Script Executable \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function checkHookScript(): Promise<CheckResult> {\n try {\n await access(HOOK_SCRIPT, fsConstants.X_OK);\n return { label: \"Hook script\", passed: true, detail: \"executable\" };\n } catch {\n try {\n await access(HOOK_SCRIPT, fsConstants.F_OK);\n return {\n label: \"Hook script\",\n passed: false,\n detail: \"exists but not executable (run chmod +x)\",\n };\n } catch {\n return { label: \"Hook script\", passed: false, detail: \"not found\" };\n }\n }\n}\n\n// \u2500\u2500 Check 8: State Manager Load \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function checkStateManager(): Promise<CheckResult> {\n try {\n StateManager.resetInstance();\n const manager = StateManager.getInstance();\n const state = await manager.load();\n StateManager.resetInstance();\n\n if (state) {\n return { label: \"State manager\", passed: true, detail: \"loaded successfully\" };\n }\n return { label: \"State manager\", passed: true, detail: \"no state file yet (first run)\" };\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err);\n StateManager.resetInstance();\n return { label: \"State manager\", passed: false, detail: `load failed: ${message}` };\n }\n}\n\n// \u2500\u2500 Check 9: Stale Lock File \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function checkStaleLock(): Promise<CheckResult> {\n try {\n const lockStat = await stat(LOCK_FILE);\n const lockAge = Date.now() - lockStat.mtimeMs;\n\n if (lockAge > LOCK_MAX_AGE_MS) {\n // Offer cleanup\n info(`Stale lock file found (${Math.round(lockAge / 1000)}s old). Cleaning up...`);\n try {\n await unlink(LOCK_FILE);\n return { label: \"Lock file\", passed: true, detail: \"stale lock cleaned up\" };\n } catch {\n return { label: \"Lock file\", passed: false, detail: \"stale lock found, cleanup failed\" };\n }\n }\n\n return {\n label: \"Lock file\",\n passed: true,\n detail: `active (${Math.round(lockAge / 1000)}s old)`,\n };\n } catch {\n // No lock file \u2014 this is the normal case\n return { label: \"Lock file\", passed: true, detail: \"no lock (clean)\" };\n }\n}\n\n// \u2500\u2500 Check 10: Sprite Count \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function checkSpriteCount(): Promise<CheckResult> {\n try {\n if (!COLORSCRIPT_DIR) {\n return { label: \"Sprites\", passed: false, detail: \"colorscripts directory not found\" };\n }\n await access(COLORSCRIPT_DIR, fsConstants.F_OK);\n const entries = await readdir(COLORSCRIPT_DIR);\n const spriteFiles = entries.filter((f) => f.endsWith(\".txt\"));\n const count = spriteFiles.length;\n\n if (count >= EXPECTED_SPRITE_COUNT) {\n return {\n label: \"Sprites\",\n passed: true,\n detail: `${count}/${EXPECTED_SPRITE_COUNT} sprite files`,\n };\n }\n\n return {\n label: \"Sprites\",\n passed: false,\n detail: `only ${count}/${EXPECTED_SPRITE_COUNT} sprite files (some sprites missing)`,\n };\n } catch {\n return { label: \"Sprites\", passed: false, detail: \"colorscripts directory not found\" };\n }\n}\n\n// \u2500\u2500 Check 11: State File Validity (Zod) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function checkStateValidity(): Promise<CheckResult> {\n try {\n await access(STATE_FILE, fsConstants.F_OK);\n } catch {\n return { label: \"State validity\", passed: true, detail: \"no state file yet\" };\n }\n\n try {\n const text = await readFile(STATE_FILE, \"utf-8\");\n if (!text.trim()) {\n return { label: \"State validity\", passed: false, detail: \"state file is empty\" };\n }\n\n const data = JSON.parse(text) as unknown;\n const result = PlayerStateSchema.safeParse(data);\n\n if (result.success) {\n return { label: \"State validity\", passed: true, detail: \"schema valid\" };\n }\n\n // Report first few issues\n const issues = result.error.issues.slice(0, 3);\n const details = issues.map((i) => `${i.path.join(\".\")}: ${i.message}`).join(\"; \");\n return {\n label: \"State validity\",\n passed: false,\n detail: `schema errors: ${details}`,\n };\n } catch {\n return { label: \"State validity\", passed: false, detail: \"invalid JSON\" };\n }\n}\n\n// \u2500\u2500 Check 12: Version \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function checkVersion(): Promise<CheckResult> {\n const current = getCurrentVersion();\n if (current === \"unknown\") {\n return { label: \"Version\", passed: false, detail: \"could not determine current version\" };\n }\n\n try {\n const result = await checkForUpdate();\n if (!result) {\n return {\n label: \"Version\",\n passed: true,\n detail: `v${current} (could not reach npm registry)`,\n };\n }\n\n if (result.hasUpdate) {\n return {\n label: \"Version\",\n passed: false,\n detail: `v${current} (v${result.latest} available \u2014 run: npm install -g @umang-boss/claudemon)`,\n };\n }\n\n return { label: \"Version\", passed: true, detail: `v${current} (latest)` };\n } catch {\n return { label: \"Version\", passed: true, detail: `v${current} (check skipped)` };\n }\n}\n\n// \u2500\u2500 Main \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport async function doctor(): Promise<void> {\n console.log(\"\");\n console.log(\"Claudemon Doctor\");\n console.log(\"================\");\n console.log(\"\");\n\n const checks: CheckResult[] = [\n await checkVersion(),\n await checkBun(),\n await checkStateDir(),\n await checkStateFile(),\n await checkMcpServer(),\n await checkHooks(),\n await checkSkill(),\n await checkHookScript(),\n await checkStateManager(),\n await checkStaleLock(),\n await checkSpriteCount(),\n await checkStateValidity(),\n ];\n\n for (const check of checks) {\n console.log(formatCheck(check));\n }\n\n const passed = checks.filter((c) => c.passed).length;\n const total = checks.length;\n\n console.log(\"\");\n console.log(`Result: ${passed}/${total} checks passed`);\n\n if (passed < total) {\n console.log(\"\");\n console.log(\"Run 'bun run cli/install.ts' to fix missing components.\");\n }\n\n console.log(\"\");\n}\n\n// Run if executed directly\ndoctor().catch((err: unknown) => {\n const message = err instanceof Error ? err.message : String(err);\n console.error(`\\nDoctor failed: ${message}`);\n process.exit(1);\n});\n", "#!/usr/bin/env bun\n/**\n * Claudemon CLI entry point.\n * Routes to install, uninstall, update, doctor, or --version.\n */\n\nimport { readFileSync } from \"node:fs\";\nimport { resolve, dirname } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nexport {};\nconst command = process.argv[2];\n\nswitch (command) {\n case \"--version\":\n case \"-v\":\n case \"version\": {\n const __dirname = dirname(fileURLToPath(import.meta.url));\n const pkgPaths = [\n resolve(__dirname, \"..\", \"package.json\"),\n resolve(__dirname, \"..\", \"..\", \"package.json\"),\n ];\n for (const p of pkgPaths) {\n try {\n const pkg = JSON.parse(readFileSync(p, \"utf-8\")) as { version: string };\n console.log(`claudemon v${pkg.version}`);\n break;\n } catch {\n continue;\n }\n }\n break;\n }\n case \"install\":\n await import(\"./install.js\");\n break;\n case \"uninstall\":\n await import(\"./uninstall.js\");\n break;\n case \"update\":\n await import(\"./update.js\");\n break;\n case \"doctor\":\n await import(\"./doctor.js\");\n break;\n default:\n console.log(`\nClaudemon \u2014 Pokemon coding companion for Claude Code\n\nUsage:\n claudemon install Set up Claudemon (MCP server, hooks, skill, status line)\n claudemon uninstall Remove Claudemon from Claude Code\n claudemon update Re-register everything (preserves save data)\n claudemon doctor Run diagnostics\n claudemon --version Show version\n\nAfter install, start a new Claude Code session and type /buddy\n`);\n break;\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["/**\n * Shared types and utilities for Claudemon CLI commands.\n * Centralizes Claude Code config interfaces and common helpers.\n */\n\nimport { resolve, dirname } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { existsSync, constants as fsConstants } from \"node:fs\";\nimport { readFile, writeFile, access as fsAccess } from \"node:fs/promises\";\n\n// \u2500\u2500 Config shape interfaces \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport interface McpServerEntry {\n command: string;\n args: string[];\n env: Record<string, string>;\n}\n\nexport interface ClaudeConfig {\n mcpServers?: Record<string, McpServerEntry>;\n [key: string]: unknown;\n}\n\nexport interface HookCommand {\n type: \"command\";\n command: string;\n timeout: number;\n}\n\nexport interface HookMatcher {\n matcher?: string;\n hooks: HookCommand[];\n}\n\nexport interface StatusLineConfig {\n type: \"command\";\n command: string;\n refreshInterval: number;\n}\n\nexport interface ClaudeSettings {\n hooks?: Record<string, HookMatcher[]>;\n statusLine?: StatusLineConfig;\n [key: string]: unknown;\n}\n\n// \u2500\u2500 Constants \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst HOME = process.env[\"HOME\"] || process.env[\"USERPROFILE\"];\nif (!HOME) {\n console.error(\"Error: HOME (or USERPROFILE on Windows) environment variable is not set.\");\n process.exit(1);\n}\n\nexport const CLI_HOME = HOME;\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\n// Resolve project root \u2014 works from both src (cli/) and compiled (dist/cli/)\nlet projectDir = resolve(dirname(__dirname));\nif (projectDir.endsWith(\"/dist\") || projectDir.endsWith(\"\\\\dist\")) {\n projectDir = resolve(projectDir, \"..\");\n}\nexport const PROJECT_DIR = projectDir;\nexport const CLAUDE_DIR = `${HOME}/.claude`;\nexport const CLAUDE_CONFIG = `${HOME}/.claude.json`;\nexport const CLAUDE_SETTINGS = `${CLAUDE_DIR}/settings.json`;\nexport const STATE_DIR = `${HOME}/.claudemon`;\nexport const SKILL_SRC = `${PROJECT_DIR}/skills/buddy/SKILL.md`;\nexport const SKILL_DEST_DIR = `${CLAUDE_DIR}/skills/buddy`;\nexport const SKILL_DEST = `${SKILL_DEST_DIR}/SKILL.md`;\nexport const HOOK_SCRIPT = `${PROJECT_DIR}/hooks/post-tool-use.sh`;\nexport const STOP_HOOK_SCRIPT = `${PROJECT_DIR}/hooks/stop.sh`;\nexport const USER_PROMPT_HOOK_SCRIPT = `${PROJECT_DIR}/hooks/user-prompt-submit.sh`;\nexport const STATUSLINE_SCRIPT = `${PROJECT_DIR}/statusline/buddy-status.sh`;\nexport const SERVER_ENTRY_TS = `${PROJECT_DIR}/src/server/index.ts`;\nexport const SERVER_ENTRY_JS = `${PROJECT_DIR}/dist/server.mjs`;\n/** Legacy tsc output path \u2014 kept for backward compatibility */\nexport const SERVER_ENTRY_JS_LEGACY = `${PROJECT_DIR}/dist/src/server/index.js`;\n\n/** Find the best runtime \u2014 Bun (fastest) > bundled node > legacy node */\nexport function getRuntime(): { command: string; serverEntry: string } {\n // Prefer bun (fastest \u2014 native TS, ~120ms startup)\n const bunCandidates =\n process.platform === \"win32\"\n ? [`${HOME}\\\\.bun\\\\bin\\\\bun.exe`, `${HOME}/.bun/bin/bun.exe`, `${HOME}/.bun/bin/bun`]\n : [`${HOME}/.bun/bin/bun`, \"/usr/local/bin/bun\", \"/usr/bin/bun\"];\n for (const p of bunCandidates) {\n if (existsSync(p)) {\n return { command: p, serverEntry: SERVER_ENTRY_TS };\n }\n }\n\n // No bun \u2014 use bundled ESM with node (~600ms but works everywhere)\n if (existsSync(SERVER_ENTRY_JS)) {\n return { command: \"node\", serverEntry: SERVER_ENTRY_JS };\n }\n\n // Fall back to legacy tsc output\n if (existsSync(SERVER_ENTRY_JS_LEGACY)) {\n return { command: \"node\", serverEntry: SERVER_ENTRY_JS_LEGACY };\n }\n\n // Last resort: assume bun in PATH\n return { command: \"bun\", serverEntry: SERVER_ENTRY_TS };\n}\n\n// \u2500\u2500 Helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport function ok(msg: string): void {\n console.log(` \\u2713 ${msg}`);\n}\n\nexport function fail(msg: string): void {\n console.error(` \\u2717 ${msg}`);\n}\n\nexport function info(msg: string): void {\n console.log(` - ${msg}`);\n}\n\nexport async function readJson<T>(path: string): Promise<T | null> {\n try {\n await fsAccess(path, fsConstants.F_OK);\n const text = await readFile(path, \"utf-8\");\n return JSON.parse(text) as T;\n } catch {\n return null;\n }\n}\n\nexport async function writeJson(path: string, data: unknown): Promise<void> {\n await writeFile(path, JSON.stringify(data, null, 2) + \"\\n\", \"utf-8\");\n}\n", "/**\n * Claudemon CLI Installer.\n * Registers MCP server, hooks, and skill into Claude Code.\n *\n * Usage: bun run cli/install.ts\n */\n\nimport { mkdir, copyFile, chmod, access } from \"node:fs/promises\";\nimport { constants as fsConstants } from \"node:fs\";\nimport { spawnSync } from \"node:child_process\";\n\nimport type { ClaudeConfig, ClaudeSettings, HookCommand, HookMatcher } from \"./shared.js\";\nimport {\n ok,\n fail,\n readJson,\n writeJson,\n CLAUDE_DIR,\n CLAUDE_CONFIG,\n CLAUDE_SETTINGS,\n STATE_DIR,\n SKILL_SRC,\n SKILL_DEST_DIR,\n SKILL_DEST,\n HOOK_SCRIPT,\n STOP_HOOK_SCRIPT,\n USER_PROMPT_HOOK_SCRIPT,\n STATUSLINE_SCRIPT,\n getRuntime,\n} from \"./shared.js\";\n\n// \u2500\u2500 Step 1: Check Prerequisites \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function checkPrerequisites(): Promise<boolean> {\n let allGood = true;\n\n // Check runtime (bun preferred, node works too)\n try {\n const bunResult = spawnSync(\"bun\", [\"--version\"], { stdio: \"pipe\" });\n if (!bunResult.error) {\n ok(`Bun runtime: v${bunResult.stdout?.toString().trim()} (fast mode)`);\n } else {\n throw new Error(\"no bun\");\n }\n } catch {\n const nodeResult = spawnSync(\"node\", [\"--version\"], { stdio: \"pipe\" });\n if (!nodeResult.error) {\n ok(`Node.js runtime: ${nodeResult.stdout?.toString().trim()}`);\n } else {\n fail(\"No runtime found. Install Node.js 18+ from https://nodejs.org\");\n allGood = false;\n }\n }\n\n // Check Claude Code directory\n try {\n await access(CLAUDE_DIR, fsConstants.F_OK);\n ok(\"Claude Code directory: ~/.claude/\");\n } catch {\n fail(\"Claude Code not found. Install Claude Code first: https://claude.ai/download\");\n const homeHint = process.platform === \"win32\" ? \"%USERPROFILE%\\\\.claude\\\\\" : \"~/.claude/\";\n console.error(` Expected directory: ${homeHint}`);\n allGood = false;\n }\n\n // Check jq (non-blocking \u2014 needed for status line but not core functionality)\n try {\n const jqResult = spawnSync(\"jq\", [\"--version\"], { stdio: \"pipe\" });\n if (!jqResult.error) {\n ok(`jq: ${jqResult.stdout?.toString().trim()}`);\n } else {\n throw new Error(\"no jq\");\n }\n } catch {\n const installHint =\n process.platform === \"darwin\"\n ? \"brew install jq\"\n : process.platform === \"win32\"\n ? \"winget install jqlang.jq\"\n : \"sudo apt install jq\";\n console.error(` \\u26A0 jq not found (status line won't work). Install: ${installHint}`);\n }\n\n return allGood;\n}\n\n// \u2500\u2500 Step 2: Create State Directory \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function createStateDirectory(): Promise<void> {\n await mkdir(STATE_DIR, { recursive: true });\n ok(`State directory: ${STATE_DIR}/`);\n}\n\n// \u2500\u2500 Step 3: Register MCP Server \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function registerMcpServer(): Promise<void> {\n const existing = await readJson<ClaudeConfig>(CLAUDE_CONFIG);\n const config: ClaudeConfig = existing ?? {};\n\n if (!config.mcpServers) {\n config.mcpServers = {};\n }\n\n config.mcpServers[\"claudemon\"] = {\n command: getRuntime().command,\n args: [getRuntime().serverEntry],\n env: {},\n };\n\n await writeJson(CLAUDE_CONFIG, config);\n ok(\"MCP server: registered in ~/.claude.json\");\n}\n\n// \u2500\u2500 Step 4: Install Hooks \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function installHooks(): Promise<void> {\n const existing = await readJson<ClaudeSettings>(CLAUDE_SETTINGS);\n const settings: ClaudeSettings = existing ?? {};\n\n if (!settings.hooks) {\n settings.hooks = {};\n }\n\n const ourHook: HookCommand = {\n type: \"command\",\n command: HOOK_SCRIPT,\n timeout: 5000,\n };\n\n const ourMatcher: HookMatcher = {\n matcher: \"Bash|Write|Edit|Read|Grep|Glob\",\n hooks: [ourHook],\n };\n\n // Check if PostToolUse already has our matcher\n const postToolUse = settings.hooks[\"PostToolUse\"];\n if (postToolUse) {\n // Remove any existing claudemon matcher (idempotent reinstall)\n const filtered = postToolUse.filter(\n (m) => !m.hooks.some((h) => h.command.includes(\"post-tool-use.sh\")),\n );\n filtered.push(ourMatcher);\n settings.hooks[\"PostToolUse\"] = filtered;\n } else {\n settings.hooks[\"PostToolUse\"] = [ourMatcher];\n }\n\n // \u2500\u2500 Stop hook (extracts buddy comments from responses) \u2500\u2500\u2500\u2500\n const stopHook: HookCommand = {\n type: \"command\",\n command: STOP_HOOK_SCRIPT,\n timeout: 3000,\n };\n\n const stopEntry: HookMatcher = {\n hooks: [stopHook],\n };\n\n const stopHooks = settings.hooks[\"Stop\"];\n if (stopHooks) {\n const filtered = stopHooks.filter((m) => !m.hooks.some((h) => h.command.includes(\"stop.sh\")));\n filtered.push(stopEntry);\n settings.hooks[\"Stop\"] = filtered;\n } else {\n settings.hooks[\"Stop\"] = [stopEntry];\n }\n\n // \u2500\u2500 UserPromptSubmit hook (reacts to Pokemon name mentions) \u2500\n const userPromptHook: HookCommand = {\n type: \"command\",\n command: USER_PROMPT_HOOK_SCRIPT,\n timeout: 3000,\n };\n\n const userPromptEntry: HookMatcher = {\n hooks: [userPromptHook],\n };\n\n const userPromptHooks = settings.hooks[\"UserPromptSubmit\"];\n if (userPromptHooks) {\n const filtered = userPromptHooks.filter(\n (m) => !m.hooks.some((h) => h.command.includes(\"user-prompt-submit.sh\")),\n );\n filtered.push(userPromptEntry);\n settings.hooks[\"UserPromptSubmit\"] = filtered;\n } else {\n settings.hooks[\"UserPromptSubmit\"] = [userPromptEntry];\n }\n\n await writeJson(CLAUDE_SETTINGS, settings);\n ok(\"Hooks: PostToolUse, Stop, UserPromptSubmit configured in ~/.claude/settings.json\");\n}\n\n// \u2500\u2500 Step 5: Register Status Line \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function registerStatusLine(): Promise<void> {\n const existing = await readJson<ClaudeSettings>(CLAUDE_SETTINGS);\n const settings: ClaudeSettings = existing ?? {};\n\n // Merge status line config without overwriting other settings\n settings.statusLine = {\n type: \"command\",\n command: STATUSLINE_SCRIPT,\n refreshInterval: 1,\n };\n\n await writeJson(CLAUDE_SETTINGS, settings);\n ok(\"Status line: registered in ~/.claude/settings.json\");\n}\n\n// \u2500\u2500 Step 6: Install Skill \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function installSkill(): Promise<void> {\n await mkdir(SKILL_DEST_DIR, { recursive: true });\n await copyFile(SKILL_SRC, SKILL_DEST);\n ok(\"Skill: /buddy command installed to ~/.claude/skills/buddy/\");\n}\n\n// \u2500\u2500 Step 7: Set Script Permissions \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function setScriptPermissions(): Promise<void> {\n if (process.platform === \"win32\") {\n ok(\"Scripts: permissions not needed on Windows\");\n return;\n }\n await chmod(HOOK_SCRIPT, 0o755);\n ok(\"Hook script: post-tool-use.sh set executable\");\n await chmod(STOP_HOOK_SCRIPT, 0o755);\n ok(\"Hook script: stop.sh set executable\");\n await chmod(USER_PROMPT_HOOK_SCRIPT, 0o755);\n ok(\"Hook script: user-prompt-submit.sh set executable\");\n await chmod(STATUSLINE_SCRIPT, 0o755);\n ok(\"Status line script: set executable\");\n}\n\n// \u2500\u2500 Main \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport async function install(): Promise<void> {\n console.log(\"\");\n console.log(\"Claudemon Installer\");\n console.log(\"===================\");\n console.log(\"\");\n console.log(\"Checking prerequisites...\");\n\n const prereqOk = await checkPrerequisites();\n if (!prereqOk) {\n console.log(\"\");\n fail(\"Prerequisites not met. Fix the issues above and try again.\");\n process.exit(1);\n }\n\n console.log(\"\");\n console.log(\"Installing...\");\n\n await createStateDirectory();\n await registerMcpServer();\n await installHooks();\n await registerStatusLine();\n await installSkill();\n await setScriptPermissions();\n\n console.log(\"\");\n console.log(\"\\u2713 Claudemon installed successfully!\");\n console.log(\"\");\n console.log(\"Next steps:\");\n console.log(\" 1. Start a new Claude Code session\");\n console.log(\" 2. Type /buddy starter to pick your first Pokemon!\");\n console.log(\"\");\n console.log(\"Run 'bun run cli/doctor.ts' to verify installation.\");\n console.log(\"\");\n}\n\n// Run if executed directly\ninstall().catch((err: unknown) => {\n const message = err instanceof Error ? err.message : String(err);\n console.error(`\\nInstallation failed: ${message}`);\n process.exit(1);\n});\n", "/**\n * Claudemon CLI Uninstaller.\n * Cleanly removes MCP server, hooks, and skill from Claude Code.\n *\n * Usage: bun run cli/uninstall.ts\n */\n\nimport { rm, access } from \"node:fs/promises\";\nimport { constants as fsConstants } from \"node:fs\";\n\nimport type { ClaudeConfig, ClaudeSettings } from \"./shared.js\";\nimport {\n ok,\n info,\n readJson,\n writeJson,\n CLAUDE_CONFIG,\n CLAUDE_SETTINGS,\n STATE_DIR,\n SKILL_DEST_DIR,\n} from \"./shared.js\";\n\n// \u2500\u2500 Step 1: Remove MCP Server Registration \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function removeMcpServer(): Promise<void> {\n const config = await readJson<ClaudeConfig>(CLAUDE_CONFIG);\n if (!config) {\n info(\"MCP server: ~/.claude.json not found (nothing to remove)\");\n return;\n }\n\n if (!config.mcpServers || !config.mcpServers[\"claudemon\"]) {\n info(\"MCP server: not registered (nothing to remove)\");\n return;\n }\n\n delete config.mcpServers[\"claudemon\"];\n\n // Clean up empty mcpServers object\n if (Object.keys(config.mcpServers).length === 0) {\n delete config.mcpServers;\n }\n\n await writeJson(CLAUDE_CONFIG, config);\n ok(\"MCP server: removed from ~/.claude.json\");\n}\n\n// \u2500\u2500 Step 2: Remove Hooks \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function removeHooks(): Promise<void> {\n const settings = await readJson<ClaudeSettings>(CLAUDE_SETTINGS);\n if (!settings) {\n info(\"Hooks: ~/.claude/settings.json not found (nothing to remove)\");\n return;\n }\n\n if (!settings.hooks) {\n info(\"Hooks: no hooks found (nothing to remove)\");\n return;\n }\n\n // Remove PostToolUse hook\n if (settings.hooks[\"PostToolUse\"]) {\n const filtered = settings.hooks[\"PostToolUse\"].filter(\n (m) => !m.hooks.some((h) => h.command.includes(\"post-tool-use.sh\")),\n );\n if (filtered.length === 0) {\n delete settings.hooks[\"PostToolUse\"];\n } else {\n settings.hooks[\"PostToolUse\"] = filtered;\n }\n }\n\n // Remove Stop hook\n if (settings.hooks[\"Stop\"]) {\n const filtered = settings.hooks[\"Stop\"].filter(\n (m) => !m.hooks.some((h) => h.command.includes(\"stop.sh\")),\n );\n if (filtered.length === 0) {\n delete settings.hooks[\"Stop\"];\n } else {\n settings.hooks[\"Stop\"] = filtered;\n }\n }\n\n // Remove UserPromptSubmit hook\n if (settings.hooks[\"UserPromptSubmit\"]) {\n const filtered = settings.hooks[\"UserPromptSubmit\"].filter(\n (m) => !m.hooks.some((h) => h.command.includes(\"user-prompt-submit.sh\")),\n );\n if (filtered.length === 0) {\n delete settings.hooks[\"UserPromptSubmit\"];\n } else {\n settings.hooks[\"UserPromptSubmit\"] = filtered;\n }\n }\n\n // Clean up empty hooks object\n if (Object.keys(settings.hooks).length === 0) {\n delete settings.hooks;\n }\n\n await writeJson(CLAUDE_SETTINGS, settings);\n ok(\"Hooks: removed PostToolUse, Stop, UserPromptSubmit entries from ~/.claude/settings.json\");\n}\n\n// \u2500\u2500 Step 3: Remove Skill \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function removeSkill(): Promise<void> {\n try {\n await access(`${SKILL_DEST_DIR}/SKILL.md`, fsConstants.F_OK);\n } catch {\n info(\"Skill: ~/.claude/skills/buddy/ not found (nothing to remove)\");\n return;\n }\n\n await rm(SKILL_DEST_DIR, { recursive: true, force: true });\n ok(\"Skill: removed ~/.claude/skills/buddy/\");\n}\n\n// \u2500\u2500 Step 4: Preserve State Data \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function preserveStateData(): Promise<void> {\n try {\n await access(`${STATE_DIR}/state.json`, fsConstants.F_OK);\n info(`Your Pokemon data is preserved at ${STATE_DIR}/. Delete manually to remove.`);\n } catch {\n info(`State directory: ${STATE_DIR}/ (kept, no state file found)`);\n }\n}\n\n// \u2500\u2500 Main \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport async function uninstall(): Promise<void> {\n console.log(\"\");\n console.log(\"Claudemon Uninstaller\");\n console.log(\"=====================\");\n console.log(\"\");\n console.log(\"Removing Claudemon from Claude Code...\");\n console.log(\"\");\n\n await removeMcpServer();\n await removeHooks();\n await removeSkill();\n await preserveStateData();\n\n console.log(\"\");\n console.log(\"\\u2713 Claudemon uninstalled successfully.\");\n console.log(\"\");\n}\n\n// Run if executed directly\nuninstall().catch((err: unknown) => {\n const message = err instanceof Error ? err.message : String(err);\n console.error(`\\nUninstall failed: ${message}`);\n process.exit(1);\n});\n", "/**\n * Claudemon CLI Updater.\n * Re-registers MCP server, hooks, skill, and status line without\n * touching the user's saved state/Pokemon data.\n *\n * Effectively: uninstall registrations + reinstall registrations.\n * State directory (~/.claudemon/) is preserved completely.\n *\n * Usage: bun run cli/update.ts\n */\n\nimport { mkdir, copyFile, chmod, access } from \"node:fs/promises\";\nimport { constants as fsConstants, existsSync, readdirSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { spawnSync } from \"node:child_process\";\n\nimport type { ClaudeConfig, ClaudeSettings, HookCommand, HookMatcher } from \"./shared.js\";\nimport {\n ok,\n fail,\n info,\n readJson,\n writeJson,\n CLAUDE_DIR,\n CLAUDE_CONFIG,\n CLAUDE_SETTINGS,\n STATE_DIR,\n SKILL_SRC,\n SKILL_DEST_DIR,\n SKILL_DEST,\n HOOK_SCRIPT,\n STOP_HOOK_SCRIPT,\n USER_PROMPT_HOOK_SCRIPT,\n STATUSLINE_SCRIPT,\n PROJECT_DIR,\n getRuntime,\n} from \"./shared.js\";\n\n// \u2500\u2500 Step 1: Check Prerequisites \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function checkPrerequisites(): Promise<boolean> {\n let allGood = true;\n\n try {\n const bunResult = spawnSync(\"bun\", [\"--version\"], { stdio: \"pipe\" });\n if (!bunResult.error) {\n ok(`Bun runtime: v${bunResult.stdout?.toString().trim()} (fast mode)`);\n } else {\n throw new Error(\"no bun\");\n }\n } catch {\n const nodeResult = spawnSync(\"node\", [\"--version\"], { stdio: \"pipe\" });\n if (!nodeResult.error) {\n ok(`Node.js runtime: ${nodeResult.stdout?.toString().trim()}`);\n } else {\n fail(\"No runtime found. Install Node.js 18+\");\n allGood = false;\n }\n }\n\n try {\n await access(CLAUDE_DIR, fsConstants.F_OK);\n ok(\"Claude Code directory: ~/.claude/\");\n } catch {\n fail(\"Claude Code not found at ~/.claude/\");\n allGood = false;\n }\n\n return allGood;\n}\n\n// \u2500\u2500 Step 2: Remove Old Registrations \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function removeOldMcpServer(): Promise<void> {\n const config = await readJson<ClaudeConfig>(CLAUDE_CONFIG);\n if (!config?.mcpServers?.[\"claudemon\"]) {\n info(\"MCP server: not previously registered\");\n return;\n }\n delete config.mcpServers[\"claudemon\"];\n if (Object.keys(config.mcpServers).length === 0) {\n delete config.mcpServers;\n }\n await writeJson(CLAUDE_CONFIG, config);\n ok(\"MCP server: removed old registration\");\n}\n\nasync function removeOldHooks(): Promise<void> {\n const settings = await readJson<ClaudeSettings>(CLAUDE_SETTINGS);\n if (!settings?.hooks) {\n info(\"Hooks: none found\");\n return;\n }\n\n const hookTypes = [\"PostToolUse\", \"Stop\", \"UserPromptSubmit\"] as const;\n const patterns = [\"post-tool-use.sh\", \"stop.sh\", \"user-prompt-submit.sh\"] as const;\n\n for (let i = 0; i < hookTypes.length; i++) {\n const hookType = hookTypes[i]!;\n const pattern = patterns[i]!;\n const entries = settings.hooks[hookType];\n if (entries) {\n const filtered = entries.filter((m) => !m.hooks.some((h) => h.command.includes(pattern)));\n if (filtered.length === 0) {\n delete settings.hooks[hookType];\n } else {\n settings.hooks[hookType] = filtered;\n }\n }\n }\n\n if (Object.keys(settings.hooks).length === 0) {\n delete settings.hooks;\n }\n\n await writeJson(CLAUDE_SETTINGS, settings);\n ok(\"Hooks: removed old registrations\");\n}\n\n// \u2500\u2500 Step 3: Re-register Everything \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function registerMcpServer(): Promise<void> {\n const existing = await readJson<ClaudeConfig>(CLAUDE_CONFIG);\n const config: ClaudeConfig = existing ?? {};\n\n if (!config.mcpServers) {\n config.mcpServers = {};\n }\n\n config.mcpServers[\"claudemon\"] = {\n command: getRuntime().command,\n args: [getRuntime().serverEntry],\n env: {},\n };\n\n await writeJson(CLAUDE_CONFIG, config);\n ok(\"MCP server: registered in ~/.claude.json\");\n}\n\nasync function installHooks(): Promise<void> {\n const existing = await readJson<ClaudeSettings>(CLAUDE_SETTINGS);\n const settings: ClaudeSettings = existing ?? {};\n\n if (!settings.hooks) {\n settings.hooks = {};\n }\n\n // PostToolUse hook\n const ourHook: HookCommand = {\n type: \"command\",\n command: HOOK_SCRIPT,\n timeout: 5000,\n };\n const ourMatcher: HookMatcher = {\n matcher: \"Bash|Write|Edit|Read|Grep|Glob\",\n hooks: [ourHook],\n };\n const postToolUse = settings.hooks[\"PostToolUse\"];\n if (postToolUse) {\n const filtered = postToolUse.filter(\n (m) => !m.hooks.some((h) => h.command.includes(\"post-tool-use.sh\")),\n );\n filtered.push(ourMatcher);\n settings.hooks[\"PostToolUse\"] = filtered;\n } else {\n settings.hooks[\"PostToolUse\"] = [ourMatcher];\n }\n\n // Stop hook\n const stopHook: HookCommand = { type: \"command\", command: STOP_HOOK_SCRIPT, timeout: 3000 };\n const stopEntry: HookMatcher = { hooks: [stopHook] };\n const stopHooks = settings.hooks[\"Stop\"];\n if (stopHooks) {\n const filtered = stopHooks.filter((m) => !m.hooks.some((h) => h.command.includes(\"stop.sh\")));\n filtered.push(stopEntry);\n settings.hooks[\"Stop\"] = filtered;\n } else {\n settings.hooks[\"Stop\"] = [stopEntry];\n }\n\n // UserPromptSubmit hook\n const userPromptHook: HookCommand = {\n type: \"command\",\n command: USER_PROMPT_HOOK_SCRIPT,\n timeout: 3000,\n };\n const userPromptEntry: HookMatcher = { hooks: [userPromptHook] };\n const userPromptHooks = settings.hooks[\"UserPromptSubmit\"];\n if (userPromptHooks) {\n const filtered = userPromptHooks.filter(\n (m) => !m.hooks.some((h) => h.command.includes(\"user-prompt-submit.sh\")),\n );\n filtered.push(userPromptEntry);\n settings.hooks[\"UserPromptSubmit\"] = filtered;\n } else {\n settings.hooks[\"UserPromptSubmit\"] = [userPromptEntry];\n }\n\n await writeJson(CLAUDE_SETTINGS, settings);\n ok(\"Hooks: PostToolUse, Stop, UserPromptSubmit configured\");\n}\n\nasync function registerStatusLine(): Promise<void> {\n const existing = await readJson<ClaudeSettings>(CLAUDE_SETTINGS);\n const settings: ClaudeSettings = existing ?? {};\n\n settings.statusLine = {\n type: \"command\",\n command: STATUSLINE_SCRIPT,\n refreshInterval: 1,\n };\n\n await writeJson(CLAUDE_SETTINGS, settings);\n ok(\"Status line: registered\");\n}\n\nasync function installSkill(): Promise<void> {\n await mkdir(SKILL_DEST_DIR, { recursive: true });\n await copyFile(SKILL_SRC, SKILL_DEST);\n ok(\"Skill: /buddy command updated\");\n}\n\nasync function setScriptPermissions(): Promise<void> {\n await chmod(HOOK_SCRIPT, 0o755);\n await chmod(STOP_HOOK_SCRIPT, 0o755);\n await chmod(USER_PROMPT_HOOK_SCRIPT, 0o755);\n await chmod(STATUSLINE_SCRIPT, 0o755);\n ok(\"Scripts: set executable\");\n}\n\n// \u2500\u2500 Step 4: Check for Missing Colorscripts \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function checkColorscripts(): Promise<{ missing: number; total: number }> {\n const smallDir = join(PROJECT_DIR, \"sprites\", \"colorscripts\", \"small\");\n let missing = 0;\n const total = 151;\n\n for (let id = 1; id <= total; id++) {\n // We don't know the name mapping without importing the data module,\n // so check if any file starting with the ID exists\n const prefix = `${id}-`;\n const dirExists = existsSync(smallDir);\n if (!dirExists) {\n missing = total;\n break;\n }\n\n // Check for files matching the pattern\n const files = readdirSync(smallDir).filter((f) => f.startsWith(prefix) && f.endsWith(\".txt\"));\n if (files.length === 0) {\n missing++;\n }\n }\n\n return { missing, total };\n}\n\n// \u2500\u2500 Step 5: State Preservation Check \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function checkStatePreserved(): Promise<void> {\n try {\n await access(`${STATE_DIR}/state.json`, fsConstants.F_OK);\n ok(\"State data: preserved (not modified)\");\n } catch {\n info(\"State data: no save file found (run /buddy starter to begin)\");\n }\n}\n\n// \u2500\u2500 Main \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport async function update(): Promise<void> {\n console.log(\"\");\n console.log(\"Claudemon Updater\");\n console.log(\"=================\");\n console.log(\"\");\n console.log(\"Checking prerequisites...\");\n\n const prereqOk = await checkPrerequisites();\n if (!prereqOk) {\n console.log(\"\");\n fail(\"Prerequisites not met. Fix the issues above and try again.\");\n process.exit(1);\n }\n\n console.log(\"\");\n console.log(\"Removing old registrations...\");\n await removeOldMcpServer();\n await removeOldHooks();\n\n console.log(\"\");\n console.log(\"Re-registering...\");\n await registerMcpServer();\n await installHooks();\n await registerStatusLine();\n await installSkill();\n await setScriptPermissions();\n\n console.log(\"\");\n console.log(\"Checking sprites...\");\n const { missing, total } = await checkColorscripts();\n if (missing === 0) {\n ok(`Colorscripts: all ${total} sprites present`);\n } else if (missing === total) {\n fail(`Colorscripts: sprite directory not found. Run: bun run download-sprites`);\n } else {\n info(`Colorscripts: ${missing}/${total} missing. Run: bun run download-sprites`);\n }\n\n console.log(\"\");\n await checkStatePreserved();\n\n console.log(\"\");\n console.log(\"\\u2713 Claudemon updated successfully!\");\n console.log(\"\");\n console.log(\"Start a new Claude Code session to use the updated version.\");\n console.log(\"\");\n}\n\n// Run if executed directly\nupdate().catch((err: unknown) => {\n const message = err instanceof Error ? err.message : String(err);\n console.error(`\\nUpdate failed: ${message}`);\n process.exit(1);\n});\n", "/**\n * Shared constants for Claudemon.\n * All magic numbers and configuration values live here.\n */\n\nimport type { XpEventType, CodingStat, TrainerTitle, Badge } from \"./types.js\";\n\n// \u2500\u2500 Game Limits \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const MAX_PARTY_SIZE = 6;\nexport const MAX_LEVEL = 100;\nexport const STARTER_LEVEL = 5;\nexport const MAX_HAPPINESS = 255;\nexport const TOTAL_POKEMON = 905;\n\n// \u2500\u2500 XP Awards per Event \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const XP_AWARDS: Record<\n XpEventType,\n { xp: number; stat: CodingStat | null; boost: number }\n> = {\n commit: { xp: 15, stat: \"velocity\", boost: 1 },\n test_pass: { xp: 12, stat: \"stability\", boost: 1 },\n test_written: { xp: 10, stat: \"stability\", boost: 1 },\n build_success: { xp: 10, stat: \"stability\", boost: 1 },\n bug_fix: { xp: 8, stat: \"debugging\", boost: 1 },\n lint_fix: { xp: 6, stat: \"debugging\", boost: 1 },\n file_create: { xp: 5, stat: \"velocity\", boost: 0 },\n file_edit: { xp: 3, stat: \"velocity\", boost: 0 },\n search: { xp: 1, stat: \"wisdom\", boost: 0 },\n large_refactor: { xp: 20, stat: \"wisdom\", boost: 2 },\n session_start: { xp: 5, stat: \"stamina\", boost: 1 },\n daily_streak: { xp: 15, stat: \"stamina\", boost: 1 },\n pet: { xp: 2, stat: null, boost: 0 },\n};\n\n// \u2500\u2500 Stat Display Names \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const STAT_DISPLAY_NAMES: Record<CodingStat, string> = {\n stamina: \"STAMINA\",\n debugging: \"DEBUGGING\",\n stability: \"STABILITY\",\n velocity: \"VELOCITY\",\n wisdom: \"WISDOM\",\n};\n\n// \u2500\u2500 Encounter Rate \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** XP thresholds for encounter triggers by speed setting */\nexport const ENCOUNTER_THRESHOLDS = {\n fast: 100,\n normal: 250,\n slow: 500,\n} as const;\n\nexport type EncounterSpeed = keyof typeof ENCOUNTER_THRESHOLDS;\n\n/** Default encounter speed */\nexport const DEFAULT_ENCOUNTER_SPEED: EncounterSpeed = \"normal\";\n\n// \u2500\u2500 Reaction Cooldown \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const DEFAULT_REACTION_COOLDOWN_MS = 30_000;\n\n// \u2500\u2500 Trainer Titles (by highest Pokemon level) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const TRAINER_TITLES: readonly TrainerTitle[] = [\n { minLevel: 1, title: \"Bug Catcher\" },\n { minLevel: 6, title: \"Youngster\" },\n { minLevel: 11, title: \"Hiker\" },\n { minLevel: 21, title: \"Ace Trainer\" },\n { minLevel: 31, title: \"Cooltrainer\" },\n { minLevel: 41, title: \"Veteran\" },\n { minLevel: 51, title: \"Elite Four\" },\n { minLevel: 61, title: \"Champion\" },\n { minLevel: 76, title: \"Pokemon Master\" },\n { minLevel: 91, title: \"Professor\" },\n];\n\n// \u2500\u2500 Badge Definitions \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const BADGES: readonly Badge[] = [\n {\n type: \"blaze\",\n name: \"Blaze Badge\",\n description: \"Fix 50 bugs \u2014 unlocks Fire Stone evolutions\",\n condition: { type: \"counter\", counter: \"bugs_fixed\", threshold: 50 },\n },\n {\n type: \"flow\",\n name: \"Flow Badge\",\n description: \"Pass 100 tests \u2014 unlocks Water Stone evolutions\",\n condition: { type: \"counter\", counter: \"tests_passed\", threshold: 100 },\n },\n {\n type: \"spark\",\n name: \"Spark Badge\",\n description: \"Make 200 commits \u2014 unlocks Thunder Stone evolutions\",\n condition: { type: \"counter\", counter: \"commits\", threshold: 200 },\n },\n {\n type: \"lunar\",\n name: \"Lunar Badge\",\n description: \"Code for 30 days (weekends off OK) \u2014 unlocks Moon Stone evolutions\",\n condition: { type: \"streak\", minDays: 30 },\n },\n {\n type: \"growth\",\n name: \"Growth Badge\",\n description: \"Edit 500 files \u2014 unlocks Leaf Stone evolutions\",\n condition: { type: \"counter\", counter: \"files_edited\", threshold: 500 },\n },\n];\n\n// \u2500\u2500 State File Paths \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** Resolved at call time so tests can override HOME. Falls back to USERPROFILE on Windows. */\nexport function getStateDir(): string {\n return `${process.env[\"HOME\"] ?? process.env[\"USERPROFILE\"] ?? \"~\"}/.claudemon`;\n}\nexport function getStateFile(): string {\n return `${getStateDir()}/state.json`;\n}\nexport function getStatusFile(): string {\n return `${getStateDir()}/status.json`;\n}\n\n// \u2500\u2500 Terminal Bell \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const BELL = \"\\x07\";\n", "/**\n * Core type definitions for Claudemon.\n * Single source of truth for all shared interfaces and types.\n */\n\n// \u2500\u2500 Mood Types \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const MOOD_TYPES = [\"happy\", \"worried\", \"sleepy\", \"energetic\", \"proud\", \"neutral\"] as const;\nexport type MoodType = (typeof MOOD_TYPES)[number];\n\n// \u2500\u2500 Pokemon Types \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const POKEMON_TYPES = [\n \"Normal\",\n \"Fire\",\n \"Water\",\n \"Electric\",\n \"Grass\",\n \"Ice\",\n \"Fighting\",\n \"Poison\",\n \"Ground\",\n \"Flying\",\n \"Psychic\",\n \"Bug\",\n \"Rock\",\n \"Ghost\",\n \"Dragon\",\n \"Steel\",\n \"Dark\",\n \"Fairy\",\n] as const;\n\nexport type PokemonType = (typeof POKEMON_TYPES)[number];\n\nexport const EXP_GROUPS = [\"fast\", \"medium_fast\", \"medium_slow\", \"slow\"] as const;\n\nexport type ExpGroup = (typeof EXP_GROUPS)[number];\n\nexport const RARITY_TIERS = [\"common\", \"uncommon\", \"rare\", \"legendary\", \"mythical\"] as const;\n\nexport type RarityTier = (typeof RARITY_TIERS)[number];\n\n// \u2500\u2500 Base Stats (Gen 1 layout) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport interface BaseStats {\n readonly hp: number;\n readonly attack: number;\n readonly defense: number;\n readonly speed: number;\n readonly special: number;\n}\n\n// \u2500\u2500 Pokemon Species (static, immutable Pokedex entry) \u2500\u2500\u2500\u2500\u2500\u2500\n\nexport interface Pokemon {\n readonly id: number;\n readonly name: string;\n readonly types: readonly [PokemonType, PokemonType?];\n readonly baseStats: BaseStats;\n readonly expGroup: ExpGroup;\n readonly evolutionChainId: number;\n readonly rarity: RarityTier;\n readonly catchRate: number; // 1-255, higher = easier to catch\n readonly description: string; // Short flavor text\n}\n\n// \u2500\u2500 Evolution \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport type EvolutionMethod =\n | { readonly type: \"level\"; readonly level: number }\n | { readonly type: \"badge\"; readonly badge: BadgeType }\n | { readonly type: \"collaboration\" }\n | { readonly type: \"stat\"; readonly stat: CodingStat; readonly minValue: number };\n\nexport interface EvolutionLink {\n readonly from: number; // Pokemon ID\n readonly to: number; // Pokemon ID\n readonly method: EvolutionMethod;\n}\n\nexport interface EvolutionChain {\n readonly id: number;\n readonly links: readonly EvolutionLink[];\n}\n\n// \u2500\u2500 Coding Stats (mapped from Gen 1 stats) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const CODING_STATS = [\"stamina\", \"debugging\", \"stability\", \"velocity\", \"wisdom\"] as const;\n\nexport type CodingStat = (typeof CODING_STATS)[number];\n\nexport interface CodingStats {\n stamina: number; // HP \u2192 session endurance, streaks\n debugging: number; // Attack \u2192 bug-finding, error fixing\n stability: number; // Defense \u2192 test coverage, build reliability\n velocity: number; // Speed \u2192 throughput, commits, edits\n wisdom: number; // Special \u2192 deep problem-solving, refactors\n}\n\n/** Maps Gen 1 base stats to coding stats for initial values */\nexport const BASE_STAT_TO_CODING: Record<keyof BaseStats, CodingStat> = {\n hp: \"stamina\",\n attack: \"debugging\",\n defense: \"stability\",\n speed: \"velocity\",\n special: \"wisdom\",\n} as const;\n\n// \u2500\u2500 Badges (replace evolution stones) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const BADGE_TYPES = [\n \"blaze\", // Fire Stone \u2192 50 bugs fixed\n \"flow\", // Water Stone \u2192 100 tests passed\n \"spark\", // Thunder Stone \u2192 200 commits\n \"lunar\", // Moon Stone \u2192 30-day streak\n \"growth\", // Leaf Stone \u2192 500 files edited\n] as const;\n\nexport type BadgeType = (typeof BADGE_TYPES)[number];\n\nexport interface Badge {\n readonly type: BadgeType;\n readonly name: string;\n readonly description: string;\n readonly condition: BadgeCondition;\n}\n\nexport type BadgeCondition =\n | { readonly type: \"counter\"; readonly counter: EventCounterKey; readonly threshold: number }\n | { readonly type: \"streak\"; readonly minDays: number };\n\n// \u2500\u2500 Owned Pokemon (user's individual Pokemon instance) \u2500\u2500\u2500\u2500\u2500\u2500\n\nexport interface OwnedPokemon {\n readonly id: string; // Unique instance ID (UUID)\n pokemonId: number;\n nickname: string | null;\n level: number;\n currentXp: number;\n totalXp: number;\n codingStats: CodingStats;\n happiness: number; // 0-255\n caughtAt: string; // ISO date\n evolvedAt: string | null;\n isActive: boolean;\n personality: string | null;\n shiny: boolean; // Future: always false in v1\n isStarter: boolean;\n}\n\n// \u2500\u2500 Player State (single source of truth) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport interface PlayerState {\n readonly trainerId: string;\n trainerName: string;\n party: OwnedPokemon[]; // Max 6\n pcBox: OwnedPokemon[]; // Overflow storage\n pokedex: PokedexState;\n badges: BadgeType[];\n achievements: UnlockedAchievement[];\n counters: EventCounters;\n streak: StreakData;\n config: BuddyConfig;\n startedAt: string; // ISO date\n totalXpEarned: number;\n totalSessions: number;\n pendingEncounter: WildEncounter | null;\n xpSinceLastEncounter: number;\n recentToolTypes: string[]; // Track tool diversity for bonus encounters\n lastEncounterTime: number; // Timestamp of last encounter (for cooldown)\n mood: MoodType; // Current mood of the active Pokemon\n moodSetAt: number; // Timestamp when mood was last set\n lastFedAt: number; // Timestamp of last feed action\n lastTrainedAt: number; // Timestamp of last train action\n lastPlayedAt: number; // Timestamp of last play (quiz completed) action\n pendingQuiz: PendingQuiz | null; // Active quiz awaiting answer\n shareStats: ShareStats; // Win/loss/tie record from compare\n}\n\n// \u2500\u2500 Share Stats \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport interface ShareStats {\n wins: number;\n losses: number;\n ties: number;\n}\n\n// \u2500\u2500 Pokedex \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport interface PokedexEntry {\n seen: boolean;\n caught: boolean;\n firstSeen: string | null; // ISO date\n firstCaught: string | null;\n}\n\nexport interface PokedexState {\n entries: Record<number, PokedexEntry>; // Keyed by Pokedex number 1-151\n totalSeen: number;\n totalCaught: number;\n}\n\n// \u2500\u2500 Achievements \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport interface Achievement {\n readonly id: string;\n readonly name: string;\n readonly description: string;\n readonly category: \"trainer\" | \"coding\" | \"pokemon\" | \"secret\";\n readonly condition: AchievementCondition;\n}\n\nexport type AchievementCondition =\n | { readonly type: \"counter\"; readonly counter: EventCounterKey; readonly threshold: number }\n | { readonly type: \"level\"; readonly minLevel: number }\n | { readonly type: \"pokedex\"; readonly minCaught: number }\n | { readonly type: \"streak\"; readonly minDays: number }\n | { readonly type: \"badge\"; readonly badge: BadgeType }\n | { readonly type: \"evolution\" }\n | { readonly type: \"party_size\"; readonly minSize: number };\n\nexport interface UnlockedAchievement {\n readonly achievementId: string;\n readonly unlockedAt: string; // ISO date\n}\n\n// \u2500\u2500 Event Counters \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const EVENT_COUNTER_KEYS = [\n \"commits\",\n \"tests_passed\",\n \"tests_failed\",\n \"tests_written\",\n \"builds_succeeded\",\n \"builds_failed\",\n \"bugs_fixed\",\n \"lint_fixes\",\n \"files_created\",\n \"files_edited\",\n \"searches\",\n \"large_refactors\",\n \"errors_encountered\",\n \"sessions\",\n \"prs_merged\",\n] as const;\n\nexport type EventCounterKey = (typeof EVENT_COUNTER_KEYS)[number];\n\nexport type EventCounters = Record<EventCounterKey, number>;\n\n// \u2500\u2500 Streaks \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport interface StreakData {\n currentStreak: number;\n longestStreak: number;\n lastActiveDate: string | null; // ISO date \"2026-04-13\"\n totalDaysActive: number;\n}\n\n// \u2500\u2500 Config \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport interface BuddyConfig {\n muted: boolean;\n reactionCooldownMs: number; // Default 30000\n statusLineEnabled: boolean;\n bellEnabled: boolean; // Terminal bell on level-up/encounters\n encounterSpeed: \"fast\" | \"normal\" | \"slow\"; // Configurable encounter frequency\n xpSharePercent: number; // 0-100, default 25. Percentage of XP shared to inactive party\n}\n\n// \u2500\u2500 XP Events (what triggers XP awards) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const XP_EVENT_TYPES = [\n \"commit\",\n \"test_pass\",\n \"test_written\",\n \"build_success\",\n \"bug_fix\",\n \"lint_fix\",\n \"file_create\",\n \"file_edit\",\n \"search\",\n \"large_refactor\",\n \"session_start\",\n \"daily_streak\",\n \"pet\",\n] as const;\n\nexport type XpEventType = (typeof XP_EVENT_TYPES)[number];\n\nexport interface XpEvent {\n readonly type: XpEventType;\n readonly xp: number;\n readonly statBoost: CodingStat | null;\n readonly boostAmount: number;\n}\n\n// \u2500\u2500 Pending Quiz (for /buddy play) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport interface PendingQuiz {\n readonly type: \"type_matchup\" | \"stat_compare\" | \"evolution\" | \"pokedex_trivia\";\n readonly question: string;\n readonly options: readonly string[];\n readonly correctAnswer: number; // 1-4\n}\n\n// \u2500\u2500 Encounters \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport interface WildEncounter {\n readonly pokemonId: number;\n readonly level: number;\n readonly catchCondition: CatchCondition;\n}\n\nexport interface CatchCondition {\n readonly requiredStat: CodingStat | null;\n readonly minStatValue: number;\n readonly requiredLevel: number;\n}\n\n// \u2500\u2500 Level Up Result \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport interface LevelUpResult {\n readonly previousLevel: number;\n readonly newLevel: number;\n readonly pendingEvolution: EvolutionLink | null;\n}\n\n// \u2500\u2500 Trainer Titles \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport interface TrainerTitle {\n readonly minLevel: number;\n readonly title: string;\n}\n\n// \u2500\u2500 Legendary Quest \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport interface LegendaryQuest {\n readonly pokemonId: number;\n readonly name: string;\n readonly steps: readonly QuestStep[];\n}\n\nexport interface QuestStep {\n readonly description: string;\n readonly condition: AchievementCondition;\n}\n", "/**\n * Atomic file I/O helpers for state persistence.\n * All disk writes go through atomicWrite to prevent corruption.\n * Uses only Node.js APIs (no Bun-specific APIs) for compatibility.\n */\n\nimport {\n readFile,\n writeFile,\n rename,\n mkdir,\n copyFile,\n unlink,\n stat,\n access,\n} from \"node:fs/promises\";\nimport { constants } from \"node:fs\";\n\n/** Write data atomically via temp file + rename */\nexport async function atomicWrite(path: string, data: string): Promise<void> {\n const tmpPath = `${path}.${Date.now()}.tmp`;\n await writeFile(tmpPath, data, \"utf-8\");\n await rename(tmpPath, path);\n}\n\n/** Read and parse JSON, returning null if file doesn't exist or contains invalid JSON */\nexport async function safeRead<T>(path: string): Promise<T | null> {\n try {\n await access(path, constants.F_OK);\n } catch {\n return null;\n }\n try {\n const text = await readFile(path, \"utf-8\");\n if (!text.trim()) {\n return null;\n }\n return JSON.parse(text) as T;\n } catch {\n return null;\n }\n}\n\n/** Ensure directory exists, creating parents as needed */\nexport async function ensureDir(path: string): Promise<void> {\n await mkdir(path, { recursive: true });\n}\n\n/**\n * Backup a corrupted file by copying it to `<path>.corrupt.<timestamp>`.\n */\nexport async function backupCorrupted(path: string): Promise<string> {\n const backupPath = `${path}.corrupt.${Date.now()}`;\n try {\n await copyFile(path, backupPath);\n } catch {\n // If copy fails, nothing to back up\n }\n return backupPath;\n}\n\nconst LOCK_MAX_AGE_MS = 5000;\nconst LOCK_RETRY_DELAY_MS = 100;\n\n/**\n * Execute a function while holding a simple file lock.\n */\nexport async function withLock<T>(lockPath: string, fn: () => Promise<T>): Promise<T> {\n try {\n const lockStat = await stat(lockPath);\n const lockAge = Date.now() - lockStat.mtimeMs;\n if (lockAge < LOCK_MAX_AGE_MS) {\n await new Promise((r) => setTimeout(r, LOCK_RETRY_DELAY_MS));\n }\n } catch {\n // No lock file\n }\n\n await writeFile(lockPath, String(Date.now()), \"utf-8\");\n try {\n return await fn();\n } finally {\n try {\n await unlink(lockPath);\n } catch {\n // Ignore\n }\n }\n}\n", "export var util;\n(function (util) {\n util.assertEqual = (_) => { };\n function assertIs(_arg) { }\n util.assertIs = assertIs;\n function assertNever(_x) {\n throw new Error();\n }\n util.assertNever = assertNever;\n util.arrayToEnum = (items) => {\n const obj = {};\n for (const item of items) {\n obj[item] = item;\n }\n return obj;\n };\n util.getValidEnumValues = (obj) => {\n const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n const filtered = {};\n for (const k of validKeys) {\n filtered[k] = obj[k];\n }\n return util.objectValues(filtered);\n };\n util.objectValues = (obj) => {\n return util.objectKeys(obj).map(function (e) {\n return obj[e];\n });\n };\n util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n : (object) => {\n const keys = [];\n for (const key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n keys.push(key);\n }\n }\n return keys;\n };\n util.find = (arr, checker) => {\n for (const item of arr) {\n if (checker(item))\n return item;\n }\n return undefined;\n };\n util.isInteger = typeof Number.isInteger === \"function\"\n ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n : (val) => typeof val === \"number\" && Number.isFinite(val) && Math.floor(val) === val;\n function joinValues(array, separator = \" | \") {\n return array.map((val) => (typeof val === \"string\" ? `'${val}'` : val)).join(separator);\n }\n util.joinValues = joinValues;\n util.jsonStringifyReplacer = (_, value) => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n return value;\n };\n})(util || (util = {}));\nexport var objectUtil;\n(function (objectUtil) {\n objectUtil.mergeShapes = (first, second) => {\n return {\n ...first,\n ...second, // second overwrites first\n };\n };\n})(objectUtil || (objectUtil = {}));\nexport const ZodParsedType = util.arrayToEnum([\n \"string\",\n \"nan\",\n \"number\",\n \"integer\",\n \"float\",\n \"boolean\",\n \"date\",\n \"bigint\",\n \"symbol\",\n \"function\",\n \"undefined\",\n \"null\",\n \"array\",\n \"object\",\n \"unknown\",\n \"promise\",\n \"void\",\n \"never\",\n \"map\",\n \"set\",\n]);\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return ZodParsedType.undefined;\n case \"string\":\n return ZodParsedType.string;\n case \"number\":\n return Number.isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n case \"boolean\":\n return ZodParsedType.boolean;\n case \"function\":\n return ZodParsedType.function;\n case \"bigint\":\n return ZodParsedType.bigint;\n case \"symbol\":\n return ZodParsedType.symbol;\n case \"object\":\n if (Array.isArray(data)) {\n return ZodParsedType.array;\n }\n if (data === null) {\n return ZodParsedType.null;\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return ZodParsedType.promise;\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return ZodParsedType.map;\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return ZodParsedType.set;\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return ZodParsedType.date;\n }\n return ZodParsedType.object;\n default:\n return ZodParsedType.unknown;\n }\n};\n", "import { util } from \"./helpers/util.js\";\nexport const ZodIssueCode = util.arrayToEnum([\n \"invalid_type\",\n \"invalid_literal\",\n \"custom\",\n \"invalid_union\",\n \"invalid_union_discriminator\",\n \"invalid_enum_value\",\n \"unrecognized_keys\",\n \"invalid_arguments\",\n \"invalid_return_type\",\n \"invalid_date\",\n \"invalid_string\",\n \"too_small\",\n \"too_big\",\n \"invalid_intersection_types\",\n \"not_multiple_of\",\n \"not_finite\",\n]);\nexport const quotelessJson = (obj) => {\n const json = JSON.stringify(obj, null, 2);\n return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nexport class ZodError extends Error {\n get errors() {\n return this.issues;\n }\n constructor(issues) {\n super();\n this.issues = [];\n this.addIssue = (sub) => {\n this.issues = [...this.issues, sub];\n };\n this.addIssues = (subs = []) => {\n this.issues = [...this.issues, ...subs];\n };\n const actualProto = new.target.prototype;\n if (Object.setPrototypeOf) {\n // eslint-disable-next-line ban/ban\n Object.setPrototypeOf(this, actualProto);\n }\n else {\n this.__proto__ = actualProto;\n }\n this.name = \"ZodError\";\n this.issues = issues;\n }\n format(_mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\") {\n issue.unionErrors.map(processError);\n }\n else if (issue.code === \"invalid_return_type\") {\n processError(issue.returnTypeError);\n }\n else if (issue.code === \"invalid_arguments\") {\n processError(issue.argumentsError);\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n // if (typeof el === \"string\") {\n // curr[el] = curr[el] || { _errors: [] };\n // } else if (typeof el === \"number\") {\n // const errorArray: any = [];\n // errorArray._errors = [];\n // curr[el] = curr[el] || errorArray;\n // }\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(this);\n return fieldErrors;\n }\n static assert(value) {\n if (!(value instanceof ZodError)) {\n throw new Error(`Not a ZodError: ${value}`);\n }\n }\n toString() {\n return this.message;\n }\n get message() {\n return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n }\n get isEmpty() {\n return this.issues.length === 0;\n }\n flatten(mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of this.issues) {\n if (sub.path.length > 0) {\n const firstEl = sub.path[0];\n fieldErrors[firstEl] = fieldErrors[firstEl] || [];\n fieldErrors[firstEl].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n }\n get formErrors() {\n return this.flatten();\n }\n}\nZodError.create = (issues) => {\n const error = new ZodError(issues);\n return error;\n};\n", "import { ZodIssueCode } from \"../ZodError.js\";\nimport { util, ZodParsedType } from \"../helpers/util.js\";\nconst errorMap = (issue, _ctx) => {\n let message;\n switch (issue.code) {\n case ZodIssueCode.invalid_type:\n if (issue.received === ZodParsedType.undefined) {\n message = \"Required\";\n }\n else {\n message = `Expected ${issue.expected}, received ${issue.received}`;\n }\n break;\n case ZodIssueCode.invalid_literal:\n message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n break;\n case ZodIssueCode.unrecognized_keys:\n message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n break;\n case ZodIssueCode.invalid_union:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_union_discriminator:\n message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n break;\n case ZodIssueCode.invalid_enum_value:\n message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n break;\n case ZodIssueCode.invalid_arguments:\n message = `Invalid function arguments`;\n break;\n case ZodIssueCode.invalid_return_type:\n message = `Invalid function return type`;\n break;\n case ZodIssueCode.invalid_date:\n message = `Invalid date`;\n break;\n case ZodIssueCode.invalid_string:\n if (typeof issue.validation === \"object\") {\n if (\"includes\" in issue.validation) {\n message = `Invalid input: must include \"${issue.validation.includes}\"`;\n if (typeof issue.validation.position === \"number\") {\n message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n }\n }\n else if (\"startsWith\" in issue.validation) {\n message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n }\n else if (\"endsWith\" in issue.validation) {\n message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n }\n else {\n util.assertNever(issue.validation);\n }\n }\n else if (issue.validation !== \"regex\") {\n message = `Invalid ${issue.validation}`;\n }\n else {\n message = \"Invalid\";\n }\n break;\n case ZodIssueCode.too_small:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"bigint\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue.minimum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.too_big:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"bigint\")\n message = `BigInt must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly` : issue.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(issue.maximum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.custom:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_intersection_types:\n message = `Intersection results could not be merged`;\n break;\n case ZodIssueCode.not_multiple_of:\n message = `Number must be a multiple of ${issue.multipleOf}`;\n break;\n case ZodIssueCode.not_finite:\n message = \"Number must be finite\";\n break;\n default:\n message = _ctx.defaultError;\n util.assertNever(issue);\n }\n return { message };\n};\nexport default errorMap;\n", "import defaultErrorMap from \"./locales/en.js\";\nlet overrideErrorMap = defaultErrorMap;\nexport { defaultErrorMap };\nexport function setErrorMap(map) {\n overrideErrorMap = map;\n}\nexport function getErrorMap() {\n return overrideErrorMap;\n}\n", "import { getErrorMap } from \"../errors.js\";\nimport defaultErrorMap from \"../locales/en.js\";\nexport const makeIssue = (params) => {\n const { data, path, errorMaps, issueData } = params;\n const fullPath = [...path, ...(issueData.path || [])];\n const fullIssue = {\n ...issueData,\n path: fullPath,\n };\n if (issueData.message !== undefined) {\n return {\n ...issueData,\n path: fullPath,\n message: issueData.message,\n };\n }\n let errorMessage = \"\";\n const maps = errorMaps\n .filter((m) => !!m)\n .slice()\n .reverse();\n for (const map of maps) {\n errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n }\n return {\n ...issueData,\n path: fullPath,\n message: errorMessage,\n };\n};\nexport const EMPTY_PATH = [];\nexport function addIssueToContext(ctx, issueData) {\n const overrideMap = getErrorMap();\n const issue = makeIssue({\n issueData: issueData,\n data: ctx.data,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap, // contextual error map is first priority\n ctx.schemaErrorMap, // then schema-bound map if available\n overrideMap, // then global override map\n overrideMap === defaultErrorMap ? undefined : defaultErrorMap, // then global default map\n ].filter((x) => !!x),\n });\n ctx.common.issues.push(issue);\n}\nexport class ParseStatus {\n constructor() {\n this.value = \"valid\";\n }\n dirty() {\n if (this.value === \"valid\")\n this.value = \"dirty\";\n }\n abort() {\n if (this.value !== \"aborted\")\n this.value = \"aborted\";\n }\n static mergeArray(status, results) {\n const arrayValue = [];\n for (const s of results) {\n if (s.status === \"aborted\")\n return INVALID;\n if (s.status === \"dirty\")\n status.dirty();\n arrayValue.push(s.value);\n }\n return { status: status.value, value: arrayValue };\n }\n static async mergeObjectAsync(status, pairs) {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n });\n }\n return ParseStatus.mergeObjectSync(status, syncPairs);\n }\n static mergeObjectSync(status, pairs) {\n const finalObject = {};\n for (const pair of pairs) {\n const { key, value } = pair;\n if (key.status === \"aborted\")\n return INVALID;\n if (value.status === \"aborted\")\n return INVALID;\n if (key.status === \"dirty\")\n status.dirty();\n if (value.status === \"dirty\")\n status.dirty();\n if (key.value !== \"__proto__\" && (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n finalObject[key.value] = value.value;\n }\n }\n return { status: status.value, value: finalObject };\n }\n}\nexport const INVALID = Object.freeze({\n status: \"aborted\",\n});\nexport const DIRTY = (value) => ({ status: \"dirty\", value });\nexport const OK = (value) => ({ status: \"valid\", value });\nexport const isAborted = (x) => x.status === \"aborted\";\nexport const isDirty = (x) => x.status === \"dirty\";\nexport const isValid = (x) => x.status === \"valid\";\nexport const isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n", "export {};\n", "export var errorUtil;\n(function (errorUtil) {\n errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n // biome-ignore lint:\n errorUtil.toString = (message) => typeof message === \"string\" ? message : message?.message;\n})(errorUtil || (errorUtil = {}));\n", "import { ZodError, ZodIssueCode, } from \"./ZodError.js\";\nimport { defaultErrorMap, getErrorMap } from \"./errors.js\";\nimport { errorUtil } from \"./helpers/errorUtil.js\";\nimport { DIRTY, INVALID, OK, ParseStatus, addIssueToContext, isAborted, isAsync, isDirty, isValid, makeIssue, } from \"./helpers/parseUtil.js\";\nimport { util, ZodParsedType, getParsedType } from \"./helpers/util.js\";\nclass ParseInputLazyPath {\n constructor(parent, value, path, key) {\n this._cachedPath = [];\n this.parent = parent;\n this.data = value;\n this._path = path;\n this._key = key;\n }\n get path() {\n if (!this._cachedPath.length) {\n if (Array.isArray(this._key)) {\n this._cachedPath.push(...this._path, ...this._key);\n }\n else {\n this._cachedPath.push(...this._path, this._key);\n }\n }\n return this._cachedPath;\n }\n}\nconst handleResult = (ctx, result) => {\n if (isValid(result)) {\n return { success: true, data: result.value };\n }\n else {\n if (!ctx.common.issues.length) {\n throw new Error(\"Validation failed but no issues detected.\");\n }\n return {\n success: false,\n get error() {\n if (this._error)\n return this._error;\n const error = new ZodError(ctx.common.issues);\n this._error = error;\n return this._error;\n },\n };\n }\n};\nfunction processCreateParams(params) {\n if (!params)\n return {};\n const { errorMap, invalid_type_error, required_error, description } = params;\n if (errorMap && (invalid_type_error || required_error)) {\n throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n }\n if (errorMap)\n return { errorMap: errorMap, description };\n const customMap = (iss, ctx) => {\n const { message } = params;\n if (iss.code === \"invalid_enum_value\") {\n return { message: message ?? ctx.defaultError };\n }\n if (typeof ctx.data === \"undefined\") {\n return { message: message ?? required_error ?? ctx.defaultError };\n }\n if (iss.code !== \"invalid_type\")\n return { message: ctx.defaultError };\n return { message: message ?? invalid_type_error ?? ctx.defaultError };\n };\n return { errorMap: customMap, description };\n}\nexport class ZodType {\n get description() {\n return this._def.description;\n }\n _getType(input) {\n return getParsedType(input.data);\n }\n _getOrReturnCtx(input, ctx) {\n return (ctx || {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n });\n }\n _processInputParams(input) {\n return {\n status: new ParseStatus(),\n ctx: {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n },\n };\n }\n _parseSync(input) {\n const result = this._parse(input);\n if (isAsync(result)) {\n throw new Error(\"Synchronous parse encountered promise.\");\n }\n return result;\n }\n _parseAsync(input) {\n const result = this._parse(input);\n return Promise.resolve(result);\n }\n parse(data, params) {\n const result = this.safeParse(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n safeParse(data, params) {\n const ctx = {\n common: {\n issues: [],\n async: params?.async ?? false,\n contextualErrorMap: params?.errorMap,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n return handleResult(ctx, result);\n }\n \"~validate\"(data) {\n const ctx = {\n common: {\n issues: [],\n async: !!this[\"~standard\"].async,\n },\n path: [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n if (!this[\"~standard\"].async) {\n try {\n const result = this._parseSync({ data, path: [], parent: ctx });\n return isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n };\n }\n catch (err) {\n if (err?.message?.toLowerCase()?.includes(\"encountered\")) {\n this[\"~standard\"].async = true;\n }\n ctx.common = {\n issues: [],\n async: true,\n };\n }\n }\n return this._parseAsync({ data, path: [], parent: ctx }).then((result) => isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n });\n }\n async parseAsync(data, params) {\n const result = await this.safeParseAsync(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n async safeParseAsync(data, params) {\n const ctx = {\n common: {\n issues: [],\n contextualErrorMap: params?.errorMap,\n async: true,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n const result = await (isAsync(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult));\n return handleResult(ctx, result);\n }\n refine(check, message) {\n const getIssueProperties = (val) => {\n if (typeof message === \"string\" || typeof message === \"undefined\") {\n return { message };\n }\n else if (typeof message === \"function\") {\n return message(val);\n }\n else {\n return message;\n }\n };\n return this._refinement((val, ctx) => {\n const result = check(val);\n const setError = () => ctx.addIssue({\n code: ZodIssueCode.custom,\n ...getIssueProperties(val),\n });\n if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n return result.then((data) => {\n if (!data) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n if (!result) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n refinement(check, refinementData) {\n return this._refinement((val, ctx) => {\n if (!check(val)) {\n ctx.addIssue(typeof refinementData === \"function\" ? refinementData(val, ctx) : refinementData);\n return false;\n }\n else {\n return true;\n }\n });\n }\n _refinement(refinement) {\n return new ZodEffects({\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"refinement\", refinement },\n });\n }\n superRefine(refinement) {\n return this._refinement(refinement);\n }\n constructor(def) {\n /** Alias of safeParseAsync */\n this.spa = this.safeParseAsync;\n this._def = def;\n this.parse = this.parse.bind(this);\n this.safeParse = this.safeParse.bind(this);\n this.parseAsync = this.parseAsync.bind(this);\n this.safeParseAsync = this.safeParseAsync.bind(this);\n this.spa = this.spa.bind(this);\n this.refine = this.refine.bind(this);\n this.refinement = this.refinement.bind(this);\n this.superRefine = this.superRefine.bind(this);\n this.optional = this.optional.bind(this);\n this.nullable = this.nullable.bind(this);\n this.nullish = this.nullish.bind(this);\n this.array = this.array.bind(this);\n this.promise = this.promise.bind(this);\n this.or = this.or.bind(this);\n this.and = this.and.bind(this);\n this.transform = this.transform.bind(this);\n this.brand = this.brand.bind(this);\n this.default = this.default.bind(this);\n this.catch = this.catch.bind(this);\n this.describe = this.describe.bind(this);\n this.pipe = this.pipe.bind(this);\n this.readonly = this.readonly.bind(this);\n this.isNullable = this.isNullable.bind(this);\n this.isOptional = this.isOptional.bind(this);\n this[\"~standard\"] = {\n version: 1,\n vendor: \"zod\",\n validate: (data) => this[\"~validate\"](data),\n };\n }\n optional() {\n return ZodOptional.create(this, this._def);\n }\n nullable() {\n return ZodNullable.create(this, this._def);\n }\n nullish() {\n return this.nullable().optional();\n }\n array() {\n return ZodArray.create(this);\n }\n promise() {\n return ZodPromise.create(this, this._def);\n }\n or(option) {\n return ZodUnion.create([this, option], this._def);\n }\n and(incoming) {\n return ZodIntersection.create(this, incoming, this._def);\n }\n transform(transform) {\n return new ZodEffects({\n ...processCreateParams(this._def),\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"transform\", transform },\n });\n }\n default(def) {\n const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodDefault({\n ...processCreateParams(this._def),\n innerType: this,\n defaultValue: defaultValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n });\n }\n brand() {\n return new ZodBranded({\n typeName: ZodFirstPartyTypeKind.ZodBranded,\n type: this,\n ...processCreateParams(this._def),\n });\n }\n catch(def) {\n const catchValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodCatch({\n ...processCreateParams(this._def),\n innerType: this,\n catchValue: catchValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n });\n }\n describe(description) {\n const This = this.constructor;\n return new This({\n ...this._def,\n description,\n });\n }\n pipe(target) {\n return ZodPipeline.create(this, target);\n }\n readonly() {\n return ZodReadonly.create(this);\n }\n isOptional() {\n return this.safeParse(undefined).success;\n }\n isNullable() {\n return this.safeParse(null).success;\n }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;\n// const uuidRegex =\n// /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst jwtRegex = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\nconst durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n// /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n// /^[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// const emailRegex =\n// /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n// /^[a-z0-9.!#$%&\u2019*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nconst ipv4CidrRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/;\n// const ipv6Regex =\n// /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\nconst ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;\nconst ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// https://base64.guru/standards/base64url\nconst base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n let secondsRegexSource = `[0-5]\\\\d`;\n if (args.precision) {\n secondsRegexSource = `${secondsRegexSource}\\\\.\\\\d{${args.precision}}`;\n }\n else if (args.precision == null) {\n secondsRegexSource = `${secondsRegexSource}(\\\\.\\\\d+)?`;\n }\n const secondsQuantifier = args.precision ? \"+\" : \"?\"; // require seconds if precision is nonzero\n return `([01]\\\\d|2[0-3]):[0-5]\\\\d(:${secondsRegexSource})${secondsQuantifier}`;\n}\nfunction timeRegex(args) {\n return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetimeRegex(args) {\n let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n const opts = [];\n opts.push(args.local ? `Z?` : `Z`);\n if (args.offset)\n opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n regex = `${regex}(${opts.join(\"|\")})`;\n return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n return true;\n }\n return false;\n}\nfunction isValidJWT(jwt, alg) {\n if (!jwtRegex.test(jwt))\n return false;\n try {\n const [header] = jwt.split(\".\");\n if (!header)\n return false;\n // Convert base64url to base64\n const base64 = header\n .replace(/-/g, \"+\")\n .replace(/_/g, \"/\")\n .padEnd(header.length + ((4 - (header.length % 4)) % 4), \"=\");\n const decoded = JSON.parse(atob(base64));\n if (typeof decoded !== \"object\" || decoded === null)\n return false;\n if (\"typ\" in decoded && decoded?.typ !== \"JWT\")\n return false;\n if (!decoded.alg)\n return false;\n if (alg && decoded.alg !== alg)\n return false;\n return true;\n }\n catch {\n return false;\n }\n}\nfunction isValidCidr(ip, version) {\n if ((version === \"v4\" || !version) && ipv4CidrRegex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6CidrRegex.test(ip)) {\n return true;\n }\n return false;\n}\nexport class ZodString extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = String(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.string) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.string,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.length < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.length > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"length\") {\n const tooBig = input.data.length > check.value;\n const tooSmall = input.data.length < check.value;\n if (tooBig || tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n if (tooBig) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n else if (tooSmall) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n status.dirty();\n }\n }\n else if (check.kind === \"email\") {\n if (!emailRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"email\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"emoji\") {\n if (!emojiRegex) {\n emojiRegex = new RegExp(_emojiRegex, \"u\");\n }\n if (!emojiRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"emoji\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"uuid\") {\n if (!uuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"uuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"nanoid\") {\n if (!nanoidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"nanoid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid\") {\n if (!cuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid2\") {\n if (!cuid2Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid2\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ulid\") {\n if (!ulidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ulid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"url\") {\n try {\n new URL(input.data);\n }\n catch {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"regex\") {\n check.regex.lastIndex = 0;\n const testResult = check.regex.test(input.data);\n if (!testResult) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"regex\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"trim\") {\n input.data = input.data.trim();\n }\n else if (check.kind === \"includes\") {\n if (!input.data.includes(check.value, check.position)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { includes: check.value, position: check.position },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"toLowerCase\") {\n input.data = input.data.toLowerCase();\n }\n else if (check.kind === \"toUpperCase\") {\n input.data = input.data.toUpperCase();\n }\n else if (check.kind === \"startsWith\") {\n if (!input.data.startsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { startsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"endsWith\") {\n if (!input.data.endsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { endsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"datetime\") {\n const regex = datetimeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"datetime\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"date\") {\n const regex = dateRegex;\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"date\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"time\") {\n const regex = timeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"time\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"duration\") {\n if (!durationRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"duration\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ip\") {\n if (!isValidIP(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ip\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"jwt\") {\n if (!isValidJWT(input.data, check.alg)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"jwt\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cidr\") {\n if (!isValidCidr(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cidr\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64\") {\n if (!base64Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64url\") {\n if (!base64urlRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _regex(regex, validation, message) {\n return this.refinement((data) => regex.test(data), {\n validation,\n code: ZodIssueCode.invalid_string,\n ...errorUtil.errToObj(message),\n });\n }\n _addCheck(check) {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n email(message) {\n return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n }\n url(message) {\n return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n }\n emoji(message) {\n return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n }\n uuid(message) {\n return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n }\n nanoid(message) {\n return this._addCheck({ kind: \"nanoid\", ...errorUtil.errToObj(message) });\n }\n cuid(message) {\n return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n }\n cuid2(message) {\n return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n }\n ulid(message) {\n return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n }\n base64(message) {\n return this._addCheck({ kind: \"base64\", ...errorUtil.errToObj(message) });\n }\n base64url(message) {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return this._addCheck({\n kind: \"base64url\",\n ...errorUtil.errToObj(message),\n });\n }\n jwt(options) {\n return this._addCheck({ kind: \"jwt\", ...errorUtil.errToObj(options) });\n }\n ip(options) {\n return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n }\n cidr(options) {\n return this._addCheck({ kind: \"cidr\", ...errorUtil.errToObj(options) });\n }\n datetime(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"datetime\",\n precision: null,\n offset: false,\n local: false,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"datetime\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n offset: options?.offset ?? false,\n local: options?.local ?? false,\n ...errorUtil.errToObj(options?.message),\n });\n }\n date(message) {\n return this._addCheck({ kind: \"date\", message });\n }\n time(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"time\",\n precision: null,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"time\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n ...errorUtil.errToObj(options?.message),\n });\n }\n duration(message) {\n return this._addCheck({ kind: \"duration\", ...errorUtil.errToObj(message) });\n }\n regex(regex, message) {\n return this._addCheck({\n kind: \"regex\",\n regex: regex,\n ...errorUtil.errToObj(message),\n });\n }\n includes(value, options) {\n return this._addCheck({\n kind: \"includes\",\n value: value,\n position: options?.position,\n ...errorUtil.errToObj(options?.message),\n });\n }\n startsWith(value, message) {\n return this._addCheck({\n kind: \"startsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n endsWith(value, message) {\n return this._addCheck({\n kind: \"endsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n min(minLength, message) {\n return this._addCheck({\n kind: \"min\",\n value: minLength,\n ...errorUtil.errToObj(message),\n });\n }\n max(maxLength, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxLength,\n ...errorUtil.errToObj(message),\n });\n }\n length(len, message) {\n return this._addCheck({\n kind: \"length\",\n value: len,\n ...errorUtil.errToObj(message),\n });\n }\n /**\n * Equivalent to `.min(1)`\n */\n nonempty(message) {\n return this.min(1, errorUtil.errToObj(message));\n }\n trim() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"trim\" }],\n });\n }\n toLowerCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n });\n }\n toUpperCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n });\n }\n get isDatetime() {\n return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n }\n get isDate() {\n return !!this._def.checks.find((ch) => ch.kind === \"date\");\n }\n get isTime() {\n return !!this._def.checks.find((ch) => ch.kind === \"time\");\n }\n get isDuration() {\n return !!this._def.checks.find((ch) => ch.kind === \"duration\");\n }\n get isEmail() {\n return !!this._def.checks.find((ch) => ch.kind === \"email\");\n }\n get isURL() {\n return !!this._def.checks.find((ch) => ch.kind === \"url\");\n }\n get isEmoji() {\n return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n }\n get isUUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n }\n get isNANOID() {\n return !!this._def.checks.find((ch) => ch.kind === \"nanoid\");\n }\n get isCUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n }\n get isCUID2() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n }\n get isULID() {\n return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n }\n get isIP() {\n return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n }\n get isCIDR() {\n return !!this._def.checks.find((ch) => ch.kind === \"cidr\");\n }\n get isBase64() {\n return !!this._def.checks.find((ch) => ch.kind === \"base64\");\n }\n get isBase64url() {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return !!this._def.checks.find((ch) => ch.kind === \"base64url\");\n }\n get minLength() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxLength() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodString.create = (params) => {\n return new ZodString({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodString,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / 10 ** decCount;\n}\nexport class ZodNumber extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n this.step = this.multipleOf;\n }\n _parse(input) {\n if (this._def.coerce) {\n input.data = Number(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.number) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.number,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"int\") {\n if (!util.isInteger(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: \"integer\",\n received: \"float\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (floatSafeRemainder(input.data, check.value) !== 0) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"finite\") {\n if (!Number.isFinite(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_finite,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodNumber({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodNumber({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n int(message) {\n return this._addCheck({\n kind: \"int\",\n message: errorUtil.toString(message),\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value: value,\n message: errorUtil.toString(message),\n });\n }\n finite(message) {\n return this._addCheck({\n kind: \"finite\",\n message: errorUtil.toString(message),\n });\n }\n safe(message) {\n return this._addCheck({\n kind: \"min\",\n inclusive: true,\n value: Number.MIN_SAFE_INTEGER,\n message: errorUtil.toString(message),\n })._addCheck({\n kind: \"max\",\n inclusive: true,\n value: Number.MAX_SAFE_INTEGER,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n get isInt() {\n return !!this._def.checks.find((ch) => ch.kind === \"int\" || (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n }\n get isFinite() {\n let max = null;\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"finite\" || ch.kind === \"int\" || ch.kind === \"multipleOf\") {\n return true;\n }\n else if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n else if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return Number.isFinite(min) && Number.isFinite(max);\n }\n}\nZodNumber.create = (params) => {\n return new ZodNumber({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodNumber,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBigInt extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n }\n _parse(input) {\n if (this._def.coerce) {\n try {\n input.data = BigInt(input.data);\n }\n catch {\n return this._getInvalidInput(input);\n }\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.bigint) {\n return this._getInvalidInput(input);\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n type: \"bigint\",\n minimum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n type: \"bigint\",\n maximum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (input.data % check.value !== BigInt(0)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _getInvalidInput(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.bigint,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodBigInt({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodBigInt({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodBigInt.create = (params) => {\n return new ZodBigInt({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodBigInt,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBoolean extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = Boolean(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.boolean) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.boolean,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodBoolean.create = (params) => {\n return new ZodBoolean({\n typeName: ZodFirstPartyTypeKind.ZodBoolean,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodDate extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = new Date(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.date) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.date,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (Number.isNaN(input.data.getTime())) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_date,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.getTime() < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n message: check.message,\n inclusive: true,\n exact: false,\n minimum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.getTime() > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n message: check.message,\n inclusive: true,\n exact: false,\n maximum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return {\n status: status.value,\n value: new Date(input.data.getTime()),\n };\n }\n _addCheck(check) {\n return new ZodDate({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n min(minDate, message) {\n return this._addCheck({\n kind: \"min\",\n value: minDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n max(maxDate, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n get minDate() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min != null ? new Date(min) : null;\n }\n get maxDate() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max != null ? new Date(max) : null;\n }\n}\nZodDate.create = (params) => {\n return new ZodDate({\n checks: [],\n coerce: params?.coerce || false,\n typeName: ZodFirstPartyTypeKind.ZodDate,\n ...processCreateParams(params),\n });\n};\nexport class ZodSymbol extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.symbol) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.symbol,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodSymbol.create = (params) => {\n return new ZodSymbol({\n typeName: ZodFirstPartyTypeKind.ZodSymbol,\n ...processCreateParams(params),\n });\n};\nexport class ZodUndefined extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.undefined,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodUndefined.create = (params) => {\n return new ZodUndefined({\n typeName: ZodFirstPartyTypeKind.ZodUndefined,\n ...processCreateParams(params),\n });\n};\nexport class ZodNull extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.null) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.null,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodNull.create = (params) => {\n return new ZodNull({\n typeName: ZodFirstPartyTypeKind.ZodNull,\n ...processCreateParams(params),\n });\n};\nexport class ZodAny extends ZodType {\n constructor() {\n super(...arguments);\n // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n this._any = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodAny.create = (params) => {\n return new ZodAny({\n typeName: ZodFirstPartyTypeKind.ZodAny,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnknown extends ZodType {\n constructor() {\n super(...arguments);\n // required\n this._unknown = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodUnknown.create = (params) => {\n return new ZodUnknown({\n typeName: ZodFirstPartyTypeKind.ZodUnknown,\n ...processCreateParams(params),\n });\n};\nexport class ZodNever extends ZodType {\n _parse(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.never,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n}\nZodNever.create = (params) => {\n return new ZodNever({\n typeName: ZodFirstPartyTypeKind.ZodNever,\n ...processCreateParams(params),\n });\n};\nexport class ZodVoid extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.void,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodVoid.create = (params) => {\n return new ZodVoid({\n typeName: ZodFirstPartyTypeKind.ZodVoid,\n ...processCreateParams(params),\n });\n};\nexport class ZodArray extends ZodType {\n _parse(input) {\n const { ctx, status } = this._processInputParams(input);\n const def = this._def;\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (def.exactLength !== null) {\n const tooBig = ctx.data.length > def.exactLength.value;\n const tooSmall = ctx.data.length < def.exactLength.value;\n if (tooBig || tooSmall) {\n addIssueToContext(ctx, {\n code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n minimum: (tooSmall ? def.exactLength.value : undefined),\n maximum: (tooBig ? def.exactLength.value : undefined),\n type: \"array\",\n inclusive: true,\n exact: true,\n message: def.exactLength.message,\n });\n status.dirty();\n }\n }\n if (def.minLength !== null) {\n if (ctx.data.length < def.minLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.minLength.message,\n });\n status.dirty();\n }\n }\n if (def.maxLength !== null) {\n if (ctx.data.length > def.maxLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.maxLength.message,\n });\n status.dirty();\n }\n }\n if (ctx.common.async) {\n return Promise.all([...ctx.data].map((item, i) => {\n return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n })).then((result) => {\n return ParseStatus.mergeArray(status, result);\n });\n }\n const result = [...ctx.data].map((item, i) => {\n return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n });\n return ParseStatus.mergeArray(status, result);\n }\n get element() {\n return this._def.type;\n }\n min(minLength, message) {\n return new ZodArray({\n ...this._def,\n minLength: { value: minLength, message: errorUtil.toString(message) },\n });\n }\n max(maxLength, message) {\n return new ZodArray({\n ...this._def,\n maxLength: { value: maxLength, message: errorUtil.toString(message) },\n });\n }\n length(len, message) {\n return new ZodArray({\n ...this._def,\n exactLength: { value: len, message: errorUtil.toString(message) },\n });\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodArray.create = (schema, params) => {\n return new ZodArray({\n type: schema,\n minLength: null,\n maxLength: null,\n exactLength: null,\n typeName: ZodFirstPartyTypeKind.ZodArray,\n ...processCreateParams(params),\n });\n};\nfunction deepPartialify(schema) {\n if (schema instanceof ZodObject) {\n const newShape = {};\n for (const key in schema.shape) {\n const fieldSchema = schema.shape[key];\n newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n }\n return new ZodObject({\n ...schema._def,\n shape: () => newShape,\n });\n }\n else if (schema instanceof ZodArray) {\n return new ZodArray({\n ...schema._def,\n type: deepPartialify(schema.element),\n });\n }\n else if (schema instanceof ZodOptional) {\n return ZodOptional.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodNullable) {\n return ZodNullable.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodTuple) {\n return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n }\n else {\n return schema;\n }\n}\nexport class ZodObject extends ZodType {\n constructor() {\n super(...arguments);\n this._cached = null;\n /**\n * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n * If you want to pass through unknown properties, use `.passthrough()` instead.\n */\n this.nonstrict = this.passthrough;\n // extend<\n // Augmentation extends ZodRawShape,\n // NewOutput extends util.flatten<{\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // }>,\n // NewInput extends util.flatten<{\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }>\n // >(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<T, Augmentation>,\n // UnknownKeys,\n // Catchall,\n // NewOutput,\n // NewInput\n // > {\n // return new ZodObject({\n // ...this._def,\n // shape: () => ({\n // ...this._def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // }\n /**\n * @deprecated Use `.extend` instead\n * */\n this.augment = this.extend;\n }\n _getCached() {\n if (this._cached !== null)\n return this._cached;\n const shape = this._def.shape();\n const keys = util.objectKeys(shape);\n this._cached = { shape, keys };\n return this._cached;\n }\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.object) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const { status, ctx } = this._processInputParams(input);\n const { shape, keys: shapeKeys } = this._getCached();\n const extraKeys = [];\n if (!(this._def.catchall instanceof ZodNever && this._def.unknownKeys === \"strip\")) {\n for (const key in ctx.data) {\n if (!shapeKeys.includes(key)) {\n extraKeys.push(key);\n }\n }\n }\n const pairs = [];\n for (const key of shapeKeys) {\n const keyValidator = shape[key];\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (this._def.catchall instanceof ZodNever) {\n const unknownKeys = this._def.unknownKeys;\n if (unknownKeys === \"passthrough\") {\n for (const key of extraKeys) {\n pairs.push({\n key: { status: \"valid\", value: key },\n value: { status: \"valid\", value: ctx.data[key] },\n });\n }\n }\n else if (unknownKeys === \"strict\") {\n if (extraKeys.length > 0) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.unrecognized_keys,\n keys: extraKeys,\n });\n status.dirty();\n }\n }\n else if (unknownKeys === \"strip\") {\n }\n else {\n throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n }\n }\n else {\n // run catchall validation\n const catchall = this._def.catchall;\n for (const key of extraKeys) {\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n ),\n alwaysSet: key in ctx.data,\n });\n }\n }\n if (ctx.common.async) {\n return Promise.resolve()\n .then(async () => {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n alwaysSet: pair.alwaysSet,\n });\n }\n return syncPairs;\n })\n .then((syncPairs) => {\n return ParseStatus.mergeObjectSync(status, syncPairs);\n });\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get shape() {\n return this._def.shape();\n }\n strict(message) {\n errorUtil.errToObj;\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strict\",\n ...(message !== undefined\n ? {\n errorMap: (issue, ctx) => {\n const defaultError = this._def.errorMap?.(issue, ctx).message ?? ctx.defaultError;\n if (issue.code === \"unrecognized_keys\")\n return {\n message: errorUtil.errToObj(message).message ?? defaultError,\n };\n return {\n message: defaultError,\n };\n },\n }\n : {}),\n });\n }\n strip() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strip\",\n });\n }\n passthrough() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"passthrough\",\n });\n }\n // const AugmentFactory =\n // <Def extends ZodObjectDef>(def: Def) =>\n // <Augmentation extends ZodRawShape>(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n // Def[\"unknownKeys\"],\n // Def[\"catchall\"]\n // > => {\n // return new ZodObject({\n // ...def,\n // shape: () => ({\n // ...def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // };\n extend(augmentation) {\n return new ZodObject({\n ...this._def,\n shape: () => ({\n ...this._def.shape(),\n ...augmentation,\n }),\n });\n }\n /**\n * Prior to zod@1.0.12 there was a bug in the\n * inferred type of merged objects. Please\n * upgrade if you are experiencing issues.\n */\n merge(merging) {\n const merged = new ZodObject({\n unknownKeys: merging._def.unknownKeys,\n catchall: merging._def.catchall,\n shape: () => ({\n ...this._def.shape(),\n ...merging._def.shape(),\n }),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n });\n return merged;\n }\n // merge<\n // Incoming extends AnyZodObject,\n // Augmentation extends Incoming[\"shape\"],\n // NewOutput extends {\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // },\n // NewInput extends {\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }\n // >(\n // merging: Incoming\n // ): ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"],\n // NewOutput,\n // NewInput\n // > {\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n setKey(key, schema) {\n return this.augment({ [key]: schema });\n }\n // merge<Incoming extends AnyZodObject>(\n // merging: Incoming\n // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n // ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"]\n // > {\n // // const mergedShape = objectUtil.mergeShapes(\n // // this._def.shape(),\n // // merging._def.shape()\n // // );\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n catchall(index) {\n return new ZodObject({\n ...this._def,\n catchall: index,\n });\n }\n pick(mask) {\n const shape = {};\n for (const key of util.objectKeys(mask)) {\n if (mask[key] && this.shape[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n omit(mask) {\n const shape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (!mask[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n /**\n * @deprecated\n */\n deepPartial() {\n return deepPartialify(this);\n }\n partial(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n const fieldSchema = this.shape[key];\n if (mask && !mask[key]) {\n newShape[key] = fieldSchema;\n }\n else {\n newShape[key] = fieldSchema.optional();\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n required(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (mask && !mask[key]) {\n newShape[key] = this.shape[key];\n }\n else {\n const fieldSchema = this.shape[key];\n let newField = fieldSchema;\n while (newField instanceof ZodOptional) {\n newField = newField._def.innerType;\n }\n newShape[key] = newField;\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n keyof() {\n return createZodEnum(util.objectKeys(this.shape));\n }\n}\nZodObject.create = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.strictCreate = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strict\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.lazycreate = (shape, params) => {\n return new ZodObject({\n shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const options = this._def.options;\n function handleResults(results) {\n // return first issue-free validation if it exists\n for (const result of results) {\n if (result.result.status === \"valid\") {\n return result.result;\n }\n }\n for (const result of results) {\n if (result.result.status === \"dirty\") {\n // add issues from dirty option\n ctx.common.issues.push(...result.ctx.common.issues);\n return result.result;\n }\n }\n // return invalid\n const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return Promise.all(options.map(async (option) => {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n return {\n result: await option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n }),\n ctx: childCtx,\n };\n })).then(handleResults);\n }\n else {\n let dirty = undefined;\n const issues = [];\n for (const option of options) {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n const result = option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n });\n if (result.status === \"valid\") {\n return result;\n }\n else if (result.status === \"dirty\" && !dirty) {\n dirty = { result, ctx: childCtx };\n }\n if (childCtx.common.issues.length) {\n issues.push(childCtx.common.issues);\n }\n }\n if (dirty) {\n ctx.common.issues.push(...dirty.ctx.common.issues);\n return dirty.result;\n }\n const unionErrors = issues.map((issues) => new ZodError(issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n }\n get options() {\n return this._def.options;\n }\n}\nZodUnion.create = (types, params) => {\n return new ZodUnion({\n options: types,\n typeName: ZodFirstPartyTypeKind.ZodUnion,\n ...processCreateParams(params),\n });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n////////// //////////\n////////// ZodDiscriminatedUnion //////////\n////////// //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n if (type instanceof ZodLazy) {\n return getDiscriminator(type.schema);\n }\n else if (type instanceof ZodEffects) {\n return getDiscriminator(type.innerType());\n }\n else if (type instanceof ZodLiteral) {\n return [type.value];\n }\n else if (type instanceof ZodEnum) {\n return type.options;\n }\n else if (type instanceof ZodNativeEnum) {\n // eslint-disable-next-line ban/ban\n return util.objectValues(type.enum);\n }\n else if (type instanceof ZodDefault) {\n return getDiscriminator(type._def.innerType);\n }\n else if (type instanceof ZodUndefined) {\n return [undefined];\n }\n else if (type instanceof ZodNull) {\n return [null];\n }\n else if (type instanceof ZodOptional) {\n return [undefined, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodNullable) {\n return [null, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodBranded) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodReadonly) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodCatch) {\n return getDiscriminator(type._def.innerType);\n }\n else {\n return [];\n }\n};\nexport class ZodDiscriminatedUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const discriminator = this.discriminator;\n const discriminatorValue = ctx.data[discriminator];\n const option = this.optionsMap.get(discriminatorValue);\n if (!option) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union_discriminator,\n options: Array.from(this.optionsMap.keys()),\n path: [discriminator],\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n else {\n return option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n get discriminator() {\n return this._def.discriminator;\n }\n get options() {\n return this._def.options;\n }\n get optionsMap() {\n return this._def.optionsMap;\n }\n /**\n * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n * have a different value for each object in the union.\n * @param discriminator the name of the discriminator property\n * @param types an array of object schemas\n * @param params\n */\n static create(discriminator, options, params) {\n // Get all the valid discriminator values\n const optionsMap = new Map();\n // try {\n for (const type of options) {\n const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n if (!discriminatorValues.length) {\n throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n }\n for (const value of discriminatorValues) {\n if (optionsMap.has(value)) {\n throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n }\n optionsMap.set(value, type);\n }\n }\n return new ZodDiscriminatedUnion({\n typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n discriminator,\n options,\n optionsMap,\n ...processCreateParams(params),\n });\n }\n}\nfunction mergeValues(a, b) {\n const aType = getParsedType(a);\n const bType = getParsedType(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n const bKeys = util.objectKeys(b);\n const sharedKeys = util.objectKeys(a).filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n if (a.length !== b.length) {\n return { valid: false };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n else if (aType === ZodParsedType.date && bType === ZodParsedType.date && +a === +b) {\n return { valid: true, data: a };\n }\n else {\n return { valid: false };\n }\n}\nexport class ZodIntersection extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const handleParsed = (parsedLeft, parsedRight) => {\n if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n return INVALID;\n }\n const merged = mergeValues(parsedLeft.value, parsedRight.value);\n if (!merged.valid) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_intersection_types,\n });\n return INVALID;\n }\n if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n status.dirty();\n }\n return { status: status.value, value: merged.data };\n };\n if (ctx.common.async) {\n return Promise.all([\n this._def.left._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n this._def.right._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n ]).then(([left, right]) => handleParsed(left, right));\n }\n else {\n return handleParsed(this._def.left._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }), this._def.right._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }));\n }\n }\n}\nZodIntersection.create = (left, right, params) => {\n return new ZodIntersection({\n left: left,\n right: right,\n typeName: ZodFirstPartyTypeKind.ZodIntersection,\n ...processCreateParams(params),\n });\n};\n// type ZodTupleItems = [ZodTypeAny, ...ZodTypeAny[]];\nexport class ZodTuple extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (ctx.data.length < this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n return INVALID;\n }\n const rest = this._def.rest;\n if (!rest && ctx.data.length > this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n status.dirty();\n }\n const items = [...ctx.data]\n .map((item, itemIndex) => {\n const schema = this._def.items[itemIndex] || this._def.rest;\n if (!schema)\n return null;\n return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n })\n .filter((x) => !!x); // filter nulls\n if (ctx.common.async) {\n return Promise.all(items).then((results) => {\n return ParseStatus.mergeArray(status, results);\n });\n }\n else {\n return ParseStatus.mergeArray(status, items);\n }\n }\n get items() {\n return this._def.items;\n }\n rest(rest) {\n return new ZodTuple({\n ...this._def,\n rest,\n });\n }\n}\nZodTuple.create = (schemas, params) => {\n if (!Array.isArray(schemas)) {\n throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n }\n return new ZodTuple({\n items: schemas,\n typeName: ZodFirstPartyTypeKind.ZodTuple,\n rest: null,\n ...processCreateParams(params),\n });\n};\nexport class ZodRecord extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const pairs = [];\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n for (const key in ctx.data) {\n pairs.push({\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (ctx.common.async) {\n return ParseStatus.mergeObjectAsync(status, pairs);\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get element() {\n return this._def.valueType;\n }\n static create(first, second, third) {\n if (second instanceof ZodType) {\n return new ZodRecord({\n keyType: first,\n valueType: second,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(third),\n });\n }\n return new ZodRecord({\n keyType: ZodString.create(),\n valueType: first,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(second),\n });\n }\n}\nexport class ZodMap extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.map) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.map,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n return {\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n };\n });\n if (ctx.common.async) {\n const finalMap = new Map();\n return Promise.resolve().then(async () => {\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n });\n }\n else {\n const finalMap = new Map();\n for (const pair of pairs) {\n const key = pair.key;\n const value = pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n }\n }\n}\nZodMap.create = (keyType, valueType, params) => {\n return new ZodMap({\n valueType,\n keyType,\n typeName: ZodFirstPartyTypeKind.ZodMap,\n ...processCreateParams(params),\n });\n};\nexport class ZodSet extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.set) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.set,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const def = this._def;\n if (def.minSize !== null) {\n if (ctx.data.size < def.minSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.minSize.message,\n });\n status.dirty();\n }\n }\n if (def.maxSize !== null) {\n if (ctx.data.size > def.maxSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.maxSize.message,\n });\n status.dirty();\n }\n }\n const valueType = this._def.valueType;\n function finalizeSet(elements) {\n const parsedSet = new Set();\n for (const element of elements) {\n if (element.status === \"aborted\")\n return INVALID;\n if (element.status === \"dirty\")\n status.dirty();\n parsedSet.add(element.value);\n }\n return { status: status.value, value: parsedSet };\n }\n const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n if (ctx.common.async) {\n return Promise.all(elements).then((elements) => finalizeSet(elements));\n }\n else {\n return finalizeSet(elements);\n }\n }\n min(minSize, message) {\n return new ZodSet({\n ...this._def,\n minSize: { value: minSize, message: errorUtil.toString(message) },\n });\n }\n max(maxSize, message) {\n return new ZodSet({\n ...this._def,\n maxSize: { value: maxSize, message: errorUtil.toString(message) },\n });\n }\n size(size, message) {\n return this.min(size, message).max(size, message);\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodSet.create = (valueType, params) => {\n return new ZodSet({\n valueType,\n minSize: null,\n maxSize: null,\n typeName: ZodFirstPartyTypeKind.ZodSet,\n ...processCreateParams(params),\n });\n};\nexport class ZodFunction extends ZodType {\n constructor() {\n super(...arguments);\n this.validate = this.implement;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.function) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.function,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n function makeArgsIssue(args, error) {\n return makeIssue({\n data: args,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_arguments,\n argumentsError: error,\n },\n });\n }\n function makeReturnsIssue(returns, error) {\n return makeIssue({\n data: returns,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_return_type,\n returnTypeError: error,\n },\n });\n }\n const params = { errorMap: ctx.common.contextualErrorMap };\n const fn = ctx.data;\n if (this._def.returns instanceof ZodPromise) {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(async function (...args) {\n const error = new ZodError([]);\n const parsedArgs = await me._def.args.parseAsync(args, params).catch((e) => {\n error.addIssue(makeArgsIssue(args, e));\n throw error;\n });\n const result = await Reflect.apply(fn, this, parsedArgs);\n const parsedReturns = await me._def.returns._def.type\n .parseAsync(result, params)\n .catch((e) => {\n error.addIssue(makeReturnsIssue(result, e));\n throw error;\n });\n return parsedReturns;\n });\n }\n else {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(function (...args) {\n const parsedArgs = me._def.args.safeParse(args, params);\n if (!parsedArgs.success) {\n throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n }\n const result = Reflect.apply(fn, this, parsedArgs.data);\n const parsedReturns = me._def.returns.safeParse(result, params);\n if (!parsedReturns.success) {\n throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n }\n return parsedReturns.data;\n });\n }\n }\n parameters() {\n return this._def.args;\n }\n returnType() {\n return this._def.returns;\n }\n args(...items) {\n return new ZodFunction({\n ...this._def,\n args: ZodTuple.create(items).rest(ZodUnknown.create()),\n });\n }\n returns(returnType) {\n return new ZodFunction({\n ...this._def,\n returns: returnType,\n });\n }\n implement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n strictImplement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n static create(args, returns, params) {\n return new ZodFunction({\n args: (args ? args : ZodTuple.create([]).rest(ZodUnknown.create())),\n returns: returns || ZodUnknown.create(),\n typeName: ZodFirstPartyTypeKind.ZodFunction,\n ...processCreateParams(params),\n });\n }\n}\nexport class ZodLazy extends ZodType {\n get schema() {\n return this._def.getter();\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const lazySchema = this._def.getter();\n return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n }\n}\nZodLazy.create = (getter, params) => {\n return new ZodLazy({\n getter: getter,\n typeName: ZodFirstPartyTypeKind.ZodLazy,\n ...processCreateParams(params),\n });\n};\nexport class ZodLiteral extends ZodType {\n _parse(input) {\n if (input.data !== this._def.value) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_literal,\n expected: this._def.value,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n get value() {\n return this._def.value;\n }\n}\nZodLiteral.create = (value, params) => {\n return new ZodLiteral({\n value: value,\n typeName: ZodFirstPartyTypeKind.ZodLiteral,\n ...processCreateParams(params),\n });\n};\nfunction createZodEnum(values, params) {\n return new ZodEnum({\n values,\n typeName: ZodFirstPartyTypeKind.ZodEnum,\n ...processCreateParams(params),\n });\n}\nexport class ZodEnum extends ZodType {\n _parse(input) {\n if (typeof input.data !== \"string\") {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(this._def.values);\n }\n if (!this._cache.has(input.data)) {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get options() {\n return this._def.values;\n }\n get enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Values() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n extract(values, newDef = this._def) {\n return ZodEnum.create(values, {\n ...this._def,\n ...newDef,\n });\n }\n exclude(values, newDef = this._def) {\n return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {\n ...this._def,\n ...newDef,\n });\n }\n}\nZodEnum.create = createZodEnum;\nexport class ZodNativeEnum extends ZodType {\n _parse(input) {\n const nativeEnumValues = util.getValidEnumValues(this._def.values);\n const ctx = this._getOrReturnCtx(input);\n if (ctx.parsedType !== ZodParsedType.string && ctx.parsedType !== ZodParsedType.number) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(util.getValidEnumValues(this._def.values));\n }\n if (!this._cache.has(input.data)) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get enum() {\n return this._def.values;\n }\n}\nZodNativeEnum.create = (values, params) => {\n return new ZodNativeEnum({\n values: values,\n typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n ...processCreateParams(params),\n });\n};\nexport class ZodPromise extends ZodType {\n unwrap() {\n return this._def.type;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.promise && ctx.common.async === false) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.promise,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const promisified = ctx.parsedType === ZodParsedType.promise ? ctx.data : Promise.resolve(ctx.data);\n return OK(promisified.then((data) => {\n return this._def.type.parseAsync(data, {\n path: ctx.path,\n errorMap: ctx.common.contextualErrorMap,\n });\n }));\n }\n}\nZodPromise.create = (schema, params) => {\n return new ZodPromise({\n type: schema,\n typeName: ZodFirstPartyTypeKind.ZodPromise,\n ...processCreateParams(params),\n });\n};\nexport class ZodEffects extends ZodType {\n innerType() {\n return this._def.schema;\n }\n sourceType() {\n return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n ? this._def.schema.sourceType()\n : this._def.schema;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const effect = this._def.effect || null;\n const checkCtx = {\n addIssue: (arg) => {\n addIssueToContext(ctx, arg);\n if (arg.fatal) {\n status.abort();\n }\n else {\n status.dirty();\n }\n },\n get path() {\n return ctx.path;\n },\n };\n checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n if (effect.type === \"preprocess\") {\n const processed = effect.transform(ctx.data, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(processed).then(async (processed) => {\n if (status.value === \"aborted\")\n return INVALID;\n const result = await this._def.schema._parseAsync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n });\n }\n else {\n if (status.value === \"aborted\")\n return INVALID;\n const result = this._def.schema._parseSync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n }\n }\n if (effect.type === \"refinement\") {\n const executeRefinement = (acc) => {\n const result = effect.refinement(acc, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(result);\n }\n if (result instanceof Promise) {\n throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n }\n return acc;\n };\n if (ctx.common.async === false) {\n const inner = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n // return value is ignored\n executeRefinement(inner.value);\n return { status: status.value, value: inner.value };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((inner) => {\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n return executeRefinement(inner.value).then(() => {\n return { status: status.value, value: inner.value };\n });\n });\n }\n }\n if (effect.type === \"transform\") {\n if (ctx.common.async === false) {\n const base = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (!isValid(base))\n return INVALID;\n const result = effect.transform(base.value, checkCtx);\n if (result instanceof Promise) {\n throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n }\n return { status: status.value, value: result };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => {\n if (!isValid(base))\n return INVALID;\n return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({\n status: status.value,\n value: result,\n }));\n });\n }\n }\n util.assertNever(effect);\n }\n}\nZodEffects.create = (schema, effect, params) => {\n return new ZodEffects({\n schema,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect,\n ...processCreateParams(params),\n });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n return new ZodEffects({\n schema,\n effect: { type: \"preprocess\", transform: preprocess },\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n ...processCreateParams(params),\n });\n};\nexport { ZodEffects as ZodTransformer };\nexport class ZodOptional extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.undefined) {\n return OK(undefined);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodOptional.create = (type, params) => {\n return new ZodOptional({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodOptional,\n ...processCreateParams(params),\n });\n};\nexport class ZodNullable extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.null) {\n return OK(null);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodNullable.create = (type, params) => {\n return new ZodNullable({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodNullable,\n ...processCreateParams(params),\n });\n};\nexport class ZodDefault extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n let data = ctx.data;\n if (ctx.parsedType === ZodParsedType.undefined) {\n data = this._def.defaultValue();\n }\n return this._def.innerType._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n removeDefault() {\n return this._def.innerType;\n }\n}\nZodDefault.create = (type, params) => {\n return new ZodDefault({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n defaultValue: typeof params.default === \"function\" ? params.default : () => params.default,\n ...processCreateParams(params),\n });\n};\nexport class ZodCatch extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n // newCtx is used to not collect issues from inner types in ctx\n const newCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n };\n const result = this._def.innerType._parse({\n data: newCtx.data,\n path: newCtx.path,\n parent: {\n ...newCtx,\n },\n });\n if (isAsync(result)) {\n return result.then((result) => {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n });\n }\n else {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n }\n }\n removeCatch() {\n return this._def.innerType;\n }\n}\nZodCatch.create = (type, params) => {\n return new ZodCatch({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n ...processCreateParams(params),\n });\n};\nexport class ZodNaN extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.nan) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.nan,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n}\nZodNaN.create = (params) => {\n return new ZodNaN({\n typeName: ZodFirstPartyTypeKind.ZodNaN,\n ...processCreateParams(params),\n });\n};\nexport const BRAND = Symbol(\"zod_brand\");\nexport class ZodBranded extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const data = ctx.data;\n return this._def.type._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n unwrap() {\n return this._def.type;\n }\n}\nexport class ZodPipeline extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.common.async) {\n const handleAsync = async () => {\n const inResult = await this._def.in._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return DIRTY(inResult.value);\n }\n else {\n return this._def.out._parseAsync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n };\n return handleAsync();\n }\n else {\n const inResult = this._def.in._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return {\n status: \"dirty\",\n value: inResult.value,\n };\n }\n else {\n return this._def.out._parseSync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n }\n static create(a, b) {\n return new ZodPipeline({\n in: a,\n out: b,\n typeName: ZodFirstPartyTypeKind.ZodPipeline,\n });\n }\n}\nexport class ZodReadonly extends ZodType {\n _parse(input) {\n const result = this._def.innerType._parse(input);\n const freeze = (data) => {\n if (isValid(data)) {\n data.value = Object.freeze(data.value);\n }\n return data;\n };\n return isAsync(result) ? result.then((data) => freeze(data)) : freeze(result);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodReadonly.create = (type, params) => {\n return new ZodReadonly({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodReadonly,\n ...processCreateParams(params),\n });\n};\n////////////////////////////////////////\n////////////////////////////////////////\n////////// //////////\n////////// z.custom //////////\n////////// //////////\n////////////////////////////////////////\n////////////////////////////////////////\nfunction cleanParams(params, data) {\n const p = typeof params === \"function\" ? params(data) : typeof params === \"string\" ? { message: params } : params;\n const p2 = typeof p === \"string\" ? { message: p } : p;\n return p2;\n}\nexport function custom(check, _params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n if (check)\n return ZodAny.create().superRefine((data, ctx) => {\n const r = check(data);\n if (r instanceof Promise) {\n return r.then((r) => {\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n });\n }\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n return;\n });\n return ZodAny.create();\n}\nexport { ZodType as Schema, ZodType as ZodSchema };\nexport const late = {\n object: ZodObject.lazycreate,\n};\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n// requires TS 4.4+\nclass Class {\n constructor(..._) { }\n}\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nexport const coerce = {\n string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n boolean: ((arg) => ZodBoolean.create({\n ...arg,\n coerce: true,\n })),\n bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nexport { anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, dateType as date, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, instanceOfType as instanceof, intersectionType as intersection, lazyType as lazy, literalType as literal, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, recordType as record, setType as set, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, voidType as void, };\nexport const NEVER = INVALID;\n", "export * from \"./errors.js\";\nexport * from \"./helpers/parseUtil.js\";\nexport * from \"./helpers/typeAliases.js\";\nexport * from \"./helpers/util.js\";\nexport * from \"./types.js\";\nexport * from \"./ZodError.js\";\n", "import * as z from \"./v3/external.js\";\nexport * from \"./v3/external.js\";\nexport { z };\nexport default z;\n", "/**\n * Zod validation schemas for state files.\n * Catches disk corruption early at load boundaries.\n */\n\nimport { z } from \"zod\";\n\nimport { BADGE_TYPES, CODING_STATS, EVENT_COUNTER_KEYS, MOOD_TYPES } from \"../engine/types.js\";\n\n// ---- Shared Primitives ----\n\nconst BadgeTypeSchema = z.enum(BADGE_TYPES);\n\n// ---- Coding Stats ----\n\nexport const CodingStatsSchema = z.object({\n stamina: z.number(),\n debugging: z.number(),\n stability: z.number(),\n velocity: z.number(),\n wisdom: z.number(),\n});\n\n// ---- Owned Pokemon ----\n\nexport const OwnedPokemonSchema = z.object({\n id: z.string(),\n pokemonId: z.number().int().min(1).max(905),\n nickname: z.string().nullable(),\n level: z.number().int().min(1).max(100),\n currentXp: z.number().int().min(0),\n totalXp: z.number().int().min(0),\n codingStats: CodingStatsSchema,\n happiness: z.number().int().min(0).max(255),\n caughtAt: z.string(),\n evolvedAt: z.string().nullable(),\n isActive: z.boolean(),\n personality: z.string().nullable(),\n shiny: z.boolean().default(false),\n isStarter: z.boolean().default(false),\n});\n\n// ---- Event Counters ----\n\n// Cast needed: Object.fromEntries loses key specificity, but keys are guaranteed by EVENT_COUNTER_KEYS\nexport const EventCountersSchema = z.object(\n Object.fromEntries(\n EVENT_COUNTER_KEYS.map((key) => [key, z.number().int().min(0).default(0)]),\n ) as Record<(typeof EVENT_COUNTER_KEYS)[number], z.ZodDefault<z.ZodNumber>>,\n);\n\n// ---- Streak Data ----\n\nexport const StreakDataSchema = z.object({\n currentStreak: z.number().int().min(0).default(0),\n longestStreak: z.number().int().min(0).default(0),\n lastActiveDate: z.string().nullable().default(null),\n totalDaysActive: z.number().int().min(0).default(0),\n});\n\n// ---- Buddy Config ----\n\nexport const BuddyConfigSchema = z.object({\n muted: z.boolean().default(false),\n reactionCooldownMs: z.number().int().min(0).default(30_000),\n statusLineEnabled: z.boolean().default(true),\n bellEnabled: z.boolean().default(true),\n encounterSpeed: z.enum([\"fast\", \"normal\", \"slow\"]).default(\"normal\"),\n xpSharePercent: z.number().min(0).max(100).default(25),\n});\n\n// ---- Pokedex ----\n\nexport const PokedexEntrySchema = z.object({\n seen: z.boolean(),\n caught: z.boolean(),\n firstSeen: z.string().nullable(),\n firstCaught: z.string().nullable(),\n});\n\nexport const PokedexStateSchema = z.object({\n entries: z.record(z.coerce.number(), PokedexEntrySchema).default({}),\n totalSeen: z.number().int().min(0).default(0),\n totalCaught: z.number().int().min(0).default(0),\n});\n\n// ---- Achievements ----\n\nexport const UnlockedAchievementSchema = z.object({\n achievementId: z.string(),\n unlockedAt: z.string(),\n});\n\n// ---- Share Stats ----\n\nexport const ShareStatsSchema = z.object({\n wins: z.number().int().min(0).default(0),\n losses: z.number().int().min(0).default(0),\n ties: z.number().int().min(0).default(0),\n});\n\n// ---- Pending Quiz ----\n\nexport const PendingQuizSchema = z.object({\n type: z.enum([\"type_matchup\", \"stat_compare\", \"evolution\", \"pokedex_trivia\"]),\n question: z.string(),\n options: z.array(z.string()),\n correctAnswer: z.number().int().min(1).max(4),\n});\n\n// ---- Catch Condition ----\n\nexport const CatchConditionSchema = z.object({\n requiredStat: z.enum(CODING_STATS).nullable(),\n minStatValue: z.number(),\n requiredLevel: z.number(),\n});\n\n// ---- Wild Encounter ----\n\nexport const WildEncounterSchema = z.object({\n pokemonId: z.number().int().min(1).max(905),\n level: z.number().int().min(1).max(100),\n catchCondition: CatchConditionSchema,\n});\n\n// ---- Player State (top-level) ----\n\nexport const PlayerStateSchema = z.object({\n trainerId: z.string(),\n trainerName: z.string(),\n party: z.array(OwnedPokemonSchema).max(6),\n pcBox: z.array(OwnedPokemonSchema).default([]),\n pokedex: PokedexStateSchema,\n badges: z.array(BadgeTypeSchema).default([]),\n achievements: z.array(UnlockedAchievementSchema).default([]),\n counters: EventCountersSchema,\n streak: StreakDataSchema,\n config: BuddyConfigSchema,\n startedAt: z.string(),\n totalXpEarned: z.number().int().min(0).default(0),\n totalSessions: z.number().int().min(0).default(0),\n pendingEncounter: WildEncounterSchema.nullable().default(null),\n xpSinceLastEncounter: z.number().int().min(0).default(0),\n recentToolTypes: z.array(z.string()).default([]),\n lastEncounterTime: z.number().int().min(0).default(0),\n mood: z.enum(MOOD_TYPES).default(\"neutral\"),\n moodSetAt: z.number().default(0),\n lastFedAt: z.number().default(0),\n lastTrainedAt: z.number().default(0),\n lastPlayedAt: z.number().default(0),\n pendingQuiz: PendingQuizSchema.nullable().default(null),\n shareStats: ShareStatsSchema.default({ wins: 0, losses: 0, ties: 0 }),\n});\n", "/**\n * Complete Pokedex \u2014 all 905 Pokemon (Gen 1-8) with actual base stats,\n * catch rates, and coding-themed descriptions.\n * Auto-generated from PokeAPI data.\n */\n\nimport type { Pokemon } from \"./types.js\";\n\nexport const POKEDEX: readonly Pokemon[] = [\n // \u2500\u2500 Gen 1 \u2014 Kanto (#001\u2013#151) \u2500\u2500\n {\n id: 1,\n name: \"Bulbasaur\",\n types: [\"Grass\", \"Poison\"],\n baseStats: { hp: 45, attack: 49, defense: 49, speed: 45, special: 65 },\n expGroup: \"medium_slow\",\n evolutionChainId: 1,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Photosynthesizes coffee into clean code.\",\n },\n {\n id: 2,\n name: \"Ivysaur\",\n types: [\"Grass\", \"Poison\"],\n baseStats: { hp: 60, attack: 62, defense: 63, speed: 60, special: 80 },\n expGroup: \"medium_slow\",\n evolutionChainId: 1,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Plants the seeds for sustainable architecture.\",\n },\n {\n id: 3,\n name: \"Venusaur\",\n types: [\"Grass\", \"Poison\"],\n baseStats: { hp: 80, attack: 82, defense: 83, speed: 80, special: 100 },\n expGroup: \"medium_slow\",\n evolutionChainId: 1,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Grows features organically from a solid foundation.\",\n },\n {\n id: 4,\n name: \"Charmander\",\n types: [\"Fire\"],\n baseStats: { hp: 39, attack: 52, defense: 43, speed: 65, special: 60 },\n expGroup: \"medium_slow\",\n evolutionChainId: 2,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Burns through bugs with blazing speed.\",\n },\n {\n id: 5,\n name: \"Charmeleon\",\n types: [\"Fire\"],\n baseStats: { hp: 58, attack: 64, defense: 58, speed: 80, special: 80 },\n expGroup: \"medium_slow\",\n evolutionChainId: 2,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Its CI pipeline is always on fire \u2014 in a good way.\",\n },\n {\n id: 6,\n name: \"Charizard\",\n types: [\"Fire\", \"Flying\"],\n baseStats: { hp: 78, attack: 84, defense: 78, speed: 100, special: 109 },\n expGroup: \"medium_slow\",\n evolutionChainId: 2,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Burns through bugs with blazing speed.\",\n },\n {\n id: 7,\n name: \"Squirtle\",\n types: [\"Water\"],\n baseStats: { hp: 44, attack: 48, defense: 65, speed: 43, special: 64 },\n expGroup: \"medium_slow\",\n evolutionChainId: 3,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Flows through complex data pipelines with ease.\",\n },\n {\n id: 8,\n name: \"Wartortle\",\n types: [\"Water\"],\n baseStats: { hp: 59, attack: 63, defense: 80, speed: 58, special: 80 },\n expGroup: \"medium_slow\",\n evolutionChainId: 3,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Cools down heated production incidents.\",\n },\n {\n id: 9,\n name: \"Blastoise\",\n types: [\"Water\"],\n baseStats: { hp: 79, attack: 83, defense: 100, speed: 78, special: 105 },\n expGroup: \"medium_slow\",\n evolutionChainId: 3,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Its code flows naturally from function to function.\",\n },\n {\n id: 10,\n name: \"Caterpie\",\n types: [\"Bug\"],\n baseStats: { hp: 45, attack: 30, defense: 35, speed: 45, special: 20 },\n expGroup: \"medium_fast\",\n evolutionChainId: 4,\n rarity: \"common\",\n catchRate: 255,\n description: \"Finds bugs nobody else can spot.\",\n },\n {\n id: 11,\n name: \"Metapod\",\n types: [\"Bug\"],\n baseStats: { hp: 50, attack: 20, defense: 55, speed: 30, special: 25 },\n expGroup: \"medium_fast\",\n evolutionChainId: 4,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Its test coverage is thorough and persistent.\",\n },\n {\n id: 12,\n name: \"Butterfree\",\n types: [\"Bug\", \"Flying\"],\n baseStats: { hp: 60, attack: 45, defense: 50, speed: 70, special: 90 },\n expGroup: \"medium_fast\",\n evolutionChainId: 4,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Crawls through every edge case methodically.\",\n },\n {\n id: 13,\n name: \"Weedle\",\n types: [\"Bug\", \"Poison\"],\n baseStats: { hp: 40, attack: 35, defense: 30, speed: 50, special: 20 },\n expGroup: \"medium_fast\",\n evolutionChainId: 5,\n rarity: \"common\",\n catchRate: 255,\n description: \"Surprisingly powerful despite its small size.\",\n },\n {\n id: 14,\n name: \"Kakuna\",\n types: [\"Bug\", \"Poison\"],\n baseStats: { hp: 45, attack: 25, defense: 50, speed: 35, special: 25 },\n expGroup: \"medium_fast\",\n evolutionChainId: 5,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Crawls through every edge case methodically.\",\n },\n {\n id: 15,\n name: \"Beedrill\",\n types: [\"Bug\", \"Poison\"],\n baseStats: { hp: 65, attack: 90, defense: 40, speed: 75, special: 80 },\n expGroup: \"medium_fast\",\n evolutionChainId: 5,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Crawls through every edge case methodically.\",\n },\n {\n id: 16,\n name: \"Pidgey\",\n types: [\"Normal\", \"Flying\"],\n baseStats: { hp: 40, attack: 45, defense: 40, speed: 56, special: 35 },\n expGroup: \"medium_slow\",\n evolutionChainId: 6,\n rarity: \"common\",\n catchRate: 255,\n description: \"Solid fundamentals, no unnecessary complexity.\",\n },\n {\n id: 17,\n name: \"Pidgeotto\",\n types: [\"Normal\", \"Flying\"],\n baseStats: { hp: 63, attack: 60, defense: 55, speed: 71, special: 50 },\n expGroup: \"medium_slow\",\n evolutionChainId: 6,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Keeps things simple and maintainable.\",\n },\n {\n id: 18,\n name: \"Pidgeot\",\n types: [\"Normal\", \"Flying\"],\n baseStats: { hp: 83, attack: 80, defense: 75, speed: 101, special: 70 },\n expGroup: \"medium_slow\",\n evolutionChainId: 6,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Writes clean, readable code that just works.\",\n },\n {\n id: 19,\n name: \"Rattata\",\n types: [\"Normal\"],\n baseStats: { hp: 30, attack: 56, defense: 35, speed: 72, special: 35 },\n expGroup: \"medium_fast\",\n evolutionChainId: 7,\n rarity: \"common\",\n catchRate: 255,\n description: \"Keeps things simple and maintainable.\",\n },\n {\n id: 20,\n name: \"Raticate\",\n types: [\"Normal\"],\n baseStats: { hp: 55, attack: 81, defense: 60, speed: 97, special: 70 },\n expGroup: \"medium_fast\",\n evolutionChainId: 7,\n rarity: \"uncommon\",\n catchRate: 127,\n description: \"Keeps things simple and maintainable.\",\n },\n {\n id: 21,\n name: \"Spearow\",\n types: [\"Normal\", \"Flying\"],\n baseStats: { hp: 40, attack: 60, defense: 30, speed: 70, special: 31 },\n expGroup: \"medium_fast\",\n evolutionChainId: 8,\n rarity: \"common\",\n catchRate: 255,\n description: \"Solid fundamentals, no unnecessary complexity.\",\n },\n {\n id: 22,\n name: \"Fearow\",\n types: [\"Normal\", \"Flying\"],\n baseStats: { hp: 65, attack: 90, defense: 65, speed: 100, special: 61 },\n expGroup: \"medium_fast\",\n evolutionChainId: 8,\n rarity: \"uncommon\",\n catchRate: 90,\n description: \"A reliable teammate in any codebase.\",\n },\n {\n id: 23,\n name: \"Ekans\",\n types: [\"Poison\"],\n baseStats: { hp: 35, attack: 60, defense: 44, speed: 55, special: 54 },\n expGroup: \"medium_fast\",\n evolutionChainId: 9,\n rarity: \"common\",\n catchRate: 255,\n description: \"Detoxifies spaghetti code into clean modules.\",\n },\n {\n id: 24,\n name: \"Arbok\",\n types: [\"Poison\"],\n baseStats: { hp: 60, attack: 95, defense: 69, speed: 80, special: 79 },\n expGroup: \"medium_fast\",\n evolutionChainId: 9,\n rarity: \"uncommon\",\n catchRate: 90,\n description: \"Its code reviews are sharp but constructive.\",\n },\n {\n id: 25,\n name: \"Pikachu\",\n types: [\"Electric\"],\n baseStats: { hp: 35, attack: 55, defense: 40, speed: 90, special: 50 },\n expGroup: \"medium_fast\",\n evolutionChainId: 10,\n rarity: \"common\",\n catchRate: 190,\n description: \"Its event loop never blocks.\",\n },\n {\n id: 26,\n name: \"Raichu\",\n types: [\"Electric\"],\n baseStats: { hp: 60, attack: 90, defense: 55, speed: 110, special: 90 },\n expGroup: \"medium_fast\",\n evolutionChainId: 10,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Its event loop never blocks.\",\n },\n {\n id: 27,\n name: \"Sandshrew\",\n types: [\"Ground\"],\n baseStats: { hp: 50, attack: 75, defense: 85, speed: 40, special: 30 },\n expGroup: \"medium_fast\",\n evolutionChainId: 11,\n rarity: \"common\",\n catchRate: 255,\n description: \"Grounded in best practices and design patterns.\",\n },\n {\n id: 28,\n name: \"Sandslash\",\n types: [\"Ground\"],\n baseStats: { hp: 75, attack: 100, defense: 110, speed: 65, special: 55 },\n expGroup: \"medium_fast\",\n evolutionChainId: 11,\n rarity: \"uncommon\",\n catchRate: 90,\n description: \"Digs deep into root cause analysis.\",\n },\n {\n id: 29,\n name: \"Nidoran\u2640\",\n types: [\"Poison\"],\n baseStats: { hp: 55, attack: 47, defense: 52, speed: 41, special: 40 },\n expGroup: \"medium_slow\",\n evolutionChainId: 12,\n rarity: \"common\",\n catchRate: 235,\n description: \"Its code reviews are sharp but constructive.\",\n },\n {\n id: 30,\n name: \"Nidorina\",\n types: [\"Poison\"],\n baseStats: { hp: 70, attack: 62, defense: 67, speed: 56, special: 55 },\n expGroup: \"medium_slow\",\n evolutionChainId: 12,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Injects helpful logging into legacy systems.\",\n },\n {\n id: 31,\n name: \"Nidoqueen\",\n types: [\"Poison\", \"Ground\"],\n baseStats: { hp: 90, attack: 92, defense: 87, speed: 76, special: 85 },\n expGroup: \"medium_slow\",\n evolutionChainId: 12,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Detoxifies spaghetti code into clean modules.\",\n },\n {\n id: 32,\n name: \"Nidoran\u2642\",\n types: [\"Poison\"],\n baseStats: { hp: 46, attack: 57, defense: 40, speed: 50, special: 40 },\n expGroup: \"medium_slow\",\n evolutionChainId: 13,\n rarity: \"common\",\n catchRate: 235,\n description: \"Detoxifies spaghetti code into clean modules.\",\n },\n {\n id: 33,\n name: \"Nidorino\",\n types: [\"Poison\"],\n baseStats: { hp: 61, attack: 72, defense: 57, speed: 65, special: 55 },\n expGroup: \"medium_slow\",\n evolutionChainId: 13,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Its code reviews are sharp but constructive.\",\n },\n {\n id: 34,\n name: \"Nidoking\",\n types: [\"Poison\", \"Ground\"],\n baseStats: { hp: 81, attack: 102, defense: 77, speed: 85, special: 85 },\n expGroup: \"medium_slow\",\n evolutionChainId: 13,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Knows every anti-pattern by heart.\",\n },\n {\n id: 35,\n name: \"Clefairy\",\n types: [\"Fairy\"],\n baseStats: { hp: 70, attack: 45, defense: 48, speed: 35, special: 65 },\n expGroup: \"fast\",\n evolutionChainId: 14,\n rarity: \"common\",\n catchRate: 150,\n description: \"Sprinkles syntactic sugar that actually helps.\",\n },\n {\n id: 36,\n name: \"Clefable\",\n types: [\"Fairy\"],\n baseStats: { hp: 95, attack: 70, defense: 73, speed: 60, special: 95 },\n expGroup: \"fast\",\n evolutionChainId: 14,\n rarity: \"rare\",\n catchRate: 25,\n description: \"Makes complex code look magically simple.\",\n },\n {\n id: 37,\n name: \"Vulpix\",\n types: [\"Fire\"],\n baseStats: { hp: 38, attack: 41, defense: 40, speed: 65, special: 65 },\n expGroup: \"medium_fast\",\n evolutionChainId: 15,\n rarity: \"common\",\n catchRate: 190,\n description: \"Compiles so fast the CPU starts sweating.\",\n },\n {\n id: 38,\n name: \"Ninetales\",\n types: [\"Fire\"],\n baseStats: { hp: 73, attack: 76, defense: 75, speed: 100, special: 100 },\n expGroup: \"medium_fast\",\n evolutionChainId: 15,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Its CI pipeline is always on fire \u2014 in a good way.\",\n },\n {\n id: 39,\n name: \"Jigglypuff\",\n types: [\"Normal\", \"Fairy\"],\n baseStats: { hp: 115, attack: 45, defense: 20, speed: 20, special: 45 },\n expGroup: \"fast\",\n evolutionChainId: 16,\n rarity: \"common\",\n catchRate: 170,\n description: \"Writes clean, readable code that just works.\",\n },\n {\n id: 40,\n name: \"Wigglytuff\",\n types: [\"Normal\", \"Fairy\"],\n baseStats: { hp: 140, attack: 70, defense: 45, speed: 45, special: 85 },\n expGroup: \"fast\",\n evolutionChainId: 16,\n rarity: \"rare\",\n catchRate: 50,\n description: \"Writes clean, readable code that just works.\",\n },\n {\n id: 41,\n name: \"Zubat\",\n types: [\"Poison\", \"Flying\"],\n baseStats: { hp: 40, attack: 45, defense: 35, speed: 55, special: 40 },\n expGroup: \"medium_fast\",\n evolutionChainId: 17,\n rarity: \"common\",\n catchRate: 255,\n description: \"Knows every anti-pattern by heart.\",\n },\n {\n id: 42,\n name: \"Golbat\",\n types: [\"Poison\", \"Flying\"],\n baseStats: { hp: 75, attack: 80, defense: 70, speed: 90, special: 75 },\n expGroup: \"medium_fast\",\n evolutionChainId: 17,\n rarity: \"uncommon\",\n catchRate: 90,\n description: \"Detoxifies spaghetti code into clean modules.\",\n },\n {\n id: 43,\n name: \"Oddish\",\n types: [\"Grass\", \"Poison\"],\n baseStats: { hp: 45, attack: 50, defense: 55, speed: 30, special: 75 },\n expGroup: \"medium_slow\",\n evolutionChainId: 18,\n rarity: \"common\",\n catchRate: 255,\n description: \"Grows features organically from a solid foundation.\",\n },\n {\n id: 44,\n name: \"Gloom\",\n types: [\"Grass\", \"Poison\"],\n baseStats: { hp: 60, attack: 65, defense: 70, speed: 40, special: 85 },\n expGroup: \"medium_slow\",\n evolutionChainId: 18,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Plants the seeds for sustainable architecture.\",\n },\n {\n id: 45,\n name: \"Vileplume\",\n types: [\"Grass\", \"Poison\"],\n baseStats: { hp: 75, attack: 80, defense: 85, speed: 50, special: 110 },\n expGroup: \"medium_slow\",\n evolutionChainId: 18,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Its codebase flourishes with careful nurturing.\",\n },\n {\n id: 46,\n name: \"Paras\",\n types: [\"Bug\", \"Grass\"],\n baseStats: { hp: 35, attack: 70, defense: 55, speed: 25, special: 55 },\n expGroup: \"medium_fast\",\n evolutionChainId: 19,\n rarity: \"common\",\n catchRate: 190,\n description: \"Its test coverage is thorough and persistent.\",\n },\n {\n id: 47,\n name: \"Parasect\",\n types: [\"Bug\", \"Grass\"],\n baseStats: { hp: 60, attack: 95, defense: 80, speed: 30, special: 80 },\n expGroup: \"medium_fast\",\n evolutionChainId: 19,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Finds bugs nobody else can spot.\",\n },\n {\n id: 48,\n name: \"Venonat\",\n types: [\"Bug\", \"Poison\"],\n baseStats: { hp: 60, attack: 55, defense: 50, speed: 45, special: 55 },\n expGroup: \"medium_fast\",\n evolutionChainId: 20,\n rarity: \"common\",\n catchRate: 190,\n description: \"Surprisingly powerful despite its small size.\",\n },\n {\n id: 49,\n name: \"Venomoth\",\n types: [\"Bug\", \"Poison\"],\n baseStats: { hp: 70, attack: 65, defense: 60, speed: 90, special: 90 },\n expGroup: \"medium_fast\",\n evolutionChainId: 20,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Metamorphoses codebases through careful refactoring.\",\n },\n {\n id: 50,\n name: \"Diglett\",\n types: [\"Ground\"],\n baseStats: { hp: 10, attack: 55, defense: 25, speed: 95, special: 45 },\n expGroup: \"medium_fast\",\n evolutionChainId: 21,\n rarity: \"common\",\n catchRate: 255,\n description: \"Digs deep into root cause analysis.\",\n },\n {\n id: 51,\n name: \"Dugtrio\",\n types: [\"Ground\"],\n baseStats: { hp: 35, attack: 100, defense: 50, speed: 120, special: 70 },\n expGroup: \"medium_fast\",\n evolutionChainId: 21,\n rarity: \"rare\",\n catchRate: 50,\n description: \"Stable as the earth beneath your server rack.\",\n },\n {\n id: 52,\n name: \"Meowth\",\n types: [\"Normal\"],\n baseStats: { hp: 40, attack: 45, defense: 35, speed: 90, special: 40 },\n expGroup: \"medium_fast\",\n evolutionChainId: 22,\n rarity: \"common\",\n catchRate: 255,\n description: \"Keeps things simple and maintainable.\",\n },\n {\n id: 53,\n name: \"Persian\",\n types: [\"Normal\"],\n baseStats: { hp: 65, attack: 70, defense: 60, speed: 115, special: 65 },\n expGroup: \"medium_fast\",\n evolutionChainId: 22,\n rarity: \"uncommon\",\n catchRate: 90,\n description: \"Keeps things simple and maintainable.\",\n },\n {\n id: 54,\n name: \"Psyduck\",\n types: [\"Water\"],\n baseStats: { hp: 50, attack: 52, defense: 48, speed: 55, special: 65 },\n expGroup: \"medium_fast\",\n evolutionChainId: 23,\n rarity: \"common\",\n catchRate: 190,\n description: \"Its code flows naturally from function to function.\",\n },\n {\n id: 55,\n name: \"Golduck\",\n types: [\"Water\"],\n baseStats: { hp: 80, attack: 82, defense: 78, speed: 85, special: 95 },\n expGroup: \"medium_fast\",\n evolutionChainId: 23,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Handles backpressure like a pro.\",\n },\n {\n id: 56,\n name: \"Mankey\",\n types: [\"Fighting\"],\n baseStats: { hp: 40, attack: 80, defense: 35, speed: 70, special: 45 },\n expGroup: \"medium_fast\",\n evolutionChainId: 24,\n rarity: \"common\",\n catchRate: 190,\n description: \"Fights through technical debt with determination.\",\n },\n {\n id: 57,\n name: \"Primeape\",\n types: [\"Fighting\"],\n baseStats: { hp: 65, attack: 105, defense: 60, speed: 95, special: 70 },\n expGroup: \"medium_fast\",\n evolutionChainId: 24,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Fights through technical debt with determination.\",\n },\n {\n id: 58,\n name: \"Growlithe\",\n types: [\"Fire\"],\n baseStats: { hp: 55, attack: 70, defense: 45, speed: 60, special: 70 },\n expGroup: \"slow\",\n evolutionChainId: 25,\n rarity: \"common\",\n catchRate: 190,\n description: \"Compiles so fast the CPU starts sweating.\",\n },\n {\n id: 59,\n name: \"Arcanine\",\n types: [\"Fire\"],\n baseStats: { hp: 90, attack: 110, defense: 80, speed: 95, special: 100 },\n expGroup: \"slow\",\n evolutionChainId: 25,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Rewrites legacy code with explosive energy.\",\n },\n {\n id: 60,\n name: \"Poliwag\",\n types: [\"Water\"],\n baseStats: { hp: 40, attack: 50, defense: 40, speed: 90, special: 40 },\n expGroup: \"medium_slow\",\n evolutionChainId: 26,\n rarity: \"common\",\n catchRate: 255,\n description: \"Cools down heated production incidents.\",\n },\n {\n id: 61,\n name: \"Poliwhirl\",\n types: [\"Water\"],\n baseStats: { hp: 65, attack: 65, defense: 65, speed: 90, special: 50 },\n expGroup: \"medium_slow\",\n evolutionChainId: 26,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Its code flows naturally from function to function.\",\n },\n {\n id: 62,\n name: \"Poliwrath\",\n types: [\"Water\", \"Fighting\"],\n baseStats: { hp: 90, attack: 95, defense: 95, speed: 70, special: 90 },\n expGroup: \"medium_slow\",\n evolutionChainId: 26,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Cools down heated production incidents.\",\n },\n {\n id: 63,\n name: \"Abra\",\n types: [\"Psychic\"],\n baseStats: { hp: 25, attack: 20, defense: 15, speed: 90, special: 105 },\n expGroup: \"medium_slow\",\n evolutionChainId: 27,\n rarity: \"common\",\n catchRate: 200,\n description: \"Its architecture decisions are eerily prescient.\",\n },\n {\n id: 64,\n name: \"Kadabra\",\n types: [\"Psychic\"],\n baseStats: { hp: 40, attack: 35, defense: 30, speed: 105, special: 120 },\n expGroup: \"medium_slow\",\n evolutionChainId: 27,\n rarity: \"uncommon\",\n catchRate: 100,\n description: \"Its architecture decisions are eerily prescient.\",\n },\n {\n id: 65,\n name: \"Alakazam\",\n types: [\"Psychic\"],\n baseStats: { hp: 55, attack: 50, defense: 45, speed: 120, special: 135 },\n expGroup: \"medium_slow\",\n evolutionChainId: 27,\n rarity: \"rare\",\n catchRate: 50,\n description: \"Its architecture decisions are eerily prescient.\",\n },\n {\n id: 66,\n name: \"Machop\",\n types: [\"Fighting\"],\n baseStats: { hp: 70, attack: 80, defense: 50, speed: 35, special: 35 },\n expGroup: \"medium_slow\",\n evolutionChainId: 28,\n rarity: \"common\",\n catchRate: 180,\n description: \"Never backs down from a complex refactor.\",\n },\n {\n id: 67,\n name: \"Machoke\",\n types: [\"Fighting\"],\n baseStats: { hp: 80, attack: 100, defense: 70, speed: 45, special: 60 },\n expGroup: \"medium_slow\",\n evolutionChainId: 28,\n rarity: \"uncommon\",\n catchRate: 90,\n description: \"Trains hard on algorithmic challenges daily.\",\n },\n {\n id: 68,\n name: \"Machamp\",\n types: [\"Fighting\"],\n baseStats: { hp: 90, attack: 130, defense: 80, speed: 55, special: 85 },\n expGroup: \"medium_slow\",\n evolutionChainId: 28,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Never backs down from a complex refactor.\",\n },\n {\n id: 69,\n name: \"Bellsprout\",\n types: [\"Grass\", \"Poison\"],\n baseStats: { hp: 50, attack: 75, defense: 35, speed: 40, special: 70 },\n expGroup: \"medium_slow\",\n evolutionChainId: 29,\n rarity: \"common\",\n catchRate: 255,\n description: \"Grows features organically from a solid foundation.\",\n },\n {\n id: 70,\n name: \"Weepinbell\",\n types: [\"Grass\", \"Poison\"],\n baseStats: { hp: 65, attack: 90, defense: 50, speed: 55, special: 85 },\n expGroup: \"medium_slow\",\n evolutionChainId: 29,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Its codebase flourishes with careful nurturing.\",\n },\n {\n id: 71,\n name: \"Victreebel\",\n types: [\"Grass\", \"Poison\"],\n baseStats: { hp: 80, attack: 105, defense: 65, speed: 70, special: 100 },\n expGroup: \"medium_slow\",\n evolutionChainId: 29,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Branches out into new features with natural ease.\",\n },\n {\n id: 72,\n name: \"Tentacool\",\n types: [\"Water\", \"Poison\"],\n baseStats: { hp: 40, attack: 40, defense: 35, speed: 70, special: 100 },\n expGroup: \"slow\",\n evolutionChainId: 30,\n rarity: \"common\",\n catchRate: 190,\n description: \"Streams data like a well-configured message queue.\",\n },\n {\n id: 73,\n name: \"Tentacruel\",\n types: [\"Water\", \"Poison\"],\n baseStats: { hp: 80, attack: 70, defense: 65, speed: 100, special: 120 },\n expGroup: \"slow\",\n evolutionChainId: 30,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"Flows through complex data pipelines with ease.\",\n },\n {\n id: 74,\n name: \"Geodude\",\n types: [\"Rock\", \"Ground\"],\n baseStats: { hp: 40, attack: 80, defense: 100, speed: 20, special: 30 },\n expGroup: \"medium_slow\",\n evolutionChainId: 31,\n rarity: \"common\",\n catchRate: 255,\n description: \"Its code is hardened against every attack vector.\",\n },\n {\n id: 75,\n name: \"Graveler\",\n types: [\"Rock\", \"Ground\"],\n baseStats: { hp: 55, attack: 95, defense: 115, speed: 35, special: 45 },\n expGroup: \"medium_slow\",\n evolutionChainId: 31,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Withstands the heaviest traffic spikes.\",\n },\n {\n id: 76,\n name: \"Golem\",\n types: [\"Rock\", \"Ground\"],\n baseStats: { hp: 80, attack: 120, defense: 130, speed: 45, special: 65 },\n expGroup: \"medium_slow\",\n evolutionChainId: 31,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Dependable like bedrock under your deployment.\",\n },\n {\n id: 77,\n name: \"Ponyta\",\n types: [\"Fire\"],\n baseStats: { hp: 50, attack: 85, defense: 55, speed: 90, special: 65 },\n expGroup: \"medium_fast\",\n evolutionChainId: 32,\n rarity: \"common\",\n catchRate: 190,\n description: \"Hotfixes deployed before you finish your coffee.\",\n },\n {\n id: 78,\n name: \"Rapidash\",\n types: [\"Fire\"],\n baseStats: { hp: 65, attack: 100, defense: 70, speed: 105, special: 80 },\n expGroup: \"medium_fast\",\n evolutionChainId: 32,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"Its CI pipeline is always on fire \u2014 in a good way.\",\n },\n {\n id: 79,\n name: \"Slowpoke\",\n types: [\"Water\", \"Psychic\"],\n baseStats: { hp: 90, attack: 65, defense: 65, speed: 15, special: 40 },\n expGroup: \"medium_fast\",\n evolutionChainId: 33,\n rarity: \"common\",\n catchRate: 190,\n description: \"Handles backpressure like a pro.\",\n },\n {\n id: 80,\n name: \"Slowbro\",\n types: [\"Water\", \"Psychic\"],\n baseStats: { hp: 95, attack: 75, defense: 110, speed: 30, special: 100 },\n expGroup: \"medium_fast\",\n evolutionChainId: 33,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Streams data like a well-configured message queue.\",\n },\n {\n id: 81,\n name: \"Magnemite\",\n types: [\"Electric\", \"Steel\"],\n baseStats: { hp: 25, attack: 35, defense: 70, speed: 45, special: 95 },\n expGroup: \"medium_fast\",\n evolutionChainId: 34,\n rarity: \"common\",\n catchRate: 190,\n description: \"Its event loop never blocks.\",\n },\n {\n id: 82,\n name: \"Magneton\",\n types: [\"Electric\", \"Steel\"],\n baseStats: { hp: 50, attack: 60, defense: 95, speed: 70, special: 120 },\n expGroup: \"medium_fast\",\n evolutionChainId: 34,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"Powers through async operations effortlessly.\",\n },\n {\n id: 83,\n name: \"Farfetch'd\",\n types: [\"Normal\", \"Flying\"],\n baseStats: { hp: 52, attack: 90, defense: 55, speed: 60, special: 62 },\n expGroup: \"medium_fast\",\n evolutionChainId: 35,\n rarity: \"rare\",\n catchRate: 45,\n description: \"The everyday workhorse of any development team.\",\n },\n {\n id: 84,\n name: \"Doduo\",\n types: [\"Normal\", \"Flying\"],\n baseStats: { hp: 35, attack: 85, defense: 45, speed: 75, special: 35 },\n expGroup: \"medium_fast\",\n evolutionChainId: 36,\n rarity: \"common\",\n catchRate: 190,\n description: \"A reliable teammate in any codebase.\",\n },\n {\n id: 85,\n name: \"Dodrio\",\n types: [\"Normal\", \"Flying\"],\n baseStats: { hp: 60, attack: 110, defense: 70, speed: 110, special: 60 },\n expGroup: \"medium_fast\",\n evolutionChainId: 36,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Writes clean, readable code that just works.\",\n },\n {\n id: 86,\n name: \"Seel\",\n types: [\"Water\"],\n baseStats: { hp: 65, attack: 45, defense: 55, speed: 45, special: 70 },\n expGroup: \"medium_fast\",\n evolutionChainId: 37,\n rarity: \"common\",\n catchRate: 190,\n description: \"Flows through complex data pipelines with ease.\",\n },\n {\n id: 87,\n name: \"Dewgong\",\n types: [\"Water\", \"Ice\"],\n baseStats: { hp: 90, attack: 70, defense: 80, speed: 70, special: 95 },\n expGroup: \"medium_fast\",\n evolutionChainId: 37,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Its code flows naturally from function to function.\",\n },\n {\n id: 88,\n name: \"Grimer\",\n types: [\"Poison\"],\n baseStats: { hp: 80, attack: 80, defense: 50, speed: 25, special: 50 },\n expGroup: \"medium_fast\",\n evolutionChainId: 38,\n rarity: \"common\",\n catchRate: 190,\n description: \"Knows every anti-pattern by heart.\",\n },\n {\n id: 89,\n name: \"Muk\",\n types: [\"Poison\"],\n baseStats: { hp: 105, attack: 105, defense: 75, speed: 50, special: 100 },\n expGroup: \"medium_fast\",\n evolutionChainId: 38,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Detoxifies spaghetti code into clean modules.\",\n },\n {\n id: 90,\n name: \"Shellder\",\n types: [\"Water\"],\n baseStats: { hp: 30, attack: 65, defense: 100, speed: 40, special: 45 },\n expGroup: \"slow\",\n evolutionChainId: 39,\n rarity: \"common\",\n catchRate: 190,\n description: \"Flows through complex data pipelines with ease.\",\n },\n {\n id: 91,\n name: \"Cloyster\",\n types: [\"Water\", \"Ice\"],\n baseStats: { hp: 50, attack: 95, defense: 180, speed: 70, special: 85 },\n expGroup: \"slow\",\n evolutionChainId: 39,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"Its code flows naturally from function to function.\",\n },\n {\n id: 92,\n name: \"Gastly\",\n types: [\"Ghost\", \"Poison\"],\n baseStats: { hp: 30, attack: 35, defense: 30, speed: 80, special: 100 },\n expGroup: \"medium_slow\",\n evolutionChainId: 40,\n rarity: \"common\",\n catchRate: 190,\n description: \"Debugs phantom issues in production at 3 AM.\",\n },\n {\n id: 93,\n name: \"Haunter\",\n types: [\"Ghost\", \"Poison\"],\n baseStats: { hp: 45, attack: 50, defense: 45, speed: 95, special: 115 },\n expGroup: \"medium_slow\",\n evolutionChainId: 40,\n rarity: \"uncommon\",\n catchRate: 90,\n description: \"Its code is invisible until you need it most.\",\n },\n {\n id: 94,\n name: \"Gengar\",\n types: [\"Ghost\", \"Poison\"],\n baseStats: { hp: 60, attack: 65, defense: 60, speed: 110, special: 130 },\n expGroup: \"medium_slow\",\n evolutionChainId: 40,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Appears silently in git blame for critical fixes.\",\n },\n {\n id: 95,\n name: \"Onix\",\n types: [\"Rock\", \"Ground\"],\n baseStats: { hp: 35, attack: 45, defense: 160, speed: 70, special: 45 },\n expGroup: \"medium_fast\",\n evolutionChainId: 41,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Builds unbreakable infrastructure that lasts.\",\n },\n {\n id: 96,\n name: \"Drowzee\",\n types: [\"Psychic\"],\n baseStats: { hp: 60, attack: 48, defense: 45, speed: 42, special: 90 },\n expGroup: \"medium_fast\",\n evolutionChainId: 42,\n rarity: \"common\",\n catchRate: 190,\n description: \"Debugs production issues through pure intuition.\",\n },\n {\n id: 97,\n name: \"Hypno\",\n types: [\"Psychic\"],\n baseStats: { hp: 85, attack: 73, defense: 70, speed: 67, special: 115 },\n expGroup: \"medium_fast\",\n evolutionChainId: 42,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Debugs production issues through pure intuition.\",\n },\n {\n id: 98,\n name: \"Krabby\",\n types: [\"Water\"],\n baseStats: { hp: 30, attack: 105, defense: 90, speed: 50, special: 25 },\n expGroup: \"medium_fast\",\n evolutionChainId: 43,\n rarity: \"common\",\n catchRate: 225,\n description: \"Its code flows naturally from function to function.\",\n },\n {\n id: 99,\n name: \"Kingler\",\n types: [\"Water\"],\n baseStats: { hp: 55, attack: 130, defense: 115, speed: 75, special: 50 },\n expGroup: \"medium_fast\",\n evolutionChainId: 43,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"Its code flows naturally from function to function.\",\n },\n {\n id: 100,\n name: \"Voltorb\",\n types: [\"Electric\"],\n baseStats: { hp: 40, attack: 30, defense: 50, speed: 100, special: 55 },\n expGroup: \"medium_fast\",\n evolutionChainId: 44,\n rarity: \"common\",\n catchRate: 190,\n description: \"Lightning-fast response times in production.\",\n },\n {\n id: 101,\n name: \"Electrode\",\n types: [\"Electric\"],\n baseStats: { hp: 60, attack: 50, defense: 70, speed: 150, special: 80 },\n expGroup: \"medium_fast\",\n evolutionChainId: 44,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"Sparks innovation with every commit.\",\n },\n {\n id: 102,\n name: \"Exeggcute\",\n types: [\"Grass\", \"Psychic\"],\n baseStats: { hp: 60, attack: 40, defense: 80, speed: 40, special: 60 },\n expGroup: \"slow\",\n evolutionChainId: 45,\n rarity: \"uncommon\",\n catchRate: 90,\n description: \"Plants the seeds for sustainable architecture.\",\n },\n {\n id: 103,\n name: \"Exeggutor\",\n types: [\"Grass\", \"Psychic\"],\n baseStats: { hp: 95, attack: 95, defense: 85, speed: 55, special: 125 },\n expGroup: \"slow\",\n evolutionChainId: 45,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Its codebase flourishes with careful nurturing.\",\n },\n {\n id: 104,\n name: \"Cubone\",\n types: [\"Ground\"],\n baseStats: { hp: 50, attack: 50, defense: 95, speed: 35, special: 50 },\n expGroup: \"medium_fast\",\n evolutionChainId: 46,\n rarity: \"common\",\n catchRate: 190,\n description: \"Grounded in best practices and design patterns.\",\n },\n {\n id: 105,\n name: \"Marowak\",\n types: [\"Ground\"],\n baseStats: { hp: 60, attack: 80, defense: 110, speed: 45, special: 80 },\n expGroup: \"medium_fast\",\n evolutionChainId: 46,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Lays the groundwork for scalable systems.\",\n },\n {\n id: 106,\n name: \"Hitmonlee\",\n types: [\"Fighting\"],\n baseStats: { hp: 50, attack: 120, defense: 53, speed: 87, special: 110 },\n expGroup: \"medium_fast\",\n evolutionChainId: 47,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Punches through blockers in code review.\",\n },\n {\n id: 107,\n name: \"Hitmonchan\",\n types: [\"Fighting\"],\n baseStats: { hp: 50, attack: 105, defense: 79, speed: 76, special: 110 },\n expGroup: \"medium_fast\",\n evolutionChainId: 47,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Punches through blockers in code review.\",\n },\n {\n id: 108,\n name: \"Lickitung\",\n types: [\"Normal\"],\n baseStats: { hp: 90, attack: 55, defense: 75, speed: 30, special: 75 },\n expGroup: \"medium_fast\",\n evolutionChainId: 48,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Solid fundamentals, no unnecessary complexity.\",\n },\n {\n id: 109,\n name: \"Koffing\",\n types: [\"Poison\"],\n baseStats: { hp: 40, attack: 65, defense: 95, speed: 35, special: 60 },\n expGroup: \"medium_fast\",\n evolutionChainId: 49,\n rarity: \"common\",\n catchRate: 190,\n description: \"Detoxifies spaghetti code into clean modules.\",\n },\n {\n id: 110,\n name: \"Weezing\",\n types: [\"Poison\"],\n baseStats: { hp: 65, attack: 90, defense: 120, speed: 60, special: 85 },\n expGroup: \"medium_fast\",\n evolutionChainId: 49,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"Detoxifies spaghetti code into clean modules.\",\n },\n {\n id: 111,\n name: \"Rhyhorn\",\n types: [\"Ground\", \"Rock\"],\n baseStats: { hp: 80, attack: 85, defense: 95, speed: 25, special: 30 },\n expGroup: \"slow\",\n evolutionChainId: 50,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Grounded in best practices and design patterns.\",\n },\n {\n id: 112,\n name: \"Rhydon\",\n types: [\"Ground\", \"Rock\"],\n baseStats: { hp: 105, attack: 130, defense: 120, speed: 40, special: 45 },\n expGroup: \"slow\",\n evolutionChainId: 50,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"Lays the groundwork for scalable systems.\",\n },\n {\n id: 113,\n name: \"Chansey\",\n types: [\"Normal\"],\n baseStats: { hp: 250, attack: 5, defense: 5, speed: 50, special: 105 },\n expGroup: \"fast\",\n evolutionChainId: 51,\n rarity: \"rare\",\n catchRate: 30,\n description: \"Writes clean, readable code that just works.\",\n },\n {\n id: 114,\n name: \"Tangela\",\n types: [\"Grass\"],\n baseStats: { hp: 65, attack: 55, defense: 115, speed: 60, special: 100 },\n expGroup: \"medium_fast\",\n evolutionChainId: 52,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Plants the seeds for sustainable architecture.\",\n },\n {\n id: 115,\n name: \"Kangaskhan\",\n types: [\"Normal\"],\n baseStats: { hp: 105, attack: 95, defense: 80, speed: 90, special: 80 },\n expGroup: \"medium_fast\",\n evolutionChainId: 53,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Solid fundamentals, no unnecessary complexity.\",\n },\n {\n id: 116,\n name: \"Horsea\",\n types: [\"Water\"],\n baseStats: { hp: 30, attack: 40, defense: 70, speed: 60, special: 70 },\n expGroup: \"medium_fast\",\n evolutionChainId: 54,\n rarity: \"common\",\n catchRate: 225,\n description: \"Handles backpressure like a pro.\",\n },\n {\n id: 117,\n name: \"Seadra\",\n types: [\"Water\"],\n baseStats: { hp: 55, attack: 65, defense: 95, speed: 85, special: 95 },\n expGroup: \"medium_fast\",\n evolutionChainId: 54,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Flows through complex data pipelines with ease.\",\n },\n {\n id: 118,\n name: \"Goldeen\",\n types: [\"Water\"],\n baseStats: { hp: 45, attack: 67, defense: 60, speed: 63, special: 50 },\n expGroup: \"medium_fast\",\n evolutionChainId: 55,\n rarity: \"common\",\n catchRate: 225,\n description: \"Flows through complex data pipelines with ease.\",\n },\n {\n id: 119,\n name: \"Seaking\",\n types: [\"Water\"],\n baseStats: { hp: 80, attack: 92, defense: 65, speed: 68, special: 80 },\n expGroup: \"medium_fast\",\n evolutionChainId: 55,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"Flows through complex data pipelines with ease.\",\n },\n {\n id: 120,\n name: \"Staryu\",\n types: [\"Water\"],\n baseStats: { hp: 30, attack: 45, defense: 55, speed: 85, special: 70 },\n expGroup: \"slow\",\n evolutionChainId: 56,\n rarity: \"common\",\n catchRate: 225,\n description: \"Cools down heated production incidents.\",\n },\n {\n id: 121,\n name: \"Starmie\",\n types: [\"Water\", \"Psychic\"],\n baseStats: { hp: 60, attack: 75, defense: 85, speed: 115, special: 100 },\n expGroup: \"slow\",\n evolutionChainId: 56,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"Streams data like a well-configured message queue.\",\n },\n {\n id: 122,\n name: \"Mr. Mime\",\n types: [\"Psychic\", \"Fairy\"],\n baseStats: { hp: 40, attack: 45, defense: 65, speed: 90, special: 120 },\n expGroup: \"medium_fast\",\n evolutionChainId: 57,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Its architecture decisions are eerily prescient.\",\n },\n {\n id: 123,\n name: \"Scyther\",\n types: [\"Bug\", \"Flying\"],\n baseStats: { hp: 70, attack: 110, defense: 80, speed: 105, special: 80 },\n expGroup: \"medium_fast\",\n evolutionChainId: 58,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Metamorphoses codebases through careful refactoring.\",\n },\n {\n id: 124,\n name: \"Jynx\",\n types: [\"Ice\", \"Psychic\"],\n baseStats: { hp: 65, attack: 50, defense: 35, speed: 95, special: 115 },\n expGroup: \"medium_fast\",\n evolutionChainId: 59,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Keeps cool under tight deployment deadlines.\",\n },\n {\n id: 125,\n name: \"Electabuzz\",\n types: [\"Electric\"],\n baseStats: { hp: 65, attack: 83, defense: 57, speed: 105, special: 95 },\n expGroup: \"medium_fast\",\n evolutionChainId: 60,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Powers through async operations effortlessly.\",\n },\n {\n id: 126,\n name: \"Magmar\",\n types: [\"Fire\"],\n baseStats: { hp: 65, attack: 95, defense: 57, speed: 93, special: 100 },\n expGroup: \"medium_fast\",\n evolutionChainId: 61,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Compiles so fast the CPU starts sweating.\",\n },\n {\n id: 127,\n name: \"Pinsir\",\n types: [\"Bug\"],\n baseStats: { hp: 65, attack: 125, defense: 100, speed: 85, special: 70 },\n expGroup: \"slow\",\n evolutionChainId: 62,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Finds bugs nobody else can spot.\",\n },\n {\n id: 128,\n name: \"Tauros\",\n types: [\"Normal\"],\n baseStats: { hp: 75, attack: 100, defense: 95, speed: 110, special: 70 },\n expGroup: \"slow\",\n evolutionChainId: 63,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Writes clean, readable code that just works.\",\n },\n {\n id: 129,\n name: \"Magikarp\",\n types: [\"Water\"],\n baseStats: { hp: 20, attack: 10, defense: 55, speed: 80, special: 20 },\n expGroup: \"slow\",\n evolutionChainId: 64,\n rarity: \"common\",\n catchRate: 255,\n description: \"Streams data like a well-configured message queue.\",\n },\n {\n id: 130,\n name: \"Gyarados\",\n types: [\"Water\", \"Flying\"],\n baseStats: { hp: 95, attack: 125, defense: 79, speed: 81, special: 100 },\n expGroup: \"slow\",\n evolutionChainId: 64,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Streams data like a well-configured message queue.\",\n },\n {\n id: 131,\n name: \"Lapras\",\n types: [\"Water\", \"Ice\"],\n baseStats: { hp: 130, attack: 85, defense: 80, speed: 60, special: 95 },\n expGroup: \"slow\",\n evolutionChainId: 65,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Its code flows naturally from function to function.\",\n },\n {\n id: 132,\n name: \"Ditto\",\n types: [\"Normal\"],\n baseStats: { hp: 48, attack: 48, defense: 48, speed: 48, special: 48 },\n expGroup: \"medium_fast\",\n evolutionChainId: 66,\n rarity: \"rare\",\n catchRate: 35,\n description: \"Writes clean, readable code that just works.\",\n },\n {\n id: 133,\n name: \"Eevee\",\n types: [\"Normal\"],\n baseStats: { hp: 55, attack: 55, defense: 50, speed: 55, special: 65 },\n expGroup: \"medium_fast\",\n evolutionChainId: 67,\n rarity: \"rare\",\n catchRate: 45,\n description: \"A reliable teammate in any codebase.\",\n },\n {\n id: 134,\n name: \"Vaporeon\",\n types: [\"Water\"],\n baseStats: { hp: 130, attack: 65, defense: 60, speed: 65, special: 110 },\n expGroup: \"medium_fast\",\n evolutionChainId: 67,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Flows through complex data pipelines with ease.\",\n },\n {\n id: 135,\n name: \"Jolteon\",\n types: [\"Electric\"],\n baseStats: { hp: 65, attack: 65, defense: 60, speed: 130, special: 110 },\n expGroup: \"medium_fast\",\n evolutionChainId: 67,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Sparks innovation with every commit.\",\n },\n {\n id: 136,\n name: \"Flareon\",\n types: [\"Fire\"],\n baseStats: { hp: 65, attack: 130, defense: 60, speed: 65, special: 110 },\n expGroup: \"medium_fast\",\n evolutionChainId: 67,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Hotfixes deployed before you finish your coffee.\",\n },\n {\n id: 137,\n name: \"Porygon\",\n types: [\"Normal\"],\n baseStats: { hp: 65, attack: 60, defense: 70, speed: 40, special: 85 },\n expGroup: \"medium_fast\",\n evolutionChainId: 68,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Keeps things simple and maintainable.\",\n },\n {\n id: 138,\n name: \"Omanyte\",\n types: [\"Rock\", \"Water\"],\n baseStats: { hp: 35, attack: 40, defense: 100, speed: 35, special: 90 },\n expGroup: \"medium_fast\",\n evolutionChainId: 69,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Withstands the heaviest traffic spikes.\",\n },\n {\n id: 139,\n name: \"Omastar\",\n types: [\"Rock\", \"Water\"],\n baseStats: { hp: 70, attack: 60, defense: 125, speed: 55, special: 115 },\n expGroup: \"medium_fast\",\n evolutionChainId: 69,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Solid as a load-bearing wall in the architecture.\",\n },\n {\n id: 140,\n name: \"Kabuto\",\n types: [\"Rock\", \"Water\"],\n baseStats: { hp: 30, attack: 80, defense: 90, speed: 55, special: 55 },\n expGroup: \"medium_fast\",\n evolutionChainId: 70,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Withstands the heaviest traffic spikes.\",\n },\n {\n id: 141,\n name: \"Kabutops\",\n types: [\"Rock\", \"Water\"],\n baseStats: { hp: 60, attack: 115, defense: 105, speed: 80, special: 70 },\n expGroup: \"medium_fast\",\n evolutionChainId: 70,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Dependable like bedrock under your deployment.\",\n },\n {\n id: 142,\n name: \"Aerodactyl\",\n types: [\"Rock\", \"Flying\"],\n baseStats: { hp: 80, attack: 105, defense: 65, speed: 130, special: 75 },\n expGroup: \"slow\",\n evolutionChainId: 71,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Builds unbreakable infrastructure that lasts.\",\n },\n {\n id: 143,\n name: \"Snorlax\",\n types: [\"Normal\"],\n baseStats: { hp: 160, attack: 110, defense: 65, speed: 30, special: 110 },\n expGroup: \"slow\",\n evolutionChainId: 72,\n rarity: \"rare\",\n catchRate: 25,\n description: \"A reliable teammate in any codebase.\",\n },\n {\n id: 144,\n name: \"Articuno\",\n types: [\"Ice\", \"Flying\"],\n baseStats: { hp: 90, attack: 85, defense: 100, speed: 85, special: 125 },\n expGroup: \"slow\",\n evolutionChainId: 73,\n rarity: \"legendary\",\n catchRate: 3,\n description: \"Its test suite is ice-cold \u2014 nothing gets through.\",\n },\n {\n id: 145,\n name: \"Zapdos\",\n types: [\"Electric\", \"Flying\"],\n baseStats: { hp: 90, attack: 90, defense: 85, speed: 100, special: 125 },\n expGroup: \"slow\",\n evolutionChainId: 74,\n rarity: \"legendary\",\n catchRate: 3,\n description: \"Powers through async operations effortlessly.\",\n },\n {\n id: 146,\n name: \"Moltres\",\n types: [\"Fire\", \"Flying\"],\n baseStats: { hp: 90, attack: 100, defense: 90, speed: 90, special: 125 },\n expGroup: \"slow\",\n evolutionChainId: 75,\n rarity: \"legendary\",\n catchRate: 3,\n description: \"Rewrites legacy code with explosive energy.\",\n },\n {\n id: 147,\n name: \"Dratini\",\n types: [\"Dragon\"],\n baseStats: { hp: 41, attack: 64, defense: 45, speed: 50, special: 50 },\n expGroup: \"slow\",\n evolutionChainId: 76,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Its codebases are legendary in scale and power.\",\n },\n {\n id: 148,\n name: \"Dragonair\",\n types: [\"Dragon\"],\n baseStats: { hp: 61, attack: 84, defense: 65, speed: 70, special: 70 },\n expGroup: \"slow\",\n evolutionChainId: 76,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Its codebases are legendary in scale and power.\",\n },\n {\n id: 149,\n name: \"Dragonite\",\n types: [\"Dragon\", \"Flying\"],\n baseStats: { hp: 91, attack: 134, defense: 95, speed: 80, special: 100 },\n expGroup: \"slow\",\n evolutionChainId: 76,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Breathes fire into stale, unmaintained projects.\",\n },\n {\n id: 150,\n name: \"Mewtwo\",\n types: [\"Psychic\"],\n baseStats: { hp: 106, attack: 110, defense: 90, speed: 130, special: 154 },\n expGroup: \"slow\",\n evolutionChainId: 77,\n rarity: \"legendary\",\n catchRate: 3,\n description: \"Mentally models complex distributed systems.\",\n },\n {\n id: 151,\n name: \"Mew\",\n types: [\"Psychic\"],\n baseStats: { hp: 100, attack: 100, defense: 100, speed: 100, special: 100 },\n expGroup: \"medium_slow\",\n evolutionChainId: 78,\n rarity: \"mythical\",\n catchRate: 45,\n description: \"Reads stack traces like reading minds.\",\n },\n\n // \u2500\u2500 Gen 2 \u2014 Johto (#152\u2013#251) \u2500\u2500\n {\n id: 152,\n name: \"Chikorita\",\n types: [\"Grass\"],\n baseStats: { hp: 45, attack: 49, defense: 65, speed: 45, special: 65 },\n expGroup: \"medium_slow\",\n evolutionChainId: 79,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Photosynthesizes coffee into clean code.\",\n },\n {\n id: 153,\n name: \"Bayleef\",\n types: [\"Grass\"],\n baseStats: { hp: 60, attack: 62, defense: 80, speed: 60, special: 80 },\n expGroup: \"medium_slow\",\n evolutionChainId: 79,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Its codebase flourishes with careful nurturing.\",\n },\n {\n id: 154,\n name: \"Meganium\",\n types: [\"Grass\"],\n baseStats: { hp: 80, attack: 82, defense: 100, speed: 80, special: 100 },\n expGroup: \"medium_slow\",\n evolutionChainId: 79,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Grows features organically from a solid foundation.\",\n },\n {\n id: 155,\n name: \"Cyndaquil\",\n types: [\"Fire\"],\n baseStats: { hp: 39, attack: 52, defense: 43, speed: 65, special: 60 },\n expGroup: \"medium_slow\",\n evolutionChainId: 80,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Compiles so fast the CPU starts sweating.\",\n },\n {\n id: 156,\n name: \"Quilava\",\n types: [\"Fire\"],\n baseStats: { hp: 58, attack: 64, defense: 58, speed: 80, special: 80 },\n expGroup: \"medium_slow\",\n evolutionChainId: 80,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Burns through bugs with blazing speed.\",\n },\n {\n id: 157,\n name: \"Typhlosion\",\n types: [\"Fire\"],\n baseStats: { hp: 78, attack: 84, defense: 78, speed: 100, special: 109 },\n expGroup: \"medium_slow\",\n evolutionChainId: 80,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Hotfixes deployed before you finish your coffee.\",\n },\n {\n id: 158,\n name: \"Totodile\",\n types: [\"Water\"],\n baseStats: { hp: 50, attack: 65, defense: 64, speed: 43, special: 48 },\n expGroup: \"medium_slow\",\n evolutionChainId: 81,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Its code flows naturally from function to function.\",\n },\n {\n id: 159,\n name: \"Croconaw\",\n types: [\"Water\"],\n baseStats: { hp: 65, attack: 80, defense: 80, speed: 58, special: 63 },\n expGroup: \"medium_slow\",\n evolutionChainId: 81,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Flows through complex data pipelines with ease.\",\n },\n {\n id: 160,\n name: \"Feraligatr\",\n types: [\"Water\"],\n baseStats: { hp: 85, attack: 105, defense: 100, speed: 78, special: 83 },\n expGroup: \"medium_slow\",\n evolutionChainId: 81,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Its code flows naturally from function to function.\",\n },\n {\n id: 161,\n name: \"Sentret\",\n types: [\"Normal\"],\n baseStats: { hp: 35, attack: 46, defense: 34, speed: 20, special: 45 },\n expGroup: \"medium_fast\",\n evolutionChainId: 82,\n rarity: \"common\",\n catchRate: 255,\n description: \"A reliable teammate in any codebase.\",\n },\n {\n id: 162,\n name: \"Furret\",\n types: [\"Normal\"],\n baseStats: { hp: 85, attack: 76, defense: 64, speed: 90, special: 55 },\n expGroup: \"medium_fast\",\n evolutionChainId: 82,\n rarity: \"uncommon\",\n catchRate: 90,\n description: \"Keeps things simple and maintainable.\",\n },\n {\n id: 163,\n name: \"Hoothoot\",\n types: [\"Normal\", \"Flying\"],\n baseStats: { hp: 60, attack: 30, defense: 30, speed: 50, special: 56 },\n expGroup: \"medium_fast\",\n evolutionChainId: 83,\n rarity: \"common\",\n catchRate: 255,\n description: \"Writes clean, readable code that just works.\",\n },\n {\n id: 164,\n name: \"Noctowl\",\n types: [\"Normal\", \"Flying\"],\n baseStats: { hp: 100, attack: 50, defense: 50, speed: 70, special: 96 },\n expGroup: \"medium_fast\",\n evolutionChainId: 83,\n rarity: \"uncommon\",\n catchRate: 90,\n description: \"Writes clean, readable code that just works.\",\n },\n {\n id: 165,\n name: \"Ledyba\",\n types: [\"Bug\", \"Flying\"],\n baseStats: { hp: 40, attack: 20, defense: 30, speed: 55, special: 80 },\n expGroup: \"fast\",\n evolutionChainId: 84,\n rarity: \"common\",\n catchRate: 255,\n description: \"Surprisingly powerful despite its small size.\",\n },\n {\n id: 166,\n name: \"Ledian\",\n types: [\"Bug\", \"Flying\"],\n baseStats: { hp: 55, attack: 35, defense: 50, speed: 85, special: 110 },\n expGroup: \"fast\",\n evolutionChainId: 84,\n rarity: \"uncommon\",\n catchRate: 90,\n description: \"Its test coverage is thorough and persistent.\",\n },\n {\n id: 167,\n name: \"Spinarak\",\n types: [\"Bug\", \"Poison\"],\n baseStats: { hp: 40, attack: 60, defense: 40, speed: 30, special: 40 },\n expGroup: \"fast\",\n evolutionChainId: 85,\n rarity: \"common\",\n catchRate: 255,\n description: \"Finds bugs nobody else can spot.\",\n },\n {\n id: 168,\n name: \"Ariados\",\n types: [\"Bug\", \"Poison\"],\n baseStats: { hp: 70, attack: 90, defense: 70, speed: 40, special: 70 },\n expGroup: \"fast\",\n evolutionChainId: 85,\n rarity: \"uncommon\",\n catchRate: 90,\n description: \"Metamorphoses codebases through careful refactoring.\",\n },\n {\n id: 169,\n name: \"Crobat\",\n types: [\"Poison\", \"Flying\"],\n baseStats: { hp: 85, attack: 90, defense: 80, speed: 130, special: 80 },\n expGroup: \"medium_fast\",\n evolutionChainId: 17,\n rarity: \"uncommon\",\n catchRate: 90,\n description: \"Injects helpful logging into legacy systems.\",\n },\n {\n id: 170,\n name: \"Chinchou\",\n types: [\"Water\", \"Electric\"],\n baseStats: { hp: 75, attack: 38, defense: 38, speed: 67, special: 56 },\n expGroup: \"slow\",\n evolutionChainId: 86,\n rarity: \"common\",\n catchRate: 190,\n description: \"Flows through complex data pipelines with ease.\",\n },\n {\n id: 171,\n name: \"Lanturn\",\n types: [\"Water\", \"Electric\"],\n baseStats: { hp: 125, attack: 58, defense: 58, speed: 67, special: 76 },\n expGroup: \"slow\",\n evolutionChainId: 86,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Handles backpressure like a pro.\",\n },\n {\n id: 172,\n name: \"Pichu\",\n types: [\"Electric\"],\n baseStats: { hp: 20, attack: 40, defense: 15, speed: 60, special: 35 },\n expGroup: \"medium_fast\",\n evolutionChainId: 10,\n rarity: \"common\",\n catchRate: 190,\n description: \"Powers through async operations effortlessly.\",\n },\n {\n id: 173,\n name: \"Cleffa\",\n types: [\"Fairy\"],\n baseStats: { hp: 50, attack: 25, defense: 28, speed: 15, special: 55 },\n expGroup: \"fast\",\n evolutionChainId: 14,\n rarity: \"common\",\n catchRate: 150,\n description: \"Transforms ugly hacks into elegant solutions.\",\n },\n {\n id: 174,\n name: \"Igglybuff\",\n types: [\"Normal\", \"Fairy\"],\n baseStats: { hp: 90, attack: 30, defense: 15, speed: 15, special: 40 },\n expGroup: \"fast\",\n evolutionChainId: 16,\n rarity: \"common\",\n catchRate: 170,\n description: \"Solid fundamentals, no unnecessary complexity.\",\n },\n {\n id: 175,\n name: \"Togepi\",\n types: [\"Fairy\"],\n baseStats: { hp: 35, attack: 20, defense: 65, speed: 20, special: 65 },\n expGroup: \"fast\",\n evolutionChainId: 87,\n rarity: \"common\",\n catchRate: 190,\n description: \"Sprinkles syntactic sugar that actually helps.\",\n },\n {\n id: 176,\n name: \"Togetic\",\n types: [\"Fairy\", \"Flying\"],\n baseStats: { hp: 55, attack: 40, defense: 85, speed: 40, special: 105 },\n expGroup: \"fast\",\n evolutionChainId: 87,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Enchants users with delightful UX polish.\",\n },\n {\n id: 177,\n name: \"Natu\",\n types: [\"Psychic\", \"Flying\"],\n baseStats: { hp: 40, attack: 50, defense: 45, speed: 70, special: 70 },\n expGroup: \"medium_fast\",\n evolutionChainId: 88,\n rarity: \"common\",\n catchRate: 190,\n description: \"Its architecture decisions are eerily prescient.\",\n },\n {\n id: 178,\n name: \"Xatu\",\n types: [\"Psychic\", \"Flying\"],\n baseStats: { hp: 65, attack: 75, defense: 70, speed: 95, special: 95 },\n expGroup: \"medium_fast\",\n evolutionChainId: 88,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Its architecture decisions are eerily prescient.\",\n },\n {\n id: 179,\n name: \"Mareep\",\n types: [\"Electric\"],\n baseStats: { hp: 55, attack: 40, defense: 40, speed: 35, special: 65 },\n expGroup: \"medium_slow\",\n evolutionChainId: 89,\n rarity: \"common\",\n catchRate: 235,\n description: \"Sparks innovation with every commit.\",\n },\n {\n id: 180,\n name: \"Flaaffy\",\n types: [\"Electric\"],\n baseStats: { hp: 70, attack: 55, defense: 55, speed: 45, special: 80 },\n expGroup: \"medium_slow\",\n evolutionChainId: 89,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Sparks innovation with every commit.\",\n },\n {\n id: 181,\n name: \"Ampharos\",\n types: [\"Electric\"],\n baseStats: { hp: 90, attack: 75, defense: 85, speed: 55, special: 115 },\n expGroup: \"medium_slow\",\n evolutionChainId: 89,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Lightning-fast response times in production.\",\n },\n {\n id: 182,\n name: \"Bellossom\",\n types: [\"Grass\"],\n baseStats: { hp: 75, attack: 80, defense: 95, speed: 50, special: 100 },\n expGroup: \"medium_slow\",\n evolutionChainId: 18,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Photosynthesizes coffee into clean code.\",\n },\n {\n id: 183,\n name: \"Marill\",\n types: [\"Water\", \"Fairy\"],\n baseStats: { hp: 70, attack: 20, defense: 50, speed: 40, special: 50 },\n expGroup: \"fast\",\n evolutionChainId: 90,\n rarity: \"common\",\n catchRate: 190,\n description: \"Handles backpressure like a pro.\",\n },\n {\n id: 184,\n name: \"Azumarill\",\n types: [\"Water\", \"Fairy\"],\n baseStats: { hp: 100, attack: 50, defense: 80, speed: 50, special: 80 },\n expGroup: \"fast\",\n evolutionChainId: 90,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Cools down heated production incidents.\",\n },\n {\n id: 185,\n name: \"Sudowoodo\",\n types: [\"Rock\"],\n baseStats: { hp: 70, attack: 100, defense: 115, speed: 30, special: 65 },\n expGroup: \"medium_fast\",\n evolutionChainId: 91,\n rarity: \"uncommon\",\n catchRate: 65,\n description: \"Builds unbreakable infrastructure that lasts.\",\n },\n {\n id: 186,\n name: \"Politoed\",\n types: [\"Water\"],\n baseStats: { hp: 90, attack: 75, defense: 75, speed: 70, special: 100 },\n expGroup: \"medium_slow\",\n evolutionChainId: 26,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Streams data like a well-configured message queue.\",\n },\n {\n id: 187,\n name: \"Hoppip\",\n types: [\"Grass\", \"Flying\"],\n baseStats: { hp: 35, attack: 35, defense: 40, speed: 50, special: 55 },\n expGroup: \"medium_slow\",\n evolutionChainId: 92,\n rarity: \"common\",\n catchRate: 255,\n description: \"Grows features organically from a solid foundation.\",\n },\n {\n id: 188,\n name: \"Skiploom\",\n types: [\"Grass\", \"Flying\"],\n baseStats: { hp: 55, attack: 45, defense: 50, speed: 80, special: 65 },\n expGroup: \"medium_slow\",\n evolutionChainId: 92,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Grows features organically from a solid foundation.\",\n },\n {\n id: 189,\n name: \"Jumpluff\",\n types: [\"Grass\", \"Flying\"],\n baseStats: { hp: 75, attack: 55, defense: 70, speed: 110, special: 95 },\n expGroup: \"medium_slow\",\n evolutionChainId: 92,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Its codebase flourishes with careful nurturing.\",\n },\n {\n id: 190,\n name: \"Aipom\",\n types: [\"Normal\"],\n baseStats: { hp: 55, attack: 70, defense: 55, speed: 85, special: 55 },\n expGroup: \"fast\",\n evolutionChainId: 93,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Solid fundamentals, no unnecessary complexity.\",\n },\n {\n id: 191,\n name: \"Sunkern\",\n types: [\"Grass\"],\n baseStats: { hp: 30, attack: 30, defense: 30, speed: 30, special: 30 },\n expGroup: \"medium_slow\",\n evolutionChainId: 94,\n rarity: \"common\",\n catchRate: 235,\n description: \"Photosynthesizes coffee into clean code.\",\n },\n {\n id: 192,\n name: \"Sunflora\",\n types: [\"Grass\"],\n baseStats: { hp: 75, attack: 75, defense: 55, speed: 30, special: 105 },\n expGroup: \"medium_slow\",\n evolutionChainId: 94,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Grows features organically from a solid foundation.\",\n },\n {\n id: 193,\n name: \"Yanma\",\n types: [\"Bug\", \"Flying\"],\n baseStats: { hp: 65, attack: 65, defense: 45, speed: 95, special: 75 },\n expGroup: \"medium_fast\",\n evolutionChainId: 95,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Surprisingly powerful despite its small size.\",\n },\n {\n id: 194,\n name: \"Wooper\",\n types: [\"Water\", \"Ground\"],\n baseStats: { hp: 55, attack: 45, defense: 45, speed: 15, special: 25 },\n expGroup: \"medium_fast\",\n evolutionChainId: 96,\n rarity: \"common\",\n catchRate: 255,\n description: \"Cools down heated production incidents.\",\n },\n {\n id: 195,\n name: \"Quagsire\",\n types: [\"Water\", \"Ground\"],\n baseStats: { hp: 95, attack: 85, defense: 85, speed: 35, special: 65 },\n expGroup: \"medium_fast\",\n evolutionChainId: 96,\n rarity: \"uncommon\",\n catchRate: 90,\n description: \"Handles backpressure like a pro.\",\n },\n {\n id: 196,\n name: \"Espeon\",\n types: [\"Psychic\"],\n baseStats: { hp: 65, attack: 65, defense: 60, speed: 110, special: 130 },\n expGroup: \"medium_fast\",\n evolutionChainId: 67,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Mentally models complex distributed systems.\",\n },\n {\n id: 197,\n name: \"Umbreon\",\n types: [\"Dark\"],\n baseStats: { hp: 95, attack: 65, defense: 110, speed: 65, special: 130 },\n expGroup: \"medium_fast\",\n evolutionChainId: 67,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Finds vulnerabilities hidden in the shadows.\",\n },\n {\n id: 198,\n name: \"Murkrow\",\n types: [\"Dark\", \"Flying\"],\n baseStats: { hp: 60, attack: 85, defense: 42, speed: 91, special: 85 },\n expGroup: \"medium_slow\",\n evolutionChainId: 97,\n rarity: \"rare\",\n catchRate: 30,\n description: \"Finds vulnerabilities hidden in the shadows.\",\n },\n {\n id: 199,\n name: \"Slowking\",\n types: [\"Water\", \"Psychic\"],\n baseStats: { hp: 95, attack: 75, defense: 80, speed: 30, special: 110 },\n expGroup: \"medium_fast\",\n evolutionChainId: 33,\n rarity: \"uncommon\",\n catchRate: 70,\n description: \"Cools down heated production incidents.\",\n },\n {\n id: 200,\n name: \"Misdreavus\",\n types: [\"Ghost\"],\n baseStats: { hp: 60, attack: 60, defense: 60, speed: 85, special: 85 },\n expGroup: \"fast\",\n evolutionChainId: 98,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Phases through firewalls during security audits.\",\n },\n {\n id: 201,\n name: \"Unown\",\n types: [\"Psychic\"],\n baseStats: { hp: 48, attack: 72, defense: 48, speed: 48, special: 72 },\n expGroup: \"medium_fast\",\n evolutionChainId: 99,\n rarity: \"common\",\n catchRate: 225,\n description: \"Its architecture decisions are eerily prescient.\",\n },\n {\n id: 202,\n name: \"Wobbuffet\",\n types: [\"Psychic\"],\n baseStats: { hp: 190, attack: 33, defense: 58, speed: 33, special: 58 },\n expGroup: \"medium_fast\",\n evolutionChainId: 100,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Debugs production issues through pure intuition.\",\n },\n {\n id: 203,\n name: \"Girafarig\",\n types: [\"Normal\", \"Psychic\"],\n baseStats: { hp: 70, attack: 80, defense: 65, speed: 85, special: 90 },\n expGroup: \"medium_fast\",\n evolutionChainId: 101,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"The everyday workhorse of any development team.\",\n },\n {\n id: 204,\n name: \"Pineco\",\n types: [\"Bug\"],\n baseStats: { hp: 50, attack: 65, defense: 90, speed: 15, special: 35 },\n expGroup: \"medium_fast\",\n evolutionChainId: 102,\n rarity: \"common\",\n catchRate: 190,\n description: \"Crawls through every edge case methodically.\",\n },\n {\n id: 205,\n name: \"Forretress\",\n types: [\"Bug\", \"Steel\"],\n baseStats: { hp: 75, attack: 90, defense: 140, speed: 40, special: 60 },\n expGroup: \"medium_fast\",\n evolutionChainId: 102,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Its test coverage is thorough and persistent.\",\n },\n {\n id: 206,\n name: \"Dunsparce\",\n types: [\"Normal\"],\n baseStats: { hp: 100, attack: 70, defense: 70, speed: 45, special: 65 },\n expGroup: \"medium_fast\",\n evolutionChainId: 103,\n rarity: \"common\",\n catchRate: 190,\n description: \"A reliable teammate in any codebase.\",\n },\n {\n id: 207,\n name: \"Gligar\",\n types: [\"Ground\", \"Flying\"],\n baseStats: { hp: 65, attack: 75, defense: 105, speed: 85, special: 65 },\n expGroup: \"medium_slow\",\n evolutionChainId: 104,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"Digs deep into root cause analysis.\",\n },\n {\n id: 208,\n name: \"Steelix\",\n types: [\"Steel\", \"Ground\"],\n baseStats: { hp: 75, attack: 85, defense: 200, speed: 30, special: 65 },\n expGroup: \"medium_fast\",\n evolutionChainId: 41,\n rarity: \"rare\",\n catchRate: 25,\n description: \"Tempered by years of production hardening.\",\n },\n {\n id: 209,\n name: \"Snubbull\",\n types: [\"Fairy\"],\n baseStats: { hp: 60, attack: 80, defense: 50, speed: 30, special: 40 },\n expGroup: \"fast\",\n evolutionChainId: 105,\n rarity: \"common\",\n catchRate: 190,\n description: \"Sprinkles syntactic sugar that actually helps.\",\n },\n {\n id: 210,\n name: \"Granbull\",\n types: [\"Fairy\"],\n baseStats: { hp: 90, attack: 120, defense: 75, speed: 45, special: 60 },\n expGroup: \"fast\",\n evolutionChainId: 105,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Enchants users with delightful UX polish.\",\n },\n {\n id: 211,\n name: \"Qwilfish\",\n types: [\"Water\", \"Poison\"],\n baseStats: { hp: 65, attack: 95, defense: 85, speed: 85, special: 55 },\n expGroup: \"medium_fast\",\n evolutionChainId: 106,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Its code flows naturally from function to function.\",\n },\n {\n id: 212,\n name: \"Scizor\",\n types: [\"Bug\", \"Steel\"],\n baseStats: { hp: 70, attack: 130, defense: 100, speed: 65, special: 80 },\n expGroup: \"medium_fast\",\n evolutionChainId: 58,\n rarity: \"rare\",\n catchRate: 25,\n description: \"Metamorphoses codebases through careful refactoring.\",\n },\n {\n id: 213,\n name: \"Shuckle\",\n types: [\"Bug\", \"Rock\"],\n baseStats: { hp: 20, attack: 10, defense: 230, speed: 5, special: 230 },\n expGroup: \"medium_slow\",\n evolutionChainId: 107,\n rarity: \"common\",\n catchRate: 190,\n description: \"Metamorphoses codebases through careful refactoring.\",\n },\n {\n id: 214,\n name: \"Heracross\",\n types: [\"Bug\", \"Fighting\"],\n baseStats: { hp: 80, attack: 125, defense: 75, speed: 85, special: 95 },\n expGroup: \"slow\",\n evolutionChainId: 108,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Finds bugs nobody else can spot.\",\n },\n {\n id: 215,\n name: \"Sneasel\",\n types: [\"Dark\", \"Ice\"],\n baseStats: { hp: 55, attack: 95, defense: 55, speed: 115, special: 75 },\n expGroup: \"medium_slow\",\n evolutionChainId: 109,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"Operates best when everyone else has logged off.\",\n },\n {\n id: 216,\n name: \"Teddiursa\",\n types: [\"Normal\"],\n baseStats: { hp: 60, attack: 80, defense: 50, speed: 40, special: 50 },\n expGroup: \"medium_fast\",\n evolutionChainId: 110,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Solid fundamentals, no unnecessary complexity.\",\n },\n {\n id: 217,\n name: \"Ursaring\",\n types: [\"Normal\"],\n baseStats: { hp: 90, attack: 130, defense: 75, speed: 55, special: 75 },\n expGroup: \"medium_fast\",\n evolutionChainId: 110,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"Keeps things simple and maintainable.\",\n },\n {\n id: 218,\n name: \"Slugma\",\n types: [\"Fire\"],\n baseStats: { hp: 40, attack: 40, defense: 40, speed: 20, special: 70 },\n expGroup: \"medium_fast\",\n evolutionChainId: 111,\n rarity: \"common\",\n catchRate: 190,\n description: \"Hotfixes deployed before you finish your coffee.\",\n },\n {\n id: 219,\n name: \"Magcargo\",\n types: [\"Fire\", \"Rock\"],\n baseStats: { hp: 60, attack: 50, defense: 120, speed: 30, special: 90 },\n expGroup: \"medium_fast\",\n evolutionChainId: 111,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Hotfixes deployed before you finish your coffee.\",\n },\n {\n id: 220,\n name: \"Swinub\",\n types: [\"Ice\", \"Ground\"],\n baseStats: { hp: 50, attack: 50, defense: 40, speed: 50, special: 30 },\n expGroup: \"slow\",\n evolutionChainId: 112,\n rarity: \"common\",\n catchRate: 225,\n description: \"Freezes bugs in their tracks before production.\",\n },\n {\n id: 221,\n name: \"Piloswine\",\n types: [\"Ice\", \"Ground\"],\n baseStats: { hp: 100, attack: 100, defense: 80, speed: 50, special: 60 },\n expGroup: \"slow\",\n evolutionChainId: 112,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Keeps cool under tight deployment deadlines.\",\n },\n {\n id: 222,\n name: \"Corsola\",\n types: [\"Water\", \"Rock\"],\n baseStats: { hp: 65, attack: 55, defense: 95, speed: 35, special: 95 },\n expGroup: \"fast\",\n evolutionChainId: 113,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"Handles backpressure like a pro.\",\n },\n {\n id: 223,\n name: \"Remoraid\",\n types: [\"Water\"],\n baseStats: { hp: 35, attack: 65, defense: 35, speed: 65, special: 65 },\n expGroup: \"medium_fast\",\n evolutionChainId: 114,\n rarity: \"common\",\n catchRate: 190,\n description: \"Flows through complex data pipelines with ease.\",\n },\n {\n id: 224,\n name: \"Octillery\",\n types: [\"Water\"],\n baseStats: { hp: 75, attack: 105, defense: 75, speed: 45, special: 105 },\n expGroup: \"medium_fast\",\n evolutionChainId: 114,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Streams data like a well-configured message queue.\",\n },\n {\n id: 225,\n name: \"Delibird\",\n types: [\"Ice\", \"Flying\"],\n baseStats: { hp: 45, attack: 55, defense: 45, speed: 75, special: 65 },\n expGroup: \"fast\",\n evolutionChainId: 115,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Keeps cool under tight deployment deadlines.\",\n },\n {\n id: 226,\n name: \"Mantine\",\n types: [\"Water\", \"Flying\"],\n baseStats: { hp: 85, attack: 40, defense: 70, speed: 70, special: 140 },\n expGroup: \"slow\",\n evolutionChainId: 116,\n rarity: \"rare\",\n catchRate: 25,\n description: \"Its code flows naturally from function to function.\",\n },\n {\n id: 227,\n name: \"Skarmory\",\n types: [\"Steel\", \"Flying\"],\n baseStats: { hp: 65, attack: 80, defense: 140, speed: 70, special: 70 },\n expGroup: \"slow\",\n evolutionChainId: 117,\n rarity: \"rare\",\n catchRate: 25,\n description: \"Builds infrastructure that withstands any load.\",\n },\n {\n id: 228,\n name: \"Houndour\",\n types: [\"Dark\", \"Fire\"],\n baseStats: { hp: 45, attack: 60, defense: 30, speed: 65, special: 80 },\n expGroup: \"slow\",\n evolutionChainId: 118,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Masters the dark arts of regex and bitwise ops.\",\n },\n {\n id: 229,\n name: \"Houndoom\",\n types: [\"Dark\", \"Fire\"],\n baseStats: { hp: 75, attack: 90, defense: 50, speed: 95, special: 110 },\n expGroup: \"slow\",\n evolutionChainId: 118,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Thrives in late-night debugging sessions.\",\n },\n {\n id: 230,\n name: \"Kingdra\",\n types: [\"Water\", \"Dragon\"],\n baseStats: { hp: 75, attack: 95, defense: 95, speed: 85, special: 95 },\n expGroup: \"medium_fast\",\n evolutionChainId: 54,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Flows through complex data pipelines with ease.\",\n },\n {\n id: 231,\n name: \"Phanpy\",\n types: [\"Ground\"],\n baseStats: { hp: 90, attack: 60, defense: 60, speed: 40, special: 40 },\n expGroup: \"medium_fast\",\n evolutionChainId: 119,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Lays the groundwork for scalable systems.\",\n },\n {\n id: 232,\n name: \"Donphan\",\n types: [\"Ground\"],\n baseStats: { hp: 90, attack: 120, defense: 120, speed: 50, special: 60 },\n expGroup: \"medium_fast\",\n evolutionChainId: 119,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"Lays the groundwork for scalable systems.\",\n },\n {\n id: 233,\n name: \"Porygon2\",\n types: [\"Normal\"],\n baseStats: { hp: 85, attack: 80, defense: 90, speed: 60, special: 105 },\n expGroup: \"medium_fast\",\n evolutionChainId: 68,\n rarity: \"rare\",\n catchRate: 45,\n description: \"The everyday workhorse of any development team.\",\n },\n {\n id: 234,\n name: \"Stantler\",\n types: [\"Normal\"],\n baseStats: { hp: 73, attack: 95, defense: 62, speed: 85, special: 85 },\n expGroup: \"slow\",\n evolutionChainId: 120,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Writes clean, readable code that just works.\",\n },\n {\n id: 235,\n name: \"Smeargle\",\n types: [\"Normal\"],\n baseStats: { hp: 55, attack: 20, defense: 35, speed: 75, special: 45 },\n expGroup: \"fast\",\n evolutionChainId: 121,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Solid fundamentals, no unnecessary complexity.\",\n },\n {\n id: 236,\n name: \"Tyrogue\",\n types: [\"Fighting\"],\n baseStats: { hp: 35, attack: 35, defense: 35, speed: 35, special: 35 },\n expGroup: \"medium_fast\",\n evolutionChainId: 47,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Never backs down from a complex refactor.\",\n },\n {\n id: 237,\n name: \"Hitmontop\",\n types: [\"Fighting\"],\n baseStats: { hp: 50, attack: 95, defense: 95, speed: 70, special: 110 },\n expGroup: \"medium_fast\",\n evolutionChainId: 47,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Never backs down from a complex refactor.\",\n },\n {\n id: 238,\n name: \"Smoochum\",\n types: [\"Ice\", \"Psychic\"],\n baseStats: { hp: 45, attack: 30, defense: 15, speed: 65, special: 85 },\n expGroup: \"medium_fast\",\n evolutionChainId: 59,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Freezes bugs in their tracks before production.\",\n },\n {\n id: 239,\n name: \"Elekid\",\n types: [\"Electric\"],\n baseStats: { hp: 45, attack: 63, defense: 37, speed: 95, special: 65 },\n expGroup: \"medium_fast\",\n evolutionChainId: 60,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Charges up the team with electrifying demos.\",\n },\n {\n id: 240,\n name: \"Magby\",\n types: [\"Fire\"],\n baseStats: { hp: 45, attack: 75, defense: 37, speed: 83, special: 70 },\n expGroup: \"medium_fast\",\n evolutionChainId: 61,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Burns through bugs with blazing speed.\",\n },\n {\n id: 241,\n name: \"Miltank\",\n types: [\"Normal\"],\n baseStats: { hp: 95, attack: 80, defense: 105, speed: 100, special: 70 },\n expGroup: \"slow\",\n evolutionChainId: 122,\n rarity: \"rare\",\n catchRate: 45,\n description: \"The everyday workhorse of any development team.\",\n },\n {\n id: 242,\n name: \"Blissey\",\n types: [\"Normal\"],\n baseStats: { hp: 255, attack: 10, defense: 10, speed: 55, special: 135 },\n expGroup: \"fast\",\n evolutionChainId: 51,\n rarity: \"rare\",\n catchRate: 30,\n description: \"A reliable teammate in any codebase.\",\n },\n {\n id: 243,\n name: \"Raikou\",\n types: [\"Electric\"],\n baseStats: { hp: 90, attack: 85, defense: 75, speed: 115, special: 115 },\n expGroup: \"slow\",\n evolutionChainId: 123,\n rarity: \"legendary\",\n catchRate: 3,\n description: \"Sparks innovation with every commit.\",\n },\n {\n id: 244,\n name: \"Entei\",\n types: [\"Fire\"],\n baseStats: { hp: 115, attack: 115, defense: 85, speed: 100, special: 90 },\n expGroup: \"slow\",\n evolutionChainId: 124,\n rarity: \"legendary\",\n catchRate: 3,\n description: \"Its CI pipeline is always on fire \u2014 in a good way.\",\n },\n {\n id: 245,\n name: \"Suicune\",\n types: [\"Water\"],\n baseStats: { hp: 100, attack: 75, defense: 115, speed: 85, special: 115 },\n expGroup: \"slow\",\n evolutionChainId: 125,\n rarity: \"legendary\",\n catchRate: 3,\n description: \"Cools down heated production incidents.\",\n },\n {\n id: 246,\n name: \"Larvitar\",\n types: [\"Rock\", \"Ground\"],\n baseStats: { hp: 50, attack: 64, defense: 50, speed: 41, special: 50 },\n expGroup: \"slow\",\n evolutionChainId: 126,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Its code is hardened against every attack vector.\",\n },\n {\n id: 247,\n name: \"Pupitar\",\n types: [\"Rock\", \"Ground\"],\n baseStats: { hp: 70, attack: 84, defense: 70, speed: 51, special: 70 },\n expGroup: \"slow\",\n evolutionChainId: 126,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Its code is hardened against every attack vector.\",\n },\n {\n id: 248,\n name: \"Tyranitar\",\n types: [\"Rock\", \"Dark\"],\n baseStats: { hp: 100, attack: 134, defense: 110, speed: 61, special: 100 },\n expGroup: \"slow\",\n evolutionChainId: 126,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Withstands the heaviest traffic spikes.\",\n },\n {\n id: 249,\n name: \"Lugia\",\n types: [\"Psychic\", \"Flying\"],\n baseStats: { hp: 106, attack: 90, defense: 130, speed: 110, special: 154 },\n expGroup: \"slow\",\n evolutionChainId: 127,\n rarity: \"legendary\",\n catchRate: 3,\n description: \"Predicts bugs before they even appear in code.\",\n },\n {\n id: 250,\n name: \"Ho-Oh\",\n types: [\"Fire\", \"Flying\"],\n baseStats: { hp: 106, attack: 130, defense: 90, speed: 90, special: 154 },\n expGroup: \"slow\",\n evolutionChainId: 128,\n rarity: \"legendary\",\n catchRate: 3,\n description: \"Compiles so fast the CPU starts sweating.\",\n },\n {\n id: 251,\n name: \"Celebi\",\n types: [\"Psychic\", \"Grass\"],\n baseStats: { hp: 100, attack: 100, defense: 100, speed: 100, special: 100 },\n expGroup: \"medium_slow\",\n evolutionChainId: 129,\n rarity: \"mythical\",\n catchRate: 45,\n description: \"Reads stack traces like reading minds.\",\n },\n\n // \u2500\u2500 Gen 3 \u2014 Hoenn (#252\u2013#386) \u2500\u2500\n {\n id: 252,\n name: \"Treecko\",\n types: [\"Grass\"],\n baseStats: { hp: 40, attack: 45, defense: 35, speed: 70, special: 65 },\n expGroup: \"medium_slow\",\n evolutionChainId: 130,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Branches out into new features with natural ease.\",\n },\n {\n id: 253,\n name: \"Grovyle\",\n types: [\"Grass\"],\n baseStats: { hp: 50, attack: 65, defense: 45, speed: 95, special: 85 },\n expGroup: \"medium_slow\",\n evolutionChainId: 130,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Photosynthesizes coffee into clean code.\",\n },\n {\n id: 254,\n name: \"Sceptile\",\n types: [\"Grass\"],\n baseStats: { hp: 70, attack: 85, defense: 65, speed: 120, special: 105 },\n expGroup: \"medium_slow\",\n evolutionChainId: 130,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Branches out into new features with natural ease.\",\n },\n {\n id: 255,\n name: \"Torchic\",\n types: [\"Fire\"],\n baseStats: { hp: 45, attack: 60, defense: 40, speed: 45, special: 70 },\n expGroup: \"medium_slow\",\n evolutionChainId: 131,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Its CI pipeline is always on fire \u2014 in a good way.\",\n },\n {\n id: 256,\n name: \"Combusken\",\n types: [\"Fire\", \"Fighting\"],\n baseStats: { hp: 60, attack: 85, defense: 60, speed: 55, special: 85 },\n expGroup: \"medium_slow\",\n evolutionChainId: 131,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Burns through bugs with blazing speed.\",\n },\n {\n id: 257,\n name: \"Blaziken\",\n types: [\"Fire\", \"Fighting\"],\n baseStats: { hp: 80, attack: 120, defense: 70, speed: 80, special: 110 },\n expGroup: \"medium_slow\",\n evolutionChainId: 131,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Compiles so fast the CPU starts sweating.\",\n },\n {\n id: 258,\n name: \"Mudkip\",\n types: [\"Water\"],\n baseStats: { hp: 50, attack: 70, defense: 50, speed: 40, special: 50 },\n expGroup: \"medium_slow\",\n evolutionChainId: 132,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Handles backpressure like a pro.\",\n },\n {\n id: 259,\n name: \"Marshtomp\",\n types: [\"Water\", \"Ground\"],\n baseStats: { hp: 70, attack: 85, defense: 70, speed: 50, special: 70 },\n expGroup: \"medium_slow\",\n evolutionChainId: 132,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Handles backpressure like a pro.\",\n },\n {\n id: 260,\n name: \"Swampert\",\n types: [\"Water\", \"Ground\"],\n baseStats: { hp: 100, attack: 110, defense: 90, speed: 60, special: 90 },\n expGroup: \"medium_slow\",\n evolutionChainId: 132,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Streams data like a well-configured message queue.\",\n },\n {\n id: 261,\n name: \"Poochyena\",\n types: [\"Dark\"],\n baseStats: { hp: 35, attack: 55, defense: 35, speed: 35, special: 30 },\n expGroup: \"medium_fast\",\n evolutionChainId: 133,\n rarity: \"common\",\n catchRate: 255,\n description: \"Operates best when everyone else has logged off.\",\n },\n {\n id: 262,\n name: \"Mightyena\",\n types: [\"Dark\"],\n baseStats: { hp: 70, attack: 90, defense: 70, speed: 70, special: 60 },\n expGroup: \"medium_fast\",\n evolutionChainId: 133,\n rarity: \"uncommon\",\n catchRate: 127,\n description: \"Operates best when everyone else has logged off.\",\n },\n {\n id: 263,\n name: \"Zigzagoon\",\n types: [\"Normal\"],\n baseStats: { hp: 38, attack: 30, defense: 41, speed: 60, special: 41 },\n expGroup: \"medium_fast\",\n evolutionChainId: 134,\n rarity: \"common\",\n catchRate: 255,\n description: \"Solid fundamentals, no unnecessary complexity.\",\n },\n {\n id: 264,\n name: \"Linoone\",\n types: [\"Normal\"],\n baseStats: { hp: 78, attack: 70, defense: 61, speed: 100, special: 61 },\n expGroup: \"medium_fast\",\n evolutionChainId: 134,\n rarity: \"uncommon\",\n catchRate: 90,\n description: \"Writes clean, readable code that just works.\",\n },\n {\n id: 265,\n name: \"Wurmple\",\n types: [\"Bug\"],\n baseStats: { hp: 45, attack: 45, defense: 35, speed: 20, special: 30 },\n expGroup: \"medium_fast\",\n evolutionChainId: 135,\n rarity: \"common\",\n catchRate: 255,\n description: \"Finds bugs nobody else can spot.\",\n },\n {\n id: 266,\n name: \"Silcoon\",\n types: [\"Bug\"],\n baseStats: { hp: 50, attack: 35, defense: 55, speed: 15, special: 25 },\n expGroup: \"medium_fast\",\n evolutionChainId: 135,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Metamorphoses codebases through careful refactoring.\",\n },\n {\n id: 267,\n name: \"Beautifly\",\n types: [\"Bug\", \"Flying\"],\n baseStats: { hp: 60, attack: 70, defense: 50, speed: 65, special: 100 },\n expGroup: \"medium_fast\",\n evolutionChainId: 135,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Metamorphoses codebases through careful refactoring.\",\n },\n {\n id: 268,\n name: \"Cascoon\",\n types: [\"Bug\"],\n baseStats: { hp: 50, attack: 35, defense: 55, speed: 15, special: 25 },\n expGroup: \"medium_fast\",\n evolutionChainId: 135,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Finds bugs nobody else can spot.\",\n },\n {\n id: 269,\n name: \"Dustox\",\n types: [\"Bug\", \"Poison\"],\n baseStats: { hp: 60, attack: 50, defense: 70, speed: 65, special: 90 },\n expGroup: \"medium_fast\",\n evolutionChainId: 135,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Surprisingly powerful despite its small size.\",\n },\n {\n id: 270,\n name: \"Lotad\",\n types: [\"Water\", \"Grass\"],\n baseStats: { hp: 40, attack: 30, defense: 30, speed: 30, special: 50 },\n expGroup: \"medium_slow\",\n evolutionChainId: 136,\n rarity: \"common\",\n catchRate: 255,\n description: \"Handles backpressure like a pro.\",\n },\n {\n id: 271,\n name: \"Lombre\",\n types: [\"Water\", \"Grass\"],\n baseStats: { hp: 60, attack: 50, defense: 50, speed: 50, special: 70 },\n expGroup: \"medium_slow\",\n evolutionChainId: 136,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Handles backpressure like a pro.\",\n },\n {\n id: 272,\n name: \"Ludicolo\",\n types: [\"Water\", \"Grass\"],\n baseStats: { hp: 80, attack: 70, defense: 70, speed: 70, special: 100 },\n expGroup: \"medium_slow\",\n evolutionChainId: 136,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Streams data like a well-configured message queue.\",\n },\n {\n id: 273,\n name: \"Seedot\",\n types: [\"Grass\"],\n baseStats: { hp: 40, attack: 40, defense: 50, speed: 30, special: 30 },\n expGroup: \"medium_slow\",\n evolutionChainId: 137,\n rarity: \"common\",\n catchRate: 255,\n description: \"Grows features organically from a solid foundation.\",\n },\n {\n id: 274,\n name: \"Nuzleaf\",\n types: [\"Grass\", \"Dark\"],\n baseStats: { hp: 70, attack: 70, defense: 40, speed: 60, special: 60 },\n expGroup: \"medium_slow\",\n evolutionChainId: 137,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Branches out into new features with natural ease.\",\n },\n {\n id: 275,\n name: \"Shiftry\",\n types: [\"Grass\", \"Dark\"],\n baseStats: { hp: 90, attack: 100, defense: 60, speed: 80, special: 90 },\n expGroup: \"medium_slow\",\n evolutionChainId: 137,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Plants the seeds for sustainable architecture.\",\n },\n {\n id: 276,\n name: \"Taillow\",\n types: [\"Normal\", \"Flying\"],\n baseStats: { hp: 40, attack: 55, defense: 30, speed: 85, special: 30 },\n expGroup: \"medium_slow\",\n evolutionChainId: 138,\n rarity: \"common\",\n catchRate: 200,\n description: \"Solid fundamentals, no unnecessary complexity.\",\n },\n {\n id: 277,\n name: \"Swellow\",\n types: [\"Normal\", \"Flying\"],\n baseStats: { hp: 60, attack: 85, defense: 60, speed: 125, special: 75 },\n expGroup: \"medium_slow\",\n evolutionChainId: 138,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Writes clean, readable code that just works.\",\n },\n {\n id: 278,\n name: \"Wingull\",\n types: [\"Water\", \"Flying\"],\n baseStats: { hp: 40, attack: 30, defense: 30, speed: 85, special: 55 },\n expGroup: \"medium_fast\",\n evolutionChainId: 139,\n rarity: \"common\",\n catchRate: 190,\n description: \"Cools down heated production incidents.\",\n },\n {\n id: 279,\n name: \"Pelipper\",\n types: [\"Water\", \"Flying\"],\n baseStats: { hp: 60, attack: 50, defense: 100, speed: 65, special: 95 },\n expGroup: \"medium_fast\",\n evolutionChainId: 139,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Cools down heated production incidents.\",\n },\n {\n id: 280,\n name: \"Ralts\",\n types: [\"Psychic\", \"Fairy\"],\n baseStats: { hp: 28, attack: 25, defense: 25, speed: 40, special: 45 },\n expGroup: \"slow\",\n evolutionChainId: 140,\n rarity: \"common\",\n catchRate: 235,\n description: \"Predicts bugs before they even appear in code.\",\n },\n {\n id: 281,\n name: \"Kirlia\",\n types: [\"Psychic\", \"Fairy\"],\n baseStats: { hp: 38, attack: 35, defense: 35, speed: 50, special: 65 },\n expGroup: \"slow\",\n evolutionChainId: 140,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Debugs production issues through pure intuition.\",\n },\n {\n id: 282,\n name: \"Gardevoir\",\n types: [\"Psychic\", \"Fairy\"],\n baseStats: { hp: 68, attack: 65, defense: 65, speed: 80, special: 125 },\n expGroup: \"slow\",\n evolutionChainId: 140,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Mentally models complex distributed systems.\",\n },\n {\n id: 283,\n name: \"Surskit\",\n types: [\"Bug\", \"Water\"],\n baseStats: { hp: 40, attack: 30, defense: 32, speed: 65, special: 52 },\n expGroup: \"medium_fast\",\n evolutionChainId: 141,\n rarity: \"common\",\n catchRate: 200,\n description: \"Finds bugs nobody else can spot.\",\n },\n {\n id: 284,\n name: \"Masquerain\",\n types: [\"Bug\", \"Flying\"],\n baseStats: { hp: 70, attack: 60, defense: 62, speed: 80, special: 100 },\n expGroup: \"medium_fast\",\n evolutionChainId: 141,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Its test coverage is thorough and persistent.\",\n },\n {\n id: 285,\n name: \"Shroomish\",\n types: [\"Grass\"],\n baseStats: { hp: 60, attack: 40, defense: 60, speed: 35, special: 60 },\n expGroup: \"slow\",\n evolutionChainId: 142,\n rarity: \"common\",\n catchRate: 255,\n description: \"Photosynthesizes coffee into clean code.\",\n },\n {\n id: 286,\n name: \"Breloom\",\n types: [\"Grass\", \"Fighting\"],\n baseStats: { hp: 60, attack: 130, defense: 80, speed: 70, special: 60 },\n expGroup: \"slow\",\n evolutionChainId: 142,\n rarity: \"uncommon\",\n catchRate: 90,\n description: \"Photosynthesizes coffee into clean code.\",\n },\n {\n id: 287,\n name: \"Slakoth\",\n types: [\"Normal\"],\n baseStats: { hp: 60, attack: 60, defense: 60, speed: 30, special: 35 },\n expGroup: \"slow\",\n evolutionChainId: 143,\n rarity: \"common\",\n catchRate: 255,\n description: \"The everyday workhorse of any development team.\",\n },\n {\n id: 288,\n name: \"Vigoroth\",\n types: [\"Normal\"],\n baseStats: { hp: 80, attack: 80, defense: 80, speed: 90, special: 55 },\n expGroup: \"slow\",\n evolutionChainId: 143,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Writes clean, readable code that just works.\",\n },\n {\n id: 289,\n name: \"Slaking\",\n types: [\"Normal\"],\n baseStats: { hp: 150, attack: 160, defense: 100, speed: 100, special: 95 },\n expGroup: \"slow\",\n evolutionChainId: 143,\n rarity: \"rare\",\n catchRate: 45,\n description: \"The everyday workhorse of any development team.\",\n },\n {\n id: 290,\n name: \"Nincada\",\n types: [\"Bug\", \"Ground\"],\n baseStats: { hp: 31, attack: 45, defense: 90, speed: 40, special: 30 },\n expGroup: \"fast\",\n evolutionChainId: 144,\n rarity: \"common\",\n catchRate: 255,\n description: \"Finds bugs nobody else can spot.\",\n },\n {\n id: 291,\n name: \"Ninjask\",\n types: [\"Bug\", \"Flying\"],\n baseStats: { hp: 61, attack: 90, defense: 45, speed: 160, special: 50 },\n expGroup: \"fast\",\n evolutionChainId: 144,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Surprisingly powerful despite its small size.\",\n },\n {\n id: 292,\n name: \"Shedinja\",\n types: [\"Bug\", \"Ghost\"],\n baseStats: { hp: 1, attack: 90, defense: 45, speed: 40, special: 30 },\n expGroup: \"fast\",\n evolutionChainId: 144,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Its test coverage is thorough and persistent.\",\n },\n {\n id: 293,\n name: \"Whismur\",\n types: [\"Normal\"],\n baseStats: { hp: 64, attack: 51, defense: 23, speed: 28, special: 51 },\n expGroup: \"medium_slow\",\n evolutionChainId: 145,\n rarity: \"common\",\n catchRate: 190,\n description: \"The everyday workhorse of any development team.\",\n },\n {\n id: 294,\n name: \"Loudred\",\n types: [\"Normal\"],\n baseStats: { hp: 84, attack: 71, defense: 43, speed: 48, special: 71 },\n expGroup: \"medium_slow\",\n evolutionChainId: 145,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"The everyday workhorse of any development team.\",\n },\n {\n id: 295,\n name: \"Exploud\",\n types: [\"Normal\"],\n baseStats: { hp: 104, attack: 91, defense: 63, speed: 68, special: 91 },\n expGroup: \"medium_slow\",\n evolutionChainId: 145,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Keeps things simple and maintainable.\",\n },\n {\n id: 296,\n name: \"Makuhita\",\n types: [\"Fighting\"],\n baseStats: { hp: 72, attack: 60, defense: 30, speed: 25, special: 30 },\n expGroup: \"slow\",\n evolutionChainId: 146,\n rarity: \"common\",\n catchRate: 180,\n description: \"Trains hard on algorithmic challenges daily.\",\n },\n {\n id: 297,\n name: \"Hariyama\",\n types: [\"Fighting\"],\n baseStats: { hp: 144, attack: 120, defense: 60, speed: 50, special: 60 },\n expGroup: \"slow\",\n evolutionChainId: 146,\n rarity: \"common\",\n catchRate: 200,\n description: \"Never backs down from a complex refactor.\",\n },\n {\n id: 298,\n name: \"Azurill\",\n types: [\"Normal\", \"Fairy\"],\n baseStats: { hp: 50, attack: 20, defense: 40, speed: 20, special: 40 },\n expGroup: \"fast\",\n evolutionChainId: 90,\n rarity: \"common\",\n catchRate: 150,\n description: \"The everyday workhorse of any development team.\",\n },\n {\n id: 299,\n name: \"Nosepass\",\n types: [\"Rock\"],\n baseStats: { hp: 30, attack: 45, defense: 135, speed: 30, special: 90 },\n expGroup: \"medium_fast\",\n evolutionChainId: 147,\n rarity: \"common\",\n catchRate: 255,\n description: \"Dependable like bedrock under your deployment.\",\n },\n {\n id: 300,\n name: \"Skitty\",\n types: [\"Normal\"],\n baseStats: { hp: 50, attack: 45, defense: 45, speed: 50, special: 35 },\n expGroup: \"fast\",\n evolutionChainId: 148,\n rarity: \"common\",\n catchRate: 255,\n description: \"The everyday workhorse of any development team.\",\n },\n {\n id: 301,\n name: \"Delcatty\",\n types: [\"Normal\"],\n baseStats: { hp: 70, attack: 65, defense: 65, speed: 90, special: 55 },\n expGroup: \"fast\",\n evolutionChainId: 148,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"Keeps things simple and maintainable.\",\n },\n {\n id: 302,\n name: \"Sableye\",\n types: [\"Dark\", \"Ghost\"],\n baseStats: { hp: 50, attack: 75, defense: 75, speed: 50, special: 65 },\n expGroup: \"medium_slow\",\n evolutionChainId: 149,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Operates best when everyone else has logged off.\",\n },\n {\n id: 303,\n name: \"Mawile\",\n types: [\"Steel\", \"Fairy\"],\n baseStats: { hp: 50, attack: 85, defense: 85, speed: 50, special: 55 },\n expGroup: \"fast\",\n evolutionChainId: 150,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Tempered by years of production hardening.\",\n },\n {\n id: 304,\n name: \"Aron\",\n types: [\"Steel\", \"Rock\"],\n baseStats: { hp: 50, attack: 70, defense: 100, speed: 30, special: 40 },\n expGroup: \"slow\",\n evolutionChainId: 151,\n rarity: \"common\",\n catchRate: 180,\n description: \"Builds infrastructure that withstands any load.\",\n },\n {\n id: 305,\n name: \"Lairon\",\n types: [\"Steel\", \"Rock\"],\n baseStats: { hp: 60, attack: 90, defense: 140, speed: 40, special: 50 },\n expGroup: \"slow\",\n evolutionChainId: 151,\n rarity: \"uncommon\",\n catchRate: 90,\n description: \"Forges bulletproof APIs that never break.\",\n },\n {\n id: 306,\n name: \"Aggron\",\n types: [\"Steel\", \"Rock\"],\n baseStats: { hp: 70, attack: 110, defense: 180, speed: 50, special: 60 },\n expGroup: \"slow\",\n evolutionChainId: 151,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Its type system is as rigid as steel.\",\n },\n {\n id: 307,\n name: \"Meditite\",\n types: [\"Fighting\", \"Psychic\"],\n baseStats: { hp: 30, attack: 40, defense: 55, speed: 60, special: 55 },\n expGroup: \"medium_fast\",\n evolutionChainId: 152,\n rarity: \"common\",\n catchRate: 180,\n description: \"Fights through technical debt with determination.\",\n },\n {\n id: 308,\n name: \"Medicham\",\n types: [\"Fighting\", \"Psychic\"],\n baseStats: { hp: 60, attack: 60, defense: 75, speed: 80, special: 75 },\n expGroup: \"medium_fast\",\n evolutionChainId: 152,\n rarity: \"uncommon\",\n catchRate: 90,\n description: \"Its PR reviews pack a punch.\",\n },\n {\n id: 309,\n name: \"Electrike\",\n types: [\"Electric\"],\n baseStats: { hp: 40, attack: 45, defense: 40, speed: 65, special: 65 },\n expGroup: \"slow\",\n evolutionChainId: 153,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Powers through async operations effortlessly.\",\n },\n {\n id: 310,\n name: \"Manectric\",\n types: [\"Electric\"],\n baseStats: { hp: 70, attack: 75, defense: 60, speed: 105, special: 105 },\n expGroup: \"slow\",\n evolutionChainId: 153,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Charges up the team with electrifying demos.\",\n },\n {\n id: 311,\n name: \"Plusle\",\n types: [\"Electric\"],\n baseStats: { hp: 60, attack: 50, defense: 40, speed: 95, special: 85 },\n expGroup: \"medium_fast\",\n evolutionChainId: 154,\n rarity: \"common\",\n catchRate: 200,\n description: \"Charges up the team with electrifying demos.\",\n },\n {\n id: 312,\n name: \"Minun\",\n types: [\"Electric\"],\n baseStats: { hp: 60, attack: 40, defense: 50, speed: 95, special: 85 },\n expGroup: \"medium_fast\",\n evolutionChainId: 155,\n rarity: \"common\",\n catchRate: 200,\n description: \"Lightning-fast response times in production.\",\n },\n {\n id: 313,\n name: \"Volbeat\",\n types: [\"Bug\"],\n baseStats: { hp: 65, attack: 73, defense: 75, speed: 85, special: 85 },\n expGroup: \"fast\",\n evolutionChainId: 156,\n rarity: \"common\",\n catchRate: 150,\n description: \"Surprisingly powerful despite its small size.\",\n },\n {\n id: 314,\n name: \"Illumise\",\n types: [\"Bug\"],\n baseStats: { hp: 65, attack: 47, defense: 75, speed: 85, special: 85 },\n expGroup: \"slow\",\n evolutionChainId: 157,\n rarity: \"common\",\n catchRate: 150,\n description: \"Finds bugs nobody else can spot.\",\n },\n {\n id: 315,\n name: \"Roselia\",\n types: [\"Grass\", \"Poison\"],\n baseStats: { hp: 50, attack: 60, defense: 45, speed: 65, special: 100 },\n expGroup: \"medium_slow\",\n evolutionChainId: 158,\n rarity: \"common\",\n catchRate: 150,\n description: \"Photosynthesizes coffee into clean code.\",\n },\n {\n id: 316,\n name: \"Gulpin\",\n types: [\"Poison\"],\n baseStats: { hp: 70, attack: 43, defense: 53, speed: 40, special: 53 },\n expGroup: \"slow\",\n evolutionChainId: 159,\n rarity: \"common\",\n catchRate: 225,\n description: \"Finds toxic code patterns and eliminates them.\",\n },\n {\n id: 317,\n name: \"Swalot\",\n types: [\"Poison\"],\n baseStats: { hp: 100, attack: 73, defense: 83, speed: 55, special: 83 },\n expGroup: \"slow\",\n evolutionChainId: 159,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Detoxifies spaghetti code into clean modules.\",\n },\n {\n id: 318,\n name: \"Carvanha\",\n types: [\"Water\", \"Dark\"],\n baseStats: { hp: 45, attack: 90, defense: 20, speed: 65, special: 65 },\n expGroup: \"slow\",\n evolutionChainId: 160,\n rarity: \"common\",\n catchRate: 225,\n description: \"Handles backpressure like a pro.\",\n },\n {\n id: 319,\n name: \"Sharpedo\",\n types: [\"Water\", \"Dark\"],\n baseStats: { hp: 70, attack: 120, defense: 40, speed: 95, special: 95 },\n expGroup: \"slow\",\n evolutionChainId: 160,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"Cools down heated production incidents.\",\n },\n {\n id: 320,\n name: \"Wailmer\",\n types: [\"Water\"],\n baseStats: { hp: 130, attack: 70, defense: 35, speed: 60, special: 70 },\n expGroup: \"slow\",\n evolutionChainId: 161,\n rarity: \"uncommon\",\n catchRate: 125,\n description: \"Its code flows naturally from function to function.\",\n },\n {\n id: 321,\n name: \"Wailord\",\n types: [\"Water\"],\n baseStats: { hp: 170, attack: 90, defense: 45, speed: 60, special: 90 },\n expGroup: \"slow\",\n evolutionChainId: 161,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"Streams data like a well-configured message queue.\",\n },\n {\n id: 322,\n name: \"Numel\",\n types: [\"Fire\", \"Ground\"],\n baseStats: { hp: 60, attack: 60, defense: 40, speed: 35, special: 65 },\n expGroup: \"medium_fast\",\n evolutionChainId: 162,\n rarity: \"common\",\n catchRate: 255,\n description: \"Burns through bugs with blazing speed.\",\n },\n {\n id: 323,\n name: \"Camerupt\",\n types: [\"Fire\", \"Ground\"],\n baseStats: { hp: 70, attack: 100, defense: 70, speed: 40, special: 105 },\n expGroup: \"medium_fast\",\n evolutionChainId: 162,\n rarity: \"common\",\n catchRate: 150,\n description: \"Compiles so fast the CPU starts sweating.\",\n },\n {\n id: 324,\n name: \"Torkoal\",\n types: [\"Fire\"],\n baseStats: { hp: 70, attack: 85, defense: 140, speed: 20, special: 85 },\n expGroup: \"medium_fast\",\n evolutionChainId: 163,\n rarity: \"uncommon\",\n catchRate: 90,\n description: \"Burns through bugs with blazing speed.\",\n },\n {\n id: 325,\n name: \"Spoink\",\n types: [\"Psychic\"],\n baseStats: { hp: 60, attack: 25, defense: 35, speed: 60, special: 80 },\n expGroup: \"fast\",\n evolutionChainId: 164,\n rarity: \"common\",\n catchRate: 255,\n description: \"Predicts bugs before they even appear in code.\",\n },\n {\n id: 326,\n name: \"Grumpig\",\n types: [\"Psychic\"],\n baseStats: { hp: 80, attack: 45, defense: 65, speed: 80, special: 110 },\n expGroup: \"fast\",\n evolutionChainId: 164,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"Reads stack traces like reading minds.\",\n },\n {\n id: 327,\n name: \"Spinda\",\n types: [\"Normal\"],\n baseStats: { hp: 60, attack: 60, defense: 60, speed: 60, special: 60 },\n expGroup: \"fast\",\n evolutionChainId: 165,\n rarity: \"common\",\n catchRate: 255,\n description: \"Solid fundamentals, no unnecessary complexity.\",\n },\n {\n id: 328,\n name: \"Trapinch\",\n types: [\"Ground\"],\n baseStats: { hp: 45, attack: 100, defense: 45, speed: 10, special: 45 },\n expGroup: \"medium_slow\",\n evolutionChainId: 166,\n rarity: \"common\",\n catchRate: 255,\n description: \"Builds rock-solid foundations for any project.\",\n },\n {\n id: 329,\n name: \"Vibrava\",\n types: [\"Ground\", \"Dragon\"],\n baseStats: { hp: 50, attack: 70, defense: 50, speed: 70, special: 50 },\n expGroup: \"medium_slow\",\n evolutionChainId: 166,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Stable as the earth beneath your server rack.\",\n },\n {\n id: 330,\n name: \"Flygon\",\n types: [\"Ground\", \"Dragon\"],\n baseStats: { hp: 80, attack: 100, defense: 80, speed: 100, special: 80 },\n expGroup: \"medium_slow\",\n evolutionChainId: 166,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Builds rock-solid foundations for any project.\",\n },\n {\n id: 331,\n name: \"Cacnea\",\n types: [\"Grass\"],\n baseStats: { hp: 50, attack: 85, defense: 40, speed: 35, special: 85 },\n expGroup: \"medium_slow\",\n evolutionChainId: 167,\n rarity: \"common\",\n catchRate: 190,\n description: \"Grows features organically from a solid foundation.\",\n },\n {\n id: 332,\n name: \"Cacturne\",\n types: [\"Grass\", \"Dark\"],\n baseStats: { hp: 70, attack: 115, defense: 60, speed: 55, special: 115 },\n expGroup: \"medium_slow\",\n evolutionChainId: 167,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"Plants the seeds for sustainable architecture.\",\n },\n {\n id: 333,\n name: \"Swablu\",\n types: [\"Normal\", \"Flying\"],\n baseStats: { hp: 45, attack: 40, defense: 60, speed: 50, special: 75 },\n expGroup: \"fast\",\n evolutionChainId: 168,\n rarity: \"common\",\n catchRate: 255,\n description: \"Keeps things simple and maintainable.\",\n },\n {\n id: 334,\n name: \"Altaria\",\n types: [\"Dragon\", \"Flying\"],\n baseStats: { hp: 75, attack: 70, defense: 90, speed: 80, special: 105 },\n expGroup: \"fast\",\n evolutionChainId: 168,\n rarity: \"rare\",\n catchRate: 45,\n description: \"A rare sight, but unstoppable when deployed.\",\n },\n {\n id: 335,\n name: \"Zangoose\",\n types: [\"Normal\"],\n baseStats: { hp: 73, attack: 115, defense: 60, speed: 90, special: 60 },\n expGroup: \"fast\",\n evolutionChainId: 169,\n rarity: \"uncommon\",\n catchRate: 90,\n description: \"The everyday workhorse of any development team.\",\n },\n {\n id: 336,\n name: \"Seviper\",\n types: [\"Poison\"],\n baseStats: { hp: 73, attack: 100, defense: 60, speed: 65, special: 100 },\n expGroup: \"slow\",\n evolutionChainId: 170,\n rarity: \"uncommon\",\n catchRate: 90,\n description: \"Knows every anti-pattern by heart.\",\n },\n {\n id: 337,\n name: \"Lunatone\",\n types: [\"Rock\", \"Psychic\"],\n baseStats: { hp: 90, attack: 55, defense: 65, speed: 70, special: 95 },\n expGroup: \"fast\",\n evolutionChainId: 171,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Solid as a load-bearing wall in the architecture.\",\n },\n {\n id: 338,\n name: \"Solrock\",\n types: [\"Rock\", \"Psychic\"],\n baseStats: { hp: 90, attack: 95, defense: 85, speed: 70, special: 65 },\n expGroup: \"fast\",\n evolutionChainId: 172,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Its code is hardened against every attack vector.\",\n },\n {\n id: 339,\n name: \"Barboach\",\n types: [\"Water\", \"Ground\"],\n baseStats: { hp: 50, attack: 48, defense: 43, speed: 60, special: 46 },\n expGroup: \"medium_fast\",\n evolutionChainId: 173,\n rarity: \"common\",\n catchRate: 190,\n description: \"Handles backpressure like a pro.\",\n },\n {\n id: 340,\n name: \"Whiscash\",\n types: [\"Water\", \"Ground\"],\n baseStats: { hp: 110, attack: 78, defense: 73, speed: 60, special: 76 },\n expGroup: \"medium_fast\",\n evolutionChainId: 173,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Its code flows naturally from function to function.\",\n },\n {\n id: 341,\n name: \"Corphish\",\n types: [\"Water\"],\n baseStats: { hp: 43, attack: 80, defense: 65, speed: 35, special: 50 },\n expGroup: \"slow\",\n evolutionChainId: 174,\n rarity: \"common\",\n catchRate: 205,\n description: \"Flows through complex data pipelines with ease.\",\n },\n {\n id: 342,\n name: \"Crawdaunt\",\n types: [\"Water\", \"Dark\"],\n baseStats: { hp: 63, attack: 120, defense: 85, speed: 55, special: 90 },\n expGroup: \"slow\",\n evolutionChainId: 174,\n rarity: \"common\",\n catchRate: 155,\n description: \"Handles backpressure like a pro.\",\n },\n {\n id: 343,\n name: \"Baltoy\",\n types: [\"Ground\", \"Psychic\"],\n baseStats: { hp: 40, attack: 40, defense: 55, speed: 55, special: 70 },\n expGroup: \"medium_fast\",\n evolutionChainId: 175,\n rarity: \"common\",\n catchRate: 255,\n description: \"Stable as the earth beneath your server rack.\",\n },\n {\n id: 344,\n name: \"Claydol\",\n types: [\"Ground\", \"Psychic\"],\n baseStats: { hp: 60, attack: 70, defense: 105, speed: 75, special: 120 },\n expGroup: \"medium_fast\",\n evolutionChainId: 175,\n rarity: \"uncommon\",\n catchRate: 90,\n description: \"Lays the groundwork for scalable systems.\",\n },\n {\n id: 345,\n name: \"Lileep\",\n types: [\"Rock\", \"Grass\"],\n baseStats: { hp: 66, attack: 41, defense: 77, speed: 23, special: 87 },\n expGroup: \"fast\",\n evolutionChainId: 176,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Builds unbreakable infrastructure that lasts.\",\n },\n {\n id: 346,\n name: \"Cradily\",\n types: [\"Rock\", \"Grass\"],\n baseStats: { hp: 86, attack: 81, defense: 97, speed: 43, special: 107 },\n expGroup: \"fast\",\n evolutionChainId: 176,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Its code is hardened against every attack vector.\",\n },\n {\n id: 347,\n name: \"Anorith\",\n types: [\"Rock\", \"Bug\"],\n baseStats: { hp: 45, attack: 95, defense: 50, speed: 75, special: 50 },\n expGroup: \"fast\",\n evolutionChainId: 177,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Dependable like bedrock under your deployment.\",\n },\n {\n id: 348,\n name: \"Armaldo\",\n types: [\"Rock\", \"Bug\"],\n baseStats: { hp: 75, attack: 125, defense: 100, speed: 45, special: 80 },\n expGroup: \"fast\",\n evolutionChainId: 177,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Its code is hardened against every attack vector.\",\n },\n {\n id: 349,\n name: \"Feebas\",\n types: [\"Water\"],\n baseStats: { hp: 20, attack: 15, defense: 20, speed: 80, special: 55 },\n expGroup: \"fast\",\n evolutionChainId: 178,\n rarity: \"common\",\n catchRate: 255,\n description: \"Handles backpressure like a pro.\",\n },\n {\n id: 350,\n name: \"Milotic\",\n types: [\"Water\"],\n baseStats: { hp: 95, attack: 60, defense: 79, speed: 81, special: 125 },\n expGroup: \"fast\",\n evolutionChainId: 178,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"Its code flows naturally from function to function.\",\n },\n {\n id: 351,\n name: \"Castform\",\n types: [\"Normal\"],\n baseStats: { hp: 70, attack: 70, defense: 70, speed: 70, special: 70 },\n expGroup: \"medium_fast\",\n evolutionChainId: 179,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Solid fundamentals, no unnecessary complexity.\",\n },\n {\n id: 352,\n name: \"Kecleon\",\n types: [\"Normal\"],\n baseStats: { hp: 60, attack: 90, defense: 70, speed: 40, special: 120 },\n expGroup: \"medium_slow\",\n evolutionChainId: 180,\n rarity: \"common\",\n catchRate: 200,\n description: \"Solid fundamentals, no unnecessary complexity.\",\n },\n {\n id: 353,\n name: \"Shuppet\",\n types: [\"Ghost\"],\n baseStats: { hp: 44, attack: 75, defense: 35, speed: 45, special: 63 },\n expGroup: \"fast\",\n evolutionChainId: 181,\n rarity: \"common\",\n catchRate: 225,\n description: \"Its code is invisible until you need it most.\",\n },\n {\n id: 354,\n name: \"Banette\",\n types: [\"Ghost\"],\n baseStats: { hp: 64, attack: 115, defense: 65, speed: 65, special: 83 },\n expGroup: \"fast\",\n evolutionChainId: 181,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Its code is invisible until you need it most.\",\n },\n {\n id: 355,\n name: \"Duskull\",\n types: [\"Ghost\"],\n baseStats: { hp: 20, attack: 40, defense: 90, speed: 25, special: 90 },\n expGroup: \"fast\",\n evolutionChainId: 182,\n rarity: \"common\",\n catchRate: 190,\n description: \"Its code is invisible until you need it most.\",\n },\n {\n id: 356,\n name: \"Dusclops\",\n types: [\"Ghost\"],\n baseStats: { hp: 40, attack: 70, defense: 130, speed: 25, special: 130 },\n expGroup: \"fast\",\n evolutionChainId: 182,\n rarity: \"uncommon\",\n catchRate: 90,\n description: \"Debugs phantom issues in production at 3 AM.\",\n },\n {\n id: 357,\n name: \"Tropius\",\n types: [\"Grass\", \"Flying\"],\n baseStats: { hp: 99, attack: 68, defense: 83, speed: 51, special: 87 },\n expGroup: \"slow\",\n evolutionChainId: 183,\n rarity: \"common\",\n catchRate: 200,\n description: \"Branches out into new features with natural ease.\",\n },\n {\n id: 358,\n name: \"Chimecho\",\n types: [\"Psychic\"],\n baseStats: { hp: 75, attack: 50, defense: 80, speed: 65, special: 95 },\n expGroup: \"fast\",\n evolutionChainId: 184,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Debugs production issues through pure intuition.\",\n },\n {\n id: 359,\n name: \"Absol\",\n types: [\"Dark\"],\n baseStats: { hp: 65, attack: 130, defense: 60, speed: 75, special: 75 },\n expGroup: \"medium_slow\",\n evolutionChainId: 185,\n rarity: \"rare\",\n catchRate: 30,\n description: \"Masters the dark arts of regex and bitwise ops.\",\n },\n {\n id: 360,\n name: \"Wynaut\",\n types: [\"Psychic\"],\n baseStats: { hp: 95, attack: 23, defense: 48, speed: 23, special: 48 },\n expGroup: \"medium_fast\",\n evolutionChainId: 100,\n rarity: \"uncommon\",\n catchRate: 125,\n description: \"Reads stack traces like reading minds.\",\n },\n {\n id: 361,\n name: \"Snorunt\",\n types: [\"Ice\"],\n baseStats: { hp: 50, attack: 50, defense: 50, speed: 50, special: 50 },\n expGroup: \"medium_fast\",\n evolutionChainId: 186,\n rarity: \"common\",\n catchRate: 190,\n description: \"Crystallizes complex requirements into clear specs.\",\n },\n {\n id: 362,\n name: \"Glalie\",\n types: [\"Ice\"],\n baseStats: { hp: 80, attack: 80, defense: 80, speed: 80, special: 80 },\n expGroup: \"medium_fast\",\n evolutionChainId: 186,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Crystallizes complex requirements into clear specs.\",\n },\n {\n id: 363,\n name: \"Spheal\",\n types: [\"Ice\", \"Water\"],\n baseStats: { hp: 70, attack: 40, defense: 50, speed: 25, special: 55 },\n expGroup: \"medium_slow\",\n evolutionChainId: 187,\n rarity: \"common\",\n catchRate: 255,\n description: \"Crystallizes complex requirements into clear specs.\",\n },\n {\n id: 364,\n name: \"Sealeo\",\n types: [\"Ice\", \"Water\"],\n baseStats: { hp: 90, attack: 60, defense: 70, speed: 45, special: 75 },\n expGroup: \"medium_slow\",\n evolutionChainId: 187,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Preserves backward compatibility like a glacier.\",\n },\n {\n id: 365,\n name: \"Walrein\",\n types: [\"Ice\", \"Water\"],\n baseStats: { hp: 110, attack: 80, defense: 90, speed: 65, special: 95 },\n expGroup: \"medium_slow\",\n evolutionChainId: 187,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Preserves backward compatibility like a glacier.\",\n },\n {\n id: 366,\n name: \"Clamperl\",\n types: [\"Water\"],\n baseStats: { hp: 35, attack: 64, defense: 85, speed: 32, special: 74 },\n expGroup: \"fast\",\n evolutionChainId: 188,\n rarity: \"common\",\n catchRate: 255,\n description: \"Cools down heated production incidents.\",\n },\n {\n id: 367,\n name: \"Huntail\",\n types: [\"Water\"],\n baseStats: { hp: 55, attack: 104, defense: 105, speed: 52, special: 94 },\n expGroup: \"fast\",\n evolutionChainId: 188,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"Its code flows naturally from function to function.\",\n },\n {\n id: 368,\n name: \"Gorebyss\",\n types: [\"Water\"],\n baseStats: { hp: 55, attack: 84, defense: 105, speed: 52, special: 114 },\n expGroup: \"fast\",\n evolutionChainId: 188,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"Flows through complex data pipelines with ease.\",\n },\n {\n id: 369,\n name: \"Relicanth\",\n types: [\"Water\", \"Rock\"],\n baseStats: { hp: 100, attack: 90, defense: 130, speed: 55, special: 65 },\n expGroup: \"slow\",\n evolutionChainId: 189,\n rarity: \"rare\",\n catchRate: 25,\n description: \"Streams data like a well-configured message queue.\",\n },\n {\n id: 370,\n name: \"Luvdisc\",\n types: [\"Water\"],\n baseStats: { hp: 43, attack: 30, defense: 55, speed: 97, special: 65 },\n expGroup: \"fast\",\n evolutionChainId: 190,\n rarity: \"common\",\n catchRate: 225,\n description: \"Flows through complex data pipelines with ease.\",\n },\n {\n id: 371,\n name: \"Bagon\",\n types: [\"Dragon\"],\n baseStats: { hp: 45, attack: 75, defense: 60, speed: 50, special: 40 },\n expGroup: \"slow\",\n evolutionChainId: 191,\n rarity: \"rare\",\n catchRate: 45,\n description: \"A rare sight, but unstoppable when deployed.\",\n },\n {\n id: 372,\n name: \"Shelgon\",\n types: [\"Dragon\"],\n baseStats: { hp: 65, attack: 95, defense: 100, speed: 50, special: 60 },\n expGroup: \"slow\",\n evolutionChainId: 191,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Hoards knowledge of ancient APIs and protocols.\",\n },\n {\n id: 373,\n name: \"Salamence\",\n types: [\"Dragon\", \"Flying\"],\n baseStats: { hp: 95, attack: 135, defense: 80, speed: 100, special: 110 },\n expGroup: \"slow\",\n evolutionChainId: 191,\n rarity: \"rare\",\n catchRate: 45,\n description: \"A rare sight, but unstoppable when deployed.\",\n },\n {\n id: 374,\n name: \"Beldum\",\n types: [\"Steel\", \"Psychic\"],\n baseStats: { hp: 40, attack: 55, defense: 80, speed: 30, special: 60 },\n expGroup: \"slow\",\n evolutionChainId: 192,\n rarity: \"rare\",\n catchRate: 3,\n description: \"Tempered by years of production hardening.\",\n },\n {\n id: 375,\n name: \"Metang\",\n types: [\"Steel\", \"Psychic\"],\n baseStats: { hp: 60, attack: 75, defense: 100, speed: 50, special: 80 },\n expGroup: \"slow\",\n evolutionChainId: 192,\n rarity: \"rare\",\n catchRate: 3,\n description: \"Tempered by years of production hardening.\",\n },\n {\n id: 376,\n name: \"Metagross\",\n types: [\"Steel\", \"Psychic\"],\n baseStats: { hp: 80, attack: 135, defense: 130, speed: 70, special: 95 },\n expGroup: \"slow\",\n evolutionChainId: 192,\n rarity: \"rare\",\n catchRate: 3,\n description: \"Forges bulletproof APIs that never break.\",\n },\n {\n id: 377,\n name: \"Regirock\",\n types: [\"Rock\"],\n baseStats: { hp: 80, attack: 100, defense: 200, speed: 50, special: 100 },\n expGroup: \"slow\",\n evolutionChainId: 193,\n rarity: \"legendary\",\n catchRate: 3,\n description: \"Dependable like bedrock under your deployment.\",\n },\n {\n id: 378,\n name: \"Regice\",\n types: [\"Ice\"],\n baseStats: { hp: 80, attack: 50, defense: 100, speed: 50, special: 200 },\n expGroup: \"slow\",\n evolutionChainId: 194,\n rarity: \"legendary\",\n catchRate: 3,\n description: \"Preserves backward compatibility like a glacier.\",\n },\n {\n id: 379,\n name: \"Registeel\",\n types: [\"Steel\"],\n baseStats: { hp: 80, attack: 75, defense: 150, speed: 50, special: 150 },\n expGroup: \"slow\",\n evolutionChainId: 195,\n rarity: \"legendary\",\n catchRate: 3,\n description: \"Tempered by years of production hardening.\",\n },\n {\n id: 380,\n name: \"Latias\",\n types: [\"Dragon\", \"Psychic\"],\n baseStats: { hp: 80, attack: 80, defense: 90, speed: 110, special: 130 },\n expGroup: \"slow\",\n evolutionChainId: 196,\n rarity: \"legendary\",\n catchRate: 3,\n description: \"Commands massive distributed systems with authority.\",\n },\n {\n id: 381,\n name: \"Latios\",\n types: [\"Dragon\", \"Psychic\"],\n baseStats: { hp: 80, attack: 90, defense: 80, speed: 110, special: 130 },\n expGroup: \"slow\",\n evolutionChainId: 197,\n rarity: \"legendary\",\n catchRate: 3,\n description: \"A rare sight, but unstoppable when deployed.\",\n },\n {\n id: 382,\n name: \"Kyogre\",\n types: [\"Water\"],\n baseStats: { hp: 100, attack: 100, defense: 90, speed: 90, special: 150 },\n expGroup: \"slow\",\n evolutionChainId: 198,\n rarity: \"legendary\",\n catchRate: 3,\n description: \"Flows through complex data pipelines with ease.\",\n },\n {\n id: 383,\n name: \"Groudon\",\n types: [\"Ground\"],\n baseStats: { hp: 100, attack: 150, defense: 140, speed: 90, special: 100 },\n expGroup: \"slow\",\n evolutionChainId: 199,\n rarity: \"legendary\",\n catchRate: 3,\n description: \"Stable as the earth beneath your server rack.\",\n },\n {\n id: 384,\n name: \"Rayquaza\",\n types: [\"Dragon\", \"Flying\"],\n baseStats: { hp: 105, attack: 150, defense: 90, speed: 95, special: 150 },\n expGroup: \"slow\",\n evolutionChainId: 200,\n rarity: \"legendary\",\n catchRate: 45,\n description: \"Breathes fire into stale, unmaintained projects.\",\n },\n {\n id: 385,\n name: \"Jirachi\",\n types: [\"Steel\", \"Psychic\"],\n baseStats: { hp: 100, attack: 100, defense: 100, speed: 100, special: 100 },\n expGroup: \"slow\",\n evolutionChainId: 201,\n rarity: \"mythical\",\n catchRate: 3,\n description: \"Forges bulletproof APIs that never break.\",\n },\n {\n id: 386,\n name: \"Deoxys-Normal\",\n types: [\"Psychic\"],\n baseStats: { hp: 50, attack: 150, defense: 50, speed: 150, special: 150 },\n expGroup: \"slow\",\n evolutionChainId: 202,\n rarity: \"mythical\",\n catchRate: 3,\n description: \"Debugs production issues through pure intuition.\",\n },\n\n // \u2500\u2500 Gen 4 \u2014 Sinnoh (#387\u2013#493) \u2500\u2500\n {\n id: 387,\n name: \"Turtwig\",\n types: [\"Grass\"],\n baseStats: { hp: 55, attack: 68, defense: 64, speed: 31, special: 55 },\n expGroup: \"medium_slow\",\n evolutionChainId: 203,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Plants the seeds for sustainable architecture.\",\n },\n {\n id: 388,\n name: \"Grotle\",\n types: [\"Grass\"],\n baseStats: { hp: 75, attack: 89, defense: 85, speed: 36, special: 65 },\n expGroup: \"medium_slow\",\n evolutionChainId: 203,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Photosynthesizes coffee into clean code.\",\n },\n {\n id: 389,\n name: \"Torterra\",\n types: [\"Grass\", \"Ground\"],\n baseStats: { hp: 95, attack: 109, defense: 105, speed: 56, special: 85 },\n expGroup: \"medium_slow\",\n evolutionChainId: 203,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Its codebase flourishes with careful nurturing.\",\n },\n {\n id: 390,\n name: \"Chimchar\",\n types: [\"Fire\"],\n baseStats: { hp: 44, attack: 58, defense: 44, speed: 61, special: 58 },\n expGroup: \"medium_slow\",\n evolutionChainId: 204,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Compiles so fast the CPU starts sweating.\",\n },\n {\n id: 391,\n name: \"Monferno\",\n types: [\"Fire\", \"Fighting\"],\n baseStats: { hp: 64, attack: 78, defense: 52, speed: 81, special: 78 },\n expGroup: \"medium_slow\",\n evolutionChainId: 204,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Burns through bugs with blazing speed.\",\n },\n {\n id: 392,\n name: \"Infernape\",\n types: [\"Fire\", \"Fighting\"],\n baseStats: { hp: 76, attack: 104, defense: 71, speed: 108, special: 104 },\n expGroup: \"medium_slow\",\n evolutionChainId: 204,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Compiles so fast the CPU starts sweating.\",\n },\n {\n id: 393,\n name: \"Piplup\",\n types: [\"Water\"],\n baseStats: { hp: 53, attack: 51, defense: 53, speed: 40, special: 61 },\n expGroup: \"medium_slow\",\n evolutionChainId: 205,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Cools down heated production incidents.\",\n },\n {\n id: 394,\n name: \"Prinplup\",\n types: [\"Water\"],\n baseStats: { hp: 64, attack: 66, defense: 68, speed: 50, special: 81 },\n expGroup: \"medium_slow\",\n evolutionChainId: 205,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Its code flows naturally from function to function.\",\n },\n {\n id: 395,\n name: \"Empoleon\",\n types: [\"Water\", \"Steel\"],\n baseStats: { hp: 84, attack: 86, defense: 88, speed: 60, special: 111 },\n expGroup: \"medium_slow\",\n evolutionChainId: 205,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Flows through complex data pipelines with ease.\",\n },\n {\n id: 396,\n name: \"Starly\",\n types: [\"Normal\", \"Flying\"],\n baseStats: { hp: 40, attack: 55, defense: 30, speed: 60, special: 30 },\n expGroup: \"medium_slow\",\n evolutionChainId: 206,\n rarity: \"common\",\n catchRate: 255,\n description: \"The everyday workhorse of any development team.\",\n },\n {\n id: 397,\n name: \"Staravia\",\n types: [\"Normal\", \"Flying\"],\n baseStats: { hp: 55, attack: 75, defense: 50, speed: 80, special: 40 },\n expGroup: \"medium_slow\",\n evolutionChainId: 206,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Solid fundamentals, no unnecessary complexity.\",\n },\n {\n id: 398,\n name: \"Staraptor\",\n types: [\"Normal\", \"Flying\"],\n baseStats: { hp: 85, attack: 120, defense: 70, speed: 100, special: 60 },\n expGroup: \"medium_slow\",\n evolutionChainId: 206,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Writes clean, readable code that just works.\",\n },\n {\n id: 399,\n name: \"Bidoof\",\n types: [\"Normal\"],\n baseStats: { hp: 59, attack: 45, defense: 40, speed: 31, special: 40 },\n expGroup: \"medium_fast\",\n evolutionChainId: 207,\n rarity: \"common\",\n catchRate: 255,\n description: \"The everyday workhorse of any development team.\",\n },\n {\n id: 400,\n name: \"Bibarel\",\n types: [\"Normal\", \"Water\"],\n baseStats: { hp: 79, attack: 85, defense: 60, speed: 71, special: 60 },\n expGroup: \"medium_fast\",\n evolutionChainId: 207,\n rarity: \"uncommon\",\n catchRate: 127,\n description: \"Keeps things simple and maintainable.\",\n },\n {\n id: 401,\n name: \"Kricketot\",\n types: [\"Bug\"],\n baseStats: { hp: 37, attack: 25, defense: 41, speed: 25, special: 41 },\n expGroup: \"medium_slow\",\n evolutionChainId: 208,\n rarity: \"common\",\n catchRate: 255,\n description: \"Crawls through every edge case methodically.\",\n },\n {\n id: 402,\n name: \"Kricketune\",\n types: [\"Bug\"],\n baseStats: { hp: 77, attack: 85, defense: 51, speed: 65, special: 55 },\n expGroup: \"medium_slow\",\n evolutionChainId: 208,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Metamorphoses codebases through careful refactoring.\",\n },\n {\n id: 403,\n name: \"Shinx\",\n types: [\"Electric\"],\n baseStats: { hp: 45, attack: 65, defense: 34, speed: 45, special: 40 },\n expGroup: \"medium_slow\",\n evolutionChainId: 209,\n rarity: \"common\",\n catchRate: 235,\n description: \"Its event loop never blocks.\",\n },\n {\n id: 404,\n name: \"Luxio\",\n types: [\"Electric\"],\n baseStats: { hp: 60, attack: 85, defense: 49, speed: 60, special: 60 },\n expGroup: \"medium_slow\",\n evolutionChainId: 209,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Its event loop never blocks.\",\n },\n {\n id: 405,\n name: \"Luxray\",\n types: [\"Electric\"],\n baseStats: { hp: 80, attack: 120, defense: 79, speed: 70, special: 95 },\n expGroup: \"medium_slow\",\n evolutionChainId: 209,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Sparks innovation with every commit.\",\n },\n {\n id: 406,\n name: \"Budew\",\n types: [\"Grass\", \"Poison\"],\n baseStats: { hp: 40, attack: 30, defense: 35, speed: 55, special: 70 },\n expGroup: \"medium_slow\",\n evolutionChainId: 158,\n rarity: \"common\",\n catchRate: 255,\n description: \"Its codebase flourishes with careful nurturing.\",\n },\n {\n id: 407,\n name: \"Roserade\",\n types: [\"Grass\", \"Poison\"],\n baseStats: { hp: 60, attack: 70, defense: 65, speed: 90, special: 125 },\n expGroup: \"medium_slow\",\n evolutionChainId: 158,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Branches out into new features with natural ease.\",\n },\n {\n id: 408,\n name: \"Cranidos\",\n types: [\"Rock\"],\n baseStats: { hp: 67, attack: 125, defense: 40, speed: 58, special: 30 },\n expGroup: \"fast\",\n evolutionChainId: 211,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Withstands the heaviest traffic spikes.\",\n },\n {\n id: 409,\n name: \"Rampardos\",\n types: [\"Rock\"],\n baseStats: { hp: 97, attack: 165, defense: 60, speed: 58, special: 65 },\n expGroup: \"fast\",\n evolutionChainId: 211,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Withstands the heaviest traffic spikes.\",\n },\n {\n id: 410,\n name: \"Shieldon\",\n types: [\"Rock\", \"Steel\"],\n baseStats: { hp: 30, attack: 42, defense: 118, speed: 30, special: 88 },\n expGroup: \"fast\",\n evolutionChainId: 212,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Withstands the heaviest traffic spikes.\",\n },\n {\n id: 411,\n name: \"Bastiodon\",\n types: [\"Rock\", \"Steel\"],\n baseStats: { hp: 60, attack: 52, defense: 168, speed: 30, special: 138 },\n expGroup: \"fast\",\n evolutionChainId: 212,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Dependable like bedrock under your deployment.\",\n },\n {\n id: 412,\n name: \"Burmy\",\n types: [\"Bug\"],\n baseStats: { hp: 40, attack: 29, defense: 45, speed: 36, special: 45 },\n expGroup: \"medium_fast\",\n evolutionChainId: 213,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Surprisingly powerful despite its small size.\",\n },\n {\n id: 413,\n name: \"Wormadam-Plant\",\n types: [\"Bug\", \"Grass\"],\n baseStats: { hp: 60, attack: 59, defense: 85, speed: 36, special: 105 },\n expGroup: \"medium_fast\",\n evolutionChainId: 213,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Crawls through every edge case methodically.\",\n },\n {\n id: 414,\n name: \"Mothim\",\n types: [\"Bug\", \"Flying\"],\n baseStats: { hp: 70, attack: 94, defense: 50, speed: 66, special: 94 },\n expGroup: \"medium_fast\",\n evolutionChainId: 213,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Metamorphoses codebases through careful refactoring.\",\n },\n {\n id: 415,\n name: \"Combee\",\n types: [\"Bug\", \"Flying\"],\n baseStats: { hp: 30, attack: 30, defense: 42, speed: 70, special: 42 },\n expGroup: \"medium_slow\",\n evolutionChainId: 214,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Its test coverage is thorough and persistent.\",\n },\n {\n id: 416,\n name: \"Vespiquen\",\n types: [\"Bug\", \"Flying\"],\n baseStats: { hp: 70, attack: 80, defense: 102, speed: 40, special: 102 },\n expGroup: \"medium_slow\",\n evolutionChainId: 214,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Crawls through every edge case methodically.\",\n },\n {\n id: 417,\n name: \"Pachirisu\",\n types: [\"Electric\"],\n baseStats: { hp: 60, attack: 45, defense: 70, speed: 95, special: 90 },\n expGroup: \"medium_fast\",\n evolutionChainId: 215,\n rarity: \"common\",\n catchRate: 200,\n description: \"Lightning-fast response times in production.\",\n },\n {\n id: 418,\n name: \"Buizel\",\n types: [\"Water\"],\n baseStats: { hp: 55, attack: 65, defense: 35, speed: 85, special: 60 },\n expGroup: \"medium_fast\",\n evolutionChainId: 216,\n rarity: \"common\",\n catchRate: 190,\n description: \"Streams data like a well-configured message queue.\",\n },\n {\n id: 419,\n name: \"Floatzel\",\n types: [\"Water\"],\n baseStats: { hp: 85, attack: 105, defense: 55, speed: 115, special: 85 },\n expGroup: \"medium_fast\",\n evolutionChainId: 216,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Handles backpressure like a pro.\",\n },\n {\n id: 420,\n name: \"Cherubi\",\n types: [\"Grass\"],\n baseStats: { hp: 45, attack: 35, defense: 45, speed: 35, special: 62 },\n expGroup: \"medium_fast\",\n evolutionChainId: 217,\n rarity: \"common\",\n catchRate: 190,\n description: \"Grows features organically from a solid foundation.\",\n },\n {\n id: 421,\n name: \"Cherrim\",\n types: [\"Grass\"],\n baseStats: { hp: 70, attack: 60, defense: 70, speed: 85, special: 87 },\n expGroup: \"medium_fast\",\n evolutionChainId: 217,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Branches out into new features with natural ease.\",\n },\n {\n id: 422,\n name: \"Shellos\",\n types: [\"Water\"],\n baseStats: { hp: 76, attack: 48, defense: 48, speed: 34, special: 62 },\n expGroup: \"medium_fast\",\n evolutionChainId: 218,\n rarity: \"common\",\n catchRate: 190,\n description: \"Handles backpressure like a pro.\",\n },\n {\n id: 423,\n name: \"Gastrodon\",\n types: [\"Water\", \"Ground\"],\n baseStats: { hp: 111, attack: 83, defense: 68, speed: 39, special: 92 },\n expGroup: \"medium_fast\",\n evolutionChainId: 218,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Its code flows naturally from function to function.\",\n },\n {\n id: 424,\n name: \"Ambipom\",\n types: [\"Normal\"],\n baseStats: { hp: 75, attack: 100, defense: 66, speed: 115, special: 66 },\n expGroup: \"fast\",\n evolutionChainId: 93,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Writes clean, readable code that just works.\",\n },\n {\n id: 425,\n name: \"Drifloon\",\n types: [\"Ghost\", \"Flying\"],\n baseStats: { hp: 90, attack: 50, defense: 34, speed: 70, special: 60 },\n expGroup: \"slow\",\n evolutionChainId: 219,\n rarity: \"uncommon\",\n catchRate: 125,\n description: \"Phases through firewalls during security audits.\",\n },\n {\n id: 426,\n name: \"Drifblim\",\n types: [\"Ghost\", \"Flying\"],\n baseStats: { hp: 150, attack: 80, defense: 44, speed: 80, special: 90 },\n expGroup: \"slow\",\n evolutionChainId: 219,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"Haunts legacy codebases seeking forgotten bugs.\",\n },\n {\n id: 427,\n name: \"Buneary\",\n types: [\"Normal\"],\n baseStats: { hp: 55, attack: 66, defense: 44, speed: 85, special: 56 },\n expGroup: \"medium_fast\",\n evolutionChainId: 220,\n rarity: \"common\",\n catchRate: 190,\n description: \"Keeps things simple and maintainable.\",\n },\n {\n id: 428,\n name: \"Lopunny\",\n types: [\"Normal\"],\n baseStats: { hp: 65, attack: 76, defense: 84, speed: 105, special: 96 },\n expGroup: \"medium_fast\",\n evolutionChainId: 220,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"The everyday workhorse of any development team.\",\n },\n {\n id: 429,\n name: \"Mismagius\",\n types: [\"Ghost\"],\n baseStats: { hp: 60, attack: 60, defense: 60, speed: 105, special: 105 },\n expGroup: \"fast\",\n evolutionChainId: 98,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Phases through firewalls during security audits.\",\n },\n {\n id: 430,\n name: \"Honchkrow\",\n types: [\"Dark\", \"Flying\"],\n baseStats: { hp: 100, attack: 125, defense: 52, speed: 71, special: 105 },\n expGroup: \"medium_slow\",\n evolutionChainId: 97,\n rarity: \"rare\",\n catchRate: 30,\n description: \"Operates best when everyone else has logged off.\",\n },\n {\n id: 431,\n name: \"Glameow\",\n types: [\"Normal\"],\n baseStats: { hp: 49, attack: 55, defense: 42, speed: 85, special: 42 },\n expGroup: \"fast\",\n evolutionChainId: 221,\n rarity: \"common\",\n catchRate: 190,\n description: \"A reliable teammate in any codebase.\",\n },\n {\n id: 432,\n name: \"Purugly\",\n types: [\"Normal\"],\n baseStats: { hp: 71, attack: 82, defense: 64, speed: 112, special: 64 },\n expGroup: \"fast\",\n evolutionChainId: 221,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Writes clean, readable code that just works.\",\n },\n {\n id: 433,\n name: \"Chingling\",\n types: [\"Psychic\"],\n baseStats: { hp: 45, attack: 30, defense: 50, speed: 45, special: 65 },\n expGroup: \"fast\",\n evolutionChainId: 184,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Debugs production issues through pure intuition.\",\n },\n {\n id: 434,\n name: \"Stunky\",\n types: [\"Poison\", \"Dark\"],\n baseStats: { hp: 63, attack: 63, defense: 47, speed: 74, special: 41 },\n expGroup: \"medium_fast\",\n evolutionChainId: 223,\n rarity: \"common\",\n catchRate: 225,\n description: \"Knows every anti-pattern by heart.\",\n },\n {\n id: 435,\n name: \"Skuntank\",\n types: [\"Poison\", \"Dark\"],\n baseStats: { hp: 103, attack: 93, defense: 67, speed: 84, special: 71 },\n expGroup: \"medium_fast\",\n evolutionChainId: 223,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"Detoxifies spaghetti code into clean modules.\",\n },\n {\n id: 436,\n name: \"Bronzor\",\n types: [\"Steel\", \"Psychic\"],\n baseStats: { hp: 57, attack: 24, defense: 86, speed: 23, special: 86 },\n expGroup: \"medium_fast\",\n evolutionChainId: 224,\n rarity: \"common\",\n catchRate: 255,\n description: \"Forges bulletproof APIs that never break.\",\n },\n {\n id: 437,\n name: \"Bronzong\",\n types: [\"Steel\", \"Psychic\"],\n baseStats: { hp: 67, attack: 89, defense: 116, speed: 33, special: 116 },\n expGroup: \"medium_fast\",\n evolutionChainId: 224,\n rarity: \"uncommon\",\n catchRate: 90,\n description: \"Tempered by years of production hardening.\",\n },\n {\n id: 438,\n name: \"Bonsly\",\n types: [\"Rock\"],\n baseStats: { hp: 50, attack: 80, defense: 95, speed: 10, special: 45 },\n expGroup: \"medium_fast\",\n evolutionChainId: 91,\n rarity: \"common\",\n catchRate: 255,\n description: \"Its code is hardened against every attack vector.\",\n },\n {\n id: 439,\n name: \"Mime Jr.\",\n types: [\"Psychic\", \"Fairy\"],\n baseStats: { hp: 20, attack: 25, defense: 45, speed: 60, special: 90 },\n expGroup: \"medium_fast\",\n evolutionChainId: 57,\n rarity: \"uncommon\",\n catchRate: 145,\n description: \"Mentally models complex distributed systems.\",\n },\n {\n id: 440,\n name: \"Happiny\",\n types: [\"Normal\"],\n baseStats: { hp: 100, attack: 5, defense: 5, speed: 30, special: 65 },\n expGroup: \"fast\",\n evolutionChainId: 51,\n rarity: \"uncommon\",\n catchRate: 130,\n description: \"A reliable teammate in any codebase.\",\n },\n {\n id: 441,\n name: \"Chatot\",\n types: [\"Normal\", \"Flying\"],\n baseStats: { hp: 76, attack: 65, defense: 45, speed: 91, special: 92 },\n expGroup: \"medium_slow\",\n evolutionChainId: 228,\n rarity: \"rare\",\n catchRate: 30,\n description: \"Keeps things simple and maintainable.\",\n },\n {\n id: 442,\n name: \"Spiritomb\",\n types: [\"Ghost\", \"Dark\"],\n baseStats: { hp: 50, attack: 92, defense: 108, speed: 35, special: 108 },\n expGroup: \"medium_fast\",\n evolutionChainId: 229,\n rarity: \"uncommon\",\n catchRate: 100,\n description: \"Phases through firewalls during security audits.\",\n },\n {\n id: 443,\n name: \"Gible\",\n types: [\"Dragon\", \"Ground\"],\n baseStats: { hp: 58, attack: 70, defense: 45, speed: 42, special: 45 },\n expGroup: \"slow\",\n evolutionChainId: 230,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Its codebases are legendary in scale and power.\",\n },\n {\n id: 444,\n name: \"Gabite\",\n types: [\"Dragon\", \"Ground\"],\n baseStats: { hp: 68, attack: 90, defense: 65, speed: 82, special: 55 },\n expGroup: \"slow\",\n evolutionChainId: 230,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Its codebases are legendary in scale and power.\",\n },\n {\n id: 445,\n name: \"Garchomp\",\n types: [\"Dragon\", \"Ground\"],\n baseStats: { hp: 108, attack: 130, defense: 95, speed: 102, special: 85 },\n expGroup: \"slow\",\n evolutionChainId: 230,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Its codebases are legendary in scale and power.\",\n },\n {\n id: 446,\n name: \"Munchlax\",\n types: [\"Normal\"],\n baseStats: { hp: 135, attack: 85, defense: 40, speed: 5, special: 85 },\n expGroup: \"slow\",\n evolutionChainId: 72,\n rarity: \"rare\",\n catchRate: 50,\n description: \"Keeps things simple and maintainable.\",\n },\n {\n id: 447,\n name: \"Riolu\",\n types: [\"Fighting\"],\n baseStats: { hp: 40, attack: 70, defense: 40, speed: 60, special: 40 },\n expGroup: \"medium_slow\",\n evolutionChainId: 232,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Its PR reviews pack a punch.\",\n },\n {\n id: 448,\n name: \"Lucario\",\n types: [\"Fighting\", \"Steel\"],\n baseStats: { hp: 70, attack: 110, defense: 70, speed: 90, special: 115 },\n expGroup: \"medium_slow\",\n evolutionChainId: 232,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Punches through blockers in code review.\",\n },\n {\n id: 449,\n name: \"Hippopotas\",\n types: [\"Ground\"],\n baseStats: { hp: 68, attack: 72, defense: 78, speed: 32, special: 42 },\n expGroup: \"slow\",\n evolutionChainId: 233,\n rarity: \"uncommon\",\n catchRate: 140,\n description: \"Grounded in best practices and design patterns.\",\n },\n {\n id: 450,\n name: \"Hippowdon\",\n types: [\"Ground\"],\n baseStats: { hp: 108, attack: 112, defense: 118, speed: 47, special: 72 },\n expGroup: \"slow\",\n evolutionChainId: 233,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"Grounded in best practices and design patterns.\",\n },\n {\n id: 451,\n name: \"Skorupi\",\n types: [\"Poison\", \"Bug\"],\n baseStats: { hp: 40, attack: 50, defense: 90, speed: 65, special: 55 },\n expGroup: \"slow\",\n evolutionChainId: 234,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Knows every anti-pattern by heart.\",\n },\n {\n id: 452,\n name: \"Drapion\",\n types: [\"Poison\", \"Dark\"],\n baseStats: { hp: 70, attack: 90, defense: 110, speed: 95, special: 75 },\n expGroup: \"slow\",\n evolutionChainId: 234,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Detoxifies spaghetti code into clean modules.\",\n },\n {\n id: 453,\n name: \"Croagunk\",\n types: [\"Poison\", \"Fighting\"],\n baseStats: { hp: 48, attack: 61, defense: 40, speed: 50, special: 61 },\n expGroup: \"medium_fast\",\n evolutionChainId: 235,\n rarity: \"uncommon\",\n catchRate: 140,\n description: \"Detoxifies spaghetti code into clean modules.\",\n },\n {\n id: 454,\n name: \"Toxicroak\",\n types: [\"Poison\", \"Fighting\"],\n baseStats: { hp: 83, attack: 106, defense: 65, speed: 85, special: 86 },\n expGroup: \"medium_fast\",\n evolutionChainId: 235,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Finds toxic code patterns and eliminates them.\",\n },\n {\n id: 455,\n name: \"Carnivine\",\n types: [\"Grass\"],\n baseStats: { hp: 74, attack: 100, defense: 72, speed: 46, special: 90 },\n expGroup: \"slow\",\n evolutionChainId: 236,\n rarity: \"common\",\n catchRate: 200,\n description: \"Its codebase flourishes with careful nurturing.\",\n },\n {\n id: 456,\n name: \"Finneon\",\n types: [\"Water\"],\n baseStats: { hp: 49, attack: 49, defense: 56, speed: 66, special: 61 },\n expGroup: \"fast\",\n evolutionChainId: 237,\n rarity: \"common\",\n catchRate: 190,\n description: \"Handles backpressure like a pro.\",\n },\n {\n id: 457,\n name: \"Lumineon\",\n types: [\"Water\"],\n baseStats: { hp: 69, attack: 69, defense: 76, speed: 91, special: 86 },\n expGroup: \"fast\",\n evolutionChainId: 237,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Streams data like a well-configured message queue.\",\n },\n {\n id: 458,\n name: \"Mantyke\",\n types: [\"Water\", \"Flying\"],\n baseStats: { hp: 45, attack: 20, defense: 50, speed: 50, special: 120 },\n expGroup: \"slow\",\n evolutionChainId: 116,\n rarity: \"rare\",\n catchRate: 25,\n description: \"Flows through complex data pipelines with ease.\",\n },\n {\n id: 459,\n name: \"Snover\",\n types: [\"Grass\", \"Ice\"],\n baseStats: { hp: 60, attack: 62, defense: 50, speed: 40, special: 62 },\n expGroup: \"slow\",\n evolutionChainId: 239,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Photosynthesizes coffee into clean code.\",\n },\n {\n id: 460,\n name: \"Abomasnow\",\n types: [\"Grass\", \"Ice\"],\n baseStats: { hp: 90, attack: 92, defense: 75, speed: 60, special: 92 },\n expGroup: \"slow\",\n evolutionChainId: 239,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"Its codebase flourishes with careful nurturing.\",\n },\n {\n id: 461,\n name: \"Weavile\",\n types: [\"Dark\", \"Ice\"],\n baseStats: { hp: 70, attack: 120, defense: 65, speed: 125, special: 85 },\n expGroup: \"medium_slow\",\n evolutionChainId: 109,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Finds vulnerabilities hidden in the shadows.\",\n },\n {\n id: 462,\n name: \"Magnezone\",\n types: [\"Electric\", \"Steel\"],\n baseStats: { hp: 70, attack: 70, defense: 115, speed: 60, special: 130 },\n expGroup: \"medium_fast\",\n evolutionChainId: 34,\n rarity: \"rare\",\n catchRate: 30,\n description: \"Charges up the team with electrifying demos.\",\n },\n {\n id: 463,\n name: \"Lickilicky\",\n types: [\"Normal\"],\n baseStats: { hp: 110, attack: 85, defense: 95, speed: 50, special: 95 },\n expGroup: \"medium_fast\",\n evolutionChainId: 48,\n rarity: \"rare\",\n catchRate: 30,\n description: \"Solid fundamentals, no unnecessary complexity.\",\n },\n {\n id: 464,\n name: \"Rhyperior\",\n types: [\"Ground\", \"Rock\"],\n baseStats: { hp: 115, attack: 140, defense: 130, speed: 40, special: 55 },\n expGroup: \"slow\",\n evolutionChainId: 50,\n rarity: \"rare\",\n catchRate: 30,\n description: \"Grounded in best practices and design patterns.\",\n },\n {\n id: 465,\n name: \"Tangrowth\",\n types: [\"Grass\"],\n baseStats: { hp: 100, attack: 100, defense: 125, speed: 50, special: 110 },\n expGroup: \"medium_fast\",\n evolutionChainId: 52,\n rarity: \"rare\",\n catchRate: 30,\n description: \"Plants the seeds for sustainable architecture.\",\n },\n {\n id: 466,\n name: \"Electivire\",\n types: [\"Electric\"],\n baseStats: { hp: 75, attack: 123, defense: 67, speed: 95, special: 95 },\n expGroup: \"medium_fast\",\n evolutionChainId: 60,\n rarity: \"rare\",\n catchRate: 30,\n description: \"Lightning-fast response times in production.\",\n },\n {\n id: 467,\n name: \"Magmortar\",\n types: [\"Fire\"],\n baseStats: { hp: 75, attack: 95, defense: 67, speed: 83, special: 125 },\n expGroup: \"medium_fast\",\n evolutionChainId: 61,\n rarity: \"rare\",\n catchRate: 30,\n description: \"Burns through bugs with blazing speed.\",\n },\n {\n id: 468,\n name: \"Togekiss\",\n types: [\"Fairy\", \"Flying\"],\n baseStats: { hp: 85, attack: 50, defense: 95, speed: 80, special: 120 },\n expGroup: \"fast\",\n evolutionChainId: 87,\n rarity: \"rare\",\n catchRate: 30,\n description: \"Enchants users with delightful UX polish.\",\n },\n {\n id: 469,\n name: \"Yanmega\",\n types: [\"Bug\", \"Flying\"],\n baseStats: { hp: 86, attack: 76, defense: 86, speed: 95, special: 116 },\n expGroup: \"medium_fast\",\n evolutionChainId: 95,\n rarity: \"rare\",\n catchRate: 30,\n description: \"Crawls through every edge case methodically.\",\n },\n {\n id: 470,\n name: \"Leafeon\",\n types: [\"Grass\"],\n baseStats: { hp: 65, attack: 110, defense: 130, speed: 95, special: 65 },\n expGroup: \"medium_fast\",\n evolutionChainId: 67,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Its codebase flourishes with careful nurturing.\",\n },\n {\n id: 471,\n name: \"Glaceon\",\n types: [\"Ice\"],\n baseStats: { hp: 65, attack: 60, defense: 110, speed: 65, special: 130 },\n expGroup: \"medium_fast\",\n evolutionChainId: 67,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Crystallizes complex requirements into clear specs.\",\n },\n {\n id: 472,\n name: \"Gliscor\",\n types: [\"Ground\", \"Flying\"],\n baseStats: { hp: 75, attack: 95, defense: 125, speed: 95, special: 75 },\n expGroup: \"medium_slow\",\n evolutionChainId: 104,\n rarity: \"rare\",\n catchRate: 30,\n description: \"Lays the groundwork for scalable systems.\",\n },\n {\n id: 473,\n name: \"Mamoswine\",\n types: [\"Ice\", \"Ground\"],\n baseStats: { hp: 110, attack: 130, defense: 80, speed: 80, special: 70 },\n expGroup: \"slow\",\n evolutionChainId: 112,\n rarity: \"rare\",\n catchRate: 50,\n description: \"Keeps cool under tight deployment deadlines.\",\n },\n {\n id: 474,\n name: \"Porygon-Z\",\n types: [\"Normal\"],\n baseStats: { hp: 85, attack: 80, defense: 70, speed: 90, special: 135 },\n expGroup: \"medium_fast\",\n evolutionChainId: 68,\n rarity: \"rare\",\n catchRate: 30,\n description: \"A reliable teammate in any codebase.\",\n },\n {\n id: 475,\n name: \"Gallade\",\n types: [\"Psychic\", \"Fighting\"],\n baseStats: { hp: 68, attack: 125, defense: 65, speed: 80, special: 115 },\n expGroup: \"slow\",\n evolutionChainId: 140,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Debugs production issues through pure intuition.\",\n },\n {\n id: 476,\n name: \"Probopass\",\n types: [\"Rock\", \"Steel\"],\n baseStats: { hp: 60, attack: 55, defense: 145, speed: 40, special: 150 },\n expGroup: \"medium_fast\",\n evolutionChainId: 147,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"Its code is hardened against every attack vector.\",\n },\n {\n id: 477,\n name: \"Dusknoir\",\n types: [\"Ghost\"],\n baseStats: { hp: 45, attack: 100, defense: 135, speed: 45, special: 135 },\n expGroup: \"fast\",\n evolutionChainId: 182,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Debugs phantom issues in production at 3 AM.\",\n },\n {\n id: 478,\n name: \"Froslass\",\n types: [\"Ice\", \"Ghost\"],\n baseStats: { hp: 70, attack: 80, defense: 70, speed: 110, special: 80 },\n expGroup: \"medium_fast\",\n evolutionChainId: 186,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Its test suite is ice-cold \u2014 nothing gets through.\",\n },\n {\n id: 479,\n name: \"Rotom\",\n types: [\"Electric\", \"Ghost\"],\n baseStats: { hp: 50, attack: 50, defense: 77, speed: 91, special: 95 },\n expGroup: \"medium_fast\",\n evolutionChainId: 240,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Powers through async operations effortlessly.\",\n },\n {\n id: 480,\n name: \"Uxie\",\n types: [\"Psychic\"],\n baseStats: { hp: 75, attack: 75, defense: 130, speed: 95, special: 130 },\n expGroup: \"slow\",\n evolutionChainId: 241,\n rarity: \"legendary\",\n catchRate: 3,\n description: \"Predicts bugs before they even appear in code.\",\n },\n {\n id: 481,\n name: \"Mesprit\",\n types: [\"Psychic\"],\n baseStats: { hp: 80, attack: 105, defense: 105, speed: 80, special: 105 },\n expGroup: \"slow\",\n evolutionChainId: 242,\n rarity: \"legendary\",\n catchRate: 3,\n description: \"Debugs production issues through pure intuition.\",\n },\n {\n id: 482,\n name: \"Azelf\",\n types: [\"Psychic\"],\n baseStats: { hp: 75, attack: 125, defense: 70, speed: 115, special: 125 },\n expGroup: \"slow\",\n evolutionChainId: 243,\n rarity: \"legendary\",\n catchRate: 3,\n description: \"Debugs production issues through pure intuition.\",\n },\n {\n id: 483,\n name: \"Dialga\",\n types: [\"Steel\", \"Dragon\"],\n baseStats: { hp: 100, attack: 120, defense: 120, speed: 90, special: 150 },\n expGroup: \"slow\",\n evolutionChainId: 244,\n rarity: \"legendary\",\n catchRate: 3,\n description: \"Forges bulletproof APIs that never break.\",\n },\n {\n id: 484,\n name: \"Palkia\",\n types: [\"Water\", \"Dragon\"],\n baseStats: { hp: 90, attack: 120, defense: 100, speed: 100, special: 150 },\n expGroup: \"slow\",\n evolutionChainId: 245,\n rarity: \"legendary\",\n catchRate: 3,\n description: \"Flows through complex data pipelines with ease.\",\n },\n {\n id: 485,\n name: \"Heatran\",\n types: [\"Fire\", \"Steel\"],\n baseStats: { hp: 91, attack: 90, defense: 106, speed: 77, special: 130 },\n expGroup: \"slow\",\n evolutionChainId: 246,\n rarity: \"legendary\",\n catchRate: 3,\n description: \"Its CI pipeline is always on fire \u2014 in a good way.\",\n },\n {\n id: 486,\n name: \"Regigigas\",\n types: [\"Normal\"],\n baseStats: { hp: 110, attack: 160, defense: 110, speed: 100, special: 110 },\n expGroup: \"slow\",\n evolutionChainId: 247,\n rarity: \"legendary\",\n catchRate: 3,\n description: \"Solid fundamentals, no unnecessary complexity.\",\n },\n {\n id: 487,\n name: \"Giratina-Altered\",\n types: [\"Ghost\", \"Dragon\"],\n baseStats: { hp: 150, attack: 100, defense: 120, speed: 90, special: 120 },\n expGroup: \"slow\",\n evolutionChainId: 248,\n rarity: \"legendary\",\n catchRate: 3,\n description: \"Debugs phantom issues in production at 3 AM.\",\n },\n {\n id: 488,\n name: \"Cresselia\",\n types: [\"Psychic\"],\n baseStats: { hp: 120, attack: 70, defense: 110, speed: 85, special: 120 },\n expGroup: \"slow\",\n evolutionChainId: 249,\n rarity: \"legendary\",\n catchRate: 3,\n description: \"Debugs production issues through pure intuition.\",\n },\n {\n id: 489,\n name: \"Phione\",\n types: [\"Water\"],\n baseStats: { hp: 80, attack: 80, defense: 80, speed: 80, special: 80 },\n expGroup: \"slow\",\n evolutionChainId: 250,\n rarity: \"mythical\",\n catchRate: 30,\n description: \"Handles backpressure like a pro.\",\n },\n {\n id: 490,\n name: \"Manaphy\",\n types: [\"Water\"],\n baseStats: { hp: 100, attack: 100, defense: 100, speed: 100, special: 100 },\n expGroup: \"slow\",\n evolutionChainId: 250,\n rarity: \"mythical\",\n catchRate: 3,\n description: \"Its code flows naturally from function to function.\",\n },\n {\n id: 491,\n name: \"Darkrai\",\n types: [\"Dark\"],\n baseStats: { hp: 70, attack: 90, defense: 90, speed: 125, special: 135 },\n expGroup: \"slow\",\n evolutionChainId: 252,\n rarity: \"mythical\",\n catchRate: 3,\n description: \"Thrives in late-night debugging sessions.\",\n },\n {\n id: 492,\n name: \"Shaymin-Land\",\n types: [\"Grass\"],\n baseStats: { hp: 100, attack: 100, defense: 100, speed: 100, special: 100 },\n expGroup: \"medium_slow\",\n evolutionChainId: 253,\n rarity: \"mythical\",\n catchRate: 45,\n description: \"Its codebase flourishes with careful nurturing.\",\n },\n {\n id: 493,\n name: \"Arceus\",\n types: [\"Normal\"],\n baseStats: { hp: 120, attack: 120, defense: 120, speed: 120, special: 120 },\n expGroup: \"slow\",\n evolutionChainId: 254,\n rarity: \"mythical\",\n catchRate: 3,\n description: \"A reliable teammate in any codebase.\",\n },\n\n // \u2500\u2500 Gen 5 \u2014 Unova (#494\u2013#649) \u2500\u2500\n {\n id: 494,\n name: \"Victini\",\n types: [\"Psychic\", \"Fire\"],\n baseStats: { hp: 100, attack: 100, defense: 100, speed: 100, special: 100 },\n expGroup: \"slow\",\n evolutionChainId: 255,\n rarity: \"mythical\",\n catchRate: 3,\n description: \"Mentally models complex distributed systems.\",\n },\n {\n id: 495,\n name: \"Snivy\",\n types: [\"Grass\"],\n baseStats: { hp: 45, attack: 45, defense: 55, speed: 63, special: 55 },\n expGroup: \"medium_slow\",\n evolutionChainId: 256,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Its codebase flourishes with careful nurturing.\",\n },\n {\n id: 496,\n name: \"Servine\",\n types: [\"Grass\"],\n baseStats: { hp: 60, attack: 60, defense: 75, speed: 83, special: 75 },\n expGroup: \"medium_slow\",\n evolutionChainId: 256,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Branches out into new features with natural ease.\",\n },\n {\n id: 497,\n name: \"Serperior\",\n types: [\"Grass\"],\n baseStats: { hp: 75, attack: 75, defense: 95, speed: 113, special: 95 },\n expGroup: \"medium_slow\",\n evolutionChainId: 256,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Photosynthesizes coffee into clean code.\",\n },\n {\n id: 498,\n name: \"Tepig\",\n types: [\"Fire\"],\n baseStats: { hp: 65, attack: 63, defense: 45, speed: 45, special: 45 },\n expGroup: \"medium_slow\",\n evolutionChainId: 257,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Rewrites legacy code with explosive energy.\",\n },\n {\n id: 499,\n name: \"Pignite\",\n types: [\"Fire\", \"Fighting\"],\n baseStats: { hp: 90, attack: 93, defense: 55, speed: 55, special: 70 },\n expGroup: \"medium_slow\",\n evolutionChainId: 257,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Compiles so fast the CPU starts sweating.\",\n },\n {\n id: 500,\n name: \"Emboar\",\n types: [\"Fire\", \"Fighting\"],\n baseStats: { hp: 110, attack: 123, defense: 65, speed: 65, special: 100 },\n expGroup: \"medium_slow\",\n evolutionChainId: 257,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Burns through bugs with blazing speed.\",\n },\n {\n id: 501,\n name: \"Oshawott\",\n types: [\"Water\"],\n baseStats: { hp: 55, attack: 55, defense: 45, speed: 45, special: 63 },\n expGroup: \"medium_slow\",\n evolutionChainId: 258,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Streams data like a well-configured message queue.\",\n },\n {\n id: 502,\n name: \"Dewott\",\n types: [\"Water\"],\n baseStats: { hp: 75, attack: 75, defense: 60, speed: 60, special: 83 },\n expGroup: \"medium_slow\",\n evolutionChainId: 258,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Streams data like a well-configured message queue.\",\n },\n {\n id: 503,\n name: \"Samurott\",\n types: [\"Water\"],\n baseStats: { hp: 95, attack: 100, defense: 85, speed: 70, special: 108 },\n expGroup: \"medium_slow\",\n evolutionChainId: 258,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Streams data like a well-configured message queue.\",\n },\n {\n id: 504,\n name: \"Patrat\",\n types: [\"Normal\"],\n baseStats: { hp: 45, attack: 55, defense: 39, speed: 42, special: 39 },\n expGroup: \"medium_fast\",\n evolutionChainId: 259,\n rarity: \"common\",\n catchRate: 255,\n description: \"Keeps things simple and maintainable.\",\n },\n {\n id: 505,\n name: \"Watchog\",\n types: [\"Normal\"],\n baseStats: { hp: 60, attack: 85, defense: 69, speed: 77, special: 69 },\n expGroup: \"medium_fast\",\n evolutionChainId: 259,\n rarity: \"common\",\n catchRate: 255,\n description: \"Keeps things simple and maintainable.\",\n },\n {\n id: 506,\n name: \"Lillipup\",\n types: [\"Normal\"],\n baseStats: { hp: 45, attack: 60, defense: 45, speed: 55, special: 45 },\n expGroup: \"medium_slow\",\n evolutionChainId: 260,\n rarity: \"common\",\n catchRate: 255,\n description: \"A reliable teammate in any codebase.\",\n },\n {\n id: 507,\n name: \"Herdier\",\n types: [\"Normal\"],\n baseStats: { hp: 65, attack: 80, defense: 65, speed: 60, special: 65 },\n expGroup: \"medium_slow\",\n evolutionChainId: 260,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"A reliable teammate in any codebase.\",\n },\n {\n id: 508,\n name: \"Stoutland\",\n types: [\"Normal\"],\n baseStats: { hp: 85, attack: 110, defense: 90, speed: 80, special: 90 },\n expGroup: \"medium_slow\",\n evolutionChainId: 260,\n rarity: \"rare\",\n catchRate: 45,\n description: \"The everyday workhorse of any development team.\",\n },\n {\n id: 509,\n name: \"Purrloin\",\n types: [\"Dark\"],\n baseStats: { hp: 41, attack: 50, defense: 37, speed: 66, special: 50 },\n expGroup: \"medium_fast\",\n evolutionChainId: 261,\n rarity: \"common\",\n catchRate: 255,\n description: \"Operates best when everyone else has logged off.\",\n },\n {\n id: 510,\n name: \"Liepard\",\n types: [\"Dark\"],\n baseStats: { hp: 64, attack: 88, defense: 50, speed: 106, special: 88 },\n expGroup: \"medium_fast\",\n evolutionChainId: 261,\n rarity: \"uncommon\",\n catchRate: 90,\n description: \"Its code works in ways few can understand.\",\n },\n {\n id: 511,\n name: \"Pansage\",\n types: [\"Grass\"],\n baseStats: { hp: 50, attack: 53, defense: 48, speed: 64, special: 53 },\n expGroup: \"medium_fast\",\n evolutionChainId: 262,\n rarity: \"common\",\n catchRate: 190,\n description: \"Plants the seeds for sustainable architecture.\",\n },\n {\n id: 512,\n name: \"Simisage\",\n types: [\"Grass\"],\n baseStats: { hp: 75, attack: 98, defense: 63, speed: 101, special: 98 },\n expGroup: \"medium_fast\",\n evolutionChainId: 262,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Plants the seeds for sustainable architecture.\",\n },\n {\n id: 513,\n name: \"Pansear\",\n types: [\"Fire\"],\n baseStats: { hp: 50, attack: 53, defense: 48, speed: 64, special: 53 },\n expGroup: \"medium_fast\",\n evolutionChainId: 263,\n rarity: \"common\",\n catchRate: 190,\n description: \"Its CI pipeline is always on fire \u2014 in a good way.\",\n },\n {\n id: 514,\n name: \"Simisear\",\n types: [\"Fire\"],\n baseStats: { hp: 75, attack: 98, defense: 63, speed: 101, special: 98 },\n expGroup: \"medium_fast\",\n evolutionChainId: 263,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Burns through bugs with blazing speed.\",\n },\n {\n id: 515,\n name: \"Panpour\",\n types: [\"Water\"],\n baseStats: { hp: 50, attack: 53, defense: 48, speed: 64, special: 53 },\n expGroup: \"medium_fast\",\n evolutionChainId: 264,\n rarity: \"common\",\n catchRate: 190,\n description: \"Cools down heated production incidents.\",\n },\n {\n id: 516,\n name: \"Simipour\",\n types: [\"Water\"],\n baseStats: { hp: 75, attack: 98, defense: 63, speed: 101, special: 98 },\n expGroup: \"medium_fast\",\n evolutionChainId: 264,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Handles backpressure like a pro.\",\n },\n {\n id: 517,\n name: \"Munna\",\n types: [\"Psychic\"],\n baseStats: { hp: 76, attack: 25, defense: 45, speed: 24, special: 67 },\n expGroup: \"fast\",\n evolutionChainId: 265,\n rarity: \"common\",\n catchRate: 190,\n description: \"Mentally models complex distributed systems.\",\n },\n {\n id: 518,\n name: \"Musharna\",\n types: [\"Psychic\"],\n baseStats: { hp: 116, attack: 55, defense: 85, speed: 29, special: 107 },\n expGroup: \"fast\",\n evolutionChainId: 265,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Mentally models complex distributed systems.\",\n },\n {\n id: 519,\n name: \"Pidove\",\n types: [\"Normal\", \"Flying\"],\n baseStats: { hp: 50, attack: 55, defense: 50, speed: 43, special: 36 },\n expGroup: \"medium_slow\",\n evolutionChainId: 266,\n rarity: \"common\",\n catchRate: 255,\n description: \"The everyday workhorse of any development team.\",\n },\n {\n id: 520,\n name: \"Tranquill\",\n types: [\"Normal\", \"Flying\"],\n baseStats: { hp: 62, attack: 77, defense: 62, speed: 65, special: 50 },\n expGroup: \"medium_slow\",\n evolutionChainId: 266,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Writes clean, readable code that just works.\",\n },\n {\n id: 521,\n name: \"Unfezant\",\n types: [\"Normal\", \"Flying\"],\n baseStats: { hp: 80, attack: 115, defense: 80, speed: 93, special: 65 },\n expGroup: \"medium_slow\",\n evolutionChainId: 266,\n rarity: \"rare\",\n catchRate: 45,\n description: \"A reliable teammate in any codebase.\",\n },\n {\n id: 522,\n name: \"Blitzle\",\n types: [\"Electric\"],\n baseStats: { hp: 45, attack: 60, defense: 32, speed: 76, special: 50 },\n expGroup: \"medium_fast\",\n evolutionChainId: 267,\n rarity: \"common\",\n catchRate: 190,\n description: \"Sparks innovation with every commit.\",\n },\n {\n id: 523,\n name: \"Zebstrika\",\n types: [\"Electric\"],\n baseStats: { hp: 75, attack: 100, defense: 63, speed: 116, special: 80 },\n expGroup: \"medium_fast\",\n evolutionChainId: 267,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Sparks innovation with every commit.\",\n },\n {\n id: 524,\n name: \"Roggenrola\",\n types: [\"Rock\"],\n baseStats: { hp: 55, attack: 75, defense: 85, speed: 15, special: 25 },\n expGroup: \"medium_slow\",\n evolutionChainId: 268,\n rarity: \"common\",\n catchRate: 255,\n description: \"Dependable like bedrock under your deployment.\",\n },\n {\n id: 525,\n name: \"Boldore\",\n types: [\"Rock\"],\n baseStats: { hp: 70, attack: 105, defense: 105, speed: 20, special: 50 },\n expGroup: \"medium_slow\",\n evolutionChainId: 268,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Solid as a load-bearing wall in the architecture.\",\n },\n {\n id: 526,\n name: \"Gigalith\",\n types: [\"Rock\"],\n baseStats: { hp: 85, attack: 135, defense: 130, speed: 25, special: 80 },\n expGroup: \"medium_slow\",\n evolutionChainId: 268,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Dependable like bedrock under your deployment.\",\n },\n {\n id: 527,\n name: \"Woobat\",\n types: [\"Psychic\", \"Flying\"],\n baseStats: { hp: 65, attack: 45, defense: 43, speed: 72, special: 55 },\n expGroup: \"medium_fast\",\n evolutionChainId: 269,\n rarity: \"common\",\n catchRate: 190,\n description: \"Debugs production issues through pure intuition.\",\n },\n {\n id: 528,\n name: \"Swoobat\",\n types: [\"Psychic\", \"Flying\"],\n baseStats: { hp: 67, attack: 57, defense: 55, speed: 114, special: 77 },\n expGroup: \"medium_fast\",\n evolutionChainId: 269,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Reads stack traces like reading minds.\",\n },\n {\n id: 529,\n name: \"Drilbur\",\n types: [\"Ground\"],\n baseStats: { hp: 60, attack: 85, defense: 40, speed: 68, special: 45 },\n expGroup: \"medium_fast\",\n evolutionChainId: 270,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Stable as the earth beneath your server rack.\",\n },\n {\n id: 530,\n name: \"Excadrill\",\n types: [\"Ground\", \"Steel\"],\n baseStats: { hp: 110, attack: 135, defense: 60, speed: 88, special: 65 },\n expGroup: \"medium_fast\",\n evolutionChainId: 270,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"Grounded in best practices and design patterns.\",\n },\n {\n id: 531,\n name: \"Audino\",\n types: [\"Normal\"],\n baseStats: { hp: 103, attack: 60, defense: 86, speed: 50, special: 86 },\n expGroup: \"fast\",\n evolutionChainId: 271,\n rarity: \"common\",\n catchRate: 255,\n description: \"Keeps things simple and maintainable.\",\n },\n {\n id: 532,\n name: \"Timburr\",\n types: [\"Fighting\"],\n baseStats: { hp: 75, attack: 80, defense: 55, speed: 35, special: 35 },\n expGroup: \"medium_slow\",\n evolutionChainId: 272,\n rarity: \"common\",\n catchRate: 180,\n description: \"Never backs down from a complex refactor.\",\n },\n {\n id: 533,\n name: \"Gurdurr\",\n types: [\"Fighting\"],\n baseStats: { hp: 85, attack: 105, defense: 85, speed: 40, special: 50 },\n expGroup: \"medium_slow\",\n evolutionChainId: 272,\n rarity: \"uncommon\",\n catchRate: 90,\n description: \"Never backs down from a complex refactor.\",\n },\n {\n id: 534,\n name: \"Conkeldurr\",\n types: [\"Fighting\"],\n baseStats: { hp: 105, attack: 140, defense: 95, speed: 45, special: 65 },\n expGroup: \"medium_slow\",\n evolutionChainId: 272,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Never backs down from a complex refactor.\",\n },\n {\n id: 535,\n name: \"Tympole\",\n types: [\"Water\"],\n baseStats: { hp: 50, attack: 50, defense: 40, speed: 64, special: 50 },\n expGroup: \"medium_slow\",\n evolutionChainId: 273,\n rarity: \"common\",\n catchRate: 255,\n description: \"Handles backpressure like a pro.\",\n },\n {\n id: 536,\n name: \"Palpitoad\",\n types: [\"Water\", \"Ground\"],\n baseStats: { hp: 75, attack: 65, defense: 55, speed: 69, special: 65 },\n expGroup: \"medium_slow\",\n evolutionChainId: 273,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Cools down heated production incidents.\",\n },\n {\n id: 537,\n name: \"Seismitoad\",\n types: [\"Water\", \"Ground\"],\n baseStats: { hp: 105, attack: 95, defense: 75, speed: 74, special: 85 },\n expGroup: \"medium_slow\",\n evolutionChainId: 273,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Flows through complex data pipelines with ease.\",\n },\n {\n id: 538,\n name: \"Throh\",\n types: [\"Fighting\"],\n baseStats: { hp: 120, attack: 100, defense: 85, speed: 45, special: 85 },\n expGroup: \"medium_fast\",\n evolutionChainId: 274,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Trains hard on algorithmic challenges daily.\",\n },\n {\n id: 539,\n name: \"Sawk\",\n types: [\"Fighting\"],\n baseStats: { hp: 75, attack: 125, defense: 75, speed: 85, special: 75 },\n expGroup: \"medium_fast\",\n evolutionChainId: 275,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Fights through technical debt with determination.\",\n },\n {\n id: 540,\n name: \"Sewaddle\",\n types: [\"Bug\", \"Grass\"],\n baseStats: { hp: 45, attack: 53, defense: 70, speed: 42, special: 60 },\n expGroup: \"medium_slow\",\n evolutionChainId: 276,\n rarity: \"common\",\n catchRate: 255,\n description: \"Its test coverage is thorough and persistent.\",\n },\n {\n id: 541,\n name: \"Swadloon\",\n types: [\"Bug\", \"Grass\"],\n baseStats: { hp: 55, attack: 63, defense: 90, speed: 42, special: 80 },\n expGroup: \"medium_slow\",\n evolutionChainId: 276,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Crawls through every edge case methodically.\",\n },\n {\n id: 542,\n name: \"Leavanny\",\n types: [\"Bug\", \"Grass\"],\n baseStats: { hp: 75, attack: 103, defense: 80, speed: 92, special: 80 },\n expGroup: \"medium_slow\",\n evolutionChainId: 276,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Its test coverage is thorough and persistent.\",\n },\n {\n id: 543,\n name: \"Venipede\",\n types: [\"Bug\", \"Poison\"],\n baseStats: { hp: 30, attack: 45, defense: 59, speed: 57, special: 39 },\n expGroup: \"medium_slow\",\n evolutionChainId: 277,\n rarity: \"common\",\n catchRate: 255,\n description: \"Metamorphoses codebases through careful refactoring.\",\n },\n {\n id: 544,\n name: \"Whirlipede\",\n types: [\"Bug\", \"Poison\"],\n baseStats: { hp: 40, attack: 55, defense: 99, speed: 47, special: 79 },\n expGroup: \"medium_slow\",\n evolutionChainId: 277,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Its test coverage is thorough and persistent.\",\n },\n {\n id: 545,\n name: \"Scolipede\",\n types: [\"Bug\", \"Poison\"],\n baseStats: { hp: 60, attack: 100, defense: 89, speed: 112, special: 69 },\n expGroup: \"medium_slow\",\n evolutionChainId: 277,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Its test coverage is thorough and persistent.\",\n },\n {\n id: 546,\n name: \"Cottonee\",\n types: [\"Grass\", \"Fairy\"],\n baseStats: { hp: 40, attack: 27, defense: 60, speed: 66, special: 50 },\n expGroup: \"medium_fast\",\n evolutionChainId: 278,\n rarity: \"common\",\n catchRate: 190,\n description: \"Its codebase flourishes with careful nurturing.\",\n },\n {\n id: 547,\n name: \"Whimsicott\",\n types: [\"Grass\", \"Fairy\"],\n baseStats: { hp: 60, attack: 67, defense: 85, speed: 116, special: 77 },\n expGroup: \"medium_fast\",\n evolutionChainId: 278,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Plants the seeds for sustainable architecture.\",\n },\n {\n id: 548,\n name: \"Petilil\",\n types: [\"Grass\"],\n baseStats: { hp: 45, attack: 35, defense: 50, speed: 30, special: 70 },\n expGroup: \"medium_fast\",\n evolutionChainId: 279,\n rarity: \"common\",\n catchRate: 190,\n description: \"Branches out into new features with natural ease.\",\n },\n {\n id: 549,\n name: \"Lilligant\",\n types: [\"Grass\"],\n baseStats: { hp: 70, attack: 60, defense: 75, speed: 90, special: 110 },\n expGroup: \"medium_fast\",\n evolutionChainId: 279,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Grows features organically from a solid foundation.\",\n },\n {\n id: 550,\n name: \"Basculin-Red-Striped\",\n types: [\"Water\"],\n baseStats: { hp: 70, attack: 92, defense: 65, speed: 98, special: 80 },\n expGroup: \"medium_fast\",\n evolutionChainId: 280,\n rarity: \"rare\",\n catchRate: 25,\n description: \"Its code flows naturally from function to function.\",\n },\n {\n id: 551,\n name: \"Sandile\",\n types: [\"Ground\", \"Dark\"],\n baseStats: { hp: 50, attack: 72, defense: 35, speed: 65, special: 35 },\n expGroup: \"medium_slow\",\n evolutionChainId: 281,\n rarity: \"common\",\n catchRate: 180,\n description: \"Grounded in best practices and design patterns.\",\n },\n {\n id: 552,\n name: \"Krokorok\",\n types: [\"Ground\", \"Dark\"],\n baseStats: { hp: 60, attack: 82, defense: 45, speed: 74, special: 45 },\n expGroup: \"medium_slow\",\n evolutionChainId: 281,\n rarity: \"uncommon\",\n catchRate: 90,\n description: \"Stable as the earth beneath your server rack.\",\n },\n {\n id: 553,\n name: \"Krookodile\",\n types: [\"Ground\", \"Dark\"],\n baseStats: { hp: 95, attack: 117, defense: 80, speed: 92, special: 70 },\n expGroup: \"medium_slow\",\n evolutionChainId: 281,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Grounded in best practices and design patterns.\",\n },\n {\n id: 554,\n name: \"Darumaka\",\n types: [\"Fire\"],\n baseStats: { hp: 70, attack: 90, defense: 45, speed: 50, special: 45 },\n expGroup: \"medium_slow\",\n evolutionChainId: 282,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Hotfixes deployed before you finish your coffee.\",\n },\n {\n id: 555,\n name: \"Darmanitan-Standard\",\n types: [\"Fire\"],\n baseStats: { hp: 105, attack: 140, defense: 55, speed: 95, special: 55 },\n expGroup: \"medium_slow\",\n evolutionChainId: 282,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"Compiles so fast the CPU starts sweating.\",\n },\n {\n id: 556,\n name: \"Maractus\",\n types: [\"Grass\"],\n baseStats: { hp: 75, attack: 86, defense: 67, speed: 60, special: 106 },\n expGroup: \"medium_fast\",\n evolutionChainId: 283,\n rarity: \"common\",\n catchRate: 255,\n description: \"Its codebase flourishes with careful nurturing.\",\n },\n {\n id: 557,\n name: \"Dwebble\",\n types: [\"Bug\", \"Rock\"],\n baseStats: { hp: 50, attack: 65, defense: 85, speed: 55, special: 35 },\n expGroup: \"medium_fast\",\n evolutionChainId: 284,\n rarity: \"common\",\n catchRate: 190,\n description: \"Crawls through every edge case methodically.\",\n },\n {\n id: 558,\n name: \"Crustle\",\n types: [\"Bug\", \"Rock\"],\n baseStats: { hp: 70, attack: 105, defense: 125, speed: 45, special: 75 },\n expGroup: \"medium_fast\",\n evolutionChainId: 284,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Surprisingly powerful despite its small size.\",\n },\n {\n id: 559,\n name: \"Scraggy\",\n types: [\"Dark\", \"Fighting\"],\n baseStats: { hp: 50, attack: 75, defense: 70, speed: 48, special: 70 },\n expGroup: \"medium_fast\",\n evolutionChainId: 285,\n rarity: \"common\",\n catchRate: 180,\n description: \"Thrives in late-night debugging sessions.\",\n },\n {\n id: 560,\n name: \"Scrafty\",\n types: [\"Dark\", \"Fighting\"],\n baseStats: { hp: 65, attack: 90, defense: 115, speed: 58, special: 115 },\n expGroup: \"medium_fast\",\n evolutionChainId: 285,\n rarity: \"uncommon\",\n catchRate: 90,\n description: \"Masters the dark arts of regex and bitwise ops.\",\n },\n {\n id: 561,\n name: \"Sigilyph\",\n types: [\"Psychic\", \"Flying\"],\n baseStats: { hp: 72, attack: 58, defense: 80, speed: 97, special: 103 },\n expGroup: \"medium_fast\",\n evolutionChainId: 286,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Its architecture decisions are eerily prescient.\",\n },\n {\n id: 562,\n name: \"Yamask\",\n types: [\"Ghost\"],\n baseStats: { hp: 38, attack: 30, defense: 85, speed: 30, special: 65 },\n expGroup: \"medium_fast\",\n evolutionChainId: 287,\n rarity: \"common\",\n catchRate: 190,\n description: \"Debugs phantom issues in production at 3 AM.\",\n },\n {\n id: 563,\n name: \"Cofagrigus\",\n types: [\"Ghost\"],\n baseStats: { hp: 58, attack: 50, defense: 145, speed: 30, special: 105 },\n expGroup: \"medium_fast\",\n evolutionChainId: 287,\n rarity: \"uncommon\",\n catchRate: 90,\n description: \"Phases through firewalls during security audits.\",\n },\n {\n id: 564,\n name: \"Tirtouga\",\n types: [\"Water\", \"Rock\"],\n baseStats: { hp: 54, attack: 78, defense: 103, speed: 22, special: 53 },\n expGroup: \"medium_fast\",\n evolutionChainId: 288,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Handles backpressure like a pro.\",\n },\n {\n id: 565,\n name: \"Carracosta\",\n types: [\"Water\", \"Rock\"],\n baseStats: { hp: 74, attack: 108, defense: 133, speed: 32, special: 83 },\n expGroup: \"medium_fast\",\n evolutionChainId: 288,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Flows through complex data pipelines with ease.\",\n },\n {\n id: 566,\n name: \"Archen\",\n types: [\"Rock\", \"Flying\"],\n baseStats: { hp: 55, attack: 112, defense: 45, speed: 70, special: 74 },\n expGroup: \"medium_fast\",\n evolutionChainId: 289,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Solid as a load-bearing wall in the architecture.\",\n },\n {\n id: 567,\n name: \"Archeops\",\n types: [\"Rock\", \"Flying\"],\n baseStats: { hp: 75, attack: 140, defense: 65, speed: 110, special: 112 },\n expGroup: \"medium_fast\",\n evolutionChainId: 289,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Builds unbreakable infrastructure that lasts.\",\n },\n {\n id: 568,\n name: \"Trubbish\",\n types: [\"Poison\"],\n baseStats: { hp: 50, attack: 50, defense: 62, speed: 65, special: 62 },\n expGroup: \"medium_fast\",\n evolutionChainId: 290,\n rarity: \"common\",\n catchRate: 190,\n description: \"Finds toxic code patterns and eliminates them.\",\n },\n {\n id: 569,\n name: \"Garbodor\",\n types: [\"Poison\"],\n baseStats: { hp: 80, attack: 95, defense: 82, speed: 75, special: 82 },\n expGroup: \"medium_fast\",\n evolutionChainId: 290,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"Injects helpful logging into legacy systems.\",\n },\n {\n id: 570,\n name: \"Zorua\",\n types: [\"Dark\"],\n baseStats: { hp: 40, attack: 65, defense: 40, speed: 65, special: 80 },\n expGroup: \"medium_slow\",\n evolutionChainId: 291,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Operates best when everyone else has logged off.\",\n },\n {\n id: 571,\n name: \"Zoroark\",\n types: [\"Dark\"],\n baseStats: { hp: 60, attack: 105, defense: 60, speed: 105, special: 120 },\n expGroup: \"medium_slow\",\n evolutionChainId: 291,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Operates best when everyone else has logged off.\",\n },\n {\n id: 572,\n name: \"Minccino\",\n types: [\"Normal\"],\n baseStats: { hp: 55, attack: 50, defense: 40, speed: 75, special: 40 },\n expGroup: \"fast\",\n evolutionChainId: 292,\n rarity: \"common\",\n catchRate: 255,\n description: \"Solid fundamentals, no unnecessary complexity.\",\n },\n {\n id: 573,\n name: \"Cinccino\",\n types: [\"Normal\"],\n baseStats: { hp: 75, attack: 95, defense: 60, speed: 115, special: 65 },\n expGroup: \"fast\",\n evolutionChainId: 292,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"Writes clean, readable code that just works.\",\n },\n {\n id: 574,\n name: \"Gothita\",\n types: [\"Psychic\"],\n baseStats: { hp: 45, attack: 30, defense: 50, speed: 45, special: 65 },\n expGroup: \"medium_slow\",\n evolutionChainId: 293,\n rarity: \"common\",\n catchRate: 200,\n description: \"Reads stack traces like reading minds.\",\n },\n {\n id: 575,\n name: \"Gothorita\",\n types: [\"Psychic\"],\n baseStats: { hp: 60, attack: 45, defense: 70, speed: 55, special: 85 },\n expGroup: \"medium_slow\",\n evolutionChainId: 293,\n rarity: \"uncommon\",\n catchRate: 100,\n description: \"Mentally models complex distributed systems.\",\n },\n {\n id: 576,\n name: \"Gothitelle\",\n types: [\"Psychic\"],\n baseStats: { hp: 70, attack: 55, defense: 95, speed: 65, special: 110 },\n expGroup: \"medium_slow\",\n evolutionChainId: 293,\n rarity: \"rare\",\n catchRate: 50,\n description: \"Predicts bugs before they even appear in code.\",\n },\n {\n id: 577,\n name: \"Solosis\",\n types: [\"Psychic\"],\n baseStats: { hp: 45, attack: 30, defense: 40, speed: 20, special: 105 },\n expGroup: \"medium_slow\",\n evolutionChainId: 294,\n rarity: \"common\",\n catchRate: 200,\n description: \"Predicts bugs before they even appear in code.\",\n },\n {\n id: 578,\n name: \"Duosion\",\n types: [\"Psychic\"],\n baseStats: { hp: 65, attack: 40, defense: 50, speed: 30, special: 125 },\n expGroup: \"medium_slow\",\n evolutionChainId: 294,\n rarity: \"uncommon\",\n catchRate: 100,\n description: \"Mentally models complex distributed systems.\",\n },\n {\n id: 579,\n name: \"Reuniclus\",\n types: [\"Psychic\"],\n baseStats: { hp: 110, attack: 65, defense: 75, speed: 30, special: 125 },\n expGroup: \"medium_slow\",\n evolutionChainId: 294,\n rarity: \"rare\",\n catchRate: 50,\n description: \"Debugs production issues through pure intuition.\",\n },\n {\n id: 580,\n name: \"Ducklett\",\n types: [\"Water\", \"Flying\"],\n baseStats: { hp: 62, attack: 44, defense: 50, speed: 55, special: 50 },\n expGroup: \"medium_fast\",\n evolutionChainId: 295,\n rarity: \"common\",\n catchRate: 190,\n description: \"Flows through complex data pipelines with ease.\",\n },\n {\n id: 581,\n name: \"Swanna\",\n types: [\"Water\", \"Flying\"],\n baseStats: { hp: 75, attack: 87, defense: 63, speed: 98, special: 87 },\n expGroup: \"medium_fast\",\n evolutionChainId: 295,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Its code flows naturally from function to function.\",\n },\n {\n id: 582,\n name: \"Vanillite\",\n types: [\"Ice\"],\n baseStats: { hp: 36, attack: 50, defense: 50, speed: 44, special: 65 },\n expGroup: \"slow\",\n evolutionChainId: 296,\n rarity: \"common\",\n catchRate: 255,\n description: \"Crystallizes complex requirements into clear specs.\",\n },\n {\n id: 583,\n name: \"Vanillish\",\n types: [\"Ice\"],\n baseStats: { hp: 51, attack: 65, defense: 65, speed: 59, special: 80 },\n expGroup: \"slow\",\n evolutionChainId: 296,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Preserves backward compatibility like a glacier.\",\n },\n {\n id: 584,\n name: \"Vanilluxe\",\n types: [\"Ice\"],\n baseStats: { hp: 71, attack: 95, defense: 85, speed: 79, special: 110 },\n expGroup: \"slow\",\n evolutionChainId: 296,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Its test suite is ice-cold \u2014 nothing gets through.\",\n },\n {\n id: 585,\n name: \"Deerling\",\n types: [\"Normal\", \"Grass\"],\n baseStats: { hp: 60, attack: 60, defense: 50, speed: 75, special: 50 },\n expGroup: \"medium_fast\",\n evolutionChainId: 297,\n rarity: \"common\",\n catchRate: 190,\n description: \"Writes clean, readable code that just works.\",\n },\n {\n id: 586,\n name: \"Sawsbuck\",\n types: [\"Normal\", \"Grass\"],\n baseStats: { hp: 80, attack: 100, defense: 70, speed: 95, special: 70 },\n expGroup: \"medium_fast\",\n evolutionChainId: 297,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"The everyday workhorse of any development team.\",\n },\n {\n id: 587,\n name: \"Emolga\",\n types: [\"Electric\", \"Flying\"],\n baseStats: { hp: 55, attack: 75, defense: 60, speed: 103, special: 75 },\n expGroup: \"medium_fast\",\n evolutionChainId: 298,\n rarity: \"common\",\n catchRate: 200,\n description: \"Charges up the team with electrifying demos.\",\n },\n {\n id: 588,\n name: \"Karrablast\",\n types: [\"Bug\"],\n baseStats: { hp: 50, attack: 75, defense: 45, speed: 60, special: 45 },\n expGroup: \"medium_fast\",\n evolutionChainId: 299,\n rarity: \"common\",\n catchRate: 200,\n description: \"Crawls through every edge case methodically.\",\n },\n {\n id: 589,\n name: \"Escavalier\",\n types: [\"Bug\", \"Steel\"],\n baseStats: { hp: 70, attack: 135, defense: 105, speed: 20, special: 105 },\n expGroup: \"medium_fast\",\n evolutionChainId: 299,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Surprisingly powerful despite its small size.\",\n },\n {\n id: 590,\n name: \"Foongus\",\n types: [\"Grass\", \"Poison\"],\n baseStats: { hp: 69, attack: 55, defense: 45, speed: 15, special: 55 },\n expGroup: \"medium_fast\",\n evolutionChainId: 300,\n rarity: \"common\",\n catchRate: 190,\n description: \"Grows features organically from a solid foundation.\",\n },\n {\n id: 591,\n name: \"Amoonguss\",\n types: [\"Grass\", \"Poison\"],\n baseStats: { hp: 114, attack: 85, defense: 70, speed: 30, special: 85 },\n expGroup: \"medium_fast\",\n evolutionChainId: 300,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Plants the seeds for sustainable architecture.\",\n },\n {\n id: 592,\n name: \"Frillish-Male\",\n types: [\"Water\", \"Ghost\"],\n baseStats: { hp: 55, attack: 40, defense: 50, speed: 40, special: 85 },\n expGroup: \"medium_fast\",\n evolutionChainId: 301,\n rarity: \"common\",\n catchRate: 190,\n description: \"Cools down heated production incidents.\",\n },\n {\n id: 593,\n name: \"Jellicent-Male\",\n types: [\"Water\", \"Ghost\"],\n baseStats: { hp: 100, attack: 60, defense: 70, speed: 60, special: 105 },\n expGroup: \"medium_fast\",\n evolutionChainId: 301,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"Cools down heated production incidents.\",\n },\n {\n id: 594,\n name: \"Alomomola\",\n types: [\"Water\"],\n baseStats: { hp: 165, attack: 75, defense: 80, speed: 65, special: 45 },\n expGroup: \"fast\",\n evolutionChainId: 302,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Handles backpressure like a pro.\",\n },\n {\n id: 595,\n name: \"Joltik\",\n types: [\"Bug\", \"Electric\"],\n baseStats: { hp: 50, attack: 47, defense: 50, speed: 65, special: 57 },\n expGroup: \"medium_fast\",\n evolutionChainId: 303,\n rarity: \"common\",\n catchRate: 190,\n description: \"Crawls through every edge case methodically.\",\n },\n {\n id: 596,\n name: \"Galvantula\",\n types: [\"Bug\", \"Electric\"],\n baseStats: { hp: 70, attack: 77, defense: 60, speed: 108, special: 97 },\n expGroup: \"medium_fast\",\n evolutionChainId: 303,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Its test coverage is thorough and persistent.\",\n },\n {\n id: 597,\n name: \"Ferroseed\",\n types: [\"Grass\", \"Steel\"],\n baseStats: { hp: 44, attack: 50, defense: 91, speed: 10, special: 86 },\n expGroup: \"medium_fast\",\n evolutionChainId: 304,\n rarity: \"common\",\n catchRate: 255,\n description: \"Branches out into new features with natural ease.\",\n },\n {\n id: 598,\n name: \"Ferrothorn\",\n types: [\"Grass\", \"Steel\"],\n baseStats: { hp: 74, attack: 94, defense: 131, speed: 20, special: 116 },\n expGroup: \"medium_fast\",\n evolutionChainId: 304,\n rarity: \"uncommon\",\n catchRate: 90,\n description: \"Branches out into new features with natural ease.\",\n },\n {\n id: 599,\n name: \"Klink\",\n types: [\"Steel\"],\n baseStats: { hp: 40, attack: 55, defense: 70, speed: 30, special: 60 },\n expGroup: \"medium_slow\",\n evolutionChainId: 305,\n rarity: \"uncommon\",\n catchRate: 130,\n description: \"Hardens every endpoint against injection attacks.\",\n },\n {\n id: 600,\n name: \"Klang\",\n types: [\"Steel\"],\n baseStats: { hp: 60, attack: 80, defense: 95, speed: 50, special: 85 },\n expGroup: \"medium_slow\",\n evolutionChainId: 305,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"Forges bulletproof APIs that never break.\",\n },\n {\n id: 601,\n name: \"Klinklang\",\n types: [\"Steel\"],\n baseStats: { hp: 60, attack: 100, defense: 115, speed: 90, special: 85 },\n expGroup: \"medium_slow\",\n evolutionChainId: 305,\n rarity: \"rare\",\n catchRate: 30,\n description: \"Builds infrastructure that withstands any load.\",\n },\n {\n id: 602,\n name: \"Tynamo\",\n types: [\"Electric\"],\n baseStats: { hp: 35, attack: 55, defense: 40, speed: 60, special: 45 },\n expGroup: \"slow\",\n evolutionChainId: 306,\n rarity: \"common\",\n catchRate: 190,\n description: \"Sparks innovation with every commit.\",\n },\n {\n id: 603,\n name: \"Eelektrik\",\n types: [\"Electric\"],\n baseStats: { hp: 65, attack: 85, defense: 70, speed: 40, special: 75 },\n expGroup: \"slow\",\n evolutionChainId: 306,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"Lightning-fast response times in production.\",\n },\n {\n id: 604,\n name: \"Eelektross\",\n types: [\"Electric\"],\n baseStats: { hp: 85, attack: 115, defense: 80, speed: 50, special: 105 },\n expGroup: \"slow\",\n evolutionChainId: 306,\n rarity: \"rare\",\n catchRate: 30,\n description: \"Lightning-fast response times in production.\",\n },\n {\n id: 605,\n name: \"Elgyem\",\n types: [\"Psychic\"],\n baseStats: { hp: 55, attack: 55, defense: 55, speed: 30, special: 85 },\n expGroup: \"medium_fast\",\n evolutionChainId: 307,\n rarity: \"common\",\n catchRate: 255,\n description: \"Its architecture decisions are eerily prescient.\",\n },\n {\n id: 606,\n name: \"Beheeyem\",\n types: [\"Psychic\"],\n baseStats: { hp: 75, attack: 75, defense: 75, speed: 40, special: 125 },\n expGroup: \"medium_fast\",\n evolutionChainId: 307,\n rarity: \"uncommon\",\n catchRate: 90,\n description: \"Mentally models complex distributed systems.\",\n },\n {\n id: 607,\n name: \"Litwick\",\n types: [\"Ghost\", \"Fire\"],\n baseStats: { hp: 50, attack: 30, defense: 55, speed: 20, special: 65 },\n expGroup: \"medium_slow\",\n evolutionChainId: 308,\n rarity: \"common\",\n catchRate: 190,\n description: \"Appears silently in git blame for critical fixes.\",\n },\n {\n id: 608,\n name: \"Lampent\",\n types: [\"Ghost\", \"Fire\"],\n baseStats: { hp: 60, attack: 40, defense: 60, speed: 55, special: 95 },\n expGroup: \"medium_slow\",\n evolutionChainId: 308,\n rarity: \"uncommon\",\n catchRate: 90,\n description: \"Appears silently in git blame for critical fixes.\",\n },\n {\n id: 609,\n name: \"Chandelure\",\n types: [\"Ghost\", \"Fire\"],\n baseStats: { hp: 60, attack: 55, defense: 90, speed: 80, special: 145 },\n expGroup: \"medium_slow\",\n evolutionChainId: 308,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Phases through firewalls during security audits.\",\n },\n {\n id: 610,\n name: \"Axew\",\n types: [\"Dragon\"],\n baseStats: { hp: 46, attack: 87, defense: 60, speed: 57, special: 40 },\n expGroup: \"slow\",\n evolutionChainId: 309,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Its codebases are legendary in scale and power.\",\n },\n {\n id: 611,\n name: \"Fraxure\",\n types: [\"Dragon\"],\n baseStats: { hp: 66, attack: 117, defense: 70, speed: 67, special: 50 },\n expGroup: \"slow\",\n evolutionChainId: 309,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"Breathes fire into stale, unmaintained projects.\",\n },\n {\n id: 612,\n name: \"Haxorus\",\n types: [\"Dragon\"],\n baseStats: { hp: 76, attack: 147, defense: 90, speed: 97, special: 70 },\n expGroup: \"slow\",\n evolutionChainId: 309,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Hoards knowledge of ancient APIs and protocols.\",\n },\n {\n id: 613,\n name: \"Cubchoo\",\n types: [\"Ice\"],\n baseStats: { hp: 55, attack: 70, defense: 40, speed: 40, special: 60 },\n expGroup: \"medium_fast\",\n evolutionChainId: 310,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Keeps cool under tight deployment deadlines.\",\n },\n {\n id: 614,\n name: \"Beartic\",\n types: [\"Ice\"],\n baseStats: { hp: 95, attack: 130, defense: 80, speed: 50, special: 80 },\n expGroup: \"medium_fast\",\n evolutionChainId: 310,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"Freezes bugs in their tracks before production.\",\n },\n {\n id: 615,\n name: \"Cryogonal\",\n types: [\"Ice\"],\n baseStats: { hp: 80, attack: 50, defense: 50, speed: 105, special: 135 },\n expGroup: \"medium_fast\",\n evolutionChainId: 311,\n rarity: \"rare\",\n catchRate: 25,\n description: \"Its test suite is ice-cold \u2014 nothing gets through.\",\n },\n {\n id: 616,\n name: \"Shelmet\",\n types: [\"Bug\"],\n baseStats: { hp: 50, attack: 40, defense: 85, speed: 25, special: 65 },\n expGroup: \"medium_fast\",\n evolutionChainId: 312,\n rarity: \"common\",\n catchRate: 200,\n description: \"Its test coverage is thorough and persistent.\",\n },\n {\n id: 617,\n name: \"Accelgor\",\n types: [\"Bug\"],\n baseStats: { hp: 80, attack: 70, defense: 40, speed: 145, special: 100 },\n expGroup: \"medium_fast\",\n evolutionChainId: 312,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Metamorphoses codebases through careful refactoring.\",\n },\n {\n id: 618,\n name: \"Stunfisk\",\n types: [\"Ground\", \"Electric\"],\n baseStats: { hp: 109, attack: 66, defense: 84, speed: 32, special: 99 },\n expGroup: \"medium_fast\",\n evolutionChainId: 313,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Lays the groundwork for scalable systems.\",\n },\n {\n id: 619,\n name: \"Mienfoo\",\n types: [\"Fighting\"],\n baseStats: { hp: 45, attack: 85, defense: 50, speed: 65, special: 55 },\n expGroup: \"medium_slow\",\n evolutionChainId: 314,\n rarity: \"common\",\n catchRate: 180,\n description: \"Its PR reviews pack a punch.\",\n },\n {\n id: 620,\n name: \"Mienshao\",\n types: [\"Fighting\"],\n baseStats: { hp: 65, attack: 125, defense: 60, speed: 105, special: 95 },\n expGroup: \"medium_slow\",\n evolutionChainId: 314,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Never backs down from a complex refactor.\",\n },\n {\n id: 621,\n name: \"Druddigon\",\n types: [\"Dragon\"],\n baseStats: { hp: 77, attack: 120, defense: 90, speed: 48, special: 90 },\n expGroup: \"medium_fast\",\n evolutionChainId: 315,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Commands massive distributed systems with authority.\",\n },\n {\n id: 622,\n name: \"Golett\",\n types: [\"Ground\", \"Ghost\"],\n baseStats: { hp: 59, attack: 74, defense: 50, speed: 35, special: 50 },\n expGroup: \"medium_fast\",\n evolutionChainId: 316,\n rarity: \"common\",\n catchRate: 190,\n description: \"Lays the groundwork for scalable systems.\",\n },\n {\n id: 623,\n name: \"Golurk\",\n types: [\"Ground\", \"Ghost\"],\n baseStats: { hp: 89, attack: 124, defense: 80, speed: 55, special: 80 },\n expGroup: \"medium_fast\",\n evolutionChainId: 316,\n rarity: \"uncommon\",\n catchRate: 90,\n description: \"Grounded in best practices and design patterns.\",\n },\n {\n id: 624,\n name: \"Pawniard\",\n types: [\"Dark\", \"Steel\"],\n baseStats: { hp: 45, attack: 85, defense: 70, speed: 60, special: 40 },\n expGroup: \"medium_fast\",\n evolutionChainId: 317,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Operates best when everyone else has logged off.\",\n },\n {\n id: 625,\n name: \"Bisharp\",\n types: [\"Dark\", \"Steel\"],\n baseStats: { hp: 65, attack: 125, defense: 100, speed: 70, special: 70 },\n expGroup: \"medium_fast\",\n evolutionChainId: 317,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Finds vulnerabilities hidden in the shadows.\",\n },\n {\n id: 626,\n name: \"Bouffalant\",\n types: [\"Normal\"],\n baseStats: { hp: 95, attack: 110, defense: 95, speed: 55, special: 95 },\n expGroup: \"medium_fast\",\n evolutionChainId: 318,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Solid fundamentals, no unnecessary complexity.\",\n },\n {\n id: 627,\n name: \"Rufflet\",\n types: [\"Normal\", \"Flying\"],\n baseStats: { hp: 70, attack: 83, defense: 50, speed: 60, special: 50 },\n expGroup: \"slow\",\n evolutionChainId: 319,\n rarity: \"common\",\n catchRate: 190,\n description: \"Keeps things simple and maintainable.\",\n },\n {\n id: 628,\n name: \"Braviary\",\n types: [\"Normal\", \"Flying\"],\n baseStats: { hp: 100, attack: 123, defense: 75, speed: 80, special: 75 },\n expGroup: \"slow\",\n evolutionChainId: 319,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"A reliable teammate in any codebase.\",\n },\n {\n id: 629,\n name: \"Vullaby\",\n types: [\"Dark\", \"Flying\"],\n baseStats: { hp: 70, attack: 55, defense: 75, speed: 60, special: 65 },\n expGroup: \"slow\",\n evolutionChainId: 320,\n rarity: \"common\",\n catchRate: 190,\n description: \"Operates best when everyone else has logged off.\",\n },\n {\n id: 630,\n name: \"Mandibuzz\",\n types: [\"Dark\", \"Flying\"],\n baseStats: { hp: 110, attack: 65, defense: 105, speed: 80, special: 95 },\n expGroup: \"slow\",\n evolutionChainId: 320,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"Masters the dark arts of regex and bitwise ops.\",\n },\n {\n id: 631,\n name: \"Heatmor\",\n types: [\"Fire\"],\n baseStats: { hp: 85, attack: 97, defense: 66, speed: 65, special: 105 },\n expGroup: \"medium_fast\",\n evolutionChainId: 321,\n rarity: \"uncommon\",\n catchRate: 90,\n description: \"Hotfixes deployed before you finish your coffee.\",\n },\n {\n id: 632,\n name: \"Durant\",\n types: [\"Bug\", \"Steel\"],\n baseStats: { hp: 58, attack: 109, defense: 112, speed: 109, special: 48 },\n expGroup: \"medium_fast\",\n evolutionChainId: 322,\n rarity: \"uncommon\",\n catchRate: 90,\n description: \"Metamorphoses codebases through careful refactoring.\",\n },\n {\n id: 633,\n name: \"Deino\",\n types: [\"Dark\", \"Dragon\"],\n baseStats: { hp: 52, attack: 65, defense: 50, speed: 38, special: 50 },\n expGroup: \"slow\",\n evolutionChainId: 323,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Masters the dark arts of regex and bitwise ops.\",\n },\n {\n id: 634,\n name: \"Zweilous\",\n types: [\"Dark\", \"Dragon\"],\n baseStats: { hp: 72, attack: 85, defense: 70, speed: 58, special: 70 },\n expGroup: \"slow\",\n evolutionChainId: 323,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Finds vulnerabilities hidden in the shadows.\",\n },\n {\n id: 635,\n name: \"Hydreigon\",\n types: [\"Dark\", \"Dragon\"],\n baseStats: { hp: 92, attack: 105, defense: 90, speed: 98, special: 125 },\n expGroup: \"slow\",\n evolutionChainId: 323,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Operates best when everyone else has logged off.\",\n },\n {\n id: 636,\n name: \"Larvesta\",\n types: [\"Bug\", \"Fire\"],\n baseStats: { hp: 55, attack: 85, defense: 55, speed: 60, special: 55 },\n expGroup: \"slow\",\n evolutionChainId: 324,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Metamorphoses codebases through careful refactoring.\",\n },\n {\n id: 637,\n name: \"Volcarona\",\n types: [\"Bug\", \"Fire\"],\n baseStats: { hp: 85, attack: 60, defense: 65, speed: 100, special: 135 },\n expGroup: \"slow\",\n evolutionChainId: 324,\n rarity: \"rare\",\n catchRate: 15,\n description: \"Crawls through every edge case methodically.\",\n },\n {\n id: 638,\n name: \"Cobalion\",\n types: [\"Steel\", \"Fighting\"],\n baseStats: { hp: 91, attack: 90, defense: 129, speed: 108, special: 90 },\n expGroup: \"slow\",\n evolutionChainId: 325,\n rarity: \"legendary\",\n catchRate: 3,\n description: \"Hardens every endpoint against injection attacks.\",\n },\n {\n id: 639,\n name: \"Terrakion\",\n types: [\"Rock\", \"Fighting\"],\n baseStats: { hp: 91, attack: 129, defense: 90, speed: 108, special: 90 },\n expGroup: \"slow\",\n evolutionChainId: 326,\n rarity: \"legendary\",\n catchRate: 3,\n description: \"Solid as a load-bearing wall in the architecture.\",\n },\n {\n id: 640,\n name: \"Virizion\",\n types: [\"Grass\", \"Fighting\"],\n baseStats: { hp: 91, attack: 90, defense: 72, speed: 108, special: 129 },\n expGroup: \"slow\",\n evolutionChainId: 327,\n rarity: \"legendary\",\n catchRate: 3,\n description: \"Its codebase flourishes with careful nurturing.\",\n },\n {\n id: 641,\n name: \"Tornadus-Incarnate\",\n types: [\"Flying\"],\n baseStats: { hp: 79, attack: 115, defense: 70, speed: 111, special: 125 },\n expGroup: \"slow\",\n evolutionChainId: 328,\n rarity: \"legendary\",\n catchRate: 3,\n description: \"Its abstractions reach impressive heights.\",\n },\n {\n id: 642,\n name: \"Thundurus-Incarnate\",\n types: [\"Electric\", \"Flying\"],\n baseStats: { hp: 79, attack: 115, defense: 70, speed: 111, special: 125 },\n expGroup: \"slow\",\n evolutionChainId: 329,\n rarity: \"legendary\",\n catchRate: 3,\n description: \"Powers through async operations effortlessly.\",\n },\n {\n id: 643,\n name: \"Reshiram\",\n types: [\"Dragon\", \"Fire\"],\n baseStats: { hp: 100, attack: 120, defense: 100, speed: 90, special: 150 },\n expGroup: \"slow\",\n evolutionChainId: 330,\n rarity: \"legendary\",\n catchRate: 3,\n description: \"Commands massive distributed systems with authority.\",\n },\n {\n id: 644,\n name: \"Zekrom\",\n types: [\"Dragon\", \"Electric\"],\n baseStats: { hp: 100, attack: 150, defense: 120, speed: 90, special: 120 },\n expGroup: \"slow\",\n evolutionChainId: 331,\n rarity: \"legendary\",\n catchRate: 3,\n description: \"Commands massive distributed systems with authority.\",\n },\n {\n id: 645,\n name: \"Landorus-Incarnate\",\n types: [\"Ground\", \"Flying\"],\n baseStats: { hp: 89, attack: 125, defense: 90, speed: 101, special: 115 },\n expGroup: \"slow\",\n evolutionChainId: 332,\n rarity: \"legendary\",\n catchRate: 3,\n description: \"Digs deep into root cause analysis.\",\n },\n {\n id: 646,\n name: \"Kyurem\",\n types: [\"Dragon\", \"Ice\"],\n baseStats: { hp: 125, attack: 130, defense: 90, speed: 95, special: 130 },\n expGroup: \"slow\",\n evolutionChainId: 333,\n rarity: \"legendary\",\n catchRate: 3,\n description: \"Breathes fire into stale, unmaintained projects.\",\n },\n {\n id: 647,\n name: \"Keldeo-Ordinary\",\n types: [\"Water\", \"Fighting\"],\n baseStats: { hp: 91, attack: 72, defense: 90, speed: 108, special: 129 },\n expGroup: \"slow\",\n evolutionChainId: 334,\n rarity: \"mythical\",\n catchRate: 3,\n description: \"Flows through complex data pipelines with ease.\",\n },\n {\n id: 648,\n name: \"Meloetta-Aria\",\n types: [\"Normal\", \"Psychic\"],\n baseStats: { hp: 100, attack: 77, defense: 77, speed: 90, special: 128 },\n expGroup: \"slow\",\n evolutionChainId: 335,\n rarity: \"mythical\",\n catchRate: 3,\n description: \"Solid fundamentals, no unnecessary complexity.\",\n },\n {\n id: 649,\n name: \"Genesect\",\n types: [\"Bug\", \"Steel\"],\n baseStats: { hp: 71, attack: 120, defense: 95, speed: 99, special: 120 },\n expGroup: \"slow\",\n evolutionChainId: 336,\n rarity: \"mythical\",\n catchRate: 3,\n description: \"Crawls through every edge case methodically.\",\n },\n\n // \u2500\u2500 Gen 6 \u2014 Kalos (#650\u2013#721) \u2500\u2500\n {\n id: 650,\n name: \"Chespin\",\n types: [\"Grass\"],\n baseStats: { hp: 56, attack: 61, defense: 65, speed: 38, special: 48 },\n expGroup: \"medium_slow\",\n evolutionChainId: 337,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Its codebase flourishes with careful nurturing.\",\n },\n {\n id: 651,\n name: \"Quilladin\",\n types: [\"Grass\"],\n baseStats: { hp: 61, attack: 78, defense: 95, speed: 57, special: 58 },\n expGroup: \"medium_slow\",\n evolutionChainId: 337,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Grows features organically from a solid foundation.\",\n },\n {\n id: 652,\n name: \"Chesnaught\",\n types: [\"Grass\", \"Fighting\"],\n baseStats: { hp: 88, attack: 107, defense: 122, speed: 64, special: 75 },\n expGroup: \"medium_slow\",\n evolutionChainId: 337,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Photosynthesizes coffee into clean code.\",\n },\n {\n id: 653,\n name: \"Fennekin\",\n types: [\"Fire\"],\n baseStats: { hp: 40, attack: 45, defense: 40, speed: 60, special: 62 },\n expGroup: \"medium_slow\",\n evolutionChainId: 338,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Its CI pipeline is always on fire \u2014 in a good way.\",\n },\n {\n id: 654,\n name: \"Braixen\",\n types: [\"Fire\"],\n baseStats: { hp: 59, attack: 59, defense: 58, speed: 73, special: 90 },\n expGroup: \"medium_slow\",\n evolutionChainId: 338,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Its CI pipeline is always on fire \u2014 in a good way.\",\n },\n {\n id: 655,\n name: \"Delphox\",\n types: [\"Fire\", \"Psychic\"],\n baseStats: { hp: 75, attack: 69, defense: 72, speed: 104, special: 114 },\n expGroup: \"medium_slow\",\n evolutionChainId: 338,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Burns through bugs with blazing speed.\",\n },\n {\n id: 656,\n name: \"Froakie\",\n types: [\"Water\"],\n baseStats: { hp: 41, attack: 56, defense: 40, speed: 71, special: 62 },\n expGroup: \"medium_slow\",\n evolutionChainId: 339,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Cools down heated production incidents.\",\n },\n {\n id: 657,\n name: \"Frogadier\",\n types: [\"Water\"],\n baseStats: { hp: 54, attack: 63, defense: 52, speed: 97, special: 83 },\n expGroup: \"medium_slow\",\n evolutionChainId: 339,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Streams data like a well-configured message queue.\",\n },\n {\n id: 658,\n name: \"Greninja\",\n types: [\"Water\", \"Dark\"],\n baseStats: { hp: 72, attack: 95, defense: 67, speed: 122, special: 103 },\n expGroup: \"medium_slow\",\n evolutionChainId: 339,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Streams data like a well-configured message queue.\",\n },\n {\n id: 659,\n name: \"Bunnelby\",\n types: [\"Normal\"],\n baseStats: { hp: 38, attack: 36, defense: 38, speed: 57, special: 36 },\n expGroup: \"medium_fast\",\n evolutionChainId: 340,\n rarity: \"common\",\n catchRate: 255,\n description: \"Keeps things simple and maintainable.\",\n },\n {\n id: 660,\n name: \"Diggersby\",\n types: [\"Normal\", \"Ground\"],\n baseStats: { hp: 85, attack: 56, defense: 77, speed: 78, special: 77 },\n expGroup: \"medium_fast\",\n evolutionChainId: 340,\n rarity: \"uncommon\",\n catchRate: 127,\n description: \"Writes clean, readable code that just works.\",\n },\n {\n id: 661,\n name: \"Fletchling\",\n types: [\"Normal\", \"Flying\"],\n baseStats: { hp: 45, attack: 50, defense: 43, speed: 62, special: 40 },\n expGroup: \"medium_slow\",\n evolutionChainId: 341,\n rarity: \"common\",\n catchRate: 255,\n description: \"A reliable teammate in any codebase.\",\n },\n {\n id: 662,\n name: \"Fletchinder\",\n types: [\"Fire\", \"Flying\"],\n baseStats: { hp: 62, attack: 73, defense: 55, speed: 84, special: 56 },\n expGroup: \"medium_slow\",\n evolutionChainId: 341,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Rewrites legacy code with explosive energy.\",\n },\n {\n id: 663,\n name: \"Talonflame\",\n types: [\"Fire\", \"Flying\"],\n baseStats: { hp: 78, attack: 81, defense: 71, speed: 126, special: 74 },\n expGroup: \"medium_slow\",\n evolutionChainId: 341,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Rewrites legacy code with explosive energy.\",\n },\n {\n id: 664,\n name: \"Scatterbug\",\n types: [\"Bug\"],\n baseStats: { hp: 38, attack: 35, defense: 40, speed: 35, special: 27 },\n expGroup: \"medium_fast\",\n evolutionChainId: 342,\n rarity: \"common\",\n catchRate: 255,\n description: \"Its test coverage is thorough and persistent.\",\n },\n {\n id: 665,\n name: \"Spewpa\",\n types: [\"Bug\"],\n baseStats: { hp: 45, attack: 22, defense: 60, speed: 29, special: 30 },\n expGroup: \"medium_fast\",\n evolutionChainId: 342,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Crawls through every edge case methodically.\",\n },\n {\n id: 666,\n name: \"Vivillon\",\n types: [\"Bug\", \"Flying\"],\n baseStats: { hp: 80, attack: 52, defense: 50, speed: 89, special: 90 },\n expGroup: \"medium_fast\",\n evolutionChainId: 342,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Surprisingly powerful despite its small size.\",\n },\n {\n id: 667,\n name: \"Litleo\",\n types: [\"Fire\", \"Normal\"],\n baseStats: { hp: 62, attack: 50, defense: 58, speed: 72, special: 73 },\n expGroup: \"medium_slow\",\n evolutionChainId: 343,\n rarity: \"common\",\n catchRate: 220,\n description: \"Burns through bugs with blazing speed.\",\n },\n {\n id: 668,\n name: \"Pyroar-Male\",\n types: [\"Fire\", \"Normal\"],\n baseStats: { hp: 86, attack: 68, defense: 72, speed: 106, special: 109 },\n expGroup: \"medium_slow\",\n evolutionChainId: 343,\n rarity: \"uncommon\",\n catchRate: 65,\n description: \"Rewrites legacy code with explosive energy.\",\n },\n {\n id: 669,\n name: \"Flabebe\",\n types: [\"Fairy\"],\n baseStats: { hp: 44, attack: 38, defense: 39, speed: 42, special: 79 },\n expGroup: \"medium_fast\",\n evolutionChainId: 344,\n rarity: \"common\",\n catchRate: 225,\n description: \"Sprinkles syntactic sugar that actually helps.\",\n },\n {\n id: 670,\n name: \"Floette\",\n types: [\"Fairy\"],\n baseStats: { hp: 54, attack: 45, defense: 47, speed: 52, special: 98 },\n expGroup: \"medium_fast\",\n evolutionChainId: 344,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Transforms ugly hacks into elegant solutions.\",\n },\n {\n id: 671,\n name: \"Florges\",\n types: [\"Fairy\"],\n baseStats: { hp: 78, attack: 65, defense: 68, speed: 75, special: 154 },\n expGroup: \"medium_fast\",\n evolutionChainId: 344,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Sprinkles syntactic sugar that actually helps.\",\n },\n {\n id: 672,\n name: \"Skiddo\",\n types: [\"Grass\"],\n baseStats: { hp: 66, attack: 65, defense: 48, speed: 52, special: 62 },\n expGroup: \"medium_fast\",\n evolutionChainId: 345,\n rarity: \"common\",\n catchRate: 200,\n description: \"Branches out into new features with natural ease.\",\n },\n {\n id: 673,\n name: \"Gogoat\",\n types: [\"Grass\"],\n baseStats: { hp: 123, attack: 100, defense: 62, speed: 68, special: 97 },\n expGroup: \"medium_fast\",\n evolutionChainId: 345,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Its codebase flourishes with careful nurturing.\",\n },\n {\n id: 674,\n name: \"Pancham\",\n types: [\"Fighting\"],\n baseStats: { hp: 67, attack: 82, defense: 62, speed: 43, special: 48 },\n expGroup: \"medium_fast\",\n evolutionChainId: 346,\n rarity: \"common\",\n catchRate: 220,\n description: \"Punches through blockers in code review.\",\n },\n {\n id: 675,\n name: \"Pangoro\",\n types: [\"Fighting\", \"Dark\"],\n baseStats: { hp: 95, attack: 124, defense: 78, speed: 58, special: 71 },\n expGroup: \"medium_fast\",\n evolutionChainId: 346,\n rarity: \"uncommon\",\n catchRate: 65,\n description: \"Fights through technical debt with determination.\",\n },\n {\n id: 676,\n name: \"Furfrou\",\n types: [\"Normal\"],\n baseStats: { hp: 75, attack: 80, defense: 60, speed: 102, special: 90 },\n expGroup: \"medium_fast\",\n evolutionChainId: 347,\n rarity: \"common\",\n catchRate: 160,\n description: \"The everyday workhorse of any development team.\",\n },\n {\n id: 677,\n name: \"Espurr\",\n types: [\"Psychic\"],\n baseStats: { hp: 62, attack: 48, defense: 54, speed: 68, special: 63 },\n expGroup: \"medium_fast\",\n evolutionChainId: 348,\n rarity: \"common\",\n catchRate: 190,\n description: \"Its architecture decisions are eerily prescient.\",\n },\n {\n id: 678,\n name: \"Meowstic-Male\",\n types: [\"Psychic\"],\n baseStats: { hp: 74, attack: 48, defense: 76, speed: 104, special: 83 },\n expGroup: \"medium_fast\",\n evolutionChainId: 348,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Debugs production issues through pure intuition.\",\n },\n {\n id: 679,\n name: \"Honedge\",\n types: [\"Steel\", \"Ghost\"],\n baseStats: { hp: 45, attack: 80, defense: 100, speed: 28, special: 37 },\n expGroup: \"medium_fast\",\n evolutionChainId: 349,\n rarity: \"common\",\n catchRate: 180,\n description: \"Its type system is as rigid as steel.\",\n },\n {\n id: 680,\n name: \"Doublade\",\n types: [\"Steel\", \"Ghost\"],\n baseStats: { hp: 59, attack: 110, defense: 150, speed: 35, special: 49 },\n expGroup: \"medium_fast\",\n evolutionChainId: 349,\n rarity: \"uncommon\",\n catchRate: 90,\n description: \"Its type system is as rigid as steel.\",\n },\n {\n id: 681,\n name: \"Aegislash-Shield\",\n types: [\"Steel\", \"Ghost\"],\n baseStats: { hp: 60, attack: 50, defense: 140, speed: 60, special: 140 },\n expGroup: \"medium_fast\",\n evolutionChainId: 349,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Builds infrastructure that withstands any load.\",\n },\n {\n id: 682,\n name: \"Spritzee\",\n types: [\"Fairy\"],\n baseStats: { hp: 78, attack: 52, defense: 60, speed: 23, special: 65 },\n expGroup: \"medium_fast\",\n evolutionChainId: 350,\n rarity: \"common\",\n catchRate: 200,\n description: \"Sprinkles syntactic sugar that actually helps.\",\n },\n {\n id: 683,\n name: \"Aromatisse\",\n types: [\"Fairy\"],\n baseStats: { hp: 101, attack: 72, defense: 72, speed: 29, special: 99 },\n expGroup: \"medium_fast\",\n evolutionChainId: 350,\n rarity: \"uncommon\",\n catchRate: 140,\n description: \"Sprinkles syntactic sugar that actually helps.\",\n },\n {\n id: 684,\n name: \"Swirlix\",\n types: [\"Fairy\"],\n baseStats: { hp: 62, attack: 48, defense: 66, speed: 49, special: 59 },\n expGroup: \"medium_fast\",\n evolutionChainId: 351,\n rarity: \"common\",\n catchRate: 200,\n description: \"Enchants users with delightful UX polish.\",\n },\n {\n id: 685,\n name: \"Slurpuff\",\n types: [\"Fairy\"],\n baseStats: { hp: 82, attack: 80, defense: 86, speed: 72, special: 85 },\n expGroup: \"medium_fast\",\n evolutionChainId: 351,\n rarity: \"uncommon\",\n catchRate: 140,\n description: \"Makes complex code look magically simple.\",\n },\n {\n id: 686,\n name: \"Inkay\",\n types: [\"Dark\", \"Psychic\"],\n baseStats: { hp: 53, attack: 54, defense: 53, speed: 45, special: 46 },\n expGroup: \"medium_fast\",\n evolutionChainId: 352,\n rarity: \"common\",\n catchRate: 190,\n description: \"Operates best when everyone else has logged off.\",\n },\n {\n id: 687,\n name: \"Malamar\",\n types: [\"Dark\", \"Psychic\"],\n baseStats: { hp: 86, attack: 92, defense: 88, speed: 73, special: 75 },\n expGroup: \"medium_fast\",\n evolutionChainId: 352,\n rarity: \"uncommon\",\n catchRate: 80,\n description: \"Thrives in late-night debugging sessions.\",\n },\n {\n id: 688,\n name: \"Binacle\",\n types: [\"Rock\", \"Water\"],\n baseStats: { hp: 42, attack: 52, defense: 67, speed: 50, special: 56 },\n expGroup: \"medium_fast\",\n evolutionChainId: 353,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Withstands the heaviest traffic spikes.\",\n },\n {\n id: 689,\n name: \"Barbaracle\",\n types: [\"Rock\", \"Water\"],\n baseStats: { hp: 72, attack: 105, defense: 115, speed: 68, special: 86 },\n expGroup: \"medium_fast\",\n evolutionChainId: 353,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Builds unbreakable infrastructure that lasts.\",\n },\n {\n id: 690,\n name: \"Skrelp\",\n types: [\"Poison\", \"Water\"],\n baseStats: { hp: 50, attack: 60, defense: 60, speed: 30, special: 60 },\n expGroup: \"medium_fast\",\n evolutionChainId: 354,\n rarity: \"common\",\n catchRate: 225,\n description: \"Its code reviews are sharp but constructive.\",\n },\n {\n id: 691,\n name: \"Dragalge\",\n types: [\"Poison\", \"Dragon\"],\n baseStats: { hp: 65, attack: 75, defense: 90, speed: 44, special: 123 },\n expGroup: \"medium_fast\",\n evolutionChainId: 354,\n rarity: \"rare\",\n catchRate: 55,\n description: \"Its code reviews are sharp but constructive.\",\n },\n {\n id: 692,\n name: \"Clauncher\",\n types: [\"Water\"],\n baseStats: { hp: 50, attack: 53, defense: 62, speed: 44, special: 63 },\n expGroup: \"slow\",\n evolutionChainId: 355,\n rarity: \"common\",\n catchRate: 225,\n description: \"Its code flows naturally from function to function.\",\n },\n {\n id: 693,\n name: \"Clawitzer\",\n types: [\"Water\"],\n baseStats: { hp: 71, attack: 73, defense: 88, speed: 59, special: 120 },\n expGroup: \"slow\",\n evolutionChainId: 355,\n rarity: \"rare\",\n catchRate: 55,\n description: \"Streams data like a well-configured message queue.\",\n },\n {\n id: 694,\n name: \"Helioptile\",\n types: [\"Electric\", \"Normal\"],\n baseStats: { hp: 44, attack: 38, defense: 33, speed: 70, special: 61 },\n expGroup: \"medium_fast\",\n evolutionChainId: 356,\n rarity: \"common\",\n catchRate: 190,\n description: \"Its event loop never blocks.\",\n },\n {\n id: 695,\n name: \"Heliolisk\",\n types: [\"Electric\", \"Normal\"],\n baseStats: { hp: 62, attack: 55, defense: 52, speed: 109, special: 109 },\n expGroup: \"medium_fast\",\n evolutionChainId: 356,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Powers through async operations effortlessly.\",\n },\n {\n id: 696,\n name: \"Tyrunt\",\n types: [\"Rock\", \"Dragon\"],\n baseStats: { hp: 58, attack: 89, defense: 77, speed: 48, special: 45 },\n expGroup: \"medium_fast\",\n evolutionChainId: 357,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Its code is hardened against every attack vector.\",\n },\n {\n id: 697,\n name: \"Tyrantrum\",\n types: [\"Rock\", \"Dragon\"],\n baseStats: { hp: 82, attack: 121, defense: 119, speed: 71, special: 69 },\n expGroup: \"medium_fast\",\n evolutionChainId: 357,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Withstands the heaviest traffic spikes.\",\n },\n {\n id: 698,\n name: \"Amaura\",\n types: [\"Rock\", \"Ice\"],\n baseStats: { hp: 77, attack: 59, defense: 50, speed: 46, special: 67 },\n expGroup: \"medium_fast\",\n evolutionChainId: 358,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Solid as a load-bearing wall in the architecture.\",\n },\n {\n id: 699,\n name: \"Aurorus\",\n types: [\"Rock\", \"Ice\"],\n baseStats: { hp: 123, attack: 77, defense: 72, speed: 58, special: 99 },\n expGroup: \"medium_fast\",\n evolutionChainId: 358,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Solid as a load-bearing wall in the architecture.\",\n },\n {\n id: 700,\n name: \"Sylveon\",\n types: [\"Fairy\"],\n baseStats: { hp: 95, attack: 65, defense: 65, speed: 60, special: 130 },\n expGroup: \"medium_fast\",\n evolutionChainId: 67,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Enchants users with delightful UX polish.\",\n },\n {\n id: 701,\n name: \"Hawlucha\",\n types: [\"Fighting\", \"Flying\"],\n baseStats: { hp: 78, attack: 92, defense: 75, speed: 118, special: 74 },\n expGroup: \"medium_fast\",\n evolutionChainId: 359,\n rarity: \"uncommon\",\n catchRate: 100,\n description: \"Its PR reviews pack a punch.\",\n },\n {\n id: 702,\n name: \"Dedenne\",\n types: [\"Electric\", \"Fairy\"],\n baseStats: { hp: 67, attack: 58, defense: 57, speed: 101, special: 81 },\n expGroup: \"medium_fast\",\n evolutionChainId: 360,\n rarity: \"common\",\n catchRate: 180,\n description: \"Its event loop never blocks.\",\n },\n {\n id: 703,\n name: \"Carbink\",\n types: [\"Rock\", \"Fairy\"],\n baseStats: { hp: 50, attack: 50, defense: 150, speed: 50, special: 150 },\n expGroup: \"slow\",\n evolutionChainId: 361,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"Dependable like bedrock under your deployment.\",\n },\n {\n id: 704,\n name: \"Goomy\",\n types: [\"Dragon\"],\n baseStats: { hp: 45, attack: 50, defense: 35, speed: 40, special: 75 },\n expGroup: \"slow\",\n evolutionChainId: 362,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Breathes fire into stale, unmaintained projects.\",\n },\n {\n id: 705,\n name: \"Sliggoo\",\n types: [\"Dragon\"],\n baseStats: { hp: 68, attack: 75, defense: 53, speed: 60, special: 113 },\n expGroup: \"slow\",\n evolutionChainId: 362,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Breathes fire into stale, unmaintained projects.\",\n },\n {\n id: 706,\n name: \"Goodra\",\n types: [\"Dragon\"],\n baseStats: { hp: 90, attack: 100, defense: 70, speed: 80, special: 150 },\n expGroup: \"slow\",\n evolutionChainId: 362,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Hoards knowledge of ancient APIs and protocols.\",\n },\n {\n id: 707,\n name: \"Klefki\",\n types: [\"Steel\", \"Fairy\"],\n baseStats: { hp: 57, attack: 80, defense: 91, speed: 75, special: 87 },\n expGroup: \"fast\",\n evolutionChainId: 363,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Builds infrastructure that withstands any load.\",\n },\n {\n id: 708,\n name: \"Phantump\",\n types: [\"Ghost\", \"Grass\"],\n baseStats: { hp: 43, attack: 70, defense: 48, speed: 38, special: 60 },\n expGroup: \"medium_fast\",\n evolutionChainId: 364,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Its code is invisible until you need it most.\",\n },\n {\n id: 709,\n name: \"Trevenant\",\n types: [\"Ghost\", \"Grass\"],\n baseStats: { hp: 85, attack: 110, defense: 76, speed: 56, special: 82 },\n expGroup: \"medium_fast\",\n evolutionChainId: 364,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"Debugs phantom issues in production at 3 AM.\",\n },\n {\n id: 710,\n name: \"Pumpkaboo-Average\",\n types: [\"Ghost\", \"Grass\"],\n baseStats: { hp: 49, attack: 66, defense: 70, speed: 51, special: 55 },\n expGroup: \"medium_fast\",\n evolutionChainId: 365,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Debugs phantom issues in production at 3 AM.\",\n },\n {\n id: 711,\n name: \"Gourgeist-Average\",\n types: [\"Ghost\", \"Grass\"],\n baseStats: { hp: 65, attack: 90, defense: 122, speed: 84, special: 75 },\n expGroup: \"medium_fast\",\n evolutionChainId: 365,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"Its code is invisible until you need it most.\",\n },\n {\n id: 712,\n name: \"Bergmite\",\n types: [\"Ice\"],\n baseStats: { hp: 55, attack: 69, defense: 85, speed: 28, special: 35 },\n expGroup: \"medium_fast\",\n evolutionChainId: 366,\n rarity: \"common\",\n catchRate: 190,\n description: \"Keeps cool under tight deployment deadlines.\",\n },\n {\n id: 713,\n name: \"Avalugg\",\n types: [\"Ice\"],\n baseStats: { hp: 95, attack: 117, defense: 184, speed: 28, special: 46 },\n expGroup: \"medium_fast\",\n evolutionChainId: 366,\n rarity: \"rare\",\n catchRate: 55,\n description: \"Crystallizes complex requirements into clear specs.\",\n },\n {\n id: 714,\n name: \"Noibat\",\n types: [\"Flying\", \"Dragon\"],\n baseStats: { hp: 40, attack: 30, defense: 35, speed: 55, special: 45 },\n expGroup: \"medium_fast\",\n evolutionChainId: 367,\n rarity: \"common\",\n catchRate: 190,\n description: \"Zooms through code reviews at altitude.\",\n },\n {\n id: 715,\n name: \"Noivern\",\n types: [\"Flying\", \"Dragon\"],\n baseStats: { hp: 85, attack: 70, defense: 80, speed: 123, special: 97 },\n expGroup: \"medium_fast\",\n evolutionChainId: 367,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Floats above complexity with elegant solutions.\",\n },\n {\n id: 716,\n name: \"Xerneas\",\n types: [\"Fairy\"],\n baseStats: { hp: 126, attack: 131, defense: 95, speed: 99, special: 131 },\n expGroup: \"slow\",\n evolutionChainId: 368,\n rarity: \"legendary\",\n catchRate: 45,\n description: \"Transforms ugly hacks into elegant solutions.\",\n },\n {\n id: 717,\n name: \"Yveltal\",\n types: [\"Dark\", \"Flying\"],\n baseStats: { hp: 126, attack: 131, defense: 95, speed: 99, special: 131 },\n expGroup: \"slow\",\n evolutionChainId: 369,\n rarity: \"legendary\",\n catchRate: 45,\n description: \"Finds vulnerabilities hidden in the shadows.\",\n },\n {\n id: 718,\n name: \"Zygarde-50\",\n types: [\"Dragon\", \"Ground\"],\n baseStats: { hp: 108, attack: 100, defense: 121, speed: 95, special: 95 },\n expGroup: \"slow\",\n evolutionChainId: 370,\n rarity: \"legendary\",\n catchRate: 3,\n description: \"Its codebases are legendary in scale and power.\",\n },\n {\n id: 719,\n name: \"Diancie\",\n types: [\"Rock\", \"Fairy\"],\n baseStats: { hp: 50, attack: 100, defense: 150, speed: 50, special: 150 },\n expGroup: \"slow\",\n evolutionChainId: 371,\n rarity: \"mythical\",\n catchRate: 3,\n description: \"Withstands the heaviest traffic spikes.\",\n },\n {\n id: 720,\n name: \"Hoopa\",\n types: [\"Psychic\", \"Ghost\"],\n baseStats: { hp: 80, attack: 110, defense: 60, speed: 70, special: 150 },\n expGroup: \"slow\",\n evolutionChainId: 372,\n rarity: \"mythical\",\n catchRate: 3,\n description: \"Debugs production issues through pure intuition.\",\n },\n {\n id: 721,\n name: \"Volcanion\",\n types: [\"Fire\", \"Water\"],\n baseStats: { hp: 80, attack: 110, defense: 120, speed: 70, special: 130 },\n expGroup: \"slow\",\n evolutionChainId: 373,\n rarity: \"mythical\",\n catchRate: 3,\n description: \"Compiles so fast the CPU starts sweating.\",\n },\n\n // \u2500\u2500 Gen 7 \u2014 Alola (#722\u2013#809) \u2500\u2500\n {\n id: 722,\n name: \"Rowlet\",\n types: [\"Grass\", \"Flying\"],\n baseStats: { hp: 68, attack: 55, defense: 55, speed: 42, special: 50 },\n expGroup: \"medium_slow\",\n evolutionChainId: 374,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Grows features organically from a solid foundation.\",\n },\n {\n id: 723,\n name: \"Dartrix\",\n types: [\"Grass\", \"Flying\"],\n baseStats: { hp: 78, attack: 75, defense: 75, speed: 52, special: 70 },\n expGroup: \"medium_slow\",\n evolutionChainId: 374,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Photosynthesizes coffee into clean code.\",\n },\n {\n id: 724,\n name: \"Decidueye\",\n types: [\"Grass\", \"Ghost\"],\n baseStats: { hp: 78, attack: 107, defense: 75, speed: 70, special: 100 },\n expGroup: \"medium_slow\",\n evolutionChainId: 374,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Plants the seeds for sustainable architecture.\",\n },\n {\n id: 725,\n name: \"Litten\",\n types: [\"Fire\"],\n baseStats: { hp: 45, attack: 65, defense: 40, speed: 70, special: 60 },\n expGroup: \"medium_slow\",\n evolutionChainId: 375,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Compiles so fast the CPU starts sweating.\",\n },\n {\n id: 726,\n name: \"Torracat\",\n types: [\"Fire\"],\n baseStats: { hp: 65, attack: 85, defense: 50, speed: 90, special: 80 },\n expGroup: \"medium_slow\",\n evolutionChainId: 375,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Burns through bugs with blazing speed.\",\n },\n {\n id: 727,\n name: \"Incineroar\",\n types: [\"Fire\", \"Dark\"],\n baseStats: { hp: 95, attack: 115, defense: 90, speed: 60, special: 90 },\n expGroup: \"medium_slow\",\n evolutionChainId: 375,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Rewrites legacy code with explosive energy.\",\n },\n {\n id: 728,\n name: \"Popplio\",\n types: [\"Water\"],\n baseStats: { hp: 50, attack: 54, defense: 54, speed: 40, special: 66 },\n expGroup: \"medium_slow\",\n evolutionChainId: 376,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Its code flows naturally from function to function.\",\n },\n {\n id: 729,\n name: \"Brionne\",\n types: [\"Water\"],\n baseStats: { hp: 60, attack: 69, defense: 69, speed: 50, special: 91 },\n expGroup: \"medium_slow\",\n evolutionChainId: 376,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Its code flows naturally from function to function.\",\n },\n {\n id: 730,\n name: \"Primarina\",\n types: [\"Water\", \"Fairy\"],\n baseStats: { hp: 80, attack: 74, defense: 74, speed: 60, special: 126 },\n expGroup: \"medium_slow\",\n evolutionChainId: 376,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Streams data like a well-configured message queue.\",\n },\n {\n id: 731,\n name: \"Pikipek\",\n types: [\"Normal\", \"Flying\"],\n baseStats: { hp: 35, attack: 75, defense: 30, speed: 65, special: 30 },\n expGroup: \"medium_fast\",\n evolutionChainId: 377,\n rarity: \"common\",\n catchRate: 255,\n description: \"The everyday workhorse of any development team.\",\n },\n {\n id: 732,\n name: \"Trumbeak\",\n types: [\"Normal\", \"Flying\"],\n baseStats: { hp: 55, attack: 85, defense: 50, speed: 75, special: 50 },\n expGroup: \"medium_fast\",\n evolutionChainId: 377,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Keeps things simple and maintainable.\",\n },\n {\n id: 733,\n name: \"Toucannon\",\n types: [\"Normal\", \"Flying\"],\n baseStats: { hp: 80, attack: 120, defense: 75, speed: 60, special: 75 },\n expGroup: \"medium_fast\",\n evolutionChainId: 377,\n rarity: \"rare\",\n catchRate: 45,\n description: \"The everyday workhorse of any development team.\",\n },\n {\n id: 734,\n name: \"Yungoos\",\n types: [\"Normal\"],\n baseStats: { hp: 48, attack: 70, defense: 30, speed: 45, special: 30 },\n expGroup: \"medium_fast\",\n evolutionChainId: 378,\n rarity: \"common\",\n catchRate: 255,\n description: \"The everyday workhorse of any development team.\",\n },\n {\n id: 735,\n name: \"Gumshoos\",\n types: [\"Normal\"],\n baseStats: { hp: 88, attack: 110, defense: 60, speed: 45, special: 60 },\n expGroup: \"medium_fast\",\n evolutionChainId: 378,\n rarity: \"uncommon\",\n catchRate: 127,\n description: \"Writes clean, readable code that just works.\",\n },\n {\n id: 736,\n name: \"Grubbin\",\n types: [\"Bug\"],\n baseStats: { hp: 47, attack: 62, defense: 45, speed: 46, special: 55 },\n expGroup: \"medium_fast\",\n evolutionChainId: 379,\n rarity: \"common\",\n catchRate: 255,\n description: \"Metamorphoses codebases through careful refactoring.\",\n },\n {\n id: 737,\n name: \"Charjabug\",\n types: [\"Bug\", \"Electric\"],\n baseStats: { hp: 57, attack: 82, defense: 95, speed: 36, special: 75 },\n expGroup: \"medium_fast\",\n evolutionChainId: 379,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Metamorphoses codebases through careful refactoring.\",\n },\n {\n id: 738,\n name: \"Vikavolt\",\n types: [\"Bug\", \"Electric\"],\n baseStats: { hp: 77, attack: 70, defense: 90, speed: 43, special: 145 },\n expGroup: \"medium_fast\",\n evolutionChainId: 379,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Surprisingly powerful despite its small size.\",\n },\n {\n id: 739,\n name: \"Crabrawler\",\n types: [\"Fighting\"],\n baseStats: { hp: 47, attack: 82, defense: 57, speed: 63, special: 47 },\n expGroup: \"medium_fast\",\n evolutionChainId: 380,\n rarity: \"common\",\n catchRate: 225,\n description: \"Trains hard on algorithmic challenges daily.\",\n },\n {\n id: 740,\n name: \"Crabominable\",\n types: [\"Fighting\", \"Ice\"],\n baseStats: { hp: 97, attack: 132, defense: 77, speed: 43, special: 67 },\n expGroup: \"medium_fast\",\n evolutionChainId: 380,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"Never backs down from a complex refactor.\",\n },\n {\n id: 741,\n name: \"Oricorio-Baile\",\n types: [\"Fire\", \"Flying\"],\n baseStats: { hp: 75, attack: 70, defense: 70, speed: 93, special: 98 },\n expGroup: \"medium_fast\",\n evolutionChainId: 381,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Its CI pipeline is always on fire \u2014 in a good way.\",\n },\n {\n id: 742,\n name: \"Cutiefly\",\n types: [\"Bug\", \"Fairy\"],\n baseStats: { hp: 40, attack: 45, defense: 40, speed: 84, special: 55 },\n expGroup: \"medium_fast\",\n evolutionChainId: 382,\n rarity: \"common\",\n catchRate: 190,\n description: \"Finds bugs nobody else can spot.\",\n },\n {\n id: 743,\n name: \"Ribombee\",\n types: [\"Bug\", \"Fairy\"],\n baseStats: { hp: 60, attack: 55, defense: 60, speed: 124, special: 95 },\n expGroup: \"medium_fast\",\n evolutionChainId: 382,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Surprisingly powerful despite its small size.\",\n },\n {\n id: 744,\n name: \"Rockruff\",\n types: [\"Rock\"],\n baseStats: { hp: 45, attack: 65, defense: 40, speed: 60, special: 40 },\n expGroup: \"medium_fast\",\n evolutionChainId: 383,\n rarity: \"common\",\n catchRate: 190,\n description: \"Its code is hardened against every attack vector.\",\n },\n {\n id: 745,\n name: \"Lycanroc-Midday\",\n types: [\"Rock\"],\n baseStats: { hp: 75, attack: 115, defense: 65, speed: 112, special: 65 },\n expGroup: \"medium_fast\",\n evolutionChainId: 383,\n rarity: \"uncommon\",\n catchRate: 90,\n description: \"Its code is hardened against every attack vector.\",\n },\n {\n id: 746,\n name: \"Wishiwashi-Solo\",\n types: [\"Water\"],\n baseStats: { hp: 45, attack: 20, defense: 20, speed: 40, special: 25 },\n expGroup: \"fast\",\n evolutionChainId: 384,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"Cools down heated production incidents.\",\n },\n {\n id: 747,\n name: \"Mareanie\",\n types: [\"Poison\", \"Water\"],\n baseStats: { hp: 50, attack: 53, defense: 62, speed: 45, special: 52 },\n expGroup: \"medium_fast\",\n evolutionChainId: 385,\n rarity: \"common\",\n catchRate: 190,\n description: \"Detoxifies spaghetti code into clean modules.\",\n },\n {\n id: 748,\n name: \"Toxapex\",\n types: [\"Poison\", \"Water\"],\n baseStats: { hp: 50, attack: 63, defense: 152, speed: 35, special: 142 },\n expGroup: \"medium_fast\",\n evolutionChainId: 385,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Knows every anti-pattern by heart.\",\n },\n {\n id: 749,\n name: \"Mudbray\",\n types: [\"Ground\"],\n baseStats: { hp: 70, attack: 100, defense: 70, speed: 45, special: 55 },\n expGroup: \"medium_fast\",\n evolutionChainId: 386,\n rarity: \"common\",\n catchRate: 190,\n description: \"Stable as the earth beneath your server rack.\",\n },\n {\n id: 750,\n name: \"Mudsdale\",\n types: [\"Ground\"],\n baseStats: { hp: 100, attack: 125, defense: 100, speed: 35, special: 85 },\n expGroup: \"medium_fast\",\n evolutionChainId: 386,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"Digs deep into root cause analysis.\",\n },\n {\n id: 751,\n name: \"Dewpider\",\n types: [\"Water\", \"Bug\"],\n baseStats: { hp: 38, attack: 40, defense: 52, speed: 27, special: 72 },\n expGroup: \"medium_fast\",\n evolutionChainId: 387,\n rarity: \"common\",\n catchRate: 200,\n description: \"Flows through complex data pipelines with ease.\",\n },\n {\n id: 752,\n name: \"Araquanid\",\n types: [\"Water\", \"Bug\"],\n baseStats: { hp: 68, attack: 70, defense: 92, speed: 42, special: 132 },\n expGroup: \"medium_fast\",\n evolutionChainId: 387,\n rarity: \"uncommon\",\n catchRate: 100,\n description: \"Handles backpressure like a pro.\",\n },\n {\n id: 753,\n name: \"Fomantis\",\n types: [\"Grass\"],\n baseStats: { hp: 40, attack: 55, defense: 35, speed: 35, special: 50 },\n expGroup: \"medium_fast\",\n evolutionChainId: 388,\n rarity: \"common\",\n catchRate: 190,\n description: \"Its codebase flourishes with careful nurturing.\",\n },\n {\n id: 754,\n name: \"Lurantis\",\n types: [\"Grass\"],\n baseStats: { hp: 70, attack: 105, defense: 90, speed: 45, special: 90 },\n expGroup: \"medium_fast\",\n evolutionChainId: 388,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Plants the seeds for sustainable architecture.\",\n },\n {\n id: 755,\n name: \"Morelull\",\n types: [\"Grass\", \"Fairy\"],\n baseStats: { hp: 40, attack: 35, defense: 55, speed: 15, special: 75 },\n expGroup: \"medium_fast\",\n evolutionChainId: 389,\n rarity: \"common\",\n catchRate: 190,\n description: \"Photosynthesizes coffee into clean code.\",\n },\n {\n id: 756,\n name: \"Shiinotic\",\n types: [\"Grass\", \"Fairy\"],\n baseStats: { hp: 60, attack: 45, defense: 80, speed: 30, special: 100 },\n expGroup: \"medium_fast\",\n evolutionChainId: 389,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Grows features organically from a solid foundation.\",\n },\n {\n id: 757,\n name: \"Salandit\",\n types: [\"Poison\", \"Fire\"],\n baseStats: { hp: 48, attack: 44, defense: 40, speed: 77, special: 71 },\n expGroup: \"medium_fast\",\n evolutionChainId: 390,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Injects helpful logging into legacy systems.\",\n },\n {\n id: 758,\n name: \"Salazzle\",\n types: [\"Poison\", \"Fire\"],\n baseStats: { hp: 68, attack: 64, defense: 60, speed: 117, special: 111 },\n expGroup: \"medium_fast\",\n evolutionChainId: 390,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Injects helpful logging into legacy systems.\",\n },\n {\n id: 759,\n name: \"Stufful\",\n types: [\"Normal\", \"Fighting\"],\n baseStats: { hp: 70, attack: 75, defense: 50, speed: 50, special: 50 },\n expGroup: \"medium_fast\",\n evolutionChainId: 391,\n rarity: \"uncommon\",\n catchRate: 140,\n description: \"A reliable teammate in any codebase.\",\n },\n {\n id: 760,\n name: \"Bewear\",\n types: [\"Normal\", \"Fighting\"],\n baseStats: { hp: 120, attack: 125, defense: 80, speed: 60, special: 60 },\n expGroup: \"medium_fast\",\n evolutionChainId: 391,\n rarity: \"uncommon\",\n catchRate: 70,\n description: \"The everyday workhorse of any development team.\",\n },\n {\n id: 761,\n name: \"Bounsweet\",\n types: [\"Grass\"],\n baseStats: { hp: 42, attack: 30, defense: 38, speed: 32, special: 38 },\n expGroup: \"medium_slow\",\n evolutionChainId: 392,\n rarity: \"common\",\n catchRate: 235,\n description: \"Photosynthesizes coffee into clean code.\",\n },\n {\n id: 762,\n name: \"Steenee\",\n types: [\"Grass\"],\n baseStats: { hp: 52, attack: 40, defense: 48, speed: 62, special: 48 },\n expGroup: \"medium_slow\",\n evolutionChainId: 392,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Branches out into new features with natural ease.\",\n },\n {\n id: 763,\n name: \"Tsareena\",\n types: [\"Grass\"],\n baseStats: { hp: 72, attack: 120, defense: 98, speed: 72, special: 98 },\n expGroup: \"medium_slow\",\n evolutionChainId: 392,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Branches out into new features with natural ease.\",\n },\n {\n id: 764,\n name: \"Comfey\",\n types: [\"Fairy\"],\n baseStats: { hp: 51, attack: 52, defense: 90, speed: 100, special: 110 },\n expGroup: \"fast\",\n evolutionChainId: 393,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"Its code reviews leave everyone feeling enchanted.\",\n },\n {\n id: 765,\n name: \"Oranguru\",\n types: [\"Normal\", \"Psychic\"],\n baseStats: { hp: 90, attack: 60, defense: 80, speed: 60, special: 110 },\n expGroup: \"slow\",\n evolutionChainId: 394,\n rarity: \"rare\",\n catchRate: 45,\n description: \"The everyday workhorse of any development team.\",\n },\n {\n id: 766,\n name: \"Passimian\",\n types: [\"Fighting\"],\n baseStats: { hp: 100, attack: 120, defense: 90, speed: 80, special: 60 },\n expGroup: \"slow\",\n evolutionChainId: 395,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Fights through technical debt with determination.\",\n },\n {\n id: 767,\n name: \"Wimpod\",\n types: [\"Bug\", \"Water\"],\n baseStats: { hp: 25, attack: 35, defense: 40, speed: 80, special: 30 },\n expGroup: \"medium_fast\",\n evolutionChainId: 396,\n rarity: \"uncommon\",\n catchRate: 90,\n description: \"Finds bugs nobody else can spot.\",\n },\n {\n id: 768,\n name: \"Golisopod\",\n types: [\"Bug\", \"Water\"],\n baseStats: { hp: 75, attack: 125, defense: 140, speed: 40, special: 90 },\n expGroup: \"medium_fast\",\n evolutionChainId: 396,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Surprisingly powerful despite its small size.\",\n },\n {\n id: 769,\n name: \"Sandygast\",\n types: [\"Ghost\", \"Ground\"],\n baseStats: { hp: 55, attack: 55, defense: 80, speed: 15, special: 70 },\n expGroup: \"medium_fast\",\n evolutionChainId: 397,\n rarity: \"uncommon\",\n catchRate: 140,\n description: \"Appears silently in git blame for critical fixes.\",\n },\n {\n id: 770,\n name: \"Palossand\",\n types: [\"Ghost\", \"Ground\"],\n baseStats: { hp: 85, attack: 75, defense: 110, speed: 35, special: 100 },\n expGroup: \"medium_fast\",\n evolutionChainId: 397,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"Haunts legacy codebases seeking forgotten bugs.\",\n },\n {\n id: 771,\n name: \"Pyukumuku\",\n types: [\"Water\"],\n baseStats: { hp: 55, attack: 60, defense: 130, speed: 5, special: 130 },\n expGroup: \"fast\",\n evolutionChainId: 398,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"Flows through complex data pipelines with ease.\",\n },\n {\n id: 772,\n name: \"Type: Null\",\n types: [\"Normal\"],\n baseStats: { hp: 95, attack: 95, defense: 95, speed: 59, special: 95 },\n expGroup: \"slow\",\n evolutionChainId: 399,\n rarity: \"legendary\",\n catchRate: 3,\n description: \"A reliable teammate in any codebase.\",\n },\n {\n id: 773,\n name: \"Silvally\",\n types: [\"Normal\"],\n baseStats: { hp: 95, attack: 95, defense: 95, speed: 95, special: 95 },\n expGroup: \"slow\",\n evolutionChainId: 399,\n rarity: \"legendary\",\n catchRate: 3,\n description: \"Writes clean, readable code that just works.\",\n },\n {\n id: 774,\n name: \"Minior-Red-Meteor\",\n types: [\"Rock\", \"Flying\"],\n baseStats: { hp: 60, attack: 60, defense: 100, speed: 60, special: 100 },\n expGroup: \"medium_slow\",\n evolutionChainId: 400,\n rarity: \"rare\",\n catchRate: 30,\n description: \"Dependable like bedrock under your deployment.\",\n },\n {\n id: 775,\n name: \"Komala\",\n types: [\"Normal\"],\n baseStats: { hp: 65, attack: 115, defense: 65, speed: 65, special: 95 },\n expGroup: \"slow\",\n evolutionChainId: 401,\n rarity: \"rare\",\n catchRate: 45,\n description: \"A reliable teammate in any codebase.\",\n },\n {\n id: 776,\n name: \"Turtonator\",\n types: [\"Fire\", \"Dragon\"],\n baseStats: { hp: 60, attack: 78, defense: 135, speed: 36, special: 91 },\n expGroup: \"medium_fast\",\n evolutionChainId: 402,\n rarity: \"uncommon\",\n catchRate: 70,\n description: \"Hotfixes deployed before you finish your coffee.\",\n },\n {\n id: 777,\n name: \"Togedemaru\",\n types: [\"Electric\", \"Steel\"],\n baseStats: { hp: 65, attack: 98, defense: 63, speed: 96, special: 73 },\n expGroup: \"medium_fast\",\n evolutionChainId: 403,\n rarity: \"common\",\n catchRate: 180,\n description: \"Lightning-fast response times in production.\",\n },\n {\n id: 778,\n name: \"Mimikyu-Disguised\",\n types: [\"Ghost\", \"Fairy\"],\n baseStats: { hp: 55, attack: 90, defense: 80, speed: 96, special: 105 },\n expGroup: \"medium_fast\",\n evolutionChainId: 404,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Debugs phantom issues in production at 3 AM.\",\n },\n {\n id: 779,\n name: \"Bruxish\",\n types: [\"Water\", \"Psychic\"],\n baseStats: { hp: 68, attack: 105, defense: 70, speed: 92, special: 70 },\n expGroup: \"medium_fast\",\n evolutionChainId: 405,\n rarity: \"uncommon\",\n catchRate: 80,\n description: \"Handles backpressure like a pro.\",\n },\n {\n id: 780,\n name: \"Drampa\",\n types: [\"Normal\", \"Dragon\"],\n baseStats: { hp: 78, attack: 60, defense: 85, speed: 36, special: 135 },\n expGroup: \"medium_fast\",\n evolutionChainId: 406,\n rarity: \"uncommon\",\n catchRate: 70,\n description: \"The everyday workhorse of any development team.\",\n },\n {\n id: 781,\n name: \"Dhelmise\",\n types: [\"Ghost\", \"Grass\"],\n baseStats: { hp: 70, attack: 131, defense: 100, speed: 40, special: 90 },\n expGroup: \"medium_fast\",\n evolutionChainId: 407,\n rarity: \"rare\",\n catchRate: 25,\n description: \"Haunts legacy codebases seeking forgotten bugs.\",\n },\n {\n id: 782,\n name: \"Jangmo-O\",\n types: [\"Dragon\"],\n baseStats: { hp: 45, attack: 55, defense: 65, speed: 45, special: 45 },\n expGroup: \"slow\",\n evolutionChainId: 408,\n rarity: \"rare\",\n catchRate: 45,\n description: \"A rare sight, but unstoppable when deployed.\",\n },\n {\n id: 783,\n name: \"Hakamo-O\",\n types: [\"Dragon\", \"Fighting\"],\n baseStats: { hp: 55, attack: 75, defense: 90, speed: 65, special: 70 },\n expGroup: \"slow\",\n evolutionChainId: 408,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Hoards knowledge of ancient APIs and protocols.\",\n },\n {\n id: 784,\n name: \"Kommo-O\",\n types: [\"Dragon\", \"Fighting\"],\n baseStats: { hp: 75, attack: 110, defense: 125, speed: 85, special: 105 },\n expGroup: \"slow\",\n evolutionChainId: 408,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Its codebases are legendary in scale and power.\",\n },\n {\n id: 785,\n name: \"Tapu-Koko\",\n types: [\"Electric\", \"Fairy\"],\n baseStats: { hp: 70, attack: 115, defense: 85, speed: 130, special: 95 },\n expGroup: \"slow\",\n evolutionChainId: 409,\n rarity: \"legendary\",\n catchRate: 3,\n description: \"Charges up the team with electrifying demos.\",\n },\n {\n id: 786,\n name: \"Tapu-Lele\",\n types: [\"Psychic\", \"Fairy\"],\n baseStats: { hp: 70, attack: 85, defense: 75, speed: 95, special: 130 },\n expGroup: \"slow\",\n evolutionChainId: 410,\n rarity: \"legendary\",\n catchRate: 3,\n description: \"Debugs production issues through pure intuition.\",\n },\n {\n id: 787,\n name: \"Tapu-Bulu\",\n types: [\"Grass\", \"Fairy\"],\n baseStats: { hp: 70, attack: 130, defense: 115, speed: 75, special: 95 },\n expGroup: \"slow\",\n evolutionChainId: 411,\n rarity: \"legendary\",\n catchRate: 3,\n description: \"Its codebase flourishes with careful nurturing.\",\n },\n {\n id: 788,\n name: \"Tapu-Fini\",\n types: [\"Water\", \"Fairy\"],\n baseStats: { hp: 70, attack: 75, defense: 115, speed: 85, special: 130 },\n expGroup: \"slow\",\n evolutionChainId: 412,\n rarity: \"legendary\",\n catchRate: 3,\n description: \"Streams data like a well-configured message queue.\",\n },\n {\n id: 789,\n name: \"Cosmog\",\n types: [\"Psychic\"],\n baseStats: { hp: 43, attack: 29, defense: 31, speed: 37, special: 31 },\n expGroup: \"slow\",\n evolutionChainId: 413,\n rarity: \"legendary\",\n catchRate: 45,\n description: \"Debugs production issues through pure intuition.\",\n },\n {\n id: 790,\n name: \"Cosmoem\",\n types: [\"Psychic\"],\n baseStats: { hp: 43, attack: 29, defense: 131, speed: 37, special: 131 },\n expGroup: \"slow\",\n evolutionChainId: 413,\n rarity: \"legendary\",\n catchRate: 45,\n description: \"Reads stack traces like reading minds.\",\n },\n {\n id: 791,\n name: \"Solgaleo\",\n types: [\"Psychic\", \"Steel\"],\n baseStats: { hp: 137, attack: 137, defense: 107, speed: 97, special: 113 },\n expGroup: \"slow\",\n evolutionChainId: 413,\n rarity: \"legendary\",\n catchRate: 45,\n description: \"Reads stack traces like reading minds.\",\n },\n {\n id: 792,\n name: \"Lunala\",\n types: [\"Psychic\", \"Ghost\"],\n baseStats: { hp: 137, attack: 113, defense: 89, speed: 97, special: 137 },\n expGroup: \"slow\",\n evolutionChainId: 413,\n rarity: \"legendary\",\n catchRate: 45,\n description: \"Reads stack traces like reading minds.\",\n },\n {\n id: 793,\n name: \"Nihilego\",\n types: [\"Rock\", \"Poison\"],\n baseStats: { hp: 109, attack: 53, defense: 47, speed: 103, special: 131 },\n expGroup: \"slow\",\n evolutionChainId: 414,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Builds unbreakable infrastructure that lasts.\",\n },\n {\n id: 794,\n name: \"Buzzwole\",\n types: [\"Bug\", \"Fighting\"],\n baseStats: { hp: 107, attack: 139, defense: 139, speed: 79, special: 53 },\n expGroup: \"slow\",\n evolutionChainId: 415,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Finds bugs nobody else can spot.\",\n },\n {\n id: 795,\n name: \"Pheromosa\",\n types: [\"Bug\", \"Fighting\"],\n baseStats: { hp: 71, attack: 137, defense: 37, speed: 151, special: 137 },\n expGroup: \"slow\",\n evolutionChainId: 416,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Crawls through every edge case methodically.\",\n },\n {\n id: 796,\n name: \"Xurkitree\",\n types: [\"Electric\"],\n baseStats: { hp: 83, attack: 89, defense: 71, speed: 83, special: 173 },\n expGroup: \"slow\",\n evolutionChainId: 417,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Sparks innovation with every commit.\",\n },\n {\n id: 797,\n name: \"Celesteela\",\n types: [\"Steel\", \"Flying\"],\n baseStats: { hp: 97, attack: 101, defense: 103, speed: 61, special: 107 },\n expGroup: \"slow\",\n evolutionChainId: 418,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Hardens every endpoint against injection attacks.\",\n },\n {\n id: 798,\n name: \"Kartana\",\n types: [\"Grass\", \"Steel\"],\n baseStats: { hp: 59, attack: 181, defense: 131, speed: 109, special: 59 },\n expGroup: \"slow\",\n evolutionChainId: 419,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Its codebase flourishes with careful nurturing.\",\n },\n {\n id: 799,\n name: \"Guzzlord\",\n types: [\"Dark\", \"Dragon\"],\n baseStats: { hp: 223, attack: 101, defense: 53, speed: 43, special: 97 },\n expGroup: \"slow\",\n evolutionChainId: 420,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Masters the dark arts of regex and bitwise ops.\",\n },\n {\n id: 800,\n name: \"Necrozma\",\n types: [\"Psychic\"],\n baseStats: { hp: 97, attack: 107, defense: 101, speed: 79, special: 127 },\n expGroup: \"slow\",\n evolutionChainId: 421,\n rarity: \"legendary\",\n catchRate: 255,\n description: \"Mentally models complex distributed systems.\",\n },\n {\n id: 801,\n name: \"Magearna\",\n types: [\"Steel\", \"Fairy\"],\n baseStats: { hp: 80, attack: 95, defense: 115, speed: 65, special: 130 },\n expGroup: \"slow\",\n evolutionChainId: 422,\n rarity: \"mythical\",\n catchRate: 3,\n description: \"Forges bulletproof APIs that never break.\",\n },\n {\n id: 802,\n name: \"Marshadow\",\n types: [\"Fighting\", \"Ghost\"],\n baseStats: { hp: 90, attack: 125, defense: 80, speed: 125, special: 90 },\n expGroup: \"slow\",\n evolutionChainId: 423,\n rarity: \"mythical\",\n catchRate: 3,\n description: \"Its PR reviews pack a punch.\",\n },\n {\n id: 803,\n name: \"Poipole\",\n types: [\"Poison\"],\n baseStats: { hp: 67, attack: 73, defense: 67, speed: 73, special: 73 },\n expGroup: \"slow\",\n evolutionChainId: 424,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Injects helpful logging into legacy systems.\",\n },\n {\n id: 804,\n name: \"Naganadel\",\n types: [\"Poison\", \"Dragon\"],\n baseStats: { hp: 73, attack: 73, defense: 73, speed: 121, special: 127 },\n expGroup: \"slow\",\n evolutionChainId: 424,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Finds toxic code patterns and eliminates them.\",\n },\n {\n id: 805,\n name: \"Stakataka\",\n types: [\"Rock\", \"Steel\"],\n baseStats: { hp: 61, attack: 131, defense: 211, speed: 13, special: 101 },\n expGroup: \"slow\",\n evolutionChainId: 425,\n rarity: \"rare\",\n catchRate: 30,\n description: \"Dependable like bedrock under your deployment.\",\n },\n {\n id: 806,\n name: \"Blacephalon\",\n types: [\"Fire\", \"Ghost\"],\n baseStats: { hp: 53, attack: 127, defense: 53, speed: 107, special: 151 },\n expGroup: \"slow\",\n evolutionChainId: 426,\n rarity: \"rare\",\n catchRate: 30,\n description: \"Its CI pipeline is always on fire \u2014 in a good way.\",\n },\n {\n id: 807,\n name: \"Zeraora\",\n types: [\"Electric\"],\n baseStats: { hp: 88, attack: 112, defense: 75, speed: 143, special: 102 },\n expGroup: \"slow\",\n evolutionChainId: 427,\n rarity: \"mythical\",\n catchRate: 3,\n description: \"Its event loop never blocks.\",\n },\n {\n id: 808,\n name: \"Meltan\",\n types: [\"Steel\"],\n baseStats: { hp: 46, attack: 65, defense: 65, speed: 34, special: 55 },\n expGroup: \"slow\",\n evolutionChainId: 428,\n rarity: \"mythical\",\n catchRate: 3,\n description: \"Tempered by years of production hardening.\",\n },\n {\n id: 809,\n name: \"Melmetal\",\n types: [\"Steel\"],\n baseStats: { hp: 135, attack: 143, defense: 143, speed: 34, special: 80 },\n expGroup: \"slow\",\n evolutionChainId: 429,\n rarity: \"mythical\",\n catchRate: 3,\n description: \"Builds infrastructure that withstands any load.\",\n },\n\n // \u2500\u2500 Gen 8 \u2014 Galar (#810\u2013#905) \u2500\u2500\n {\n id: 810,\n name: \"Grookey\",\n types: [\"Grass\"],\n baseStats: { hp: 50, attack: 65, defense: 50, speed: 65, special: 40 },\n expGroup: \"medium_slow\",\n evolutionChainId: 430,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Plants the seeds for sustainable architecture.\",\n },\n {\n id: 811,\n name: \"Thwackey\",\n types: [\"Grass\"],\n baseStats: { hp: 70, attack: 85, defense: 70, speed: 80, special: 60 },\n expGroup: \"medium_slow\",\n evolutionChainId: 430,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Grows features organically from a solid foundation.\",\n },\n {\n id: 812,\n name: \"Rillaboom\",\n types: [\"Grass\"],\n baseStats: { hp: 100, attack: 125, defense: 90, speed: 85, special: 70 },\n expGroup: \"medium_slow\",\n evolutionChainId: 430,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Grows features organically from a solid foundation.\",\n },\n {\n id: 813,\n name: \"Scorbunny\",\n types: [\"Fire\"],\n baseStats: { hp: 50, attack: 71, defense: 40, speed: 69, special: 40 },\n expGroup: \"medium_slow\",\n evolutionChainId: 431,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Its CI pipeline is always on fire \u2014 in a good way.\",\n },\n {\n id: 814,\n name: \"Raboot\",\n types: [\"Fire\"],\n baseStats: { hp: 65, attack: 86, defense: 60, speed: 94, special: 60 },\n expGroup: \"medium_slow\",\n evolutionChainId: 431,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Burns through bugs with blazing speed.\",\n },\n {\n id: 815,\n name: \"Cinderace\",\n types: [\"Fire\"],\n baseStats: { hp: 80, attack: 116, defense: 75, speed: 119, special: 75 },\n expGroup: \"medium_slow\",\n evolutionChainId: 431,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Compiles so fast the CPU starts sweating.\",\n },\n {\n id: 816,\n name: \"Sobble\",\n types: [\"Water\"],\n baseStats: { hp: 50, attack: 40, defense: 40, speed: 70, special: 70 },\n expGroup: \"medium_slow\",\n evolutionChainId: 432,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Handles backpressure like a pro.\",\n },\n {\n id: 817,\n name: \"Drizzile\",\n types: [\"Water\"],\n baseStats: { hp: 65, attack: 60, defense: 55, speed: 90, special: 95 },\n expGroup: \"medium_slow\",\n evolutionChainId: 432,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Its code flows naturally from function to function.\",\n },\n {\n id: 818,\n name: \"Inteleon\",\n types: [\"Water\"],\n baseStats: { hp: 70, attack: 85, defense: 65, speed: 120, special: 125 },\n expGroup: \"medium_slow\",\n evolutionChainId: 432,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Flows through complex data pipelines with ease.\",\n },\n {\n id: 819,\n name: \"Skwovet\",\n types: [\"Normal\"],\n baseStats: { hp: 70, attack: 55, defense: 55, speed: 25, special: 35 },\n expGroup: \"medium_fast\",\n evolutionChainId: 433,\n rarity: \"common\",\n catchRate: 255,\n description: \"Writes clean, readable code that just works.\",\n },\n {\n id: 820,\n name: \"Greedent\",\n types: [\"Normal\"],\n baseStats: { hp: 120, attack: 95, defense: 95, speed: 20, special: 75 },\n expGroup: \"medium_fast\",\n evolutionChainId: 433,\n rarity: \"uncommon\",\n catchRate: 90,\n description: \"The everyday workhorse of any development team.\",\n },\n {\n id: 821,\n name: \"Rookidee\",\n types: [\"Flying\"],\n baseStats: { hp: 38, attack: 47, defense: 35, speed: 57, special: 35 },\n expGroup: \"medium_slow\",\n evolutionChainId: 434,\n rarity: \"common\",\n catchRate: 255,\n description: \"Migrates databases without breaking a wing.\",\n },\n {\n id: 822,\n name: \"Corvisquire\",\n types: [\"Flying\"],\n baseStats: { hp: 68, attack: 67, defense: 55, speed: 77, special: 55 },\n expGroup: \"medium_slow\",\n evolutionChainId: 434,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Its abstractions reach impressive heights.\",\n },\n {\n id: 823,\n name: \"Corviknight\",\n types: [\"Flying\", \"Steel\"],\n baseStats: { hp: 98, attack: 87, defense: 105, speed: 67, special: 85 },\n expGroup: \"medium_slow\",\n evolutionChainId: 434,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Its abstractions reach impressive heights.\",\n },\n {\n id: 824,\n name: \"Blipbug\",\n types: [\"Bug\"],\n baseStats: { hp: 25, attack: 20, defense: 20, speed: 45, special: 45 },\n expGroup: \"medium_fast\",\n evolutionChainId: 435,\n rarity: \"common\",\n catchRate: 255,\n description: \"Surprisingly powerful despite its small size.\",\n },\n {\n id: 825,\n name: \"Dottler\",\n types: [\"Bug\", \"Psychic\"],\n baseStats: { hp: 50, attack: 35, defense: 80, speed: 30, special: 90 },\n expGroup: \"medium_fast\",\n evolutionChainId: 435,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Surprisingly powerful despite its small size.\",\n },\n {\n id: 826,\n name: \"Orbeetle\",\n types: [\"Bug\", \"Psychic\"],\n baseStats: { hp: 60, attack: 45, defense: 110, speed: 90, special: 120 },\n expGroup: \"medium_fast\",\n evolutionChainId: 435,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Crawls through every edge case methodically.\",\n },\n {\n id: 827,\n name: \"Nickit\",\n types: [\"Dark\"],\n baseStats: { hp: 40, attack: 28, defense: 28, speed: 50, special: 52 },\n expGroup: \"fast\",\n evolutionChainId: 436,\n rarity: \"common\",\n catchRate: 255,\n description: \"Operates best when everyone else has logged off.\",\n },\n {\n id: 828,\n name: \"Thievul\",\n types: [\"Dark\"],\n baseStats: { hp: 70, attack: 58, defense: 58, speed: 90, special: 92 },\n expGroup: \"fast\",\n evolutionChainId: 436,\n rarity: \"uncommon\",\n catchRate: 127,\n description: \"Masters the dark arts of regex and bitwise ops.\",\n },\n {\n id: 829,\n name: \"Gossifleur\",\n types: [\"Grass\"],\n baseStats: { hp: 40, attack: 40, defense: 60, speed: 10, special: 60 },\n expGroup: \"medium_fast\",\n evolutionChainId: 437,\n rarity: \"common\",\n catchRate: 190,\n description: \"Its codebase flourishes with careful nurturing.\",\n },\n {\n id: 830,\n name: \"Eldegoss\",\n types: [\"Grass\"],\n baseStats: { hp: 60, attack: 50, defense: 90, speed: 60, special: 120 },\n expGroup: \"medium_fast\",\n evolutionChainId: 437,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Grows features organically from a solid foundation.\",\n },\n {\n id: 831,\n name: \"Wooloo\",\n types: [\"Normal\"],\n baseStats: { hp: 42, attack: 40, defense: 55, speed: 48, special: 45 },\n expGroup: \"medium_fast\",\n evolutionChainId: 438,\n rarity: \"common\",\n catchRate: 255,\n description: \"Writes clean, readable code that just works.\",\n },\n {\n id: 832,\n name: \"Dubwool\",\n types: [\"Normal\"],\n baseStats: { hp: 72, attack: 80, defense: 100, speed: 88, special: 90 },\n expGroup: \"medium_fast\",\n evolutionChainId: 438,\n rarity: \"uncommon\",\n catchRate: 127,\n description: \"Writes clean, readable code that just works.\",\n },\n {\n id: 833,\n name: \"Chewtle\",\n types: [\"Water\"],\n baseStats: { hp: 50, attack: 64, defense: 50, speed: 44, special: 38 },\n expGroup: \"medium_fast\",\n evolutionChainId: 439,\n rarity: \"common\",\n catchRate: 255,\n description: \"Its code flows naturally from function to function.\",\n },\n {\n id: 834,\n name: \"Drednaw\",\n types: [\"Water\", \"Rock\"],\n baseStats: { hp: 90, attack: 115, defense: 90, speed: 74, special: 68 },\n expGroup: \"medium_fast\",\n evolutionChainId: 439,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Its code flows naturally from function to function.\",\n },\n {\n id: 835,\n name: \"Yamper\",\n types: [\"Electric\"],\n baseStats: { hp: 59, attack: 45, defense: 50, speed: 26, special: 50 },\n expGroup: \"fast\",\n evolutionChainId: 440,\n rarity: \"common\",\n catchRate: 255,\n description: \"Its event loop never blocks.\",\n },\n {\n id: 836,\n name: \"Boltund\",\n types: [\"Electric\"],\n baseStats: { hp: 69, attack: 90, defense: 60, speed: 121, special: 90 },\n expGroup: \"fast\",\n evolutionChainId: 440,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Powers through async operations effortlessly.\",\n },\n {\n id: 837,\n name: \"Rolycoly\",\n types: [\"Rock\"],\n baseStats: { hp: 30, attack: 40, defense: 50, speed: 30, special: 50 },\n expGroup: \"medium_slow\",\n evolutionChainId: 441,\n rarity: \"common\",\n catchRate: 255,\n description: \"Dependable like bedrock under your deployment.\",\n },\n {\n id: 838,\n name: \"Carkol\",\n types: [\"Rock\", \"Fire\"],\n baseStats: { hp: 80, attack: 60, defense: 90, speed: 50, special: 70 },\n expGroup: \"medium_slow\",\n evolutionChainId: 441,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Dependable like bedrock under your deployment.\",\n },\n {\n id: 839,\n name: \"Coalossal\",\n types: [\"Rock\", \"Fire\"],\n baseStats: { hp: 110, attack: 80, defense: 120, speed: 30, special: 90 },\n expGroup: \"medium_slow\",\n evolutionChainId: 441,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Its code is hardened against every attack vector.\",\n },\n {\n id: 840,\n name: \"Applin\",\n types: [\"Grass\", \"Dragon\"],\n baseStats: { hp: 40, attack: 40, defense: 80, speed: 20, special: 40 },\n expGroup: \"fast\",\n evolutionChainId: 442,\n rarity: \"common\",\n catchRate: 255,\n description: \"Photosynthesizes coffee into clean code.\",\n },\n {\n id: 841,\n name: \"Flapple\",\n types: [\"Grass\", \"Dragon\"],\n baseStats: { hp: 70, attack: 110, defense: 80, speed: 70, special: 95 },\n expGroup: \"fast\",\n evolutionChainId: 442,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Photosynthesizes coffee into clean code.\",\n },\n {\n id: 842,\n name: \"Appletun\",\n types: [\"Grass\", \"Dragon\"],\n baseStats: { hp: 110, attack: 85, defense: 80, speed: 30, special: 100 },\n expGroup: \"fast\",\n evolutionChainId: 442,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Branches out into new features with natural ease.\",\n },\n {\n id: 843,\n name: \"Silicobra\",\n types: [\"Ground\"],\n baseStats: { hp: 52, attack: 57, defense: 75, speed: 46, special: 50 },\n expGroup: \"medium_fast\",\n evolutionChainId: 443,\n rarity: \"common\",\n catchRate: 255,\n description: \"Stable as the earth beneath your server rack.\",\n },\n {\n id: 844,\n name: \"Sandaconda\",\n types: [\"Ground\"],\n baseStats: { hp: 72, attack: 107, defense: 125, speed: 71, special: 70 },\n expGroup: \"medium_fast\",\n evolutionChainId: 443,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Builds rock-solid foundations for any project.\",\n },\n {\n id: 845,\n name: \"Cramorant\",\n types: [\"Flying\", \"Water\"],\n baseStats: { hp: 70, attack: 85, defense: 55, speed: 85, special: 95 },\n expGroup: \"medium_fast\",\n evolutionChainId: 444,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Floats above complexity with elegant solutions.\",\n },\n {\n id: 846,\n name: \"Arrokuda\",\n types: [\"Water\"],\n baseStats: { hp: 41, attack: 63, defense: 40, speed: 66, special: 40 },\n expGroup: \"slow\",\n evolutionChainId: 445,\n rarity: \"common\",\n catchRate: 255,\n description: \"Flows through complex data pipelines with ease.\",\n },\n {\n id: 847,\n name: \"Barraskewda\",\n types: [\"Water\"],\n baseStats: { hp: 61, attack: 123, defense: 60, speed: 136, special: 60 },\n expGroup: \"slow\",\n evolutionChainId: 445,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"Handles backpressure like a pro.\",\n },\n {\n id: 848,\n name: \"Toxel\",\n types: [\"Electric\", \"Poison\"],\n baseStats: { hp: 40, attack: 38, defense: 35, speed: 40, special: 54 },\n expGroup: \"medium_slow\",\n evolutionChainId: 446,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Its event loop never blocks.\",\n },\n {\n id: 849,\n name: \"Toxtricity-Amped\",\n types: [\"Electric\", \"Poison\"],\n baseStats: { hp: 75, attack: 98, defense: 70, speed: 75, special: 114 },\n expGroup: \"medium_slow\",\n evolutionChainId: 446,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Its event loop never blocks.\",\n },\n {\n id: 850,\n name: \"Sizzlipede\",\n types: [\"Fire\", \"Bug\"],\n baseStats: { hp: 50, attack: 65, defense: 45, speed: 45, special: 50 },\n expGroup: \"medium_fast\",\n evolutionChainId: 447,\n rarity: \"common\",\n catchRate: 190,\n description: \"Rewrites legacy code with explosive energy.\",\n },\n {\n id: 851,\n name: \"Centiskorch\",\n types: [\"Fire\", \"Bug\"],\n baseStats: { hp: 100, attack: 115, defense: 65, speed: 65, special: 90 },\n expGroup: \"medium_fast\",\n evolutionChainId: 447,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Hotfixes deployed before you finish your coffee.\",\n },\n {\n id: 852,\n name: \"Clobbopus\",\n types: [\"Fighting\"],\n baseStats: { hp: 50, attack: 68, defense: 60, speed: 32, special: 50 },\n expGroup: \"medium_slow\",\n evolutionChainId: 448,\n rarity: \"common\",\n catchRate: 180,\n description: \"Trains hard on algorithmic challenges daily.\",\n },\n {\n id: 853,\n name: \"Grapploct\",\n types: [\"Fighting\"],\n baseStats: { hp: 80, attack: 118, defense: 90, speed: 42, special: 80 },\n expGroup: \"medium_slow\",\n evolutionChainId: 448,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Punches through blockers in code review.\",\n },\n {\n id: 854,\n name: \"Sinistea\",\n types: [\"Ghost\"],\n baseStats: { hp: 40, attack: 45, defense: 45, speed: 50, special: 74 },\n expGroup: \"medium_fast\",\n evolutionChainId: 449,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Haunts legacy codebases seeking forgotten bugs.\",\n },\n {\n id: 855,\n name: \"Polteageist\",\n types: [\"Ghost\"],\n baseStats: { hp: 60, attack: 65, defense: 65, speed: 70, special: 134 },\n expGroup: \"medium_fast\",\n evolutionChainId: 449,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"Haunts legacy codebases seeking forgotten bugs.\",\n },\n {\n id: 856,\n name: \"Hatenna\",\n types: [\"Psychic\"],\n baseStats: { hp: 42, attack: 30, defense: 45, speed: 39, special: 56 },\n expGroup: \"slow\",\n evolutionChainId: 450,\n rarity: \"common\",\n catchRate: 235,\n description: \"Its architecture decisions are eerily prescient.\",\n },\n {\n id: 857,\n name: \"Hattrem\",\n types: [\"Psychic\"],\n baseStats: { hp: 57, attack: 40, defense: 65, speed: 49, special: 86 },\n expGroup: \"slow\",\n evolutionChainId: 450,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Its architecture decisions are eerily prescient.\",\n },\n {\n id: 858,\n name: \"Hatterene\",\n types: [\"Psychic\", \"Fairy\"],\n baseStats: { hp: 57, attack: 90, defense: 95, speed: 29, special: 136 },\n expGroup: \"slow\",\n evolutionChainId: 450,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Mentally models complex distributed systems.\",\n },\n {\n id: 859,\n name: \"Impidimp\",\n types: [\"Dark\", \"Fairy\"],\n baseStats: { hp: 45, attack: 45, defense: 30, speed: 50, special: 55 },\n expGroup: \"medium_fast\",\n evolutionChainId: 451,\n rarity: \"common\",\n catchRate: 255,\n description: \"Finds vulnerabilities hidden in the shadows.\",\n },\n {\n id: 860,\n name: \"Morgrem\",\n types: [\"Dark\", \"Fairy\"],\n baseStats: { hp: 65, attack: 60, defense: 45, speed: 70, special: 75 },\n expGroup: \"medium_fast\",\n evolutionChainId: 451,\n rarity: \"uncommon\",\n catchRate: 120,\n description: \"Masters the dark arts of regex and bitwise ops.\",\n },\n {\n id: 861,\n name: \"Grimmsnarl\",\n types: [\"Dark\", \"Fairy\"],\n baseStats: { hp: 95, attack: 120, defense: 65, speed: 60, special: 95 },\n expGroup: \"medium_fast\",\n evolutionChainId: 451,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Operates best when everyone else has logged off.\",\n },\n {\n id: 862,\n name: \"Obstagoon\",\n types: [\"Dark\", \"Normal\"],\n baseStats: { hp: 93, attack: 90, defense: 101, speed: 95, special: 81 },\n expGroup: \"medium_fast\",\n evolutionChainId: 134,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Operates best when everyone else has logged off.\",\n },\n {\n id: 863,\n name: \"Perrserker\",\n types: [\"Steel\"],\n baseStats: { hp: 70, attack: 110, defense: 100, speed: 50, special: 60 },\n expGroup: \"medium_fast\",\n evolutionChainId: 22,\n rarity: \"uncommon\",\n catchRate: 90,\n description: \"Builds infrastructure that withstands any load.\",\n },\n {\n id: 864,\n name: \"Cursola\",\n types: [\"Ghost\"],\n baseStats: { hp: 60, attack: 95, defense: 50, speed: 30, special: 145 },\n expGroup: \"fast\",\n evolutionChainId: 113,\n rarity: \"rare\",\n catchRate: 30,\n description: \"Appears silently in git blame for critical fixes.\",\n },\n {\n id: 865,\n name: \"Sirfetch'd\",\n types: [\"Fighting\"],\n baseStats: { hp: 62, attack: 135, defense: 95, speed: 65, special: 82 },\n expGroup: \"medium_fast\",\n evolutionChainId: 35,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Punches through blockers in code review.\",\n },\n {\n id: 866,\n name: \"Mr. Rime\",\n types: [\"Ice\", \"Psychic\"],\n baseStats: { hp: 80, attack: 85, defense: 75, speed: 70, special: 110 },\n expGroup: \"medium_fast\",\n evolutionChainId: 57,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Freezes bugs in their tracks before production.\",\n },\n {\n id: 867,\n name: \"Runerigus\",\n types: [\"Ground\", \"Ghost\"],\n baseStats: { hp: 58, attack: 95, defense: 145, speed: 30, special: 105 },\n expGroup: \"medium_fast\",\n evolutionChainId: 287,\n rarity: \"uncommon\",\n catchRate: 90,\n description: \"Grounded in best practices and design patterns.\",\n },\n {\n id: 868,\n name: \"Milcery\",\n types: [\"Fairy\"],\n baseStats: { hp: 45, attack: 40, defense: 40, speed: 34, special: 61 },\n expGroup: \"medium_fast\",\n evolutionChainId: 452,\n rarity: \"common\",\n catchRate: 200,\n description: \"Transforms ugly hacks into elegant solutions.\",\n },\n {\n id: 869,\n name: \"Alcremie\",\n types: [\"Fairy\"],\n baseStats: { hp: 65, attack: 60, defense: 75, speed: 64, special: 121 },\n expGroup: \"medium_fast\",\n evolutionChainId: 452,\n rarity: \"uncommon\",\n catchRate: 100,\n description: \"Its code reviews leave everyone feeling enchanted.\",\n },\n {\n id: 870,\n name: \"Falinks\",\n types: [\"Fighting\"],\n baseStats: { hp: 65, attack: 100, defense: 100, speed: 75, special: 70 },\n expGroup: \"medium_fast\",\n evolutionChainId: 453,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Its PR reviews pack a punch.\",\n },\n {\n id: 871,\n name: \"Pincurchin\",\n types: [\"Electric\"],\n baseStats: { hp: 48, attack: 101, defense: 95, speed: 15, special: 91 },\n expGroup: \"medium_fast\",\n evolutionChainId: 454,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Sparks innovation with every commit.\",\n },\n {\n id: 872,\n name: \"Snom\",\n types: [\"Ice\", \"Bug\"],\n baseStats: { hp: 30, attack: 25, defense: 35, speed: 20, special: 45 },\n expGroup: \"medium_fast\",\n evolutionChainId: 455,\n rarity: \"common\",\n catchRate: 190,\n description: \"Crystallizes complex requirements into clear specs.\",\n },\n {\n id: 873,\n name: \"Frosmoth\",\n types: [\"Ice\", \"Bug\"],\n baseStats: { hp: 70, attack: 65, defense: 60, speed: 65, special: 125 },\n expGroup: \"medium_fast\",\n evolutionChainId: 455,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Preserves backward compatibility like a glacier.\",\n },\n {\n id: 874,\n name: \"Stonjourner\",\n types: [\"Rock\"],\n baseStats: { hp: 100, attack: 125, defense: 135, speed: 70, special: 20 },\n expGroup: \"slow\",\n evolutionChainId: 456,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"Solid as a load-bearing wall in the architecture.\",\n },\n {\n id: 875,\n name: \"Eiscue-Ice\",\n types: [\"Ice\"],\n baseStats: { hp: 75, attack: 80, defense: 110, speed: 50, special: 90 },\n expGroup: \"slow\",\n evolutionChainId: 457,\n rarity: \"uncommon\",\n catchRate: 60,\n description: \"Its test suite is ice-cold \u2014 nothing gets through.\",\n },\n {\n id: 876,\n name: \"Indeedee-Male\",\n types: [\"Psychic\", \"Normal\"],\n baseStats: { hp: 60, attack: 65, defense: 55, speed: 95, special: 105 },\n expGroup: \"fast\",\n evolutionChainId: 458,\n rarity: \"rare\",\n catchRate: 30,\n description: \"Reads stack traces like reading minds.\",\n },\n {\n id: 877,\n name: \"Morpeko-Full-Belly\",\n types: [\"Electric\", \"Dark\"],\n baseStats: { hp: 58, attack: 95, defense: 58, speed: 97, special: 70 },\n expGroup: \"medium_fast\",\n evolutionChainId: 459,\n rarity: \"common\",\n catchRate: 180,\n description: \"Powers through async operations effortlessly.\",\n },\n {\n id: 878,\n name: \"Cufant\",\n types: [\"Steel\"],\n baseStats: { hp: 72, attack: 80, defense: 49, speed: 40, special: 49 },\n expGroup: \"medium_fast\",\n evolutionChainId: 460,\n rarity: \"common\",\n catchRate: 190,\n description: \"Builds infrastructure that withstands any load.\",\n },\n {\n id: 879,\n name: \"Copperajah\",\n types: [\"Steel\"],\n baseStats: { hp: 122, attack: 130, defense: 69, speed: 30, special: 80 },\n expGroup: \"medium_fast\",\n evolutionChainId: 460,\n rarity: \"uncommon\",\n catchRate: 90,\n description: \"Builds infrastructure that withstands any load.\",\n },\n {\n id: 880,\n name: \"Dracozolt\",\n types: [\"Electric\", \"Dragon\"],\n baseStats: { hp: 90, attack: 100, defense: 90, speed: 75, special: 80 },\n expGroup: \"slow\",\n evolutionChainId: 461,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Charges up the team with electrifying demos.\",\n },\n {\n id: 881,\n name: \"Arctozolt\",\n types: [\"Electric\", \"Ice\"],\n baseStats: { hp: 90, attack: 100, defense: 90, speed: 55, special: 90 },\n expGroup: \"slow\",\n evolutionChainId: 462,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Powers through async operations effortlessly.\",\n },\n {\n id: 882,\n name: \"Dracovish\",\n types: [\"Water\", \"Dragon\"],\n baseStats: { hp: 90, attack: 90, defense: 100, speed: 75, special: 80 },\n expGroup: \"slow\",\n evolutionChainId: 463,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Streams data like a well-configured message queue.\",\n },\n {\n id: 883,\n name: \"Arctovish\",\n types: [\"Water\", \"Ice\"],\n baseStats: { hp: 90, attack: 90, defense: 100, speed: 55, special: 90 },\n expGroup: \"slow\",\n evolutionChainId: 464,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Flows through complex data pipelines with ease.\",\n },\n {\n id: 884,\n name: \"Duraludon\",\n types: [\"Steel\", \"Dragon\"],\n baseStats: { hp: 70, attack: 95, defense: 115, speed: 85, special: 120 },\n expGroup: \"medium_fast\",\n evolutionChainId: 465,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Hardens every endpoint against injection attacks.\",\n },\n {\n id: 885,\n name: \"Dreepy\",\n types: [\"Dragon\", \"Ghost\"],\n baseStats: { hp: 28, attack: 60, defense: 30, speed: 82, special: 40 },\n expGroup: \"slow\",\n evolutionChainId: 466,\n rarity: \"rare\",\n catchRate: 45,\n description: \"Hoards knowledge of ancient APIs and protocols.\",\n },\n {\n id: 886,\n name: \"Drakloak\",\n types: [\"Dragon\", \"Ghost\"],\n baseStats: { hp: 68, attack: 80, defense: 50, speed: 102, special: 60 },\n expGroup: \"slow\",\n evolutionChainId: 466,\n rarity: \"rare\",\n catchRate: 45,\n description: \"A rare sight, but unstoppable when deployed.\",\n },\n {\n id: 887,\n name: \"Dragapult\",\n types: [\"Dragon\", \"Ghost\"],\n baseStats: { hp: 88, attack: 120, defense: 75, speed: 142, special: 100 },\n expGroup: \"slow\",\n evolutionChainId: 466,\n rarity: \"rare\",\n catchRate: 45,\n description: \"A rare sight, but unstoppable when deployed.\",\n },\n {\n id: 888,\n name: \"Zacian\",\n types: [\"Fairy\"],\n baseStats: { hp: 92, attack: 120, defense: 115, speed: 138, special: 115 },\n expGroup: \"slow\",\n evolutionChainId: 467,\n rarity: \"legendary\",\n catchRate: 10,\n description: \"Its code reviews leave everyone feeling enchanted.\",\n },\n {\n id: 889,\n name: \"Zamazenta\",\n types: [\"Fighting\"],\n baseStats: { hp: 92, attack: 120, defense: 115, speed: 138, special: 115 },\n expGroup: \"slow\",\n evolutionChainId: 468,\n rarity: \"legendary\",\n catchRate: 10,\n description: \"Fights through technical debt with determination.\",\n },\n {\n id: 890,\n name: \"Eternatus\",\n types: [\"Poison\", \"Dragon\"],\n baseStats: { hp: 140, attack: 85, defense: 95, speed: 130, special: 145 },\n expGroup: \"slow\",\n evolutionChainId: 469,\n rarity: \"legendary\",\n catchRate: 255,\n description: \"Detoxifies spaghetti code into clean modules.\",\n },\n {\n id: 891,\n name: \"Kubfu\",\n types: [\"Fighting\"],\n baseStats: { hp: 60, attack: 90, defense: 60, speed: 72, special: 53 },\n expGroup: \"slow\",\n evolutionChainId: 470,\n rarity: \"legendary\",\n catchRate: 3,\n description: \"Never backs down from a complex refactor.\",\n },\n {\n id: 892,\n name: \"Urshifu-Single-Strike\",\n types: [\"Fighting\", \"Dark\"],\n baseStats: { hp: 100, attack: 130, defense: 100, speed: 97, special: 63 },\n expGroup: \"slow\",\n evolutionChainId: 470,\n rarity: \"legendary\",\n catchRate: 3,\n description: \"Never backs down from a complex refactor.\",\n },\n {\n id: 893,\n name: \"Zarude\",\n types: [\"Dark\", \"Grass\"],\n baseStats: { hp: 105, attack: 120, defense: 105, speed: 105, special: 95 },\n expGroup: \"slow\",\n evolutionChainId: 471,\n rarity: \"mythical\",\n catchRate: 3,\n description: \"Operates best when everyone else has logged off.\",\n },\n {\n id: 894,\n name: \"Regieleki\",\n types: [\"Electric\"],\n baseStats: { hp: 80, attack: 100, defense: 50, speed: 200, special: 100 },\n expGroup: \"slow\",\n evolutionChainId: 472,\n rarity: \"legendary\",\n catchRate: 3,\n description: \"Its event loop never blocks.\",\n },\n {\n id: 895,\n name: \"Regidrago\",\n types: [\"Dragon\"],\n baseStats: { hp: 200, attack: 100, defense: 50, speed: 80, special: 100 },\n expGroup: \"slow\",\n evolutionChainId: 473,\n rarity: \"legendary\",\n catchRate: 3,\n description: \"Commands massive distributed systems with authority.\",\n },\n {\n id: 896,\n name: \"Glastrier\",\n types: [\"Ice\"],\n baseStats: { hp: 100, attack: 145, defense: 130, speed: 30, special: 110 },\n expGroup: \"slow\",\n evolutionChainId: 474,\n rarity: \"legendary\",\n catchRate: 3,\n description: \"Freezes bugs in their tracks before production.\",\n },\n {\n id: 897,\n name: \"Spectrier\",\n types: [\"Ghost\"],\n baseStats: { hp: 100, attack: 65, defense: 60, speed: 130, special: 145 },\n expGroup: \"slow\",\n evolutionChainId: 475,\n rarity: \"legendary\",\n catchRate: 3,\n description: \"Haunts legacy codebases seeking forgotten bugs.\",\n },\n {\n id: 898,\n name: \"Calyrex\",\n types: [\"Psychic\", \"Grass\"],\n baseStats: { hp: 100, attack: 80, defense: 80, speed: 80, special: 80 },\n expGroup: \"slow\",\n evolutionChainId: 476,\n rarity: \"legendary\",\n catchRate: 3,\n description: \"Reads stack traces like reading minds.\",\n },\n {\n id: 899,\n name: \"Wyrdeer\",\n types: [\"Normal\", \"Psychic\"],\n baseStats: { hp: 103, attack: 105, defense: 72, speed: 65, special: 105 },\n expGroup: \"slow\",\n evolutionChainId: 120,\n rarity: \"uncommon\",\n catchRate: 135,\n description: \"The everyday workhorse of any development team.\",\n },\n {\n id: 900,\n name: \"Kleavor\",\n types: [\"Bug\", \"Rock\"],\n baseStats: { hp: 70, attack: 135, defense: 95, speed: 85, special: 70 },\n expGroup: \"medium_fast\",\n evolutionChainId: 58,\n rarity: \"uncommon\",\n catchRate: 115,\n description: \"Metamorphoses codebases through careful refactoring.\",\n },\n {\n id: 901,\n name: \"Ursaluna\",\n types: [\"Ground\", \"Normal\"],\n baseStats: { hp: 130, attack: 140, defense: 105, speed: 50, special: 80 },\n expGroup: \"medium_fast\",\n evolutionChainId: 110,\n rarity: \"uncommon\",\n catchRate: 75,\n description: \"Digs deep into root cause analysis.\",\n },\n {\n id: 902,\n name: \"Basculegion-Male\",\n types: [\"Water\", \"Ghost\"],\n baseStats: { hp: 120, attack: 112, defense: 65, speed: 78, special: 80 },\n expGroup: \"medium_fast\",\n evolutionChainId: 280,\n rarity: \"uncommon\",\n catchRate: 135,\n description: \"Handles backpressure like a pro.\",\n },\n {\n id: 903,\n name: \"Sneasler\",\n types: [\"Fighting\", \"Poison\"],\n baseStats: { hp: 80, attack: 130, defense: 60, speed: 120, special: 80 },\n expGroup: \"medium_slow\",\n evolutionChainId: 109,\n rarity: \"uncommon\",\n catchRate: 135,\n description: \"Punches through blockers in code review.\",\n },\n {\n id: 904,\n name: \"Overqwil\",\n types: [\"Dark\", \"Poison\"],\n baseStats: { hp: 85, attack: 115, defense: 95, speed: 85, special: 65 },\n expGroup: \"medium_fast\",\n evolutionChainId: 106,\n rarity: \"uncommon\",\n catchRate: 135,\n description: \"Masters the dark arts of regex and bitwise ops.\",\n },\n {\n id: 905,\n name: \"Enamorus-Incarnate\",\n types: [\"Fairy\", \"Flying\"],\n baseStats: { hp: 74, attack: 115, defense: 70, speed: 106, special: 135 },\n expGroup: \"slow\",\n evolutionChainId: 477,\n rarity: \"legendary\",\n catchRate: 3,\n description: \"Its code reviews leave everyone feeling enchanted.\",\n },\n] as const satisfies readonly Pokemon[];\n\n/** Lookup map: Pokemon ID \u2192 Pokemon data. Built once at module load. */\nexport const POKEMON_BY_ID: ReadonlyMap<number, Pokemon> = new Map(POKEDEX.map((p) => [p.id, p]));\n\n/** Lookup map: lowercase name \u2192 Pokemon data. Built once at module load. */\nexport const POKEMON_BY_NAME: ReadonlyMap<string, Pokemon> = new Map(\n POKEDEX.map((p) => [p.name.toLowerCase(), p]),\n);\n", "/**\n * Singleton state manager for Claudemon.\n * All state reads/writes flow through this class.\n */\n\nimport { access as fsAccess } from \"node:fs/promises\";\nimport { constants as fsConst } from \"node:fs\";\nimport { getStateDir, getStateFile, getStatusFile } from \"../engine/constants.js\";\nimport type {\n PlayerState,\n OwnedPokemon,\n EventCounterKey,\n EventCounters,\n StreakData,\n BuddyConfig,\n PokedexState,\n WildEncounter,\n MoodType,\n} from \"../engine/types.js\";\nimport { EVENT_COUNTER_KEYS } from \"../engine/types.js\";\nimport { atomicWrite, safeRead, ensureDir, backupCorrupted, withLock } from \"./io.js\";\nimport { PlayerStateSchema } from \"./schemas.js\";\nimport { POKEMON_BY_ID } from \"../engine/pokemon-data.js\";\n\n/** Compact status payload for the shell status line script */\ninterface StatusPayload {\n name: string; // Species name (used for sprite filename lookup)\n displayName: string; // \"Nickname (Species)\" or just \"Species\" for display\n level: number;\n xpPercent: number;\n speciesId: number;\n evolutionReady: boolean;\n mood: MoodType;\n}\n\n/** Build a zeroed-out EventCounters record */\nfunction emptyCounters(): EventCounters {\n const counters = {} as Record<string, number>;\n for (const key of EVENT_COUNTER_KEYS) {\n counters[key] = 0;\n }\n return counters as EventCounters;\n}\n\n/** Build default streak data */\nfunction emptyStreak(): StreakData {\n return {\n currentStreak: 0,\n longestStreak: 0,\n lastActiveDate: null,\n totalDaysActive: 0,\n };\n}\n\n/** Build default config */\nfunction defaultConfig(): BuddyConfig {\n return {\n muted: false,\n reactionCooldownMs: 30_000,\n statusLineEnabled: true,\n bellEnabled: true,\n encounterSpeed: \"normal\",\n xpSharePercent: 25,\n };\n}\n\n/** Build empty pokedex */\nfunction emptyPokedex(): PokedexState {\n return {\n entries: {},\n totalSeen: 0,\n totalCaught: 0,\n };\n}\n\n/** Get today's date as YYYY-MM-DD in local timezone */\nfunction todayDateString(): string {\n const now = new Date();\n const year = now.getFullYear();\n const month = String(now.getMonth() + 1).padStart(2, \"0\");\n const day = String(now.getDate()).padStart(2, \"0\");\n return `${year}-${month}-${day}`;\n}\n\nexport class StateManager {\n private static instance: StateManager | null = null;\n private state: PlayerState | null = null;\n /** Timestamp of the last successful load from disk */\n private lastLoadTime: number = 0;\n /** How long (in ms) cached state is considered fresh before re-reading disk */\n private static readonly CACHE_TTL_MS = 1000;\n\n /** Debounce timer for writeStatus \u2014 limits disk writes to at most once per second */\n private statusWriteTimer: ReturnType<typeof setTimeout> | null = null;\n /** Payload queued for the next debounced status write */\n private pendingStatusPayload: StatusPayload | null = null;\n /** Maximum frequency for status file writes (ms) */\n private static readonly STATUS_DEBOUNCE_MS = 1000;\n\n private constructor() {}\n\n /** Get the singleton StateManager instance */\n static getInstance(): StateManager {\n if (!StateManager.instance) {\n StateManager.instance = new StateManager();\n }\n return StateManager.instance;\n }\n\n /** Load state from disk. Returns cached state if loaded within the last second. */\n async load(): Promise<PlayerState | null> {\n // Return cached state if fresh enough (avoids redundant disk reads from MCP tool calls)\n if (\n this.state &&\n this.lastLoadTime > 0 &&\n Date.now() - this.lastLoadTime < StateManager.CACHE_TTL_MS\n ) {\n return this.state;\n }\n\n await ensureDir(getStateDir());\n\n const stateFile = getStateFile();\n let fileExists = true;\n try {\n await fsAccess(stateFile, fsConst.F_OK);\n } catch {\n fileExists = false;\n }\n if (!fileExists) {\n return null;\n }\n\n const raw = await safeRead<unknown>(stateFile);\n if (raw === null) {\n // File exists but safeRead returned null \u2014 empty or invalid JSON\n const backupPath = await backupCorrupted(stateFile);\n process.stderr.write(\n `[claudemon] State file was corrupted and has been backed up to ${backupPath}\\n` +\n `[claudemon] You'll need to pick a new starter with buddy_starter.\\n`,\n );\n return null;\n }\n\n try {\n // Zod output is structurally compatible but not nominally identical to PlayerState\n const parsed = PlayerStateSchema.parse(raw) as PlayerState;\n this.state = parsed;\n this.lastLoadTime = Date.now();\n return this.state;\n } catch (err: unknown) {\n // Schema validation failed \u2014 data on disk doesn't match expected shape\n const backupPath = await backupCorrupted(stateFile);\n const message = err instanceof Error ? err.message : String(err);\n process.stderr.write(\n `[claudemon] State validation failed: ${message}\\n` +\n `[claudemon] Corrupted data backed up to ${backupPath}\\n` +\n `[claudemon] You'll need to pick a new starter with buddy_starter.\\n`,\n );\n return null;\n }\n }\n\n /** Save current state to disk atomically, protected by file lock */\n async save(): Promise<void> {\n if (!this.state) {\n throw new Error(\"Cannot save: state not loaded. Call load() or initializePlayer() first.\");\n }\n const stateDir = getStateDir();\n await ensureDir(stateDir);\n const lockPath = `${stateDir}/state.lock`;\n await withLock(lockPath, async () => {\n const json = JSON.stringify(this.state, null, 2);\n await atomicWrite(getStateFile(), json);\n });\n // After saving, in-memory state matches disk \u2014 refresh cache timestamp\n this.lastLoadTime = Date.now();\n }\n\n /** Get current state (throws if not loaded) */\n getState(): PlayerState {\n if (!this.state) {\n throw new Error(\"State not loaded. Call load() first.\");\n }\n return this.state;\n }\n\n /** Check if this is first run (no state file exists) */\n async isFirstRun(): Promise<boolean> {\n try {\n await fsAccess(getStateFile(), fsConst.F_OK);\n return false;\n } catch {\n return true;\n }\n }\n\n /** Initialize new player state after starter selection */\n async initializePlayer(\n trainerId: string,\n trainerName: string,\n starter: OwnedPokemon,\n ): Promise<PlayerState> {\n const now = new Date().toISOString();\n\n const state: PlayerState = {\n trainerId,\n trainerName,\n party: [starter],\n pcBox: [],\n pokedex: emptyPokedex(),\n badges: [],\n achievements: [],\n counters: emptyCounters(),\n streak: emptyStreak(),\n config: defaultConfig(),\n startedAt: now,\n totalXpEarned: 0,\n totalSessions: 0,\n pendingEncounter: null,\n xpSinceLastEncounter: 0,\n recentToolTypes: [],\n lastEncounterTime: 0,\n mood: \"neutral\",\n moodSetAt: 0,\n lastFedAt: 0,\n lastTrainedAt: 0,\n lastPlayedAt: 0,\n pendingQuiz: null,\n shareStats: { wins: 0, losses: 0, ties: 0 },\n };\n\n this.state = state;\n await this.save();\n return this.state;\n }\n\n /** Get the active Pokemon from the party (isActive === true) */\n getActivePokemon(): OwnedPokemon | null {\n if (!this.state) {\n return null;\n }\n return this.state.party.find((p) => p.isActive) ?? null;\n }\n\n /** Increment an event counter by amount (default 1) and save (lock-protected) */\n async incrementCounter(key: EventCounterKey, amount: number = 1): Promise<void> {\n const state = this.getState();\n state.counters[key] += amount;\n await this.save();\n }\n\n /**\n * Update daily streak with weekend grace period.\n * Allows up to 2 days off without breaking the streak (covers weekends).\n * Streak counts \"coding days\" not \"consecutive calendar days\".\n */\n async updateStreak(): Promise<void> {\n const state = this.getState();\n const today = todayDateString();\n const { streak } = state;\n\n if (streak.lastActiveDate === today) {\n return;\n }\n\n if (streak.lastActiveDate === null) {\n streak.currentStreak = 1;\n streak.totalDaysActive = 1;\n } else {\n const last = new Date(streak.lastActiveDate);\n const now = new Date(today);\n const diffMs = now.getTime() - last.getTime();\n const diffDays = Math.round(diffMs / (1000 * 60 * 60 * 24));\n\n // Grace period: up to 2 days off (covers weekends)\n // 1 day gap = next day (consecutive) \u2713\n // 2 day gap = skipped 1 day (e.g., Friday \u2192 Sunday) \u2713\n // 3 day gap = skipped 2 days (e.g., Friday \u2192 Monday) \u2713\n // 4+ day gap = streak broken\n if (diffDays <= 3) {\n streak.currentStreak += 1;\n } else {\n streak.currentStreak = 1;\n }\n streak.totalDaysActive += 1;\n }\n\n if (streak.currentStreak > streak.longestStreak) {\n streak.longestStreak = streak.currentStreak;\n }\n\n streak.lastActiveDate = today;\n await this.save();\n }\n\n /**\n * Write compact status JSON for the shell status line script.\n * Debounced: at most one disk write per STATUS_DEBOUNCE_MS.\n * The payload is computed immediately so it always reflects the latest state,\n * but the actual I/O is deferred and coalesced.\n */\n async writeStatus(evolutionReady: boolean = false): Promise<void> {\n const active = this.getActivePokemon();\n if (!active) {\n return;\n }\n\n const state = this.getState();\n\n // XP percent is currentXp as a rough percentage toward next level\n // Exact formula depends on exp group; use a simple ratio for the status line\n const xpPercent =\n active.level >= 100\n ? 100\n : Math.min(100, Math.floor((active.currentXp / Math.max(1, active.currentXp + 50)) * 100));\n\n // Look up species name for sprite lookup and display\n const species = POKEMON_BY_ID.get(active.pokemonId);\n const speciesName = species?.name ?? `Pokemon #${active.pokemonId}`;\n const displayName = active.nickname ? `${active.nickname} (${speciesName})` : speciesName;\n\n const payload: StatusPayload = {\n name: speciesName,\n displayName,\n level: active.level,\n xpPercent,\n speciesId: active.pokemonId,\n evolutionReady,\n mood: state.mood ?? \"neutral\",\n };\n\n // Always update the pending payload to the latest values\n this.pendingStatusPayload = payload;\n\n // If a write is already scheduled, it will pick up the updated payload\n if (this.statusWriteTimer) return;\n\n this.statusWriteTimer = setTimeout(() => {\n void (async () => {\n this.statusWriteTimer = null;\n if (this.pendingStatusPayload) {\n const stateDir = getStateDir();\n await ensureDir(stateDir);\n await atomicWrite(getStatusFile(), JSON.stringify(this.pendingStatusPayload));\n this.pendingStatusPayload = null;\n }\n })();\n }, StateManager.STATUS_DEBOUNCE_MS);\n }\n\n /** Flush any pending debounced status write immediately.\n * Call before process exit to ensure the last status update is persisted. */\n async flushStatus(): Promise<void> {\n if (this.statusWriteTimer) {\n clearTimeout(this.statusWriteTimer);\n this.statusWriteTimer = null;\n }\n if (this.pendingStatusPayload) {\n const stateDir = getStateDir();\n await ensureDir(stateDir);\n await atomicWrite(getStatusFile(), JSON.stringify(this.pendingStatusPayload));\n this.pendingStatusPayload = null;\n }\n }\n\n /** Set a pending wild encounter on state. */\n setPendingEncounter(encounter: WildEncounter): void {\n const state = this.getState();\n state.pendingEncounter = encounter;\n }\n\n /** Clear the pending wild encounter from state. */\n clearPendingEncounter(): void {\n const state = this.getState();\n state.pendingEncounter = null;\n }\n\n /** Write encounter notification to status JSON so status line can show it. */\n async writeEncounterStatus(pokemonName: string): Promise<void> {\n const active = this.getActivePokemon();\n if (!active) return;\n\n const xpPercent =\n active.level >= 100\n ? 100\n : Math.min(100, Math.floor((active.currentXp / Math.max(1, active.currentXp + 50)) * 100));\n\n const species = POKEMON_BY_ID.get(active.pokemonId);\n const speciesName = species?.name ?? `Pokemon #${active.pokemonId}`;\n const displayLabel = active.nickname ? `${active.nickname} (${speciesName})` : speciesName;\n\n const payload = {\n name: speciesName,\n displayName: displayLabel,\n level: active.level,\n xpPercent,\n speciesId: active.pokemonId,\n evolutionReady: false,\n encounter: `Wild ${pokemonName} appeared!`,\n };\n\n await ensureDir(getStateDir());\n await atomicWrite(getStatusFile(), JSON.stringify(payload));\n }\n\n /** Reset singleton for testing purposes */\n static resetInstance(): void {\n StateManager.instance = null;\n }\n\n /** Invalidate the in-memory cache, forcing the next load() to read from disk */\n invalidateCache(): void {\n this.lastLoadTime = 0;\n }\n}\n", "/**\n * Version check module for Claudemon.\n * Checks npm registry for newer versions, caching results for 24 hours.\n * Designed to be non-blocking \u2014 never delays server startup.\n */\n\nimport { readFile, writeFile, mkdir } from \"node:fs/promises\";\nimport { readFileSync, existsSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { getStateDir } from \"./constants.js\";\n\n// \u2500\u2500 Types \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\ninterface VersionCache {\n lastCheck: number; // timestamp ms\n latestVersion: string; // e.g., \"1.5.0\"\n currentVersion: string; // version at time of check\n}\n\nexport interface UpdateInfo {\n hasUpdate: boolean;\n latest: string;\n current: string;\n}\n\n// \u2500\u2500 Constants \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst CHECK_INTERVAL_MS = 24 * 60 * 60 * 1000; // 24 hours\nconst FETCH_TIMEOUT_MS = 5000;\nconst NPM_REGISTRY_URL = \"https://registry.npmjs.org/@umang-boss/claudemon/latest\";\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\n// \u2500\u2500 Module-level cache \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nlet cachedUpdateInfo: UpdateInfo | null = null;\n\n/** Retrieve the last update check result (populated by checkForUpdate). */\nexport function getLastUpdateCheck(): UpdateInfo | null {\n return cachedUpdateInfo;\n}\n\n// \u2500\u2500 Public API \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/**\n * Get current package version from the nearest package.json.\n * Searches upward from the module directory.\n */\nexport function getCurrentVersion(): string {\n const candidates = [\n join(__dirname, \"..\", \"..\", \"package.json\"),\n join(__dirname, \"..\", \"package.json\"),\n ];\n for (const p of candidates) {\n if (existsSync(p)) {\n try {\n const pkg = JSON.parse(readFileSync(p, \"utf-8\")) as {\n version?: string;\n };\n return pkg.version ?? \"unknown\";\n } catch {\n continue;\n }\n }\n }\n return \"unknown\";\n}\n\n/**\n * Check npm registry for the latest version. Non-blocking, cached.\n *\n * - Returns cached result if checked within the last 24 hours.\n * - Fetches from npm registry with a 5-second timeout.\n * - Fails silently on network errors (returns null).\n * - Stores result in module-level cache for instructions builder.\n */\nexport async function checkForUpdate(): Promise<UpdateInfo | null> {\n const current = getCurrentVersion();\n if (current === \"unknown\") return null;\n\n const cacheFile = getCacheFilePath();\n\n // Check disk cache first\n try {\n if (existsSync(cacheFile)) {\n const raw = await readFile(cacheFile, \"utf-8\");\n const cached = JSON.parse(raw) as VersionCache;\n if (Date.now() - cached.lastCheck < CHECK_INTERVAL_MS) {\n const result: UpdateInfo = {\n hasUpdate: isNewerVersion(cached.latestVersion, current),\n latest: cached.latestVersion,\n current,\n };\n cachedUpdateInfo = result;\n return result;\n }\n }\n } catch {\n /* cache miss \u2014 proceed to registry */\n }\n\n // Fetch from npm registry\n try {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n\n const res = await fetch(NPM_REGISTRY_URL, {\n signal: controller.signal,\n });\n clearTimeout(timeout);\n\n if (!res.ok) return null;\n\n const data = (await res.json()) as { version?: string };\n const latest = data.version ?? current;\n\n // Persist cache to disk\n const cache: VersionCache = {\n lastCheck: Date.now(),\n latestVersion: latest,\n currentVersion: current,\n };\n try {\n const dir = dirname(cacheFile);\n await mkdir(dir, { recursive: true });\n await writeFile(cacheFile, JSON.stringify(cache), \"utf-8\");\n } catch {\n /* non-critical \u2014 cache write failure is fine */\n }\n\n const result: UpdateInfo = {\n hasUpdate: isNewerVersion(latest, current),\n latest,\n current,\n };\n cachedUpdateInfo = result;\n return result;\n } catch {\n // Network error, abort, or timeout \u2014 silently skip\n return null;\n }\n}\n\n// \u2500\u2500 Internal Helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** Path to the on-disk version cache file. Resolved at call time for testability. */\nfunction getCacheFilePath(): string {\n return join(getStateDir(), \"version-check.json\");\n}\n\n/**\n * Simple semver comparison: is version `a` strictly newer than version `b`?\n * Compares major.minor.patch numerically.\n */\nfunction isNewerVersion(a: string, b: string): boolean {\n const pa = a.split(\".\").map(Number);\n const pb = b.split(\".\").map(Number);\n for (let i = 0; i < 3; i++) {\n const va = pa[i] ?? 0;\n const vb = pb[i] ?? 0;\n if (va > vb) return true;\n if (va < vb) return false;\n }\n return false;\n}\n", "/**\n * Claudemon Doctor \u2014 diagnostic tool.\n * Checks the health of the Claudemon installation.\n *\n * Usage: bun run cli/doctor.ts\n */\n\nimport { access, stat, unlink, readdir, readFile } from \"node:fs/promises\";\nimport { constants as fsConstants, existsSync } from \"node:fs\";\nimport { resolve, dirname } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { spawnSync } from \"node:child_process\";\nimport { StateManager } from \"../src/state/state-manager.js\";\nimport { PlayerStateSchema } from \"../src/state/schemas.js\";\nimport { checkForUpdate, getCurrentVersion } from \"../src/engine/version-check.js\";\n\nimport type { ClaudeConfig, ClaudeSettings } from \"./shared.js\";\nimport {\n readJson,\n info,\n CLAUDE_CONFIG,\n CLAUDE_SETTINGS,\n STATE_DIR,\n SKILL_DEST,\n HOOK_SCRIPT,\n} from \"./shared.js\";\n\n// \u2500\u2500 Local Constants \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst STATE_FILE = `${STATE_DIR}/state.json`;\nconst LOCK_FILE = `${STATE_DIR}/state.lock`;\nconst LOCK_MAX_AGE_MS = 5000;\nconst EXPECTED_SPRITE_COUNT = 151;\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n// Sprite dir: check multiple candidate paths (works from source, dist, and npm global)\nfunction findColorscriptDir(): string | null {\n const candidates = [\n resolve(dirname(__dirname), \"sprites\", \"colorscripts\", \"small\"),\n resolve(dirname(__dirname), \"..\", \"sprites\", \"colorscripts\", \"small\"),\n resolve(__dirname, \"..\", \"sprites\", \"colorscripts\", \"small\"),\n resolve(__dirname, \"..\", \"..\", \"sprites\", \"colorscripts\", \"small\"),\n ];\n for (const c of candidates) {\n if (existsSync(c)) return c;\n }\n return null;\n}\nconst COLORSCRIPT_DIR = findColorscriptDir();\n\n// \u2500\u2500 Helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\ninterface CheckResult {\n label: string;\n passed: boolean;\n detail: string;\n}\n\nfunction formatCheck(result: CheckResult): string {\n const icon = result.passed ? \"\\u2713\" : \"\\u2717\";\n return `[${icon}] ${result.label}: ${result.detail}`;\n}\n\n// \u2500\u2500 Check 1: Bun Version \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function checkBun(): Promise<CheckResult> {\n try {\n const result = spawnSync(\"bun\", [\"--version\"], { stdio: \"pipe\" });\n if (result.error) throw result.error;\n const output = result.stdout?.toString().trim();\n return { label: \"Bun runtime\", passed: true, detail: `v${output}` };\n } catch {\n return { label: \"Bun runtime\", passed: false, detail: \"not found\" };\n }\n}\n\n// \u2500\u2500 Check 2: State Directory \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function checkStateDir(): Promise<CheckResult> {\n try {\n await access(STATE_DIR, fsConstants.F_OK);\n return { label: \"State directory\", passed: true, detail: \"~/.claudemon/\" };\n } catch {\n return {\n label: \"State directory\",\n passed: false,\n detail: \"~/.claudemon/ not found (run installer)\",\n };\n }\n}\n\n// \u2500\u2500 Check 3: State File \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function checkStateFile(): Promise<CheckResult> {\n try {\n await access(STATE_FILE, fsConstants.F_OK);\n } catch {\n return { label: \"State file\", passed: false, detail: \"not found (run /buddy starter first)\" };\n }\n\n try {\n const text = await readFile(STATE_FILE, \"utf-8\");\n const data = JSON.parse(text) as Record<string, unknown>;\n\n // Check for active pokemon\n const party = data[\"party\"];\n if (Array.isArray(party) && party.length > 0) {\n const active = party.find(\n (p: unknown) =>\n typeof p === \"object\" &&\n p !== null &&\n \"isActive\" in p &&\n (p as Record<string, unknown>)[\"isActive\"] === true,\n );\n if (active && typeof active === \"object\" && \"pokemonId\" in active) {\n return {\n label: \"State file\",\n passed: true,\n detail: `valid, active Pokemon #${(active as Record<string, unknown>)[\"pokemonId\"]}`,\n };\n }\n return { label: \"State file\", passed: true, detail: \"valid, but no active Pokemon set\" };\n }\n\n return { label: \"State file\", passed: true, detail: \"valid JSON, no party members yet\" };\n } catch {\n return { label: \"State file\", passed: false, detail: \"exists but invalid JSON\" };\n }\n}\n\n// \u2500\u2500 Check 4: MCP Server Registration \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function checkMcpServer(): Promise<CheckResult> {\n const config = await readJson<ClaudeConfig>(CLAUDE_CONFIG);\n if (!config) {\n return { label: \"MCP server\", passed: false, detail: \"~/.claude.json not found\" };\n }\n\n if (config.mcpServers && config.mcpServers[\"claudemon\"]) {\n return { label: \"MCP server\", passed: true, detail: \"registered in ~/.claude.json\" };\n }\n\n return { label: \"MCP server\", passed: false, detail: \"not registered in ~/.claude.json\" };\n}\n\n// \u2500\u2500 Check 5: Hooks \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function checkHooks(): Promise<CheckResult> {\n const settings = await readJson<ClaudeSettings>(CLAUDE_SETTINGS);\n if (!settings) {\n return { label: \"Hooks\", passed: false, detail: \"~/.claude/settings.json not found\" };\n }\n\n if (!settings.hooks || !settings.hooks[\"PostToolUse\"]) {\n return { label: \"Hooks\", passed: false, detail: \"no PostToolUse hooks configured\" };\n }\n\n const hasOurHook = settings.hooks[\"PostToolUse\"].some((m) =>\n m.hooks.some((h) => h.command.includes(\"post-tool-use.sh\")),\n );\n\n if (hasOurHook) {\n return { label: \"Hooks\", passed: true, detail: \"PostToolUse configured\" };\n }\n\n return { label: \"Hooks\", passed: false, detail: \"PostToolUse exists but missing Claudemon hook\" };\n}\n\n// \u2500\u2500 Check 6: Skill \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function checkSkill(): Promise<CheckResult> {\n try {\n await access(SKILL_DEST, fsConstants.F_OK);\n return { label: \"Skill\", passed: true, detail: \"/buddy command installed\" };\n } catch {\n return { label: \"Skill\", passed: false, detail: \"~/.claude/skills/buddy/SKILL.md not found\" };\n }\n}\n\n// \u2500\u2500 Check 7: Hook Script Executable \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function checkHookScript(): Promise<CheckResult> {\n // Windows doesn't use Unix file permissions\n if (process.platform === \"win32\") {\n try {\n await access(HOOK_SCRIPT, fsConstants.F_OK);\n return { label: \"Hook script\", passed: true, detail: \"found (Windows \u2014 no chmod needed)\" };\n } catch {\n return { label: \"Hook script\", passed: false, detail: \"not found\" };\n }\n }\n\n try {\n await access(HOOK_SCRIPT, fsConstants.X_OK);\n return { label: \"Hook script\", passed: true, detail: \"executable\" };\n } catch {\n try {\n await access(HOOK_SCRIPT, fsConstants.F_OK);\n return {\n label: \"Hook script\",\n passed: false,\n detail: \"exists but not executable (run chmod +x)\",\n };\n } catch {\n return { label: \"Hook script\", passed: false, detail: \"not found\" };\n }\n }\n}\n\n// \u2500\u2500 Check 7b: jq Installed \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function checkJq(): Promise<CheckResult> {\n try {\n const result = spawnSync(\"jq\", [\"--version\"], { stdio: \"pipe\" });\n if (result.error) throw result.error;\n const output = result.stdout?.toString().trim();\n return { label: \"jq\", passed: true, detail: output || \"installed\" };\n } catch {\n const installHint =\n process.platform === \"darwin\"\n ? \"brew install jq\"\n : process.platform === \"win32\"\n ? \"winget install jqlang.jq\"\n : \"sudo apt install jq\";\n return {\n label: \"jq\",\n passed: false,\n detail: `not found \u2014 required for status line. Install: ${installHint}`,\n };\n }\n}\n\n// \u2500\u2500 Check 8: State Manager Load \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function checkStateManager(): Promise<CheckResult> {\n try {\n StateManager.resetInstance();\n const manager = StateManager.getInstance();\n const state = await manager.load();\n StateManager.resetInstance();\n\n if (state) {\n return { label: \"State manager\", passed: true, detail: \"loaded successfully\" };\n }\n return { label: \"State manager\", passed: true, detail: \"no state file yet (first run)\" };\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err);\n StateManager.resetInstance();\n return { label: \"State manager\", passed: false, detail: `load failed: ${message}` };\n }\n}\n\n// \u2500\u2500 Check 9: Stale Lock File \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function checkStaleLock(): Promise<CheckResult> {\n try {\n const lockStat = await stat(LOCK_FILE);\n const lockAge = Date.now() - lockStat.mtimeMs;\n\n if (lockAge > LOCK_MAX_AGE_MS) {\n // Offer cleanup\n info(`Stale lock file found (${Math.round(lockAge / 1000)}s old). Cleaning up...`);\n try {\n await unlink(LOCK_FILE);\n return { label: \"Lock file\", passed: true, detail: \"stale lock cleaned up\" };\n } catch {\n return { label: \"Lock file\", passed: false, detail: \"stale lock found, cleanup failed\" };\n }\n }\n\n return {\n label: \"Lock file\",\n passed: true,\n detail: `active (${Math.round(lockAge / 1000)}s old)`,\n };\n } catch {\n // No lock file \u2014 this is the normal case\n return { label: \"Lock file\", passed: true, detail: \"no lock (clean)\" };\n }\n}\n\n// \u2500\u2500 Check 10: Sprite Count \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function checkSpriteCount(): Promise<CheckResult> {\n try {\n if (!COLORSCRIPT_DIR) {\n return { label: \"Sprites\", passed: false, detail: \"colorscripts directory not found\" };\n }\n await access(COLORSCRIPT_DIR, fsConstants.F_OK);\n const entries = await readdir(COLORSCRIPT_DIR);\n const spriteFiles = entries.filter((f) => f.endsWith(\".txt\"));\n const count = spriteFiles.length;\n\n if (count >= EXPECTED_SPRITE_COUNT) {\n return {\n label: \"Sprites\",\n passed: true,\n detail: `${count}/${EXPECTED_SPRITE_COUNT} sprite files`,\n };\n }\n\n return {\n label: \"Sprites\",\n passed: false,\n detail: `only ${count}/${EXPECTED_SPRITE_COUNT} sprite files (some sprites missing)`,\n };\n } catch {\n return { label: \"Sprites\", passed: false, detail: \"colorscripts directory not found\" };\n }\n}\n\n// \u2500\u2500 Check 11: State File Validity (Zod) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function checkStateValidity(): Promise<CheckResult> {\n try {\n await access(STATE_FILE, fsConstants.F_OK);\n } catch {\n return { label: \"State validity\", passed: true, detail: \"no state file yet\" };\n }\n\n try {\n const text = await readFile(STATE_FILE, \"utf-8\");\n if (!text.trim()) {\n return { label: \"State validity\", passed: false, detail: \"state file is empty\" };\n }\n\n const data = JSON.parse(text) as unknown;\n const result = PlayerStateSchema.safeParse(data);\n\n if (result.success) {\n return { label: \"State validity\", passed: true, detail: \"schema valid\" };\n }\n\n // Report first few issues\n const issues = result.error.issues.slice(0, 3);\n const details = issues.map((i) => `${i.path.join(\".\")}: ${i.message}`).join(\"; \");\n return {\n label: \"State validity\",\n passed: false,\n detail: `schema errors: ${details}`,\n };\n } catch {\n return { label: \"State validity\", passed: false, detail: \"invalid JSON\" };\n }\n}\n\n// \u2500\u2500 Check 12: Version \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function checkVersion(): Promise<CheckResult> {\n const current = getCurrentVersion();\n if (current === \"unknown\") {\n return { label: \"Version\", passed: false, detail: \"could not determine current version\" };\n }\n\n try {\n const result = await checkForUpdate();\n if (!result) {\n return {\n label: \"Version\",\n passed: true,\n detail: `v${current} (could not reach npm registry)`,\n };\n }\n\n if (result.hasUpdate) {\n return {\n label: \"Version\",\n passed: false,\n detail: `v${current} (v${result.latest} available \u2014 run: npm install -g @umang-boss/claudemon)`,\n };\n }\n\n return { label: \"Version\", passed: true, detail: `v${current} (latest)` };\n } catch {\n return { label: \"Version\", passed: true, detail: `v${current} (check skipped)` };\n }\n}\n\n// \u2500\u2500 Main \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport async function doctor(): Promise<void> {\n console.log(\"\");\n console.log(\"Claudemon Doctor\");\n console.log(\"================\");\n console.log(\"\");\n\n const checks: CheckResult[] = [\n await checkVersion(),\n await checkBun(),\n await checkJq(),\n await checkStateDir(),\n await checkStateFile(),\n await checkMcpServer(),\n await checkHooks(),\n await checkSkill(),\n await checkHookScript(),\n await checkStateManager(),\n await checkStaleLock(),\n await checkSpriteCount(),\n await checkStateValidity(),\n ];\n\n for (const check of checks) {\n console.log(formatCheck(check));\n }\n\n const passed = checks.filter((c) => c.passed).length;\n const total = checks.length;\n\n console.log(\"\");\n console.log(`Result: ${passed}/${total} checks passed`);\n\n if (passed < total) {\n console.log(\"\");\n console.log(\"Run 'bun run cli/install.ts' to fix missing components.\");\n }\n\n console.log(\"\");\n}\n\n// Run if executed directly\ndoctor().catch((err: unknown) => {\n const message = err instanceof Error ? err.message : String(err);\n console.error(`\\nDoctor failed: ${message}`);\n process.exit(1);\n});\n", "#!/usr/bin/env bun\n/**\n * Claudemon CLI entry point.\n * Routes to install, uninstall, update, doctor, or --version.\n */\n\nimport { readFileSync } from \"node:fs\";\nimport { resolve, dirname } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nexport {};\nconst command = process.argv[2];\n\nswitch (command) {\n case \"--version\":\n case \"-v\":\n case \"version\": {\n const __dirname = dirname(fileURLToPath(import.meta.url));\n const pkgPaths = [\n resolve(__dirname, \"..\", \"package.json\"),\n resolve(__dirname, \"..\", \"..\", \"package.json\"),\n ];\n for (const p of pkgPaths) {\n try {\n const pkg = JSON.parse(readFileSync(p, \"utf-8\")) as { version: string };\n console.log(`claudemon v${pkg.version}`);\n break;\n } catch {\n continue;\n }\n }\n break;\n }\n case \"install\":\n await import(\"./install.js\");\n break;\n case \"uninstall\":\n await import(\"./uninstall.js\");\n break;\n case \"update\":\n await import(\"./update.js\");\n break;\n case \"doctor\":\n await import(\"./doctor.js\");\n break;\n default:\n console.log(`\nClaudemon \u2014 Pokemon coding companion for Claude Code\n\nUsage:\n claudemon install Set up Claudemon (MCP server, hooks, skill, status line)\n claudemon uninstall Remove Claudemon from Claude Code\n claudemon update Re-register everything (preserves save data)\n claudemon doctor Run diagnostics\n claudemon --version Show version\n\nAfter install, start a new Claude Code session and type /buddy\n`);\n break;\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;AAKA,SAAS,SAAS,eAAe;AACjC,SAAS,qBAAqB;AAC9B,SAAS,YAAY,aAAa,mBAAmB;AACrD,SAAS,UAAU,WAAW,UAAU,gBAAgB;AAyEjD,SAAS,aAAuD;AAErE,QAAM,gBACJ,QAAQ,aAAa,UACjB,CAAC,GAAG,IAAI,wBAAwB,GAAG,IAAI,qBAAqB,GAAG,IAAI,eAAe,IAClF,CAAC,GAAG,IAAI,iBAAiB,sBAAsB,cAAc;AACnE,aAAW,KAAK,eAAe;AAC7B,QAAI,WAAW,CAAC,GAAG;AACjB,aAAO,EAAE,SAAS,GAAG,aAAa,gBAAgB;AAAA,IACpD;AAAA,EACF;AAGA,MAAI,WAAW,eAAe,GAAG;AAC/B,WAAO,EAAE,SAAS,QAAQ,aAAa,gBAAgB;AAAA,EACzD;AAGA,MAAI,WAAW,sBAAsB,GAAG;AACtC,WAAO,EAAE,SAAS,QAAQ,aAAa,uBAAuB;AAAA,EAChE;AAGA,SAAO,EAAE,SAAS,OAAO,aAAa,gBAAgB;AACxD;AAIO,SAAS,GAAG,KAAmB;AACpC,UAAQ,IAAI,YAAY,GAAG,EAAE;AAC/B;AAEO,SAAS,KAAK,KAAmB;AACtC,UAAQ,MAAM,YAAY,GAAG,EAAE;AACjC;AAEO,SAAS,KAAK,KAAmB;AACtC,UAAQ,IAAI,OAAO,GAAG,EAAE;AAC1B;AAEA,eAAsB,SAAY,MAAiC;AACjE,MAAI;AACF,UAAM,SAAS,MAAM,YAAY,IAAI;AACrC,UAAM,OAAO,MAAM,SAAS,MAAM,OAAO;AACzC,WAAO,KAAK,MAAM,IAAI;AAAA,EACxB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,eAAsB,UAAU,MAAc,MAA8B;AAC1E,QAAM,UAAU,MAAM,KAAK,UAAU,MAAM,MAAM,CAAC,IAAI,MAAM,OAAO;AACrE;AArIA,IAgDM,MAOA,YACA,WAGF,YAIS,aACA,YACA,eACA,iBACA,WACA,WACA,gBACA,YACA,aACA,kBACA,yBACA,mBACA,iBACA,iBAEA;AA9Eb;AAAA;AAAA;AAgDA,IAAM,OAAO,QAAQ,IAAI,MAAM,KAAK,QAAQ,IAAI,aAAa;AAC7D,QAAI,CAAC,MAAM;AACT,cAAQ,MAAM,0EAA0E;AACxF,cAAQ,KAAK,CAAC;AAAA,IAChB;AAGA,IAAM,aAAa,cAAc,YAAY,GAAG;AAChD,IAAM,YAAY,QAAQ,UAAU;AAGpC,IAAI,aAAa,QAAQ,QAAQ,SAAS,CAAC;AAC3C,QAAI,WAAW,SAAS,OAAO,KAAK,WAAW,SAAS,QAAQ,GAAG;AACjE,mBAAa,QAAQ,YAAY,IAAI;AAAA,IACvC;AACO,IAAM,cAAc;AACpB,IAAM,aAAa,GAAG,IAAI;AAC1B,IAAM,gBAAgB,GAAG,IAAI;AAC7B,IAAM,kBAAkB,GAAG,UAAU;AACrC,IAAM,YAAY,GAAG,IAAI;AACzB,IAAM,YAAY,GAAG,WAAW;AAChC,IAAM,iBAAiB,GAAG,UAAU;AACpC,IAAM,aAAa,GAAG,cAAc;AACpC,IAAM,cAAc,GAAG,WAAW;AAClC,IAAM,mBAAmB,GAAG,WAAW;AACvC,IAAM,0BAA0B,GAAG,WAAW;AAC9C,IAAM,oBAAoB,GAAG,WAAW;AACxC,IAAM,kBAAkB,GAAG,WAAW;AACtC,IAAM,kBAAkB,GAAG,WAAW;AAEtC,IAAM,yBAAyB,GAAG,WAAW;AAAA;AAAA;;;AC9EpD;AAAA;AAAA;AAAA;AAOA,SAAS,OAAO,UAAU,OAAO,cAAc;AAC/C,SAAS,aAAaA,oBAAmB;AACzC,SAAS,iBAAiB;AAwB1B,eAAe,qBAAuC;AACpD,MAAI,UAAU;AAGd,MAAI;AACF,UAAM,YAAY,UAAU,OAAO,CAAC,WAAW,GAAG,EAAE,OAAO,OAAO,CAAC;AACnE,QAAI,CAAC,UAAU,OAAO;AACpB,SAAG,iBAAiB,UAAU,QAAQ,SAAS,EAAE,KAAK,CAAC,cAAc;AAAA,IACvE,OAAO;AACL,YAAM,IAAI,MAAM,QAAQ;AAAA,IAC1B;AAAA,EACF,QAAQ;AACN,UAAM,aAAa,UAAU,QAAQ,CAAC,WAAW,GAAG,EAAE,OAAO,OAAO,CAAC;AACrE,QAAI,CAAC,WAAW,OAAO;AACrB,SAAG,oBAAoB,WAAW,QAAQ,SAAS,EAAE,KAAK,CAAC,EAAE;AAAA,IAC/D,OAAO;AACL,WAAK,+DAA+D;AACpE,gBAAU;AAAA,IACZ;AAAA,EACF;AAGA,MAAI;AACF,UAAM,OAAO,YAAYA,aAAY,IAAI;AACzC,OAAG,mCAAmC;AAAA,EACxC,QAAQ;AACN,SAAK,8EAA8E;AACnF,UAAM,WAAW,QAAQ,aAAa,UAAU,6BAA6B;AAC7E,YAAQ,MAAM,2BAA2B,QAAQ,EAAE;AACnD,cAAU;AAAA,EACZ;AAGA,MAAI;AACF,UAAM,WAAW,UAAU,MAAM,CAAC,WAAW,GAAG,EAAE,OAAO,OAAO,CAAC;AACjE,QAAI,CAAC,SAAS,OAAO;AACnB,SAAG,OAAO,SAAS,QAAQ,SAAS,EAAE,KAAK,CAAC,EAAE;AAAA,IAChD,OAAO;AACL,YAAM,IAAI,MAAM,OAAO;AAAA,IACzB;AAAA,EACF,QAAQ;AACN,UAAM,cACJ,QAAQ,aAAa,WACjB,oBACA,QAAQ,aAAa,UACnB,6BACA;AACR,YAAQ,MAAM,4DAA4D,WAAW,EAAE;AAAA,EACzF;AAEA,SAAO;AACT;AAIA,eAAe,uBAAsC;AACnD,QAAM,MAAM,WAAW,EAAE,WAAW,KAAK,CAAC;AAC1C,KAAG,oBAAoB,SAAS,GAAG;AACrC;AAIA,eAAe,oBAAmC;AAChD,QAAM,WAAW,MAAM,SAAuB,aAAa;AAC3D,QAAM,SAAuB,YAAY,CAAC;AAE1C,MAAI,CAAC,OAAO,YAAY;AACtB,WAAO,aAAa,CAAC;AAAA,EACvB;AAEA,SAAO,WAAW,WAAW,IAAI;AAAA,IAC/B,SAAS,WAAW,EAAE;AAAA,IACtB,MAAM,CAAC,WAAW,EAAE,WAAW;AAAA,IAC/B,KAAK,CAAC;AAAA,EACR;AAEA,QAAM,UAAU,eAAe,MAAM;AACrC,KAAG,0CAA0C;AAC/C;AAIA,eAAe,eAA8B;AAC3C,QAAM,WAAW,MAAM,SAAyB,eAAe;AAC/D,QAAM,WAA2B,YAAY,CAAC;AAE9C,MAAI,CAAC,SAAS,OAAO;AACnB,aAAS,QAAQ,CAAC;AAAA,EACpB;AAEA,QAAM,UAAuB;AAAA,IAC3B,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS;AAAA,EACX;AAEA,QAAM,aAA0B;AAAA,IAC9B,SAAS;AAAA,IACT,OAAO,CAAC,OAAO;AAAA,EACjB;AAGA,QAAM,cAAc,SAAS,MAAM,aAAa;AAChD,MAAI,aAAa;AAEf,UAAM,WAAW,YAAY;AAAA,MAC3B,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,CAAC,MAAM,EAAE,QAAQ,SAAS,kBAAkB,CAAC;AAAA,IACpE;AACA,aAAS,KAAK,UAAU;AACxB,aAAS,MAAM,aAAa,IAAI;AAAA,EAClC,OAAO;AACL,aAAS,MAAM,aAAa,IAAI,CAAC,UAAU;AAAA,EAC7C;AAGA,QAAM,WAAwB;AAAA,IAC5B,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS;AAAA,EACX;AAEA,QAAM,YAAyB;AAAA,IAC7B,OAAO,CAAC,QAAQ;AAAA,EAClB;AAEA,QAAM,YAAY,SAAS,MAAM,MAAM;AACvC,MAAI,WAAW;AACb,UAAM,WAAW,UAAU,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,CAAC,MAAM,EAAE,QAAQ,SAAS,SAAS,CAAC,CAAC;AAC5F,aAAS,KAAK,SAAS;AACvB,aAAS,MAAM,MAAM,IAAI;AAAA,EAC3B,OAAO;AACL,aAAS,MAAM,MAAM,IAAI,CAAC,SAAS;AAAA,EACrC;AAGA,QAAM,iBAA8B;AAAA,IAClC,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS;AAAA,EACX;AAEA,QAAM,kBAA+B;AAAA,IACnC,OAAO,CAAC,cAAc;AAAA,EACxB;AAEA,QAAM,kBAAkB,SAAS,MAAM,kBAAkB;AACzD,MAAI,iBAAiB;AACnB,UAAM,WAAW,gBAAgB;AAAA,MAC/B,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,CAAC,MAAM,EAAE,QAAQ,SAAS,uBAAuB,CAAC;AAAA,IACzE;AACA,aAAS,KAAK,eAAe;AAC7B,aAAS,MAAM,kBAAkB,IAAI;AAAA,EACvC,OAAO;AACL,aAAS,MAAM,kBAAkB,IAAI,CAAC,eAAe;AAAA,EACvD;AAEA,QAAM,UAAU,iBAAiB,QAAQ;AACzC,KAAG,kFAAkF;AACvF;AAIA,eAAe,qBAAoC;AACjD,QAAM,WAAW,MAAM,SAAyB,eAAe;AAC/D,QAAM,WAA2B,YAAY,CAAC;AAG9C,WAAS,aAAa;AAAA,IACpB,MAAM;AAAA,IACN,SAAS;AAAA,IACT,iBAAiB;AAAA,EACnB;AAEA,QAAM,UAAU,iBAAiB,QAAQ;AACzC,KAAG,oDAAoD;AACzD;AAIA,eAAe,eAA8B;AAC3C,QAAM,MAAM,gBAAgB,EAAE,WAAW,KAAK,CAAC;AAC/C,QAAM,SAAS,WAAW,UAAU;AACpC,KAAG,4DAA4D;AACjE;AAIA,eAAe,uBAAsC;AACnD,MAAI,QAAQ,aAAa,SAAS;AAChC,OAAG,4CAA4C;AAC/C;AAAA,EACF;AACA,QAAM,MAAM,aAAa,GAAK;AAC9B,KAAG,8CAA8C;AACjD,QAAM,MAAM,kBAAkB,GAAK;AACnC,KAAG,qCAAqC;AACxC,QAAM,MAAM,yBAAyB,GAAK;AAC1C,KAAG,mDAAmD;AACtD,QAAM,MAAM,mBAAmB,GAAK;AACpC,KAAG,oCAAoC;AACzC;AAIA,eAAsB,UAAyB;AAC7C,UAAQ,IAAI,EAAE;AACd,UAAQ,IAAI,qBAAqB;AACjC,UAAQ,IAAI,qBAAqB;AACjC,UAAQ,IAAI,EAAE;AACd,UAAQ,IAAI,2BAA2B;AAEvC,QAAM,WAAW,MAAM,mBAAmB;AAC1C,MAAI,CAAC,UAAU;AACb,YAAQ,IAAI,EAAE;AACd,SAAK,4DAA4D;AACjE,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,UAAQ,IAAI,EAAE;AACd,UAAQ,IAAI,eAAe;AAE3B,QAAM,qBAAqB;AAC3B,QAAM,kBAAkB;AACxB,QAAM,aAAa;AACnB,QAAM,mBAAmB;AACzB,QAAM,aAAa;AACnB,QAAM,qBAAqB;AAE3B,UAAQ,IAAI,EAAE;AACd,UAAQ,IAAI,0CAA0C;AACtD,UAAQ,IAAI,EAAE;AACd,UAAQ,IAAI,aAAa;AACzB,UAAQ,IAAI,sCAAsC;AAClD,UAAQ,IAAI,sDAAsD;AAClE,UAAQ,IAAI,EAAE;AACd,UAAQ,IAAI,qDAAqD;AACjE,UAAQ,IAAI,EAAE;AAChB;AA9QA;AAAA;AAAA;AAYA;AAqQA,YAAQ,EAAE,MAAM,CAAC,QAAiB;AAChC,YAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAC/D,cAAQ,MAAM;AAAA,uBAA0B,OAAO,EAAE;AACjD,cAAQ,KAAK,CAAC;AAAA,IAChB,CAAC;AAAA;AAAA;;;ACrRD;AAAA;AAAA;AAAA;AAOA,SAAS,IAAI,UAAAC,eAAc;AAC3B,SAAS,aAAaC,oBAAmB;AAgBzC,eAAe,kBAAiC;AAC9C,QAAM,SAAS,MAAM,SAAuB,aAAa;AACzD,MAAI,CAAC,QAAQ;AACX,SAAK,0DAA0D;AAC/D;AAAA,EACF;AAEA,MAAI,CAAC,OAAO,cAAc,CAAC,OAAO,WAAW,WAAW,GAAG;AACzD,SAAK,gDAAgD;AACrD;AAAA,EACF;AAEA,SAAO,OAAO,WAAW,WAAW;AAGpC,MAAI,OAAO,KAAK,OAAO,UAAU,EAAE,WAAW,GAAG;AAC/C,WAAO,OAAO;AAAA,EAChB;AAEA,QAAM,UAAU,eAAe,MAAM;AACrC,KAAG,yCAAyC;AAC9C;AAIA,eAAe,cAA6B;AAC1C,QAAM,WAAW,MAAM,SAAyB,eAAe;AAC/D,MAAI,CAAC,UAAU;AACb,SAAK,8DAA8D;AACnE;AAAA,EACF;AAEA,MAAI,CAAC,SAAS,OAAO;AACnB,SAAK,2CAA2C;AAChD;AAAA,EACF;AAGA,MAAI,SAAS,MAAM,aAAa,GAAG;AACjC,UAAM,WAAW,SAAS,MAAM,aAAa,EAAE;AAAA,MAC7C,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,CAAC,MAAM,EAAE,QAAQ,SAAS,kBAAkB,CAAC;AAAA,IACpE;AACA,QAAI,SAAS,WAAW,GAAG;AACzB,aAAO,SAAS,MAAM,aAAa;AAAA,IACrC,OAAO;AACL,eAAS,MAAM,aAAa,IAAI;AAAA,IAClC;AAAA,EACF;AAGA,MAAI,SAAS,MAAM,MAAM,GAAG;AAC1B,UAAM,WAAW,SAAS,MAAM,MAAM,EAAE;AAAA,MACtC,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,CAAC,MAAM,EAAE,QAAQ,SAAS,SAAS,CAAC;AAAA,IAC3D;AACA,QAAI,SAAS,WAAW,GAAG;AACzB,aAAO,SAAS,MAAM,MAAM;AAAA,IAC9B,OAAO;AACL,eAAS,MAAM,MAAM,IAAI;AAAA,IAC3B;AAAA,EACF;AAGA,MAAI,SAAS,MAAM,kBAAkB,GAAG;AACtC,UAAM,WAAW,SAAS,MAAM,kBAAkB,EAAE;AAAA,MAClD,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,CAAC,MAAM,EAAE,QAAQ,SAAS,uBAAuB,CAAC;AAAA,IACzE;AACA,QAAI,SAAS,WAAW,GAAG;AACzB,aAAO,SAAS,MAAM,kBAAkB;AAAA,IAC1C,OAAO;AACL,eAAS,MAAM,kBAAkB,IAAI;AAAA,IACvC;AAAA,EACF;AAGA,MAAI,OAAO,KAAK,SAAS,KAAK,EAAE,WAAW,GAAG;AAC5C,WAAO,SAAS;AAAA,EAClB;AAEA,QAAM,UAAU,iBAAiB,QAAQ;AACzC,KAAG,yFAAyF;AAC9F;AAIA,eAAe,cAA6B;AAC1C,MAAI;AACF,UAAMD,QAAO,GAAG,cAAc,aAAaC,aAAY,IAAI;AAAA,EAC7D,QAAQ;AACN,SAAK,8DAA8D;AACnE;AAAA,EACF;AAEA,QAAM,GAAG,gBAAgB,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AACzD,KAAG,wCAAwC;AAC7C;AAIA,eAAe,oBAAmC;AAChD,MAAI;AACF,UAAMD,QAAO,GAAG,SAAS,eAAeC,aAAY,IAAI;AACxD,SAAK,qCAAqC,SAAS,+BAA+B;AAAA,EACpF,QAAQ;AACN,SAAK,oBAAoB,SAAS,+BAA+B;AAAA,EACnE;AACF;AAIA,eAAsB,YAA2B;AAC/C,UAAQ,IAAI,EAAE;AACd,UAAQ,IAAI,uBAAuB;AACnC,UAAQ,IAAI,uBAAuB;AACnC,UAAQ,IAAI,EAAE;AACd,UAAQ,IAAI,wCAAwC;AACpD,UAAQ,IAAI,EAAE;AAEd,QAAM,gBAAgB;AACtB,QAAM,YAAY;AAClB,QAAM,YAAY;AAClB,QAAM,kBAAkB;AAExB,UAAQ,IAAI,EAAE;AACd,UAAQ,IAAI,4CAA4C;AACxD,UAAQ,IAAI,EAAE;AAChB;AArJA;AAAA;AAAA;AAWA;AA6IA,cAAU,EAAE,MAAM,CAAC,QAAiB;AAClC,YAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAC/D,cAAQ,MAAM;AAAA,oBAAuB,OAAO,EAAE;AAC9C,cAAQ,KAAK,CAAC;AAAA,IAChB,CAAC;AAAA;AAAA;;;AC5JD;AAAA;AAAA;AAAA;AAWA,SAAS,SAAAC,QAAO,YAAAC,WAAU,SAAAC,QAAO,UAAAC,eAAc;AAC/C,SAAS,aAAaC,cAAa,cAAAC,aAAY,mBAAmB;AAClE,SAAS,YAAY;AACrB,SAAS,aAAAC,kBAAiB;AA0B1B,eAAeC,sBAAuC;AACpD,MAAI,UAAU;AAEd,MAAI;AACF,UAAM,YAAYD,WAAU,OAAO,CAAC,WAAW,GAAG,EAAE,OAAO,OAAO,CAAC;AACnE,QAAI,CAAC,UAAU,OAAO;AACpB,SAAG,iBAAiB,UAAU,QAAQ,SAAS,EAAE,KAAK,CAAC,cAAc;AAAA,IACvE,OAAO;AACL,YAAM,IAAI,MAAM,QAAQ;AAAA,IAC1B;AAAA,EACF,QAAQ;AACN,UAAM,aAAaA,WAAU,QAAQ,CAAC,WAAW,GAAG,EAAE,OAAO,OAAO,CAAC;AACrE,QAAI,CAAC,WAAW,OAAO;AACrB,SAAG,oBAAoB,WAAW,QAAQ,SAAS,EAAE,KAAK,CAAC,EAAE;AAAA,IAC/D,OAAO;AACL,WAAK,uCAAuC;AAC5C,gBAAU;AAAA,IACZ;AAAA,EACF;AAEA,MAAI;AACF,UAAMH,QAAO,YAAYC,aAAY,IAAI;AACzC,OAAG,mCAAmC;AAAA,EACxC,QAAQ;AACN,SAAK,qCAAqC;AAC1C,cAAU;AAAA,EACZ;AAEA,SAAO;AACT;AAIA,eAAe,qBAAoC;AACjD,QAAM,SAAS,MAAM,SAAuB,aAAa;AACzD,MAAI,CAAC,QAAQ,aAAa,WAAW,GAAG;AACtC,SAAK,uCAAuC;AAC5C;AAAA,EACF;AACA,SAAO,OAAO,WAAW,WAAW;AACpC,MAAI,OAAO,KAAK,OAAO,UAAU,EAAE,WAAW,GAAG;AAC/C,WAAO,OAAO;AAAA,EAChB;AACA,QAAM,UAAU,eAAe,MAAM;AACrC,KAAG,sCAAsC;AAC3C;AAEA,eAAe,iBAAgC;AAC7C,QAAM,WAAW,MAAM,SAAyB,eAAe;AAC/D,MAAI,CAAC,UAAU,OAAO;AACpB,SAAK,mBAAmB;AACxB;AAAA,EACF;AAEA,QAAM,YAAY,CAAC,eAAe,QAAQ,kBAAkB;AAC5D,QAAM,WAAW,CAAC,oBAAoB,WAAW,uBAAuB;AAExE,WAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACzC,UAAM,WAAW,UAAU,CAAC;AAC5B,UAAM,UAAU,SAAS,CAAC;AAC1B,UAAM,UAAU,SAAS,MAAM,QAAQ;AACvC,QAAI,SAAS;AACX,YAAM,WAAW,QAAQ,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,CAAC,MAAM,EAAE,QAAQ,SAAS,OAAO,CAAC,CAAC;AACxF,UAAI,SAAS,WAAW,GAAG;AACzB,eAAO,SAAS,MAAM,QAAQ;AAAA,MAChC,OAAO;AACL,iBAAS,MAAM,QAAQ,IAAI;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAEA,MAAI,OAAO,KAAK,SAAS,KAAK,EAAE,WAAW,GAAG;AAC5C,WAAO,SAAS;AAAA,EAClB;AAEA,QAAM,UAAU,iBAAiB,QAAQ;AACzC,KAAG,kCAAkC;AACvC;AAIA,eAAeI,qBAAmC;AAChD,QAAM,WAAW,MAAM,SAAuB,aAAa;AAC3D,QAAM,SAAuB,YAAY,CAAC;AAE1C,MAAI,CAAC,OAAO,YAAY;AACtB,WAAO,aAAa,CAAC;AAAA,EACvB;AAEA,SAAO,WAAW,WAAW,IAAI;AAAA,IAC/B,SAAS,WAAW,EAAE;AAAA,IACtB,MAAM,CAAC,WAAW,EAAE,WAAW;AAAA,IAC/B,KAAK,CAAC;AAAA,EACR;AAEA,QAAM,UAAU,eAAe,MAAM;AACrC,KAAG,0CAA0C;AAC/C;AAEA,eAAeC,gBAA8B;AAC3C,QAAM,WAAW,MAAM,SAAyB,eAAe;AAC/D,QAAM,WAA2B,YAAY,CAAC;AAE9C,MAAI,CAAC,SAAS,OAAO;AACnB,aAAS,QAAQ,CAAC;AAAA,EACpB;AAGA,QAAM,UAAuB;AAAA,IAC3B,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS;AAAA,EACX;AACA,QAAM,aAA0B;AAAA,IAC9B,SAAS;AAAA,IACT,OAAO,CAAC,OAAO;AAAA,EACjB;AACA,QAAM,cAAc,SAAS,MAAM,aAAa;AAChD,MAAI,aAAa;AACf,UAAM,WAAW,YAAY;AAAA,MAC3B,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,CAAC,MAAM,EAAE,QAAQ,SAAS,kBAAkB,CAAC;AAAA,IACpE;AACA,aAAS,KAAK,UAAU;AACxB,aAAS,MAAM,aAAa,IAAI;AAAA,EAClC,OAAO;AACL,aAAS,MAAM,aAAa,IAAI,CAAC,UAAU;AAAA,EAC7C;AAGA,QAAM,WAAwB,EAAE,MAAM,WAAW,SAAS,kBAAkB,SAAS,IAAK;AAC1F,QAAM,YAAyB,EAAE,OAAO,CAAC,QAAQ,EAAE;AACnD,QAAM,YAAY,SAAS,MAAM,MAAM;AACvC,MAAI,WAAW;AACb,UAAM,WAAW,UAAU,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,CAAC,MAAM,EAAE,QAAQ,SAAS,SAAS,CAAC,CAAC;AAC5F,aAAS,KAAK,SAAS;AACvB,aAAS,MAAM,MAAM,IAAI;AAAA,EAC3B,OAAO;AACL,aAAS,MAAM,MAAM,IAAI,CAAC,SAAS;AAAA,EACrC;AAGA,QAAM,iBAA8B;AAAA,IAClC,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS;AAAA,EACX;AACA,QAAM,kBAA+B,EAAE,OAAO,CAAC,cAAc,EAAE;AAC/D,QAAM,kBAAkB,SAAS,MAAM,kBAAkB;AACzD,MAAI,iBAAiB;AACnB,UAAM,WAAW,gBAAgB;AAAA,MAC/B,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,CAAC,MAAM,EAAE,QAAQ,SAAS,uBAAuB,CAAC;AAAA,IACzE;AACA,aAAS,KAAK,eAAe;AAC7B,aAAS,MAAM,kBAAkB,IAAI;AAAA,EACvC,OAAO;AACL,aAAS,MAAM,kBAAkB,IAAI,CAAC,eAAe;AAAA,EACvD;AAEA,QAAM,UAAU,iBAAiB,QAAQ;AACzC,KAAG,uDAAuD;AAC5D;AAEA,eAAeC,sBAAoC;AACjD,QAAM,WAAW,MAAM,SAAyB,eAAe;AAC/D,QAAM,WAA2B,YAAY,CAAC;AAE9C,WAAS,aAAa;AAAA,IACpB,MAAM;AAAA,IACN,SAAS;AAAA,IACT,iBAAiB;AAAA,EACnB;AAEA,QAAM,UAAU,iBAAiB,QAAQ;AACzC,KAAG,yBAAyB;AAC9B;AAEA,eAAeC,gBAA8B;AAC3C,QAAMX,OAAM,gBAAgB,EAAE,WAAW,KAAK,CAAC;AAC/C,QAAMC,UAAS,WAAW,UAAU;AACpC,KAAG,+BAA+B;AACpC;AAEA,eAAeW,wBAAsC;AACnD,QAAMV,OAAM,aAAa,GAAK;AAC9B,QAAMA,OAAM,kBAAkB,GAAK;AACnC,QAAMA,OAAM,yBAAyB,GAAK;AAC1C,QAAMA,OAAM,mBAAmB,GAAK;AACpC,KAAG,yBAAyB;AAC9B;AAIA,eAAe,oBAAiE;AAC9E,QAAM,WAAW,KAAK,aAAa,WAAW,gBAAgB,OAAO;AACrE,MAAI,UAAU;AACd,QAAM,QAAQ;AAEd,WAAS,KAAK,GAAG,MAAM,OAAO,MAAM;AAGlC,UAAM,SAAS,GAAG,EAAE;AACpB,UAAM,YAAYG,YAAW,QAAQ;AACrC,QAAI,CAAC,WAAW;AACd,gBAAU;AACV;AAAA,IACF;AAGA,UAAM,QAAQ,YAAY,QAAQ,EAAE,OAAO,CAAC,MAAM,EAAE,WAAW,MAAM,KAAK,EAAE,SAAS,MAAM,CAAC;AAC5F,QAAI,MAAM,WAAW,GAAG;AACtB;AAAA,IACF;AAAA,EACF;AAEA,SAAO,EAAE,SAAS,MAAM;AAC1B;AAIA,eAAe,sBAAqC;AAClD,MAAI;AACF,UAAMF,QAAO,GAAG,SAAS,eAAeC,aAAY,IAAI;AACxD,OAAG,sCAAsC;AAAA,EAC3C,QAAQ;AACN,SAAK,8DAA8D;AAAA,EACrE;AACF;AAIA,eAAsB,SAAwB;AAC5C,UAAQ,IAAI,EAAE;AACd,UAAQ,IAAI,mBAAmB;AAC/B,UAAQ,IAAI,mBAAmB;AAC/B,UAAQ,IAAI,EAAE;AACd,UAAQ,IAAI,2BAA2B;AAEvC,QAAM,WAAW,MAAMG,oBAAmB;AAC1C,MAAI,CAAC,UAAU;AACb,YAAQ,IAAI,EAAE;AACd,SAAK,4DAA4D;AACjE,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,UAAQ,IAAI,EAAE;AACd,UAAQ,IAAI,+BAA+B;AAC3C,QAAM,mBAAmB;AACzB,QAAM,eAAe;AAErB,UAAQ,IAAI,EAAE;AACd,UAAQ,IAAI,mBAAmB;AAC/B,QAAMC,mBAAkB;AACxB,QAAMC,cAAa;AACnB,QAAMC,oBAAmB;AACzB,QAAMC,cAAa;AACnB,QAAMC,sBAAqB;AAE3B,UAAQ,IAAI,EAAE;AACd,UAAQ,IAAI,qBAAqB;AACjC,QAAM,EAAE,SAAS,MAAM,IAAI,MAAM,kBAAkB;AACnD,MAAI,YAAY,GAAG;AACjB,OAAG,qBAAqB,KAAK,kBAAkB;AAAA,EACjD,WAAW,YAAY,OAAO;AAC5B,SAAK,yEAAyE;AAAA,EAChF,OAAO;AACL,SAAK,iBAAiB,OAAO,IAAI,KAAK,yCAAyC;AAAA,EACjF;AAEA,UAAQ,IAAI,EAAE;AACd,QAAM,oBAAoB;AAE1B,UAAQ,IAAI,EAAE;AACd,UAAQ,IAAI,wCAAwC;AACpD,UAAQ,IAAI,EAAE;AACd,UAAQ,IAAI,6DAA6D;AACzE,UAAQ,IAAI,EAAE;AAChB;AA5TA;AAAA;AAAA;AAiBA;AA8SA,WAAO,EAAE,MAAM,CAAC,QAAiB;AAC/B,YAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAC/D,cAAQ,MAAM;AAAA,iBAAoB,OAAO,EAAE;AAC3C,cAAQ,KAAK,CAAC;AAAA,IAChB,CAAC;AAAA;AAAA;;;AC9MM,SAAS,cAAsB;AACpC,SAAO,GAAG,QAAQ,IAAI,MAAM,KAAK,QAAQ,IAAI,aAAa,KAAK,GAAG;AACpE;AACO,SAAS,eAAuB;AACrC,SAAO,GAAG,YAAY,CAAC;AACzB;AACO,SAAS,gBAAwB;AACtC,SAAO,GAAG,YAAY,CAAC;AACzB;AA7HA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAOa,YAiFA,cAuBA,aAsHA;AArOb;AAAA;AAAA;AAOO,IAAM,aAAa,CAAC,SAAS,WAAW,UAAU,aAAa,SAAS,SAAS;AAiFjF,IAAM,eAAe,CAAC,WAAW,aAAa,aAAa,YAAY,QAAQ;AAuB/E,IAAM,cAAc;AAAA,MACzB;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,IACF;AAgHO,IAAM,qBAAqB;AAAA,MAChC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA;AAAA;;;AC/OA;AAAA,EACE,YAAAC;AAAA,EACA,aAAAC;AAAA,EACA;AAAA,EACA,SAAAC;AAAA,EACA,YAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAAC;AAAA,OACK;AACP,SAAS,iBAAiB;AAG1B,eAAsB,YAAY,MAAc,MAA6B;AAC3E,QAAM,UAAU,GAAG,IAAI,IAAI,KAAK,IAAI,CAAC;AACrC,QAAMH,WAAU,SAAS,MAAM,OAAO;AACtC,QAAM,OAAO,SAAS,IAAI;AAC5B;AAGA,eAAsB,SAAY,MAAiC;AACjE,MAAI;AACF,UAAMG,QAAO,MAAM,UAAU,IAAI;AAAA,EACnC,QAAQ;AACN,WAAO;AAAA,EACT;AACA,MAAI;AACF,UAAM,OAAO,MAAMJ,UAAS,MAAM,OAAO;AACzC,QAAI,CAAC,KAAK,KAAK,GAAG;AAChB,aAAO;AAAA,IACT;AACA,WAAO,KAAK,MAAM,IAAI;AAAA,EACxB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAGA,eAAsB,UAAU,MAA6B;AAC3D,QAAME,OAAM,MAAM,EAAE,WAAW,KAAK,CAAC;AACvC;AAKA,eAAsB,gBAAgB,MAA+B;AACnE,QAAM,aAAa,GAAG,IAAI,YAAY,KAAK,IAAI,CAAC;AAChD,MAAI;AACF,UAAMC,UAAS,MAAM,UAAU;AAAA,EACjC,QAAQ;AAAA,EAER;AACA,SAAO;AACT;AAQA,eAAsB,SAAY,UAAkB,IAAkC;AACpF,MAAI;AACF,UAAM,WAAW,MAAM,KAAK,QAAQ;AACpC,UAAM,UAAU,KAAK,IAAI,IAAI,SAAS;AACtC,QAAI,UAAU,iBAAiB;AAC7B,YAAM,IAAI,QAAQ,CAAC,MAAM,WAAW,GAAG,mBAAmB,CAAC;AAAA,IAC7D;AAAA,EACF,QAAQ;AAAA,EAER;AAEA,QAAMF,WAAU,UAAU,OAAO,KAAK,IAAI,CAAC,GAAG,OAAO;AACrD,MAAI;AACF,WAAO,MAAM,GAAG;AAAA,EAClB,UAAE;AACA,QAAI;AACF,YAAM,OAAO,QAAQ;AAAA,IACvB,QAAQ;AAAA,IAER;AAAA,EACF;AACF;AAxFA,IA6DM,iBACA;AA9DN;AAAA;AAAA;AA6DA,IAAM,kBAAkB;AACxB,IAAM,sBAAsB;AAAA;AAAA;;;AC9D5B,IAAW,MA6DA,YASE,eAsBA;AA5Fb;AAAA;AACA,KAAC,SAAUI,OAAM;AACb,MAAAA,MAAK,cAAc,CAAC,MAAM;AAAA,MAAE;AAC5B,eAAS,SAAS,MAAM;AAAA,MAAE;AAC1B,MAAAA,MAAK,WAAW;AAChB,eAAS,YAAY,IAAI;AACrB,cAAM,IAAI,MAAM;AAAA,MACpB;AACA,MAAAA,MAAK,cAAc;AACnB,MAAAA,MAAK,cAAc,CAAC,UAAU;AAC1B,cAAM,MAAM,CAAC;AACb,mBAAW,QAAQ,OAAO;AACtB,cAAI,IAAI,IAAI;AAAA,QAChB;AACA,eAAO;AAAA,MACX;AACA,MAAAA,MAAK,qBAAqB,CAAC,QAAQ;AAC/B,cAAM,YAAYA,MAAK,WAAW,GAAG,EAAE,OAAO,CAAC,MAAM,OAAO,IAAI,IAAI,CAAC,CAAC,MAAM,QAAQ;AACpF,cAAM,WAAW,CAAC;AAClB,mBAAW,KAAK,WAAW;AACvB,mBAAS,CAAC,IAAI,IAAI,CAAC;AAAA,QACvB;AACA,eAAOA,MAAK,aAAa,QAAQ;AAAA,MACrC;AACA,MAAAA,MAAK,eAAe,CAAC,QAAQ;AACzB,eAAOA,MAAK,WAAW,GAAG,EAAE,IAAI,SAAU,GAAG;AACzC,iBAAO,IAAI,CAAC;AAAA,QAChB,CAAC;AAAA,MACL;AACA,MAAAA,MAAK,aAAa,OAAO,OAAO,SAAS,aACnC,CAAC,QAAQ,OAAO,KAAK,GAAG,IACxB,CAAC,WAAW;AACV,cAAM,OAAO,CAAC;AACd,mBAAW,OAAO,QAAQ;AACtB,cAAI,OAAO,UAAU,eAAe,KAAK,QAAQ,GAAG,GAAG;AACnD,iBAAK,KAAK,GAAG;AAAA,UACjB;AAAA,QACJ;AACA,eAAO;AAAA,MACX;AACJ,MAAAA,MAAK,OAAO,CAAC,KAAK,YAAY;AAC1B,mBAAW,QAAQ,KAAK;AACpB,cAAI,QAAQ,IAAI;AACZ,mBAAO;AAAA,QACf;AACA,eAAO;AAAA,MACX;AACA,MAAAA,MAAK,YAAY,OAAO,OAAO,cAAc,aACvC,CAAC,QAAQ,OAAO,UAAU,GAAG,IAC7B,CAAC,QAAQ,OAAO,QAAQ,YAAY,OAAO,SAAS,GAAG,KAAK,KAAK,MAAM,GAAG,MAAM;AACtF,eAAS,WAAW,OAAO,YAAY,OAAO;AAC1C,eAAO,MAAM,IAAI,CAAC,QAAS,OAAO,QAAQ,WAAW,IAAI,GAAG,MAAM,GAAI,EAAE,KAAK,SAAS;AAAA,MAC1F;AACA,MAAAA,MAAK,aAAa;AAClB,MAAAA,MAAK,wBAAwB,CAAC,GAAG,UAAU;AACvC,YAAI,OAAO,UAAU,UAAU;AAC3B,iBAAO,MAAM,SAAS;AAAA,QAC1B;AACA,eAAO;AAAA,MACX;AAAA,IACJ,GAAG,SAAS,OAAO,CAAC,EAAE;AAEtB,KAAC,SAAUC,aAAY;AACnB,MAAAA,YAAW,cAAc,CAAC,OAAO,WAAW;AACxC,eAAO;AAAA,UACH,GAAG;AAAA,UACH,GAAG;AAAA;AAAA,QACP;AAAA,MACJ;AAAA,IACJ,GAAG,eAAe,aAAa,CAAC,EAAE;AAC3B,IAAM,gBAAgB,KAAK,YAAY;AAAA,MAC1C;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACJ,CAAC;AACM,IAAM,gBAAgB,CAAC,SAAS;AACnC,YAAM,IAAI,OAAO;AACjB,cAAQ,GAAG;AAAA,QACP,KAAK;AACD,iBAAO,cAAc;AAAA,QACzB,KAAK;AACD,iBAAO,cAAc;AAAA,QACzB,KAAK;AACD,iBAAO,OAAO,MAAM,IAAI,IAAI,cAAc,MAAM,cAAc;AAAA,QAClE,KAAK;AACD,iBAAO,cAAc;AAAA,QACzB,KAAK;AACD,iBAAO,cAAc;AAAA,QACzB,KAAK;AACD,iBAAO,cAAc;AAAA,QACzB,KAAK;AACD,iBAAO,cAAc;AAAA,QACzB,KAAK;AACD,cAAI,MAAM,QAAQ,IAAI,GAAG;AACrB,mBAAO,cAAc;AAAA,UACzB;AACA,cAAI,SAAS,MAAM;AACf,mBAAO,cAAc;AAAA,UACzB;AACA,cAAI,KAAK,QAAQ,OAAO,KAAK,SAAS,cAAc,KAAK,SAAS,OAAO,KAAK,UAAU,YAAY;AAChG,mBAAO,cAAc;AAAA,UACzB;AACA,cAAI,OAAO,QAAQ,eAAe,gBAAgB,KAAK;AACnD,mBAAO,cAAc;AAAA,UACzB;AACA,cAAI,OAAO,QAAQ,eAAe,gBAAgB,KAAK;AACnD,mBAAO,cAAc;AAAA,UACzB;AACA,cAAI,OAAO,SAAS,eAAe,gBAAgB,MAAM;AACrD,mBAAO,cAAc;AAAA,UACzB;AACA,iBAAO,cAAc;AAAA,QACzB;AACI,iBAAO,cAAc;AAAA,MAC7B;AAAA,IACJ;AAAA;AAAA;;;ACpIA,IACa,cAkBA,eAIA;AAvBb;AAAA;AAAA;AACO,IAAM,eAAe,KAAK,YAAY;AAAA,MACzC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACJ,CAAC;AACM,IAAM,gBAAgB,CAAC,QAAQ;AAClC,YAAM,OAAO,KAAK,UAAU,KAAK,MAAM,CAAC;AACxC,aAAO,KAAK,QAAQ,eAAe,KAAK;AAAA,IAC5C;AACO,IAAM,WAAN,MAAM,kBAAiB,MAAM;AAAA,MAChC,IAAI,SAAS;AACT,eAAO,KAAK;AAAA,MAChB;AAAA,MACA,YAAY,QAAQ;AAChB,cAAM;AACN,aAAK,SAAS,CAAC;AACf,aAAK,WAAW,CAAC,QAAQ;AACrB,eAAK,SAAS,CAAC,GAAG,KAAK,QAAQ,GAAG;AAAA,QACtC;AACA,aAAK,YAAY,CAAC,OAAO,CAAC,MAAM;AAC5B,eAAK,SAAS,CAAC,GAAG,KAAK,QAAQ,GAAG,IAAI;AAAA,QAC1C;AACA,cAAM,cAAc,WAAW;AAC/B,YAAI,OAAO,gBAAgB;AAEvB,iBAAO,eAAe,MAAM,WAAW;AAAA,QAC3C,OACK;AACD,eAAK,YAAY;AAAA,QACrB;AACA,aAAK,OAAO;AACZ,aAAK,SAAS;AAAA,MAClB;AAAA,MACA,OAAO,SAAS;AACZ,cAAM,SAAS,WACX,SAAU,OAAO;AACb,iBAAO,MAAM;AAAA,QACjB;AACJ,cAAM,cAAc,EAAE,SAAS,CAAC,EAAE;AAClC,cAAM,eAAe,CAAC,UAAU;AAC5B,qBAAW,SAAS,MAAM,QAAQ;AAC9B,gBAAI,MAAM,SAAS,iBAAiB;AAChC,oBAAM,YAAY,IAAI,YAAY;AAAA,YACtC,WACS,MAAM,SAAS,uBAAuB;AAC3C,2BAAa,MAAM,eAAe;AAAA,YACtC,WACS,MAAM,SAAS,qBAAqB;AACzC,2BAAa,MAAM,cAAc;AAAA,YACrC,WACS,MAAM,KAAK,WAAW,GAAG;AAC9B,0BAAY,QAAQ,KAAK,OAAO,KAAK,CAAC;AAAA,YAC1C,OACK;AACD,kBAAI,OAAO;AACX,kBAAI,IAAI;AACR,qBAAO,IAAI,MAAM,KAAK,QAAQ;AAC1B,sBAAM,KAAK,MAAM,KAAK,CAAC;AACvB,sBAAM,WAAW,MAAM,MAAM,KAAK,SAAS;AAC3C,oBAAI,CAAC,UAAU;AACX,uBAAK,EAAE,IAAI,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE;AAAA,gBAQzC,OACK;AACD,uBAAK,EAAE,IAAI,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE;AACrC,uBAAK,EAAE,EAAE,QAAQ,KAAK,OAAO,KAAK,CAAC;AAAA,gBACvC;AACA,uBAAO,KAAK,EAAE;AACd;AAAA,cACJ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AACA,qBAAa,IAAI;AACjB,eAAO;AAAA,MACX;AAAA,MACA,OAAO,OAAO,OAAO;AACjB,YAAI,EAAE,iBAAiB,YAAW;AAC9B,gBAAM,IAAI,MAAM,mBAAmB,KAAK,EAAE;AAAA,QAC9C;AAAA,MACJ;AAAA,MACA,WAAW;AACP,eAAO,KAAK;AAAA,MAChB;AAAA,MACA,IAAI,UAAU;AACV,eAAO,KAAK,UAAU,KAAK,QAAQ,KAAK,uBAAuB,CAAC;AAAA,MACpE;AAAA,MACA,IAAI,UAAU;AACV,eAAO,KAAK,OAAO,WAAW;AAAA,MAClC;AAAA,MACA,QAAQ,SAAS,CAAC,UAAU,MAAM,SAAS;AACvC,cAAM,cAAc,CAAC;AACrB,cAAM,aAAa,CAAC;AACpB,mBAAW,OAAO,KAAK,QAAQ;AAC3B,cAAI,IAAI,KAAK,SAAS,GAAG;AACrB,kBAAM,UAAU,IAAI,KAAK,CAAC;AAC1B,wBAAY,OAAO,IAAI,YAAY,OAAO,KAAK,CAAC;AAChD,wBAAY,OAAO,EAAE,KAAK,OAAO,GAAG,CAAC;AAAA,UACzC,OACK;AACD,uBAAW,KAAK,OAAO,GAAG,CAAC;AAAA,UAC/B;AAAA,QACJ;AACA,eAAO,EAAE,YAAY,YAAY;AAAA,MACrC;AAAA,MACA,IAAI,aAAa;AACb,eAAO,KAAK,QAAQ;AAAA,MACxB;AAAA,IACJ;AACA,aAAS,SAAS,CAAC,WAAW;AAC1B,YAAM,QAAQ,IAAI,SAAS,MAAM;AACjC,aAAO;AAAA,IACX;AAAA;AAAA;;;ACpIA,IAEM,UA0GC;AA5GP;AAAA;AAAA;AACA;AACA,IAAM,WAAW,CAAC,OAAO,SAAS;AAC9B,UAAI;AACJ,cAAQ,MAAM,MAAM;AAAA,QAChB,KAAK,aAAa;AACd,cAAI,MAAM,aAAa,cAAc,WAAW;AAC5C,sBAAU;AAAA,UACd,OACK;AACD,sBAAU,YAAY,MAAM,QAAQ,cAAc,MAAM,QAAQ;AAAA,UACpE;AACA;AAAA,QACJ,KAAK,aAAa;AACd,oBAAU,mCAAmC,KAAK,UAAU,MAAM,UAAU,KAAK,qBAAqB,CAAC;AACvG;AAAA,QACJ,KAAK,aAAa;AACd,oBAAU,kCAAkC,KAAK,WAAW,MAAM,MAAM,IAAI,CAAC;AAC7E;AAAA,QACJ,KAAK,aAAa;AACd,oBAAU;AACV;AAAA,QACJ,KAAK,aAAa;AACd,oBAAU,yCAAyC,KAAK,WAAW,MAAM,OAAO,CAAC;AACjF;AAAA,QACJ,KAAK,aAAa;AACd,oBAAU,gCAAgC,KAAK,WAAW,MAAM,OAAO,CAAC,eAAe,MAAM,QAAQ;AACrG;AAAA,QACJ,KAAK,aAAa;AACd,oBAAU;AACV;AAAA,QACJ,KAAK,aAAa;AACd,oBAAU;AACV;AAAA,QACJ,KAAK,aAAa;AACd,oBAAU;AACV;AAAA,QACJ,KAAK,aAAa;AACd,cAAI,OAAO,MAAM,eAAe,UAAU;AACtC,gBAAI,cAAc,MAAM,YAAY;AAChC,wBAAU,gCAAgC,MAAM,WAAW,QAAQ;AACnE,kBAAI,OAAO,MAAM,WAAW,aAAa,UAAU;AAC/C,0BAAU,GAAG,OAAO,sDAAsD,MAAM,WAAW,QAAQ;AAAA,cACvG;AAAA,YACJ,WACS,gBAAgB,MAAM,YAAY;AACvC,wBAAU,mCAAmC,MAAM,WAAW,UAAU;AAAA,YAC5E,WACS,cAAc,MAAM,YAAY;AACrC,wBAAU,iCAAiC,MAAM,WAAW,QAAQ;AAAA,YACxE,OACK;AACD,mBAAK,YAAY,MAAM,UAAU;AAAA,YACrC;AAAA,UACJ,WACS,MAAM,eAAe,SAAS;AACnC,sBAAU,WAAW,MAAM,UAAU;AAAA,UACzC,OACK;AACD,sBAAU;AAAA,UACd;AACA;AAAA,QACJ,KAAK,aAAa;AACd,cAAI,MAAM,SAAS;AACf,sBAAU,sBAAsB,MAAM,QAAQ,YAAY,MAAM,YAAY,aAAa,WAAW,IAAI,MAAM,OAAO;AAAA,mBAChH,MAAM,SAAS;AACpB,sBAAU,uBAAuB,MAAM,QAAQ,YAAY,MAAM,YAAY,aAAa,MAAM,IAAI,MAAM,OAAO;AAAA,mBAC5G,MAAM,SAAS;AACpB,sBAAU,kBAAkB,MAAM,QAAQ,sBAAsB,MAAM,YAAY,8BAA8B,eAAe,GAAG,MAAM,OAAO;AAAA,mBAC1I,MAAM,SAAS;AACpB,sBAAU,kBAAkB,MAAM,QAAQ,sBAAsB,MAAM,YAAY,8BAA8B,eAAe,GAAG,MAAM,OAAO;AAAA,mBAC1I,MAAM,SAAS;AACpB,sBAAU,gBAAgB,MAAM,QAAQ,sBAAsB,MAAM,YAAY,8BAA8B,eAAe,GAAG,IAAI,KAAK,OAAO,MAAM,OAAO,CAAC,CAAC;AAAA;AAE/J,sBAAU;AACd;AAAA,QACJ,KAAK,aAAa;AACd,cAAI,MAAM,SAAS;AACf,sBAAU,sBAAsB,MAAM,QAAQ,YAAY,MAAM,YAAY,YAAY,WAAW,IAAI,MAAM,OAAO;AAAA,mBAC/G,MAAM,SAAS;AACpB,sBAAU,uBAAuB,MAAM,QAAQ,YAAY,MAAM,YAAY,YAAY,OAAO,IAAI,MAAM,OAAO;AAAA,mBAC5G,MAAM,SAAS;AACpB,sBAAU,kBAAkB,MAAM,QAAQ,YAAY,MAAM,YAAY,0BAA0B,WAAW,IAAI,MAAM,OAAO;AAAA,mBACzH,MAAM,SAAS;AACpB,sBAAU,kBAAkB,MAAM,QAAQ,YAAY,MAAM,YAAY,0BAA0B,WAAW,IAAI,MAAM,OAAO;AAAA,mBACzH,MAAM,SAAS;AACpB,sBAAU,gBAAgB,MAAM,QAAQ,YAAY,MAAM,YAAY,6BAA6B,cAAc,IAAI,IAAI,KAAK,OAAO,MAAM,OAAO,CAAC,CAAC;AAAA;AAEpJ,sBAAU;AACd;AAAA,QACJ,KAAK,aAAa;AACd,oBAAU;AACV;AAAA,QACJ,KAAK,aAAa;AACd,oBAAU;AACV;AAAA,QACJ,KAAK,aAAa;AACd,oBAAU,gCAAgC,MAAM,UAAU;AAC1D;AAAA,QACJ,KAAK,aAAa;AACd,oBAAU;AACV;AAAA,QACJ;AACI,oBAAU,KAAK;AACf,eAAK,YAAY,KAAK;AAAA,MAC9B;AACA,aAAO,EAAE,QAAQ;AAAA,IACrB;AACA,IAAO,aAAQ;AAAA;AAAA;;;ACzGR,SAAS,YAAY,KAAK;AAC7B,qBAAmB;AACvB;AACO,SAAS,cAAc;AAC1B,SAAO;AACX;AARA,IACI;AADJ;AAAA;AAAA;AACA,IAAI,mBAAmB;AAAA;AAAA;;;AC8BhB,SAAS,kBAAkB,KAAK,WAAW;AAC9C,QAAM,cAAc,YAAY;AAChC,QAAM,QAAQ,UAAU;AAAA,IACpB;AAAA,IACA,MAAM,IAAI;AAAA,IACV,MAAM,IAAI;AAAA,IACV,WAAW;AAAA,MACP,IAAI,OAAO;AAAA;AAAA,MACX,IAAI;AAAA;AAAA,MACJ;AAAA;AAAA,MACA,gBAAgB,aAAkB,SAAY;AAAA;AAAA,IAClD,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AAAA,EACvB,CAAC;AACD,MAAI,OAAO,OAAO,KAAK,KAAK;AAChC;AA7CA,IAEa,WA4BA,YAgBA,aAsDA,SAGA,OACA,IACA,WACA,SACA,SACA;AA5Gb;AAAA;AAAA;AACA;AACO,IAAM,YAAY,CAAC,WAAW;AACjC,YAAM,EAAE,MAAM,MAAM,WAAW,UAAU,IAAI;AAC7C,YAAM,WAAW,CAAC,GAAG,MAAM,GAAI,UAAU,QAAQ,CAAC,CAAE;AACpD,YAAM,YAAY;AAAA,QACd,GAAG;AAAA,QACH,MAAM;AAAA,MACV;AACA,UAAI,UAAU,YAAY,QAAW;AACjC,eAAO;AAAA,UACH,GAAG;AAAA,UACH,MAAM;AAAA,UACN,SAAS,UAAU;AAAA,QACvB;AAAA,MACJ;AACA,UAAI,eAAe;AACnB,YAAM,OAAO,UACR,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EACjB,MAAM,EACN,QAAQ;AACb,iBAAW,OAAO,MAAM;AACpB,uBAAe,IAAI,WAAW,EAAE,MAAM,cAAc,aAAa,CAAC,EAAE;AAAA,MACxE;AACA,aAAO;AAAA,QACH,GAAG;AAAA,QACH,MAAM;AAAA,QACN,SAAS;AAAA,MACb;AAAA,IACJ;AACO,IAAM,aAAa,CAAC;AAgBpB,IAAM,cAAN,MAAM,aAAY;AAAA,MACrB,cAAc;AACV,aAAK,QAAQ;AAAA,MACjB;AAAA,MACA,QAAQ;AACJ,YAAI,KAAK,UAAU;AACf,eAAK,QAAQ;AAAA,MACrB;AAAA,MACA,QAAQ;AACJ,YAAI,KAAK,UAAU;AACf,eAAK,QAAQ;AAAA,MACrB;AAAA,MACA,OAAO,WAAW,QAAQ,SAAS;AAC/B,cAAM,aAAa,CAAC;AACpB,mBAAW,KAAK,SAAS;AACrB,cAAI,EAAE,WAAW;AACb,mBAAO;AACX,cAAI,EAAE,WAAW;AACb,mBAAO,MAAM;AACjB,qBAAW,KAAK,EAAE,KAAK;AAAA,QAC3B;AACA,eAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,WAAW;AAAA,MACrD;AAAA,MACA,aAAa,iBAAiB,QAAQ,OAAO;AACzC,cAAM,YAAY,CAAC;AACnB,mBAAW,QAAQ,OAAO;AACtB,gBAAM,MAAM,MAAM,KAAK;AACvB,gBAAM,QAAQ,MAAM,KAAK;AACzB,oBAAU,KAAK;AAAA,YACX;AAAA,YACA;AAAA,UACJ,CAAC;AAAA,QACL;AACA,eAAO,aAAY,gBAAgB,QAAQ,SAAS;AAAA,MACxD;AAAA,MACA,OAAO,gBAAgB,QAAQ,OAAO;AAClC,cAAM,cAAc,CAAC;AACrB,mBAAW,QAAQ,OAAO;AACtB,gBAAM,EAAE,KAAK,MAAM,IAAI;AACvB,cAAI,IAAI,WAAW;AACf,mBAAO;AACX,cAAI,MAAM,WAAW;AACjB,mBAAO;AACX,cAAI,IAAI,WAAW;AACf,mBAAO,MAAM;AACjB,cAAI,MAAM,WAAW;AACjB,mBAAO,MAAM;AACjB,cAAI,IAAI,UAAU,gBAAgB,OAAO,MAAM,UAAU,eAAe,KAAK,YAAY;AACrF,wBAAY,IAAI,KAAK,IAAI,MAAM;AAAA,UACnC;AAAA,QACJ;AACA,eAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,YAAY;AAAA,MACtD;AAAA,IACJ;AACO,IAAM,UAAU,OAAO,OAAO;AAAA,MACjC,QAAQ;AAAA,IACZ,CAAC;AACM,IAAM,QAAQ,CAAC,WAAW,EAAE,QAAQ,SAAS,MAAM;AACnD,IAAM,KAAK,CAAC,WAAW,EAAE,QAAQ,SAAS,MAAM;AAChD,IAAM,YAAY,CAAC,MAAM,EAAE,WAAW;AACtC,IAAM,UAAU,CAAC,MAAM,EAAE,WAAW;AACpC,IAAM,UAAU,CAAC,MAAM,EAAE,WAAW;AACpC,IAAM,UAAU,CAAC,MAAM,OAAO,YAAY,eAAe,aAAa;AAAA;AAAA;;;AC5G7E;AAAA;AAAA;AAAA;;;ACAA,IAAW;AAAX;AAAA;AACA,KAAC,SAAUC,YAAW;AAClB,MAAAA,WAAU,WAAW,CAAC,YAAY,OAAO,YAAY,WAAW,EAAE,QAAQ,IAAI,WAAW,CAAC;AAE1F,MAAAA,WAAU,WAAW,CAAC,YAAY,OAAO,YAAY,WAAW,UAAU,SAAS;AAAA,IACvF,GAAG,cAAc,YAAY,CAAC,EAAE;AAAA;AAAA;;;ACwChC,SAAS,oBAAoB,QAAQ;AACjC,MAAI,CAAC;AACD,WAAO,CAAC;AACZ,QAAM,EAAE,UAAAC,WAAU,oBAAoB,gBAAgB,YAAY,IAAI;AACtE,MAAIA,cAAa,sBAAsB,iBAAiB;AACpD,UAAM,IAAI,MAAM,0FAA0F;AAAA,EAC9G;AACA,MAAIA;AACA,WAAO,EAAE,UAAUA,WAAU,YAAY;AAC7C,QAAM,YAAY,CAAC,KAAK,QAAQ;AAC5B,UAAM,EAAE,QAAQ,IAAI;AACpB,QAAI,IAAI,SAAS,sBAAsB;AACnC,aAAO,EAAE,SAAS,WAAW,IAAI,aAAa;AAAA,IAClD;AACA,QAAI,OAAO,IAAI,SAAS,aAAa;AACjC,aAAO,EAAE,SAAS,WAAW,kBAAkB,IAAI,aAAa;AAAA,IACpE;AACA,QAAI,IAAI,SAAS;AACb,aAAO,EAAE,SAAS,IAAI,aAAa;AACvC,WAAO,EAAE,SAAS,WAAW,sBAAsB,IAAI,aAAa;AAAA,EACxE;AACA,SAAO,EAAE,UAAU,WAAW,YAAY;AAC9C;AAoVA,SAAS,gBAAgB,MAAM;AAC3B,MAAI,qBAAqB;AACzB,MAAI,KAAK,WAAW;AAChB,yBAAqB,GAAG,kBAAkB,UAAU,KAAK,SAAS;AAAA,EACtE,WACS,KAAK,aAAa,MAAM;AAC7B,yBAAqB,GAAG,kBAAkB;AAAA,EAC9C;AACA,QAAM,oBAAoB,KAAK,YAAY,MAAM;AACjD,SAAO,8BAA8B,kBAAkB,IAAI,iBAAiB;AAChF;AACA,SAAS,UAAU,MAAM;AACrB,SAAO,IAAI,OAAO,IAAI,gBAAgB,IAAI,CAAC,GAAG;AAClD;AAEO,SAAS,cAAc,MAAM;AAChC,MAAI,QAAQ,GAAG,eAAe,IAAI,gBAAgB,IAAI,CAAC;AACvD,QAAM,OAAO,CAAC;AACd,OAAK,KAAK,KAAK,QAAQ,OAAO,GAAG;AACjC,MAAI,KAAK;AACL,SAAK,KAAK,sBAAsB;AACpC,UAAQ,GAAG,KAAK,IAAI,KAAK,KAAK,GAAG,CAAC;AAClC,SAAO,IAAI,OAAO,IAAI,KAAK,GAAG;AAClC;AACA,SAAS,UAAU,IAAI,SAAS;AAC5B,OAAK,YAAY,QAAQ,CAAC,YAAY,UAAU,KAAK,EAAE,GAAG;AACtD,WAAO;AAAA,EACX;AACA,OAAK,YAAY,QAAQ,CAAC,YAAY,UAAU,KAAK,EAAE,GAAG;AACtD,WAAO;AAAA,EACX;AACA,SAAO;AACX;AACA,SAAS,WAAW,KAAK,KAAK;AAC1B,MAAI,CAAC,SAAS,KAAK,GAAG;AAClB,WAAO;AACX,MAAI;AACA,UAAM,CAAC,MAAM,IAAI,IAAI,MAAM,GAAG;AAC9B,QAAI,CAAC;AACD,aAAO;AAEX,UAAM,SAAS,OACV,QAAQ,MAAM,GAAG,EACjB,QAAQ,MAAM,GAAG,EACjB,OAAO,OAAO,UAAW,IAAK,OAAO,SAAS,KAAM,GAAI,GAAG;AAChE,UAAM,UAAU,KAAK,MAAM,KAAK,MAAM,CAAC;AACvC,QAAI,OAAO,YAAY,YAAY,YAAY;AAC3C,aAAO;AACX,QAAI,SAAS,WAAW,SAAS,QAAQ;AACrC,aAAO;AACX,QAAI,CAAC,QAAQ;AACT,aAAO;AACX,QAAI,OAAO,QAAQ,QAAQ;AACvB,aAAO;AACX,WAAO;AAAA,EACX,QACM;AACF,WAAO;AAAA,EACX;AACJ;AACA,SAAS,YAAY,IAAI,SAAS;AAC9B,OAAK,YAAY,QAAQ,CAAC,YAAY,cAAc,KAAK,EAAE,GAAG;AAC1D,WAAO;AAAA,EACX;AACA,OAAK,YAAY,QAAQ,CAAC,YAAY,cAAc,KAAK,EAAE,GAAG;AAC1D,WAAO;AAAA,EACX;AACA,SAAO;AACX;AAmkBA,SAAS,mBAAmB,KAAK,MAAM;AACnC,QAAM,eAAe,IAAI,SAAS,EAAE,MAAM,GAAG,EAAE,CAAC,KAAK,IAAI;AACzD,QAAM,gBAAgB,KAAK,SAAS,EAAE,MAAM,GAAG,EAAE,CAAC,KAAK,IAAI;AAC3D,QAAM,WAAW,cAAc,eAAe,cAAc;AAC5D,QAAM,SAAS,OAAO,SAAS,IAAI,QAAQ,QAAQ,EAAE,QAAQ,KAAK,EAAE,CAAC;AACrE,QAAM,UAAU,OAAO,SAAS,KAAK,QAAQ,QAAQ,EAAE,QAAQ,KAAK,EAAE,CAAC;AACvE,SAAQ,SAAS,UAAW,MAAM;AACtC;AAkxBA,SAAS,eAAe,QAAQ;AAC5B,MAAI,kBAAkB,WAAW;AAC7B,UAAM,WAAW,CAAC;AAClB,eAAW,OAAO,OAAO,OAAO;AAC5B,YAAM,cAAc,OAAO,MAAM,GAAG;AACpC,eAAS,GAAG,IAAI,YAAY,OAAO,eAAe,WAAW,CAAC;AAAA,IAClE;AACA,WAAO,IAAI,UAAU;AAAA,MACjB,GAAG,OAAO;AAAA,MACV,OAAO,MAAM;AAAA,IACjB,CAAC;AAAA,EACL,WACS,kBAAkB,UAAU;AACjC,WAAO,IAAI,SAAS;AAAA,MAChB,GAAG,OAAO;AAAA,MACV,MAAM,eAAe,OAAO,OAAO;AAAA,IACvC,CAAC;AAAA,EACL,WACS,kBAAkB,aAAa;AACpC,WAAO,YAAY,OAAO,eAAe,OAAO,OAAO,CAAC,CAAC;AAAA,EAC7D,WACS,kBAAkB,aAAa;AACpC,WAAO,YAAY,OAAO,eAAe,OAAO,OAAO,CAAC,CAAC;AAAA,EAC7D,WACS,kBAAkB,UAAU;AACjC,WAAO,SAAS,OAAO,OAAO,MAAM,IAAI,CAAC,SAAS,eAAe,IAAI,CAAC,CAAC;AAAA,EAC3E,OACK;AACD,WAAO;AAAA,EACX;AACJ;AAwmBA,SAAS,YAAY,GAAG,GAAG;AACvB,QAAM,QAAQ,cAAc,CAAC;AAC7B,QAAM,QAAQ,cAAc,CAAC;AAC7B,MAAI,MAAM,GAAG;AACT,WAAO,EAAE,OAAO,MAAM,MAAM,EAAE;AAAA,EAClC,WACS,UAAU,cAAc,UAAU,UAAU,cAAc,QAAQ;AACvE,UAAM,QAAQ,KAAK,WAAW,CAAC;AAC/B,UAAM,aAAa,KAAK,WAAW,CAAC,EAAE,OAAO,CAAC,QAAQ,MAAM,QAAQ,GAAG,MAAM,EAAE;AAC/E,UAAM,SAAS,EAAE,GAAG,GAAG,GAAG,EAAE;AAC5B,eAAW,OAAO,YAAY;AAC1B,YAAM,cAAc,YAAY,EAAE,GAAG,GAAG,EAAE,GAAG,CAAC;AAC9C,UAAI,CAAC,YAAY,OAAO;AACpB,eAAO,EAAE,OAAO,MAAM;AAAA,MAC1B;AACA,aAAO,GAAG,IAAI,YAAY;AAAA,IAC9B;AACA,WAAO,EAAE,OAAO,MAAM,MAAM,OAAO;AAAA,EACvC,WACS,UAAU,cAAc,SAAS,UAAU,cAAc,OAAO;AACrE,QAAI,EAAE,WAAW,EAAE,QAAQ;AACvB,aAAO,EAAE,OAAO,MAAM;AAAA,IAC1B;AACA,UAAM,WAAW,CAAC;AAClB,aAAS,QAAQ,GAAG,QAAQ,EAAE,QAAQ,SAAS;AAC3C,YAAM,QAAQ,EAAE,KAAK;AACrB,YAAM,QAAQ,EAAE,KAAK;AACrB,YAAM,cAAc,YAAY,OAAO,KAAK;AAC5C,UAAI,CAAC,YAAY,OAAO;AACpB,eAAO,EAAE,OAAO,MAAM;AAAA,MAC1B;AACA,eAAS,KAAK,YAAY,IAAI;AAAA,IAClC;AACA,WAAO,EAAE,OAAO,MAAM,MAAM,SAAS;AAAA,EACzC,WACS,UAAU,cAAc,QAAQ,UAAU,cAAc,QAAQ,CAAC,MAAM,CAAC,GAAG;AAChF,WAAO,EAAE,OAAO,MAAM,MAAM,EAAE;AAAA,EAClC,OACK;AACD,WAAO,EAAE,OAAO,MAAM;AAAA,EAC1B;AACJ;AAweA,SAAS,cAAc,QAAQ,QAAQ;AACnC,SAAO,IAAI,QAAQ;AAAA,IACf;AAAA,IACA,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AA8gBA,SAAS,YAAY,QAAQ,MAAM;AAC/B,QAAM,IAAI,OAAO,WAAW,aAAa,OAAO,IAAI,IAAI,OAAO,WAAW,WAAW,EAAE,SAAS,OAAO,IAAI;AAC3G,QAAM,KAAK,OAAO,MAAM,WAAW,EAAE,SAAS,EAAE,IAAI;AACpD,SAAO;AACX;AACO,SAAS,OAAO,OAAO,UAAU,CAAC,GAWzC,OAAO;AACH,MAAI;AACA,WAAO,OAAO,OAAO,EAAE,YAAY,CAAC,MAAM,QAAQ;AAC9C,YAAM,IAAI,MAAM,IAAI;AACpB,UAAI,aAAa,SAAS;AACtB,eAAO,EAAE,KAAK,CAACC,OAAM;AACjB,cAAI,CAACA,IAAG;AACJ,kBAAM,SAAS,YAAY,SAAS,IAAI;AACxC,kBAAM,SAAS,OAAO,SAAS,SAAS;AACxC,gBAAI,SAAS,EAAE,MAAM,UAAU,GAAG,QAAQ,OAAO,OAAO,CAAC;AAAA,UAC7D;AAAA,QACJ,CAAC;AAAA,MACL;AACA,UAAI,CAAC,GAAG;AACJ,cAAM,SAAS,YAAY,SAAS,IAAI;AACxC,cAAM,SAAS,OAAO,SAAS,SAAS;AACxC,YAAI,SAAS,EAAE,MAAM,UAAU,GAAG,QAAQ,OAAO,OAAO,CAAC;AAAA,MAC7D;AACA;AAAA,IACJ,CAAC;AACL,SAAO,OAAO,OAAO;AACzB;AAvgHA,IAKM,oBAoBA,cA2CO,SAsSP,WACA,YACA,WAGA,WACA,aACA,UACA,eAaA,YAIA,aACF,YAEE,WACA,eAGA,WACA,eAEA,aAEA,gBAMA,iBACA,WAsEO,WA0kBA,WA+OA,WAgLA,YAyBA,SA+GA,WAqBA,cAqBA,SAqBA,QAgBA,YAgBA,UAiBA,SAqBA,UAoIA,WAoYA,UAuGP,kBA6CO,uBAyHA,iBAuDA,UAsEA,WAsDA,QAmEA,QAsFA,aAkHA,SAiBA,YA+BA,SAiEA,eAsCA,YA8BA,YAmJA,aAmBA,aAmBA,YAyBA,UA2DA,QAqBA,OACA,YAcA,aA0DA,aAoEA,MAGF,uBA2CL,gBAKA,YACA,YACA,SACA,YACA,aACA,UACA,YACA,eACA,UACA,SACA,aACA,WACA,UACA,WACA,YACA,kBACA,WACA,wBACA,kBACA,WACA,YACA,SACA,SACA,cACA,UACA,aACA,UACA,gBACA,aACA,aACA,cACA,cACA,gBACA,cACA,SACA,SACA,UACO,QAWA;AA5mHb,IAAAC,cAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA,IAAM,qBAAN,MAAyB;AAAA,MACrB,YAAY,QAAQ,OAAO,MAAM,KAAK;AAClC,aAAK,cAAc,CAAC;AACpB,aAAK,SAAS;AACd,aAAK,OAAO;AACZ,aAAK,QAAQ;AACb,aAAK,OAAO;AAAA,MAChB;AAAA,MACA,IAAI,OAAO;AACP,YAAI,CAAC,KAAK,YAAY,QAAQ;AAC1B,cAAI,MAAM,QAAQ,KAAK,IAAI,GAAG;AAC1B,iBAAK,YAAY,KAAK,GAAG,KAAK,OAAO,GAAG,KAAK,IAAI;AAAA,UACrD,OACK;AACD,iBAAK,YAAY,KAAK,GAAG,KAAK,OAAO,KAAK,IAAI;AAAA,UAClD;AAAA,QACJ;AACA,eAAO,KAAK;AAAA,MAChB;AAAA,IACJ;AACA,IAAM,eAAe,CAAC,KAAK,WAAW;AAClC,UAAI,QAAQ,MAAM,GAAG;AACjB,eAAO,EAAE,SAAS,MAAM,MAAM,OAAO,MAAM;AAAA,MAC/C,OACK;AACD,YAAI,CAAC,IAAI,OAAO,OAAO,QAAQ;AAC3B,gBAAM,IAAI,MAAM,2CAA2C;AAAA,QAC/D;AACA,eAAO;AAAA,UACH,SAAS;AAAA,UACT,IAAI,QAAQ;AACR,gBAAI,KAAK;AACL,qBAAO,KAAK;AAChB,kBAAM,QAAQ,IAAI,SAAS,IAAI,OAAO,MAAM;AAC5C,iBAAK,SAAS;AACd,mBAAO,KAAK;AAAA,UAChB;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAwBO,IAAM,UAAN,MAAc;AAAA,MACjB,IAAI,cAAc;AACd,eAAO,KAAK,KAAK;AAAA,MACrB;AAAA,MACA,SAAS,OAAO;AACZ,eAAO,cAAc,MAAM,IAAI;AAAA,MACnC;AAAA,MACA,gBAAgB,OAAO,KAAK;AACxB,eAAQ,OAAO;AAAA,UACX,QAAQ,MAAM,OAAO;AAAA,UACrB,MAAM,MAAM;AAAA,UACZ,YAAY,cAAc,MAAM,IAAI;AAAA,UACpC,gBAAgB,KAAK,KAAK;AAAA,UAC1B,MAAM,MAAM;AAAA,UACZ,QAAQ,MAAM;AAAA,QAClB;AAAA,MACJ;AAAA,MACA,oBAAoB,OAAO;AACvB,eAAO;AAAA,UACH,QAAQ,IAAI,YAAY;AAAA,UACxB,KAAK;AAAA,YACD,QAAQ,MAAM,OAAO;AAAA,YACrB,MAAM,MAAM;AAAA,YACZ,YAAY,cAAc,MAAM,IAAI;AAAA,YACpC,gBAAgB,KAAK,KAAK;AAAA,YAC1B,MAAM,MAAM;AAAA,YACZ,QAAQ,MAAM;AAAA,UAClB;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,WAAW,OAAO;AACd,cAAM,SAAS,KAAK,OAAO,KAAK;AAChC,YAAI,QAAQ,MAAM,GAAG;AACjB,gBAAM,IAAI,MAAM,wCAAwC;AAAA,QAC5D;AACA,eAAO;AAAA,MACX;AAAA,MACA,YAAY,OAAO;AACf,cAAM,SAAS,KAAK,OAAO,KAAK;AAChC,eAAO,QAAQ,QAAQ,MAAM;AAAA,MACjC;AAAA,MACA,MAAM,MAAM,QAAQ;AAChB,cAAM,SAAS,KAAK,UAAU,MAAM,MAAM;AAC1C,YAAI,OAAO;AACP,iBAAO,OAAO;AAClB,cAAM,OAAO;AAAA,MACjB;AAAA,MACA,UAAU,MAAM,QAAQ;AACpB,cAAM,MAAM;AAAA,UACR,QAAQ;AAAA,YACJ,QAAQ,CAAC;AAAA,YACT,OAAO,QAAQ,SAAS;AAAA,YACxB,oBAAoB,QAAQ;AAAA,UAChC;AAAA,UACA,MAAM,QAAQ,QAAQ,CAAC;AAAA,UACvB,gBAAgB,KAAK,KAAK;AAAA,UAC1B,QAAQ;AAAA,UACR;AAAA,UACA,YAAY,cAAc,IAAI;AAAA,QAClC;AACA,cAAM,SAAS,KAAK,WAAW,EAAE,MAAM,MAAM,IAAI,MAAM,QAAQ,IAAI,CAAC;AACpE,eAAO,aAAa,KAAK,MAAM;AAAA,MACnC;AAAA,MACA,YAAY,MAAM;AACd,cAAM,MAAM;AAAA,UACR,QAAQ;AAAA,YACJ,QAAQ,CAAC;AAAA,YACT,OAAO,CAAC,CAAC,KAAK,WAAW,EAAE;AAAA,UAC/B;AAAA,UACA,MAAM,CAAC;AAAA,UACP,gBAAgB,KAAK,KAAK;AAAA,UAC1B,QAAQ;AAAA,UACR;AAAA,UACA,YAAY,cAAc,IAAI;AAAA,QAClC;AACA,YAAI,CAAC,KAAK,WAAW,EAAE,OAAO;AAC1B,cAAI;AACA,kBAAM,SAAS,KAAK,WAAW,EAAE,MAAM,MAAM,CAAC,GAAG,QAAQ,IAAI,CAAC;AAC9D,mBAAO,QAAQ,MAAM,IACf;AAAA,cACE,OAAO,OAAO;AAAA,YAClB,IACE;AAAA,cACE,QAAQ,IAAI,OAAO;AAAA,YACvB;AAAA,UACR,SACO,KAAK;AACR,gBAAI,KAAK,SAAS,YAAY,GAAG,SAAS,aAAa,GAAG;AACtD,mBAAK,WAAW,EAAE,QAAQ;AAAA,YAC9B;AACA,gBAAI,SAAS;AAAA,cACT,QAAQ,CAAC;AAAA,cACT,OAAO;AAAA,YACX;AAAA,UACJ;AAAA,QACJ;AACA,eAAO,KAAK,YAAY,EAAE,MAAM,MAAM,CAAC,GAAG,QAAQ,IAAI,CAAC,EAAE,KAAK,CAAC,WAAW,QAAQ,MAAM,IAClF;AAAA,UACE,OAAO,OAAO;AAAA,QAClB,IACE;AAAA,UACE,QAAQ,IAAI,OAAO;AAAA,QACvB,CAAC;AAAA,MACT;AAAA,MACA,MAAM,WAAW,MAAM,QAAQ;AAC3B,cAAM,SAAS,MAAM,KAAK,eAAe,MAAM,MAAM;AACrD,YAAI,OAAO;AACP,iBAAO,OAAO;AAClB,cAAM,OAAO;AAAA,MACjB;AAAA,MACA,MAAM,eAAe,MAAM,QAAQ;AAC/B,cAAM,MAAM;AAAA,UACR,QAAQ;AAAA,YACJ,QAAQ,CAAC;AAAA,YACT,oBAAoB,QAAQ;AAAA,YAC5B,OAAO;AAAA,UACX;AAAA,UACA,MAAM,QAAQ,QAAQ,CAAC;AAAA,UACvB,gBAAgB,KAAK,KAAK;AAAA,UAC1B,QAAQ;AAAA,UACR;AAAA,UACA,YAAY,cAAc,IAAI;AAAA,QAClC;AACA,cAAM,mBAAmB,KAAK,OAAO,EAAE,MAAM,MAAM,IAAI,MAAM,QAAQ,IAAI,CAAC;AAC1E,cAAM,SAAS,OAAO,QAAQ,gBAAgB,IAAI,mBAAmB,QAAQ,QAAQ,gBAAgB;AACrG,eAAO,aAAa,KAAK,MAAM;AAAA,MACnC;AAAA,MACA,OAAO,OAAO,SAAS;AACnB,cAAM,qBAAqB,CAAC,QAAQ;AAChC,cAAI,OAAO,YAAY,YAAY,OAAO,YAAY,aAAa;AAC/D,mBAAO,EAAE,QAAQ;AAAA,UACrB,WACS,OAAO,YAAY,YAAY;AACpC,mBAAO,QAAQ,GAAG;AAAA,UACtB,OACK;AACD,mBAAO;AAAA,UACX;AAAA,QACJ;AACA,eAAO,KAAK,YAAY,CAAC,KAAK,QAAQ;AAClC,gBAAM,SAAS,MAAM,GAAG;AACxB,gBAAM,WAAW,MAAM,IAAI,SAAS;AAAA,YAChC,MAAM,aAAa;AAAA,YACnB,GAAG,mBAAmB,GAAG;AAAA,UAC7B,CAAC;AACD,cAAI,OAAO,YAAY,eAAe,kBAAkB,SAAS;AAC7D,mBAAO,OAAO,KAAK,CAAC,SAAS;AACzB,kBAAI,CAAC,MAAM;AACP,yBAAS;AACT,uBAAO;AAAA,cACX,OACK;AACD,uBAAO;AAAA,cACX;AAAA,YACJ,CAAC;AAAA,UACL;AACA,cAAI,CAAC,QAAQ;AACT,qBAAS;AACT,mBAAO;AAAA,UACX,OACK;AACD,mBAAO;AAAA,UACX;AAAA,QACJ,CAAC;AAAA,MACL;AAAA,MACA,WAAW,OAAO,gBAAgB;AAC9B,eAAO,KAAK,YAAY,CAAC,KAAK,QAAQ;AAClC,cAAI,CAAC,MAAM,GAAG,GAAG;AACb,gBAAI,SAAS,OAAO,mBAAmB,aAAa,eAAe,KAAK,GAAG,IAAI,cAAc;AAC7F,mBAAO;AAAA,UACX,OACK;AACD,mBAAO;AAAA,UACX;AAAA,QACJ,CAAC;AAAA,MACL;AAAA,MACA,YAAY,YAAY;AACpB,eAAO,IAAI,WAAW;AAAA,UAClB,QAAQ;AAAA,UACR,UAAU,sBAAsB;AAAA,UAChC,QAAQ,EAAE,MAAM,cAAc,WAAW;AAAA,QAC7C,CAAC;AAAA,MACL;AAAA,MACA,YAAY,YAAY;AACpB,eAAO,KAAK,YAAY,UAAU;AAAA,MACtC;AAAA,MACA,YAAY,KAAK;AAEb,aAAK,MAAM,KAAK;AAChB,aAAK,OAAO;AACZ,aAAK,QAAQ,KAAK,MAAM,KAAK,IAAI;AACjC,aAAK,YAAY,KAAK,UAAU,KAAK,IAAI;AACzC,aAAK,aAAa,KAAK,WAAW,KAAK,IAAI;AAC3C,aAAK,iBAAiB,KAAK,eAAe,KAAK,IAAI;AACnD,aAAK,MAAM,KAAK,IAAI,KAAK,IAAI;AAC7B,aAAK,SAAS,KAAK,OAAO,KAAK,IAAI;AACnC,aAAK,aAAa,KAAK,WAAW,KAAK,IAAI;AAC3C,aAAK,cAAc,KAAK,YAAY,KAAK,IAAI;AAC7C,aAAK,WAAW,KAAK,SAAS,KAAK,IAAI;AACvC,aAAK,WAAW,KAAK,SAAS,KAAK,IAAI;AACvC,aAAK,UAAU,KAAK,QAAQ,KAAK,IAAI;AACrC,aAAK,QAAQ,KAAK,MAAM,KAAK,IAAI;AACjC,aAAK,UAAU,KAAK,QAAQ,KAAK,IAAI;AACrC,aAAK,KAAK,KAAK,GAAG,KAAK,IAAI;AAC3B,aAAK,MAAM,KAAK,IAAI,KAAK,IAAI;AAC7B,aAAK,YAAY,KAAK,UAAU,KAAK,IAAI;AACzC,aAAK,QAAQ,KAAK,MAAM,KAAK,IAAI;AACjC,aAAK,UAAU,KAAK,QAAQ,KAAK,IAAI;AACrC,aAAK,QAAQ,KAAK,MAAM,KAAK,IAAI;AACjC,aAAK,WAAW,KAAK,SAAS,KAAK,IAAI;AACvC,aAAK,OAAO,KAAK,KAAK,KAAK,IAAI;AAC/B,aAAK,WAAW,KAAK,SAAS,KAAK,IAAI;AACvC,aAAK,aAAa,KAAK,WAAW,KAAK,IAAI;AAC3C,aAAK,aAAa,KAAK,WAAW,KAAK,IAAI;AAC3C,aAAK,WAAW,IAAI;AAAA,UAChB,SAAS;AAAA,UACT,QAAQ;AAAA,UACR,UAAU,CAAC,SAAS,KAAK,WAAW,EAAE,IAAI;AAAA,QAC9C;AAAA,MACJ;AAAA,MACA,WAAW;AACP,eAAO,YAAY,OAAO,MAAM,KAAK,IAAI;AAAA,MAC7C;AAAA,MACA,WAAW;AACP,eAAO,YAAY,OAAO,MAAM,KAAK,IAAI;AAAA,MAC7C;AAAA,MACA,UAAU;AACN,eAAO,KAAK,SAAS,EAAE,SAAS;AAAA,MACpC;AAAA,MACA,QAAQ;AACJ,eAAO,SAAS,OAAO,IAAI;AAAA,MAC/B;AAAA,MACA,UAAU;AACN,eAAO,WAAW,OAAO,MAAM,KAAK,IAAI;AAAA,MAC5C;AAAA,MACA,GAAG,QAAQ;AACP,eAAO,SAAS,OAAO,CAAC,MAAM,MAAM,GAAG,KAAK,IAAI;AAAA,MACpD;AAAA,MACA,IAAI,UAAU;AACV,eAAO,gBAAgB,OAAO,MAAM,UAAU,KAAK,IAAI;AAAA,MAC3D;AAAA,MACA,UAAU,WAAW;AACjB,eAAO,IAAI,WAAW;AAAA,UAClB,GAAG,oBAAoB,KAAK,IAAI;AAAA,UAChC,QAAQ;AAAA,UACR,UAAU,sBAAsB;AAAA,UAChC,QAAQ,EAAE,MAAM,aAAa,UAAU;AAAA,QAC3C,CAAC;AAAA,MACL;AAAA,MACA,QAAQ,KAAK;AACT,cAAM,mBAAmB,OAAO,QAAQ,aAAa,MAAM,MAAM;AACjE,eAAO,IAAI,WAAW;AAAA,UAClB,GAAG,oBAAoB,KAAK,IAAI;AAAA,UAChC,WAAW;AAAA,UACX,cAAc;AAAA,UACd,UAAU,sBAAsB;AAAA,QACpC,CAAC;AAAA,MACL;AAAA,MACA,QAAQ;AACJ,eAAO,IAAI,WAAW;AAAA,UAClB,UAAU,sBAAsB;AAAA,UAChC,MAAM;AAAA,UACN,GAAG,oBAAoB,KAAK,IAAI;AAAA,QACpC,CAAC;AAAA,MACL;AAAA,MACA,MAAM,KAAK;AACP,cAAM,iBAAiB,OAAO,QAAQ,aAAa,MAAM,MAAM;AAC/D,eAAO,IAAI,SAAS;AAAA,UAChB,GAAG,oBAAoB,KAAK,IAAI;AAAA,UAChC,WAAW;AAAA,UACX,YAAY;AAAA,UACZ,UAAU,sBAAsB;AAAA,QACpC,CAAC;AAAA,MACL;AAAA,MACA,SAAS,aAAa;AAClB,cAAM,OAAO,KAAK;AAClB,eAAO,IAAI,KAAK;AAAA,UACZ,GAAG,KAAK;AAAA,UACR;AAAA,QACJ,CAAC;AAAA,MACL;AAAA,MACA,KAAK,QAAQ;AACT,eAAO,YAAY,OAAO,MAAM,MAAM;AAAA,MAC1C;AAAA,MACA,WAAW;AACP,eAAO,YAAY,OAAO,IAAI;AAAA,MAClC;AAAA,MACA,aAAa;AACT,eAAO,KAAK,UAAU,MAAS,EAAE;AAAA,MACrC;AAAA,MACA,aAAa;AACT,eAAO,KAAK,UAAU,IAAI,EAAE;AAAA,MAChC;AAAA,IACJ;AACA,IAAM,YAAY;AAClB,IAAM,aAAa;AACnB,IAAM,YAAY;AAGlB,IAAM,YAAY;AAClB,IAAM,cAAc;AACpB,IAAM,WAAW;AACjB,IAAM,gBAAgB;AAatB,IAAM,aAAa;AAInB,IAAM,cAAc;AAGpB,IAAM,YAAY;AAClB,IAAM,gBAAgB;AAGtB,IAAM,YAAY;AAClB,IAAM,gBAAgB;AAEtB,IAAM,cAAc;AAEpB,IAAM,iBAAiB;AAMvB,IAAM,kBAAkB;AACxB,IAAM,YAAY,IAAI,OAAO,IAAI,eAAe,GAAG;AAsE5C,IAAM,YAAN,MAAM,mBAAkB,QAAQ;AAAA,MACnC,OAAO,OAAO;AACV,YAAI,KAAK,KAAK,QAAQ;AAClB,gBAAM,OAAO,OAAO,MAAM,IAAI;AAAA,QAClC;AACA,cAAM,aAAa,KAAK,SAAS,KAAK;AACtC,YAAI,eAAe,cAAc,QAAQ;AACrC,gBAAMC,OAAM,KAAK,gBAAgB,KAAK;AACtC,4BAAkBA,MAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,UAAU,cAAc;AAAA,YACxB,UAAUA,KAAI;AAAA,UAClB,CAAC;AACD,iBAAO;AAAA,QACX;AACA,cAAM,SAAS,IAAI,YAAY;AAC/B,YAAI,MAAM;AACV,mBAAW,SAAS,KAAK,KAAK,QAAQ;AAClC,cAAI,MAAM,SAAS,OAAO;AACtB,gBAAI,MAAM,KAAK,SAAS,MAAM,OAAO;AACjC,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,MAAM,aAAa;AAAA,gBACnB,SAAS,MAAM;AAAA,gBACf,MAAM;AAAA,gBACN,WAAW;AAAA,gBACX,OAAO;AAAA,gBACP,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,OAAO;AAC3B,gBAAI,MAAM,KAAK,SAAS,MAAM,OAAO;AACjC,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,MAAM,aAAa;AAAA,gBACnB,SAAS,MAAM;AAAA,gBACf,MAAM;AAAA,gBACN,WAAW;AAAA,gBACX,OAAO;AAAA,gBACP,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,UAAU;AAC9B,kBAAM,SAAS,MAAM,KAAK,SAAS,MAAM;AACzC,kBAAM,WAAW,MAAM,KAAK,SAAS,MAAM;AAC3C,gBAAI,UAAU,UAAU;AACpB,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,kBAAI,QAAQ;AACR,kCAAkB,KAAK;AAAA,kBACnB,MAAM,aAAa;AAAA,kBACnB,SAAS,MAAM;AAAA,kBACf,MAAM;AAAA,kBACN,WAAW;AAAA,kBACX,OAAO;AAAA,kBACP,SAAS,MAAM;AAAA,gBACnB,CAAC;AAAA,cACL,WACS,UAAU;AACf,kCAAkB,KAAK;AAAA,kBACnB,MAAM,aAAa;AAAA,kBACnB,SAAS,MAAM;AAAA,kBACf,MAAM;AAAA,kBACN,WAAW;AAAA,kBACX,OAAO;AAAA,kBACP,SAAS,MAAM;AAAA,gBACnB,CAAC;AAAA,cACL;AACA,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,SAAS;AAC7B,gBAAI,CAAC,WAAW,KAAK,MAAM,IAAI,GAAG;AAC9B,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,YAAY;AAAA,gBACZ,MAAM,aAAa;AAAA,gBACnB,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,SAAS;AAC7B,gBAAI,CAAC,YAAY;AACb,2BAAa,IAAI,OAAO,aAAa,GAAG;AAAA,YAC5C;AACA,gBAAI,CAAC,WAAW,KAAK,MAAM,IAAI,GAAG;AAC9B,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,YAAY;AAAA,gBACZ,MAAM,aAAa;AAAA,gBACnB,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,QAAQ;AAC5B,gBAAI,CAAC,UAAU,KAAK,MAAM,IAAI,GAAG;AAC7B,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,YAAY;AAAA,gBACZ,MAAM,aAAa;AAAA,gBACnB,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,UAAU;AAC9B,gBAAI,CAAC,YAAY,KAAK,MAAM,IAAI,GAAG;AAC/B,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,YAAY;AAAA,gBACZ,MAAM,aAAa;AAAA,gBACnB,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,QAAQ;AAC5B,gBAAI,CAAC,UAAU,KAAK,MAAM,IAAI,GAAG;AAC7B,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,YAAY;AAAA,gBACZ,MAAM,aAAa;AAAA,gBACnB,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,SAAS;AAC7B,gBAAI,CAAC,WAAW,KAAK,MAAM,IAAI,GAAG;AAC9B,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,YAAY;AAAA,gBACZ,MAAM,aAAa;AAAA,gBACnB,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,QAAQ;AAC5B,gBAAI,CAAC,UAAU,KAAK,MAAM,IAAI,GAAG;AAC7B,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,YAAY;AAAA,gBACZ,MAAM,aAAa;AAAA,gBACnB,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,OAAO;AAC3B,gBAAI;AACA,kBAAI,IAAI,MAAM,IAAI;AAAA,YACtB,QACM;AACF,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,YAAY;AAAA,gBACZ,MAAM,aAAa;AAAA,gBACnB,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,SAAS;AAC7B,kBAAM,MAAM,YAAY;AACxB,kBAAM,aAAa,MAAM,MAAM,KAAK,MAAM,IAAI;AAC9C,gBAAI,CAAC,YAAY;AACb,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,YAAY;AAAA,gBACZ,MAAM,aAAa;AAAA,gBACnB,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,QAAQ;AAC5B,kBAAM,OAAO,MAAM,KAAK,KAAK;AAAA,UACjC,WACS,MAAM,SAAS,YAAY;AAChC,gBAAI,CAAC,MAAM,KAAK,SAAS,MAAM,OAAO,MAAM,QAAQ,GAAG;AACnD,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,MAAM,aAAa;AAAA,gBACnB,YAAY,EAAE,UAAU,MAAM,OAAO,UAAU,MAAM,SAAS;AAAA,gBAC9D,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,eAAe;AACnC,kBAAM,OAAO,MAAM,KAAK,YAAY;AAAA,UACxC,WACS,MAAM,SAAS,eAAe;AACnC,kBAAM,OAAO,MAAM,KAAK,YAAY;AAAA,UACxC,WACS,MAAM,SAAS,cAAc;AAClC,gBAAI,CAAC,MAAM,KAAK,WAAW,MAAM,KAAK,GAAG;AACrC,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,MAAM,aAAa;AAAA,gBACnB,YAAY,EAAE,YAAY,MAAM,MAAM;AAAA,gBACtC,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,YAAY;AAChC,gBAAI,CAAC,MAAM,KAAK,SAAS,MAAM,KAAK,GAAG;AACnC,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,MAAM,aAAa;AAAA,gBACnB,YAAY,EAAE,UAAU,MAAM,MAAM;AAAA,gBACpC,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,YAAY;AAChC,kBAAM,QAAQ,cAAc,KAAK;AACjC,gBAAI,CAAC,MAAM,KAAK,MAAM,IAAI,GAAG;AACzB,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,MAAM,aAAa;AAAA,gBACnB,YAAY;AAAA,gBACZ,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,QAAQ;AAC5B,kBAAM,QAAQ;AACd,gBAAI,CAAC,MAAM,KAAK,MAAM,IAAI,GAAG;AACzB,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,MAAM,aAAa;AAAA,gBACnB,YAAY;AAAA,gBACZ,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,QAAQ;AAC5B,kBAAM,QAAQ,UAAU,KAAK;AAC7B,gBAAI,CAAC,MAAM,KAAK,MAAM,IAAI,GAAG;AACzB,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,MAAM,aAAa;AAAA,gBACnB,YAAY;AAAA,gBACZ,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,YAAY;AAChC,gBAAI,CAAC,cAAc,KAAK,MAAM,IAAI,GAAG;AACjC,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,YAAY;AAAA,gBACZ,MAAM,aAAa;AAAA,gBACnB,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,MAAM;AAC1B,gBAAI,CAAC,UAAU,MAAM,MAAM,MAAM,OAAO,GAAG;AACvC,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,YAAY;AAAA,gBACZ,MAAM,aAAa;AAAA,gBACnB,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,OAAO;AAC3B,gBAAI,CAAC,WAAW,MAAM,MAAM,MAAM,GAAG,GAAG;AACpC,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,YAAY;AAAA,gBACZ,MAAM,aAAa;AAAA,gBACnB,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,QAAQ;AAC5B,gBAAI,CAAC,YAAY,MAAM,MAAM,MAAM,OAAO,GAAG;AACzC,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,YAAY;AAAA,gBACZ,MAAM,aAAa;AAAA,gBACnB,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,UAAU;AAC9B,gBAAI,CAAC,YAAY,KAAK,MAAM,IAAI,GAAG;AAC/B,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,YAAY;AAAA,gBACZ,MAAM,aAAa;AAAA,gBACnB,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,aAAa;AACjC,gBAAI,CAAC,eAAe,KAAK,MAAM,IAAI,GAAG;AAClC,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,YAAY;AAAA,gBACZ,MAAM,aAAa;AAAA,gBACnB,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,OACK;AACD,iBAAK,YAAY,KAAK;AAAA,UAC1B;AAAA,QACJ;AACA,eAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,MAAM,KAAK;AAAA,MACrD;AAAA,MACA,OAAO,OAAO,YAAY,SAAS;AAC/B,eAAO,KAAK,WAAW,CAAC,SAAS,MAAM,KAAK,IAAI,GAAG;AAAA,UAC/C;AAAA,UACA,MAAM,aAAa;AAAA,UACnB,GAAG,UAAU,SAAS,OAAO;AAAA,QACjC,CAAC;AAAA,MACL;AAAA,MACA,UAAU,OAAO;AACb,eAAO,IAAI,WAAU;AAAA,UACjB,GAAG,KAAK;AAAA,UACR,QAAQ,CAAC,GAAG,KAAK,KAAK,QAAQ,KAAK;AAAA,QACvC,CAAC;AAAA,MACL;AAAA,MACA,MAAM,SAAS;AACX,eAAO,KAAK,UAAU,EAAE,MAAM,SAAS,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,MAC3E;AAAA,MACA,IAAI,SAAS;AACT,eAAO,KAAK,UAAU,EAAE,MAAM,OAAO,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,MACzE;AAAA,MACA,MAAM,SAAS;AACX,eAAO,KAAK,UAAU,EAAE,MAAM,SAAS,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,MAC3E;AAAA,MACA,KAAK,SAAS;AACV,eAAO,KAAK,UAAU,EAAE,MAAM,QAAQ,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,MAC1E;AAAA,MACA,OAAO,SAAS;AACZ,eAAO,KAAK,UAAU,EAAE,MAAM,UAAU,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,MAC5E;AAAA,MACA,KAAK,SAAS;AACV,eAAO,KAAK,UAAU,EAAE,MAAM,QAAQ,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,MAC1E;AAAA,MACA,MAAM,SAAS;AACX,eAAO,KAAK,UAAU,EAAE,MAAM,SAAS,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,MAC3E;AAAA,MACA,KAAK,SAAS;AACV,eAAO,KAAK,UAAU,EAAE,MAAM,QAAQ,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,MAC1E;AAAA,MACA,OAAO,SAAS;AACZ,eAAO,KAAK,UAAU,EAAE,MAAM,UAAU,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,MAC5E;AAAA,MACA,UAAU,SAAS;AAEf,eAAO,KAAK,UAAU;AAAA,UAClB,MAAM;AAAA,UACN,GAAG,UAAU,SAAS,OAAO;AAAA,QACjC,CAAC;AAAA,MACL;AAAA,MACA,IAAI,SAAS;AACT,eAAO,KAAK,UAAU,EAAE,MAAM,OAAO,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,MACzE;AAAA,MACA,GAAG,SAAS;AACR,eAAO,KAAK,UAAU,EAAE,MAAM,MAAM,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,MACxE;AAAA,MACA,KAAK,SAAS;AACV,eAAO,KAAK,UAAU,EAAE,MAAM,QAAQ,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,MAC1E;AAAA,MACA,SAAS,SAAS;AACd,YAAI,OAAO,YAAY,UAAU;AAC7B,iBAAO,KAAK,UAAU;AAAA,YAClB,MAAM;AAAA,YACN,WAAW;AAAA,YACX,QAAQ;AAAA,YACR,OAAO;AAAA,YACP,SAAS;AAAA,UACb,CAAC;AAAA,QACL;AACA,eAAO,KAAK,UAAU;AAAA,UAClB,MAAM;AAAA,UACN,WAAW,OAAO,SAAS,cAAc,cAAc,OAAO,SAAS;AAAA,UACvE,QAAQ,SAAS,UAAU;AAAA,UAC3B,OAAO,SAAS,SAAS;AAAA,UACzB,GAAG,UAAU,SAAS,SAAS,OAAO;AAAA,QAC1C,CAAC;AAAA,MACL;AAAA,MACA,KAAK,SAAS;AACV,eAAO,KAAK,UAAU,EAAE,MAAM,QAAQ,QAAQ,CAAC;AAAA,MACnD;AAAA,MACA,KAAK,SAAS;AACV,YAAI,OAAO,YAAY,UAAU;AAC7B,iBAAO,KAAK,UAAU;AAAA,YAClB,MAAM;AAAA,YACN,WAAW;AAAA,YACX,SAAS;AAAA,UACb,CAAC;AAAA,QACL;AACA,eAAO,KAAK,UAAU;AAAA,UAClB,MAAM;AAAA,UACN,WAAW,OAAO,SAAS,cAAc,cAAc,OAAO,SAAS;AAAA,UACvE,GAAG,UAAU,SAAS,SAAS,OAAO;AAAA,QAC1C,CAAC;AAAA,MACL;AAAA,MACA,SAAS,SAAS;AACd,eAAO,KAAK,UAAU,EAAE,MAAM,YAAY,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,MAC9E;AAAA,MACA,MAAM,OAAO,SAAS;AAClB,eAAO,KAAK,UAAU;AAAA,UAClB,MAAM;AAAA,UACN;AAAA,UACA,GAAG,UAAU,SAAS,OAAO;AAAA,QACjC,CAAC;AAAA,MACL;AAAA,MACA,SAAS,OAAO,SAAS;AACrB,eAAO,KAAK,UAAU;AAAA,UAClB,MAAM;AAAA,UACN;AAAA,UACA,UAAU,SAAS;AAAA,UACnB,GAAG,UAAU,SAAS,SAAS,OAAO;AAAA,QAC1C,CAAC;AAAA,MACL;AAAA,MACA,WAAW,OAAO,SAAS;AACvB,eAAO,KAAK,UAAU;AAAA,UAClB,MAAM;AAAA,UACN;AAAA,UACA,GAAG,UAAU,SAAS,OAAO;AAAA,QACjC,CAAC;AAAA,MACL;AAAA,MACA,SAAS,OAAO,SAAS;AACrB,eAAO,KAAK,UAAU;AAAA,UAClB,MAAM;AAAA,UACN;AAAA,UACA,GAAG,UAAU,SAAS,OAAO;AAAA,QACjC,CAAC;AAAA,MACL;AAAA,MACA,IAAI,WAAW,SAAS;AACpB,eAAO,KAAK,UAAU;AAAA,UAClB,MAAM;AAAA,UACN,OAAO;AAAA,UACP,GAAG,UAAU,SAAS,OAAO;AAAA,QACjC,CAAC;AAAA,MACL;AAAA,MACA,IAAI,WAAW,SAAS;AACpB,eAAO,KAAK,UAAU;AAAA,UAClB,MAAM;AAAA,UACN,OAAO;AAAA,UACP,GAAG,UAAU,SAAS,OAAO;AAAA,QACjC,CAAC;AAAA,MACL;AAAA,MACA,OAAO,KAAK,SAAS;AACjB,eAAO,KAAK,UAAU;AAAA,UAClB,MAAM;AAAA,UACN,OAAO;AAAA,UACP,GAAG,UAAU,SAAS,OAAO;AAAA,QACjC,CAAC;AAAA,MACL;AAAA;AAAA;AAAA;AAAA,MAIA,SAAS,SAAS;AACd,eAAO,KAAK,IAAI,GAAG,UAAU,SAAS,OAAO,CAAC;AAAA,MAClD;AAAA,MACA,OAAO;AACH,eAAO,IAAI,WAAU;AAAA,UACjB,GAAG,KAAK;AAAA,UACR,QAAQ,CAAC,GAAG,KAAK,KAAK,QAAQ,EAAE,MAAM,OAAO,CAAC;AAAA,QAClD,CAAC;AAAA,MACL;AAAA,MACA,cAAc;AACV,eAAO,IAAI,WAAU;AAAA,UACjB,GAAG,KAAK;AAAA,UACR,QAAQ,CAAC,GAAG,KAAK,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AAAA,QACzD,CAAC;AAAA,MACL;AAAA,MACA,cAAc;AACV,eAAO,IAAI,WAAU;AAAA,UACjB,GAAG,KAAK;AAAA,UACR,QAAQ,CAAC,GAAG,KAAK,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AAAA,QACzD,CAAC;AAAA,MACL;AAAA,MACA,IAAI,aAAa;AACb,eAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,UAAU;AAAA,MACjE;AAAA,MACA,IAAI,SAAS;AACT,eAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,MAAM;AAAA,MAC7D;AAAA,MACA,IAAI,SAAS;AACT,eAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,MAAM;AAAA,MAC7D;AAAA,MACA,IAAI,aAAa;AACb,eAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,UAAU;AAAA,MACjE;AAAA,MACA,IAAI,UAAU;AACV,eAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,OAAO;AAAA,MAC9D;AAAA,MACA,IAAI,QAAQ;AACR,eAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,KAAK;AAAA,MAC5D;AAAA,MACA,IAAI,UAAU;AACV,eAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,OAAO;AAAA,MAC9D;AAAA,MACA,IAAI,SAAS;AACT,eAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,MAAM;AAAA,MAC7D;AAAA,MACA,IAAI,WAAW;AACX,eAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,QAAQ;AAAA,MAC/D;AAAA,MACA,IAAI,SAAS;AACT,eAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,MAAM;AAAA,MAC7D;AAAA,MACA,IAAI,UAAU;AACV,eAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,OAAO;AAAA,MAC9D;AAAA,MACA,IAAI,SAAS;AACT,eAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,MAAM;AAAA,MAC7D;AAAA,MACA,IAAI,OAAO;AACP,eAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,IAAI;AAAA,MAC3D;AAAA,MACA,IAAI,SAAS;AACT,eAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,MAAM;AAAA,MAC7D;AAAA,MACA,IAAI,WAAW;AACX,eAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,QAAQ;AAAA,MAC/D;AAAA,MACA,IAAI,cAAc;AAEd,eAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,WAAW;AAAA,MAClE;AAAA,MACA,IAAI,YAAY;AACZ,YAAI,MAAM;AACV,mBAAW,MAAM,KAAK,KAAK,QAAQ;AAC/B,cAAI,GAAG,SAAS,OAAO;AACnB,gBAAI,QAAQ,QAAQ,GAAG,QAAQ;AAC3B,oBAAM,GAAG;AAAA,UACjB;AAAA,QACJ;AACA,eAAO;AAAA,MACX;AAAA,MACA,IAAI,YAAY;AACZ,YAAI,MAAM;AACV,mBAAW,MAAM,KAAK,KAAK,QAAQ;AAC/B,cAAI,GAAG,SAAS,OAAO;AACnB,gBAAI,QAAQ,QAAQ,GAAG,QAAQ;AAC3B,oBAAM,GAAG;AAAA,UACjB;AAAA,QACJ;AACA,eAAO;AAAA,MACX;AAAA,IACJ;AACA,cAAU,SAAS,CAAC,WAAW;AAC3B,aAAO,IAAI,UAAU;AAAA,QACjB,QAAQ,CAAC;AAAA,QACT,UAAU,sBAAsB;AAAA,QAChC,QAAQ,QAAQ,UAAU;AAAA,QAC1B,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AAUO,IAAM,YAAN,MAAM,mBAAkB,QAAQ;AAAA,MACnC,cAAc;AACV,cAAM,GAAG,SAAS;AAClB,aAAK,MAAM,KAAK;AAChB,aAAK,MAAM,KAAK;AAChB,aAAK,OAAO,KAAK;AAAA,MACrB;AAAA,MACA,OAAO,OAAO;AACV,YAAI,KAAK,KAAK,QAAQ;AAClB,gBAAM,OAAO,OAAO,MAAM,IAAI;AAAA,QAClC;AACA,cAAM,aAAa,KAAK,SAAS,KAAK;AACtC,YAAI,eAAe,cAAc,QAAQ;AACrC,gBAAMA,OAAM,KAAK,gBAAgB,KAAK;AACtC,4BAAkBA,MAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,UAAU,cAAc;AAAA,YACxB,UAAUA,KAAI;AAAA,UAClB,CAAC;AACD,iBAAO;AAAA,QACX;AACA,YAAI,MAAM;AACV,cAAM,SAAS,IAAI,YAAY;AAC/B,mBAAW,SAAS,KAAK,KAAK,QAAQ;AAClC,cAAI,MAAM,SAAS,OAAO;AACtB,gBAAI,CAAC,KAAK,UAAU,MAAM,IAAI,GAAG;AAC7B,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,MAAM,aAAa;AAAA,gBACnB,UAAU;AAAA,gBACV,UAAU;AAAA,gBACV,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,OAAO;AAC3B,kBAAM,WAAW,MAAM,YAAY,MAAM,OAAO,MAAM,QAAQ,MAAM,QAAQ,MAAM;AAClF,gBAAI,UAAU;AACV,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,MAAM,aAAa;AAAA,gBACnB,SAAS,MAAM;AAAA,gBACf,MAAM;AAAA,gBACN,WAAW,MAAM;AAAA,gBACjB,OAAO;AAAA,gBACP,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,OAAO;AAC3B,kBAAM,SAAS,MAAM,YAAY,MAAM,OAAO,MAAM,QAAQ,MAAM,QAAQ,MAAM;AAChF,gBAAI,QAAQ;AACR,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,MAAM,aAAa;AAAA,gBACnB,SAAS,MAAM;AAAA,gBACf,MAAM;AAAA,gBACN,WAAW,MAAM;AAAA,gBACjB,OAAO;AAAA,gBACP,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,cAAc;AAClC,gBAAI,mBAAmB,MAAM,MAAM,MAAM,KAAK,MAAM,GAAG;AACnD,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,MAAM,aAAa;AAAA,gBACnB,YAAY,MAAM;AAAA,gBAClB,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,UAAU;AAC9B,gBAAI,CAAC,OAAO,SAAS,MAAM,IAAI,GAAG;AAC9B,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,MAAM,aAAa;AAAA,gBACnB,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,OACK;AACD,iBAAK,YAAY,KAAK;AAAA,UAC1B;AAAA,QACJ;AACA,eAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,MAAM,KAAK;AAAA,MACrD;AAAA,MACA,IAAI,OAAO,SAAS;AAChB,eAAO,KAAK,SAAS,OAAO,OAAO,MAAM,UAAU,SAAS,OAAO,CAAC;AAAA,MACxE;AAAA,MACA,GAAG,OAAO,SAAS;AACf,eAAO,KAAK,SAAS,OAAO,OAAO,OAAO,UAAU,SAAS,OAAO,CAAC;AAAA,MACzE;AAAA,MACA,IAAI,OAAO,SAAS;AAChB,eAAO,KAAK,SAAS,OAAO,OAAO,MAAM,UAAU,SAAS,OAAO,CAAC;AAAA,MACxE;AAAA,MACA,GAAG,OAAO,SAAS;AACf,eAAO,KAAK,SAAS,OAAO,OAAO,OAAO,UAAU,SAAS,OAAO,CAAC;AAAA,MACzE;AAAA,MACA,SAAS,MAAM,OAAO,WAAW,SAAS;AACtC,eAAO,IAAI,WAAU;AAAA,UACjB,GAAG,KAAK;AAAA,UACR,QAAQ;AAAA,YACJ,GAAG,KAAK,KAAK;AAAA,YACb;AAAA,cACI;AAAA,cACA;AAAA,cACA;AAAA,cACA,SAAS,UAAU,SAAS,OAAO;AAAA,YACvC;AAAA,UACJ;AAAA,QACJ,CAAC;AAAA,MACL;AAAA,MACA,UAAU,OAAO;AACb,eAAO,IAAI,WAAU;AAAA,UACjB,GAAG,KAAK;AAAA,UACR,QAAQ,CAAC,GAAG,KAAK,KAAK,QAAQ,KAAK;AAAA,QACvC,CAAC;AAAA,MACL;AAAA,MACA,IAAI,SAAS;AACT,eAAO,KAAK,UAAU;AAAA,UAClB,MAAM;AAAA,UACN,SAAS,UAAU,SAAS,OAAO;AAAA,QACvC,CAAC;AAAA,MACL;AAAA,MACA,SAAS,SAAS;AACd,eAAO,KAAK,UAAU;AAAA,UAClB,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,UACX,SAAS,UAAU,SAAS,OAAO;AAAA,QACvC,CAAC;AAAA,MACL;AAAA,MACA,SAAS,SAAS;AACd,eAAO,KAAK,UAAU;AAAA,UAClB,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,UACX,SAAS,UAAU,SAAS,OAAO;AAAA,QACvC,CAAC;AAAA,MACL;AAAA,MACA,YAAY,SAAS;AACjB,eAAO,KAAK,UAAU;AAAA,UAClB,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,UACX,SAAS,UAAU,SAAS,OAAO;AAAA,QACvC,CAAC;AAAA,MACL;AAAA,MACA,YAAY,SAAS;AACjB,eAAO,KAAK,UAAU;AAAA,UAClB,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,UACX,SAAS,UAAU,SAAS,OAAO;AAAA,QACvC,CAAC;AAAA,MACL;AAAA,MACA,WAAW,OAAO,SAAS;AACvB,eAAO,KAAK,UAAU;AAAA,UAClB,MAAM;AAAA,UACN;AAAA,UACA,SAAS,UAAU,SAAS,OAAO;AAAA,QACvC,CAAC;AAAA,MACL;AAAA,MACA,OAAO,SAAS;AACZ,eAAO,KAAK,UAAU;AAAA,UAClB,MAAM;AAAA,UACN,SAAS,UAAU,SAAS,OAAO;AAAA,QACvC,CAAC;AAAA,MACL;AAAA,MACA,KAAK,SAAS;AACV,eAAO,KAAK,UAAU;AAAA,UAClB,MAAM;AAAA,UACN,WAAW;AAAA,UACX,OAAO,OAAO;AAAA,UACd,SAAS,UAAU,SAAS,OAAO;AAAA,QACvC,CAAC,EAAE,UAAU;AAAA,UACT,MAAM;AAAA,UACN,WAAW;AAAA,UACX,OAAO,OAAO;AAAA,UACd,SAAS,UAAU,SAAS,OAAO;AAAA,QACvC,CAAC;AAAA,MACL;AAAA,MACA,IAAI,WAAW;AACX,YAAI,MAAM;AACV,mBAAW,MAAM,KAAK,KAAK,QAAQ;AAC/B,cAAI,GAAG,SAAS,OAAO;AACnB,gBAAI,QAAQ,QAAQ,GAAG,QAAQ;AAC3B,oBAAM,GAAG;AAAA,UACjB;AAAA,QACJ;AACA,eAAO;AAAA,MACX;AAAA,MACA,IAAI,WAAW;AACX,YAAI,MAAM;AACV,mBAAW,MAAM,KAAK,KAAK,QAAQ;AAC/B,cAAI,GAAG,SAAS,OAAO;AACnB,gBAAI,QAAQ,QAAQ,GAAG,QAAQ;AAC3B,oBAAM,GAAG;AAAA,UACjB;AAAA,QACJ;AACA,eAAO;AAAA,MACX;AAAA,MACA,IAAI,QAAQ;AACR,eAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,SAAU,GAAG,SAAS,gBAAgB,KAAK,UAAU,GAAG,KAAK,CAAE;AAAA,MACtH;AAAA,MACA,IAAI,WAAW;AACX,YAAI,MAAM;AACV,YAAI,MAAM;AACV,mBAAW,MAAM,KAAK,KAAK,QAAQ;AAC/B,cAAI,GAAG,SAAS,YAAY,GAAG,SAAS,SAAS,GAAG,SAAS,cAAc;AACvE,mBAAO;AAAA,UACX,WACS,GAAG,SAAS,OAAO;AACxB,gBAAI,QAAQ,QAAQ,GAAG,QAAQ;AAC3B,oBAAM,GAAG;AAAA,UACjB,WACS,GAAG,SAAS,OAAO;AACxB,gBAAI,QAAQ,QAAQ,GAAG,QAAQ;AAC3B,oBAAM,GAAG;AAAA,UACjB;AAAA,QACJ;AACA,eAAO,OAAO,SAAS,GAAG,KAAK,OAAO,SAAS,GAAG;AAAA,MACtD;AAAA,IACJ;AACA,cAAU,SAAS,CAAC,WAAW;AAC3B,aAAO,IAAI,UAAU;AAAA,QACjB,QAAQ,CAAC;AAAA,QACT,UAAU,sBAAsB;AAAA,QAChC,QAAQ,QAAQ,UAAU;AAAA,QAC1B,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AACO,IAAM,YAAN,MAAM,mBAAkB,QAAQ;AAAA,MACnC,cAAc;AACV,cAAM,GAAG,SAAS;AAClB,aAAK,MAAM,KAAK;AAChB,aAAK,MAAM,KAAK;AAAA,MACpB;AAAA,MACA,OAAO,OAAO;AACV,YAAI,KAAK,KAAK,QAAQ;AAClB,cAAI;AACA,kBAAM,OAAO,OAAO,MAAM,IAAI;AAAA,UAClC,QACM;AACF,mBAAO,KAAK,iBAAiB,KAAK;AAAA,UACtC;AAAA,QACJ;AACA,cAAM,aAAa,KAAK,SAAS,KAAK;AACtC,YAAI,eAAe,cAAc,QAAQ;AACrC,iBAAO,KAAK,iBAAiB,KAAK;AAAA,QACtC;AACA,YAAI,MAAM;AACV,cAAM,SAAS,IAAI,YAAY;AAC/B,mBAAW,SAAS,KAAK,KAAK,QAAQ;AAClC,cAAI,MAAM,SAAS,OAAO;AACtB,kBAAM,WAAW,MAAM,YAAY,MAAM,OAAO,MAAM,QAAQ,MAAM,QAAQ,MAAM;AAClF,gBAAI,UAAU;AACV,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,MAAM,aAAa;AAAA,gBACnB,MAAM;AAAA,gBACN,SAAS,MAAM;AAAA,gBACf,WAAW,MAAM;AAAA,gBACjB,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,OAAO;AAC3B,kBAAM,SAAS,MAAM,YAAY,MAAM,OAAO,MAAM,QAAQ,MAAM,QAAQ,MAAM;AAChF,gBAAI,QAAQ;AACR,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,MAAM,aAAa;AAAA,gBACnB,MAAM;AAAA,gBACN,SAAS,MAAM;AAAA,gBACf,WAAW,MAAM;AAAA,gBACjB,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,cAAc;AAClC,gBAAI,MAAM,OAAO,MAAM,UAAU,OAAO,CAAC,GAAG;AACxC,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,MAAM,aAAa;AAAA,gBACnB,YAAY,MAAM;AAAA,gBAClB,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,OACK;AACD,iBAAK,YAAY,KAAK;AAAA,UAC1B;AAAA,QACJ;AACA,eAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,MAAM,KAAK;AAAA,MACrD;AAAA,MACA,iBAAiB,OAAO;AACpB,cAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,0BAAkB,KAAK;AAAA,UACnB,MAAM,aAAa;AAAA,UACnB,UAAU,cAAc;AAAA,UACxB,UAAU,IAAI;AAAA,QAClB,CAAC;AACD,eAAO;AAAA,MACX;AAAA,MACA,IAAI,OAAO,SAAS;AAChB,eAAO,KAAK,SAAS,OAAO,OAAO,MAAM,UAAU,SAAS,OAAO,CAAC;AAAA,MACxE;AAAA,MACA,GAAG,OAAO,SAAS;AACf,eAAO,KAAK,SAAS,OAAO,OAAO,OAAO,UAAU,SAAS,OAAO,CAAC;AAAA,MACzE;AAAA,MACA,IAAI,OAAO,SAAS;AAChB,eAAO,KAAK,SAAS,OAAO,OAAO,MAAM,UAAU,SAAS,OAAO,CAAC;AAAA,MACxE;AAAA,MACA,GAAG,OAAO,SAAS;AACf,eAAO,KAAK,SAAS,OAAO,OAAO,OAAO,UAAU,SAAS,OAAO,CAAC;AAAA,MACzE;AAAA,MACA,SAAS,MAAM,OAAO,WAAW,SAAS;AACtC,eAAO,IAAI,WAAU;AAAA,UACjB,GAAG,KAAK;AAAA,UACR,QAAQ;AAAA,YACJ,GAAG,KAAK,KAAK;AAAA,YACb;AAAA,cACI;AAAA,cACA;AAAA,cACA;AAAA,cACA,SAAS,UAAU,SAAS,OAAO;AAAA,YACvC;AAAA,UACJ;AAAA,QACJ,CAAC;AAAA,MACL;AAAA,MACA,UAAU,OAAO;AACb,eAAO,IAAI,WAAU;AAAA,UACjB,GAAG,KAAK;AAAA,UACR,QAAQ,CAAC,GAAG,KAAK,KAAK,QAAQ,KAAK;AAAA,QACvC,CAAC;AAAA,MACL;AAAA,MACA,SAAS,SAAS;AACd,eAAO,KAAK,UAAU;AAAA,UAClB,MAAM;AAAA,UACN,OAAO,OAAO,CAAC;AAAA,UACf,WAAW;AAAA,UACX,SAAS,UAAU,SAAS,OAAO;AAAA,QACvC,CAAC;AAAA,MACL;AAAA,MACA,SAAS,SAAS;AACd,eAAO,KAAK,UAAU;AAAA,UAClB,MAAM;AAAA,UACN,OAAO,OAAO,CAAC;AAAA,UACf,WAAW;AAAA,UACX,SAAS,UAAU,SAAS,OAAO;AAAA,QACvC,CAAC;AAAA,MACL;AAAA,MACA,YAAY,SAAS;AACjB,eAAO,KAAK,UAAU;AAAA,UAClB,MAAM;AAAA,UACN,OAAO,OAAO,CAAC;AAAA,UACf,WAAW;AAAA,UACX,SAAS,UAAU,SAAS,OAAO;AAAA,QACvC,CAAC;AAAA,MACL;AAAA,MACA,YAAY,SAAS;AACjB,eAAO,KAAK,UAAU;AAAA,UAClB,MAAM;AAAA,UACN,OAAO,OAAO,CAAC;AAAA,UACf,WAAW;AAAA,UACX,SAAS,UAAU,SAAS,OAAO;AAAA,QACvC,CAAC;AAAA,MACL;AAAA,MACA,WAAW,OAAO,SAAS;AACvB,eAAO,KAAK,UAAU;AAAA,UAClB,MAAM;AAAA,UACN;AAAA,UACA,SAAS,UAAU,SAAS,OAAO;AAAA,QACvC,CAAC;AAAA,MACL;AAAA,MACA,IAAI,WAAW;AACX,YAAI,MAAM;AACV,mBAAW,MAAM,KAAK,KAAK,QAAQ;AAC/B,cAAI,GAAG,SAAS,OAAO;AACnB,gBAAI,QAAQ,QAAQ,GAAG,QAAQ;AAC3B,oBAAM,GAAG;AAAA,UACjB;AAAA,QACJ;AACA,eAAO;AAAA,MACX;AAAA,MACA,IAAI,WAAW;AACX,YAAI,MAAM;AACV,mBAAW,MAAM,KAAK,KAAK,QAAQ;AAC/B,cAAI,GAAG,SAAS,OAAO;AACnB,gBAAI,QAAQ,QAAQ,GAAG,QAAQ;AAC3B,oBAAM,GAAG;AAAA,UACjB;AAAA,QACJ;AACA,eAAO;AAAA,MACX;AAAA,IACJ;AACA,cAAU,SAAS,CAAC,WAAW;AAC3B,aAAO,IAAI,UAAU;AAAA,QACjB,QAAQ,CAAC;AAAA,QACT,UAAU,sBAAsB;AAAA,QAChC,QAAQ,QAAQ,UAAU;AAAA,QAC1B,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AACO,IAAM,aAAN,cAAyB,QAAQ;AAAA,MACpC,OAAO,OAAO;AACV,YAAI,KAAK,KAAK,QAAQ;AAClB,gBAAM,OAAO,QAAQ,MAAM,IAAI;AAAA,QACnC;AACA,cAAM,aAAa,KAAK,SAAS,KAAK;AACtC,YAAI,eAAe,cAAc,SAAS;AACtC,gBAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,UAAU,cAAc;AAAA,YACxB,UAAU,IAAI;AAAA,UAClB,CAAC;AACD,iBAAO;AAAA,QACX;AACA,eAAO,GAAG,MAAM,IAAI;AAAA,MACxB;AAAA,IACJ;AACA,eAAW,SAAS,CAAC,WAAW;AAC5B,aAAO,IAAI,WAAW;AAAA,QAClB,UAAU,sBAAsB;AAAA,QAChC,QAAQ,QAAQ,UAAU;AAAA,QAC1B,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AACO,IAAM,UAAN,MAAM,iBAAgB,QAAQ;AAAA,MACjC,OAAO,OAAO;AACV,YAAI,KAAK,KAAK,QAAQ;AAClB,gBAAM,OAAO,IAAI,KAAK,MAAM,IAAI;AAAA,QACpC;AACA,cAAM,aAAa,KAAK,SAAS,KAAK;AACtC,YAAI,eAAe,cAAc,MAAM;AACnC,gBAAMA,OAAM,KAAK,gBAAgB,KAAK;AACtC,4BAAkBA,MAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,UAAU,cAAc;AAAA,YACxB,UAAUA,KAAI;AAAA,UAClB,CAAC;AACD,iBAAO;AAAA,QACX;AACA,YAAI,OAAO,MAAM,MAAM,KAAK,QAAQ,CAAC,GAAG;AACpC,gBAAMA,OAAM,KAAK,gBAAgB,KAAK;AACtC,4BAAkBA,MAAK;AAAA,YACnB,MAAM,aAAa;AAAA,UACvB,CAAC;AACD,iBAAO;AAAA,QACX;AACA,cAAM,SAAS,IAAI,YAAY;AAC/B,YAAI,MAAM;AACV,mBAAW,SAAS,KAAK,KAAK,QAAQ;AAClC,cAAI,MAAM,SAAS,OAAO;AACtB,gBAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,OAAO;AACpC,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,MAAM,aAAa;AAAA,gBACnB,SAAS,MAAM;AAAA,gBACf,WAAW;AAAA,gBACX,OAAO;AAAA,gBACP,SAAS,MAAM;AAAA,gBACf,MAAM;AAAA,cACV,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,OAAO;AAC3B,gBAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,OAAO;AACpC,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,MAAM,aAAa;AAAA,gBACnB,SAAS,MAAM;AAAA,gBACf,WAAW;AAAA,gBACX,OAAO;AAAA,gBACP,SAAS,MAAM;AAAA,gBACf,MAAM;AAAA,cACV,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,OACK;AACD,iBAAK,YAAY,KAAK;AAAA,UAC1B;AAAA,QACJ;AACA,eAAO;AAAA,UACH,QAAQ,OAAO;AAAA,UACf,OAAO,IAAI,KAAK,MAAM,KAAK,QAAQ,CAAC;AAAA,QACxC;AAAA,MACJ;AAAA,MACA,UAAU,OAAO;AACb,eAAO,IAAI,SAAQ;AAAA,UACf,GAAG,KAAK;AAAA,UACR,QAAQ,CAAC,GAAG,KAAK,KAAK,QAAQ,KAAK;AAAA,QACvC,CAAC;AAAA,MACL;AAAA,MACA,IAAI,SAAS,SAAS;AAClB,eAAO,KAAK,UAAU;AAAA,UAClB,MAAM;AAAA,UACN,OAAO,QAAQ,QAAQ;AAAA,UACvB,SAAS,UAAU,SAAS,OAAO;AAAA,QACvC,CAAC;AAAA,MACL;AAAA,MACA,IAAI,SAAS,SAAS;AAClB,eAAO,KAAK,UAAU;AAAA,UAClB,MAAM;AAAA,UACN,OAAO,QAAQ,QAAQ;AAAA,UACvB,SAAS,UAAU,SAAS,OAAO;AAAA,QACvC,CAAC;AAAA,MACL;AAAA,MACA,IAAI,UAAU;AACV,YAAI,MAAM;AACV,mBAAW,MAAM,KAAK,KAAK,QAAQ;AAC/B,cAAI,GAAG,SAAS,OAAO;AACnB,gBAAI,QAAQ,QAAQ,GAAG,QAAQ;AAC3B,oBAAM,GAAG;AAAA,UACjB;AAAA,QACJ;AACA,eAAO,OAAO,OAAO,IAAI,KAAK,GAAG,IAAI;AAAA,MACzC;AAAA,MACA,IAAI,UAAU;AACV,YAAI,MAAM;AACV,mBAAW,MAAM,KAAK,KAAK,QAAQ;AAC/B,cAAI,GAAG,SAAS,OAAO;AACnB,gBAAI,QAAQ,QAAQ,GAAG,QAAQ;AAC3B,oBAAM,GAAG;AAAA,UACjB;AAAA,QACJ;AACA,eAAO,OAAO,OAAO,IAAI,KAAK,GAAG,IAAI;AAAA,MACzC;AAAA,IACJ;AACA,YAAQ,SAAS,CAAC,WAAW;AACzB,aAAO,IAAI,QAAQ;AAAA,QACf,QAAQ,CAAC;AAAA,QACT,QAAQ,QAAQ,UAAU;AAAA,QAC1B,UAAU,sBAAsB;AAAA,QAChC,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AACO,IAAM,YAAN,cAAwB,QAAQ;AAAA,MACnC,OAAO,OAAO;AACV,cAAM,aAAa,KAAK,SAAS,KAAK;AACtC,YAAI,eAAe,cAAc,QAAQ;AACrC,gBAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,UAAU,cAAc;AAAA,YACxB,UAAU,IAAI;AAAA,UAClB,CAAC;AACD,iBAAO;AAAA,QACX;AACA,eAAO,GAAG,MAAM,IAAI;AAAA,MACxB;AAAA,IACJ;AACA,cAAU,SAAS,CAAC,WAAW;AAC3B,aAAO,IAAI,UAAU;AAAA,QACjB,UAAU,sBAAsB;AAAA,QAChC,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AACO,IAAM,eAAN,cAA2B,QAAQ;AAAA,MACtC,OAAO,OAAO;AACV,cAAM,aAAa,KAAK,SAAS,KAAK;AACtC,YAAI,eAAe,cAAc,WAAW;AACxC,gBAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,UAAU,cAAc;AAAA,YACxB,UAAU,IAAI;AAAA,UAClB,CAAC;AACD,iBAAO;AAAA,QACX;AACA,eAAO,GAAG,MAAM,IAAI;AAAA,MACxB;AAAA,IACJ;AACA,iBAAa,SAAS,CAAC,WAAW;AAC9B,aAAO,IAAI,aAAa;AAAA,QACpB,UAAU,sBAAsB;AAAA,QAChC,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AACO,IAAM,UAAN,cAAsB,QAAQ;AAAA,MACjC,OAAO,OAAO;AACV,cAAM,aAAa,KAAK,SAAS,KAAK;AACtC,YAAI,eAAe,cAAc,MAAM;AACnC,gBAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,UAAU,cAAc;AAAA,YACxB,UAAU,IAAI;AAAA,UAClB,CAAC;AACD,iBAAO;AAAA,QACX;AACA,eAAO,GAAG,MAAM,IAAI;AAAA,MACxB;AAAA,IACJ;AACA,YAAQ,SAAS,CAAC,WAAW;AACzB,aAAO,IAAI,QAAQ;AAAA,QACf,UAAU,sBAAsB;AAAA,QAChC,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AACO,IAAM,SAAN,cAAqB,QAAQ;AAAA,MAChC,cAAc;AACV,cAAM,GAAG,SAAS;AAElB,aAAK,OAAO;AAAA,MAChB;AAAA,MACA,OAAO,OAAO;AACV,eAAO,GAAG,MAAM,IAAI;AAAA,MACxB;AAAA,IACJ;AACA,WAAO,SAAS,CAAC,WAAW;AACxB,aAAO,IAAI,OAAO;AAAA,QACd,UAAU,sBAAsB;AAAA,QAChC,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AACO,IAAM,aAAN,cAAyB,QAAQ;AAAA,MACpC,cAAc;AACV,cAAM,GAAG,SAAS;AAElB,aAAK,WAAW;AAAA,MACpB;AAAA,MACA,OAAO,OAAO;AACV,eAAO,GAAG,MAAM,IAAI;AAAA,MACxB;AAAA,IACJ;AACA,eAAW,SAAS,CAAC,WAAW;AAC5B,aAAO,IAAI,WAAW;AAAA,QAClB,UAAU,sBAAsB;AAAA,QAChC,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AACO,IAAM,WAAN,cAAuB,QAAQ;AAAA,MAClC,OAAO,OAAO;AACV,cAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,0BAAkB,KAAK;AAAA,UACnB,MAAM,aAAa;AAAA,UACnB,UAAU,cAAc;AAAA,UACxB,UAAU,IAAI;AAAA,QAClB,CAAC;AACD,eAAO;AAAA,MACX;AAAA,IACJ;AACA,aAAS,SAAS,CAAC,WAAW;AAC1B,aAAO,IAAI,SAAS;AAAA,QAChB,UAAU,sBAAsB;AAAA,QAChC,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AACO,IAAM,UAAN,cAAsB,QAAQ;AAAA,MACjC,OAAO,OAAO;AACV,cAAM,aAAa,KAAK,SAAS,KAAK;AACtC,YAAI,eAAe,cAAc,WAAW;AACxC,gBAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,UAAU,cAAc;AAAA,YACxB,UAAU,IAAI;AAAA,UAClB,CAAC;AACD,iBAAO;AAAA,QACX;AACA,eAAO,GAAG,MAAM,IAAI;AAAA,MACxB;AAAA,IACJ;AACA,YAAQ,SAAS,CAAC,WAAW;AACzB,aAAO,IAAI,QAAQ;AAAA,QACf,UAAU,sBAAsB;AAAA,QAChC,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AACO,IAAM,WAAN,MAAM,kBAAiB,QAAQ;AAAA,MAClC,OAAO,OAAO;AACV,cAAM,EAAE,KAAK,OAAO,IAAI,KAAK,oBAAoB,KAAK;AACtD,cAAM,MAAM,KAAK;AACjB,YAAI,IAAI,eAAe,cAAc,OAAO;AACxC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,UAAU,cAAc;AAAA,YACxB,UAAU,IAAI;AAAA,UAClB,CAAC;AACD,iBAAO;AAAA,QACX;AACA,YAAI,IAAI,gBAAgB,MAAM;AAC1B,gBAAM,SAAS,IAAI,KAAK,SAAS,IAAI,YAAY;AACjD,gBAAM,WAAW,IAAI,KAAK,SAAS,IAAI,YAAY;AACnD,cAAI,UAAU,UAAU;AACpB,8BAAkB,KAAK;AAAA,cACnB,MAAM,SAAS,aAAa,UAAU,aAAa;AAAA,cACnD,SAAU,WAAW,IAAI,YAAY,QAAQ;AAAA,cAC7C,SAAU,SAAS,IAAI,YAAY,QAAQ;AAAA,cAC3C,MAAM;AAAA,cACN,WAAW;AAAA,cACX,OAAO;AAAA,cACP,SAAS,IAAI,YAAY;AAAA,YAC7B,CAAC;AACD,mBAAO,MAAM;AAAA,UACjB;AAAA,QACJ;AACA,YAAI,IAAI,cAAc,MAAM;AACxB,cAAI,IAAI,KAAK,SAAS,IAAI,UAAU,OAAO;AACvC,8BAAkB,KAAK;AAAA,cACnB,MAAM,aAAa;AAAA,cACnB,SAAS,IAAI,UAAU;AAAA,cACvB,MAAM;AAAA,cACN,WAAW;AAAA,cACX,OAAO;AAAA,cACP,SAAS,IAAI,UAAU;AAAA,YAC3B,CAAC;AACD,mBAAO,MAAM;AAAA,UACjB;AAAA,QACJ;AACA,YAAI,IAAI,cAAc,MAAM;AACxB,cAAI,IAAI,KAAK,SAAS,IAAI,UAAU,OAAO;AACvC,8BAAkB,KAAK;AAAA,cACnB,MAAM,aAAa;AAAA,cACnB,SAAS,IAAI,UAAU;AAAA,cACvB,MAAM;AAAA,cACN,WAAW;AAAA,cACX,OAAO;AAAA,cACP,SAAS,IAAI,UAAU;AAAA,YAC3B,CAAC;AACD,mBAAO,MAAM;AAAA,UACjB;AAAA,QACJ;AACA,YAAI,IAAI,OAAO,OAAO;AAClB,iBAAO,QAAQ,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE,IAAI,CAAC,MAAM,MAAM;AAC9C,mBAAO,IAAI,KAAK,YAAY,IAAI,mBAAmB,KAAK,MAAM,IAAI,MAAM,CAAC,CAAC;AAAA,UAC9E,CAAC,CAAC,EAAE,KAAK,CAACC,YAAW;AACjB,mBAAO,YAAY,WAAW,QAAQA,OAAM;AAAA,UAChD,CAAC;AAAA,QACL;AACA,cAAM,SAAS,CAAC,GAAG,IAAI,IAAI,EAAE,IAAI,CAAC,MAAM,MAAM;AAC1C,iBAAO,IAAI,KAAK,WAAW,IAAI,mBAAmB,KAAK,MAAM,IAAI,MAAM,CAAC,CAAC;AAAA,QAC7E,CAAC;AACD,eAAO,YAAY,WAAW,QAAQ,MAAM;AAAA,MAChD;AAAA,MACA,IAAI,UAAU;AACV,eAAO,KAAK,KAAK;AAAA,MACrB;AAAA,MACA,IAAI,WAAW,SAAS;AACpB,eAAO,IAAI,UAAS;AAAA,UAChB,GAAG,KAAK;AAAA,UACR,WAAW,EAAE,OAAO,WAAW,SAAS,UAAU,SAAS,OAAO,EAAE;AAAA,QACxE,CAAC;AAAA,MACL;AAAA,MACA,IAAI,WAAW,SAAS;AACpB,eAAO,IAAI,UAAS;AAAA,UAChB,GAAG,KAAK;AAAA,UACR,WAAW,EAAE,OAAO,WAAW,SAAS,UAAU,SAAS,OAAO,EAAE;AAAA,QACxE,CAAC;AAAA,MACL;AAAA,MACA,OAAO,KAAK,SAAS;AACjB,eAAO,IAAI,UAAS;AAAA,UAChB,GAAG,KAAK;AAAA,UACR,aAAa,EAAE,OAAO,KAAK,SAAS,UAAU,SAAS,OAAO,EAAE;AAAA,QACpE,CAAC;AAAA,MACL;AAAA,MACA,SAAS,SAAS;AACd,eAAO,KAAK,IAAI,GAAG,OAAO;AAAA,MAC9B;AAAA,IACJ;AACA,aAAS,SAAS,CAAC,QAAQ,WAAW;AAClC,aAAO,IAAI,SAAS;AAAA,QAChB,MAAM;AAAA,QACN,WAAW;AAAA,QACX,WAAW;AAAA,QACX,aAAa;AAAA,QACb,UAAU,sBAAsB;AAAA,QAChC,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AAgCO,IAAM,YAAN,MAAM,mBAAkB,QAAQ;AAAA,MACnC,cAAc;AACV,cAAM,GAAG,SAAS;AAClB,aAAK,UAAU;AAKf,aAAK,YAAY,KAAK;AAqCtB,aAAK,UAAU,KAAK;AAAA,MACxB;AAAA,MACA,aAAa;AACT,YAAI,KAAK,YAAY;AACjB,iBAAO,KAAK;AAChB,cAAM,QAAQ,KAAK,KAAK,MAAM;AAC9B,cAAM,OAAO,KAAK,WAAW,KAAK;AAClC,aAAK,UAAU,EAAE,OAAO,KAAK;AAC7B,eAAO,KAAK;AAAA,MAChB;AAAA,MACA,OAAO,OAAO;AACV,cAAM,aAAa,KAAK,SAAS,KAAK;AACtC,YAAI,eAAe,cAAc,QAAQ;AACrC,gBAAMD,OAAM,KAAK,gBAAgB,KAAK;AACtC,4BAAkBA,MAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,UAAU,cAAc;AAAA,YACxB,UAAUA,KAAI;AAAA,UAClB,CAAC;AACD,iBAAO;AAAA,QACX;AACA,cAAM,EAAE,QAAQ,IAAI,IAAI,KAAK,oBAAoB,KAAK;AACtD,cAAM,EAAE,OAAO,MAAM,UAAU,IAAI,KAAK,WAAW;AACnD,cAAM,YAAY,CAAC;AACnB,YAAI,EAAE,KAAK,KAAK,oBAAoB,YAAY,KAAK,KAAK,gBAAgB,UAAU;AAChF,qBAAW,OAAO,IAAI,MAAM;AACxB,gBAAI,CAAC,UAAU,SAAS,GAAG,GAAG;AAC1B,wBAAU,KAAK,GAAG;AAAA,YACtB;AAAA,UACJ;AAAA,QACJ;AACA,cAAM,QAAQ,CAAC;AACf,mBAAW,OAAO,WAAW;AACzB,gBAAM,eAAe,MAAM,GAAG;AAC9B,gBAAM,QAAQ,IAAI,KAAK,GAAG;AAC1B,gBAAM,KAAK;AAAA,YACP,KAAK,EAAE,QAAQ,SAAS,OAAO,IAAI;AAAA,YACnC,OAAO,aAAa,OAAO,IAAI,mBAAmB,KAAK,OAAO,IAAI,MAAM,GAAG,CAAC;AAAA,YAC5E,WAAW,OAAO,IAAI;AAAA,UAC1B,CAAC;AAAA,QACL;AACA,YAAI,KAAK,KAAK,oBAAoB,UAAU;AACxC,gBAAM,cAAc,KAAK,KAAK;AAC9B,cAAI,gBAAgB,eAAe;AAC/B,uBAAW,OAAO,WAAW;AACzB,oBAAM,KAAK;AAAA,gBACP,KAAK,EAAE,QAAQ,SAAS,OAAO,IAAI;AAAA,gBACnC,OAAO,EAAE,QAAQ,SAAS,OAAO,IAAI,KAAK,GAAG,EAAE;AAAA,cACnD,CAAC;AAAA,YACL;AAAA,UACJ,WACS,gBAAgB,UAAU;AAC/B,gBAAI,UAAU,SAAS,GAAG;AACtB,gCAAkB,KAAK;AAAA,gBACnB,MAAM,aAAa;AAAA,gBACnB,MAAM;AAAA,cACV,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,gBAAgB,SAAS;AAAA,UAClC,OACK;AACD,kBAAM,IAAI,MAAM,sDAAsD;AAAA,UAC1E;AAAA,QACJ,OACK;AAED,gBAAM,WAAW,KAAK,KAAK;AAC3B,qBAAW,OAAO,WAAW;AACzB,kBAAM,QAAQ,IAAI,KAAK,GAAG;AAC1B,kBAAM,KAAK;AAAA,cACP,KAAK,EAAE,QAAQ,SAAS,OAAO,IAAI;AAAA,cACnC,OAAO,SAAS;AAAA,gBAAO,IAAI,mBAAmB,KAAK,OAAO,IAAI,MAAM,GAAG;AAAA;AAAA,cACvE;AAAA,cACA,WAAW,OAAO,IAAI;AAAA,YAC1B,CAAC;AAAA,UACL;AAAA,QACJ;AACA,YAAI,IAAI,OAAO,OAAO;AAClB,iBAAO,QAAQ,QAAQ,EAClB,KAAK,YAAY;AAClB,kBAAM,YAAY,CAAC;AACnB,uBAAW,QAAQ,OAAO;AACtB,oBAAM,MAAM,MAAM,KAAK;AACvB,oBAAM,QAAQ,MAAM,KAAK;AACzB,wBAAU,KAAK;AAAA,gBACX;AAAA,gBACA;AAAA,gBACA,WAAW,KAAK;AAAA,cACpB,CAAC;AAAA,YACL;AACA,mBAAO;AAAA,UACX,CAAC,EACI,KAAK,CAAC,cAAc;AACrB,mBAAO,YAAY,gBAAgB,QAAQ,SAAS;AAAA,UACxD,CAAC;AAAA,QACL,OACK;AACD,iBAAO,YAAY,gBAAgB,QAAQ,KAAK;AAAA,QACpD;AAAA,MACJ;AAAA,MACA,IAAI,QAAQ;AACR,eAAO,KAAK,KAAK,MAAM;AAAA,MAC3B;AAAA,MACA,OAAO,SAAS;AACZ,kBAAU;AACV,eAAO,IAAI,WAAU;AAAA,UACjB,GAAG,KAAK;AAAA,UACR,aAAa;AAAA,UACb,GAAI,YAAY,SACV;AAAA,YACE,UAAU,CAAC,OAAO,QAAQ;AACtB,oBAAM,eAAe,KAAK,KAAK,WAAW,OAAO,GAAG,EAAE,WAAW,IAAI;AACrE,kBAAI,MAAM,SAAS;AACf,uBAAO;AAAA,kBACH,SAAS,UAAU,SAAS,OAAO,EAAE,WAAW;AAAA,gBACpD;AACJ,qBAAO;AAAA,gBACH,SAAS;AAAA,cACb;AAAA,YACJ;AAAA,UACJ,IACE,CAAC;AAAA,QACX,CAAC;AAAA,MACL;AAAA,MACA,QAAQ;AACJ,eAAO,IAAI,WAAU;AAAA,UACjB,GAAG,KAAK;AAAA,UACR,aAAa;AAAA,QACjB,CAAC;AAAA,MACL;AAAA,MACA,cAAc;AACV,eAAO,IAAI,WAAU;AAAA,UACjB,GAAG,KAAK;AAAA,UACR,aAAa;AAAA,QACjB,CAAC;AAAA,MACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAkBA,OAAO,cAAc;AACjB,eAAO,IAAI,WAAU;AAAA,UACjB,GAAG,KAAK;AAAA,UACR,OAAO,OAAO;AAAA,YACV,GAAG,KAAK,KAAK,MAAM;AAAA,YACnB,GAAG;AAAA,UACP;AAAA,QACJ,CAAC;AAAA,MACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,MAAM,SAAS;AACX,cAAM,SAAS,IAAI,WAAU;AAAA,UACzB,aAAa,QAAQ,KAAK;AAAA,UAC1B,UAAU,QAAQ,KAAK;AAAA,UACvB,OAAO,OAAO;AAAA,YACV,GAAG,KAAK,KAAK,MAAM;AAAA,YACnB,GAAG,QAAQ,KAAK,MAAM;AAAA,UAC1B;AAAA,UACA,UAAU,sBAAsB;AAAA,QACpC,CAAC;AACD,eAAO;AAAA,MACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAoCA,OAAO,KAAK,QAAQ;AAChB,eAAO,KAAK,QAAQ,EAAE,CAAC,GAAG,GAAG,OAAO,CAAC;AAAA,MACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAsBA,SAAS,OAAO;AACZ,eAAO,IAAI,WAAU;AAAA,UACjB,GAAG,KAAK;AAAA,UACR,UAAU;AAAA,QACd,CAAC;AAAA,MACL;AAAA,MACA,KAAK,MAAM;AACP,cAAM,QAAQ,CAAC;AACf,mBAAW,OAAO,KAAK,WAAW,IAAI,GAAG;AACrC,cAAI,KAAK,GAAG,KAAK,KAAK,MAAM,GAAG,GAAG;AAC9B,kBAAM,GAAG,IAAI,KAAK,MAAM,GAAG;AAAA,UAC/B;AAAA,QACJ;AACA,eAAO,IAAI,WAAU;AAAA,UACjB,GAAG,KAAK;AAAA,UACR,OAAO,MAAM;AAAA,QACjB,CAAC;AAAA,MACL;AAAA,MACA,KAAK,MAAM;AACP,cAAM,QAAQ,CAAC;AACf,mBAAW,OAAO,KAAK,WAAW,KAAK,KAAK,GAAG;AAC3C,cAAI,CAAC,KAAK,GAAG,GAAG;AACZ,kBAAM,GAAG,IAAI,KAAK,MAAM,GAAG;AAAA,UAC/B;AAAA,QACJ;AACA,eAAO,IAAI,WAAU;AAAA,UACjB,GAAG,KAAK;AAAA,UACR,OAAO,MAAM;AAAA,QACjB,CAAC;AAAA,MACL;AAAA;AAAA;AAAA;AAAA,MAIA,cAAc;AACV,eAAO,eAAe,IAAI;AAAA,MAC9B;AAAA,MACA,QAAQ,MAAM;AACV,cAAM,WAAW,CAAC;AAClB,mBAAW,OAAO,KAAK,WAAW,KAAK,KAAK,GAAG;AAC3C,gBAAM,cAAc,KAAK,MAAM,GAAG;AAClC,cAAI,QAAQ,CAAC,KAAK,GAAG,GAAG;AACpB,qBAAS,GAAG,IAAI;AAAA,UACpB,OACK;AACD,qBAAS,GAAG,IAAI,YAAY,SAAS;AAAA,UACzC;AAAA,QACJ;AACA,eAAO,IAAI,WAAU;AAAA,UACjB,GAAG,KAAK;AAAA,UACR,OAAO,MAAM;AAAA,QACjB,CAAC;AAAA,MACL;AAAA,MACA,SAAS,MAAM;AACX,cAAM,WAAW,CAAC;AAClB,mBAAW,OAAO,KAAK,WAAW,KAAK,KAAK,GAAG;AAC3C,cAAI,QAAQ,CAAC,KAAK,GAAG,GAAG;AACpB,qBAAS,GAAG,IAAI,KAAK,MAAM,GAAG;AAAA,UAClC,OACK;AACD,kBAAM,cAAc,KAAK,MAAM,GAAG;AAClC,gBAAI,WAAW;AACf,mBAAO,oBAAoB,aAAa;AACpC,yBAAW,SAAS,KAAK;AAAA,YAC7B;AACA,qBAAS,GAAG,IAAI;AAAA,UACpB;AAAA,QACJ;AACA,eAAO,IAAI,WAAU;AAAA,UACjB,GAAG,KAAK;AAAA,UACR,OAAO,MAAM;AAAA,QACjB,CAAC;AAAA,MACL;AAAA,MACA,QAAQ;AACJ,eAAO,cAAc,KAAK,WAAW,KAAK,KAAK,CAAC;AAAA,MACpD;AAAA,IACJ;AACA,cAAU,SAAS,CAAC,OAAO,WAAW;AAClC,aAAO,IAAI,UAAU;AAAA,QACjB,OAAO,MAAM;AAAA,QACb,aAAa;AAAA,QACb,UAAU,SAAS,OAAO;AAAA,QAC1B,UAAU,sBAAsB;AAAA,QAChC,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AACA,cAAU,eAAe,CAAC,OAAO,WAAW;AACxC,aAAO,IAAI,UAAU;AAAA,QACjB,OAAO,MAAM;AAAA,QACb,aAAa;AAAA,QACb,UAAU,SAAS,OAAO;AAAA,QAC1B,UAAU,sBAAsB;AAAA,QAChC,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AACA,cAAU,aAAa,CAAC,OAAO,WAAW;AACtC,aAAO,IAAI,UAAU;AAAA,QACjB;AAAA,QACA,aAAa;AAAA,QACb,UAAU,SAAS,OAAO;AAAA,QAC1B,UAAU,sBAAsB;AAAA,QAChC,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AACO,IAAM,WAAN,cAAuB,QAAQ;AAAA,MAClC,OAAO,OAAO;AACV,cAAM,EAAE,IAAI,IAAI,KAAK,oBAAoB,KAAK;AAC9C,cAAM,UAAU,KAAK,KAAK;AAC1B,iBAAS,cAAc,SAAS;AAE5B,qBAAW,UAAU,SAAS;AAC1B,gBAAI,OAAO,OAAO,WAAW,SAAS;AAClC,qBAAO,OAAO;AAAA,YAClB;AAAA,UACJ;AACA,qBAAW,UAAU,SAAS;AAC1B,gBAAI,OAAO,OAAO,WAAW,SAAS;AAElC,kBAAI,OAAO,OAAO,KAAK,GAAG,OAAO,IAAI,OAAO,MAAM;AAClD,qBAAO,OAAO;AAAA,YAClB;AAAA,UACJ;AAEA,gBAAM,cAAc,QAAQ,IAAI,CAAC,WAAW,IAAI,SAAS,OAAO,IAAI,OAAO,MAAM,CAAC;AAClF,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB;AAAA,UACJ,CAAC;AACD,iBAAO;AAAA,QACX;AACA,YAAI,IAAI,OAAO,OAAO;AAClB,iBAAO,QAAQ,IAAI,QAAQ,IAAI,OAAO,WAAW;AAC7C,kBAAM,WAAW;AAAA,cACb,GAAG;AAAA,cACH,QAAQ;AAAA,gBACJ,GAAG,IAAI;AAAA,gBACP,QAAQ,CAAC;AAAA,cACb;AAAA,cACA,QAAQ;AAAA,YACZ;AACA,mBAAO;AAAA,cACH,QAAQ,MAAM,OAAO,YAAY;AAAA,gBAC7B,MAAM,IAAI;AAAA,gBACV,MAAM,IAAI;AAAA,gBACV,QAAQ;AAAA,cACZ,CAAC;AAAA,cACD,KAAK;AAAA,YACT;AAAA,UACJ,CAAC,CAAC,EAAE,KAAK,aAAa;AAAA,QAC1B,OACK;AACD,cAAI,QAAQ;AACZ,gBAAM,SAAS,CAAC;AAChB,qBAAW,UAAU,SAAS;AAC1B,kBAAM,WAAW;AAAA,cACb,GAAG;AAAA,cACH,QAAQ;AAAA,gBACJ,GAAG,IAAI;AAAA,gBACP,QAAQ,CAAC;AAAA,cACb;AAAA,cACA,QAAQ;AAAA,YACZ;AACA,kBAAM,SAAS,OAAO,WAAW;AAAA,cAC7B,MAAM,IAAI;AAAA,cACV,MAAM,IAAI;AAAA,cACV,QAAQ;AAAA,YACZ,CAAC;AACD,gBAAI,OAAO,WAAW,SAAS;AAC3B,qBAAO;AAAA,YACX,WACS,OAAO,WAAW,WAAW,CAAC,OAAO;AAC1C,sBAAQ,EAAE,QAAQ,KAAK,SAAS;AAAA,YACpC;AACA,gBAAI,SAAS,OAAO,OAAO,QAAQ;AAC/B,qBAAO,KAAK,SAAS,OAAO,MAAM;AAAA,YACtC;AAAA,UACJ;AACA,cAAI,OAAO;AACP,gBAAI,OAAO,OAAO,KAAK,GAAG,MAAM,IAAI,OAAO,MAAM;AACjD,mBAAO,MAAM;AAAA,UACjB;AACA,gBAAM,cAAc,OAAO,IAAI,CAACE,YAAW,IAAI,SAASA,OAAM,CAAC;AAC/D,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB;AAAA,UACJ,CAAC;AACD,iBAAO;AAAA,QACX;AAAA,MACJ;AAAA,MACA,IAAI,UAAU;AACV,eAAO,KAAK,KAAK;AAAA,MACrB;AAAA,IACJ;AACA,aAAS,SAAS,CAAC,OAAO,WAAW;AACjC,aAAO,IAAI,SAAS;AAAA,QAChB,SAAS;AAAA,QACT,UAAU,sBAAsB;AAAA,QAChC,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AAQA,IAAM,mBAAmB,CAAC,SAAS;AAC/B,UAAI,gBAAgB,SAAS;AACzB,eAAO,iBAAiB,KAAK,MAAM;AAAA,MACvC,WACS,gBAAgB,YAAY;AACjC,eAAO,iBAAiB,KAAK,UAAU,CAAC;AAAA,MAC5C,WACS,gBAAgB,YAAY;AACjC,eAAO,CAAC,KAAK,KAAK;AAAA,MACtB,WACS,gBAAgB,SAAS;AAC9B,eAAO,KAAK;AAAA,MAChB,WACS,gBAAgB,eAAe;AAEpC,eAAO,KAAK,aAAa,KAAK,IAAI;AAAA,MACtC,WACS,gBAAgB,YAAY;AACjC,eAAO,iBAAiB,KAAK,KAAK,SAAS;AAAA,MAC/C,WACS,gBAAgB,cAAc;AACnC,eAAO,CAAC,MAAS;AAAA,MACrB,WACS,gBAAgB,SAAS;AAC9B,eAAO,CAAC,IAAI;AAAA,MAChB,WACS,gBAAgB,aAAa;AAClC,eAAO,CAAC,QAAW,GAAG,iBAAiB,KAAK,OAAO,CAAC,CAAC;AAAA,MACzD,WACS,gBAAgB,aAAa;AAClC,eAAO,CAAC,MAAM,GAAG,iBAAiB,KAAK,OAAO,CAAC,CAAC;AAAA,MACpD,WACS,gBAAgB,YAAY;AACjC,eAAO,iBAAiB,KAAK,OAAO,CAAC;AAAA,MACzC,WACS,gBAAgB,aAAa;AAClC,eAAO,iBAAiB,KAAK,OAAO,CAAC;AAAA,MACzC,WACS,gBAAgB,UAAU;AAC/B,eAAO,iBAAiB,KAAK,KAAK,SAAS;AAAA,MAC/C,OACK;AACD,eAAO,CAAC;AAAA,MACZ;AAAA,IACJ;AACO,IAAM,wBAAN,MAAM,+BAA8B,QAAQ;AAAA,MAC/C,OAAO,OAAO;AACV,cAAM,EAAE,IAAI,IAAI,KAAK,oBAAoB,KAAK;AAC9C,YAAI,IAAI,eAAe,cAAc,QAAQ;AACzC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,UAAU,cAAc;AAAA,YACxB,UAAU,IAAI;AAAA,UAClB,CAAC;AACD,iBAAO;AAAA,QACX;AACA,cAAM,gBAAgB,KAAK;AAC3B,cAAM,qBAAqB,IAAI,KAAK,aAAa;AACjD,cAAM,SAAS,KAAK,WAAW,IAAI,kBAAkB;AACrD,YAAI,CAAC,QAAQ;AACT,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,SAAS,MAAM,KAAK,KAAK,WAAW,KAAK,CAAC;AAAA,YAC1C,MAAM,CAAC,aAAa;AAAA,UACxB,CAAC;AACD,iBAAO;AAAA,QACX;AACA,YAAI,IAAI,OAAO,OAAO;AAClB,iBAAO,OAAO,YAAY;AAAA,YACtB,MAAM,IAAI;AAAA,YACV,MAAM,IAAI;AAAA,YACV,QAAQ;AAAA,UACZ,CAAC;AAAA,QACL,OACK;AACD,iBAAO,OAAO,WAAW;AAAA,YACrB,MAAM,IAAI;AAAA,YACV,MAAM,IAAI;AAAA,YACV,QAAQ;AAAA,UACZ,CAAC;AAAA,QACL;AAAA,MACJ;AAAA,MACA,IAAI,gBAAgB;AAChB,eAAO,KAAK,KAAK;AAAA,MACrB;AAAA,MACA,IAAI,UAAU;AACV,eAAO,KAAK,KAAK;AAAA,MACrB;AAAA,MACA,IAAI,aAAa;AACb,eAAO,KAAK,KAAK;AAAA,MACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,OAAO,OAAO,eAAe,SAAS,QAAQ;AAE1C,cAAM,aAAa,oBAAI,IAAI;AAE3B,mBAAW,QAAQ,SAAS;AACxB,gBAAM,sBAAsB,iBAAiB,KAAK,MAAM,aAAa,CAAC;AACtE,cAAI,CAAC,oBAAoB,QAAQ;AAC7B,kBAAM,IAAI,MAAM,mCAAmC,aAAa,mDAAmD;AAAA,UACvH;AACA,qBAAW,SAAS,qBAAqB;AACrC,gBAAI,WAAW,IAAI,KAAK,GAAG;AACvB,oBAAM,IAAI,MAAM,0BAA0B,OAAO,aAAa,CAAC,wBAAwB,OAAO,KAAK,CAAC,EAAE;AAAA,YAC1G;AACA,uBAAW,IAAI,OAAO,IAAI;AAAA,UAC9B;AAAA,QACJ;AACA,eAAO,IAAI,uBAAsB;AAAA,UAC7B,UAAU,sBAAsB;AAAA,UAChC;AAAA,UACA;AAAA,UACA;AAAA,UACA,GAAG,oBAAoB,MAAM;AAAA,QACjC,CAAC;AAAA,MACL;AAAA,IACJ;AA2CO,IAAM,kBAAN,cAA8B,QAAQ;AAAA,MACzC,OAAO,OAAO;AACV,cAAM,EAAE,QAAQ,IAAI,IAAI,KAAK,oBAAoB,KAAK;AACtD,cAAM,eAAe,CAAC,YAAY,gBAAgB;AAC9C,cAAI,UAAU,UAAU,KAAK,UAAU,WAAW,GAAG;AACjD,mBAAO;AAAA,UACX;AACA,gBAAM,SAAS,YAAY,WAAW,OAAO,YAAY,KAAK;AAC9D,cAAI,CAAC,OAAO,OAAO;AACf,8BAAkB,KAAK;AAAA,cACnB,MAAM,aAAa;AAAA,YACvB,CAAC;AACD,mBAAO;AAAA,UACX;AACA,cAAI,QAAQ,UAAU,KAAK,QAAQ,WAAW,GAAG;AAC7C,mBAAO,MAAM;AAAA,UACjB;AACA,iBAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,OAAO,KAAK;AAAA,QACtD;AACA,YAAI,IAAI,OAAO,OAAO;AAClB,iBAAO,QAAQ,IAAI;AAAA,YACf,KAAK,KAAK,KAAK,YAAY;AAAA,cACvB,MAAM,IAAI;AAAA,cACV,MAAM,IAAI;AAAA,cACV,QAAQ;AAAA,YACZ,CAAC;AAAA,YACD,KAAK,KAAK,MAAM,YAAY;AAAA,cACxB,MAAM,IAAI;AAAA,cACV,MAAM,IAAI;AAAA,cACV,QAAQ;AAAA,YACZ,CAAC;AAAA,UACL,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,KAAK,MAAM,aAAa,MAAM,KAAK,CAAC;AAAA,QACxD,OACK;AACD,iBAAO,aAAa,KAAK,KAAK,KAAK,WAAW;AAAA,YAC1C,MAAM,IAAI;AAAA,YACV,MAAM,IAAI;AAAA,YACV,QAAQ;AAAA,UACZ,CAAC,GAAG,KAAK,KAAK,MAAM,WAAW;AAAA,YAC3B,MAAM,IAAI;AAAA,YACV,MAAM,IAAI;AAAA,YACV,QAAQ;AAAA,UACZ,CAAC,CAAC;AAAA,QACN;AAAA,MACJ;AAAA,IACJ;AACA,oBAAgB,SAAS,CAAC,MAAM,OAAO,WAAW;AAC9C,aAAO,IAAI,gBAAgB;AAAA,QACvB;AAAA,QACA;AAAA,QACA,UAAU,sBAAsB;AAAA,QAChC,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AAEO,IAAM,WAAN,MAAM,kBAAiB,QAAQ;AAAA,MAClC,OAAO,OAAO;AACV,cAAM,EAAE,QAAQ,IAAI,IAAI,KAAK,oBAAoB,KAAK;AACtD,YAAI,IAAI,eAAe,cAAc,OAAO;AACxC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,UAAU,cAAc;AAAA,YACxB,UAAU,IAAI;AAAA,UAClB,CAAC;AACD,iBAAO;AAAA,QACX;AACA,YAAI,IAAI,KAAK,SAAS,KAAK,KAAK,MAAM,QAAQ;AAC1C,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,SAAS,KAAK,KAAK,MAAM;AAAA,YACzB,WAAW;AAAA,YACX,OAAO;AAAA,YACP,MAAM;AAAA,UACV,CAAC;AACD,iBAAO;AAAA,QACX;AACA,cAAM,OAAO,KAAK,KAAK;AACvB,YAAI,CAAC,QAAQ,IAAI,KAAK,SAAS,KAAK,KAAK,MAAM,QAAQ;AACnD,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,SAAS,KAAK,KAAK,MAAM;AAAA,YACzB,WAAW;AAAA,YACX,OAAO;AAAA,YACP,MAAM;AAAA,UACV,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AACA,cAAM,QAAQ,CAAC,GAAG,IAAI,IAAI,EACrB,IAAI,CAAC,MAAM,cAAc;AAC1B,gBAAM,SAAS,KAAK,KAAK,MAAM,SAAS,KAAK,KAAK,KAAK;AACvD,cAAI,CAAC;AACD,mBAAO;AACX,iBAAO,OAAO,OAAO,IAAI,mBAAmB,KAAK,MAAM,IAAI,MAAM,SAAS,CAAC;AAAA,QAC/E,CAAC,EACI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AACtB,YAAI,IAAI,OAAO,OAAO;AAClB,iBAAO,QAAQ,IAAI,KAAK,EAAE,KAAK,CAAC,YAAY;AACxC,mBAAO,YAAY,WAAW,QAAQ,OAAO;AAAA,UACjD,CAAC;AAAA,QACL,OACK;AACD,iBAAO,YAAY,WAAW,QAAQ,KAAK;AAAA,QAC/C;AAAA,MACJ;AAAA,MACA,IAAI,QAAQ;AACR,eAAO,KAAK,KAAK;AAAA,MACrB;AAAA,MACA,KAAK,MAAM;AACP,eAAO,IAAI,UAAS;AAAA,UAChB,GAAG,KAAK;AAAA,UACR;AAAA,QACJ,CAAC;AAAA,MACL;AAAA,IACJ;AACA,aAAS,SAAS,CAAC,SAAS,WAAW;AACnC,UAAI,CAAC,MAAM,QAAQ,OAAO,GAAG;AACzB,cAAM,IAAI,MAAM,uDAAuD;AAAA,MAC3E;AACA,aAAO,IAAI,SAAS;AAAA,QAChB,OAAO;AAAA,QACP,UAAU,sBAAsB;AAAA,QAChC,MAAM;AAAA,QACN,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AACO,IAAM,YAAN,MAAM,mBAAkB,QAAQ;AAAA,MACnC,IAAI,YAAY;AACZ,eAAO,KAAK,KAAK;AAAA,MACrB;AAAA,MACA,IAAI,cAAc;AACd,eAAO,KAAK,KAAK;AAAA,MACrB;AAAA,MACA,OAAO,OAAO;AACV,cAAM,EAAE,QAAQ,IAAI,IAAI,KAAK,oBAAoB,KAAK;AACtD,YAAI,IAAI,eAAe,cAAc,QAAQ;AACzC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,UAAU,cAAc;AAAA,YACxB,UAAU,IAAI;AAAA,UAClB,CAAC;AACD,iBAAO;AAAA,QACX;AACA,cAAM,QAAQ,CAAC;AACf,cAAM,UAAU,KAAK,KAAK;AAC1B,cAAM,YAAY,KAAK,KAAK;AAC5B,mBAAW,OAAO,IAAI,MAAM;AACxB,gBAAM,KAAK;AAAA,YACP,KAAK,QAAQ,OAAO,IAAI,mBAAmB,KAAK,KAAK,IAAI,MAAM,GAAG,CAAC;AAAA,YACnE,OAAO,UAAU,OAAO,IAAI,mBAAmB,KAAK,IAAI,KAAK,GAAG,GAAG,IAAI,MAAM,GAAG,CAAC;AAAA,YACjF,WAAW,OAAO,IAAI;AAAA,UAC1B,CAAC;AAAA,QACL;AACA,YAAI,IAAI,OAAO,OAAO;AAClB,iBAAO,YAAY,iBAAiB,QAAQ,KAAK;AAAA,QACrD,OACK;AACD,iBAAO,YAAY,gBAAgB,QAAQ,KAAK;AAAA,QACpD;AAAA,MACJ;AAAA,MACA,IAAI,UAAU;AACV,eAAO,KAAK,KAAK;AAAA,MACrB;AAAA,MACA,OAAO,OAAO,OAAO,QAAQ,OAAO;AAChC,YAAI,kBAAkB,SAAS;AAC3B,iBAAO,IAAI,WAAU;AAAA,YACjB,SAAS;AAAA,YACT,WAAW;AAAA,YACX,UAAU,sBAAsB;AAAA,YAChC,GAAG,oBAAoB,KAAK;AAAA,UAChC,CAAC;AAAA,QACL;AACA,eAAO,IAAI,WAAU;AAAA,UACjB,SAAS,UAAU,OAAO;AAAA,UAC1B,WAAW;AAAA,UACX,UAAU,sBAAsB;AAAA,UAChC,GAAG,oBAAoB,MAAM;AAAA,QACjC,CAAC;AAAA,MACL;AAAA,IACJ;AACO,IAAM,SAAN,cAAqB,QAAQ;AAAA,MAChC,IAAI,YAAY;AACZ,eAAO,KAAK,KAAK;AAAA,MACrB;AAAA,MACA,IAAI,cAAc;AACd,eAAO,KAAK,KAAK;AAAA,MACrB;AAAA,MACA,OAAO,OAAO;AACV,cAAM,EAAE,QAAQ,IAAI,IAAI,KAAK,oBAAoB,KAAK;AACtD,YAAI,IAAI,eAAe,cAAc,KAAK;AACtC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,UAAU,cAAc;AAAA,YACxB,UAAU,IAAI;AAAA,UAClB,CAAC;AACD,iBAAO;AAAA,QACX;AACA,cAAM,UAAU,KAAK,KAAK;AAC1B,cAAM,YAAY,KAAK,KAAK;AAC5B,cAAM,QAAQ,CAAC,GAAG,IAAI,KAAK,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,GAAG,UAAU;AAC/D,iBAAO;AAAA,YACH,KAAK,QAAQ,OAAO,IAAI,mBAAmB,KAAK,KAAK,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC,CAAC;AAAA,YAC9E,OAAO,UAAU,OAAO,IAAI,mBAAmB,KAAK,OAAO,IAAI,MAAM,CAAC,OAAO,OAAO,CAAC,CAAC;AAAA,UAC1F;AAAA,QACJ,CAAC;AACD,YAAI,IAAI,OAAO,OAAO;AAClB,gBAAM,WAAW,oBAAI,IAAI;AACzB,iBAAO,QAAQ,QAAQ,EAAE,KAAK,YAAY;AACtC,uBAAW,QAAQ,OAAO;AACtB,oBAAM,MAAM,MAAM,KAAK;AACvB,oBAAM,QAAQ,MAAM,KAAK;AACzB,kBAAI,IAAI,WAAW,aAAa,MAAM,WAAW,WAAW;AACxD,uBAAO;AAAA,cACX;AACA,kBAAI,IAAI,WAAW,WAAW,MAAM,WAAW,SAAS;AACpD,uBAAO,MAAM;AAAA,cACjB;AACA,uBAAS,IAAI,IAAI,OAAO,MAAM,KAAK;AAAA,YACvC;AACA,mBAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,SAAS;AAAA,UACnD,CAAC;AAAA,QACL,OACK;AACD,gBAAM,WAAW,oBAAI,IAAI;AACzB,qBAAW,QAAQ,OAAO;AACtB,kBAAM,MAAM,KAAK;AACjB,kBAAM,QAAQ,KAAK;AACnB,gBAAI,IAAI,WAAW,aAAa,MAAM,WAAW,WAAW;AACxD,qBAAO;AAAA,YACX;AACA,gBAAI,IAAI,WAAW,WAAW,MAAM,WAAW,SAAS;AACpD,qBAAO,MAAM;AAAA,YACjB;AACA,qBAAS,IAAI,IAAI,OAAO,MAAM,KAAK;AAAA,UACvC;AACA,iBAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,SAAS;AAAA,QACnD;AAAA,MACJ;AAAA,IACJ;AACA,WAAO,SAAS,CAAC,SAAS,WAAW,WAAW;AAC5C,aAAO,IAAI,OAAO;AAAA,QACd;AAAA,QACA;AAAA,QACA,UAAU,sBAAsB;AAAA,QAChC,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AACO,IAAM,SAAN,MAAM,gBAAe,QAAQ;AAAA,MAChC,OAAO,OAAO;AACV,cAAM,EAAE,QAAQ,IAAI,IAAI,KAAK,oBAAoB,KAAK;AACtD,YAAI,IAAI,eAAe,cAAc,KAAK;AACtC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,UAAU,cAAc;AAAA,YACxB,UAAU,IAAI;AAAA,UAClB,CAAC;AACD,iBAAO;AAAA,QACX;AACA,cAAM,MAAM,KAAK;AACjB,YAAI,IAAI,YAAY,MAAM;AACtB,cAAI,IAAI,KAAK,OAAO,IAAI,QAAQ,OAAO;AACnC,8BAAkB,KAAK;AAAA,cACnB,MAAM,aAAa;AAAA,cACnB,SAAS,IAAI,QAAQ;AAAA,cACrB,MAAM;AAAA,cACN,WAAW;AAAA,cACX,OAAO;AAAA,cACP,SAAS,IAAI,QAAQ;AAAA,YACzB,CAAC;AACD,mBAAO,MAAM;AAAA,UACjB;AAAA,QACJ;AACA,YAAI,IAAI,YAAY,MAAM;AACtB,cAAI,IAAI,KAAK,OAAO,IAAI,QAAQ,OAAO;AACnC,8BAAkB,KAAK;AAAA,cACnB,MAAM,aAAa;AAAA,cACnB,SAAS,IAAI,QAAQ;AAAA,cACrB,MAAM;AAAA,cACN,WAAW;AAAA,cACX,OAAO;AAAA,cACP,SAAS,IAAI,QAAQ;AAAA,YACzB,CAAC;AACD,mBAAO,MAAM;AAAA,UACjB;AAAA,QACJ;AACA,cAAM,YAAY,KAAK,KAAK;AAC5B,iBAAS,YAAYC,WAAU;AAC3B,gBAAM,YAAY,oBAAI,IAAI;AAC1B,qBAAW,WAAWA,WAAU;AAC5B,gBAAI,QAAQ,WAAW;AACnB,qBAAO;AACX,gBAAI,QAAQ,WAAW;AACnB,qBAAO,MAAM;AACjB,sBAAU,IAAI,QAAQ,KAAK;AAAA,UAC/B;AACA,iBAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,UAAU;AAAA,QACpD;AACA,cAAM,WAAW,CAAC,GAAG,IAAI,KAAK,OAAO,CAAC,EAAE,IAAI,CAAC,MAAM,MAAM,UAAU,OAAO,IAAI,mBAAmB,KAAK,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC;AACzH,YAAI,IAAI,OAAO,OAAO;AAClB,iBAAO,QAAQ,IAAI,QAAQ,EAAE,KAAK,CAACA,cAAa,YAAYA,SAAQ,CAAC;AAAA,QACzE,OACK;AACD,iBAAO,YAAY,QAAQ;AAAA,QAC/B;AAAA,MACJ;AAAA,MACA,IAAI,SAAS,SAAS;AAClB,eAAO,IAAI,QAAO;AAAA,UACd,GAAG,KAAK;AAAA,UACR,SAAS,EAAE,OAAO,SAAS,SAAS,UAAU,SAAS,OAAO,EAAE;AAAA,QACpE,CAAC;AAAA,MACL;AAAA,MACA,IAAI,SAAS,SAAS;AAClB,eAAO,IAAI,QAAO;AAAA,UACd,GAAG,KAAK;AAAA,UACR,SAAS,EAAE,OAAO,SAAS,SAAS,UAAU,SAAS,OAAO,EAAE;AAAA,QACpE,CAAC;AAAA,MACL;AAAA,MACA,KAAK,MAAM,SAAS;AAChB,eAAO,KAAK,IAAI,MAAM,OAAO,EAAE,IAAI,MAAM,OAAO;AAAA,MACpD;AAAA,MACA,SAAS,SAAS;AACd,eAAO,KAAK,IAAI,GAAG,OAAO;AAAA,MAC9B;AAAA,IACJ;AACA,WAAO,SAAS,CAAC,WAAW,WAAW;AACnC,aAAO,IAAI,OAAO;AAAA,QACd;AAAA,QACA,SAAS;AAAA,QACT,SAAS;AAAA,QACT,UAAU,sBAAsB;AAAA,QAChC,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AACO,IAAM,cAAN,MAAM,qBAAoB,QAAQ;AAAA,MACrC,cAAc;AACV,cAAM,GAAG,SAAS;AAClB,aAAK,WAAW,KAAK;AAAA,MACzB;AAAA,MACA,OAAO,OAAO;AACV,cAAM,EAAE,IAAI,IAAI,KAAK,oBAAoB,KAAK;AAC9C,YAAI,IAAI,eAAe,cAAc,UAAU;AAC3C,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,UAAU,cAAc;AAAA,YACxB,UAAU,IAAI;AAAA,UAClB,CAAC;AACD,iBAAO;AAAA,QACX;AACA,iBAAS,cAAc,MAAM,OAAO;AAChC,iBAAO,UAAU;AAAA,YACb,MAAM;AAAA,YACN,MAAM,IAAI;AAAA,YACV,WAAW,CAAC,IAAI,OAAO,oBAAoB,IAAI,gBAAgB,YAAY,GAAG,UAAe,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AAAA,YAChH,WAAW;AAAA,cACP,MAAM,aAAa;AAAA,cACnB,gBAAgB;AAAA,YACpB;AAAA,UACJ,CAAC;AAAA,QACL;AACA,iBAAS,iBAAiB,SAAS,OAAO;AACtC,iBAAO,UAAU;AAAA,YACb,MAAM;AAAA,YACN,MAAM,IAAI;AAAA,YACV,WAAW,CAAC,IAAI,OAAO,oBAAoB,IAAI,gBAAgB,YAAY,GAAG,UAAe,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AAAA,YAChH,WAAW;AAAA,cACP,MAAM,aAAa;AAAA,cACnB,iBAAiB;AAAA,YACrB;AAAA,UACJ,CAAC;AAAA,QACL;AACA,cAAM,SAAS,EAAE,UAAU,IAAI,OAAO,mBAAmB;AACzD,cAAM,KAAK,IAAI;AACf,YAAI,KAAK,KAAK,mBAAmB,YAAY;AAIzC,gBAAM,KAAK;AACX,iBAAO,GAAG,kBAAmB,MAAM;AAC/B,kBAAM,QAAQ,IAAI,SAAS,CAAC,CAAC;AAC7B,kBAAM,aAAa,MAAM,GAAG,KAAK,KAAK,WAAW,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM;AACxE,oBAAM,SAAS,cAAc,MAAM,CAAC,CAAC;AACrC,oBAAM;AAAA,YACV,CAAC;AACD,kBAAM,SAAS,MAAM,QAAQ,MAAM,IAAI,MAAM,UAAU;AACvD,kBAAM,gBAAgB,MAAM,GAAG,KAAK,QAAQ,KAAK,KAC5C,WAAW,QAAQ,MAAM,EACzB,MAAM,CAAC,MAAM;AACd,oBAAM,SAAS,iBAAiB,QAAQ,CAAC,CAAC;AAC1C,oBAAM;AAAA,YACV,CAAC;AACD,mBAAO;AAAA,UACX,CAAC;AAAA,QACL,OACK;AAID,gBAAM,KAAK;AACX,iBAAO,GAAG,YAAa,MAAM;AACzB,kBAAM,aAAa,GAAG,KAAK,KAAK,UAAU,MAAM,MAAM;AACtD,gBAAI,CAAC,WAAW,SAAS;AACrB,oBAAM,IAAI,SAAS,CAAC,cAAc,MAAM,WAAW,KAAK,CAAC,CAAC;AAAA,YAC9D;AACA,kBAAM,SAAS,QAAQ,MAAM,IAAI,MAAM,WAAW,IAAI;AACtD,kBAAM,gBAAgB,GAAG,KAAK,QAAQ,UAAU,QAAQ,MAAM;AAC9D,gBAAI,CAAC,cAAc,SAAS;AACxB,oBAAM,IAAI,SAAS,CAAC,iBAAiB,QAAQ,cAAc,KAAK,CAAC,CAAC;AAAA,YACtE;AACA,mBAAO,cAAc;AAAA,UACzB,CAAC;AAAA,QACL;AAAA,MACJ;AAAA,MACA,aAAa;AACT,eAAO,KAAK,KAAK;AAAA,MACrB;AAAA,MACA,aAAa;AACT,eAAO,KAAK,KAAK;AAAA,MACrB;AAAA,MACA,QAAQ,OAAO;AACX,eAAO,IAAI,aAAY;AAAA,UACnB,GAAG,KAAK;AAAA,UACR,MAAM,SAAS,OAAO,KAAK,EAAE,KAAK,WAAW,OAAO,CAAC;AAAA,QACzD,CAAC;AAAA,MACL;AAAA,MACA,QAAQ,YAAY;AAChB,eAAO,IAAI,aAAY;AAAA,UACnB,GAAG,KAAK;AAAA,UACR,SAAS;AAAA,QACb,CAAC;AAAA,MACL;AAAA,MACA,UAAU,MAAM;AACZ,cAAM,gBAAgB,KAAK,MAAM,IAAI;AACrC,eAAO;AAAA,MACX;AAAA,MACA,gBAAgB,MAAM;AAClB,cAAM,gBAAgB,KAAK,MAAM,IAAI;AACrC,eAAO;AAAA,MACX;AAAA,MACA,OAAO,OAAO,MAAM,SAAS,QAAQ;AACjC,eAAO,IAAI,aAAY;AAAA,UACnB,MAAO,OAAO,OAAO,SAAS,OAAO,CAAC,CAAC,EAAE,KAAK,WAAW,OAAO,CAAC;AAAA,UACjE,SAAS,WAAW,WAAW,OAAO;AAAA,UACtC,UAAU,sBAAsB;AAAA,UAChC,GAAG,oBAAoB,MAAM;AAAA,QACjC,CAAC;AAAA,MACL;AAAA,IACJ;AACO,IAAM,UAAN,cAAsB,QAAQ;AAAA,MACjC,IAAI,SAAS;AACT,eAAO,KAAK,KAAK,OAAO;AAAA,MAC5B;AAAA,MACA,OAAO,OAAO;AACV,cAAM,EAAE,IAAI,IAAI,KAAK,oBAAoB,KAAK;AAC9C,cAAM,aAAa,KAAK,KAAK,OAAO;AACpC,eAAO,WAAW,OAAO,EAAE,MAAM,IAAI,MAAM,MAAM,IAAI,MAAM,QAAQ,IAAI,CAAC;AAAA,MAC5E;AAAA,IACJ;AACA,YAAQ,SAAS,CAAC,QAAQ,WAAW;AACjC,aAAO,IAAI,QAAQ;AAAA,QACf;AAAA,QACA,UAAU,sBAAsB;AAAA,QAChC,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AACO,IAAM,aAAN,cAAyB,QAAQ;AAAA,MACpC,OAAO,OAAO;AACV,YAAI,MAAM,SAAS,KAAK,KAAK,OAAO;AAChC,gBAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,4BAAkB,KAAK;AAAA,YACnB,UAAU,IAAI;AAAA,YACd,MAAM,aAAa;AAAA,YACnB,UAAU,KAAK,KAAK;AAAA,UACxB,CAAC;AACD,iBAAO;AAAA,QACX;AACA,eAAO,EAAE,QAAQ,SAAS,OAAO,MAAM,KAAK;AAAA,MAChD;AAAA,MACA,IAAI,QAAQ;AACR,eAAO,KAAK,KAAK;AAAA,MACrB;AAAA,IACJ;AACA,eAAW,SAAS,CAAC,OAAO,WAAW;AACnC,aAAO,IAAI,WAAW;AAAA,QAClB;AAAA,QACA,UAAU,sBAAsB;AAAA,QAChC,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AAQO,IAAM,UAAN,MAAM,iBAAgB,QAAQ;AAAA,MACjC,OAAO,OAAO;AACV,YAAI,OAAO,MAAM,SAAS,UAAU;AAChC,gBAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,gBAAM,iBAAiB,KAAK,KAAK;AACjC,4BAAkB,KAAK;AAAA,YACnB,UAAU,KAAK,WAAW,cAAc;AAAA,YACxC,UAAU,IAAI;AAAA,YACd,MAAM,aAAa;AAAA,UACvB,CAAC;AACD,iBAAO;AAAA,QACX;AACA,YAAI,CAAC,KAAK,QAAQ;AACd,eAAK,SAAS,IAAI,IAAI,KAAK,KAAK,MAAM;AAAA,QAC1C;AACA,YAAI,CAAC,KAAK,OAAO,IAAI,MAAM,IAAI,GAAG;AAC9B,gBAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,gBAAM,iBAAiB,KAAK,KAAK;AACjC,4BAAkB,KAAK;AAAA,YACnB,UAAU,IAAI;AAAA,YACd,MAAM,aAAa;AAAA,YACnB,SAAS;AAAA,UACb,CAAC;AACD,iBAAO;AAAA,QACX;AACA,eAAO,GAAG,MAAM,IAAI;AAAA,MACxB;AAAA,MACA,IAAI,UAAU;AACV,eAAO,KAAK,KAAK;AAAA,MACrB;AAAA,MACA,IAAI,OAAO;AACP,cAAM,aAAa,CAAC;AACpB,mBAAW,OAAO,KAAK,KAAK,QAAQ;AAChC,qBAAW,GAAG,IAAI;AAAA,QACtB;AACA,eAAO;AAAA,MACX;AAAA,MACA,IAAI,SAAS;AACT,cAAM,aAAa,CAAC;AACpB,mBAAW,OAAO,KAAK,KAAK,QAAQ;AAChC,qBAAW,GAAG,IAAI;AAAA,QACtB;AACA,eAAO;AAAA,MACX;AAAA,MACA,IAAI,OAAO;AACP,cAAM,aAAa,CAAC;AACpB,mBAAW,OAAO,KAAK,KAAK,QAAQ;AAChC,qBAAW,GAAG,IAAI;AAAA,QACtB;AACA,eAAO;AAAA,MACX;AAAA,MACA,QAAQ,QAAQ,SAAS,KAAK,MAAM;AAChC,eAAO,SAAQ,OAAO,QAAQ;AAAA,UAC1B,GAAG,KAAK;AAAA,UACR,GAAG;AAAA,QACP,CAAC;AAAA,MACL;AAAA,MACA,QAAQ,QAAQ,SAAS,KAAK,MAAM;AAChC,eAAO,SAAQ,OAAO,KAAK,QAAQ,OAAO,CAAC,QAAQ,CAAC,OAAO,SAAS,GAAG,CAAC,GAAG;AAAA,UACvE,GAAG,KAAK;AAAA,UACR,GAAG;AAAA,QACP,CAAC;AAAA,MACL;AAAA,IACJ;AACA,YAAQ,SAAS;AACV,IAAM,gBAAN,cAA4B,QAAQ;AAAA,MACvC,OAAO,OAAO;AACV,cAAM,mBAAmB,KAAK,mBAAmB,KAAK,KAAK,MAAM;AACjE,cAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,YAAI,IAAI,eAAe,cAAc,UAAU,IAAI,eAAe,cAAc,QAAQ;AACpF,gBAAM,iBAAiB,KAAK,aAAa,gBAAgB;AACzD,4BAAkB,KAAK;AAAA,YACnB,UAAU,KAAK,WAAW,cAAc;AAAA,YACxC,UAAU,IAAI;AAAA,YACd,MAAM,aAAa;AAAA,UACvB,CAAC;AACD,iBAAO;AAAA,QACX;AACA,YAAI,CAAC,KAAK,QAAQ;AACd,eAAK,SAAS,IAAI,IAAI,KAAK,mBAAmB,KAAK,KAAK,MAAM,CAAC;AAAA,QACnE;AACA,YAAI,CAAC,KAAK,OAAO,IAAI,MAAM,IAAI,GAAG;AAC9B,gBAAM,iBAAiB,KAAK,aAAa,gBAAgB;AACzD,4BAAkB,KAAK;AAAA,YACnB,UAAU,IAAI;AAAA,YACd,MAAM,aAAa;AAAA,YACnB,SAAS;AAAA,UACb,CAAC;AACD,iBAAO;AAAA,QACX;AACA,eAAO,GAAG,MAAM,IAAI;AAAA,MACxB;AAAA,MACA,IAAI,OAAO;AACP,eAAO,KAAK,KAAK;AAAA,MACrB;AAAA,IACJ;AACA,kBAAc,SAAS,CAAC,QAAQ,WAAW;AACvC,aAAO,IAAI,cAAc;AAAA,QACrB;AAAA,QACA,UAAU,sBAAsB;AAAA,QAChC,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AACO,IAAM,aAAN,cAAyB,QAAQ;AAAA,MACpC,SAAS;AACL,eAAO,KAAK,KAAK;AAAA,MACrB;AAAA,MACA,OAAO,OAAO;AACV,cAAM,EAAE,IAAI,IAAI,KAAK,oBAAoB,KAAK;AAC9C,YAAI,IAAI,eAAe,cAAc,WAAW,IAAI,OAAO,UAAU,OAAO;AACxE,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,UAAU,cAAc;AAAA,YACxB,UAAU,IAAI;AAAA,UAClB,CAAC;AACD,iBAAO;AAAA,QACX;AACA,cAAM,cAAc,IAAI,eAAe,cAAc,UAAU,IAAI,OAAO,QAAQ,QAAQ,IAAI,IAAI;AAClG,eAAO,GAAG,YAAY,KAAK,CAAC,SAAS;AACjC,iBAAO,KAAK,KAAK,KAAK,WAAW,MAAM;AAAA,YACnC,MAAM,IAAI;AAAA,YACV,UAAU,IAAI,OAAO;AAAA,UACzB,CAAC;AAAA,QACL,CAAC,CAAC;AAAA,MACN;AAAA,IACJ;AACA,eAAW,SAAS,CAAC,QAAQ,WAAW;AACpC,aAAO,IAAI,WAAW;AAAA,QAClB,MAAM;AAAA,QACN,UAAU,sBAAsB;AAAA,QAChC,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AACO,IAAM,aAAN,cAAyB,QAAQ;AAAA,MACpC,YAAY;AACR,eAAO,KAAK,KAAK;AAAA,MACrB;AAAA,MACA,aAAa;AACT,eAAO,KAAK,KAAK,OAAO,KAAK,aAAa,sBAAsB,aAC1D,KAAK,KAAK,OAAO,WAAW,IAC5B,KAAK,KAAK;AAAA,MACpB;AAAA,MACA,OAAO,OAAO;AACV,cAAM,EAAE,QAAQ,IAAI,IAAI,KAAK,oBAAoB,KAAK;AACtD,cAAM,SAAS,KAAK,KAAK,UAAU;AACnC,cAAM,WAAW;AAAA,UACb,UAAU,CAAC,QAAQ;AACf,8BAAkB,KAAK,GAAG;AAC1B,gBAAI,IAAI,OAAO;AACX,qBAAO,MAAM;AAAA,YACjB,OACK;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ;AAAA,UACA,IAAI,OAAO;AACP,mBAAO,IAAI;AAAA,UACf;AAAA,QACJ;AACA,iBAAS,WAAW,SAAS,SAAS,KAAK,QAAQ;AACnD,YAAI,OAAO,SAAS,cAAc;AAC9B,gBAAM,YAAY,OAAO,UAAU,IAAI,MAAM,QAAQ;AACrD,cAAI,IAAI,OAAO,OAAO;AAClB,mBAAO,QAAQ,QAAQ,SAAS,EAAE,KAAK,OAAOC,eAAc;AACxD,kBAAI,OAAO,UAAU;AACjB,uBAAO;AACX,oBAAM,SAAS,MAAM,KAAK,KAAK,OAAO,YAAY;AAAA,gBAC9C,MAAMA;AAAA,gBACN,MAAM,IAAI;AAAA,gBACV,QAAQ;AAAA,cACZ,CAAC;AACD,kBAAI,OAAO,WAAW;AAClB,uBAAO;AACX,kBAAI,OAAO,WAAW;AAClB,uBAAO,MAAM,OAAO,KAAK;AAC7B,kBAAI,OAAO,UAAU;AACjB,uBAAO,MAAM,OAAO,KAAK;AAC7B,qBAAO;AAAA,YACX,CAAC;AAAA,UACL,OACK;AACD,gBAAI,OAAO,UAAU;AACjB,qBAAO;AACX,kBAAM,SAAS,KAAK,KAAK,OAAO,WAAW;AAAA,cACvC,MAAM;AAAA,cACN,MAAM,IAAI;AAAA,cACV,QAAQ;AAAA,YACZ,CAAC;AACD,gBAAI,OAAO,WAAW;AAClB,qBAAO;AACX,gBAAI,OAAO,WAAW;AAClB,qBAAO,MAAM,OAAO,KAAK;AAC7B,gBAAI,OAAO,UAAU;AACjB,qBAAO,MAAM,OAAO,KAAK;AAC7B,mBAAO;AAAA,UACX;AAAA,QACJ;AACA,YAAI,OAAO,SAAS,cAAc;AAC9B,gBAAM,oBAAoB,CAAC,QAAQ;AAC/B,kBAAM,SAAS,OAAO,WAAW,KAAK,QAAQ;AAC9C,gBAAI,IAAI,OAAO,OAAO;AAClB,qBAAO,QAAQ,QAAQ,MAAM;AAAA,YACjC;AACA,gBAAI,kBAAkB,SAAS;AAC3B,oBAAM,IAAI,MAAM,2FAA2F;AAAA,YAC/G;AACA,mBAAO;AAAA,UACX;AACA,cAAI,IAAI,OAAO,UAAU,OAAO;AAC5B,kBAAM,QAAQ,KAAK,KAAK,OAAO,WAAW;AAAA,cACtC,MAAM,IAAI;AAAA,cACV,MAAM,IAAI;AAAA,cACV,QAAQ;AAAA,YACZ,CAAC;AACD,gBAAI,MAAM,WAAW;AACjB,qBAAO;AACX,gBAAI,MAAM,WAAW;AACjB,qBAAO,MAAM;AAEjB,8BAAkB,MAAM,KAAK;AAC7B,mBAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,MAAM,MAAM;AAAA,UACtD,OACK;AACD,mBAAO,KAAK,KAAK,OAAO,YAAY,EAAE,MAAM,IAAI,MAAM,MAAM,IAAI,MAAM,QAAQ,IAAI,CAAC,EAAE,KAAK,CAAC,UAAU;AACjG,kBAAI,MAAM,WAAW;AACjB,uBAAO;AACX,kBAAI,MAAM,WAAW;AACjB,uBAAO,MAAM;AACjB,qBAAO,kBAAkB,MAAM,KAAK,EAAE,KAAK,MAAM;AAC7C,uBAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,MAAM,MAAM;AAAA,cACtD,CAAC;AAAA,YACL,CAAC;AAAA,UACL;AAAA,QACJ;AACA,YAAI,OAAO,SAAS,aAAa;AAC7B,cAAI,IAAI,OAAO,UAAU,OAAO;AAC5B,kBAAM,OAAO,KAAK,KAAK,OAAO,WAAW;AAAA,cACrC,MAAM,IAAI;AAAA,cACV,MAAM,IAAI;AAAA,cACV,QAAQ;AAAA,YACZ,CAAC;AACD,gBAAI,CAAC,QAAQ,IAAI;AACb,qBAAO;AACX,kBAAM,SAAS,OAAO,UAAU,KAAK,OAAO,QAAQ;AACpD,gBAAI,kBAAkB,SAAS;AAC3B,oBAAM,IAAI,MAAM,iGAAiG;AAAA,YACrH;AACA,mBAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,OAAO;AAAA,UACjD,OACK;AACD,mBAAO,KAAK,KAAK,OAAO,YAAY,EAAE,MAAM,IAAI,MAAM,MAAM,IAAI,MAAM,QAAQ,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS;AAChG,kBAAI,CAAC,QAAQ,IAAI;AACb,uBAAO;AACX,qBAAO,QAAQ,QAAQ,OAAO,UAAU,KAAK,OAAO,QAAQ,CAAC,EAAE,KAAK,CAAC,YAAY;AAAA,gBAC7E,QAAQ,OAAO;AAAA,gBACf,OAAO;AAAA,cACX,EAAE;AAAA,YACN,CAAC;AAAA,UACL;AAAA,QACJ;AACA,aAAK,YAAY,MAAM;AAAA,MAC3B;AAAA,IACJ;AACA,eAAW,SAAS,CAAC,QAAQ,QAAQ,WAAW;AAC5C,aAAO,IAAI,WAAW;AAAA,QAClB;AAAA,QACA,UAAU,sBAAsB;AAAA,QAChC;AAAA,QACA,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AACA,eAAW,uBAAuB,CAAC,YAAY,QAAQ,WAAW;AAC9D,aAAO,IAAI,WAAW;AAAA,QAClB;AAAA,QACA,QAAQ,EAAE,MAAM,cAAc,WAAW,WAAW;AAAA,QACpD,UAAU,sBAAsB;AAAA,QAChC,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AAEO,IAAM,cAAN,cAA0B,QAAQ;AAAA,MACrC,OAAO,OAAO;AACV,cAAM,aAAa,KAAK,SAAS,KAAK;AACtC,YAAI,eAAe,cAAc,WAAW;AACxC,iBAAO,GAAG,MAAS;AAAA,QACvB;AACA,eAAO,KAAK,KAAK,UAAU,OAAO,KAAK;AAAA,MAC3C;AAAA,MACA,SAAS;AACL,eAAO,KAAK,KAAK;AAAA,MACrB;AAAA,IACJ;AACA,gBAAY,SAAS,CAAC,MAAM,WAAW;AACnC,aAAO,IAAI,YAAY;AAAA,QACnB,WAAW;AAAA,QACX,UAAU,sBAAsB;AAAA,QAChC,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AACO,IAAM,cAAN,cAA0B,QAAQ;AAAA,MACrC,OAAO,OAAO;AACV,cAAM,aAAa,KAAK,SAAS,KAAK;AACtC,YAAI,eAAe,cAAc,MAAM;AACnC,iBAAO,GAAG,IAAI;AAAA,QAClB;AACA,eAAO,KAAK,KAAK,UAAU,OAAO,KAAK;AAAA,MAC3C;AAAA,MACA,SAAS;AACL,eAAO,KAAK,KAAK;AAAA,MACrB;AAAA,IACJ;AACA,gBAAY,SAAS,CAAC,MAAM,WAAW;AACnC,aAAO,IAAI,YAAY;AAAA,QACnB,WAAW;AAAA,QACX,UAAU,sBAAsB;AAAA,QAChC,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AACO,IAAM,aAAN,cAAyB,QAAQ;AAAA,MACpC,OAAO,OAAO;AACV,cAAM,EAAE,IAAI,IAAI,KAAK,oBAAoB,KAAK;AAC9C,YAAI,OAAO,IAAI;AACf,YAAI,IAAI,eAAe,cAAc,WAAW;AAC5C,iBAAO,KAAK,KAAK,aAAa;AAAA,QAClC;AACA,eAAO,KAAK,KAAK,UAAU,OAAO;AAAA,UAC9B;AAAA,UACA,MAAM,IAAI;AAAA,UACV,QAAQ;AAAA,QACZ,CAAC;AAAA,MACL;AAAA,MACA,gBAAgB;AACZ,eAAO,KAAK,KAAK;AAAA,MACrB;AAAA,IACJ;AACA,eAAW,SAAS,CAAC,MAAM,WAAW;AAClC,aAAO,IAAI,WAAW;AAAA,QAClB,WAAW;AAAA,QACX,UAAU,sBAAsB;AAAA,QAChC,cAAc,OAAO,OAAO,YAAY,aAAa,OAAO,UAAU,MAAM,OAAO;AAAA,QACnF,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AACO,IAAM,WAAN,cAAuB,QAAQ;AAAA,MAClC,OAAO,OAAO;AACV,cAAM,EAAE,IAAI,IAAI,KAAK,oBAAoB,KAAK;AAE9C,cAAM,SAAS;AAAA,UACX,GAAG;AAAA,UACH,QAAQ;AAAA,YACJ,GAAG,IAAI;AAAA,YACP,QAAQ,CAAC;AAAA,UACb;AAAA,QACJ;AACA,cAAM,SAAS,KAAK,KAAK,UAAU,OAAO;AAAA,UACtC,MAAM,OAAO;AAAA,UACb,MAAM,OAAO;AAAA,UACb,QAAQ;AAAA,YACJ,GAAG;AAAA,UACP;AAAA,QACJ,CAAC;AACD,YAAI,QAAQ,MAAM,GAAG;AACjB,iBAAO,OAAO,KAAK,CAACH,YAAW;AAC3B,mBAAO;AAAA,cACH,QAAQ;AAAA,cACR,OAAOA,QAAO,WAAW,UACnBA,QAAO,QACP,KAAK,KAAK,WAAW;AAAA,gBACnB,IAAI,QAAQ;AACR,yBAAO,IAAI,SAAS,OAAO,OAAO,MAAM;AAAA,gBAC5C;AAAA,gBACA,OAAO,OAAO;AAAA,cAClB,CAAC;AAAA,YACT;AAAA,UACJ,CAAC;AAAA,QACL,OACK;AACD,iBAAO;AAAA,YACH,QAAQ;AAAA,YACR,OAAO,OAAO,WAAW,UACnB,OAAO,QACP,KAAK,KAAK,WAAW;AAAA,cACnB,IAAI,QAAQ;AACR,uBAAO,IAAI,SAAS,OAAO,OAAO,MAAM;AAAA,cAC5C;AAAA,cACA,OAAO,OAAO;AAAA,YAClB,CAAC;AAAA,UACT;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,cAAc;AACV,eAAO,KAAK,KAAK;AAAA,MACrB;AAAA,IACJ;AACA,aAAS,SAAS,CAAC,MAAM,WAAW;AAChC,aAAO,IAAI,SAAS;AAAA,QAChB,WAAW;AAAA,QACX,UAAU,sBAAsB;AAAA,QAChC,YAAY,OAAO,OAAO,UAAU,aAAa,OAAO,QAAQ,MAAM,OAAO;AAAA,QAC7E,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AACO,IAAM,SAAN,cAAqB,QAAQ;AAAA,MAChC,OAAO,OAAO;AACV,cAAM,aAAa,KAAK,SAAS,KAAK;AACtC,YAAI,eAAe,cAAc,KAAK;AAClC,gBAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,UAAU,cAAc;AAAA,YACxB,UAAU,IAAI;AAAA,UAClB,CAAC;AACD,iBAAO;AAAA,QACX;AACA,eAAO,EAAE,QAAQ,SAAS,OAAO,MAAM,KAAK;AAAA,MAChD;AAAA,IACJ;AACA,WAAO,SAAS,CAAC,WAAW;AACxB,aAAO,IAAI,OAAO;AAAA,QACd,UAAU,sBAAsB;AAAA,QAChC,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AACO,IAAM,QAAQ,uBAAO,WAAW;AAChC,IAAM,aAAN,cAAyB,QAAQ;AAAA,MACpC,OAAO,OAAO;AACV,cAAM,EAAE,IAAI,IAAI,KAAK,oBAAoB,KAAK;AAC9C,cAAM,OAAO,IAAI;AACjB,eAAO,KAAK,KAAK,KAAK,OAAO;AAAA,UACzB;AAAA,UACA,MAAM,IAAI;AAAA,UACV,QAAQ;AAAA,QACZ,CAAC;AAAA,MACL;AAAA,MACA,SAAS;AACL,eAAO,KAAK,KAAK;AAAA,MACrB;AAAA,IACJ;AACO,IAAM,cAAN,MAAM,qBAAoB,QAAQ;AAAA,MACrC,OAAO,OAAO;AACV,cAAM,EAAE,QAAQ,IAAI,IAAI,KAAK,oBAAoB,KAAK;AACtD,YAAI,IAAI,OAAO,OAAO;AAClB,gBAAM,cAAc,YAAY;AAC5B,kBAAM,WAAW,MAAM,KAAK,KAAK,GAAG,YAAY;AAAA,cAC5C,MAAM,IAAI;AAAA,cACV,MAAM,IAAI;AAAA,cACV,QAAQ;AAAA,YACZ,CAAC;AACD,gBAAI,SAAS,WAAW;AACpB,qBAAO;AACX,gBAAI,SAAS,WAAW,SAAS;AAC7B,qBAAO,MAAM;AACb,qBAAO,MAAM,SAAS,KAAK;AAAA,YAC/B,OACK;AACD,qBAAO,KAAK,KAAK,IAAI,YAAY;AAAA,gBAC7B,MAAM,SAAS;AAAA,gBACf,MAAM,IAAI;AAAA,gBACV,QAAQ;AAAA,cACZ,CAAC;AAAA,YACL;AAAA,UACJ;AACA,iBAAO,YAAY;AAAA,QACvB,OACK;AACD,gBAAM,WAAW,KAAK,KAAK,GAAG,WAAW;AAAA,YACrC,MAAM,IAAI;AAAA,YACV,MAAM,IAAI;AAAA,YACV,QAAQ;AAAA,UACZ,CAAC;AACD,cAAI,SAAS,WAAW;AACpB,mBAAO;AACX,cAAI,SAAS,WAAW,SAAS;AAC7B,mBAAO,MAAM;AACb,mBAAO;AAAA,cACH,QAAQ;AAAA,cACR,OAAO,SAAS;AAAA,YACpB;AAAA,UACJ,OACK;AACD,mBAAO,KAAK,KAAK,IAAI,WAAW;AAAA,cAC5B,MAAM,SAAS;AAAA,cACf,MAAM,IAAI;AAAA,cACV,QAAQ;AAAA,YACZ,CAAC;AAAA,UACL;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,OAAO,OAAO,GAAG,GAAG;AAChB,eAAO,IAAI,aAAY;AAAA,UACnB,IAAI;AAAA,UACJ,KAAK;AAAA,UACL,UAAU,sBAAsB;AAAA,QACpC,CAAC;AAAA,MACL;AAAA,IACJ;AACO,IAAM,cAAN,cAA0B,QAAQ;AAAA,MACrC,OAAO,OAAO;AACV,cAAM,SAAS,KAAK,KAAK,UAAU,OAAO,KAAK;AAC/C,cAAM,SAAS,CAAC,SAAS;AACrB,cAAI,QAAQ,IAAI,GAAG;AACf,iBAAK,QAAQ,OAAO,OAAO,KAAK,KAAK;AAAA,UACzC;AACA,iBAAO;AAAA,QACX;AACA,eAAO,QAAQ,MAAM,IAAI,OAAO,KAAK,CAAC,SAAS,OAAO,IAAI,CAAC,IAAI,OAAO,MAAM;AAAA,MAChF;AAAA,MACA,SAAS;AACL,eAAO,KAAK,KAAK;AAAA,MACrB;AAAA,IACJ;AACA,gBAAY,SAAS,CAAC,MAAM,WAAW;AACnC,aAAO,IAAI,YAAY;AAAA,QACnB,WAAW;AAAA,QACX,UAAU,sBAAsB;AAAA,QAChC,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AA+CO,IAAM,OAAO;AAAA,MAChB,QAAQ,UAAU;AAAA,IACtB;AAEA,KAAC,SAAUI,wBAAuB;AAC9B,MAAAA,uBAAsB,WAAW,IAAI;AACrC,MAAAA,uBAAsB,WAAW,IAAI;AACrC,MAAAA,uBAAsB,QAAQ,IAAI;AAClC,MAAAA,uBAAsB,WAAW,IAAI;AACrC,MAAAA,uBAAsB,YAAY,IAAI;AACtC,MAAAA,uBAAsB,SAAS,IAAI;AACnC,MAAAA,uBAAsB,WAAW,IAAI;AACrC,MAAAA,uBAAsB,cAAc,IAAI;AACxC,MAAAA,uBAAsB,SAAS,IAAI;AACnC,MAAAA,uBAAsB,QAAQ,IAAI;AAClC,MAAAA,uBAAsB,YAAY,IAAI;AACtC,MAAAA,uBAAsB,UAAU,IAAI;AACpC,MAAAA,uBAAsB,SAAS,IAAI;AACnC,MAAAA,uBAAsB,UAAU,IAAI;AACpC,MAAAA,uBAAsB,WAAW,IAAI;AACrC,MAAAA,uBAAsB,UAAU,IAAI;AACpC,MAAAA,uBAAsB,uBAAuB,IAAI;AACjD,MAAAA,uBAAsB,iBAAiB,IAAI;AAC3C,MAAAA,uBAAsB,UAAU,IAAI;AACpC,MAAAA,uBAAsB,WAAW,IAAI;AACrC,MAAAA,uBAAsB,QAAQ,IAAI;AAClC,MAAAA,uBAAsB,QAAQ,IAAI;AAClC,MAAAA,uBAAsB,aAAa,IAAI;AACvC,MAAAA,uBAAsB,SAAS,IAAI;AACnC,MAAAA,uBAAsB,YAAY,IAAI;AACtC,MAAAA,uBAAsB,SAAS,IAAI;AACnC,MAAAA,uBAAsB,YAAY,IAAI;AACtC,MAAAA,uBAAsB,eAAe,IAAI;AACzC,MAAAA,uBAAsB,aAAa,IAAI;AACvC,MAAAA,uBAAsB,aAAa,IAAI;AACvC,MAAAA,uBAAsB,YAAY,IAAI;AACtC,MAAAA,uBAAsB,UAAU,IAAI;AACpC,MAAAA,uBAAsB,YAAY,IAAI;AACtC,MAAAA,uBAAsB,YAAY,IAAI;AACtC,MAAAA,uBAAsB,aAAa,IAAI;AACvC,MAAAA,uBAAsB,aAAa,IAAI;AAAA,IAC3C,GAAG,0BAA0B,wBAAwB,CAAC,EAAE;AAKxD,IAAM,iBAAiB,CAEvB,KAAK,SAAS;AAAA,MACV,SAAS,yBAAyB,IAAI,IAAI;AAAA,IAC9C,MAAM,OAAO,CAAC,SAAS,gBAAgB,KAAK,MAAM;AAClD,IAAM,aAAa,UAAU;AAC7B,IAAM,aAAa,UAAU;AAC7B,IAAM,UAAU,OAAO;AACvB,IAAM,aAAa,UAAU;AAC7B,IAAM,cAAc,WAAW;AAC/B,IAAM,WAAW,QAAQ;AACzB,IAAM,aAAa,UAAU;AAC7B,IAAM,gBAAgB,aAAa;AACnC,IAAM,WAAW,QAAQ;AACzB,IAAM,UAAU,OAAO;AACvB,IAAM,cAAc,WAAW;AAC/B,IAAM,YAAY,SAAS;AAC3B,IAAM,WAAW,QAAQ;AACzB,IAAM,YAAY,SAAS;AAC3B,IAAM,aAAa,UAAU;AAC7B,IAAM,mBAAmB,UAAU;AACnC,IAAM,YAAY,SAAS;AAC3B,IAAM,yBAAyB,sBAAsB;AACrD,IAAM,mBAAmB,gBAAgB;AACzC,IAAM,YAAY,SAAS;AAC3B,IAAM,aAAa,UAAU;AAC7B,IAAM,UAAU,OAAO;AACvB,IAAM,UAAU,OAAO;AACvB,IAAM,eAAe,YAAY;AACjC,IAAM,WAAW,QAAQ;AACzB,IAAM,cAAc,WAAW;AAC/B,IAAM,WAAW,QAAQ;AACzB,IAAM,iBAAiB,cAAc;AACrC,IAAM,cAAc,WAAW;AAC/B,IAAM,cAAc,WAAW;AAC/B,IAAM,eAAe,YAAY;AACjC,IAAM,eAAe,YAAY;AACjC,IAAM,iBAAiB,WAAW;AAClC,IAAM,eAAe,YAAY;AACjC,IAAM,UAAU,MAAM,WAAW,EAAE,SAAS;AAC5C,IAAM,UAAU,MAAM,WAAW,EAAE,SAAS;AAC5C,IAAM,WAAW,MAAM,YAAY,EAAE,SAAS;AACvC,IAAM,SAAS;AAAA,MAClB,SAAS,CAAC,QAAQ,UAAU,OAAO,EAAE,GAAG,KAAK,QAAQ,KAAK,CAAC;AAAA,MAC3D,SAAS,CAAC,QAAQ,UAAU,OAAO,EAAE,GAAG,KAAK,QAAQ,KAAK,CAAC;AAAA,MAC3D,UAAU,CAAC,QAAQ,WAAW,OAAO;AAAA,QACjC,GAAG;AAAA,QACH,QAAQ;AAAA,MACZ,CAAC;AAAA,MACD,SAAS,CAAC,QAAQ,UAAU,OAAO,EAAE,GAAG,KAAK,QAAQ,KAAK,CAAC;AAAA,MAC3D,OAAO,CAAC,QAAQ,QAAQ,OAAO,EAAE,GAAG,KAAK,QAAQ,KAAK,CAAC;AAAA,IAC3D;AAEO,IAAM,QAAQ;AAAA;AAAA;;;AC5mHrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA,IAAAC;AACA;AAAA;AAAA;;;ACLA;AAAA;AAAA;AACA;AAAA;AAAA;;;ACDA,IAWM,iBAIO,mBAUA,oBAoBA,qBAQA,kBASA,mBAWA,oBAOA,oBAQA,2BAOA,kBAQA,mBASA,sBAQA,qBAQA;AAhIb;AAAA;AAAA;AAKA;AAEA;AAIA,IAAM,kBAAkB,iBAAE,KAAK,WAAW;AAInC,IAAM,oBAAoB,iBAAE,OAAO;AAAA,MACxC,SAAS,iBAAE,OAAO;AAAA,MAClB,WAAW,iBAAE,OAAO;AAAA,MACpB,WAAW,iBAAE,OAAO;AAAA,MACpB,UAAU,iBAAE,OAAO;AAAA,MACnB,QAAQ,iBAAE,OAAO;AAAA,IACnB,CAAC;AAIM,IAAM,qBAAqB,iBAAE,OAAO;AAAA,MACzC,IAAI,iBAAE,OAAO;AAAA,MACb,WAAW,iBAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,MAC1C,UAAU,iBAAE,OAAO,EAAE,SAAS;AAAA,MAC9B,OAAO,iBAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,MACtC,WAAW,iBAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC;AAAA,MACjC,SAAS,iBAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC;AAAA,MAC/B,aAAa;AAAA,MACb,WAAW,iBAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,MAC1C,UAAU,iBAAE,OAAO;AAAA,MACnB,WAAW,iBAAE,OAAO,EAAE,SAAS;AAAA,MAC/B,UAAU,iBAAE,QAAQ;AAAA,MACpB,aAAa,iBAAE,OAAO,EAAE,SAAS;AAAA,MACjC,OAAO,iBAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,MAChC,WAAW,iBAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,IACtC,CAAC;AAKM,IAAM,sBAAsB,iBAAE;AAAA,MACnC,OAAO;AAAA,QACL,mBAAmB,IAAI,CAAC,QAAQ,CAAC,KAAK,iBAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;AAAA,MAC3E;AAAA,IACF;AAIO,IAAM,mBAAmB,iBAAE,OAAO;AAAA,MACvC,eAAe,iBAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC;AAAA,MAChD,eAAe,iBAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC;AAAA,MAChD,gBAAgB,iBAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,MAClD,iBAAiB,iBAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC;AAAA,IACpD,CAAC;AAIM,IAAM,oBAAoB,iBAAE,OAAO;AAAA,MACxC,OAAO,iBAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,MAChC,oBAAoB,iBAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAM;AAAA,MAC1D,mBAAmB,iBAAE,QAAQ,EAAE,QAAQ,IAAI;AAAA,MAC3C,aAAa,iBAAE,QAAQ,EAAE,QAAQ,IAAI;AAAA,MACrC,gBAAgB,iBAAE,KAAK,CAAC,QAAQ,UAAU,MAAM,CAAC,EAAE,QAAQ,QAAQ;AAAA,MACnE,gBAAgB,iBAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,QAAQ,EAAE;AAAA,IACvD,CAAC;AAIM,IAAM,qBAAqB,iBAAE,OAAO;AAAA,MACzC,MAAM,iBAAE,QAAQ;AAAA,MAChB,QAAQ,iBAAE,QAAQ;AAAA,MAClB,WAAW,iBAAE,OAAO,EAAE,SAAS;AAAA,MAC/B,aAAa,iBAAE,OAAO,EAAE,SAAS;AAAA,IACnC,CAAC;AAEM,IAAM,qBAAqB,iBAAE,OAAO;AAAA,MACzC,SAAS,iBAAE,OAAO,iBAAE,OAAO,OAAO,GAAG,kBAAkB,EAAE,QAAQ,CAAC,CAAC;AAAA,MACnE,WAAW,iBAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC;AAAA,MAC5C,aAAa,iBAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC;AAAA,IAChD,CAAC;AAIM,IAAM,4BAA4B,iBAAE,OAAO;AAAA,MAChD,eAAe,iBAAE,OAAO;AAAA,MACxB,YAAY,iBAAE,OAAO;AAAA,IACvB,CAAC;AAIM,IAAM,mBAAmB,iBAAE,OAAO;AAAA,MACvC,MAAM,iBAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC;AAAA,MACvC,QAAQ,iBAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC;AAAA,MACzC,MAAM,iBAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC;AAAA,IACzC,CAAC;AAIM,IAAM,oBAAoB,iBAAE,OAAO;AAAA,MACxC,MAAM,iBAAE,KAAK,CAAC,gBAAgB,gBAAgB,aAAa,gBAAgB,CAAC;AAAA,MAC5E,UAAU,iBAAE,OAAO;AAAA,MACnB,SAAS,iBAAE,MAAM,iBAAE,OAAO,CAAC;AAAA,MAC3B,eAAe,iBAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC;AAAA,IAC9C,CAAC;AAIM,IAAM,uBAAuB,iBAAE,OAAO;AAAA,MAC3C,cAAc,iBAAE,KAAK,YAAY,EAAE,SAAS;AAAA,MAC5C,cAAc,iBAAE,OAAO;AAAA,MACvB,eAAe,iBAAE,OAAO;AAAA,IAC1B,CAAC;AAIM,IAAM,sBAAsB,iBAAE,OAAO;AAAA,MAC1C,WAAW,iBAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,MAC1C,OAAO,iBAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,MACtC,gBAAgB;AAAA,IAClB,CAAC;AAIM,IAAM,oBAAoB,iBAAE,OAAO;AAAA,MACxC,WAAW,iBAAE,OAAO;AAAA,MACpB,aAAa,iBAAE,OAAO;AAAA,MACtB,OAAO,iBAAE,MAAM,kBAAkB,EAAE,IAAI,CAAC;AAAA,MACxC,OAAO,iBAAE,MAAM,kBAAkB,EAAE,QAAQ,CAAC,CAAC;AAAA,MAC7C,SAAS;AAAA,MACT,QAAQ,iBAAE,MAAM,eAAe,EAAE,QAAQ,CAAC,CAAC;AAAA,MAC3C,cAAc,iBAAE,MAAM,yBAAyB,EAAE,QAAQ,CAAC,CAAC;AAAA,MAC3D,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,WAAW,iBAAE,OAAO;AAAA,MACpB,eAAe,iBAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC;AAAA,MAChD,eAAe,iBAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC;AAAA,MAChD,kBAAkB,oBAAoB,SAAS,EAAE,QAAQ,IAAI;AAAA,MAC7D,sBAAsB,iBAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC;AAAA,MACvD,iBAAiB,iBAAE,MAAM,iBAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;AAAA,MAC/C,mBAAmB,iBAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC;AAAA,MACpD,MAAM,iBAAE,KAAK,UAAU,EAAE,QAAQ,SAAS;AAAA,MAC1C,WAAW,iBAAE,OAAO,EAAE,QAAQ,CAAC;AAAA,MAC/B,WAAW,iBAAE,OAAO,EAAE,QAAQ,CAAC;AAAA,MAC/B,eAAe,iBAAE,OAAO,EAAE,QAAQ,CAAC;AAAA,MACnC,cAAc,iBAAE,OAAO,EAAE,QAAQ,CAAC;AAAA,MAClC,aAAa,kBAAkB,SAAS,EAAE,QAAQ,IAAI;AAAA,MACtD,YAAY,iBAAiB,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,EAAE,CAAC;AAAA,IACtE,CAAC;AAAA;AAAA;;;ACzJD,IAQa,SAsvTA,eAGA;AAjwTb;AAAA;AAAA;AAQO,IAAM,UAA8B;AAAA;AAAA,MAEzC;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,QAAQ;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,KAAK;AAAA,QACb,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,KAAK;AAAA,QACb,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,QAAQ;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,QAAQ;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,QAAQ;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,QAAQ;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,QAAQ;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,QAAQ;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,QAAQ;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,QAAQ;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,QAAQ;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,QAAQ;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,QAAQ;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,OAAO;AAAA,QACzB,WAAW,EAAE,IAAI,KAAK,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,OAAO;AAAA,QACzB,WAAW,EAAE,IAAI,KAAK,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,QAAQ;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,QAAQ;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,OAAO;AAAA,QACtB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,OAAO;AAAA,QACtB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,QAAQ;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,QAAQ;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,UAAU;AAAA,QAC3B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS;AAAA,QACjB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS;AAAA,QACjB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS;AAAA,QACjB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,QAAQ;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,QAAQ;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,QAAQ;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,SAAS;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,SAAS;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,YAAY,OAAO;AAAA,QAC3B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,YAAY,OAAO;AAAA,QAC3B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,QAAQ;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,QAAQ;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,QAAQ;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,KAAK;AAAA,QACtB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,KAAK;AAAA,QACtB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,QAAQ;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS;AAAA,QACjB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS;AAAA,QACjB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,SAAS;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,SAAS;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,MAAM;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,MAAM;AAAA,QACxB,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,KAAK,QAAQ,GAAG,SAAS,GAAG,OAAO,IAAI,SAAS,IAAI;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,KAAK,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,SAAS;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,WAAW,OAAO;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,QAAQ;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,SAAS;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,KAAK;AAAA,QACb,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,KAAK;AAAA,QACtB,WAAW,EAAE,IAAI,KAAK,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,KAAK,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,OAAO;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,OAAO;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,OAAO;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,OAAO;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,QAAQ;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,QAAQ;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,YAAY,QAAQ;AAAA,QAC5B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,QAAQ;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,QAAQ;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS;AAAA,QACjB,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI;AAAA,QACzE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS;AAAA,QACjB,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,KAAK,OAAO,KAAK,SAAS,IAAI;AAAA,QAC1E,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA;AAAA,MAGA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,QAAQ;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,QAAQ;AAAA,QAC1B,WAAW,EAAE,IAAI,KAAK,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,QAAQ;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,QAAQ;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,QAAQ;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,QAAQ;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,QAAQ;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,UAAU;AAAA,QAC3B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,UAAU;AAAA,QAC3B,WAAW,EAAE,IAAI,KAAK,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,OAAO;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,WAAW,QAAQ;AAAA,QAC3B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,WAAW,QAAQ;AAAA,QAC3B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,OAAO;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,OAAO;AAAA,QACxB,WAAW,EAAE,IAAI,KAAK,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,QAAQ;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS;AAAA,QACjB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,QAAQ;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,SAAS;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS;AAAA,QACjB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS;AAAA,QACjB,WAAW,EAAE,IAAI,KAAK,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,SAAS;AAAA,QAC3B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,KAAK;AAAA,QACb,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,OAAO;AAAA,QACtB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,KAAK,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,QAAQ;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,OAAO;AAAA,QACtB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,MAAM;AAAA,QACrB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,GAAG,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,UAAU;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,KAAK;AAAA,QACrB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,MAAM;AAAA,QACtB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,QAAQ;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,QAAQ;AAAA,QACvB,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,MAAM;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,QAAQ;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,MAAM;AAAA,QACtB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,MAAM;AAAA,QACtB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,SAAS;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,KAAK,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,KAAK,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,KAAK,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,QAAQ;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,QAAQ;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,MAAM;AAAA,QACtB,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACzE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,WAAW,QAAQ;AAAA,QAC3B,WAAW,EAAE,IAAI,KAAK,QAAQ,IAAI,SAAS,KAAK,OAAO,KAAK,SAAS,IAAI;AAAA,QACzE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,QAAQ;AAAA,QACxB,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,WAAW,OAAO;AAAA,QAC1B,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,KAAK,OAAO,KAAK,SAAS,IAAI;AAAA,QAC1E,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA;AAAA,MAGA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,UAAU;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,UAAU;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,KAAK;AAAA,QACb,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,KAAK;AAAA,QACb,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,QAAQ;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,KAAK;AAAA,QACb,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,QAAQ;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,OAAO;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,OAAO;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,OAAO;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,MAAM;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,MAAM;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,QAAQ;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,QAAQ;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,WAAW,OAAO;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,WAAW,OAAO;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,WAAW,OAAO;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,OAAO;AAAA,QACtB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,QAAQ;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,UAAU;AAAA,QAC3B,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,KAAK,OAAO,KAAK,SAAS,GAAG;AAAA,QACzE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,QAAQ;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,QAAQ;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,OAAO;AAAA,QACtB,WAAW,EAAE,IAAI,GAAG,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACpE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,KAAK,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,OAAO;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,OAAO;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,OAAO;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,MAAM;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,MAAM;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,MAAM;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,YAAY,SAAS;AAAA,QAC7B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,YAAY,SAAS;AAAA,QAC7B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,KAAK;AAAA,QACb,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,KAAK;AAAA,QACb,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,KAAK,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,MAAM;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,MAAM;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,KAAK,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,KAAK,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,QAAQ;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,QAAQ;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS;AAAA,QACjB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS;AAAA,QACjB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,QAAQ;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,QAAQ;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,MAAM;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,QAAQ;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,QAAQ;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,SAAS;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,SAAS;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,KAAK,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,MAAM;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,SAAS;AAAA,QAC3B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,SAAS;AAAA,QAC3B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,OAAO;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,OAAO;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,KAAK;AAAA,QACrB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,KAAK;AAAA,QACrB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS;AAAA,QACjB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS;AAAA,QACjB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,KAAK;AAAA,QACb,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,KAAK;AAAA,QACb,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,OAAO;AAAA,QACtB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,OAAO;AAAA,QACtB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,OAAO;AAAA,QACtB,WAAW,EAAE,IAAI,KAAK,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,MAAM;AAAA,QACvB,WAAW,EAAE,IAAI,KAAK,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,QAAQ;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,SAAS;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,SAAS;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,SAAS;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,KAAK;AAAA,QACb,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,SAAS;AAAA,QAC3B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,SAAS;AAAA,QAC3B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACzE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,QAAQ;AAAA,QAC1B,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,SAAS;AAAA,QAC1B,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,KAAK,OAAO,KAAK,SAAS,IAAI;AAAA,QAC1E,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS;AAAA,QACjB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA;AAAA,MAGA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,UAAU;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,UAAU;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,OAAO;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,QAAQ;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,QAAQ;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,QAAQ;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,OAAO;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,KAAK;AAAA,QACb,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,KAAK;AAAA,QACb,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,OAAO;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,OAAO;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,KAAK;AAAA,QACb,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,OAAO;AAAA,QACtB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,QAAQ;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,QAAQ;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,QAAQ;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,KAAK,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,KAAK,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,QAAQ;AAAA,QACxB,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS;AAAA,QACjB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,MAAM;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,MAAM;AAAA,QACxB,WAAW,EAAE,IAAI,KAAK,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,SAAS;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,SAAS;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,WAAW,OAAO;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,KAAK,QAAQ,GAAG,SAAS,GAAG,OAAO,IAAI,SAAS,GAAG;AAAA,QACpE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,QAAQ;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,MAAM;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,QAAQ;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,QAAQ;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,QAAQ;AAAA,QAC1B,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,KAAK,QAAQ,IAAI,SAAS,IAAI,OAAO,GAAG,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,YAAY,OAAO;AAAA,QAC3B,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,KAAK;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,MAAM;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,UAAU;AAAA,QAC5B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,UAAU;AAAA,QAC5B,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,KAAK;AAAA,QACtB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,KAAK;AAAA,QACtB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,KAAK;AAAA,QACrB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,YAAY,OAAO;AAAA,QAC3B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,KAAK,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,MAAM;AAAA,QACxB,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACzE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,QAAQ;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,KAAK;AAAA,QACb,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,QAAQ;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,QAAQ;AAAA,QACvB,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,WAAW,UAAU;AAAA,QAC7B,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,OAAO;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,OAAO;AAAA,QACtB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,YAAY,OAAO;AAAA,QAC3B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS;AAAA,QACjB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS;AAAA,QACjB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS;AAAA,QACjB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACzE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,KAAK,OAAO,KAAK,SAAS,IAAI;AAAA,QACzE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,OAAO;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,KAAK,OAAO,KAAK,SAAS,IAAI;AAAA,QAC1E,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACzE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS;AAAA,QACjB,WAAW,EAAE,IAAI,KAAK,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,KAAK,OAAO,KAAK,SAAS,IAAI;AAAA,QAC1E,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,KAAK,OAAO,KAAK,SAAS,IAAI;AAAA,QAC1E,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,KAAK,OAAO,KAAK,SAAS,IAAI;AAAA,QAC1E,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA;AAAA,MAGA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,WAAW,MAAM;AAAA,QACzB,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,KAAK,OAAO,KAAK,SAAS,IAAI;AAAA,QAC1E,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,UAAU;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,UAAU;AAAA,QAC1B,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS;AAAA,QACjB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS;AAAA,QACjB,WAAW,EAAE,IAAI,KAAK,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,QAAQ;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,QAAQ;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,QAAQ;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,WAAW,QAAQ;AAAA,QAC3B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,WAAW,QAAQ;AAAA,QAC3B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,OAAO;AAAA,QACzB,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,KAAK,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,KAAK,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,OAAO;AAAA,QACtB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,OAAO;AAAA,QACtB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,OAAO;AAAA,QACtB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,QAAQ;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,QAAQ;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,QAAQ;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,OAAO;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,OAAO;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,MAAM;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,MAAM;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,MAAM;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,MAAM;AAAA,QACrB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,MAAM;AAAA,QACrB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,UAAU;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,UAAU;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,WAAW,QAAQ;AAAA,QAC3B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,MAAM;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,MAAM;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,QAAQ;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,QAAQ;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS;AAAA,QACjB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS;AAAA,QACjB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS;AAAA,QACjB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS;AAAA,QACjB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS;AAAA,QACjB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS;AAAA,QACjB,WAAW,EAAE,IAAI,KAAK,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,KAAK;AAAA,QACb,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,KAAK;AAAA,QACb,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,KAAK;AAAA,QACb,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,OAAO;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,OAAO;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,YAAY,QAAQ;AAAA,QAC5B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,KAAK;AAAA,QACb,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,OAAO;AAAA,QACtB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,KAAK,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,OAAO;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,OAAO;AAAA,QACxB,WAAW,EAAE,IAAI,KAAK,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,KAAK,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,UAAU;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,UAAU;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,OAAO;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,OAAO;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS;AAAA,QACjB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS;AAAA,QACjB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,MAAM;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,MAAM;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,MAAM;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,KAAK;AAAA,QACb,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,KAAK;AAAA,QACb,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,KAAK;AAAA,QACb,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,KAAK;AAAA,QACb,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,KAAK;AAAA,QACb,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,UAAU;AAAA,QAC5B,WAAW,EAAE,IAAI,KAAK,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,OAAO;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,OAAO;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,OAAO;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,OAAO;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,QAAQ;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,QAAQ;AAAA,QAC1B,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,QAAQ;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,QAAQ;AAAA,QACxB,WAAW,EAAE,IAAI,KAAK,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,OAAO;AAAA,QACtB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,KAAK,OAAO,KAAK,SAAS,GAAG;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,QAAQ;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,QAAQ;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,QAAQ;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,MAAM;AAAA,QACrB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,MAAM;AAAA,QACrB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,UAAU;AAAA,QAC3B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,KAAK,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,UAAU;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,UAAU;AAAA,QAC3B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,YAAY,QAAQ;AAAA,QAC5B,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,MAAM;AAAA,QACxB,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACzE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,UAAU;AAAA,QAC5B,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACzE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,QAAQ;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,KAAK;AAAA,QACvB,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,UAAU;AAAA,QAC3B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,SAAS;AAAA,QAC3B,WAAW,EAAE,IAAI,KAAK,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,OAAO;AAAA,QACtB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA;AAAA,MAGA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,UAAU;AAAA,QAC3B,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,SAAS;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,MAAM;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,QAAQ;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,QAAQ;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,QAAQ;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,QAAQ;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,KAAK;AAAA,QACb,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,KAAK;AAAA,QACb,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,QAAQ;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,QAAQ;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,QAAQ;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,YAAY,MAAM;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS;AAAA,QACjB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS;AAAA,QACjB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,OAAO;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,OAAO;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,OAAO;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,KAAK,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,SAAS;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,SAAS;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,OAAO;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,OAAO;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,OAAO;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,QAAQ;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,YAAY,QAAQ;AAAA,QAC5B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,YAAY,QAAQ;AAAA,QAC5B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,QAAQ;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,QAAQ;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,KAAK;AAAA,QACrB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,KAAK;AAAA,QACrB,WAAW,EAAE,IAAI,KAAK,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,YAAY,QAAQ;AAAA,QAC5B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,YAAY,OAAO;AAAA,QAC3B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,OAAO;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,OAAO;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,OAAO;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,OAAO;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,OAAO;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,OAAO;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,KAAK;AAAA,QACb,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,KAAK;AAAA,QACb,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,QAAQ;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,QAAQ;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,QAAQ;AAAA,QACxB,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,QAAQ;AAAA,QAC1B,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,OAAO;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,WAAW,OAAO;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,OAAO;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA;AAAA,MAGA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,OAAO;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,MAAM;AAAA,QACtB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,OAAO;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,QAAQ;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,QAAQ;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,QAAQ;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,KAAK;AAAA,QACb,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,UAAU;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,UAAU;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,YAAY,KAAK;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,QAAQ;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,OAAO;AAAA,QACtB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,OAAO;AAAA,QACtB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,OAAO;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,OAAO;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,KAAK;AAAA,QACtB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,KAAK;AAAA,QACtB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,OAAO;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,OAAO;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,MAAM;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,MAAM;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,UAAU;AAAA,QAC5B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,UAAU;AAAA,QAC5B,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,SAAS;AAAA,QAC3B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,OAAO;AAAA,QACtB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,OAAO;AAAA,QACtB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,GAAG,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,QAAQ;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,QAAQ;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,YAAY,OAAO;AAAA,QAC3B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,OAAO;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,SAAS;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,QAAQ;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,OAAO;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,UAAU;AAAA,QAC5B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,UAAU;AAAA,QAC5B,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,YAAY,OAAO;AAAA,QAC3B,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,WAAW,OAAO;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,OAAO;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,OAAO;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS;AAAA,QACjB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS;AAAA,QACjB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,WAAW,OAAO;AAAA,QAC1B,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACzE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,WAAW,OAAO;AAAA,QAC1B,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,QAAQ;AAAA,QACxB,WAAW,EAAE,IAAI,KAAK,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,UAAU;AAAA,QACzB,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,UAAU;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,OAAO;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,KAAK,OAAO,KAAK,SAAS,GAAG;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,QAAQ;AAAA,QACxB,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS;AAAA,QACjB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,OAAO;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,YAAY,OAAO;AAAA,QAC3B,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,QAAQ;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,OAAO;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,OAAO;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA;AAAA,MAGA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,KAAK,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,OAAO;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,KAAK;AAAA,QACb,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,SAAS;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,SAAS;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,MAAM;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,MAAM;AAAA,QACtB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,MAAM;AAAA,QACtB,WAAW,EAAE,IAAI,KAAK,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,KAAK,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,OAAO;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,YAAY,QAAQ;AAAA,QAC5B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,YAAY,QAAQ;AAAA,QAC5B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,KAAK;AAAA,QACrB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,KAAK;AAAA,QACrB,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS;AAAA,QACjB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS;AAAA,QACjB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,WAAW,OAAO;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,OAAO;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,OAAO;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,OAAO;AAAA,QACvB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,QAAQ;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,SAAS;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,OAAO;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,KAAK;AAAA,QACpB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,KAAK;AAAA,QACpB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,KAAK;AAAA,QACb,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,WAAW,QAAQ;AAAA,QAC3B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,YAAY,MAAM;AAAA,QAC1B,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,YAAY,QAAQ;AAAA,QAC5B,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,YAAY,KAAK;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,KAAK;AAAA,QACtB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,OAAO;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,OAAO;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,OAAO;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,KAAK,OAAO,KAAK,SAAS,IAAI;AAAA,QACzE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,KAAK,OAAO,KAAK,SAAS,IAAI;AAAA,QACzE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,QAAQ;AAAA,QAC1B,WAAW,EAAE,IAAI,KAAK,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACrE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,YAAY,MAAM;AAAA,QAC1B,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,OAAO;AAAA,QACvB,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,KAAK,OAAO,KAAK,SAAS,GAAG;AAAA,QACzE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU;AAAA,QAClB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ;AAAA,QAChB,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,KAAK;AAAA,QACb,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QACzE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO;AAAA,QACf,WAAW,EAAE,IAAI,KAAK,QAAQ,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,WAAW,OAAO;AAAA,QAC1B,WAAW,EAAE,IAAI,KAAK,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,SAAS;AAAA,QAC3B,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,MAAM;AAAA,QACrB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,UAAU,QAAQ;AAAA,QAC1B,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,GAAG;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,OAAO;AAAA,QACxB,WAAW,EAAE,IAAI,KAAK,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,YAAY,QAAQ;AAAA,QAC5B,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,GAAG;AAAA,QACvE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,QAAQ,QAAQ;AAAA,QACxB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,SAAS,GAAG;AAAA,QACtE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ;AAAA,QACzB,WAAW,EAAE,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI;AAAA,QACxE,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,IACF;AAGO,IAAM,gBAA8C,IAAI,IAAI,QAAQ,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAGzF,IAAM,kBAAgD,IAAI;AAAA,MAC/D,QAAQ,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,YAAY,GAAG,CAAC,CAAC;AAAA,IAC9C;AAAA;AAAA;;;AC9vTA,SAAS,UAAUC,iBAAgB;AACnC,SAAS,aAAa,eAAe;AA8BrC,SAAS,gBAA+B;AACtC,QAAM,WAAW,CAAC;AAClB,aAAW,OAAO,oBAAoB;AACpC,aAAS,GAAG,IAAI;AAAA,EAClB;AACA,SAAO;AACT;AAGA,SAAS,cAA0B;AACjC,SAAO;AAAA,IACL,eAAe;AAAA,IACf,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,EACnB;AACF;AAGA,SAAS,gBAA6B;AACpC,SAAO;AAAA,IACL,OAAO;AAAA,IACP,oBAAoB;AAAA,IACpB,mBAAmB;AAAA,IACnB,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,EAClB;AACF;AAGA,SAAS,eAA6B;AACpC,SAAO;AAAA,IACL,SAAS,CAAC;AAAA,IACV,WAAW;AAAA,IACX,aAAa;AAAA,EACf;AACF;AAGA,SAAS,kBAA0B;AACjC,QAAM,MAAM,oBAAI,KAAK;AACrB,QAAM,OAAO,IAAI,YAAY;AAC7B,QAAM,QAAQ,OAAO,IAAI,SAAS,IAAI,CAAC,EAAE,SAAS,GAAG,GAAG;AACxD,QAAM,MAAM,OAAO,IAAI,QAAQ,CAAC,EAAE,SAAS,GAAG,GAAG;AACjD,SAAO,GAAG,IAAI,IAAI,KAAK,IAAI,GAAG;AAChC;AAlFA,IAoFa;AApFb;AAAA;AAAA;AAOA;AAYA;AACA;AACA;AACA;AA8DO,IAAM,eAAN,MAAM,cAAa;AAAA,MACxB,OAAe,WAAgC;AAAA,MACvC,QAA4B;AAAA;AAAA,MAE5B,eAAuB;AAAA;AAAA,MAE/B,OAAwB,eAAe;AAAA;AAAA,MAG/B,mBAAyD;AAAA;AAAA,MAEzD,uBAA6C;AAAA;AAAA,MAErD,OAAwB,qBAAqB;AAAA,MAErC,cAAc;AAAA,MAAC;AAAA;AAAA,MAGvB,OAAO,cAA4B;AACjC,YAAI,CAAC,cAAa,UAAU;AAC1B,wBAAa,WAAW,IAAI,cAAa;AAAA,QAC3C;AACA,eAAO,cAAa;AAAA,MACtB;AAAA;AAAA,MAGA,MAAM,OAAoC;AAExC,YACE,KAAK,SACL,KAAK,eAAe,KACpB,KAAK,IAAI,IAAI,KAAK,eAAe,cAAa,cAC9C;AACA,iBAAO,KAAK;AAAA,QACd;AAEA,cAAM,UAAU,YAAY,CAAC;AAE7B,cAAM,YAAY,aAAa;AAC/B,YAAI,aAAa;AACjB,YAAI;AACF,gBAAMA,UAAS,WAAW,QAAQ,IAAI;AAAA,QACxC,QAAQ;AACN,uBAAa;AAAA,QACf;AACA,YAAI,CAAC,YAAY;AACf,iBAAO;AAAA,QACT;AAEA,cAAM,MAAM,MAAM,SAAkB,SAAS;AAC7C,YAAI,QAAQ,MAAM;AAEhB,gBAAM,aAAa,MAAM,gBAAgB,SAAS;AAClD,kBAAQ,OAAO;AAAA,YACb,kEAAkE,UAAU;AAAA;AAAA;AAAA,UAE9E;AACA,iBAAO;AAAA,QACT;AAEA,YAAI;AAEF,gBAAM,SAAS,kBAAkB,MAAM,GAAG;AAC1C,eAAK,QAAQ;AACb,eAAK,eAAe,KAAK,IAAI;AAC7B,iBAAO,KAAK;AAAA,QACd,SAAS,KAAc;AAErB,gBAAM,aAAa,MAAM,gBAAgB,SAAS;AAClD,gBAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAC/D,kBAAQ,OAAO;AAAA,YACb,wCAAwC,OAAO;AAAA,0CACF,UAAU;AAAA;AAAA;AAAA,UAEzD;AACA,iBAAO;AAAA,QACT;AAAA,MACF;AAAA;AAAA,MAGA,MAAM,OAAsB;AAC1B,YAAI,CAAC,KAAK,OAAO;AACf,gBAAM,IAAI,MAAM,yEAAyE;AAAA,QAC3F;AACA,cAAM,WAAW,YAAY;AAC7B,cAAM,UAAU,QAAQ;AACxB,cAAM,WAAW,GAAG,QAAQ;AAC5B,cAAM,SAAS,UAAU,YAAY;AACnC,gBAAM,OAAO,KAAK,UAAU,KAAK,OAAO,MAAM,CAAC;AAC/C,gBAAM,YAAY,aAAa,GAAG,IAAI;AAAA,QACxC,CAAC;AAED,aAAK,eAAe,KAAK,IAAI;AAAA,MAC/B;AAAA;AAAA,MAGA,WAAwB;AACtB,YAAI,CAAC,KAAK,OAAO;AACf,gBAAM,IAAI,MAAM,sCAAsC;AAAA,QACxD;AACA,eAAO,KAAK;AAAA,MACd;AAAA;AAAA,MAGA,MAAM,aAA+B;AACnC,YAAI;AACF,gBAAMA,UAAS,aAAa,GAAG,QAAQ,IAAI;AAC3C,iBAAO;AAAA,QACT,QAAQ;AACN,iBAAO;AAAA,QACT;AAAA,MACF;AAAA;AAAA,MAGA,MAAM,iBACJ,WACA,aACA,SACsB;AACtB,cAAM,OAAM,oBAAI,KAAK,GAAE,YAAY;AAEnC,cAAM,QAAqB;AAAA,UACzB;AAAA,UACA;AAAA,UACA,OAAO,CAAC,OAAO;AAAA,UACf,OAAO,CAAC;AAAA,UACR,SAAS,aAAa;AAAA,UACtB,QAAQ,CAAC;AAAA,UACT,cAAc,CAAC;AAAA,UACf,UAAU,cAAc;AAAA,UACxB,QAAQ,YAAY;AAAA,UACpB,QAAQ,cAAc;AAAA,UACtB,WAAW;AAAA,UACX,eAAe;AAAA,UACf,eAAe;AAAA,UACf,kBAAkB;AAAA,UAClB,sBAAsB;AAAA,UACtB,iBAAiB,CAAC;AAAA,UAClB,mBAAmB;AAAA,UACnB,MAAM;AAAA,UACN,WAAW;AAAA,UACX,WAAW;AAAA,UACX,eAAe;AAAA,UACf,cAAc;AAAA,UACd,aAAa;AAAA,UACb,YAAY,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,EAAE;AAAA,QAC5C;AAEA,aAAK,QAAQ;AACb,cAAM,KAAK,KAAK;AAChB,eAAO,KAAK;AAAA,MACd;AAAA;AAAA,MAGA,mBAAwC;AACtC,YAAI,CAAC,KAAK,OAAO;AACf,iBAAO;AAAA,QACT;AACA,eAAO,KAAK,MAAM,MAAM,KAAK,CAAC,MAAM,EAAE,QAAQ,KAAK;AAAA,MACrD;AAAA;AAAA,MAGA,MAAM,iBAAiB,KAAsB,SAAiB,GAAkB;AAC9E,cAAM,QAAQ,KAAK,SAAS;AAC5B,cAAM,SAAS,GAAG,KAAK;AACvB,cAAM,KAAK,KAAK;AAAA,MAClB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,MAAM,eAA8B;AAClC,cAAM,QAAQ,KAAK,SAAS;AAC5B,cAAM,QAAQ,gBAAgB;AAC9B,cAAM,EAAE,OAAO,IAAI;AAEnB,YAAI,OAAO,mBAAmB,OAAO;AACnC;AAAA,QACF;AAEA,YAAI,OAAO,mBAAmB,MAAM;AAClC,iBAAO,gBAAgB;AACvB,iBAAO,kBAAkB;AAAA,QAC3B,OAAO;AACL,gBAAM,OAAO,IAAI,KAAK,OAAO,cAAc;AAC3C,gBAAM,MAAM,IAAI,KAAK,KAAK;AAC1B,gBAAM,SAAS,IAAI,QAAQ,IAAI,KAAK,QAAQ;AAC5C,gBAAM,WAAW,KAAK,MAAM,UAAU,MAAO,KAAK,KAAK,GAAG;AAO1D,cAAI,YAAY,GAAG;AACjB,mBAAO,iBAAiB;AAAA,UAC1B,OAAO;AACL,mBAAO,gBAAgB;AAAA,UACzB;AACA,iBAAO,mBAAmB;AAAA,QAC5B;AAEA,YAAI,OAAO,gBAAgB,OAAO,eAAe;AAC/C,iBAAO,gBAAgB,OAAO;AAAA,QAChC;AAEA,eAAO,iBAAiB;AACxB,cAAM,KAAK,KAAK;AAAA,MAClB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,MAAM,YAAY,iBAA0B,OAAsB;AAChE,cAAM,SAAS,KAAK,iBAAiB;AACrC,YAAI,CAAC,QAAQ;AACX;AAAA,QACF;AAEA,cAAM,QAAQ,KAAK,SAAS;AAI5B,cAAM,YACJ,OAAO,SAAS,MACZ,MACA,KAAK,IAAI,KAAK,KAAK,MAAO,OAAO,YAAY,KAAK,IAAI,GAAG,OAAO,YAAY,EAAE,IAAK,GAAG,CAAC;AAG7F,cAAM,UAAU,cAAc,IAAI,OAAO,SAAS;AAClD,cAAM,cAAc,SAAS,QAAQ,YAAY,OAAO,SAAS;AACjE,cAAM,cAAc,OAAO,WAAW,GAAG,OAAO,QAAQ,KAAK,WAAW,MAAM;AAE9E,cAAM,UAAyB;AAAA,UAC7B,MAAM;AAAA,UACN;AAAA,UACA,OAAO,OAAO;AAAA,UACd;AAAA,UACA,WAAW,OAAO;AAAA,UAClB;AAAA,UACA,MAAM,MAAM,QAAQ;AAAA,QACtB;AAGA,aAAK,uBAAuB;AAG5B,YAAI,KAAK,iBAAkB;AAE3B,aAAK,mBAAmB,WAAW,MAAM;AACvC,gBAAM,YAAY;AAChB,iBAAK,mBAAmB;AACxB,gBAAI,KAAK,sBAAsB;AAC7B,oBAAM,WAAW,YAAY;AAC7B,oBAAM,UAAU,QAAQ;AACxB,oBAAM,YAAY,cAAc,GAAG,KAAK,UAAU,KAAK,oBAAoB,CAAC;AAC5E,mBAAK,uBAAuB;AAAA,YAC9B;AAAA,UACF,GAAG;AAAA,QACL,GAAG,cAAa,kBAAkB;AAAA,MACpC;AAAA;AAAA;AAAA,MAIA,MAAM,cAA6B;AACjC,YAAI,KAAK,kBAAkB;AACzB,uBAAa,KAAK,gBAAgB;AAClC,eAAK,mBAAmB;AAAA,QAC1B;AACA,YAAI,KAAK,sBAAsB;AAC7B,gBAAM,WAAW,YAAY;AAC7B,gBAAM,UAAU,QAAQ;AACxB,gBAAM,YAAY,cAAc,GAAG,KAAK,UAAU,KAAK,oBAAoB,CAAC;AAC5E,eAAK,uBAAuB;AAAA,QAC9B;AAAA,MACF;AAAA;AAAA,MAGA,oBAAoB,WAAgC;AAClD,cAAM,QAAQ,KAAK,SAAS;AAC5B,cAAM,mBAAmB;AAAA,MAC3B;AAAA;AAAA,MAGA,wBAA8B;AAC5B,cAAM,QAAQ,KAAK,SAAS;AAC5B,cAAM,mBAAmB;AAAA,MAC3B;AAAA;AAAA,MAGA,MAAM,qBAAqB,aAAoC;AAC7D,cAAM,SAAS,KAAK,iBAAiB;AACrC,YAAI,CAAC,OAAQ;AAEb,cAAM,YACJ,OAAO,SAAS,MACZ,MACA,KAAK,IAAI,KAAK,KAAK,MAAO,OAAO,YAAY,KAAK,IAAI,GAAG,OAAO,YAAY,EAAE,IAAK,GAAG,CAAC;AAE7F,cAAM,UAAU,cAAc,IAAI,OAAO,SAAS;AAClD,cAAM,cAAc,SAAS,QAAQ,YAAY,OAAO,SAAS;AACjE,cAAM,eAAe,OAAO,WAAW,GAAG,OAAO,QAAQ,KAAK,WAAW,MAAM;AAE/E,cAAM,UAAU;AAAA,UACd,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO,OAAO;AAAA,UACd;AAAA,UACA,WAAW,OAAO;AAAA,UAClB,gBAAgB;AAAA,UAChB,WAAW,QAAQ,WAAW;AAAA,QAChC;AAEA,cAAM,UAAU,YAAY,CAAC;AAC7B,cAAM,YAAY,cAAc,GAAG,KAAK,UAAU,OAAO,CAAC;AAAA,MAC5D;AAAA;AAAA,MAGA,OAAO,gBAAsB;AAC3B,sBAAa,WAAW;AAAA,MAC1B;AAAA;AAAA,MAGA,kBAAwB;AACtB,aAAK,eAAe;AAAA,MACtB;AAAA,IACF;AAAA;AAAA;;;ACzZA,SAAS,YAAAC,WAAU,aAAAC,YAAW,SAAAC,cAAa;AAC3C,SAAS,cAAc,cAAAC,mBAAkB;AACzC,SAAS,WAAAC,UAAS,QAAAC,aAAY;AAC9B,SAAS,iBAAAC,sBAAqB;AAyCvB,SAAS,oBAA4B;AAC1C,QAAM,aAAa;AAAA,IACjBD,MAAKE,YAAW,MAAM,MAAM,cAAc;AAAA,IAC1CF,MAAKE,YAAW,MAAM,cAAc;AAAA,EACtC;AACA,aAAW,KAAK,YAAY;AAC1B,QAAIJ,YAAW,CAAC,GAAG;AACjB,UAAI;AACF,cAAM,MAAM,KAAK,MAAM,aAAa,GAAG,OAAO,CAAC;AAG/C,eAAO,IAAI,WAAW;AAAA,MACxB,QAAQ;AACN;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAUA,eAAsB,iBAA6C;AACjE,QAAM,UAAU,kBAAkB;AAClC,MAAI,YAAY,UAAW,QAAO;AAElC,QAAM,YAAY,iBAAiB;AAGnC,MAAI;AACF,QAAIA,YAAW,SAAS,GAAG;AACzB,YAAM,MAAM,MAAMH,UAAS,WAAW,OAAO;AAC7C,YAAM,SAAS,KAAK,MAAM,GAAG;AAC7B,UAAI,KAAK,IAAI,IAAI,OAAO,YAAY,mBAAmB;AACrD,cAAM,SAAqB;AAAA,UACzB,WAAW,eAAe,OAAO,eAAe,OAAO;AAAA,UACvD,QAAQ,OAAO;AAAA,UACf;AAAA,QACF;AACA,2BAAmB;AACnB,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF,QAAQ;AAAA,EAER;AAGA,MAAI;AACF,UAAM,aAAa,IAAI,gBAAgB;AACvC,UAAM,UAAU,WAAW,MAAM,WAAW,MAAM,GAAG,gBAAgB;AAErE,UAAM,MAAM,MAAM,MAAM,kBAAkB;AAAA,MACxC,QAAQ,WAAW;AAAA,IACrB,CAAC;AACD,iBAAa,OAAO;AAEpB,QAAI,CAAC,IAAI,GAAI,QAAO;AAEpB,UAAM,OAAQ,MAAM,IAAI,KAAK;AAC7B,UAAM,SAAS,KAAK,WAAW;AAG/B,UAAM,QAAsB;AAAA,MAC1B,WAAW,KAAK,IAAI;AAAA,MACpB,eAAe;AAAA,MACf,gBAAgB;AAAA,IAClB;AACA,QAAI;AACF,YAAM,MAAMI,SAAQ,SAAS;AAC7B,YAAMF,OAAM,KAAK,EAAE,WAAW,KAAK,CAAC;AACpC,YAAMD,WAAU,WAAW,KAAK,UAAU,KAAK,GAAG,OAAO;AAAA,IAC3D,QAAQ;AAAA,IAER;AAEA,UAAM,SAAqB;AAAA,MACzB,WAAW,eAAe,QAAQ,OAAO;AAAA,MACzC;AAAA,MACA;AAAA,IACF;AACA,uBAAmB;AACnB,WAAO;AAAA,EACT,QAAQ;AAEN,WAAO;AAAA,EACT;AACF;AAKA,SAAS,mBAA2B;AAClC,SAAOI,MAAK,YAAY,GAAG,oBAAoB;AACjD;AAMA,SAAS,eAAe,GAAW,GAAoB;AACrD,QAAM,KAAK,EAAE,MAAM,GAAG,EAAE,IAAI,MAAM;AAClC,QAAM,KAAK,EAAE,MAAM,GAAG,EAAE,IAAI,MAAM;AAClC,WAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,UAAM,KAAK,GAAG,CAAC,KAAK;AACpB,UAAM,KAAK,GAAG,CAAC,KAAK;AACpB,QAAI,KAAK,GAAI,QAAO;AACpB,QAAI,KAAK,GAAI,QAAO;AAAA,EACtB;AACA,SAAO;AACT;AAtKA,IA4BM,mBACA,kBACA,kBAEAG,aACAD,YAIF;AArCJ;AAAA;AAAA;AAUA;AAkBA,IAAM,oBAAoB,KAAK,KAAK,KAAK;AACzC,IAAM,mBAAmB;AACzB,IAAM,mBAAmB;AAEzB,IAAMC,cAAaF,eAAc,YAAY,GAAG;AAChD,IAAMC,aAAYH,SAAQI,WAAU;AAIpC,IAAI,mBAAsC;AAAA;AAAA;;;ACrC1C;AAAA;AAAA;AAAA;AAOA,SAAS,UAAAC,SAAQ,QAAAC,OAAM,UAAAC,SAAQ,SAAS,YAAAC,iBAAgB;AACxD,SAAS,aAAaC,cAAa,cAAAC,mBAAkB;AACrD,SAAS,WAAAC,UAAS,WAAAC,gBAAe;AACjC,SAAS,iBAAAC,sBAAqB;AAC9B,SAAS,aAAAC,kBAAiB;AAyB1B,SAAS,qBAAoC;AAC3C,QAAM,aAAa;AAAA,IACjBH,SAAQC,SAAQG,UAAS,GAAG,WAAW,gBAAgB,OAAO;AAAA,IAC9DJ,SAAQC,SAAQG,UAAS,GAAG,MAAM,WAAW,gBAAgB,OAAO;AAAA,IACpEJ,SAAQI,YAAW,MAAM,WAAW,gBAAgB,OAAO;AAAA,IAC3DJ,SAAQI,YAAW,MAAM,MAAM,WAAW,gBAAgB,OAAO;AAAA,EACnE;AACA,aAAW,KAAK,YAAY;AAC1B,QAAIL,YAAW,CAAC,EAAG,QAAO;AAAA,EAC5B;AACA,SAAO;AACT;AAWA,SAAS,YAAY,QAA6B;AAChD,QAAM,OAAO,OAAO,SAAS,WAAW;AACxC,SAAO,IAAI,IAAI,KAAK,OAAO,KAAK,KAAK,OAAO,MAAM;AACpD;AAIA,eAAe,WAAiC;AAC9C,MAAI;AACF,UAAM,SAASI,WAAU,OAAO,CAAC,WAAW,GAAG,EAAE,OAAO,OAAO,CAAC;AAChE,QAAI,OAAO,MAAO,OAAM,OAAO;AAC/B,UAAM,SAAS,OAAO,QAAQ,SAAS,EAAE,KAAK;AAC9C,WAAO,EAAE,OAAO,eAAe,QAAQ,MAAM,QAAQ,IAAI,MAAM,GAAG;AAAA,EACpE,QAAQ;AACN,WAAO,EAAE,OAAO,eAAe,QAAQ,OAAO,QAAQ,YAAY;AAAA,EACpE;AACF;AAIA,eAAe,gBAAsC;AACnD,MAAI;AACF,UAAMT,QAAO,WAAWI,aAAY,IAAI;AACxC,WAAO,EAAE,OAAO,mBAAmB,QAAQ,MAAM,QAAQ,gBAAgB;AAAA,EAC3E,QAAQ;AACN,WAAO;AAAA,MACL,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,QAAQ;AAAA,IACV;AAAA,EACF;AACF;AAIA,eAAe,iBAAuC;AACpD,MAAI;AACF,UAAMJ,QAAO,YAAYI,aAAY,IAAI;AAAA,EAC3C,QAAQ;AACN,WAAO,EAAE,OAAO,cAAc,QAAQ,OAAO,QAAQ,uCAAuC;AAAA,EAC9F;AAEA,MAAI;AACF,UAAM,OAAO,MAAMD,UAAS,YAAY,OAAO;AAC/C,UAAM,OAAO,KAAK,MAAM,IAAI;AAG5B,UAAM,QAAQ,KAAK,OAAO;AAC1B,QAAI,MAAM,QAAQ,KAAK,KAAK,MAAM,SAAS,GAAG;AAC5C,YAAM,SAAS,MAAM;AAAA,QACnB,CAAC,MACC,OAAO,MAAM,YACb,MAAM,QACN,cAAc,KACb,EAA8B,UAAU,MAAM;AAAA,MACnD;AACA,UAAI,UAAU,OAAO,WAAW,YAAY,eAAe,QAAQ;AACjE,eAAO;AAAA,UACL,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,QAAQ,0BAA2B,OAAmC,WAAW,CAAC;AAAA,QACpF;AAAA,MACF;AACA,aAAO,EAAE,OAAO,cAAc,QAAQ,MAAM,QAAQ,mCAAmC;AAAA,IACzF;AAEA,WAAO,EAAE,OAAO,cAAc,QAAQ,MAAM,QAAQ,mCAAmC;AAAA,EACzF,QAAQ;AACN,WAAO,EAAE,OAAO,cAAc,QAAQ,OAAO,QAAQ,0BAA0B;AAAA,EACjF;AACF;AAIA,eAAe,iBAAuC;AACpD,QAAM,SAAS,MAAM,SAAuB,aAAa;AACzD,MAAI,CAAC,QAAQ;AACX,WAAO,EAAE,OAAO,cAAc,QAAQ,OAAO,QAAQ,2BAA2B;AAAA,EAClF;AAEA,MAAI,OAAO,cAAc,OAAO,WAAW,WAAW,GAAG;AACvD,WAAO,EAAE,OAAO,cAAc,QAAQ,MAAM,QAAQ,+BAA+B;AAAA,EACrF;AAEA,SAAO,EAAE,OAAO,cAAc,QAAQ,OAAO,QAAQ,mCAAmC;AAC1F;AAIA,eAAe,aAAmC;AAChD,QAAM,WAAW,MAAM,SAAyB,eAAe;AAC/D,MAAI,CAAC,UAAU;AACb,WAAO,EAAE,OAAO,SAAS,QAAQ,OAAO,QAAQ,oCAAoC;AAAA,EACtF;AAEA,MAAI,CAAC,SAAS,SAAS,CAAC,SAAS,MAAM,aAAa,GAAG;AACrD,WAAO,EAAE,OAAO,SAAS,QAAQ,OAAO,QAAQ,kCAAkC;AAAA,EACpF;AAEA,QAAM,aAAa,SAAS,MAAM,aAAa,EAAE;AAAA,IAAK,CAAC,MACrD,EAAE,MAAM,KAAK,CAAC,MAAM,EAAE,QAAQ,SAAS,kBAAkB,CAAC;AAAA,EAC5D;AAEA,MAAI,YAAY;AACd,WAAO,EAAE,OAAO,SAAS,QAAQ,MAAM,QAAQ,yBAAyB;AAAA,EAC1E;AAEA,SAAO,EAAE,OAAO,SAAS,QAAQ,OAAO,QAAQ,gDAAgD;AAClG;AAIA,eAAe,aAAmC;AAChD,MAAI;AACF,UAAMH,QAAO,YAAYI,aAAY,IAAI;AACzC,WAAO,EAAE,OAAO,SAAS,QAAQ,MAAM,QAAQ,2BAA2B;AAAA,EAC5E,QAAQ;AACN,WAAO,EAAE,OAAO,SAAS,QAAQ,OAAO,QAAQ,4CAA4C;AAAA,EAC9F;AACF;AAIA,eAAe,kBAAwC;AAErD,MAAI,QAAQ,aAAa,SAAS;AAChC,QAAI;AACF,YAAMJ,QAAO,aAAaI,aAAY,IAAI;AAC1C,aAAO,EAAE,OAAO,eAAe,QAAQ,MAAM,QAAQ,yCAAoC;AAAA,IAC3F,QAAQ;AACN,aAAO,EAAE,OAAO,eAAe,QAAQ,OAAO,QAAQ,YAAY;AAAA,IACpE;AAAA,EACF;AAEA,MAAI;AACF,UAAMJ,QAAO,aAAaI,aAAY,IAAI;AAC1C,WAAO,EAAE,OAAO,eAAe,QAAQ,MAAM,QAAQ,aAAa;AAAA,EACpE,QAAQ;AACN,QAAI;AACF,YAAMJ,QAAO,aAAaI,aAAY,IAAI;AAC1C,aAAO;AAAA,QACL,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,QAAQ;AAAA,MACV;AAAA,IACF,QAAQ;AACN,aAAO,EAAE,OAAO,eAAe,QAAQ,OAAO,QAAQ,YAAY;AAAA,IACpE;AAAA,EACF;AACF;AAIA,eAAe,UAAgC;AAC7C,MAAI;AACF,UAAM,SAASK,WAAU,MAAM,CAAC,WAAW,GAAG,EAAE,OAAO,OAAO,CAAC;AAC/D,QAAI,OAAO,MAAO,OAAM,OAAO;AAC/B,UAAM,SAAS,OAAO,QAAQ,SAAS,EAAE,KAAK;AAC9C,WAAO,EAAE,OAAO,MAAM,QAAQ,MAAM,QAAQ,UAAU,YAAY;AAAA,EACpE,QAAQ;AACN,UAAM,cACJ,QAAQ,aAAa,WACjB,oBACA,QAAQ,aAAa,UACnB,6BACA;AACR,WAAO;AAAA,MACL,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,QAAQ,uDAAkD,WAAW;AAAA,IACvE;AAAA,EACF;AACF;AAIA,eAAe,oBAA0C;AACvD,MAAI;AACF,iBAAa,cAAc;AAC3B,UAAM,UAAU,aAAa,YAAY;AACzC,UAAM,QAAQ,MAAM,QAAQ,KAAK;AACjC,iBAAa,cAAc;AAE3B,QAAI,OAAO;AACT,aAAO,EAAE,OAAO,iBAAiB,QAAQ,MAAM,QAAQ,sBAAsB;AAAA,IAC/E;AACA,WAAO,EAAE,OAAO,iBAAiB,QAAQ,MAAM,QAAQ,gCAAgC;AAAA,EACzF,SAAS,KAAc;AACrB,UAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAC/D,iBAAa,cAAc;AAC3B,WAAO,EAAE,OAAO,iBAAiB,QAAQ,OAAO,QAAQ,gBAAgB,OAAO,GAAG;AAAA,EACpF;AACF;AAIA,eAAe,iBAAuC;AACpD,MAAI;AACF,UAAM,WAAW,MAAMR,MAAK,SAAS;AACrC,UAAM,UAAU,KAAK,IAAI,IAAI,SAAS;AAEtC,QAAI,UAAUU,kBAAiB;AAE7B,WAAK,0BAA0B,KAAK,MAAM,UAAU,GAAI,CAAC,wBAAwB;AACjF,UAAI;AACF,cAAMT,QAAO,SAAS;AACtB,eAAO,EAAE,OAAO,aAAa,QAAQ,MAAM,QAAQ,wBAAwB;AAAA,MAC7E,QAAQ;AACN,eAAO,EAAE,OAAO,aAAa,QAAQ,OAAO,QAAQ,mCAAmC;AAAA,MACzF;AAAA,IACF;AAEA,WAAO;AAAA,MACL,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,QAAQ,WAAW,KAAK,MAAM,UAAU,GAAI,CAAC;AAAA,IAC/C;AAAA,EACF,QAAQ;AAEN,WAAO,EAAE,OAAO,aAAa,QAAQ,MAAM,QAAQ,kBAAkB;AAAA,EACvE;AACF;AAIA,eAAe,mBAAyC;AACtD,MAAI;AACF,QAAI,CAAC,iBAAiB;AACpB,aAAO,EAAE,OAAO,WAAW,QAAQ,OAAO,QAAQ,mCAAmC;AAAA,IACvF;AACA,UAAMF,QAAO,iBAAiBI,aAAY,IAAI;AAC9C,UAAM,UAAU,MAAM,QAAQ,eAAe;AAC7C,UAAM,cAAc,QAAQ,OAAO,CAAC,MAAM,EAAE,SAAS,MAAM,CAAC;AAC5D,UAAM,QAAQ,YAAY;AAE1B,QAAI,SAAS,uBAAuB;AAClC,aAAO;AAAA,QACL,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,QAAQ,GAAG,KAAK,IAAI,qBAAqB;AAAA,MAC3C;AAAA,IACF;AAEA,WAAO;AAAA,MACL,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,QAAQ,QAAQ,KAAK,IAAI,qBAAqB;AAAA,IAChD;AAAA,EACF,QAAQ;AACN,WAAO,EAAE,OAAO,WAAW,QAAQ,OAAO,QAAQ,mCAAmC;AAAA,EACvF;AACF;AAIA,eAAe,qBAA2C;AACxD,MAAI;AACF,UAAMJ,QAAO,YAAYI,aAAY,IAAI;AAAA,EAC3C,QAAQ;AACN,WAAO,EAAE,OAAO,kBAAkB,QAAQ,MAAM,QAAQ,oBAAoB;AAAA,EAC9E;AAEA,MAAI;AACF,UAAM,OAAO,MAAMD,UAAS,YAAY,OAAO;AAC/C,QAAI,CAAC,KAAK,KAAK,GAAG;AAChB,aAAO,EAAE,OAAO,kBAAkB,QAAQ,OAAO,QAAQ,sBAAsB;AAAA,IACjF;AAEA,UAAM,OAAO,KAAK,MAAM,IAAI;AAC5B,UAAM,SAAS,kBAAkB,UAAU,IAAI;AAE/C,QAAI,OAAO,SAAS;AAClB,aAAO,EAAE,OAAO,kBAAkB,QAAQ,MAAM,QAAQ,eAAe;AAAA,IACzE;AAGA,UAAM,SAAS,OAAO,MAAM,OAAO,MAAM,GAAG,CAAC;AAC7C,UAAM,UAAU,OAAO,IAAI,CAAC,MAAM,GAAG,EAAE,KAAK,KAAK,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,KAAK,IAAI;AAChF,WAAO;AAAA,MACL,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,QAAQ,kBAAkB,OAAO;AAAA,IACnC;AAAA,EACF,QAAQ;AACN,WAAO,EAAE,OAAO,kBAAkB,QAAQ,OAAO,QAAQ,eAAe;AAAA,EAC1E;AACF;AAIA,eAAe,eAAqC;AAClD,QAAM,UAAU,kBAAkB;AAClC,MAAI,YAAY,WAAW;AACzB,WAAO,EAAE,OAAO,WAAW,QAAQ,OAAO,QAAQ,sCAAsC;AAAA,EAC1F;AAEA,MAAI;AACF,UAAM,SAAS,MAAM,eAAe;AACpC,QAAI,CAAC,QAAQ;AACX,aAAO;AAAA,QACL,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,QAAQ,IAAI,OAAO;AAAA,MACrB;AAAA,IACF;AAEA,QAAI,OAAO,WAAW;AACpB,aAAO;AAAA,QACL,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,QAAQ,IAAI,OAAO,MAAM,OAAO,MAAM;AAAA,MACxC;AAAA,IACF;AAEA,WAAO,EAAE,OAAO,WAAW,QAAQ,MAAM,QAAQ,IAAI,OAAO,YAAY;AAAA,EAC1E,QAAQ;AACN,WAAO,EAAE,OAAO,WAAW,QAAQ,MAAM,QAAQ,IAAI,OAAO,mBAAmB;AAAA,EACjF;AACF;AAIA,eAAsB,SAAwB;AAC5C,UAAQ,IAAI,EAAE;AACd,UAAQ,IAAI,kBAAkB;AAC9B,UAAQ,IAAI,kBAAkB;AAC9B,UAAQ,IAAI,EAAE;AAEd,QAAM,SAAwB;AAAA,IAC5B,MAAM,aAAa;AAAA,IACnB,MAAM,SAAS;AAAA,IACf,MAAM,QAAQ;AAAA,IACd,MAAM,cAAc;AAAA,IACpB,MAAM,eAAe;AAAA,IACrB,MAAM,eAAe;AAAA,IACrB,MAAM,WAAW;AAAA,IACjB,MAAM,WAAW;AAAA,IACjB,MAAM,gBAAgB;AAAA,IACtB,MAAM,kBAAkB;AAAA,IACxB,MAAM,eAAe;AAAA,IACrB,MAAM,iBAAiB;AAAA,IACvB,MAAM,mBAAmB;AAAA,EAC3B;AAEA,aAAW,SAAS,QAAQ;AAC1B,YAAQ,IAAI,YAAY,KAAK,CAAC;AAAA,EAChC;AAEA,QAAM,SAAS,OAAO,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE;AAC9C,QAAM,QAAQ,OAAO;AAErB,UAAQ,IAAI,EAAE;AACd,UAAQ,IAAI,WAAW,MAAM,IAAI,KAAK,gBAAgB;AAEtD,MAAI,SAAS,OAAO;AAClB,YAAQ,IAAI,EAAE;AACd,YAAQ,IAAI,yDAAyD;AAAA,EACvE;AAEA,UAAQ,IAAI,EAAE;AAChB;AAlaA,IA6BM,YACA,WACAQ,kBACA,uBACAC,aACAF,YAcA;AAhDN;AAAA;AAAA;AAYA;AACA;AACA;AAGA;AAYA,IAAM,aAAa,GAAG,SAAS;AAC/B,IAAM,YAAY,GAAG,SAAS;AAC9B,IAAMC,mBAAkB;AACxB,IAAM,wBAAwB;AAC9B,IAAMC,cAAaJ,eAAc,YAAY,GAAG;AAChD,IAAME,aAAYH,SAAQK,WAAU;AAcpC,IAAM,kBAAkB,mBAAmB;AAqX3C,WAAO,EAAE,MAAM,CAAC,QAAiB;AAC/B,YAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAC/D,cAAQ,MAAM;AAAA,iBAAoB,OAAO,EAAE;AAC3C,cAAQ,KAAK,CAAC;AAAA,IAChB,CAAC;AAAA;AAAA;;;ACnaD,SAAS,gBAAAC,qBAAoB;AAC7B,SAAS,WAAAC,UAAS,WAAAC,gBAAe;AACjC,SAAS,iBAAAC,sBAAqB;AAG9B,IAAM,UAAU,QAAQ,KAAK,CAAC;AAE9B,QAAQ,SAAS;AAAA,EACf,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK,WAAW;AACd,UAAMC,aAAYC,SAAQC,eAAc,YAAY,GAAG,CAAC;AACxD,UAAM,WAAW;AAAA,MACfC,SAAQH,YAAW,MAAM,cAAc;AAAA,MACvCG,SAAQH,YAAW,MAAM,MAAM,cAAc;AAAA,IAC/C;AACA,eAAW,KAAK,UAAU;AACxB,UAAI;AACF,cAAM,MAAM,KAAK,MAAMI,cAAa,GAAG,OAAO,CAAC;AAC/C,gBAAQ,IAAI,cAAc,IAAI,OAAO,EAAE;AACvC;AAAA,MACF,QAAQ;AACN;AAAA,MACF;AAAA,IACF;AACA;AAAA,EACF;AAAA,EACA,KAAK;AACH,UAAM;AACN;AAAA,EACF,KAAK;AACH,UAAM;AACN;AAAA,EACF,KAAK;AACH,UAAM;AACN;AAAA,EACF,KAAK;AACH,UAAM;AACN;AAAA,EACF;AACE,YAAQ,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAWf;AACG;AACJ;",
|
|
6
6
|
"names": ["fsConstants", "access", "fsConstants", "mkdir", "copyFile", "chmod", "access", "fsConstants", "existsSync", "spawnSync", "checkPrerequisites", "registerMcpServer", "installHooks", "registerStatusLine", "installSkill", "setScriptPermissions", "readFile", "writeFile", "mkdir", "copyFile", "access", "util", "objectUtil", "errorUtil", "errorMap", "r", "init_types", "ctx", "result", "issues", "elements", "processed", "ZodFirstPartyTypeKind", "init_types", "fsAccess", "readFile", "writeFile", "mkdir", "existsSync", "dirname", "join", "fileURLToPath", "__dirname", "__filename", "access", "stat", "unlink", "readFile", "fsConstants", "existsSync", "resolve", "dirname", "fileURLToPath", "spawnSync", "__dirname", "LOCK_MAX_AGE_MS", "__filename", "readFileSync", "resolve", "dirname", "fileURLToPath", "__dirname", "dirname", "fileURLToPath", "resolve", "readFileSync"]
|
|
7
7
|
}
|