Jofthomas's picture
Jofthomas HF staff
Upload 4781 files
5c2ed06 verified
{
"version": 3,
"sources": ["../../../../data/random-battles/gen4/teams.ts"],
"sourcesContent": ["import RandomGen5Teams from '../gen5/teams';\nimport type { PRNG } from '../../../sim';\nimport type { MoveCounter } from '../gen8/teams';\n\n// Moves that restore HP:\nconst RECOVERY_MOVES = [\n\t'healorder', 'milkdrink', 'moonlight', 'morningsun', 'recover', 'roost', 'slackoff', 'softboiled', 'synthesis',\n];\n// Moves that boost Attack:\nconst PHYSICAL_SETUP = [\n\t'bellydrum', 'bulkup', 'curse', 'dragondance', 'howl', 'meditate', 'screech', 'swordsdance',\n];\n// Conglomerate for ease of access\nconst SETUP = [\n\t'acidarmor', 'agility', 'bellydrum', 'bulkup', 'calmmind', 'curse', 'dragondance', 'growth', 'howl', 'irondefense',\n\t'meditate', 'nastyplot', 'raindance', 'rockpolish', 'sunnyday', 'swordsdance', 'tailglow',\n];\n// Moves that shouldn't be the only STAB moves:\nconst NO_STAB = [\n\t'aquajet', 'bulletpunch', 'chatter', 'eruption', 'explosion', 'fakeout', 'focuspunch', 'futuresight', 'iceshard',\n\t'icywind', 'knockoff', 'machpunch', 'pluck', 'pursuit', 'quickattack', 'rapidspin', 'reversal', 'selfdestruct',\n\t'shadowsneak', 'skyattack', 'suckerpunch', 'uturn', 'vacuumwave', 'waterspout',\n];\n// Hazard-setting moves\nconst HAZARDS = [\n\t'spikes', 'stealthrock', 'toxicspikes',\n];\n\n// Moves that should be paired together when possible\nconst MOVE_PAIRS = [\n\t['lightscreen', 'reflect'],\n\t['sleeptalk', 'rest'],\n\t['protect', 'wish'],\n\t['leechseed', 'substitute'],\n\t['focuspunch', 'substitute'],\n\t['raindance', 'rest'],\n];\n\n/** Pokemon who always want priority STAB, and are fine with it as its only STAB move of that type */\nconst PRIORITY_POKEMON = [\n\t'cacturne', 'dusknoir', 'honchkrow', 'mamoswine', 'scizor', 'shedinja', 'shiftry',\n];\n\nexport class RandomGen4Teams extends RandomGen5Teams {\n\trandomSets: { [species: string]: RandomTeamsTypes.RandomSpeciesData } = require('./sets.json');\n\n\tconstructor(format: string | Format, prng: PRNG | PRNGSeed | null) {\n\t\tsuper(format, prng);\n\t\tthis.noStab = NO_STAB;\n\t\tthis.priorityPokemon = PRIORITY_POKEMON;\n\n\t\tthis.moveEnforcementCheckers = {\n\t\t\tBug: (movePool, moves, abilities, types, counter) => (\n\t\t\t\t!counter.get('Bug') && movePool.includes('megahorn')\n\t\t\t),\n\t\t\tDark: (movePool, moves, abilities, types, counter) => !counter.get('Dark'),\n\t\t\tDragon: (movePool, moves, abilities, types, counter) => !counter.get('Dragon'),\n\t\t\tElectric: (movePool, moves, abilities, types, counter) => !counter.get('Electric'),\n\t\t\tFighting: (movePool, moves, abilities, types, counter) => !counter.get('Fighting'),\n\t\t\tFire: (movePool, moves, abilities, types, counter) => !counter.get('Fire'),\n\t\t\tFlying: (movePool, moves, abilities, types, counter, species) => !counter.get('Flying') && species.id !== 'aerodactyl',\n\t\t\tGhost: (movePool, moves, abilities, types, counter) => !counter.get('Ghost'),\n\t\t\tGrass: (movePool, moves, abilities, types, counter, species) => (\n\t\t\t\t!counter.get('Grass') &&\n\t\t\t\t(species.baseStats.atk >= 100 || movePool.includes('leafstorm') || movePool.includes('solarbeam'))\n\t\t\t),\n\t\t\tGround: (movePool, moves, abilities, types, counter) => !counter.get('Ground'),\n\t\t\tIce: (movePool, moves, abilities, types, counter) => !counter.get('Ice'),\n\t\t\tPoison: (movePool, moves, abilities, types, counter, species) => (\n\t\t\t\t!counter.get('Poison') && (types.has('Grass') || species.id === 'gengar')\n\t\t\t),\n\t\t\tPsychic: (movePool, moves, abilities, types, counter) => (\n\t\t\t\t!counter.get('Psychic') && (types.has('Fighting') || movePool.includes('calmmind'))\n\t\t\t),\n\t\t\tRock: (movePool, moves, abilities, types, counter, species) => (!counter.get('Rock') && species.baseStats.atk >= 80),\n\t\t\tSteel: (movePool, moves, abilities, types, counter, species) => (!counter.get('Steel') && species.id === 'metagross'),\n\t\t\tWater: (movePool, moves, abilities, types, counter) => !counter.get('Water'),\n\t\t};\n\t\tthis.cachedStatusMoves = this.dex.moves.all()\n\t\t\t.filter(move => move.category === 'Status')\n\t\t\t.map(move => move.id);\n\t}\n\n\tcullMovePool(\n\t\ttypes: string[],\n\t\tmoves: Set<string>,\n\t\tabilities: string[],\n\t\tcounter: MoveCounter,\n\t\tmovePool: string[],\n\t\tteamDetails: RandomTeamsTypes.TeamDetails,\n\t\tspecies: Species,\n\t\tisLead: boolean,\n\t\tpreferredType: string,\n\t\trole: RandomTeamsTypes.Role,\n\t): void {\n\t\t// Pokemon cannot have multiple Hidden Powers in any circumstance\n\t\tlet hasHiddenPower = false;\n\t\tfor (const move of moves) {\n\t\t\tif (move.startsWith('hiddenpower')) hasHiddenPower = true;\n\t\t}\n\t\tif (hasHiddenPower) {\n\t\t\tlet movePoolHasHiddenPower = true;\n\t\t\twhile (movePoolHasHiddenPower) {\n\t\t\t\tmovePoolHasHiddenPower = false;\n\t\t\t\tfor (const moveid of movePool) {\n\t\t\t\t\tif (moveid.startsWith('hiddenpower')) {\n\t\t\t\t\t\tthis.fastPop(movePool, movePool.indexOf(moveid));\n\t\t\t\t\t\tmovePoolHasHiddenPower = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (moves.size + movePool.length <= this.maxMoveCount) return;\n\t\t// If we have two unfilled moves and only one unpaired move, cull the unpaired move.\n\t\tif (moves.size === this.maxMoveCount - 2) {\n\t\t\tconst unpairedMoves = [...movePool];\n\t\t\tfor (const pair of MOVE_PAIRS) {\n\t\t\t\tif (movePool.includes(pair[0]) && movePool.includes(pair[1])) {\n\t\t\t\t\tthis.fastPop(unpairedMoves, unpairedMoves.indexOf(pair[0]));\n\t\t\t\t\tthis.fastPop(unpairedMoves, unpairedMoves.indexOf(pair[1]));\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (unpairedMoves.length === 1) {\n\t\t\t\tthis.fastPop(movePool, movePool.indexOf(unpairedMoves[0]));\n\t\t\t}\n\t\t}\n\n\t\t// These moves are paired, and shouldn't appear if there is not room for them both.\n\t\tif (moves.size === this.maxMoveCount - 1) {\n\t\t\tfor (const pair of MOVE_PAIRS) {\n\t\t\t\tif (movePool.includes(pair[0]) && movePool.includes(pair[1])) {\n\t\t\t\t\tthis.fastPop(movePool, movePool.indexOf(pair[0]));\n\t\t\t\t\tthis.fastPop(movePool, movePool.indexOf(pair[1]));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Team-based move culls\n\t\tif (teamDetails.screens && movePool.length >= this.maxMoveCount + 2) {\n\t\t\tif (movePool.includes('reflect')) this.fastPop(movePool, movePool.indexOf('reflect'));\n\t\t\tif (movePool.includes('lightscreen')) this.fastPop(movePool, movePool.indexOf('lightscreen'));\n\t\t\tif (moves.size + movePool.length <= this.maxMoveCount) return;\n\t\t}\n\t\tif (teamDetails.stealthRock) {\n\t\t\tif (movePool.includes('stealthrock')) this.fastPop(movePool, movePool.indexOf('stealthrock'));\n\t\t\tif (moves.size + movePool.length <= this.maxMoveCount) return;\n\t\t}\n\t\tif (teamDetails.rapidSpin) {\n\t\t\tif (movePool.includes('rapidspin')) this.fastPop(movePool, movePool.indexOf('rapidspin'));\n\t\t\tif (moves.size + movePool.length <= this.maxMoveCount) return;\n\t\t}\n\t\tif (teamDetails.toxicSpikes) {\n\t\t\tif (movePool.includes('toxicspikes')) this.fastPop(movePool, movePool.indexOf('toxicspikes'));\n\t\t\tif (moves.size + movePool.length <= this.maxMoveCount) return;\n\t\t}\n\t\tif (teamDetails.spikes && teamDetails.spikes >= 2) {\n\t\t\tif (movePool.includes('spikes')) this.fastPop(movePool, movePool.indexOf('spikes'));\n\t\t\tif (moves.size + movePool.length <= this.maxMoveCount) return;\n\t\t}\n\t\tif (teamDetails.statusCure) {\n\t\t\tif (movePool.includes('aromatherapy')) this.fastPop(movePool, movePool.indexOf('aromatherapy'));\n\t\t\tif (movePool.includes('healbell')) this.fastPop(movePool, movePool.indexOf('healbell'));\n\t\t\tif (moves.size + movePool.length <= this.maxMoveCount) return;\n\t\t}\n\n\t\t// Develop additional move lists\n\t\tconst badWithSetup = ['pursuit', 'toxic'];\n\t\tconst statusMoves = this.cachedStatusMoves;\n\n\t\t// General incompatibilities\n\t\tconst incompatiblePairs = [\n\t\t\t// These moves don't mesh well with other aspects of the set\n\t\t\t[statusMoves, ['healingwish', 'switcheroo', 'trick']],\n\t\t\t[SETUP, 'uturn'],\n\t\t\t[SETUP, HAZARDS],\n\t\t\t[SETUP, badWithSetup],\n\t\t\t[PHYSICAL_SETUP, PHYSICAL_SETUP],\n\t\t\t[['fakeout', 'uturn'], ['switcheroo', 'trick']],\n\t\t\t['substitute', 'uturn'],\n\t\t\t['rest', 'substitute'],\n\t\t\t['explosion', ['destinybond', 'painsplit', 'rest', 'trick']],\n\n\t\t\t// These attacks are redundant with each other\n\t\t\t['surf', 'hydropump'],\n\t\t\t[['bodyslam', 'return'], ['bodyslam', 'doubleedge']],\n\t\t\t[['energyball', 'leafstorm'], ['leafblade', 'leafstorm', 'powerwhip']],\n\t\t\t['lavaplume', 'fireblast'],\n\t\t\t['closecombat', 'drainpunch'],\n\t\t\t['discharge', 'thunderbolt'],\n\t\t\t['gunkshot', 'poisonjab'],\n\t\t\t['payback', 'pursuit'],\n\t\t\t['protect', 'swordsdance'],\n\n\t\t\t// Assorted hardcodes go here:\n\t\t\t// Manectric\n\t\t\t['flamethrower', 'overheat'],\n\t\t\t// Walrein\n\t\t\t['encore', 'roar'],\n\t\t\t// Smeargle\n\t\t\t['explosion', 'whirlwind'],\n\t\t\t// Seviper\n\t\t\t['switcheroo', 'suckerpunch'],\n\t\t\t// Jirachi\n\t\t\t['bodyslam', 'healingwish'],\n\t\t\t// Blaziken\n\t\t\t['agility', 'vacuumwave'],\n\t\t];\n\n\t\tfor (const pair of incompatiblePairs) this.incompatibleMoves(moves, movePool, pair[0], pair[1]);\n\n\t\tconst statusInflictingMoves = ['stunspore', 'thunderwave', 'toxic', 'willowisp', 'yawn'];\n\t\tif (role !== 'Staller') {\n\t\t\tthis.incompatibleMoves(moves, movePool, statusInflictingMoves, statusInflictingMoves);\n\t\t}\n\n\t\t// Cull filler moves for otherwise fixed set Stealth Rock users\n\t\tif (!teamDetails.stealthRock) {\n\t\t\tif (species.id === 'registeel' && role === 'Staller') {\n\t\t\t\tif (movePool.includes('thunderwave')) this.fastPop(movePool, movePool.indexOf('thunderwave'));\n\t\t\t\tif (moves.size + movePool.length <= this.maxMoveCount) return;\n\t\t\t}\n\t\t\tif (species.id === 'wormadamtrash' && role === 'Staller') {\n\t\t\t\tif (movePool.includes('suckerpunch')) this.fastPop(movePool, movePool.indexOf('suckerpunch'));\n\t\t\t\tif (moves.size + movePool.length <= this.maxMoveCount) return;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Generate random moveset for a given species, role, preferred type.\n\trandomMoveset(\n\t\ttypes: string[],\n\t\tabilities: string[],\n\t\tteamDetails: RandomTeamsTypes.TeamDetails,\n\t\tspecies: Species,\n\t\tisLead: boolean,\n\t\tmovePool: string[],\n\t\tpreferredType: string,\n\t\trole: RandomTeamsTypes.Role,\n\t): Set<string> {\n\t\tconst moves = new Set<string>();\n\t\tlet counter = this.newQueryMoves(moves, species, preferredType, abilities);\n\t\tthis.cullMovePool(types, moves, abilities, counter, movePool, teamDetails, species, isLead,\n\t\t\tpreferredType, role);\n\n\t\t// If there are only four moves, add all moves and return early\n\t\tif (movePool.length <= this.maxMoveCount) {\n\t\t\t// Still need to ensure that multiple Hidden Powers are not added (if maxMoveCount is increased)\n\t\t\twhile (movePool.length) {\n\t\t\t\tconst moveid = this.sample(movePool);\n\t\t\t\tcounter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,\n\t\t\t\t\tmovePool, preferredType, role);\n\t\t\t}\n\t\t\treturn moves;\n\t\t}\n\n\t\tconst runEnforcementChecker = (checkerName: string) => {\n\t\t\tif (!this.moveEnforcementCheckers[checkerName]) return false;\n\t\t\treturn this.moveEnforcementCheckers[checkerName](\n\t\t\t\tmovePool, moves, abilities, new Set(types), counter, species, teamDetails\n\t\t\t);\n\t\t};\n\n\t\t// Add required move (e.g. Relic Song for Meloetta-P)\n\t\tif (species.requiredMove) {\n\t\t\tconst move = this.dex.moves.get(species.requiredMove).id;\n\t\t\tcounter = this.addMove(move, moves, types, abilities, teamDetails, species, isLead,\n\t\t\t\tmovePool, preferredType, role);\n\t\t}\n\n\t\t// Add other moves you really want to have, e.g. STAB, recovery, setup.\n\n\t\t// Enforce Facade if Guts is a possible ability\n\t\tif (movePool.includes('facade') && abilities.includes('Guts')) {\n\t\t\tcounter = this.addMove('facade', moves, types, abilities, teamDetails, species, isLead,\n\t\t\t\tmovePool, preferredType, role);\n\t\t}\n\n\t\t// Enforce Seismic Toss, Spore, and Volt Tackle\n\t\tfor (const moveid of ['seismictoss', 'spore', 'volttackle']) {\n\t\t\tif (movePool.includes(moveid)) {\n\t\t\t\tcounter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,\n\t\t\t\t\tmovePool, preferredType, role);\n\t\t\t}\n\t\t}\n\n\t\t// Enforce Substitute on non-Setup sets with Baton Pass\n\t\tif (!role.includes('Setup')) {\n\t\t\tif (movePool.includes('batonpass') && movePool.includes('substitute')) {\n\t\t\t\tcounter = this.addMove('substitute', moves, types, abilities, teamDetails, species, isLead,\n\t\t\t\t\tmovePool, preferredType, role);\n\t\t\t}\n\t\t}\n\n\t\t// Enforce hazard removal on Bulky Support and Spinner if the team doesn't already have it\n\t\tif (['Bulky Support', 'Spinner'].includes(role) && !teamDetails.rapidSpin) {\n\t\t\tif (movePool.includes('rapidspin')) {\n\t\t\t\tcounter = this.addMove('rapidspin', moves, types, abilities, teamDetails, species, isLead,\n\t\t\t\t\tmovePool, preferredType, role);\n\t\t\t}\n\t\t}\n\n\t\t// Enforce STAB priority\n\t\tif (['Bulky Attacker', 'Bulky Setup'].includes(role) || this.priorityPokemon.includes(species.id)) {\n\t\t\tconst priorityMoves = [];\n\t\t\tfor (const moveid of movePool) {\n\t\t\t\tconst move = this.dex.moves.get(moveid);\n\t\t\t\tconst moveType = this.getMoveType(move, species, abilities, preferredType);\n\t\t\t\tif (types.includes(moveType) && move.priority > 0 && (move.basePower || move.basePowerCallback)) {\n\t\t\t\t\tpriorityMoves.push(moveid);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (priorityMoves.length) {\n\t\t\t\tconst moveid = this.sample(priorityMoves);\n\t\t\t\tcounter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,\n\t\t\t\t\tmovePool, preferredType, role);\n\t\t\t}\n\t\t}\n\n\t\t// Enforce STAB\n\t\tfor (const type of types) {\n\t\t\t// Check if a STAB move of that type should be required\n\t\t\tconst stabMoves = [];\n\t\t\tfor (const moveid of movePool) {\n\t\t\t\tconst move = this.dex.moves.get(moveid);\n\t\t\t\tconst moveType = this.getMoveType(move, species, abilities, preferredType);\n\t\t\t\tif (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && type === moveType) {\n\t\t\t\t\tstabMoves.push(moveid);\n\t\t\t\t}\n\t\t\t}\n\t\t\twhile (runEnforcementChecker(type)) {\n\t\t\t\tif (!stabMoves.length) break;\n\t\t\t\tconst moveid = this.sampleNoReplace(stabMoves);\n\t\t\t\tcounter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,\n\t\t\t\t\tmovePool, preferredType, role);\n\t\t\t}\n\t\t}\n\n\t\t// Enforce Preferred Type\n\t\tif (!counter.get('preferred')) {\n\t\t\tconst stabMoves = [];\n\t\t\tfor (const moveid of movePool) {\n\t\t\t\tconst move = this.dex.moves.get(moveid);\n\t\t\t\tconst moveType = this.getMoveType(move, species, abilities, preferredType);\n\t\t\t\tif (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && preferredType === moveType) {\n\t\t\t\t\tstabMoves.push(moveid);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (stabMoves.length) {\n\t\t\t\tconst moveid = this.sample(stabMoves);\n\t\t\t\tcounter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,\n\t\t\t\t\tmovePool, preferredType, role);\n\t\t\t}\n\t\t}\n\n\t\t// If no STAB move was added, add a STAB move\n\t\tif (!counter.get('stab')) {\n\t\t\tconst stabMoves = [];\n\t\t\tfor (const moveid of movePool) {\n\t\t\t\tconst move = this.dex.moves.get(moveid);\n\t\t\t\tconst moveType = this.getMoveType(move, species, abilities, preferredType);\n\t\t\t\tif (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && types.includes(moveType)) {\n\t\t\t\t\tstabMoves.push(moveid);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (stabMoves.length) {\n\t\t\t\tconst moveid = this.sample(stabMoves);\n\t\t\t\tcounter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,\n\t\t\t\t\tmovePool, preferredType, role);\n\t\t\t} else {\n\t\t\t\t// If they have no regular STAB move, enforce U-turn on Bug types.\n\t\t\t\tif (movePool.includes('uturn') && types.includes('Bug')) {\n\t\t\t\t\tcounter = this.addMove('uturn', moves, types, abilities, teamDetails, species, isLead,\n\t\t\t\t\t\tmovePool, preferredType, role);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Enforce recovery\n\t\tif (['Bulky Support', 'Bulky Attacker', 'Bulky Setup', 'Spinner', 'Staller'].includes(role)) {\n\t\t\tconst recoveryMoves = movePool.filter(moveid => RECOVERY_MOVES.includes(moveid));\n\t\t\tif (recoveryMoves.length) {\n\t\t\t\tconst moveid = this.sample(recoveryMoves);\n\t\t\t\tcounter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,\n\t\t\t\t\tmovePool, preferredType, role);\n\t\t\t}\n\t\t}\n\n\t\t// Enforce Staller moves\n\t\tif (role === 'Staller') {\n\t\t\tconst enforcedMoves = ['protect', 'toxic', 'wish'];\n\t\t\tfor (const move of enforcedMoves) {\n\t\t\t\tif (movePool.includes(move)) {\n\t\t\t\t\tcounter = this.addMove(move, moves, types, abilities, teamDetails, species, isLead,\n\t\t\t\t\t\tmovePool, preferredType, role);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Enforce setup\n\t\tif (role.includes('Setup')) {\n\t\t\tconst setupMoves = movePool.filter(moveid => SETUP.includes(moveid));\n\t\t\tif (setupMoves.length) {\n\t\t\t\tconst moveid = this.sample(setupMoves);\n\t\t\t\tcounter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,\n\t\t\t\t\tmovePool, preferredType, role);\n\t\t\t}\n\t\t}\n\n\t\t// Enforce a move not on the noSTAB list\n\t\tif (!counter.damagingMoves.size && !(moves.has('uturn') && types.includes('Bug'))) {\n\t\t\t// Choose an attacking move\n\t\t\tconst attackingMoves = [];\n\t\t\tfor (const moveid of movePool) {\n\t\t\t\tconst move = this.dex.moves.get(moveid);\n\t\t\t\tif (!this.noStab.includes(moveid) && (move.category !== 'Status')) attackingMoves.push(moveid);\n\t\t\t}\n\t\t\tif (attackingMoves.length) {\n\t\t\t\tconst moveid = this.sample(attackingMoves);\n\t\t\t\tcounter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,\n\t\t\t\t\tmovePool, preferredType, role);\n\t\t\t}\n\t\t}\n\n\t\t// Enforce coverage move\n\t\tif (['Fast Attacker', 'Setup Sweeper', 'Bulky Attacker', 'Wallbreaker'].includes(role)) {\n\t\t\tif (counter.damagingMoves.size === 1) {\n\t\t\t\t// Find the type of the current attacking move\n\t\t\t\tconst currentAttackType = counter.damagingMoves.values().next().value!.type;\n\t\t\t\t// Choose an attacking move that is of different type to the current single attack\n\t\t\t\tconst coverageMoves = [];\n\t\t\t\tfor (const moveid of movePool) {\n\t\t\t\t\tconst move = this.dex.moves.get(moveid);\n\t\t\t\t\tconst moveType = this.getMoveType(move, species, abilities, preferredType);\n\t\t\t\t\tif (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback)) {\n\t\t\t\t\t\tif (currentAttackType !== moveType) coverageMoves.push(moveid);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (coverageMoves.length) {\n\t\t\t\t\tconst moveid = this.sample(coverageMoves);\n\t\t\t\t\tcounter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,\n\t\t\t\t\t\tmovePool, preferredType, role);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Choose remaining moves randomly from movepool and add them to moves list:\n\t\twhile (moves.size < this.maxMoveCount && movePool.length) {\n\t\t\tconst moveid = this.sample(movePool);\n\t\t\tcounter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,\n\t\t\t\tmovePool, preferredType, role);\n\t\t\tfor (const pair of MOVE_PAIRS) {\n\t\t\t\tif (moveid === pair[0] && movePool.includes(pair[1])) {\n\t\t\t\t\tcounter = this.addMove(pair[1], moves, types, abilities, teamDetails, species, isLead,\n\t\t\t\t\t\tmovePool, preferredType, role);\n\t\t\t\t}\n\t\t\t\tif (moveid === pair[1] && movePool.includes(pair[0])) {\n\t\t\t\t\tcounter = this.addMove(pair[0], moves, types, abilities, teamDetails, species, isLead,\n\t\t\t\t\t\tmovePool, preferredType, role);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn moves;\n\t}\n\n\tshouldCullAbility(\n\t\tability: string,\n\t\ttypes: Set<string>,\n\t\tmoves: Set<string>,\n\t\tabilities: string[],\n\t\tcounter: MoveCounter,\n\t\tmovePool: string[],\n\t\tteamDetails: RandomTeamsTypes.TeamDetails,\n\t\tspecies: Species,\n\t\tpreferredType: string,\n\t\trole: RandomTeamsTypes.Role\n\t): boolean {\n\t\tswitch (ability) {\n\t\tcase 'Chlorophyll':\n\t\t\treturn !teamDetails.sun;\n\t\tcase 'Swift Swim':\n\t\t\treturn !teamDetails.rain;\n\t\tcase 'Rock Head':\n\t\t\treturn !counter.get('recoil');\n\t\tcase 'Skill Link':\n\t\t\treturn !counter.get('skilllink');\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tgetAbility(\n\t\ttypes: Set<string>,\n\t\tmoves: Set<string>,\n\t\tabilities: string[],\n\t\tcounter: MoveCounter,\n\t\tmovePool: string[],\n\t\tteamDetails: RandomTeamsTypes.TeamDetails,\n\t\tspecies: Species,\n\t\tpreferredType: string,\n\t\trole: RandomTeamsTypes.Role,\n\t): string {\n\t\tif (abilities.length <= 1) return abilities[0];\n\n\t\t// Hard-code abilities here\n\t\tif (species.id === 'dewgong') return moves.has('raindance') ? 'Hydration' : 'Thick Fat';\n\t\tif (species.id === 'cloyster' && counter.get('skilllink')) return 'Skill Link';\n\n\t\tconst abilityAllowed: string[] = [];\n\t\t// Obtain a list of abilities that are allowed (not culled)\n\t\tfor (const ability of abilities) {\n\t\t\tif (!this.shouldCullAbility(\n\t\t\t\tability, types, moves, abilities, counter, movePool, teamDetails, species, preferredType, role\n\t\t\t)) {\n\t\t\t\tabilityAllowed.push(ability);\n\t\t\t}\n\t\t}\n\n\t\t// Pick a random allowed ability\n\t\tif (abilityAllowed.length >= 1) return this.sample(abilityAllowed);\n\n\t\t// If all abilities are rejected, prioritize weather abilities over non-weather abilities\n\t\tif (!abilityAllowed.length) {\n\t\t\tconst weatherAbilities = abilities.filter(a => ['Chlorophyll', 'Swift Swim'].includes(a));\n\t\t\tif (weatherAbilities.length) return this.sample(weatherAbilities);\n\t\t}\n\n\t\t// Pick a random ability\n\t\treturn this.sample(abilities);\n\t}\n\n\tgetPriorityItem(\n\t\tability: string,\n\t\ttypes: string[],\n\t\tmoves: Set<string>,\n\t\tcounter: MoveCounter,\n\t\tteamDetails: RandomTeamsTypes.TeamDetails,\n\t\tspecies: Species,\n\t\tisLead: boolean,\n\t\tpreferredType: string,\n\t\trole: RandomTeamsTypes.Role,\n\t): string | undefined {\n\t\tif (species.requiredItems) return this.sample(species.requiredItems);\n\t\tif (species.id === 'latias' || species.id === 'latios') return 'Soul Dew';\n\t\tif (species.id === 'marowak') return 'Thick Club';\n\t\tif (species.id === 'pikachu') return 'Light Ball';\n\t\tif (species.id === 'shedinja' || species.id === 'smeargle') return 'Focus Sash';\n\t\tif (species.id === 'unown') return 'Choice Specs';\n\t\tif (species.id === 'wobbuffet') return 'Custap Berry';\n\t\tif (species.id === 'ditto' || (species.id === 'rampardos' && role === 'Fast Attacker')) return 'Choice Scarf';\n\t\tif (ability === 'Poison Heal' || moves.has('facade')) return 'Toxic Orb';\n\t\tif (ability === 'Speed Boost' && species.id === 'yanmega') return 'Life Orb';\n\t\tif (['healingwish', 'switcheroo', 'trick'].some(m => moves.has(m))) {\n\t\t\tif (\n\t\t\t\tspecies.baseStats.spe >= 60 && species.baseStats.spe <= 108 && role !== 'Wallbreaker' && !counter.get('priority')\n\t\t\t) {\n\t\t\t\treturn 'Choice Scarf';\n\t\t\t} else {\n\t\t\t\treturn (counter.get('Physical') > counter.get('Special')) ? 'Choice Band' : 'Choice Specs';\n\t\t\t}\n\t\t}\n\t\tif (moves.has('bellydrum')) return 'Sitrus Berry';\n\t\tif (moves.has('waterspout')) return 'Choice Scarf';\n\t\tif (ability === 'Magic Guard') return 'Life Orb';\n\t\tif (moves.has('lightscreen') && moves.has('reflect')) return 'Light Clay';\n\t\tif (moves.has('rest') && !moves.has('sleeptalk') && !['Natural Cure', 'Shed Skin'].includes(ability)) {\n\t\t\treturn (moves.has('raindance') && ability === 'Hydration') ? 'Damp Rock' : 'Chesto Berry';\n\t\t}\n\t\tif (ability === 'Unburden') return 'Sitrus Berry';\n\t\tif (role === 'Staller') return 'Leftovers';\n\t}\n\n\tgetItem(\n\t\tability: string,\n\t\ttypes: string[],\n\t\tmoves: Set<string>,\n\t\tcounter: MoveCounter,\n\t\tteamDetails: RandomTeamsTypes.TeamDetails,\n\t\tspecies: Species,\n\t\tisLead: boolean,\n\t\tpreferredType: string,\n\t\trole: RandomTeamsTypes.Role,\n\t): string {\n\t\tconst defensiveStatTotal = species.baseStats.hp + species.baseStats.def + species.baseStats.spd;\n\n\t\tconst scarfReqs = (\n\t\t\trole !== 'Wallbreaker' &&\n\t\t\tspecies.baseStats.spe >= 60 && species.baseStats.spe <= 108 &&\n\t\t\t!counter.get('priority') && !moves.has('pursuit')\n\t\t);\n\n\t\tif (\n\t\t\tmoves.has('pursuit') && moves.has('suckerpunch') && counter.get('Dark') &&\n\t\t\t(!this.priorityPokemon.includes(species.id) || counter.get('Dark') >= 2)\n\t\t) return 'Black Glasses';\n\t\tif (counter.get('Special') === 4) {\n\t\t\treturn (\n\t\t\t\tscarfReqs && species.baseStats.spa >= 90 && this.randomChance(1, 2)\n\t\t\t) ? 'Choice Scarf' : 'Choice Specs';\n\t\t}\n\t\tif (\n\t\t\tcounter.get('Special') === 3 && role === 'Fast Attacker' && (moves.has('explosion') || moves.has('selfdestruct'))\n\t\t) return 'Choice Scarf';\n\t\tif (counter.get('Special') === 3 && moves.has('uturn')) return 'Choice Specs';\n\t\tif (counter.get('Physical') === 4 && species.id !== 'jirachi' &&\n\t\t\t['fakeout', 'rapidspin'].every(m => !moves.has(m))\n\t\t) {\n\t\t\treturn (\n\t\t\t\tscarfReqs && (species.baseStats.atk >= 100 || ability === 'Pure Power' || ability === 'Huge Power') &&\n\t\t\t\tthis.randomChance(1, 2)\n\t\t\t) ? 'Choice Scarf' : 'Choice Band';\n\t\t}\n\n\t\tif (types.includes('Normal') && moves.has('fakeout') && !!counter.get('Normal')) return 'Silk Scarf';\n\t\tif (species.id === 'palkia') return 'Lustrous Orb';\n\t\tif (species.id === 'farfetchd') return 'Stick';\n\t\tif (moves.has('outrage') && counter.get('setup') && !moves.has('sleeptalk')) return 'Lum Berry';\n\t\tif (['batonpass', 'protect', 'substitute'].some(m => moves.has(m))) return 'Leftovers';\n\t\tif (\n\t\t\trole === 'Fast Support' && isLead && defensiveStatTotal < 255 && !counter.get('recovery') &&\n\t\t\t(counter.get('hazards') || counter.get('setup')) && (!counter.get('recoil') || ability === 'Rock Head')\n\t\t) return 'Focus Sash';\n\n\t\t// Default Items\n\t\tif (role === 'Fast Support') {\n\t\t\treturn (\n\t\t\t\tcounter.get('Physical') + counter.get('Special') >= 3 &&\n\t\t\t\t['rapidspin', 'uturn'].every(m => !moves.has(m)) &&\n\t\t\t\tthis.dex.getEffectiveness('Rock', species) < 2\n\t\t\t) ? 'Life Orb' : 'Leftovers';\n\t\t}\n\t\t// noStab moves that should reject Expert Belt\n\t\tconst noExpertBeltMoves = this.noStab.filter(\n\t\t\tmoveid => ['Dragon', 'Normal', 'Poison'].includes(this.dex.moves.get(moveid).type)\n\t\t);\n\t\tconst expertBeltReqs = (\n\t\t\t!counter.get('Dragon') && !counter.get('Normal') && !counter.get('Poison') &&\n\t\t\tnoExpertBeltMoves.every(m => !moves.has(m))\n\t\t);\n\t\tif (!counter.get('Status') && expertBeltReqs && (moves.has('uturn') || role === 'Fast Attacker')) return 'Expert Belt';\n\t\tif (\n\t\t\t['Fast Attacker', 'Setup Sweeper', 'Wallbreaker'].some(m => role === m) &&\n\t\t\tthis.dex.getEffectiveness('Rock', species) < 2 && !moves.has('rapidspin')\n\t\t) return 'Life Orb';\n\t\treturn 'Leftovers';\n\t}\n\n\trandomSet(\n\t\tspecies: string | Species,\n\t\tteamDetails: RandomTeamsTypes.TeamDetails = {},\n\t\tisLead = false\n\t): RandomTeamsTypes.RandomSet {\n\t\tspecies = this.dex.species.get(species);\n\t\tconst forme = this.getForme(species);\n\t\tconst sets = this.randomSets[species.id][\"sets\"];\n\t\tconst possibleSets = [];\n\t\t// Check if the Pokemon has a Spinner set\n\t\tlet canSpinner = false;\n\t\tfor (const set of sets) {\n\t\t\tif (!teamDetails.rapidSpin && set.role === 'Spinner') canSpinner = true;\n\t\t}\n\t\tfor (const set of sets) {\n\t\t\t// Prevent Spinner if the team already has removal\n\t\t\tif (teamDetails.rapidSpin && set.role === 'Spinner') continue;\n\t\t\t// Enforce Spinner if the team does not have removal\n\t\t\tif (canSpinner && set.role !== 'Spinner') continue;\n\t\t\tpossibleSets.push(set);\n\t\t}\n\t\tconst set = this.sampleIfArray(possibleSets);\n\t\tconst role = set.role;\n\t\tconst movePool: string[] = Array.from(set.movepool);\n\t\tconst preferredTypes = set.preferredTypes;\n\t\tconst preferredType = this.sampleIfArray(preferredTypes) || '';\n\n\t\tlet ability = '';\n\t\tlet item = undefined;\n\n\t\tconst evs = { hp: 85, atk: 85, def: 85, spa: 85, spd: 85, spe: 85 };\n\t\tconst ivs = { hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31 };\n\n\t\tconst types = species.types;\n\t\tconst abilities = set.abilities!;\n\n\t\t// Get moves\n\t\tconst moves = this.randomMoveset(types, abilities, teamDetails, species, isLead, movePool,\n\t\t\tpreferredType, role);\n\t\tconst counter = this.newQueryMoves(moves, species, preferredType, abilities);\n\n\t\t// Get ability\n\t\tability = this.getAbility(new Set(types), moves, abilities, counter, movePool, teamDetails, species,\n\t\t\tpreferredType, role);\n\n\t\t// Get items\n\t\titem = this.getPriorityItem(ability, types, moves, counter, teamDetails, species, isLead, preferredType, role);\n\t\tif (item === undefined) {\n\t\t\titem = this.getItem(ability, types, moves, counter, teamDetails, species, isLead, preferredType, role);\n\t\t}\n\n\t\t// For Trick / Switcheroo\n\t\tif (item === 'Leftovers' && types.includes('Poison')) {\n\t\t\titem = 'Black Sludge';\n\t\t}\n\n\t\tconst level = this.getLevel(species);\n\n\t\t// We use a special variable to track Hidden Power\n\t\t// so that we can check for all Hidden Powers at once\n\t\tlet hasHiddenPower = false;\n\t\tfor (const move of moves) {\n\t\t\tif (move.startsWith('hiddenpower')) hasHiddenPower = true;\n\t\t}\n\n\t\tif (hasHiddenPower) {\n\t\t\tlet hpType;\n\t\t\tfor (const move of moves) {\n\t\t\t\tif (move.startsWith('hiddenpower')) hpType = move.substr(11);\n\t\t\t}\n\t\t\tif (!hpType) throw new Error(`hasHiddenPower is true, but no Hidden Power move was found.`);\n\t\t\tconst HPivs = this.dex.types.get(hpType).HPivs;\n\t\t\tlet iv: StatID;\n\t\t\tfor (iv in HPivs) {\n\t\t\t\tivs[iv] = HPivs[iv]!;\n\t\t\t}\n\t\t}\n\n\t\t// Prepare optimal HP\n\t\tconst srImmunity = ability === 'Magic Guard';\n\t\tconst srWeakness = srImmunity ? 0 : this.dex.getEffectiveness('Rock', species);\n\t\twhile (evs.hp > 1) {\n\t\t\tconst hp = Math.floor(Math.floor(2 * species.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10);\n\t\t\tif (moves.has('substitute') && item === 'Sitrus Berry') {\n\t\t\t\t// Two Substitutes should activate Sitrus Berry\n\t\t\t\tif (hp % 4 === 0) break;\n\t\t\t} else if (moves.has('bellydrum') && item === 'Sitrus Berry') {\n\t\t\t\t// Belly Drum should activate Sitrus Berry\n\t\t\t\tif (hp % 2 === 0) break;\n\t\t\t} else {\n\t\t\t\t// Maximize number of Stealth Rock switch-ins\n\t\t\t\tif (srWeakness <= 0) break;\n\t\t\t\tif (srWeakness === 1 && ['Black Sludge', 'Leftovers', 'Life Orb'].includes(item)) break;\n\t\t\t\tif (item !== 'Sitrus Berry' && hp % (4 / srWeakness) > 0) break;\n\t\t\t\t// Minimise number of Stealth Rock switch-ins to activate Sitrus Berry\n\t\t\t\tif (item === 'Sitrus Berry' && hp % (4 / srWeakness) === 0) break;\n\t\t\t}\n\t\t\tevs.hp -= 4;\n\t\t}\n\n\t\t// Minimize confusion damage\n\t\tif (!counter.get('Physical') && !moves.has('transform')) {\n\t\t\tevs.atk = 0;\n\t\t\tivs.atk = hasHiddenPower ? (ivs.atk || 31) - 28 : 0;\n\t\t}\n\n\t\tif (['gyroball', 'metalburst', 'trickroom'].some(m => moves.has(m))) {\n\t\t\tevs.spe = 0;\n\t\t\tivs.spe = hasHiddenPower ? (ivs.spe || 31) - 28 : 0;\n\t\t}\n\n\t\t// shuffle moves to add more randomness to camomons\n\t\tconst shuffledMoves = Array.from(moves);\n\t\tthis.prng.shuffle(shuffledMoves);\n\n\t\treturn {\n\t\t\tname: species.baseSpecies,\n\t\t\tspecies: forme,\n\t\t\tgender: species.gender,\n\t\t\tshiny: this.randomChance(1, 1024),\n\t\t\tlevel,\n\t\t\tmoves: shuffledMoves,\n\t\t\tability,\n\t\t\tevs,\n\t\t\tivs,\n\t\t\titem,\n\t\t\trole,\n\t\t};\n\t}\n}\n\nexport default RandomGen4Teams;\n"],
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAA4B;AAK5B,MAAM,iBAAiB;AAAA,EACtB;AAAA,EAAa;AAAA,EAAa;AAAA,EAAa;AAAA,EAAc;AAAA,EAAW;AAAA,EAAS;AAAA,EAAY;AAAA,EAAc;AACpG;AAEA,MAAM,iBAAiB;AAAA,EACtB;AAAA,EAAa;AAAA,EAAU;AAAA,EAAS;AAAA,EAAe;AAAA,EAAQ;AAAA,EAAY;AAAA,EAAW;AAC/E;AAEA,MAAM,QAAQ;AAAA,EACb;AAAA,EAAa;AAAA,EAAW;AAAA,EAAa;AAAA,EAAU;AAAA,EAAY;AAAA,EAAS;AAAA,EAAe;AAAA,EAAU;AAAA,EAAQ;AAAA,EACrG;AAAA,EAAY;AAAA,EAAa;AAAA,EAAa;AAAA,EAAc;AAAA,EAAY;AAAA,EAAe;AAChF;AAEA,MAAM,UAAU;AAAA,EACf;AAAA,EAAW;AAAA,EAAe;AAAA,EAAW;AAAA,EAAY;AAAA,EAAa;AAAA,EAAW;AAAA,EAAc;AAAA,EAAe;AAAA,EACtG;AAAA,EAAW;AAAA,EAAY;AAAA,EAAa;AAAA,EAAS;AAAA,EAAW;AAAA,EAAe;AAAA,EAAa;AAAA,EAAY;AAAA,EAChG;AAAA,EAAe;AAAA,EAAa;AAAA,EAAe;AAAA,EAAS;AAAA,EAAc;AACnE;AAEA,MAAM,UAAU;AAAA,EACf;AAAA,EAAU;AAAA,EAAe;AAC1B;AAGA,MAAM,aAAa;AAAA,EAClB,CAAC,eAAe,SAAS;AAAA,EACzB,CAAC,aAAa,MAAM;AAAA,EACpB,CAAC,WAAW,MAAM;AAAA,EAClB,CAAC,aAAa,YAAY;AAAA,EAC1B,CAAC,cAAc,YAAY;AAAA,EAC3B,CAAC,aAAa,MAAM;AACrB;AAGA,MAAM,mBAAmB;AAAA,EACxB;AAAA,EAAY;AAAA,EAAY;AAAA,EAAa;AAAA,EAAa;AAAA,EAAU;AAAA,EAAY;AACzE;AAEO,MAAM,wBAAwB,aAAAA,QAAgB;AAAA,EAGpD,YAAY,QAAyB,MAA8B;AAClE,UAAM,QAAQ,IAAI;AAHnB,sBAAwE,QAAQ,aAAa;AAI5F,SAAK,SAAS;AACd,SAAK,kBAAkB;AAEvB,SAAK,0BAA0B;AAAA,MAC9B,KAAK,CAAC,UAAU,OAAO,WAAW,OAAO,YACxC,CAAC,QAAQ,IAAI,KAAK,KAAK,SAAS,SAAS,UAAU;AAAA,MAEpD,MAAM,CAAC,UAAU,OAAO,WAAW,OAAO,YAAY,CAAC,QAAQ,IAAI,MAAM;AAAA,MACzE,QAAQ,CAAC,UAAU,OAAO,WAAW,OAAO,YAAY,CAAC,QAAQ,IAAI,QAAQ;AAAA,MAC7E,UAAU,CAAC,UAAU,OAAO,WAAW,OAAO,YAAY,CAAC,QAAQ,IAAI,UAAU;AAAA,MACjF,UAAU,CAAC,UAAU,OAAO,WAAW,OAAO,YAAY,CAAC,QAAQ,IAAI,UAAU;AAAA,MACjF,MAAM,CAAC,UAAU,OAAO,WAAW,OAAO,YAAY,CAAC,QAAQ,IAAI,MAAM;AAAA,MACzE,QAAQ,CAAC,UAAU,OAAO,WAAW,OAAO,SAAS,YAAY,CAAC,QAAQ,IAAI,QAAQ,KAAK,QAAQ,OAAO;AAAA,MAC1G,OAAO,CAAC,UAAU,OAAO,WAAW,OAAO,YAAY,CAAC,QAAQ,IAAI,OAAO;AAAA,MAC3E,OAAO,CAAC,UAAU,OAAO,WAAW,OAAO,SAAS,YACnD,CAAC,QAAQ,IAAI,OAAO,MACnB,QAAQ,UAAU,OAAO,OAAO,SAAS,SAAS,WAAW,KAAK,SAAS,SAAS,WAAW;AAAA,MAEjG,QAAQ,CAAC,UAAU,OAAO,WAAW,OAAO,YAAY,CAAC,QAAQ,IAAI,QAAQ;AAAA,MAC7E,KAAK,CAAC,UAAU,OAAO,WAAW,OAAO,YAAY,CAAC,QAAQ,IAAI,KAAK;AAAA,MACvE,QAAQ,CAAC,UAAU,OAAO,WAAW,OAAO,SAAS,YACpD,CAAC,QAAQ,IAAI,QAAQ,MAAM,MAAM,IAAI,OAAO,KAAK,QAAQ,OAAO;AAAA,MAEjE,SAAS,CAAC,UAAU,OAAO,WAAW,OAAO,YAC5C,CAAC,QAAQ,IAAI,SAAS,MAAM,MAAM,IAAI,UAAU,KAAK,SAAS,SAAS,UAAU;AAAA,MAElF,MAAM,CAAC,UAAU,OAAO,WAAW,OAAO,SAAS,YAAa,CAAC,QAAQ,IAAI,MAAM,KAAK,QAAQ,UAAU,OAAO;AAAA,MACjH,OAAO,CAAC,UAAU,OAAO,WAAW,OAAO,SAAS,YAAa,CAAC,QAAQ,IAAI,OAAO,KAAK,QAAQ,OAAO;AAAA,MACzG,OAAO,CAAC,UAAU,OAAO,WAAW,OAAO,YAAY,CAAC,QAAQ,IAAI,OAAO;AAAA,IAC5E;AACA,SAAK,oBAAoB,KAAK,IAAI,MAAM,IAAI,EAC1C,OAAO,UAAQ,KAAK,aAAa,QAAQ,EACzC,IAAI,UAAQ,KAAK,EAAE;AAAA,EACtB;AAAA,EAEA,aACC,OACA,OACA,WACA,SACA,UACA,aACA,SACA,QACA,eACA,MACO;AAEP,QAAI,iBAAiB;AACrB,eAAW,QAAQ,OAAO;AACzB,UAAI,KAAK,WAAW,aAAa;AAAG,yBAAiB;AAAA,IACtD;AACA,QAAI,gBAAgB;AACnB,UAAI,yBAAyB;AAC7B,aAAO,wBAAwB;AAC9B,iCAAyB;AACzB,mBAAW,UAAU,UAAU;AAC9B,cAAI,OAAO,WAAW,aAAa,GAAG;AACrC,iBAAK,QAAQ,UAAU,SAAS,QAAQ,MAAM,CAAC;AAC/C,qCAAyB;AACzB;AAAA,UACD;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAEA,QAAI,MAAM,OAAO,SAAS,UAAU,KAAK;AAAc;AAEvD,QAAI,MAAM,SAAS,KAAK,eAAe,GAAG;AACzC,YAAM,gBAAgB,CAAC,GAAG,QAAQ;AAClC,iBAAW,QAAQ,YAAY;AAC9B,YAAI,SAAS,SAAS,KAAK,CAAC,CAAC,KAAK,SAAS,SAAS,KAAK,CAAC,CAAC,GAAG;AAC7D,eAAK,QAAQ,eAAe,cAAc,QAAQ,KAAK,CAAC,CAAC,CAAC;AAC1D,eAAK,QAAQ,eAAe,cAAc,QAAQ,KAAK,CAAC,CAAC,CAAC;AAAA,QAC3D;AAAA,MACD;AACA,UAAI,cAAc,WAAW,GAAG;AAC/B,aAAK,QAAQ,UAAU,SAAS,QAAQ,cAAc,CAAC,CAAC,CAAC;AAAA,MAC1D;AAAA,IACD;AAGA,QAAI,MAAM,SAAS,KAAK,eAAe,GAAG;AACzC,iBAAW,QAAQ,YAAY;AAC9B,YAAI,SAAS,SAAS,KAAK,CAAC,CAAC,KAAK,SAAS,SAAS,KAAK,CAAC,CAAC,GAAG;AAC7D,eAAK,QAAQ,UAAU,SAAS,QAAQ,KAAK,CAAC,CAAC,CAAC;AAChD,eAAK,QAAQ,UAAU,SAAS,QAAQ,KAAK,CAAC,CAAC,CAAC;AAAA,QACjD;AAAA,MACD;AAAA,IACD;AAGA,QAAI,YAAY,WAAW,SAAS,UAAU,KAAK,eAAe,GAAG;AACpE,UAAI,SAAS,SAAS,SAAS;AAAG,aAAK,QAAQ,UAAU,SAAS,QAAQ,SAAS,CAAC;AACpF,UAAI,SAAS,SAAS,aAAa;AAAG,aAAK,QAAQ,UAAU,SAAS,QAAQ,aAAa,CAAC;AAC5F,UAAI,MAAM,OAAO,SAAS,UAAU,KAAK;AAAc;AAAA,IACxD;AACA,QAAI,YAAY,aAAa;AAC5B,UAAI,SAAS,SAAS,aAAa;AAAG,aAAK,QAAQ,UAAU,SAAS,QAAQ,aAAa,CAAC;AAC5F,UAAI,MAAM,OAAO,SAAS,UAAU,KAAK;AAAc;AAAA,IACxD;AACA,QAAI,YAAY,WAAW;AAC1B,UAAI,SAAS,SAAS,WAAW;AAAG,aAAK,QAAQ,UAAU,SAAS,QAAQ,WAAW,CAAC;AACxF,UAAI,MAAM,OAAO,SAAS,UAAU,KAAK;AAAc;AAAA,IACxD;AACA,QAAI,YAAY,aAAa;AAC5B,UAAI,SAAS,SAAS,aAAa;AAAG,aAAK,QAAQ,UAAU,SAAS,QAAQ,aAAa,CAAC;AAC5F,UAAI,MAAM,OAAO,SAAS,UAAU,KAAK;AAAc;AAAA,IACxD;AACA,QAAI,YAAY,UAAU,YAAY,UAAU,GAAG;AAClD,UAAI,SAAS,SAAS,QAAQ;AAAG,aAAK,QAAQ,UAAU,SAAS,QAAQ,QAAQ,CAAC;AAClF,UAAI,MAAM,OAAO,SAAS,UAAU,KAAK;AAAc;AAAA,IACxD;AACA,QAAI,YAAY,YAAY;AAC3B,UAAI,SAAS,SAAS,cAAc;AAAG,aAAK,QAAQ,UAAU,SAAS,QAAQ,cAAc,CAAC;AAC9F,UAAI,SAAS,SAAS,UAAU;AAAG,aAAK,QAAQ,UAAU,SAAS,QAAQ,UAAU,CAAC;AACtF,UAAI,MAAM,OAAO,SAAS,UAAU,KAAK;AAAc;AAAA,IACxD;AAGA,UAAM,eAAe,CAAC,WAAW,OAAO;AACxC,UAAM,cAAc,KAAK;AAGzB,UAAM,oBAAoB;AAAA;AAAA,MAEzB,CAAC,aAAa,CAAC,eAAe,cAAc,OAAO,CAAC;AAAA,MACpD,CAAC,OAAO,OAAO;AAAA,MACf,CAAC,OAAO,OAAO;AAAA,MACf,CAAC,OAAO,YAAY;AAAA,MACpB,CAAC,gBAAgB,cAAc;AAAA,MAC/B,CAAC,CAAC,WAAW,OAAO,GAAG,CAAC,cAAc,OAAO,CAAC;AAAA,MAC9C,CAAC,cAAc,OAAO;AAAA,MACtB,CAAC,QAAQ,YAAY;AAAA,MACrB,CAAC,aAAa,CAAC,eAAe,aAAa,QAAQ,OAAO,CAAC;AAAA;AAAA,MAG3D,CAAC,QAAQ,WAAW;AAAA,MACpB,CAAC,CAAC,YAAY,QAAQ,GAAG,CAAC,YAAY,YAAY,CAAC;AAAA,MACnD,CAAC,CAAC,cAAc,WAAW,GAAG,CAAC,aAAa,aAAa,WAAW,CAAC;AAAA,MACrE,CAAC,aAAa,WAAW;AAAA,MACzB,CAAC,eAAe,YAAY;AAAA,MAC5B,CAAC,aAAa,aAAa;AAAA,MAC3B,CAAC,YAAY,WAAW;AAAA,MACxB,CAAC,WAAW,SAAS;AAAA,MACrB,CAAC,WAAW,aAAa;AAAA;AAAA;AAAA,MAIzB,CAAC,gBAAgB,UAAU;AAAA;AAAA,MAE3B,CAAC,UAAU,MAAM;AAAA;AAAA,MAEjB,CAAC,aAAa,WAAW;AAAA;AAAA,MAEzB,CAAC,cAAc,aAAa;AAAA;AAAA,MAE5B,CAAC,YAAY,aAAa;AAAA;AAAA,MAE1B,CAAC,WAAW,YAAY;AAAA,IACzB;AAEA,eAAW,QAAQ;AAAmB,WAAK,kBAAkB,OAAO,UAAU,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC;AAE9F,UAAM,wBAAwB,CAAC,aAAa,eAAe,SAAS,aAAa,MAAM;AACvF,QAAI,SAAS,WAAW;AACvB,WAAK,kBAAkB,OAAO,UAAU,uBAAuB,qBAAqB;AAAA,IACrF;AAGA,QAAI,CAAC,YAAY,aAAa;AAC7B,UAAI,QAAQ,OAAO,eAAe,SAAS,WAAW;AACrD,YAAI,SAAS,SAAS,aAAa;AAAG,eAAK,QAAQ,UAAU,SAAS,QAAQ,aAAa,CAAC;AAC5F,YAAI,MAAM,OAAO,SAAS,UAAU,KAAK;AAAc;AAAA,MACxD;AACA,UAAI,QAAQ,OAAO,mBAAmB,SAAS,WAAW;AACzD,YAAI,SAAS,SAAS,aAAa;AAAG,eAAK,QAAQ,UAAU,SAAS,QAAQ,aAAa,CAAC;AAC5F,YAAI,MAAM,OAAO,SAAS,UAAU,KAAK;AAAc;AAAA,MACxD;AAAA,IACD;AAAA,EACD;AAAA;AAAA,EAGA,cACC,OACA,WACA,aACA,SACA,QACA,UACA,eACA,MACc;AACd,UAAM,QAAQ,oBAAI,IAAY;AAC9B,QAAI,UAAU,KAAK,cAAc,OAAO,SAAS,eAAe,SAAS;AACzE,SAAK;AAAA,MAAa;AAAA,MAAO;AAAA,MAAO;AAAA,MAAW;AAAA,MAAS;AAAA,MAAU;AAAA,MAAa;AAAA,MAAS;AAAA,MACnF;AAAA,MAAe;AAAA,IAAI;AAGpB,QAAI,SAAS,UAAU,KAAK,cAAc;AAEzC,aAAO,SAAS,QAAQ;AACvB,cAAM,SAAS,KAAK,OAAO,QAAQ;AACnC,kBAAU,KAAK;AAAA,UAAQ;AAAA,UAAQ;AAAA,UAAO;AAAA,UAAO;AAAA,UAAW;AAAA,UAAa;AAAA,UAAS;AAAA,UAC7E;AAAA,UAAU;AAAA,UAAe;AAAA,QAAI;AAAA,MAC/B;AACA,aAAO;AAAA,IACR;AAEA,UAAM,wBAAwB,CAAC,gBAAwB;AACtD,UAAI,CAAC,KAAK,wBAAwB,WAAW;AAAG,eAAO;AACvD,aAAO,KAAK,wBAAwB,WAAW;AAAA,QAC9C;AAAA,QAAU;AAAA,QAAO;AAAA,QAAW,IAAI,IAAI,KAAK;AAAA,QAAG;AAAA,QAAS;AAAA,QAAS;AAAA,MAC/D;AAAA,IACD;AAGA,QAAI,QAAQ,cAAc;AACzB,YAAM,OAAO,KAAK,IAAI,MAAM,IAAI,QAAQ,YAAY,EAAE;AACtD,gBAAU,KAAK;AAAA,QAAQ;AAAA,QAAM;AAAA,QAAO;AAAA,QAAO;AAAA,QAAW;AAAA,QAAa;AAAA,QAAS;AAAA,QAC3E;AAAA,QAAU;AAAA,QAAe;AAAA,MAAI;AAAA,IAC/B;AAKA,QAAI,SAAS,SAAS,QAAQ,KAAK,UAAU,SAAS,MAAM,GAAG;AAC9D,gBAAU,KAAK;AAAA,QAAQ;AAAA,QAAU;AAAA,QAAO;AAAA,QAAO;AAAA,QAAW;AAAA,QAAa;AAAA,QAAS;AAAA,QAC/E;AAAA,QAAU;AAAA,QAAe;AAAA,MAAI;AAAA,IAC/B;AAGA,eAAW,UAAU,CAAC,eAAe,SAAS,YAAY,GAAG;AAC5D,UAAI,SAAS,SAAS,MAAM,GAAG;AAC9B,kBAAU,KAAK;AAAA,UAAQ;AAAA,UAAQ;AAAA,UAAO;AAAA,UAAO;AAAA,UAAW;AAAA,UAAa;AAAA,UAAS;AAAA,UAC7E;AAAA,UAAU;AAAA,UAAe;AAAA,QAAI;AAAA,MAC/B;AAAA,IACD;AAGA,QAAI,CAAC,KAAK,SAAS,OAAO,GAAG;AAC5B,UAAI,SAAS,SAAS,WAAW,KAAK,SAAS,SAAS,YAAY,GAAG;AACtE,kBAAU,KAAK;AAAA,UAAQ;AAAA,UAAc;AAAA,UAAO;AAAA,UAAO;AAAA,UAAW;AAAA,UAAa;AAAA,UAAS;AAAA,UACnF;AAAA,UAAU;AAAA,UAAe;AAAA,QAAI;AAAA,MAC/B;AAAA,IACD;AAGA,QAAI,CAAC,iBAAiB,SAAS,EAAE,SAAS,IAAI,KAAK,CAAC,YAAY,WAAW;AAC1E,UAAI,SAAS,SAAS,WAAW,GAAG;AACnC,kBAAU,KAAK;AAAA,UAAQ;AAAA,UAAa;AAAA,UAAO;AAAA,UAAO;AAAA,UAAW;AAAA,UAAa;AAAA,UAAS;AAAA,UAClF;AAAA,UAAU;AAAA,UAAe;AAAA,QAAI;AAAA,MAC/B;AAAA,IACD;AAGA,QAAI,CAAC,kBAAkB,aAAa,EAAE,SAAS,IAAI,KAAK,KAAK,gBAAgB,SAAS,QAAQ,EAAE,GAAG;AAClG,YAAM,gBAAgB,CAAC;AACvB,iBAAW,UAAU,UAAU;AAC9B,cAAM,OAAO,KAAK,IAAI,MAAM,IAAI,MAAM;AACtC,cAAM,WAAW,KAAK,YAAY,MAAM,SAAS,WAAW,aAAa;AACzE,YAAI,MAAM,SAAS,QAAQ,KAAK,KAAK,WAAW,MAAM,KAAK,aAAa,KAAK,oBAAoB;AAChG,wBAAc,KAAK,MAAM;AAAA,QAC1B;AAAA,MACD;AACA,UAAI,cAAc,QAAQ;AACzB,cAAM,SAAS,KAAK,OAAO,aAAa;AACxC,kBAAU,KAAK;AAAA,UAAQ;AAAA,UAAQ;AAAA,UAAO;AAAA,UAAO;AAAA,UAAW;AAAA,UAAa;AAAA,UAAS;AAAA,UAC7E;AAAA,UAAU;AAAA,UAAe;AAAA,QAAI;AAAA,MAC/B;AAAA,IACD;AAGA,eAAW,QAAQ,OAAO;AAEzB,YAAM,YAAY,CAAC;AACnB,iBAAW,UAAU,UAAU;AAC9B,cAAM,OAAO,KAAK,IAAI,MAAM,IAAI,MAAM;AACtC,cAAM,WAAW,KAAK,YAAY,MAAM,SAAS,WAAW,aAAa;AACzE,YAAI,CAAC,KAAK,OAAO,SAAS,MAAM,MAAM,KAAK,aAAa,KAAK,sBAAsB,SAAS,UAAU;AACrG,oBAAU,KAAK,MAAM;AAAA,QACtB;AAAA,MACD;AACA,aAAO,sBAAsB,IAAI,GAAG;AACnC,YAAI,CAAC,UAAU;AAAQ;AACvB,cAAM,SAAS,KAAK,gBAAgB,SAAS;AAC7C,kBAAU,KAAK;AAAA,UAAQ;AAAA,UAAQ;AAAA,UAAO;AAAA,UAAO;AAAA,UAAW;AAAA,UAAa;AAAA,UAAS;AAAA,UAC7E;AAAA,UAAU;AAAA,UAAe;AAAA,QAAI;AAAA,MAC/B;AAAA,IACD;AAGA,QAAI,CAAC,QAAQ,IAAI,WAAW,GAAG;AAC9B,YAAM,YAAY,CAAC;AACnB,iBAAW,UAAU,UAAU;AAC9B,cAAM,OAAO,KAAK,IAAI,MAAM,IAAI,MAAM;AACtC,cAAM,WAAW,KAAK,YAAY,MAAM,SAAS,WAAW,aAAa;AACzE,YAAI,CAAC,KAAK,OAAO,SAAS,MAAM,MAAM,KAAK,aAAa,KAAK,sBAAsB,kBAAkB,UAAU;AAC9G,oBAAU,KAAK,MAAM;AAAA,QACtB;AAAA,MACD;AACA,UAAI,UAAU,QAAQ;AACrB,cAAM,SAAS,KAAK,OAAO,SAAS;AACpC,kBAAU,KAAK;AAAA,UAAQ;AAAA,UAAQ;AAAA,UAAO;AAAA,UAAO;AAAA,UAAW;AAAA,UAAa;AAAA,UAAS;AAAA,UAC7E;AAAA,UAAU;AAAA,UAAe;AAAA,QAAI;AAAA,MAC/B;AAAA,IACD;AAGA,QAAI,CAAC,QAAQ,IAAI,MAAM,GAAG;AACzB,YAAM,YAAY,CAAC;AACnB,iBAAW,UAAU,UAAU;AAC9B,cAAM,OAAO,KAAK,IAAI,MAAM,IAAI,MAAM;AACtC,cAAM,WAAW,KAAK,YAAY,MAAM,SAAS,WAAW,aAAa;AACzE,YAAI,CAAC,KAAK,OAAO,SAAS,MAAM,MAAM,KAAK,aAAa,KAAK,sBAAsB,MAAM,SAAS,QAAQ,GAAG;AAC5G,oBAAU,KAAK,MAAM;AAAA,QACtB;AAAA,MACD;AACA,UAAI,UAAU,QAAQ;AACrB,cAAM,SAAS,KAAK,OAAO,SAAS;AACpC,kBAAU,KAAK;AAAA,UAAQ;AAAA,UAAQ;AAAA,UAAO;AAAA,UAAO;AAAA,UAAW;AAAA,UAAa;AAAA,UAAS;AAAA,UAC7E;AAAA,UAAU;AAAA,UAAe;AAAA,QAAI;AAAA,MAC/B,OAAO;AAEN,YAAI,SAAS,SAAS,OAAO,KAAK,MAAM,SAAS,KAAK,GAAG;AACxD,oBAAU,KAAK;AAAA,YAAQ;AAAA,YAAS;AAAA,YAAO;AAAA,YAAO;AAAA,YAAW;AAAA,YAAa;AAAA,YAAS;AAAA,YAC9E;AAAA,YAAU;AAAA,YAAe;AAAA,UAAI;AAAA,QAC/B;AAAA,MACD;AAAA,IACD;AAGA,QAAI,CAAC,iBAAiB,kBAAkB,eAAe,WAAW,SAAS,EAAE,SAAS,IAAI,GAAG;AAC5F,YAAM,gBAAgB,SAAS,OAAO,YAAU,eAAe,SAAS,MAAM,CAAC;AAC/E,UAAI,cAAc,QAAQ;AACzB,cAAM,SAAS,KAAK,OAAO,aAAa;AACxC,kBAAU,KAAK;AAAA,UAAQ;AAAA,UAAQ;AAAA,UAAO;AAAA,UAAO;AAAA,UAAW;AAAA,UAAa;AAAA,UAAS;AAAA,UAC7E;AAAA,UAAU;AAAA,UAAe;AAAA,QAAI;AAAA,MAC/B;AAAA,IACD;AAGA,QAAI,SAAS,WAAW;AACvB,YAAM,gBAAgB,CAAC,WAAW,SAAS,MAAM;AACjD,iBAAW,QAAQ,eAAe;AACjC,YAAI,SAAS,SAAS,IAAI,GAAG;AAC5B,oBAAU,KAAK;AAAA,YAAQ;AAAA,YAAM;AAAA,YAAO;AAAA,YAAO;AAAA,YAAW;AAAA,YAAa;AAAA,YAAS;AAAA,YAC3E;AAAA,YAAU;AAAA,YAAe;AAAA,UAAI;AAAA,QAC/B;AAAA,MACD;AAAA,IACD;AAGA,QAAI,KAAK,SAAS,OAAO,GAAG;AAC3B,YAAM,aAAa,SAAS,OAAO,YAAU,MAAM,SAAS,MAAM,CAAC;AACnE,UAAI,WAAW,QAAQ;AACtB,cAAM,SAAS,KAAK,OAAO,UAAU;AACrC,kBAAU,KAAK;AAAA,UAAQ;AAAA,UAAQ;AAAA,UAAO;AAAA,UAAO;AAAA,UAAW;AAAA,UAAa;AAAA,UAAS;AAAA,UAC7E;AAAA,UAAU;AAAA,UAAe;AAAA,QAAI;AAAA,MAC/B;AAAA,IACD;AAGA,QAAI,CAAC,QAAQ,cAAc,QAAQ,EAAE,MAAM,IAAI,OAAO,KAAK,MAAM,SAAS,KAAK,IAAI;AAElF,YAAM,iBAAiB,CAAC;AACxB,iBAAW,UAAU,UAAU;AAC9B,cAAM,OAAO,KAAK,IAAI,MAAM,IAAI,MAAM;AACtC,YAAI,CAAC,KAAK,OAAO,SAAS,MAAM,KAAM,KAAK,aAAa;AAAW,yBAAe,KAAK,MAAM;AAAA,MAC9F;AACA,UAAI,eAAe,QAAQ;AAC1B,cAAM,SAAS,KAAK,OAAO,cAAc;AACzC,kBAAU,KAAK;AAAA,UAAQ;AAAA,UAAQ;AAAA,UAAO;AAAA,UAAO;AAAA,UAAW;AAAA,UAAa;AAAA,UAAS;AAAA,UAC7E;AAAA,UAAU;AAAA,UAAe;AAAA,QAAI;AAAA,MAC/B;AAAA,IACD;AAGA,QAAI,CAAC,iBAAiB,iBAAiB,kBAAkB,aAAa,EAAE,SAAS,IAAI,GAAG;AACvF,UAAI,QAAQ,cAAc,SAAS,GAAG;AAErC,cAAM,oBAAoB,QAAQ,cAAc,OAAO,EAAE,KAAK,EAAE,MAAO;AAEvE,cAAM,gBAAgB,CAAC;AACvB,mBAAW,UAAU,UAAU;AAC9B,gBAAM,OAAO,KAAK,IAAI,MAAM,IAAI,MAAM;AACtC,gBAAM,WAAW,KAAK,YAAY,MAAM,SAAS,WAAW,aAAa;AACzE,cAAI,CAAC,KAAK,OAAO,SAAS,MAAM,MAAM,KAAK,aAAa,KAAK,oBAAoB;AAChF,gBAAI,sBAAsB;AAAU,4BAAc,KAAK,MAAM;AAAA,UAC9D;AAAA,QACD;AACA,YAAI,cAAc,QAAQ;AACzB,gBAAM,SAAS,KAAK,OAAO,aAAa;AACxC,oBAAU,KAAK;AAAA,YAAQ;AAAA,YAAQ;AAAA,YAAO;AAAA,YAAO;AAAA,YAAW;AAAA,YAAa;AAAA,YAAS;AAAA,YAC7E;AAAA,YAAU;AAAA,YAAe;AAAA,UAAI;AAAA,QAC/B;AAAA,MACD;AAAA,IACD;AAGA,WAAO,MAAM,OAAO,KAAK,gBAAgB,SAAS,QAAQ;AACzD,YAAM,SAAS,KAAK,OAAO,QAAQ;AACnC,gBAAU,KAAK;AAAA,QAAQ;AAAA,QAAQ;AAAA,QAAO;AAAA,QAAO;AAAA,QAAW;AAAA,QAAa;AAAA,QAAS;AAAA,QAC7E;AAAA,QAAU;AAAA,QAAe;AAAA,MAAI;AAC9B,iBAAW,QAAQ,YAAY;AAC9B,YAAI,WAAW,KAAK,CAAC,KAAK,SAAS,SAAS,KAAK,CAAC,CAAC,GAAG;AACrD,oBAAU,KAAK;AAAA,YAAQ,KAAK,CAAC;AAAA,YAAG;AAAA,YAAO;AAAA,YAAO;AAAA,YAAW;AAAA,YAAa;AAAA,YAAS;AAAA,YAC9E;AAAA,YAAU;AAAA,YAAe;AAAA,UAAI;AAAA,QAC/B;AACA,YAAI,WAAW,KAAK,CAAC,KAAK,SAAS,SAAS,KAAK,CAAC,CAAC,GAAG;AACrD,oBAAU,KAAK;AAAA,YAAQ,KAAK,CAAC;AAAA,YAAG;AAAA,YAAO;AAAA,YAAO;AAAA,YAAW;AAAA,YAAa;AAAA,YAAS;AAAA,YAC9E;AAAA,YAAU;AAAA,YAAe;AAAA,UAAI;AAAA,QAC/B;AAAA,MACD;AAAA,IACD;AACA,WAAO;AAAA,EACR;AAAA,EAEA,kBACC,SACA,OACA,OACA,WACA,SACA,UACA,aACA,SACA,eACA,MACU;AACV,YAAQ,SAAS;AAAA,MACjB,KAAK;AACJ,eAAO,CAAC,YAAY;AAAA,MACrB,KAAK;AACJ,eAAO,CAAC,YAAY;AAAA,MACrB,KAAK;AACJ,eAAO,CAAC,QAAQ,IAAI,QAAQ;AAAA,MAC7B,KAAK;AACJ,eAAO,CAAC,QAAQ,IAAI,WAAW;AAAA,IAChC;AAEA,WAAO;AAAA,EACR;AAAA,EAEA,WACC,OACA,OACA,WACA,SACA,UACA,aACA,SACA,eACA,MACS;AACT,QAAI,UAAU,UAAU;AAAG,aAAO,UAAU,CAAC;AAG7C,QAAI,QAAQ,OAAO;AAAW,aAAO,MAAM,IAAI,WAAW,IAAI,cAAc;AAC5E,QAAI,QAAQ,OAAO,cAAc,QAAQ,IAAI,WAAW;AAAG,aAAO;AAElE,UAAM,iBAA2B,CAAC;AAElC,eAAW,WAAW,WAAW;AAChC,UAAI,CAAC,KAAK;AAAA,QACT;AAAA,QAAS;AAAA,QAAO;AAAA,QAAO;AAAA,QAAW;AAAA,QAAS;AAAA,QAAU;AAAA,QAAa;AAAA,QAAS;AAAA,QAAe;AAAA,MAC3F,GAAG;AACF,uBAAe,KAAK,OAAO;AAAA,MAC5B;AAAA,IACD;AAGA,QAAI,eAAe,UAAU;AAAG,aAAO,KAAK,OAAO,cAAc;AAGjE,QAAI,CAAC,eAAe,QAAQ;AAC3B,YAAM,mBAAmB,UAAU,OAAO,OAAK,CAAC,eAAe,YAAY,EAAE,SAAS,CAAC,CAAC;AACxF,UAAI,iBAAiB;AAAQ,eAAO,KAAK,OAAO,gBAAgB;AAAA,IACjE;AAGA,WAAO,KAAK,OAAO,SAAS;AAAA,EAC7B;AAAA,EAEA,gBACC,SACA,OACA,OACA,SACA,aACA,SACA,QACA,eACA,MACqB;AACrB,QAAI,QAAQ;AAAe,aAAO,KAAK,OAAO,QAAQ,aAAa;AACnE,QAAI,QAAQ,OAAO,YAAY,QAAQ,OAAO;AAAU,aAAO;AAC/D,QAAI,QAAQ,OAAO;AAAW,aAAO;AACrC,QAAI,QAAQ,OAAO;AAAW,aAAO;AACrC,QAAI,QAAQ,OAAO,cAAc,QAAQ,OAAO;AAAY,aAAO;AACnE,QAAI,QAAQ,OAAO;AAAS,aAAO;AACnC,QAAI,QAAQ,OAAO;AAAa,aAAO;AACvC,QAAI,QAAQ,OAAO,WAAY,QAAQ,OAAO,eAAe,SAAS;AAAkB,aAAO;AAC/F,QAAI,YAAY,iBAAiB,MAAM,IAAI,QAAQ;AAAG,aAAO;AAC7D,QAAI,YAAY,iBAAiB,QAAQ,OAAO;AAAW,aAAO;AAClE,QAAI,CAAC,eAAe,cAAc,OAAO,EAAE,KAAK,OAAK,MAAM,IAAI,CAAC,CAAC,GAAG;AACnE,UACC,QAAQ,UAAU,OAAO,MAAM,QAAQ,UAAU,OAAO,OAAO,SAAS,iBAAiB,CAAC,QAAQ,IAAI,UAAU,GAC/G;AACD,eAAO;AAAA,MACR,OAAO;AACN,eAAQ,QAAQ,IAAI,UAAU,IAAI,QAAQ,IAAI,SAAS,IAAK,gBAAgB;AAAA,MAC7E;AAAA,IACD;AACA,QAAI,MAAM,IAAI,WAAW;AAAG,aAAO;AACnC,QAAI,MAAM,IAAI,YAAY;AAAG,aAAO;AACpC,QAAI,YAAY;AAAe,aAAO;AACtC,QAAI,MAAM,IAAI,aAAa,KAAK,MAAM,IAAI,SAAS;AAAG,aAAO;AAC7D,QAAI,MAAM,IAAI,MAAM,KAAK,CAAC,MAAM,IAAI,WAAW,KAAK,CAAC,CAAC,gBAAgB,WAAW,EAAE,SAAS,OAAO,GAAG;AACrG,aAAQ,MAAM,IAAI,WAAW,KAAK,YAAY,cAAe,cAAc;AAAA,IAC5E;AACA,QAAI,YAAY;AAAY,aAAO;AACnC,QAAI,SAAS;AAAW,aAAO;AAAA,EAChC;AAAA,EAEA,QACC,SACA,OACA,OACA,SACA,aACA,SACA,QACA,eACA,MACS;AACT,UAAM,qBAAqB,QAAQ,UAAU,KAAK,QAAQ,UAAU,MAAM,QAAQ,UAAU;AAE5F,UAAM,YACL,SAAS,iBACT,QAAQ,UAAU,OAAO,MAAM,QAAQ,UAAU,OAAO,OACxD,CAAC,QAAQ,IAAI,UAAU,KAAK,CAAC,MAAM,IAAI,SAAS;AAGjD,QACC,MAAM,IAAI,SAAS,KAAK,MAAM,IAAI,aAAa,KAAK,QAAQ,IAAI,MAAM,MACrE,CAAC,KAAK,gBAAgB,SAAS,QAAQ,EAAE,KAAK,QAAQ,IAAI,MAAM,KAAK;AACrE,aAAO;AACT,QAAI,QAAQ,IAAI,SAAS,MAAM,GAAG;AACjC,aACC,aAAa,QAAQ,UAAU,OAAO,MAAM,KAAK,aAAa,GAAG,CAAC,IAC/D,iBAAiB;AAAA,IACtB;AACA,QACC,QAAQ,IAAI,SAAS,MAAM,KAAK,SAAS,oBAAoB,MAAM,IAAI,WAAW,KAAK,MAAM,IAAI,cAAc;AAC9G,aAAO;AACT,QAAI,QAAQ,IAAI,SAAS,MAAM,KAAK,MAAM,IAAI,OAAO;AAAG,aAAO;AAC/D,QAAI,QAAQ,IAAI,UAAU,MAAM,KAAK,QAAQ,OAAO,aACnD,CAAC,WAAW,WAAW,EAAE,MAAM,OAAK,CAAC,MAAM,IAAI,CAAC,CAAC,GAChD;AACD,aACC,cAAc,QAAQ,UAAU,OAAO,OAAO,YAAY,gBAAgB,YAAY,iBACtF,KAAK,aAAa,GAAG,CAAC,IACnB,iBAAiB;AAAA,IACtB;AAEA,QAAI,MAAM,SAAS,QAAQ,KAAK,MAAM,IAAI,SAAS,KAAK,CAAC,CAAC,QAAQ,IAAI,QAAQ;AAAG,aAAO;AACxF,QAAI,QAAQ,OAAO;AAAU,aAAO;AACpC,QAAI,QAAQ,OAAO;AAAa,aAAO;AACvC,QAAI,MAAM,IAAI,SAAS,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,MAAM,IAAI,WAAW;AAAG,aAAO;AACpF,QAAI,CAAC,aAAa,WAAW,YAAY,EAAE,KAAK,OAAK,MAAM,IAAI,CAAC,CAAC;AAAG,aAAO;AAC3E,QACC,SAAS,kBAAkB,UAAU,qBAAqB,OAAO,CAAC,QAAQ,IAAI,UAAU,MACvF,QAAQ,IAAI,SAAS,KAAK,QAAQ,IAAI,OAAO,OAAO,CAAC,QAAQ,IAAI,QAAQ,KAAK,YAAY;AAC1F,aAAO;AAGT,QAAI,SAAS,gBAAgB;AAC5B,aACC,QAAQ,IAAI,UAAU,IAAI,QAAQ,IAAI,SAAS,KAAK,KACpD,CAAC,aAAa,OAAO,EAAE,MAAM,OAAK,CAAC,MAAM,IAAI,CAAC,CAAC,KAC/C,KAAK,IAAI,iBAAiB,QAAQ,OAAO,IAAI,IAC1C,aAAa;AAAA,IAClB;AAEA,UAAM,oBAAoB,KAAK,OAAO;AAAA,MACrC,YAAU,CAAC,UAAU,UAAU,QAAQ,EAAE,SAAS,KAAK,IAAI,MAAM,IAAI,MAAM,EAAE,IAAI;AAAA,IAClF;AACA,UAAM,iBACL,CAAC,QAAQ,IAAI,QAAQ,KAAK,CAAC,QAAQ,IAAI,QAAQ,KAAK,CAAC,QAAQ,IAAI,QAAQ,KACzE,kBAAkB,MAAM,OAAK,CAAC,MAAM,IAAI,CAAC,CAAC;AAE3C,QAAI,CAAC,QAAQ,IAAI,QAAQ,KAAK,mBAAmB,MAAM,IAAI,OAAO,KAAK,SAAS;AAAkB,aAAO;AACzG,QACC,CAAC,iBAAiB,iBAAiB,aAAa,EAAE,KAAK,OAAK,SAAS,CAAC,KACtE,KAAK,IAAI,iBAAiB,QAAQ,OAAO,IAAI,KAAK,CAAC,MAAM,IAAI,WAAW;AACvE,aAAO;AACT,WAAO;AAAA,EACR;AAAA,EAEA,UACC,SACA,cAA4C,CAAC,GAC7C,SAAS,OACoB;AAC7B,cAAU,KAAK,IAAI,QAAQ,IAAI,OAAO;AACtC,UAAM,QAAQ,KAAK,SAAS,OAAO;AACnC,UAAM,OAAO,KAAK,WAAW,QAAQ,EAAE,EAAE,MAAM;AAC/C,UAAM,eAAe,CAAC;AAEtB,QAAI,aAAa;AACjB,eAAWC,QAAO,MAAM;AACvB,UAAI,CAAC,YAAY,aAAaA,KAAI,SAAS;AAAW,qBAAa;AAAA,IACpE;AACA,eAAWA,QAAO,MAAM;AAEvB,UAAI,YAAY,aAAaA,KAAI,SAAS;AAAW;AAErD,UAAI,cAAcA,KAAI,SAAS;AAAW;AAC1C,mBAAa,KAAKA,IAAG;AAAA,IACtB;AACA,UAAM,MAAM,KAAK,cAAc,YAAY;AAC3C,UAAM,OAAO,IAAI;AACjB,UAAM,WAAqB,MAAM,KAAK,IAAI,QAAQ;AAClD,UAAM,iBAAiB,IAAI;AAC3B,UAAM,gBAAgB,KAAK,cAAc,cAAc,KAAK;AAE5D,QAAI,UAAU;AACd,QAAI,OAAO;AAEX,UAAM,MAAM,EAAE,IAAI,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,GAAG;AAClE,UAAM,MAAM,EAAE,IAAI,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,GAAG;AAElE,UAAM,QAAQ,QAAQ;AACtB,UAAM,YAAY,IAAI;AAGtB,UAAM,QAAQ,KAAK;AAAA,MAAc;AAAA,MAAO;AAAA,MAAW;AAAA,MAAa;AAAA,MAAS;AAAA,MAAQ;AAAA,MAChF;AAAA,MAAe;AAAA,IAAI;AACpB,UAAM,UAAU,KAAK,cAAc,OAAO,SAAS,eAAe,SAAS;AAG3E,cAAU,KAAK;AAAA,MAAW,IAAI,IAAI,KAAK;AAAA,MAAG;AAAA,MAAO;AAAA,MAAW;AAAA,MAAS;AAAA,MAAU;AAAA,MAAa;AAAA,MAC3F;AAAA,MAAe;AAAA,IAAI;AAGpB,WAAO,KAAK,gBAAgB,SAAS,OAAO,OAAO,SAAS,aAAa,SAAS,QAAQ,eAAe,IAAI;AAC7G,QAAI,SAAS,QAAW;AACvB,aAAO,KAAK,QAAQ,SAAS,OAAO,OAAO,SAAS,aAAa,SAAS,QAAQ,eAAe,IAAI;AAAA,IACtG;AAGA,QAAI,SAAS,eAAe,MAAM,SAAS,QAAQ,GAAG;AACrD,aAAO;AAAA,IACR;AAEA,UAAM,QAAQ,KAAK,SAAS,OAAO;AAInC,QAAI,iBAAiB;AACrB,eAAW,QAAQ,OAAO;AACzB,UAAI,KAAK,WAAW,aAAa;AAAG,yBAAiB;AAAA,IACtD;AAEA,QAAI,gBAAgB;AACnB,UAAI;AACJ,iBAAW,QAAQ,OAAO;AACzB,YAAI,KAAK,WAAW,aAAa;AAAG,mBAAS,KAAK,OAAO,EAAE;AAAA,MAC5D;AACA,UAAI,CAAC;AAAQ,cAAM,IAAI,MAAM,6DAA6D;AAC1F,YAAM,QAAQ,KAAK,IAAI,MAAM,IAAI,MAAM,EAAE;AACzC,UAAI;AACJ,WAAK,MAAM,OAAO;AACjB,YAAI,EAAE,IAAI,MAAM,EAAE;AAAA,MACnB;AAAA,IACD;AAGA,UAAM,aAAa,YAAY;AAC/B,UAAM,aAAa,aAAa,IAAI,KAAK,IAAI,iBAAiB,QAAQ,OAAO;AAC7E,WAAO,IAAI,KAAK,GAAG;AAClB,YAAM,KAAK,KAAK,MAAM,KAAK,MAAM,IAAI,QAAQ,UAAU,KAAK,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,GAAG,IAAI,QAAQ,MAAM,EAAE;AACrH,UAAI,MAAM,IAAI,YAAY,KAAK,SAAS,gBAAgB;AAEvD,YAAI,KAAK,MAAM;AAAG;AAAA,MACnB,WAAW,MAAM,IAAI,WAAW,KAAK,SAAS,gBAAgB;AAE7D,YAAI,KAAK,MAAM;AAAG;AAAA,MACnB,OAAO;AAEN,YAAI,cAAc;AAAG;AACrB,YAAI,eAAe,KAAK,CAAC,gBAAgB,aAAa,UAAU,EAAE,SAAS,IAAI;AAAG;AAClF,YAAI,SAAS,kBAAkB,MAAM,IAAI,cAAc;AAAG;AAE1D,YAAI,SAAS,kBAAkB,MAAM,IAAI,gBAAgB;AAAG;AAAA,MAC7D;AACA,UAAI,MAAM;AAAA,IACX;AAGA,QAAI,CAAC,QAAQ,IAAI,UAAU,KAAK,CAAC,MAAM,IAAI,WAAW,GAAG;AACxD,UAAI,MAAM;AACV,UAAI,MAAM,kBAAkB,IAAI,OAAO,MAAM,KAAK;AAAA,IACnD;AAEA,QAAI,CAAC,YAAY,cAAc,WAAW,EAAE,KAAK,OAAK,MAAM,IAAI,CAAC,CAAC,GAAG;AACpE,UAAI,MAAM;AACV,UAAI,MAAM,kBAAkB,IAAI,OAAO,MAAM,KAAK;AAAA,IACnD;AAGA,UAAM,gBAAgB,MAAM,KAAK,KAAK;AACtC,SAAK,KAAK,QAAQ,aAAa;AAE/B,WAAO;AAAA,MACN,MAAM,QAAQ;AAAA,MACd,SAAS;AAAA,MACT,QAAQ,QAAQ;AAAA,MAChB,OAAO,KAAK,aAAa,GAAG,IAAI;AAAA,MAChC;AAAA,MACA,OAAO;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,EACD;AACD;AAEA,IAAO,gBAAQ;",
"names": ["RandomGen5Teams", "set"]
}