diff --git a/.gitignore b/.gitignore index 28ed146..a3c0a35 100644 --- a/.gitignore +++ b/.gitignore @@ -33,4 +33,5 @@ report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json # Finder (MacOS) folder config .DS_Store -**/venv \ No newline at end of file +**/venv +images \ No newline at end of file diff --git a/README.md b/README.md index e7e47ef..2c9fbee 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,43 @@ -# desktop +# Bun Server -To install dependencies: +Install dependencies: ```bash bun install ``` -To run: +Run: ```bash -bun run index.ts +bun run src/index.ts ``` -This project was created using `bun init` in bun v1.3.5. [Bun](https://bun.com) is a fast all-in-one JavaScript runtime. +# Python Service + +Run: + +```bash +venv/Scripts/Activate.ps1 +``` +```bash +python python_service/app.py +``` + +# BACKEND DATA GENERATION + +Update index / embeddings / ids for (new) cards: + +1. update cards in `\images\cards` +2. activate venv: + +```bash +venv/Scripts/Activate.ps1 +``` + +3. run python script: + +```bash + python encodeImages.py +``` + +4. great success \ No newline at end of file diff --git a/bun.lock b/bun.lock index 9f52cc2..8115c81 100644 --- a/bun.lock +++ b/bun.lock @@ -5,7 +5,7 @@ "": { "name": "desktop", "devDependencies": { - "@types/bun": "latest", + "@types/bun": "^1.3.6", }, "peerDependencies": { "typescript": "^5", @@ -13,11 +13,11 @@ }, }, "packages": { - "@types/bun": ["@types/bun@1.3.5", "", { "dependencies": { "bun-types": "1.3.5" } }, "sha512-RnygCqNrd3srIPEWBd5LFeUYG7plCoH2Yw9WaZGyNmdTEei+gWaHqydbaIRkIkcbXwhBT94q78QljxN0Sk838w=="], + "@types/bun": ["@types/bun@1.3.6", "", { "dependencies": { "bun-types": "1.3.6" } }, "sha512-uWCv6FO/8LcpREhenN1d1b6fcspAB+cefwD7uti8C8VffIv0Um08TKMn98FynpTiU38+y2dUO55T11NgDt8VAA=="], "@types/node": ["@types/node@25.0.3", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA=="], - "bun-types": ["bun-types@1.3.5", "", { "dependencies": { "@types/node": "*" } }, "sha512-inmAYe2PFLs0SUbFOWSVD24sg1jFlMPxOjOSSCYqUgn4Hsc3rDc7dFvfVYjFPNHtov6kgUeulV4SxbuIV/stPw=="], + "bun-types": ["bun-types@1.3.6", "", { "dependencies": { "@types/node": "*" } }, "sha512-OlFwHcnNV99r//9v5IIOgQ9Uk37gZqrNMCcqEaExdkVq3Avwqok1bJFmvGMCkCE0FqzdY8VMOZpfpR3lwI+CsQ=="], "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..68ec01c --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,15 @@ +version: "3.9" + +services: + pkmtcg-backend: + build: . + container_name: pkmtcg-backend + ports: + - "3333:3000" + environment: + IMAGES_DIR: /images/cards + FAISS_DIR: /faiss + volumes: + - ./data/images:/images/cards # host ./data/images => container /images/cards + - ./data/faiss:/faiss # host ./data/faiss => container /faiss + restart: unless-stopped diff --git a/dockerfile b/dockerfile index 1b74e2b..c00570b 100644 --- a/dockerfile +++ b/dockerfile @@ -11,14 +11,22 @@ RUN apt-get update && apt-get install -y \ RUN curl -fsSL https://bun.sh/install | bash ENV PATH="/root/.bun/bin:${PATH}" +# --- Upgrade pip --- +RUN pip3 install --upgrade pip + # --- Install Python dependencies --- RUN pip3 install --upgrade pip -RUN pip3 install torch --index-url https://download.pytorch.org/whl/cpu -RUN pip3 install --no-cache-dir fastapi uvicorn pillow open-clip-torch numpy faiss-cpu python-multipart +RUN pip3 install fastapi uvicorn pillow torch open-clip-torch numpy faiss-cpu python-multipart + +# --- Set working directory --- +WORKDIR /app + +# --- Create directories for external data --- +RUN mkdir -p /images/cards /faiss # --- Copy project files --- WORKDIR /app -COPY python_service ./python_service +COPY python_service/app.py ./python_service/app.py COPY src ./src COPY package.json . COPY bun.lock . @@ -26,6 +34,10 @@ COPY bun.lock . # --- Expose ports --- EXPOSE 3000 +# --- Environment variables for external paths --- +ENV IMAGES_DIR=/images/cards +ENV FAISS_DIR=/faiss + # --- Start services --- -# Use & to run Python worker in background, Bun frontend as main process +# Python FAISS worker runs in background, Bun frontend as main process CMD python3 python_service/app.py & bun run src/index.ts diff --git a/encodeImages.py b/encodeImages.py new file mode 100644 index 0000000..b290f7d --- /dev/null +++ b/encodeImages.py @@ -0,0 +1,71 @@ +import os +import numpy as np +import torch +import open_clip +import faiss +from PIL import Image + +CARDS_FOLDER = "/images/cards" +EMBEDDINGS_FILE = "/pythonService/embeddings.npy" +IDS_FILE = "/pythonService/ids.npy" +FAISS_FILE = "/pythonService/card_index.faiss" + +device = "cuda" if torch.cuda.is_available() else "cpu" +model, _, preprocess = open_clip.create_model_and_transforms( + 'ViT-L-14', pretrained='laion2b_s32b_b82k' +) +model = model.to(device).eval() + +# ---- load existing or initialize ---- +if os.path.exists(FAISS_FILE): + print("Loading existing FAISS index...") + index = faiss.read_index(FAISS_FILE) + embeddings = np.load(EMBEDDINGS_FILE) + ids = np.load(IDS_FILE) +else: + print("Creating new FAISS index...") + embeddings = np.zeros((0, 1024), dtype='float32') # 1024 for ViT-L-14 + ids = np.array([], dtype=' 0: + new_embeddings = np.vstack(new_embeddings).astype('float32') + faiss.normalize_L2(new_embeddings) + + # add to FAISS + index.add(new_embeddings) + + # append to numpy arrays + embeddings = np.vstack([embeddings, new_embeddings]) + ids = np.concatenate([ids, np.array(new_ids)]) + + # save everything + np.save(EMBEDDINGS_FILE, embeddings) + np.save(IDS_FILE, ids) + faiss.write_index(index, FAISS_FILE) + + print(f"Added {len(new_files)} cards. Total now:", index.ntotal) +else: + print("No new cards found — nothing to update.") diff --git a/python_service/card_index.faiss b/faiss/card_index.faiss similarity index 99% rename from python_service/card_index.faiss rename to faiss/card_index.faiss index 749b363..1eff8d0 100644 Binary files a/python_service/card_index.faiss and b/faiss/card_index.faiss differ diff --git a/python_service/embeddings.npy b/faiss/embeddings.npy similarity index 99% rename from python_service/embeddings.npy rename to faiss/embeddings.npy index afe9483..a85ac6f 100644 Binary files a/python_service/embeddings.npy and b/faiss/embeddings.npy differ diff --git a/python_service/ids.npy b/faiss/ids.npy similarity index 99% rename from python_service/ids.npy rename to faiss/ids.npy index c9d751b..b8b5f81 100644 Binary files a/python_service/ids.npy and b/faiss/ids.npy differ diff --git a/name.txt b/name.txt new file mode 100644 index 0000000..e54a60d --- /dev/null +++ b/name.txt @@ -0,0 +1,3933 @@ +'Absol-ex', +'Impoleon', +'Skunkapuh', +'Fließender-Angriff-Wirbelrolle', +'Trainingsplatz', +'Foepasbeere', +'Puppance', +'Ninjajunge', +'Finneon', +'Smettbo V', +'Duellturm', +'Trombork & Zwirrfinst GX', +'Yorkleff', +'Schlukwech', +'Morbitesse', +'Zapdos-ex', +'Ruf-Energie', +'M-Stolloss EX', +'G-Cis', +'V-Schutz-Energie', +'Abschiedsglocke', +'Quapsel', +'Team Magmas Camerupt', +'Schimmerndes Raichu', +'Scherox 4', +'Energie-Absauger 2', +'Weißes Kyurem', +'Kapu-Riki', +'Feuerspucker', +'Team Magma Technische Maschine', +'Kobalium-EX', +'Schimmerndes Rayquaza', +'Trompeck', +'Fennexis V', +'Bamelin', +'Blau', +'Mimigma GX', +'Axantor', +'Masskito', +'Tauboss-ex', +'Entdeckung der Abenteurerin', +'Mewtu *', +'Kampfzone', +'Taumeltal', +'Klarins Abenteuer', +'Team Galaktiks Mars', +'Köder Ball', +'Flunschlik', +'M Skaraborn EX', +'Verblasstes Dorf', +'Flatterhaar', +'Aoki', +'Dunkles Lektrobal', +'Quajutsu & Zoroark GX', +'Skorgla', +'Plätscherhügel', +'Rayquazas Geistesbund', +'Achromas' Experiment', +'Exorzistin', +'Bromley & Hala', +'Quaxo', +'Axantor V', +'Feldarbeiter', +'Suicune ex', +'Schutzzone des Æther-Paradieses', +'Nockchan ex', +'Energie-Wiederverwertung', +'Katapuldra-ex', +'Geowaz-ex', +'Kabu', +'Team Aqua Technical Machine 01', +'Granforgita-ex', +'Galar-Lauchzelot V', +'Aerodactyl V', +'Kristall des Stillstandes', +'Alola-Snobilikat', +'Mistys Gunst', +'Pantimimi', +'Machomei', +'Meditalis-ex', +'Machollo', +'Flexfänger', +'Flambirex EX', +'Lavados ex', +'Emolga', +'Bannsticker', +'Sodamak', +'Psiana EX', +'Rioba', +'Pyapabeere', +'Vergrabenes Fossil', +'Regidrago', +'Lepumentas ex', +'Alola-Kokowei GX', +'Furienblitz', +'Geheimnis Zone', +'Boreos GX', +'Latias *', +'Galar-Gallopa V', +'Frosdedje-ex', +'Panzaeron EX', +'Kosturso', +'Glücks-Ei', +'Kukmarda', +'Zauberasche', +'Dialga EX', +'Candela', +'Milza', +'Molunk', +'Glurak ex', +'Icognito U', +'Deoxys-EX', +'Wagong', +'Nemila', +'Kapuno', +'Super Energy Removal 2*', +'Mr. Fuji', +'Geschenk-Energie', +'Alola-Sleima', +'Simsala V', +'Knarbon', +'TV-Reporter', +'Lusardin', +'Tentantel', +'Granbull V', +'Marc', +'Zeraora VMAX', +'Pandir', +'Team Rockets Spinsidias', +'Energielotterie', +'Team Rockets Zapdos', +'Snibunna G', +'Schimmelreiter-Coronospa V', +'Hops Krarmor', +'Dragoran V', +'Kampfenergie', +'Sonnkern', +'Heiteira ex', +'Bolardin', +'Pokémon-Center-Dame', +'Flamara V', +'Mantax', +'Cryospino', +'Verwalter', +'Tauchball', +'Golking', +'Barista', +'Krokel', +'Erdanziehungsberg', +'Kiawe', +'Kopffossil', +'Magby', +'Skelabra VMAX', +'Kangama EX', +'Smettbo', +'Soir', +'Icognito N', +'Team-Plasma-Ball', +'Laschoking', +'Schwarzes Kyurem-ex', +'Troys Rat', +'Lamina', +'Vulnona-TURBO', +'Reshiram GX', +'Viscogon', +'Prisma-Energie', +'Quajutsu V-UNION', +'Grillchita V', +'Urgl', +'Maho', +'Lucian', +'Senior & Junior', +'Team Aqua Gürtel', +'Falk', +'Kolowal-ex', +'Zacian VSTAR', +'Nugget', +'Team Galaktiks Erfindung G-107 Technische Maschine', +'Muntier', +'Galar-Zapdos V', +'Qurtel V', +'Surfendes Pikachu VMAX', +'Team Rockets Tarundel', +'Rattfratz', +'Tanhel', +'Benesaru-ex', +'Palkia-EX', +'Kampfkäfig', +'Gebirgsring', +'Doppelter Windhauch', +'Distmar', +'Mysteriöser Splitter', +'Knattatox-ex', +'Turtok ex', +'Tornupto ex', +'Glaziola EX', +'Letarking-ex', +'Symvolara', +'Clavion', +'Jirachi GX', +'Team Rockets Snobilikat-ex', +'Major Bobs Abmachung', +'Bills Transfer', +'Marshadow GX', +'Heatran', +'Heatran VMAX', +'Fokusgurt', +'Alola-Kleinstein', +'Heil-Energie', +'Spoink', +'Iksbat', +'Legios', +'Superangel', +'Salvatore', +'Vegimak', +'Raichu GX', +'Quartettstein', +'Patrouillenkappe', +'Grolldra', +'Impoleon FB', +'Plinfa', +'EPTeiler', +'Panpyro', +'Erinnerungsstätte', +'Horror-Psychic-Energie', +'Felori-ex', +'Plasma-Energie', +'Schlaraffel', +'Team Magmas Camaub', +'Dummimisel-ex', +'Misty & Lorelei', +'Knackrak C', +'Circhester-Therme', +'Garados', +'Schabelle', +'Blitza *', +'Galar-Corasonn', +'Hisui-Lektrobal', +'Feelinara GX', +'Elevoltek-ex', +'Mewtu VSTAR', +'Helles Blitza', +'Schlurplek C', +'Gute Angel', +'Ultimativ-Zone', +'Helles Dragoran', +'Aqua-Energie', +'Gengar GL', +'Skelabra', +'Bellektro V', +'Schlurm', +'Team Rockets Hypno', +'Flegmon & Enton GX', +'Cynthias Machtgewicht', +'Amagarga', +'Metang', +'Dunkles Dragonir', +'Deoxys ex', +'Mondberg', +'Sodachita', +'Gaunux', +'Göre', +'Voltrel', +'Agathe', +'Nachtara GX', +'Freunde-Ball', +'Arbok-ex', +'Klarins Feurigel', +'Hydrapfel-ex', +'Bisaflor', +'Poké-Kind', +'Energie-Arena', +'Lebenskräuter', +'Nidoran W', +'Sinius', +'Raichu-TURBO', +'Phantoross', +'Guardevoir GX', +'Seedraking', +'Ledyba', +'Quajutsu {star}', +'Seedraking ex', +'Paradies Resort', +'Team Rockets Golbat', +'Absol G', +'Verfluchter Stein', +'Caesurio', +'Galar-Laschoking', +'Strahlendes Simsala', +'Maskagato', +'Glänzender Mantel', +'EP-Teiler', +'Eisendefensive', +'Relaxo GX', +'Bähmon', +'Holon-Fossil', +'Ohrdochs Geistesbund', +'Pikachu V', +'Major Bob', +'Nachttrage', +'Blipp', +'Geheimnisvoller Garten', +'Cynthias Milotic', +'Relicanth', +'Schutz', +'Hutsassa', +'Premium Power Pro', +'Cynthias Ehrgeiz', +'Urlauberin', +'Cross-Transceiver', +'Team Rockets Wagnisbombe', +'Doppel-Farblos-Energie', +'Yanmega', +'Phandra', +'Boreos V', +'Trank', +'Lektrobal', +'Bithora', +'Schalellos Östliches Meer', +'Raichu ex', +'Team Aquas Frizelbliz', +'Miraidon-ex', +'Scherox GX', +'Dakuma', +'Regice', +'Mew', +'LeBelle', +'Schatz-Tracker', +'Raum-Zeit-Anomalie', +'Kamalm', +'Smettbo VMAX', +'Keilflamme-ex', +'Evolith', +'Lumiflora', +'Adebom-ex', +'Tortunator', +'Lillys Piepi-ex', +'Professor Linds Trainingsmethoden', +'Türkisgrüne-Maske-Ogerpon', +'Finsterpflaster', +'Mebrana', +'Hops Tasche', +'Serpiroyal V', +'Maritellit V', +'Ohrdoch', +'Wolwerock', +'Mewtu GX', +'Tengulist ex', +'Friedwuff-ex', +'Metagross V', +'Bodybuilding-Hanteln', +'Wunder Sphäre (Alpha)', +'Team Skull-Rüpel', +'Aggregat-Energie LightningPsychicMetal', +'Morgenschwingen-Necrozma', +'Voltobal', +'Zacian-ex', +'Lugia', +'Terrakium-EX', +'Pokémon-Händler', +'Lectragon V', +'Kokowei-ex', +'Energie-Umschalter', +'Ignivor', +'Firnontor', +'Galar-Gallopa', +'Donarion GX', +'Pokéball', +'Eisenhaupt', +'Energiewiederherstellung', +'Flamara GX', +'Solgaleo', +'Lohgock GX', +'Sedimantur', +'Rotom-Rad', +'Gegenangriffs-Klauen', +'Team Rockets Mauzi', +'Astor', +'Tohaido', +'Grillmak', +'Lunala-ex', +'Gewöhnliche Angel', +'Energietasche', +'Knakrack', +'Holon-Energie PE', +'Shoppingcenter', +'Guardevoirs Geistesbund', +'Führung des Entdeckers', +'Forstellka-ex', +'Paragoni', +'Alola-Rattfratz', +'Xerneas GX', +'Mangunior', +'Turbopflaster', +'Schlurplek', +'Dunkles Entoron', +'Krabby', +'Klarins Ho-Oh-ex', +'Krawalloro-ex', +'Brigaron V', +'Zeitmaschine', +'Nirgendwo City', +'Unheilvolle Einöde', +'Kogas Falle', +'Mondscheinhügel', +'Holon-Funkgerät', +'Dunkles Despotar', +'Xenias Aufruf', +'M-Stahlos EX', +'Regidrago V', +'Aurora-Energie', +'Morpeko V-UNION', +'Holon-Magnetilo', +'Wunderbeere', +'Lumispross', +'Silvarro GX', +'Spielautomat', +'Evoli VMAX', +'Tauboss V', +'Ruinenwand', +'Eventura City-Arena', +'Goldtrank', +'Lin-Fu', +'Pantimos ex', +'Schabelle GX', +'Icognito D', +'Shaymin-EX', +'Basis-Lightning-Energie', +'Kristallschild', +'Nidoran♂', +'Kobalium', +'Erikas Einladung', +'Jasmins Blick', +'Cerapendra', +'Leichtstein', +'Zygarde GX', +'Schirmdame', +'Rückauslöser', +'Lugia-ex', +'Iksbat ex', +'Altaria ex', +'Lugia-EX', +'Relluk', +'Hackender Eispickel', +'Togekiss VMAX', +'Durengard-ex', +'Anorith', +'Domfossil', +'Magnezone V', +'Reshiram-EX', +'Marys Olangaar-ex', +'Palkia', +'Tortunator GX', +'Tauboss EX', +'Diam', +'Gramokles', +'Voltolos', +'Togedemaru', +'Fatalitcha-ex', +'Überraschungskiste', +'Elevoltek FB', +'Heatran-EX', +'Typ:Null', +'Krarmor V', +'Heilungsbeere', +'Troys Tanhel', +'Regigigas FB', +'Despotar-ex', +'Defender', +'Tafelwasserpack', +'Silvanas Vitalität', +'Leucht-Energie', +'Machomei GX', +'Katapuldra VMAX', +'Kangama GX', +'Labor von Flordelis', +'Kamalm VMAX', +'Kombu', +'Rot & Blau', +'Mopex-ex', +'Geheimnisvoller Schatz', +'Intelleon V', +'Riesiger Baumstumpf', +'Vogel-Profi', +'Patinaraja V', +'Cresselia', +'Schwerball', +'Ns Reshiram', +'Prof. Futurus' Szenario', +'Prachtbaum', +'Zorua', +'Nezz', +'Platzballon', +'Kabutops ex', +'Alola-Geowaz', +'Großmaulmoor', +'Cynthias Roselia', +'Hisui-Dressella', +'Yuyu-ex', +'Die Rache des falschen Profess', +'Team Aquas Krebscorps', +'Mopex', +'Elektro-Würfel 01', +'Flottball', +'Glurak V', +'Igamaro', +'Galar-Flunschlik', +'Giovanni', +'Pii', +'Mew-ex', +'Cyclone Energy*', +'Schadenspumpe', +'Glutexo', +'Regirock *', +'Kaguron GX', +'Rayquaza *', +'Rexblisar', +'Icognito J', +'Liebiskus', +'Ur-Palkia', +'Quajutsu GX', +'Weißes Kyurem GX', +'Reshiram & Glurak GX', +'Montecarbo', +'Ariados', +'Rückentwicklungsspray Z', +'Nidorino', +'Proto-Groudon EX', +'Turtok EX', +'Kryppuk C', +'Surfendes Pikachu V', +'Bummelz', +'EXP.ALL*', +'Team Rockets Porygon2', +'Pokusan-ex', +'EnergieZugewinn', +'Toxiquak', +'Feelinara VMAX', +'Flaminkno', +'Halbstarker', +'Mantidea GX', +'Finsternis-Energie', +'Donphan', +'Einlösbares Ticket', +'Antikes Schildfossil', +'Irokex', +'Flamara ex', +'Lunastein', +'Tulia', +'Knogga-TURBO', +'Zeraora GX', +'Sharfax', +'Eisenblatt-ex', +'Schillok', +'Dodu', +'Kampfgeistgürtel', +'Mewtu ex', +'Strahlendes Turtok', +'Perla', +'Multi-Energie', +'Galar-Mauzi', +'Vitalitätsband', +'Seelenmaske', +'Sagaria', +'Palimpalim', +'Stolloss VMAX', +'Küchenchef', +'Brianna', +'Team Rockets Athena', +'Keldeo V', +'Frosinas Stadion', +'Keldeo', +'Strahlendes Heatran', +'Hubelupf', +'Flegmon', +'Hisui-Snieboss V', +'Hisui-Dressella VSTAR', +'Mayla', +'Staravia', +'Windewoge-ex', +'Spezial-Aufladung', +'Aufbereitung', +'Driftlon', +'Flossenfossil', +'Mimi', +'Flordelis', +'Aprikoko Hersteller', +'Georok', +'Fleißiges Staffelholz', +'Neuer Pokedex', +'Pikachu V-UNION', +'Strahlendes Akkup', +'Lunala GX', +'Mega-Tohaido-ex', +'Rossana-ex', +'Apricorn Forest*', +'Freunde aus Galar', +'Yanmega-ex', +'Werkzeugkasten', +'Sturmgebirge', +'Pupitar', +'Yuyu', +'Achromas', +'Porygon-Z G', +'Evoli', +'Golgantes', +'Grandiras', +'Durengard EX', +'Giflor GX', +'Helles Riffex', +'Zekrom', +'Zwillinge', +'Kate', +'Käfersammler', +'Serpifeu', +'Damhirplex', +'Hitze-Rotom', +'Doppel-Regenbogen-Energie', +'Jiutesto', +'Floink', +'Schlapor', +'Raikou V', +'Serpiroyal VSTAR', +'Pescryodon', +'Voltenso G', +'Tauboga', +'Entei-EX', +'Kyogre-EX', +'Grypheldis', +'Bissbark', +'Fasasnob', +'Affiti', +'Monetigo', +'Latios-EX', +'Brüllschweif-ex', +'Amfira GX', +'Ausrüstungsstörer', +'Tectass GX', +'Kamalm V', +'Mewtu', +'Käfersammlerset', +'Tandrak', +'Skuntank V', +'Bills Teleporter', +'Geweihtes Amulett', +'Frosdedje', +'Dunkles Pupitar', +'Tali', +'Sanaconda', +'Delfinator-ex', +'Befehl vom Boss', +'Banette-ex', +'ProtoKyogre EX', +'Chaosturm', +'Cheerleader-Jubel', +'Belebtes Stadion', +'Ns Plan', +'Wirrschein-Wald', +'Seltenes Fossil', +'Gemeindehaus', +'Aufwischwirbel', +'Fokussierter-Angriff-Wulaosu', +'Groudon-EX', +'Hundemon-ex', +'Sniebel ex', +'Alola Vulnona', +'Score-Stadion', +'Gladio', +'Steinbrustpanzer', +'Wirbel-Rotom', +'Laternecto', +'Team Rockets Maritellit', +'Moterpel', +'Störnetz Team Flare-Superzubehör', +'Sandan', +'Holon-See', +'Genesect-EX', +'Regieleki V', +'Team Rockets Arbok', +'Meganie', +'Voluminas', +'Nachtara & Darkrai GX', +'Schutzschachtel', +'Pokémon-Liga-Hauptquartier', +'Schallquap', +'Mobtiff', +'Surfer', +'Rihornior V', +'Victini V', +'Morpeko V', +'Dunkles Forstellka', +'Gierige Würfel', +'Dunkles Donphan', +'Wurzelfossil Liliep', +'Ho-Oh LEGENDE', +'Indigo Plateau', +'Verfluchter Staubwedel', +'Magnayen ex', +'Zug-Energie', +'Wolwerock VMAX', +'Stolloss' Geistesbund', +'Sensect', +'Kristallstrand', +'Darkrai-ex', +'Latios', +'Burmy Lumpenumhang', +'Level Max.', +'Dunkles Simsala', +'Elektro-Disc', +'Garados-ex', +'Voltula-ex', +'Gallopa', +'Regidrago VSTAR', +'Robuster Helm', +'Darkrai & Cresselia LEGENDE', +'Wasch-Water-Energie', +'M Voltenso EX', +'Nachtara ex', +'Quajutsu V', +'Trikephalo', +'Grusha', +'Moruda VMAX', +'Mega Voltenso-ex', +'Gengar ex', +'Zeitpuzzle', +'Magearna V', +'Burmadame Lumpenumhang', +'Traunfugil', +'Latios EX', +'Pachirisu-ex', +'Premierball', +'Ursaluna', +'Team Rockets Waaty', +'Brunnenmaske-Ogerpon', +'Professor Eichs neue Theorie', +'Morlord GL', +'Peppeck', +'Agiluza-ex', +'Helles Azumarill', +'Xerneas', +'Pokémaniac', +'M-Despotar EX', +'Mewtu V-UNION', +'Quabbel', +'Aggrostella GX', +'Energie-Verstärker', +'Amoroso', +'Vorbestellte Fahrkarte', +'Schloss von N', +'Neutralisierungszone', +'Icognito E', +'Sen-Long', +'Blumenfrau', +'Basis-Psychic-Energie', +'Hitze-Fire-Energie', +'Bojelin GL', +'Dodri', +'Lanettes Internetsuche', +'Poké-Heiler +', +'Troys Lepumentas', +'Libelldra GX', +'Snibunna GX', +'Bells Hingabe', +'Luxuriöser Umhang', +'Diancie', +'Magnetsturm', +'Yarro', +'Dunkles Turtok', +'Marys Bähmon', +'Dunkles Schillok', +'Zobiris', +'Kronjuwild', +'Dragonir', +'Hisui-Silvarro VSTAR', +'Team Rockets Despotar', +'Radweg', +'Hyper-Rückentwicklungs-Spray', +'Stein-Fighting-Energie', +'Riskante Ruinen', +'GeheimnisEnergie', +'Libelldra ex', +'Anissa', +'Wirkungs-Energie', +'Verkrümmungs-Energie', +'Voltenso ex', +'Moruda V', +'Team Magmas Hundemon', +'Bibor', +'Hyperheiler', +'Kyurem', +'Team Rockets Arktos', +'Lapras ex', +'Brutalanda V', +'Reif der Tapferkeit', +'Seedraking EX', +'Evobrause', +'Mediras', +'Troys Entschluss', +'Vibrava', +'Schmetterhammer', +'Admurai', +'Primarene GX', +'Supertrank', +'Energie-Absauger', +'Mega-Flunkifer-ex', +'Mr. Bracks Mitgefühl', +'Schwächenschutz', +'Patinaraja-ex', +'Magma-Energie', +'Porenta', +'Großer Luftballon', +'Gefährlicher Dschungel', +'Forschung des Professors', +'Irdengefäß', +'Agoyon & Schlingking GX', +'Benny', +'Wunder-Headset', +'Ampharos EX', +'Angler', +'Mount Lanakila', +'Wald-Siegelstein', +'Raichu & Alola-Raichu GX', +'Baojian-ex', +'Lady Outing', +'Deoxys VMAX', +'Spielzeugfänger', +'Flamiau', +'Sarahs Hilfe', +'Bisaflor-ex', +'Garados G', +'Wailord EX', +'Technische Maschine: Krisenhieb', +'Finstrio', +'Strahlendes Fruyal', +'Hippoterus 4', +'Sumpex ex', +'Flapteryx', +'Gefährlicher Laser', +'Eisenrad-ex', +'Mr. Trumms Projekt', +'Sleimok & Alola-Sleimok GX', +'Keldeo GX', +'Troys Rocara', +'M-Ohrdoch EX', +'Rüpel von Team Galaktik', +'Dämpfender Talisman', +'Rettender Schal', +'Mega-Signal', +'Lucario EX', +'Fokussierter-Stil-Mastrich', +'Space Center*', +'Icognito M', +'Strahlendes Guardevoir', +'Pichu', +'Wassili', +'Cursilla & Super Sandro', +'Flampion', +'Grillchita VSTAR', +'Abra', +'Knirps', +'Roxanas Nachforschungen', +'Lepumentas', +'Zwirrfinst FB', +'Genesect', +'Togekiss C', +'Hexe', +'Panferno', +'Sleima', +'Icognito Q', +'Helles Lanturn', +'Professor Eichs Besuch', +'Matin', +'Despotar V', +'Ns Flampivian', +'Gummihandschuhe', +'Turtok VMAX', +'Scampisto', +'Heureka', +'Tectass', +'Miltank', +'Troys Metagross-ex', +'Armaldo ex', +'Katapuldra', +'Ursaring', +'Formeo Schneewolkenform', +'Stahlos ex', +'Panferno 4', +'Skuntank', +'Bidifas-ex', +'Bellektro VMAX', +'Aalabyss', +'Quälendes Spray', +'Krebutack G', +'Schrein der Bestrafung', +'Ramoth', +'Rameidon', +'Hop', +'Psiana 4', +'Pudox ex', +'Unbekanntes Fossil', +'Monetigo-ex', +'Muschas', +'Icognito S', +'Lectragon', +'Pokémon Fan-Club', +'Sengo', +'Knospi', +'Giratina V', +'Mega-Schlapor & Pummeluff GX', +'Melmetal V', +'Rüpel von Team Rocket', +'Helles Flamara', +'Cottomi V', +'Endynalos V', +'Dunkles Impergator', +'Roselia', +'Rote Karte', +'Rotom V', +'Professor Lind', +'Quappo', +'Fliegendes Pikachu V', +'Lucario V', +'Kimono-Trägerin', +'Deoxys', +'Zirpurze', +'Höhlensystem Null', +'Gedächtniskapsel', +'Psycho-Disc', +'Icognito R', +'Nachtteleporter', +'Hoopa', +'Dedenne GX', +'Pokémon-Nachtcenter', +'Marshadow', +'Scherox V', +'Cottomi', +'Pelipper', +'Dragoran-ex', +'Necrozma V', +'Fiffyen', +'Knuddeluff-ex', +'Terirobeere', +'Terakristall-Orb', +'Durengard', +'Flammenhalstuch', +'Minun', +'Kramshef V', +'Elektek ex', +'Colzo', +'Glaziola VSTAR', +'Hisui-Silvarro V', +'Antikes Helixfossil', +'Schlaraffel-ex', +'Kniltz', +'Marikeck', +'Bidiza', +'Celios Netzwerk', +'Galar-Mauzinger', +'Schutzfels', +'Terapagos', +'Karategürtel', +'Galar-Lahmus', +'Platsch-Energie', +'Festplatz', +'Galagladi', +'Miniras', +'Pantimos GX', +'Tempodrom', +'Team Rockets Nidorina', +'Fehlschlagschutz', +'Arceus & Dialga & Palkia GX', +'Ingenieurkniffe', +'Machomei-TURBO', +'Jubeldorf', +'Venuflibis', +'Vivian', +'Pokémon-Umkehrung', +'Strahlendes Endynalos', +'Team Magmas Fiffyen', +'Bibor V', +'Goldbeere', +'eF-eM', +'Schimmerndes Ho-Oh', +'Hariyama', +'Olini', +'Professor Eich', +'Scherox-ex', +'Altbernstein', +'Ur-Palkia V', +'Dialga-EX', +'Giftstich', +'Strandplatz', +'Banette GX', +'Dreifach-Beschleunigungs-Energie', +'Kapilz V', +'Dunkles Flamara', +'Fruyal-ex', +'Metagross ex', +'Mega-Bisaflor-ex', +'Voltenso EX', +'Mistys Entschlossenheit', +'Dunkles Rasaff', +'Dinglu', +'Kahlberg', +'Brief vom Prof.', +'Turtok V', +'Aerodactyl GL', +'Aerodactyls Altbernstein', +'Lumineon V', +'Volcanion-ex', +'Eisendorn-ex', +'PokéNav', +'Notfall-Gelee', +'Mewtus Geistesbund', +'Regice *', +'Team Rockets Porygon', +'Grebbit', +'Staubinsel', +'Team Magma Gürtel', +'Riesige Robe', +'Aerodactyl', +'Erstklassiger Fänger', +'Team Magmas Rizeros', +'Therapie-Energie', +'Team Aquas Lampi', +'Evoli-ex', +'Rockos Durchhaltevermögen', +'Team Aquas Kyogre', +'Stadion-Navi', +'LeBelle-Pfeife', +'Schülerin', +'Olithena', +'Team Magmas Hunduster', +'Glaziola VMAX', +'Schalellos', +'Traunmagil-ex', +'Chrys', +'Sumpex', +'Patinaraja VMAX', +'Rayquaza-EX', +'Zufallsempfänger', +'Dracium Z: Drachenklaue', +'Aquana *', +'Lithomith', +'Montecarbo V', +'Arktos', +'Kingler', +'Glurak EX', +'Glurak', +'Kanivanha', +'Zobiris V', +'Alola-Vulnona', +'Elfun-ex', +'Viktors Beitrag', +'Famieps', +'Intelleon', +'Pamomamo-ex', +'PokéDex HANDY909', +'Scherox ex', +'Altaria GX', +'Maracamba', +'Energiebaum', +'Rokkaiman', +'UHaFnir-TURBO', +'Zamazenta', +'Olangaar VMAX', +'Wailmer', +'Seltsamer Zeitmesser', +'Megalon', +'δ Regenbogen-Energie', +'Pampross', +'Bauz & Alola-Kokowei GX', +'Schimmerndes Volcanion', +'Wie-Shu', +'Hops Salanga', +'Rotom-Stick', +'Adebom', +'Jirachi', +'Skarabaks-ex', +'Galar-Porenta', +'Icognito V', +'Schmerbe', +'Ultrawald Katagami-Ass', +'Hariyama ex', +'Evoli GX', +'Regigigas', +'Hisui-Zorua', +'Cynthias Knarksel', +'Alola-Digdri', +'Hops Zacian-ex', +'Verfluchtes Pulver', +'Bisaknosp', +'Schock-Megafon', +'Laukaps', +'Retro Energie', +'Omot GX', +'Mistys Sterndu', +'Verbrannte Erde', +'Raichu GL', +'Kammer des Champs', +'Bisaflors Geistesbund', +'Terrakium', +'Ketten-Mochi', +'Radio Turm', +'Kahili', +'Alola Vulpix-V', +'Meisterdetektiv Pikachu', +'Hoppspross', +'Flampivian', +'Stolloss V', +'Eisenhand-ex', +'Feenbeet', +'Gruff', +'Boninu-ex', +'Morgen-Stadion', +'Glücks-Energie', +'Groudons Geistesbund', +'Poppy', +'Hefel', +'Celebi', +'Tukanon', +'Demeteros-EX', +'Colossand GX', +'Lolas Schabernack', +'Medizin-Energie', +'Mega-Schlapor-ex', +'Erin', +'Eisenhand', +'Maxi-Malasada', +'Plaudagei G', +'Mewtu V', +'Toxel', +'Schnuthelm', +'Rüpel von Team Yell', +'Shaymin EX', +'Team Rockets Nidoqueen', +'Bauz', +'M-Glurak EX', +'Schwerthold & Schildrich', +'Froxy', +'Schweißbrenner', +'Garados *', +'Infamomo', +'Misch-Energie', +'Amonitas Helixfossil', +'Kampfhandschuhe', +'Brüllschweif', +'Hoothoot', +'Voltenso', +'Kyogre EX', +'Camerupt', +'Servol', +'Blättriger Tarnponcho', +'Ns AP-Plus', +'Mauzi VMAX', +'Biditza', +'Arktilas', +'Honweisel 4', +'Solgaleo-ex', +'Heatran V', +'Enigmaras Lektrobal', +'Reshiram', +'Rayquaza', +'Nasgnet', +'Leitmetall-Mine', +'Silentiumlabor', +'Ramoth GX', +'Zygarde', +'Geronimatz', +'Adressbuch', +'Icognito G', +'Fehlendes Kleeblatt', +'Alpollo', +'Kabutops', +'Yanma', +'Hundemon 4', +'Piepi-Puppe', +'UHaFnir V', +'Kapu-Riki GX', +'Team Magmas Stollrak', +'Fruyal', +'Volle Flamme', +'SP-Energie', +'Panikmaske', +'Benesaru', +'Äther', +'Berge-Energie', +'Géraldine', +'Janinas Geheimkunst', +'Victini', +'Miraidon', +'UHaFnir', +'Helles Dragonir', +'Galar-Flampivian V', +'Finsterstein', +'Nidoran M', +'Hin & Her', +'Matt', +'Jugong', +'Celebi-EX', +'Hoopa-ex', +'Erika', +'Energiekapsel aus der Zukunft', +'Libelldra V', +'Eisenkrieger-ex', +'Jagdhandschuhe', +'Entdecker-Set', +'Wibke', +'Arceus V', +'Matisse', +'Regenerative Energie', +'Rot', +'Feuer-Würfel 01', +'Zacian V', +'M-Lahmus EX', +'Staraptor', +'Darkrai-EX', +'Citros Scharfsinn', +'Superfänger', +'Parfi', +'Mega-Zobiris & Despotar GX', +'Geheime Box', +'Regenbogen-Energie', +'Denboku', +'Walraisa ex', +'Eguana', +'Nachahmerin', +'Knogga-ex', +'Chevrumm', +'Hops Kranoviz', +'Viridium V', +'Gortrom', +'Regenbogen Energie', +'Azett', +'Team Aquas Vipitis', +'Pikachu-ex', +'Magnayen', +'Drachenkralle', +'Professor Eichs Nachforschunge', +'Turtok-ex', +'Enigmaras Voltrel', +'Deoxys Normalform', +'Schimmerndes Glurak', +'Aromalady', +'Unratütox', +'Tannza', +'Team Magmas Stollunior', +'G-Booster', +'Kampffahnder', +'Görentalent', +'Blubella', +'Hisui-Zoroark V', +'Schlapfel', +'Dunkles Dragoran', +'Lino', +'Bill', +'Pantimos 4', +'Zapplardin', +'Feurige Fackel', +'Sheinux', +'Galar-Oghnatoll', +'Marys Stolz', +'Holon-Mädel', +'Metall-Schutzbrille', +'Helixfossil', +'Metallkernbarriere', +'Glurak GX', +'Schilterus', +'Holon-Energie FK', +'Echnatoll-ex', +'Glücksarena', +'Shardrago', +'Team Aqua Ball', +'Veit', +'Schüler', +'Traunmagil', +'Glumanda', +'Shnurgarst', +'Icognito H', +'Kaumalat', +'Fließender-Angriff-Wulaosu VMAX', +'Eisenfels-ex', +'Schlurplek-ex', +'Regirock EX', +'Team Aquas Voltenso', +'Formeo', +'Pokémon Park*', +'Ns Wattzapf', +'Picochilla', +'Kastadur', +'Despotar GX', +'Halupenjo', +'Horrerba', +'Blitza', +'Team Rockets Smogon', +'Prof. Esche', +'Amulett der Tapferkeit', +'Team Rockets Woingenau', +'Schabelle & Masskito GX', +'Relaxo VMAX', +'Despotar', +'Zacian V-UNION', +'Zapplalek', +'Lillys Bandelby', +'Holon-Lehrer', +'Spark', +'Moira', +'Remoraid', +'Lapras-ex', +'Kryppuk', +'Metall-Energie', +'Fiaro V', +'Wahlband', +'Arkani', +'Schildfossil', +'Ns Entschluss', +'Nagelotz', +'Lilia', +'Haspiror', +'Mary', +'Entwicklungsrauch', +'Celebi ex', +'Matsurika', +'Professor Linds Vorlesung', +'Weherba', +'Strawickl', +'Zapdos G', +'Formeo Sonnenform', +'Lucario VSTAR', +'Blitza-ex', +'Parfinesse', +'Masskito GX', +'Elfun', +'Riolu', +'Arenatrainer', +'Altaria', +'Kyogre', +'Dodri V', +'Enton', +'Team Rockets Machenschaften', +'Regen-Formeo', +'Darkrai VSTAR', +'Fossilforscher', +'Zeraora', +'Dedenne', +'Krabbox', +'Illumise', +'Dunkles Porygon2', +'Dartiri', +'Alola-Snobilikat GX', +'Dialga G', +'Viridium-EX', +'Orakel', +'Energiekapsel aus der Vergangenheit', +'Krawumms', +'Bubungus', +'Welsar', +'Doppel-Turbo-Energie', +'X-Initiative', +'Snomnom', +'M-Galagladi EX', +'Levelball', +'Hapu’u', +'Trikephalo EX', +'Alola-Sandamer', +'Team Rockets Voltilamm', +'Elektro-Ladegerät', +'Detektor', +'Pokémon-Krankenschwester', +'Gewaldro', +'Pyros letzter Widerstand', +'Heiko', +'Krarmor VMAX', +'Überlebensschiene', +'Lunala', +'Massive Wut', +'Sen-Long GX', +'Lola', +'Abenteuerbeutel', +'Traunmagil GL', +'Team Rockets Sensect', +'Stollunior', +'Wurmloch', +'Fließender-Stil-Mastrich', +'Ns Flampion', +'Riesenzahn', +'Tyracroc', +'Voltolos GX', +'Hisui-Arkani', +'Relaxo V', +'Giratina-ex', +'Reptain', +'Gengar & Mimigma GX', +'Super-Energiezurückgewinnung', +'Stahlos EX', +'Lilias Kampfgeist', +'Flunkifer VSTAR', +'M-Scherox EX', +'Strahlendes Stahlos', +'Sabrina', +'Jubelball', +'Maskagato-ex', +'M-Tauboss EX', +'Helles Knuddeluff', +'Gengar', +'Garados VMAX', +'Jens', +'Techradar', +'Antriebs-Energie', +'Schwammhandschuhe', +'Noktuska', +'Pygraulon', +'Bronzong-TURBO', +'Fusionsangriff-Energie', +'Petra Fakt', +'Gladimperio', +'Bills Analyse', +'Absol', +'Dusselgurr', +'Energiewurzel', +'Rockos Erkundung', +'Rotom', +'Humanolith', +'Arboretoss', +'Urgl VMAX', +'Hyper-Trank', +'Flamara VMAX', +'Marcs Balltrick', +'Kappalores', +'Fossilausgrabungsset', +'Katagami', +'Aquana', +'Trombork VMAX', +'Galar-Flampion', +'Kyogre ex', +'Pelzebub', +'Klibbe-ex', +'Team Flare-Rüpel', +'Nirgendwo-Sauger', +'Toxiquak G', +'Holon-Abenteurer', +'Chimstix', +'Einmischende Notiz', +'Dunkles Tyracroc', +'Energiesticker', +'Voltolos EX', +'Gesichtsschutz', +'Fokussierter-Angriff-Stichrolle', +'Angestellte der Æther Foundation', +'Kleinstein', +'Alola-Vulpix', +'Schimmerndes Stahlos', +'Relaxo-Puppe', +'Pionskora', +'Technische Maschine: Rückentwicklung', +'Groudon EX', +'Dunkles Alpollo', +'Xenia', +'Feenschmuck UB', +'Frida', +'Hisui-Arkani V', +'Ibitak', +'Ignaz' Willensstärke', +'Wechselschalter', +'Galar-Brustpanzer', +'Klibbe', +'Knirfish', +'Durchfeiern', +'Yanmega-TURBO', +'Waaty', +'Lohgock V', +'Computersuche', +'Doppel Hyperheiler', +'Magearna', +'Alola Vulnona GX', +'Team Magmas Stolloss', +'Brutalanda VMAX', +'Kramurx', +'Doppelball', +'Team Aquas Tohaido', +'Magcargo', +'Wald der Vitalität', +'Krawalloro', +'Schadenstransporter', +'Rots Herausforderung', +'Bagger', +'Resladero EX', +'Schlurp', +'Zeraora VSTAR', +'Galar-Arktos', +'Iksbat G', +'Luxusball', +'Galar-Lavados V', +'Hana', +'Quartermak', +'Cupidos', +'Olivia', +'Floette', +'Pumpdjinn', +'Legios V', +'Lampi', +'Schluppuck', +'Broken Ground Gym*', +'Felizia', +'Ampharos V', +'Ei-Brutmaschine', +'Frizelbliz', +'Focus Band*', +'Lucia', +'Unverwüstliches Amulett', +'Energie-Spinner', +'Terribark', +'Wahlgürtel', +'Dunkelstadt', +'Verkrümmungspunkt', +'Letzte-Chance-Trank', +'Sankabuh', +'Duraludon VMAX', +'Chelterrar', +'Mary's Impulse*', +'Heiteira V', +'Grüns Erkundung', +'Latias-EX', +'Genesect EX', +'Psiana & Deoxys GX', +'Strahlendes Jirachi', +'Rauchschwaden', +'Latios ex', +'Shaymin V', +'Panzaeron', +'Verschlungener Hain', +'Cottini', +'Visierflöte Team Flare-Zubehör', +'Mauzi V', +'Sonnflora', +'Irrbis', +'Flordelis' Trumpfkarte', +'Weakness Guard*', +'Nebelkristall', +'Dunkles Kadabra', +'Metall-Würfel 01', +'Magbrant', +'Finsterball', +'Hydragil', +'Melmetal', +'Nidoran♀', +'Finstere Metall-Energie', +'Dunkles Giflor', +'Helles Jugong', +'Briduradon-ex', +'Nirgendwo-Mixer', +'Ferkokel', +'Brutalanda GX', +'Honweisel-ex', +'Stollos', +'Dunkles Hypno', +'Humanolith VMAX', +'Delfinator', +'Lombrero', +'Sonderbonbon', +'Friedwuff', +'Kieferfossil', +'Energieaufsammlung', +'Necrozma GX', +'Unlicht Würfel 01', +'Furienblitz-ex', +'Pokémon-Züchter', +'Altaria C', +'Mimigma', +'Schwalboss', +'Umgekehrtes Tal', +'Mistys Karpador', +'Kingler V', +'Fließender-Angriff-Himmelsrolle', +'Yell-Tröte', +'Fliegendes Pikachu', +'Hops Sanaconda', +'Gewaldro EX', +'Legendenkiste', +'Marys Morpeko', +'Schwächewächter-Energie', +'Demeteros', +'Journée', +'Schwarzes Kyurem-EX', +'Arktip', +'Astors Zug', +'Geradaks', +'Nidoking-TURBO', +'Himmelsfeld', +'Heikos Mitgefühl', +'Ganovil', +'Austos', +'Glaziola', +'Ho-Oh V', +'Wailord V', +'Mega-Glurak X-ex', +'Frost-Rotom', +'Dunkles Magcargo', +'Backel', +'Arkani G', +'Dratini', +'Spezial-Hammer', +'Turtok', +'Technische Maschine: Entwicklung', +'Ultraball', +'Rüpel von Team Star', +'Ledian', +'Hisui-Barschuft', +'Tara', +'Zwottronin', +'Janina', +'Münzamulett', +'Espinodon', +'Klonkett', +'Petznief', +'Alola-Georok', +'Kokowei', +'Amalias Entschluss', +'Regice ex', +'Erd-Siegelstein', +'Wadribie', +'Spinsidias', +'Kryppuck', +'Galar-Lauchzelot', +'Maritellit VMAX', +'Schattenkreis', +'Regieleki VMAX', +'Samson Eich', +'Liliep', +'Dunkles Gallopa', +'Marys Irokex', +'Aerodactyl VSTAR', +'Sinnoh-Tempel', +'Draschel', +'Knuddeluff', +'Galar-Flampivian VMAX', +'Charlies Anfrage', +'Beere', +'Strahlendes Hisui-Snieboss', +'Handperiskop', +'Schleifenorden', +'Miezunder', +'Mähikel', +'Evoli V', +'Multitausch', +'Regirock V', +'Volkner', +'TrainerPost', +'Bell', +'Mamutel', +'Taubsi', +'Fundamentmaske-Ogerpon', +'Flunkifer GX', +'Mewtu & Mew GX', +'Ns Zoroark-ex', +'Team Rockets Kramurx', +'Leufeo', +'Zwirrklop', +'Aeropteryx', +'Riesenzahn-ex', +'Metallenergie', +'Galar-Mauzinger V', +'Smogmog', +'Holon-Magneton', +'Topfhelm', +'Machomei-ex', +'Schönheit', +'Mondsonnenorden', +'Antikes Domfossil', +'Prunusbeere', +'Wandel-Energie', +'Blaus Taktik', +'Anziehungsnetz', +'Power Plant*', +'Porygon', +'Rockets Versteck', +'Manaphy', +'Klopptopus', +'Basis-Darkness-Energie', +'Team Plasma Rüpel', +'Walraisa', +'Akkup', +'Backel-ex', +'Psychoenergie', +'Wiesor', +'Ultra-Necrozma GX', +'Azugladis-ex', +'Team Aquas Kanivanha', +'Alola-Digda', +'Schweißer', +'Power-Tablette', +'Balgoras', +'Wasser-Disc', +'Isso', +'Vermächtnis-Energie', +'Toxiped', +'Holon-Forschungsturm', +'Symvolara GX', +'Meganie ex', +'Kaufhausmädchen', +'Puponcho', +'Kecleon', +'Karte', +'Agoyon', +'Enia', +'Kyogre & Groudon LEGENDE', +'Ballduin', +'Galar-Barrikadax', +'Pikachu GX', +'Marys Zurrokex', +'Eisenhals', +'Manaphy EX', +'Staralili', +'Antiker Altbernstein', +'Pokémon-Aufzuchtsfelder', +'Gengar EX', +'Lektrobal G', +'Hisui-Myriador', +'Ausrüstungsentsorger', +'Trank-Energie', +'Giratina EX', +'Latias & Latios GX', +'Giratina VSTAR', +'Skelokrok-ex', +'Pokémon-Center', +'Mewtu-ex', +'Elfun V', +'Adrian', +'Camping-Set', +'Skorgo 4', +'Voltriant GX', +'Mauzi', +'Trotzband', +'Wasser-Würfel 01', +'Ur-Dialga VSTAR', +'Kranoviz', +'Voltula', +'Psycho-Energie', +'Wiederball', +'Großartiger Trank', +'Kuhmuh-Käse', +'Team Aquas Lanturn', +'Fluffige Beere', +'Glurak-ex', +'Rosy', +'Ratespiel', +'Helles Machomei', +'Meditie', +'Pixi-ex', +'Pokémon-Labor', +'Burmy', +'Galar-Gorgasonn', +'Team Rockets Lambda', +'Raikou', +'Garados V', +'Hopplo', +'Hisui-Salmagnis', +'Quiekel', +'Darkness Energy*', +'Meteorfälle', +'Rotom-Pokédex: Pokémon-Sucher-Modus', +'Rollerskaterin', +'Ampharos ex', +'Super-Anziehungskraft', +'Pamamo', +'Togekiss', +'Team Rockets Wachturm', +'Hops Meikro', +'Felilou', +'Rettungsbox', +'Brutalanda-ex', +'Wahlhelm', +'Lugia VSTAR', +'Schicht-Metal-Energie', +'Imakuni?s Dodu', +'Shaymin', +'Branawarz EX', +'Folipurba', +'Victini VMAX', +'Melmetal VMAX', +'Riesige Feuerstelle', +'Shugi', +'Genesect V', +'Togetic', +'EnergieUmschalter', +'Kobalium GX', +'Magits Anfrage', +'Levy', +'Panflam', +'Zoroark', +'Skelabra V', +'Icognito L', +'Fürsorgliche Pokémon-Züchter', +'Galagladis Geistesbund', +'Hisui Viscogon', +'Tornupto', +'Siberio', +'Entei', +'Hochdrucksystem', +'Pliprin', +'Lumiflora-ex', +'Deponitox', +'Reset-Stempel', +'Adrians Ass im Ärmel', +'Gifthauchtal', +'Team Magmas Puppance', +'Digda', +'Sophora', +'Flunkifer V', +'Bollterus', +'Ninjask', +'Saganabyss', +'Rameidon GL', +'Elevoltek', +'Tierno', +'Hisui-Baldorfish', +'Roserade', +'Koraidon-ex', +'Knacklion', +'Linette', +'Jo', +'Tauschbecher', +'Letarking', +'Crimanzo', +'Solgaleo GX', +'Team Rockets Sniebel', +'Kapoera', +'Simsala-ex', +'Britzigel', +'Köderball', +'Drapfel', +'M-Bisaflor EX', +'Keilflamme', +'Lucario GX', +'Kristallhöhle', +'Reshiram-ex', +'Cheren', +'Ho-Oh', +'Turffield-Stadion', +'Pokémon-Rettungsaktion', +'Latias-ex', +'Psychos siebter Sinn', +'Großlinse', +'Zwirrfinst', +'Entei ex', +'Curelei', +'Picknickkorb', +'Panferno V', +'Donnersichel-ex', +'Lohgock', +'Pixi ex', +'TV Reporter', +'Alola-Rattikarl GX', +'Krakeelo', +'Impoleon-ex', +'Fang-Energie', +'Hoopa V', +'Ho-oh', +'Eisenkrieger', +'Meditalis V', +'Boninu', +'Kupfanti', +'Galagladi V', +'Abendmähne-Necrozma GX', +'Pamo', +'Mega-Fänger', +'Bisaflor V', +'Robo-Ersatz Team Flare-Zubehör', +'Heiteira', +'Trekkingschuhe', +'Schneid-Rotom', +'Ermittlerset', +'Kikugi', +'Sirapfel', +'Granbull', +'Peony', +'Psiana VMAX', +'Magcargo ex', +'Rose', +'Saltigant', +'Ns Zorua', +'Bronzong G', +'Colossand-ex', +'Tauboss' Geistesbund', +'Impergator ex', +'Lohgock-ex', +'Krawell', +'Alph Lithograph', +'Vegichita', +'Traumball', +'Unterirdischer See', +'Rettungsboard', +'Raue See', +'Metallplatte', +'Türkisgrüne-Maske-Ogerpon-ex', +'Meikro', +'Azumarill', +'Viridium', +'Dragoran ex', +'Liga-Angestellte', +'Kolowal', +'Mega-Camerupt-ex', +'Lucians Auftrag', +'Mogelbaum', +'Formeo Schneeform', +'Reshiram & Zekrom GX', +'Barry', +'Magnezone-ex', +'Teresas Herzlichkeit', +'Duokles', +'Nachtara', +'Sesokitz', +'Stollrak', +'Agiluza', +'Lokroko', +'Icognito C', +'Team Rockets Atlas', +'Technische Maschine: Fluorit', +'Hisui Viscargot', +'Zebritz', +'Fennexis-TURBO', +'Meloetta', +'MCs Geschwätz', +'Boost Energy*', +'Ns Kliklak', +'Pyroleo', +'Elezeba', +'Helles Keifel', +'Mottineva', +'M-Latios EX', +'Aufwisch', +'Störturm', +'Zarude V', +'Camerupt G', +'Furnifraß', +'Energie Wiederverwertung', +'Farigiraf', +'Finsterklaue', +'Seejong', +'Tauros GX', +'Memory Berry*', +'Sehr effektive Brille', +'Rücksendeetikett', +'Rayquaza V', +'Zacian', +'Machomei GL', +'Geheimnis-Schild ß', +'Lavados-EX', +'Surfstrand', +'Tsitrubeere', +'Togekiss EX', +'Parasek', +'Regieleki', +'Kapu-Fala GX', +'Efoserp', +'Traveling Salesman*', +'Major Bobs Strategie', +'Silvarro', +'Prof. Platan', +'Mel', +'Rufklingel', +'Mars', +'Roserade GL', +'Handventilator', +'Vivillon', +'Palkia EX', +'Knogga', +'Mitodos', +'Flambirex', +'Wailord ex', +'Ecogym*', +'Ursaluna V', +'Team Rockets Fabrik', +'Geosali', +'Regirock-ex', +'Gallopa 4', +'Mistys Enton', +'Simsala', +'Basis-Metal-Energie', +'Feenschmuck Fähigkeit', +'Scherox EX', +'Zyrus' Entschlusskraft', +'Enokoro', +'Elektro-Energie', +'Warp Energy*', +'Team Galaktiks Erfindung G-103 Kraftspray', +'Stuart', +'Umkehrboard', +'Cynthias Roserade', +'Fluchtboard', +'Hops Relaxo', +'Jim', +'Nio', +'Wielie', +'Vielzweckmaschine 01', +'Skaraborn 4', +'Cavalanzas', +'Tiefdrucksystem', +'Smart-Rotom', +'Junglut', +'Suicune', +'Enigmaras Blipp', +'Antiquitätenjäger', +'Sternenstück', +'Drachenelixier', +'Lusardin-ex', +'Basis-Water-Energie', +'Voluminas-ex', +'Tracy', +'Intelleon VMAX', +'Glurak & Rutena GX', +'Älteste von Elyses', +'Bank-Schutzschild', +'Nachtara V', +'Schaloko', +'Hydropi', +'Überreste', +'Mega-Gengar-ex', +'Silembrim VMAX', +'Zapdos-EX', +'Basis-Fighting-Energie', +'Trotzweste', +'Knattox', +'Stolloss EX', +'Maritellit', +'Super-Angel', +'Deoxys Verteidigungsform', +'Beleber', +'Stärkeamulett', +'Gelatini', +'Fossil-Ei', +'Eneco', +'Pokémon-Züchterin', +'Celebi VMAX', +'Sympaball', +'Mortcha', +'Hokumil', +'Katagami GX', +'Meisterball', +'Schlingking', +'Geräumiger Eimer', +'Suicune GX', +'Tauschwagen', +'Axantor VSTAR', +'Windewoge', +'Rasaff', +'Barrakiefa', +'Team Galaktiks Erfindung G-109 SP Radar', +'Panekon', +'Post von Bill', +'Absol ex', +'Meditalis ex', +'Tarnkappe', +'Hypno', +'Ultra-Necrozma', +'Blitza ex', +'Mutige Spitzhacke', +'Hippopotas', +'Weberak', +'Geheimnis-Schild (Delta)', +'Lohgock FB', +'Praktibalk', +'Voluminas G', +'Super Energie-Absauger', +'Lapras VMAX', +'Hundemon', +'Zapplarang', +'Schilterus' Panzerfossil', +'Poké Vital A', +'Golgantes V', +'Scharfes Gewürzcurry', +'Wailord', +'Tentoxa', +'Duodino', +'Icognito Z', +'Turtoks Geistesbund', +'Stachel-Energie', +'Viso-Caster', +'Rostiges Schwert', +'Schwarzgurt', +'Raikou *', +'Silvana', +'Fischernetz', +'Entei GX', +'SchutzEnergie', +'Dunkles Golbat', +'Holon-Formeo', +'Zubat', +'Alola-Sandan', +'Mutters Fürsorge', +'Lavandia', +'Frosdeje GL', +'Mimigma-ex', +'Schneppke', +'Mac', +'Sandfell-ex', +'M-Guardevoir EX', +'Alph-Ruinen', +'Somnivora', +'Professor Eichs Vorbereitung', +'Meloetta-ex', +'Pikachu', +'Lektrobal GX', +'Professor Birk', +'Garados' Geistesbund', +'Jungglut', +'Pikachu & Zekrom GX', +'Kwaks', +'Alter PC', +'Enekoro', +'Team Rockets Rettan', +'Ronah', +'Chelast GL', +'Spiral-Energie', +'Xerneas EX', +'Thanathora', +'Mega-Rexblisar-ex', +'Ambidiffel G', +'Woingenau', +'Katapuldra V', +'Geowaz', +'Epitaff-ex', +'Holon-Vermächtnis', +'Richterpfeife', +'WunderEnergie', +'Geheimnis-Schild (Alpha)', +'Folipurba-ex', +'Melmetal-ex', +'Hinatsu', +'Zamazenta VSTAR', +'Chelast', +'Wanderer', +'Groudon', +'Muramura GX', +'Skaraborn', +'Psiau', +'Karpador', +'Raikou-EX', +'Schwalbini', +'PokéStop', +'Rihornior', +'Sprösslings-Turm', +'Pokémon-Flöte', +'Libelldra-ex', +'Lugia EX', +'Aquana ex', +'Delion', +'Schlaf!', +'Zoroark-TURBO', +'Iksbat V', +'Team-Wechsel', +'Dunkles Arbok', +'Raffel', +'Polaross', +'Lugia V', +'Entoron-TURBO', +'Wasserpflaster', +'Seltsame Höhle', +'Kampf-Energie', +'Schwarzgurt-Training', +'Libelldra', +'Krebutack', +'Zobiris G', +'Zigzachs', +'Mondscheinstadion', +'Nidoking', +'Wolly', +'Galar-Laschoking VMAX', +'Schimmerndes Kabutops', +'Lapras GX', +'Muskelband', +'Schneller Ball', +'Psiana', +'Quendella', +'Skelokrok', +'Tarundel', +'Calamanero', +'Erinnerungsbeere', +'Gehweiher', +'Tuska', +'Großes Amulett', +'Dartignis', +'Xeros' Machinationen', +'Illusionsportal', +'Celebi-ex', +'Top-Beleber', +'Celebi V', +'Lilminip', +'Psiana-ex', +'Tragosso', +'See des Nichts', +'Lilly', +'Saguaro', +'Balloon Berry*', +'Latias ex', +'Pokémon-Wettbewerbshalle', +'Alola-Sleimok GX', +'Aerium Z: Luftschnitt', +'Drapfel VMAX', +'Erfindung des falschen Professor Eich', +'Regenbogenpinsel', +'Icognito F', +'Lillys ganze Kraft', +'Kramshef G', +'Ns Klikdiklak', +'Celebi & Bisaflor GX', +'Frubaila', +'Team Rockets Zubat', +'Prof. Antiquas Vitalität', +'Heerashai-ex', +'Turm des Wassers', +'Dracena', +'Sniebel', +'Helles Aquana', +'Schweres Staffelholz', +'Snobilikat', +'Raum-Zeit-Verzerrung', +'Sonnenschein Formeo', +'Helles Omot', +'Psycho-Würfel 01', +'Gortrom VMAX', +'Burmadame Pflanzenumhang', +'Drifzepli', +'Magnezone EX', +'Mistys Lapras', +'Babiribeere', +'Karnimani', +'Enigmaras Voltobal', +'Paras', +'Pflanzenenergie', +'Team Rockets Energie', +'Lichtel', +'Etta', +'Pyroleo-TURBO', +'Rayquaza EX', +'Schmied', +'Knapfel', +'Schimmerndes Genesect', +'Dunkles Sleimok', +'Mobai', +'Elektek', +'Galar-Zigzachs', +'G-Skop', +'Pflanzen-Disc', +'Unheilvolles Schneegebirge', +'Magearna EX', +'Ultrigaria', +'Wald der großen Gewächse', +'Vollmetall-Labor', +'Erdanziehungsedelstein', +'Kriechflügel', +'Elektroenergie', +'Alola-Raichu', +'Despotar EX', +'Lamellux', +'Fran', +'Ampharos', +'Regigigas V', +'Versteck-Darkness-Energie', +'Hisui-Washakwil', +'Krarmor', +'Fossilienbagger', +'Professor Eibe', +'Hochwertiger Energie-Zugewinn', +'Sichlor ex', +'Team Rockets Mimigma', +'Shuppet', +'Team Magma Ball', +'Misty', +'Turtok & Plinfa GX', +'Kasper', +'Geowaz ex', +'Überragender Energie-Zugewinn', +'Federball', +'Kyurem EX', +'PokéCom', +'Maximalgürtel', +'Dunkles Glurak', +'Gemma', +'Prof. Birks Beobachtungen', +'Blutmond-Ursaluna', +'Liberlo-ex', +'Piondragi 4', +'Muramura', +'Wasserenergie', +'Energietausch', +'Doppelte Regenbogen Energie', +'Hier kommt Team Rocket!', +'Peppers Sandwich', +'Galagladi 4', +'Bluzuk', +'Meistagrif V', +'Rihorn', +'Arkani ex', +'Mantirps', +'Krawumms ex', +'Schimmerndes Mewtu', +'Groudon *', +'Hundemon EX', +'Geckarbor', +'Keldeo-ex', +'Patinaraja', +'Lugia GX', +'Cosima', +'Altaria-ex', +'Frospino', +'Milotic', +'Kampfreporter', +'Krawell-ex', +'Team Rockets Klingplim', +'Bestienbringer', +'Karippas GX', +'UHaFnir-ex', +'Durengard V', +'Honig', +'Verpackte Bestellung', +'Phanpy', +'Jubel von Team Yell', +'Team Rockets Lance', +'Lohgock VMAX', +'Rieseneis', +'Alola-Sandamer GX', +'Banditenschwestern', +'Wiesenior', +'Gewaldro GX', +'Zekrom GX', +'Hala', +'Chelterrar-ex', +'Voltriant', +'Salanga', +'Nockchan', +'Choreogel GX', +'Rockets Snobilikat ex', +'Coiffwaff', +'Raikou GX', +'Mega-Skaraborn-ex', +'Icognito B', +'Scherox VMAX', +'Blätterumhang', +'Turmruine', +'Amphizel', +'Flunkifer', +'Vetternhilfe', +'Eisenhaupt-ex', +'Alola-Knogga', +'Robball', +'Lavados-ex', +'Handschuhe der Redlichkeit', +'Drifzepeli FB', +'Hisui Voltobal', +'Margit', +'Epitaff', +'Wablu', +'Calamanero VMAX', +'Endynalos', +'Meteno', +'Serpiroyal-ex', +'Golbit', +'Ulrich', +'Pokusan VMAX', +'Volbeat', +'Team Rockets Rattfratz', +'Koakobeere', +'Dialga GX', +'Baojian', +'Piondragi VSTAR', +'Skuntank G', +'Gelatwino', +'Felino', +'Stahlbunker', +'Bidifas', +'Feuer-Disc', +'Skarabaks', +'Rocko', +'Florges EX', +'Wummer', +'Aggregat-Energie FightingDarknessFairy', +'Klikk', +'Rayquaza VMAX', +'Britzigel V', +'Camerupt ex', +'Glurak G', +'Technische Maschine: Aus heiterem Himmel', +'Pyros Quizshow', +'Mew VMAX', +'Arceus VSTAR', +'Spikeford-Arena', +'Bianka', +'Dummisel', +'Recycle-Energie', +'Alola Vulpix', +'Maximale Angel', +'Pokémon Fan Club', +'Fuegro V', +'Kyurem-EX', +'Pandagro', +'Darkrai G', +'Holon-Wissenschaftler', +'Sedisal', +'Feuerstein', +'Nestball', +'Genesect GX', +'Lanas Suche', +'Alola-Kokowei-ex', +'Jasmin', +'Technische Maschine TS-2', +'Feuerkristall', +'Zelestis', +'Unterwasser-Ruinen', +'Burmy Sandumhang', +'Holon-Kreis', +'Tenterra', +'Armored Mewtwo', +'Paldea-Tauros', +'Normifin', +'Botogel', +'Wela Vulkanpark', +'Fermanca City', +'Griffel', +'Karadonis', +'Angel', +'Brian', +'Kiste des Unheils', +'Strahlendes Glurak', +'Kapilz', +'Zamazenta V', +'Dunkles Kokowei', +'Bissbark V', +'Fokussierter-Angriff-Spottrolle', +'Kontergewinn', +'Team Rockets Keradar', +'Dunkles Rattikarl', +'Rattikarl', +'Zirpeise', +'Pflanze-Energie', +'Alola Vulpix-VSTAR', +'Riffex', +'Ho-Oh-EX', +'Technische Maschine TS-1', +'Freunde aus Sinnoh', +'Pikuda', +'Kyogre V', +'Selfe', +'Dronen-Rotom', +'Kraft-Colorless-Energie', +'Papinella', +'Top-Elixier', +'Lavados & Zapdos & Arktos GX', +'Klikdiklak', +'Fuegro', +'Feenschmuck Grass', +'Iscalar', +'Fiaro-TURBO', +'Konter-Energie', +'Pinio', +'Melanies Überzeugung', +'Papella', +'Team-Ruf', +'Nincada', +'Luxtra-ex', +'Galar-Laschoking V', +'Itemradar', +'Meistagrif', +'Tenterra-ex', +'Camerupt EX', +'Mondscheiben-Podium', +'Ambidiffel', +'Purmel', +'Magnezone VSTAR', +'Pikachu *', +'Dual Ball*', +'Rayquaza ex', +'Erhol-Energie', +'Hypnotoxinlaser', +'Geheimnis-Fossil', +'Feldgebläse', +'Team Magmas Qurtel', +'Pottrott', +'Blitza V', +'Top-Trank', +'Ohrdoch EX', +'Trikephalo C', +'Hypertrank', +'Poké Ball', +'Duraludon', +'Stolloss ex', +'Sarzenia', +'Colossand', +'Lugia ex', +'Team Aquas Noktuska', +'Endivie', +'Klarins Schneckmag', +'Nachtara EX', +'Montecarbo VMAX', +'Ur-Dialga', +'Lahmus', +'Dunkles Glutexo', +'Sanaconda VMAX', +'Stadtgeschäft', +'Flavia', +'Fermicula', +'Glurak *', +'Schimmelreiter-Coronospa VMAX', +'Cosmog', +'Octillery', +'Hundemons Geistesbund', +'Quaputzi', +'Meditalis', +'Voldi', +'Begleitende Flöte', +'Bellektro', +'Alola-Geowaz GX', +'Kopfgeschirr Team Flare-Superzubehör', +'Wunder-Sphäre (Gamma)', +'Cynthias Hilfe', +'Guardevoir V', +'Ditto VMAX', +'Icognito !', +'Feenschmuck Dragon', +'Rollerskates', +'Richter', +'Dunkles Amoroso', +'Schimmerndes Arceus', +'Sleimok ex', +'Maschock', +'Hyperaroma', +'Buddelhandschuhe', +'Staraptor FB', +'Boreos', +'Zurrokex', +'Cynthia', +'Luxtra', +'Yasu', +'Rockets Raikou ex', +'Hoopa EX', +'Cynthias Kaumalat', +'Himmelturm', +'Grandiras GX', +'Enigmara', +'Tor des Ursprungs', +'Normium Z: Tackle', +'SpezialHammer', +'MCs Hype', +'Mamolida', +'Seedraking GX', +'Trikephalo-ex', +'Bandelby', +'Mew ex', +'Knakrack-ex', +'Energierückstellung', +'Psiopatra', +'Heiteira-ex', +'Silberspiegel', +'Venicro', +'Ampharos-ex', +'Lapras', +'Pokémon Marsch', +'Deponitox V', +'Dedenne-ex', +'Schimmerndes Noctuh', +'Ciphermaniacs Decodierung', +'Luftballon', +'Icognito X', +'Lucario', +'Großer Parasol', +'Urzeitlicher Altar', +'Durengard VMAX', +'Aquana GX', +'Mega-Absol-ex', +'Mimigma VMAX', +'Freunde aus Hisui', +'Fruyal V', +'Seemon', +'Maske des Oni', +'Holon-Lektrobal', +'Guardevoir VMAX', +'Latios GX', +'Gefährlicher Bohrer', +'Quajutsu', +'Hisui-Tornupto V', +'Brutalanda ex', +'Troys Panzaeron', +'Cyano', +'Knarksel', +'Oran Berry*', +'Wasser-Energie', +'Anoriths Klauenfossil', +'Kangama', +'Matrifol', +'Meltan', +'Zygarde EX', +'Marshadow & Machomei GX', +'Palkia & Dialga LEGENDE', +'Allerlei-Energie GrassFirePsychicDarkness', +'Billy & Onea', +'Hisui-Fukano', +'Strahlendes Resladero', +'Der Boss hat immer Recht', +'Lohgock ex', +'Schlurm-ex', +'Energiemünze', +'Kopplosio', +'Alola-Sleimok-ex', +'Arktos-EX', +'Team Rockets Traumato', +'Prof. Eichs Tipp', +'Dunkles Feelinara V', +'Kapu-Fala', +'Registeel ex', +'Geduldhammer', +'Hisui-Admurai', +'Apoquallyp-ex', +'Hisui-Arktilas', +'Zyklon-Energie', +'Gelatroppo', +'Lektrobal ex', +'Kampf-Würfel 01', +'Guardevoir EX', +'Kubuin-ex', +'Xeros', +'Guardevoir-ex', +'Dunkles Duflor', +'Knilz', +'Leval', +'Helles Maschock', +'Aquana-ex', +'Heilpuder', +'Formeo Regenform', +'Dunkles Psiana', +'Bruno', +'Lady', +'Bills Wartung', +'Norman', +'Xerneas-ex', +'MegaTurbo', +'Wolwerock-ex', +'Luft-Siegelstein', +'Liberlo VMAX', +'Maik & Benny & Colin', +'Schneegipfelpfad', +'Profi-Energiesuche', +'Wuffels', +'Echnatoll', +'Sen-Long V', +'Chillabell', +'Groudon ex', +'Alola-Rattikarl', +'Impoleon V', +'Rattikarl G', +'Kräutermischung', +'Antikes Federfossil', +'Zapdos ex', +'Knakrack V', +'Cynthias Kryppuk', +'Mega-Kangama-ex', +'Ermutigender Brief', +'Tobutz', +'Genesect-ex', +'Zwillings-Energie', +'Simsala 4', +'Schimmerndes Celebi', +'Feurigel', +'Tohaido ex', +'Fabian', +'Icognito P', +'Feenschmuck Fighting', +'Donarion', +'Webarak', +'Dunkles Machomei', +'M-Simsala EX', +'Troy', +'Pokémon-Fänger', +'Deoxys Initiativform', +'Team Rockets Hunduster', +'Azugladis', +'Heerashai', +'Prof. Burnett', +'Somniam', +'Silberreif', +'Ergreifendes Aroma', +'Hops Zwollock', +'Poké-Puster +', +'Rayquaza C', +'Seeufer', +'Milotic ex', +'Bisaflor ex', +'Fliegendes Pikachu VMAX', +'Galar-Flunschlik V', +'Willi', +'Kyogre *', +'Diantha', +'M-Garados EX', +'Schiffbrüchiger', +'Team Magma Intrigant', +'Energieaufladung', +'Araqua', +'Paldea-Suelord', +'Pummeluff', +'Arbeiterin', +'Team Rockets Transceiver', +'Amura', +'Hisui-Zoroark VSTAR', +'Darkrai V', +'Rotom-ex', +'Dunkles Garados', +'Simsala EX', +'Gastrodon Westliches Meer', +'Troys Puppance', +'Metagross *', +'Fatalitee', +'Dunkles Knuddeluff', +'Altbernstein Aerodactyl', +'Wartung', +'Hundemon G', +'Kabuto', +'Galar-Geradaks', +'Stahlos' Geistesbund', +'Bestellpad', +'Aggrostella', +'Smettbo FB', +'Algitt', +'Amoroso-TURBO', +'Rollum', +'Pokémon Center', +'Lusardin GX', +'Schimmerndes Karpador', +'Garstella', +'Porygon-Z GX', +'Parallelstadt', +'Phlegleon', +'Olangaar V', +'Mewtu-EX', +'Schmetterhandschuhe', +'Dicke-Freunde-Knursp', +'Inselwanderschafts-Abzeichen', +'Dunkles Smogmog', +'Schlapfel V', +'Icognito I', +'Siegfrieds Glurak V', +'Nachtara VMAX', +'Rabauz', +'Rossana', +'Garados GX', +'Raichu V', +'Samantha', +'Ramoth V', +'Team Rockets Giovanni', +'Piepi', +'Aerodactyl GX', +'Bromley', +'Reboot-Modul', +'Feenschmuck Lightning', +'Beates Ziehung', +'Magnezone', +'Bumerang-Energie', +'Lavados', +'Manguspektor', +'Saverio', +'Serpiroyal', +'Elektromagnetisches Radar', +'Anego', +'DoppelFarblosEnergie', +'Team Rockets Nidoking-ex', +'Rocara-TURBO', +'Pyro', +'Karpador & Wailord GX', +'Dicke Polster', +'Sleimok', +'Elementarorden', +'Team Rockets Smogmog', +'Fließender-Angriff-Energie', +'Fluchtseil', +'Dialga', +'Forgita', +'Donnersichel', +'Greifarm', +'Milotic C', +'Memmeon', +'Gastrodon Östliches Meer', +'Pokémon-Persönlichkeitstest', +'Eisendorn', +'Lucario C', +'Schlaraffel V', +'Team Rockets Mewtu-ex', +'Freundesball', +'Wommel', +'Kattlea', +'Team Rockets Rattikarl', +'Schiggy', +'Tectass-ex', +'Ärztin', +'Tauboss', +'Knakrack C', +'Metagross VMAX', +'Bibor G', +'Despotars Geistesbund', +'Hornliu', +'Team Rockets Larvitar', +'Kyogres Geistesbund', +'Halbstarke', +'Choreogel-ex', +'Kickerlo', +'Antonias Stadion', +'Reißlaus', +'Regigigas-EX', +'Magmar ex', +'Giga-Bombe', +'Dunkles Hundemon', +'Seedraking-ex', +'Kubuin V', +'Dunkles Laschoking', +'Giratina', +'Panzerfossil', +'Owei', +'Heilender Schal', +'Bronzong 4', +'Tropius', +'Dunkles Iksbat', +'Technische Maschine: Schubenergie', +'Kapu-Toro', +'Scherox', +'Habitak', +'Kyurem VMAX', +'Yveltal GX', +'Riffex VMAX', +'Holon-Energie WP', +'Starmie-TURBO', +'Basis-Grass-Energie', +'Trainercoach', +'Stärke-Energie', +'Rayquaza GX', +'Nidoran w', +'Trickschaufel', +'Wattzapf', +'Dunkles Aquana', +'Relaxo-ex', +'Rihornior 4', +'Gierspenst', +'Pam-Pam', +'Olivinio', +'Betys', +'Lillys Entschlossenheit', +'Aokis Geschick', +'Wendelberg', +'Apoquallyp', +'Plaudagei', +'Wunderpflaster', +'Bollterus GL', +'Starmie', +'Voltrean', +'Frigometri', +'Myrapla', +'Swaroness', +'Loturzel', +'Klarins Pinsir', +'BlitzEnergie', +'Voltrean-ex', +'Team Aquas Fiffyen', +'Suicune & Entei LEGENDE', +'Viscargot', +'Handtrimmer', +'Uhu-Gasangriff', +'Hisui-Tornupto VSTAR', +'Hisui-Admurai VSTAR', +'Seemops', +'Anego GX', +'Ns Symvolara', +'Evoli & Relaxo GX', +'Dunkles Raichu', +'Wummer-TURBO', +'Marys Pelzebub', +'Simsalas Geistesbund', +'Heatran GX', +'Tafforgita', +'Piondragi', +'Dunkles Igelavar', +'Sabbaione', +'Fahrrad', +'Feliospa', +'Hisui Viscogon-V', +'Wiederverwertungsenergie', +'Armaldo', +'Dunkles Waaty', +'Raissa', +'Machomei V', +'Darkrai EX', +'Dinglu-ex', +'Bronzong', +'Chelcarain', +'Volo', +'Team Magma Verschwörer', +'Mega-Guardevoir-ex', +'Thought Wave Machine*', +'Taiso', +'Scherox' Geistesbund', +'Kamillo', +'Falscher Professor Eich', +'Spinsidias-ex', +'Brockoloss', +'Urs', +'Yanmega 4', +'Scoppel', +'Kramshef', +'Skunktank', +'Mamutel GL', +'Schneesturm Formeo', +'Mega-Diancie-ex', +'Lugia LEGENDE', +'Team Galaktiks Erfindung G-105 Poké-Dreher', +'Snobilikat GX', +'Gastrodon', +'Tuch von Team Yell', +'Energieaufbereitung', +'Bisasam', +'Raikou & Suicune LEGENDE', +'Hypnomorba', +'Funkelnder Kristall', +'Rayquaza & Deoxys LEGENDE', +'Dunkles Ariados', +'Koraidon', +'Ns Klikk', +'Herausforderung!', +'Zyrus' Komplott', +'Vulnona V', +'Energy Charge*', +'Latios' Geistesbund', +'Otis', +'Entei *', +'Rotomurf', +'Stahlos V', +'Phione', +'Team Rockets Iksbat-ex', +'Ho-Oh EX', +'Mistys Garados', +'ArceusPhone', +'Dunkles Tornupto', +'Gras-Würfel 01', +'Basis-Fire-Energie', +'Hisui-Schwerball', +'Voltilamm', +'Gedächtnis-Energie', +'Hügel des Dyna-Baums', +'Alola-Raichu-ex', +'Saltigant-ex', +'Team Rockets Nidorino', +'Thermopod', +'Heilungs-Energie', +'Weißes Kyurem-EX', +'Palkia G', +'Brimova', +'Starmie-ex', +'Icognito', +'Melmetal GX', +'Pixi', +'Kapu-Riki-ex', +'Navitaub', +'Magneton', +'Feen-Energie', +'Kräuter-Energie', +'Moorabbel', +'Feentropfen', +'Hisui-Zoroark', +'Azurill', +'Rockets Überraschungsangriff', +'Brigaron', +'Bronzel', +'Professor Kosmos Entdeckung', +'Einladende Laterne', +'Mica', +'Omot', +'Wingull', +'Florges', +'Lotta', +'Wüsten -Schamane', +'Rotom VSTAR', +'Kraftwerk', +'Nidoqueen', +'Felori', +'Gufa', +'Trombork-TURBO', +'Brand-Energie', +'Lectragon VMAX', +'Wampitz', +'Schalellos Westliches Meer', +'Rappenreiter-Coronospa V', +'Edler Rollwagen', +'Gewinn-Energie', +'Coronospa', +'Mabula', +'Lillys Poképuppe', +'Prof. Eichs Nachforschungen', +'Bojelin', +'Paldea-Felino', +'Spikeford', +'Toxiquak EX', +'Flaminkno-ex', +'Ultraforschungsteam', +'Deoxys V', +'Folikon', +'Schimmerndes Jirachi', +'UHaFnir GX', +'Magcargo-ex', +'Despotar ex', +'Vapydro City-Arena', +'Lillys Curelei', +'Morgenschwingen-Necrozma GX', +'Lanette's Internet Suche', +'Icognito W', +'Wellenbrecher Marinus', +'Keifel', +'Mastifioso-ex', +'Magcargo GX', +'Morlord', +'Ballonbeere', +'Trainingscenter', +'Nuit', +'Registeel', +'M-Turtok EX', +'Sanaconda V', +'Fiaro', +'Fokussierter-Angriff-Wulaosu VMAX', +'Ditto V', +'Power-Sanduhr', +'Heldenumhang', +'Farbeagle', +'Dragoran GX', +'Heikos Training', +'Akademie bei Nacht', +'Trombork V', +'Glückshelm', +'Raikou ex', +'Glurak VMAX', +'Damythir V', +'Rächender Boxhieb', +'See der Stärke', +'Garados EX', +'Rabauken Bob & Rob', +'Olangaar', +'Blitza GX', +'Kapu-Kime GX', +'Flattutu', +'Voltensos Geistesbund', +'Cresselia-ex', +'Team Aquas Seemops', +'Wasch-Rotom', +'Blizzania', +'Gluraks Geistesbund', +'Velursi', +'Rückentwicklungsspray', +'Maho & Tracy', +'Paldea-Suelord-ex', +'Flurmel', +'Tentacha', +'Timerball', +'Sandfell', +'Knofensa', +'Nirgendwo-Entferner', +'Prof. Kukui', +'Bailonda-ex', +'Marys Kleoparda', +'Onix', +'Sandamer', +'Roserade C', +'Galar-Ponita', +'Heldenmedaille', +'Kubuin', +'Kleptifux', +'Raichu', +'Raupy', +'Wolwerock GX', +'Team Rockets Superball', +'Bestienit', +'Strahlendes Evoli', +'Karippas', +'Qurtel', +'Metal Energy*', +'Dialga-ex', +'Hippoterus', +'Aprikoko-Hersteller', +'Beatori', +'Belila', +'Cresselia-EX', +'Amoroso V', +'Pokusan', +'Pokémon-Sammler', +'Knattatox', +'Rettungsring', +'Lieferdrohne', +'Gortrom V', +'Dunkles Maschock', +'Emolga EX', +'Kingler VMAX', +'Magmar', +'Magnetilo', +'Machomei EX', +'Drifzepeli', +'Tengulist GX', +'Yveltal-TURBO', +'Flabébé', +'Duflor', +'Entoron', +'Eisenfalter', +'Lahmus' Geistesbund', +'Sannah', +'Surfendes Pikachu', +'Kicklee', +'Metall Energie', +'Enigmaras Wampitz-ex', +'Hops Wolly', +'Schimmerndes Despotar', +'Ofenmaske-Ogerpon-ex', +'Burmadame', +'Pescragon V', +'Kraterberg', +'Elfun GX', +'Klarins Pichu', +'Team Rockets Sleimok', +'M-Mewtu EX', +'Rabigator', +'Porygon-Z', +'Cherens Obhut', +'Lumineon', +'Ns Felilou', +'Nigiragi', +'Strepoli', +'Klarins Tornupto', +'Team Galaktiks Erfindung G-101 Energiegewinn', +'Kaocto', +'Guardevoir ex', +'Folipurba VSTAR', +'Panferno-ex', +'Bisofank', +'Luxusbombe', +'Feenschmuck Psychic', +'Mesalona City', +'Netzball', +'Prof. Laven', +'Kyurem-ex', +'Skorgro', +'Befragung', +'Hyperball', +'Terapagos-ex', +'Jet-Energie', +'Icognito Y', +'Glaziola-ex', +'Cosmovum', +'Mistys Starmie', +'Zwirrlicht', +'Starmie V', +'Kiesling', +'Flamara-ex', +'Iksbat VMAX', +'Feelinara V', +'Arkani-ex', +'Aerodactyl-ex', +'Herbaros Sammlung', +'Lebenstau', +'Dunkles Scherox', +'Kunstrad', +'Tausch', +'Volcanion EX', +'TriumVant', +'Schimmerndes Mew', +'Nigiragi-ex', +'Bisofank-ex', +'Kapu-Riki V', +'Ohrenbetäubende Glocke', +'Elfun VSTAR', +'Energiezugewinnung', +'Lillys Perle', +'Poké-Zieher +', +'Tänzerin', +'Ninjatom', +'Sterndu', +'Guardevoir & Feelinara GX', +'Snibunna', +'Humanolith V', +'Jirachi-EX', +'Fynx', +'Flamara *', +'Freunde aus Paldea', +'Energiesuche', +'Kamehaps', +'Abenteurer-Neuling', +'Verdächtige Konserve', +'Team Rockets Pupitar', +'Jongleur', +'Riffex-ex', +'Lillys Wommel', +'Makuhita', +'Jirachi V', +'Elektrischer Generator', +'Nemilas Rucksack', +'Calamanero V', +'Flemmli', +'Pamomamo', +'Achromat', +'Zirpeise V', +'Hutsassa-ex', +'Schwarzes Kyurem', +'Bisaflor VMAX', +'Rayquaza-ex', +'Krawell V', +'Connie', +'Vesprit', +'AssTrainer', +'Imantis', +'Cupidos V', +'M-Altaria EX', +'Keradar', +'Siegfried', +'Clavel', +'Icognito O', +'Arktos GX', +'Tohaido EX', +'Glibunkel', +'Peppers Schlaraffel', +'Urglmator', +'Infamomo-ex', +'Kirlia', +'Hops Urgl', +'Morpeko VMAX', +'Elezard', +'Cay', +'Deoxys VSTAR', +'Kadabra', +'Samurzel', +'Amalia', +'Burmadame Sandumhang', +'Beulenhelm', +'Metagross', +'Wampitz-ex', +'Schlaraffel VMAX', +'Smogon', +'Peppers Raffel', +'Togepi', +'Galar-Smogmog', +'Kaocto V', +'Team Aquas Magnayen', +'Hunduster', +'Neutralisierendes Parfüm', +'Menki', +'Victini-ex', +'Erweckende Trommel', +'Galaktik-Zentrale', +'Icognito T', +'Härteband', +'Delta Regenbogen-Energie', +'Turm des Unlichts', +'Schatz-Energie', +'Shnebedeck', +'Giovannis Exil', +'Bibor-ex', +'Energie-Koppler', +'Granforgita', +'Mew *', +'Zyrus', +'Voltolos-EX', +'Venuflibis G', +'Amonitas', +'Tangela', +'Team Magmas Groudon', +'Moruda-ex', +'Granithöhle', +'Ur-Dialga V', +'Cynthias Gefühle', +'Arceus', +'Healing Field*', +'Drapfel V', +'Geheimes Schild (Gamma)', +'Aroma-Grass-Energie', +'Magmabecken', +'Damythir', +'Mimigma V', +'Viridium GX', +'Himmelspfeilbrücke', +'Regirock', +'Silembrim', +'Gloria', +'Glastrompete', +'Alola-Kokowei', +'Vertraute Glocke', +'Registeel *', +'Sonnewik-Arena', +'Lockwedel', +'Aerodactyl ex', +'Fluffeluff', +'Brigaron-TURBO', +'Klarins Igelavar', +'Team Magmas Rihorn', +'Klingplim', +'Teddiursa', +'Branawarz', +'Vulnona-ex', +'Ur-Palkia VSTAR', +'Banette ex', +'Fleknoil', +'PlusPower', +'Bezauberndes Pofflé', +'Reinigende Handschuhe', +'Stalobor', +'Feuerfeste Handschuhe', +'Ulrichs Stadion', +'Infernopod', +'Liberlo V', +'Turner', +'Picknickerin', +'Morpeko', +'Rappenreiter-Coronospa VMAX', +'Kristallklinge', +'TM-Maschine', +'Wellenfächer', +'Amigento', +'Antikes Wurzelfossil', +'Simsala *', +'Klarins Magcargo', +'Dimensionstal', +'Team Rockets Hundemon', +'Hisui-Snieboss', +'Dragoran', +'Vipitis', +'Blitza VMAX', +'Kampfverdichter Team Flare-Zubehör', +'Koalelu', +'Bisaflor & Serpifeu GX', +'Tarnpignon', +'Dunkles Ursaring', +'Darkrai', +'Laschoking-ex', +'Arktos ex', +'Team Aquas Versteck', +'Metagross GX', +'Wolwerock V', +'Ausrüstungsgreifer', +'VIP-Kampfpass', +'Ferkuli', +'Boreos-EX', +'Nebulak', +'Amulett der Hoffnung', +'Rote Späher-Karte', +'Dunkles Octillery', +'Doppelte farblose Energie', +'Hundemon V', +'Arceus-ex', +'Giratina-EX', +'Turtok GX', +'Holon-Voltobal', +'Krebscorps', +'Zekrom-EX', +'Stolloss', +'Darkrai GX', +'Sichlor', +'Roy', +'Farbroller', +'Zekrom-ex', +'Stahlos GL', +'Rückentwicklungs-Spray', +'Team Rockets Lavados-ex', +'Icognito K', +'Roxanas Backup', +'Lucario GL', +'Rettan', +'Achromas' Beharrlichkeit', +'Giflor', +'Langzeitgedächtnis', +'Marys Felilou', +'Latias', +'M Lucario EX', +'Offensivweste', +'Impergator', +'Mantidea', +'Ampharos' Geistesbund', +'Kampf-Disc', +'Avenaros Training', +'Lecryodon', +'Blanche', +'Zwieps', +'Pokémon-Kommunikation', +'Wunder-Sphäre (Beta)', +'Echohorn', +'Wonneira', +'Zünd-Energie', +'Team Rockets Trickserei', +'Buddel-Brüder', +'Calamanero EX', +'Fossilausgrabungskarte', +'Gengar V', +'Pottrott GX', +'Flotte Hüfttasche', +'Helles Lahmus', +'Trickmünze', +'Erikas Gastfreundschaft', +'Team Aqua Intrigant', +'Dunkles Blitza', +'Choreogel', +'Sania', +'Forstellka', +'Aranestro', +'Traumato', +'Team Magmas Lepumentas', +'Eisenblatt', +'Washakwil', +'Lorblatt', +'Galapaflos', +'Galar-Flegmon', +'Holon-Ruinen', +'Florges-TURBO', +'Mask Royale', +'Uralter Friedhof', +'Palkia GX', +'Dragoran EX', +'Woingenau V', +'Mampfaxo', +'Briduradon', +'Bestienring', +'Fließender-Angriff-Flugdrachenrolle', +'Pikachu VMAX', +'Schlummerwald', +'Unfairer Stempel', +'Mewtu EX', +'Gengar VMAX', +'Aufzieharm', +'Ben & Svenja', +'Dressella', +'Stahlos', +'Cynthias Knakrack-ex', +'Stadionruine', +'Kosturso GX', +'Kopplosio GX', +'Sicherheitsbrille', +'Kaguron', +'Giovannis Charisma', +'Kyurem V', +'M-Kangama EX', +'Peppers Tentagra', +'Holon Lehrer', +'Entei & Raikou LEGENDE', +'Kliklak', +'Icognito A', +'Kramshef GX', +'Blizzach-Tempel', +'Kommandutan V', +'Rattikarl-TURBO', +'Pokédex', +'Pachirisu', +'Schligdri', +'Hoopa GX', +'Expedition ins Unterirdische', +'Flaniwal', +'Klauenfossil', +'Fokussierter-Angriff-Wulaosu V', +'Celebi *', +'Papungha', +'Flamara', +'Chaneira ex', +'Lanturn', +'Megatonnengebläse', +'Seher', +'Schligdri-ex', +'Monozyto', +'Jirachi ex', +'Nirgendwo-Welt', +'Silvarro-ex', +'Team Rockets Porygon-Z', +'Shnurgarst G', +'Eisenrad', +'Zeitscherbe', +'Sturmwind', +'Schligda', +'Elima', +'Fukano', +'Folipurba GX', +'Folipurba VMAX', +'Barschwa', +'Trainingsstudio', +'Trikephalo-TURBO', +'Luxio', +'Fennexis', +'Tropenwinde', +'Kristallscherbe', +'Safcon', +'Team Galaktiks Wette', +'Brutalanda', +'Fokussierter-Angriff-Energie', +'Corasonn', +'Blutmond-Ursaluna-ex', +'Guardevoir', +'Galar-Pantifrost V', +'Schimmerndes Garados', +'Plasma-Fregatte', +'Togekiss V', +'Panzaeron FB', +'Hisui-Sniebel', +'Doppelter Ball', +'Altaria EX', +'Schneeblattorden', +'Nächtliche Wartung', +'Moruda', +'Glurak VSTAR', +'Team-Plasma-Orden', +'Sabrinas Vorschlag', +'Gengars Geistesbund', +'Tempo-Lightning-Energie', +'Sproxi', +'Ponita', +'Team Aqua Verschwörer', +'Eisenbündel', +'Lapras V', +'Volcanion V', +'Grillchita', +'Affiti-ex', +'Endynalos VMAX', +'Cross-Tauscher', +'Kampfkunstschule', +'Cynthias Barschwa', +'Zapdos', +'Prächtiger Mixer', +'Galar-Zapdos', +'Panzaeron ex', +'Silembrim V', +'Schwere Stiefel', +'Boost-Shake', +'Kapu-Riki VMAX', +'Waumpel', +'Milotic V', +'Krebutack ex', +'Schützende Kugel', +'Abprall-Energie', +'Feuer-Energie', +'Verbogener Löffel', +'Kleoparda', +'Energie-Rückgewinnung', +'Mamutel-ex', +'Forschungsdaten', +'Fließender-Angriff-Wulaosu', +'Enigmaras Voltrean', +'Natu', +'Energieaustausch', +'N', +'Waldwächter', +'Urne der Vitalität', +'Tracys Unterstützung', +'Amarino', +'Notgürtel', +'Galar-Pantimos', +'Po’u', +'Zeraora V', +'Stalobor-ex', +'Galar-Arktos V', +'Helles Vulnona', +'Schlingking GX', +'Holon-Forscher', +'Team Rockets Sleima', +'Toxiquak-ex', +'Schimmerndes Lugia', +'Training des Weisen', +'Rotom-Pokédex', +'Icognito ?', +'Zwollock', +'Wielie ex', +'Psiana ex', +'Kangama-ex', +'Insel-Eremit', +'Glaziola GX', +'Teleskopisches Visier', +'Keldeo-EX', +'Mortipot', +'Olivier', +'Pampuli', +'Solgaleo & Lunala GX', +'Nächtliche Müllabfuhr', +'GefahrEnergie', +'Energy Removal 2*', +'Vulpix', +'Victini-EX', +'ÖkoArm', +'Ottaro', +'Pokémon-Kreislauf', +'Pinsir', +'Paldea-Schüler', +'Lextremo', +'Barschuft', +'Volcanion', +'Manguspektor GX', +'Team Magmas Versteck', +'Zwirrklop ex', +'Urgl V', +'Galar-Mine 1', +'Liberlo', +'Chaneira', +'Energy Ark', +'Dunkles Amonitas', +'Giovannis Intrige', +'Wiederverwertung', +'Quartermak-ex', +'Porygon2', +'Psiana GX', +'Strahlendes Bisaflor', +'LeBelles Recherche', +'Zytomega', +'Rose Tower', +'Tracys Angel', +'Registeel-EX', +'Jurob', +'Mortipot V', +'Mew V', +'Pokusan V', +'Brimano', +'Lucario-ex', +'Aufwisch-Zyklon', +'Dragoran VSTAR', +'Rutena', +'Castellith', +'Starrstadt', +'Kampfgong', +'Peppers Mobtiff', +'Peppers Tenterra', +'Pokécom 3.0', +'Antonia', +'Ho-Oh GX', +'Kristall-Energie', +'Kommandutan', +'Furlongham', +'Schneckmag', +'Mega-Lucario-ex', +'Yveltal EX', +'Icognito VSTAR', +'Volkners Philosophie', +'Monargoras', +'Honweisel', +'Fletiamo', +'Fahnder', +'Folipurba V', +'Ofenmaske-Ogerpon', +'Verfluchte Schaufel', +'Waumboll', +'Larvitar', +'Machomei VMAX', +'Kyogre-ex', +'Firnontor EX', +'Tentagra', +'Cassiopeia', +'Galagladi-ex', +'Superball', +'Halupenjo-ex', +'Nebelschleier-Energie', +'Riffex V', +'Spieler', +'Reaktions-Energie', +'Expertengurt', +'Hisui-Tornupto', +'Kokuna', +'Chongjian', +'M-Ampharos EX', +'Igastarnish', +'Infernopod V', +'Peppers Mastifioso-ex', +'Irsa', +'Lolas Vorahnung', +'Ho-oh ex', +'Glaziola V', +'Helles Arkani', +'Feuerenergie', +'Strahlendes Quajutsu', +'Milotic-ex', +'Tauros', +'Aquana VMAX', +'Luxtra-TURBO', +'Kampf au Lait', +'Noktuska ex', +'Kuhmuh-Milch', +'Festival der Champions', +'Troys Metang', +'Sinelbeere', +'Rivale', +'Relaxo', +'Hisui-Silvarro', +'Seeper', +'Farigiraf-ex', +'Hisui Viscogon-VSTAR', +'Sonnfel', +'Ampharos GX', +'Garados ex', +'Micrick', +'Hitzkopf', +'Pescryodon V', +'Alola-Knogga GX', +'Entei V', +'Agoyon GX', +'Maskeregen', +'Banette', +'Team Aquas Walraisa', +'Fuegro-ex', +'Vergrößerungsglas', +'Stadt-Freiwillige', +'Viscora', +'Team Rockets Nidoran♂', +'Arbok', +'Palkia-ex', +'Primarene', +'Gewaldros Geistesbund', +'Famieps-ex', +'Fragrunz', +'Dunkles Lahmus', +'Holon-Bauer', +'Helles Togetic', +'Arktos-ex', +'Piccolente', +'Reshiram V', +'Kleoparda V', +'Lockmodul', +'Galar-Lahmus V', +'Amfira', +'Suicune *', +'Snibunna-ex', +'Zwollock V', +'Maxax', +'Fließender-Angriff-Wulaosu V', +'Fatalitcha', +'Pantimos', +'Nidorina', +'Umhang der Stärke', +'Quaxo ex', +'Dummimisel', +'Team Magmas Magnayen', +'Pokédex HANDY910is', +'M-Rayquaza EX', +'Charons Wahl', +'Rocara', +'Duraludon V', +'Dunkles Magneton', +'Alola-Sleimok', +'Latios *', +'Dunkles Ampharos', +'Stollos ex', +'Unkrauthandschuhe', +'Aquana V', +'Diancie EX', +'Tangoloss', +'Chongjian-ex', +'Müllgreifer', +'Ditto', +'Amigento GX', +'Donarion V', +'Metall-Bratpfanne', +'Fokussierter-Angriff-Bissdrachenrolle', +'Wutpilz', +'Perlu', +'Forstellka G', +'Skatepark', +'Sonnenkreis-Podium', +'Hisui-Lektrobal V', +'Bailonda', +'Fermicula-ex', +'Geowaz 4', +'Feelinara-ex', +'Gewaldro ex', +'Pudox', +'Resladero', +'Yveltal', +'Scott', +'Fuentente', +'Digdri', +'Saida', +'Trombork EX', +'Eisenfels', +'Quajutsu-ex', +'Makabaja', +'Punk-Helm', +'Luxtra GL', +'Rizeros', +'Kabutos Domfossil', +'Forschung des Professors (Prof. Eich)', +'Flauschling', +'Regirock ex', +'Togepi & Pii & Fluffeluff GX', +'Fruyal GX', +'M-Firnontor EX', +'Frubberl', +'Vertania-Wald', +'Team Aquas Tuska', +'Leaf', +'Galar-Makabaja', +'Servol V', +'Konterfänger', +'Galar-Pantifrost', +'Ultradimension', +'Dunkles Digdri', +'Letarking V', +'Beatori-ex', +'Alola-Kokowei V', +'Hisui-Admurai V', +'Tengulist', +'Die Übeltaten des Team Rocket', +'Kindwurm', +'Koga', +'Connies Fokus', +'Nidoran m', +'Helles Entoron', +'Zarude', +'Enetransporter', +'Koknodon', +'Fuegro GX', +'Regigigas VSTAR', +'Mythische Tafel', +'Abendmähne-Necrozma', +'Burmy Pflanzenumhang', +'Susuki', +'Burleobeere', +'Federfossil', +'Neo-Aufputsch-Energie', +'Helles Sonnflora', +'Xatu', +'Dunkles Gengar', +'DoppelDrachenEnergie', +'Gengar-ex', +'Igelavar', +'Goldini', +'Blubberschutz', +'Elekid', +'Trasla', +'Team Aquas Krebutack', +'Girafarig', +'Golbat', +'Mew-EX', +'Nachtara-ex', +'Xerneas-TURBO', +'Welsar 4', +'Altarias Geistesbund', +'Quajutsu-TURBO', +'Lahmus EX', +'Marlon', +'Cynthia & Kattlea', +'Hydrapfel', +'Enekoro ex', +'Ewiger Kristall', +'Lucario & Melmetal GX', +'Mollimorba', +'Team Rockets Nidoran♀', +'Kampfhalle', +'Narcisse', +'Geduldturbo', +'Skallyk', +'Galar-Gorgasonn V', +'Olithena-ex', +'Boreos VMAX', +'Deoxys Angriffsform', +'Plusle', +'Groink', +'Shaymin VSTAR', +'Baldorfish', +'M-Hundemon EX', +'Fundamentmaske-Ogerpon-ex', +'Crimanzo-ex', +'Mega-Latias-ex', +'Pescragon', +'Galar-Lavados', +'Lugia-TURBO', +'Zoroark GX', +'Jens' Überzeugung', +'Gladiantri', +'Aufputsch-Energie', +'Serena', +'Piondragi V', +'Klarins Mogelbaum', +'Charmian', +'Rettungstrage', +'Kussilla', +'Blanas', +'Noctuh', +'Brunnenmaske-Ogerpon-ex', +'Team Magmas Sengo', +'Firnontors Geistesbund', +'Wurzelfossil', +'Infernopod VMAX', +'Mastifioso', +'Alola-Mauzi', +'Psiopatra-ex', +'Wunder-Energie', +'Chimpep', +'Psiana V', +'Kinoso', +'Suicune V', +'Windhauch', +'Hops Wahlband', +'Helles Ledian', +'Fragrunz-ex', +'Hisui-Dressella V', +'Flamara 4', +'Aggregat-Energie GrassFireWater', +'Fata Morgana-Stadion', +'Öde des Chaos', +'Pia', +'M-Gengar EX', +'Psiaugon', +'Kapu-Toro GX', +'Mila', +'Kapu-Kime', +'Galagladi EX', +'Team Rockets Ampharos', +'Luxtra V', +'Camaub', +'Team Aquas Seejong', +'Knakrack & Giratina GX', +'Marill', +'Rostiger Schild', +'Team Rockets Stör-Bot', +'Skaraborn EX', +'Poké-Radar', +'Snubbull', +'Galar-Flampivian', +'Necrozma', +'Allerlei-Energie WaterLightningFightingMetal', +'Chilingel', +'Elektrokraft', +'Pokémon Ranger', +'Pepper', +'Hyperheiler-Energie', +'Staralilli', +'Deponitox VMAX', +'Dunkles Snobilikat', +'Dragans Stadion', +'Trombork', +'Kamillas Glanz', +'Multi Energie', +'Dragoran FB', +'Glücks-Eis', +'Bisaflor EX', +'Uralte Ruinen', +'Vulnona', +'M-Gewaldro EX', +'Energie-Zugewinn', +'Feelinara', diff --git a/package.json b/package.json index 0984284..fb3fb6e 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "dev": "bun run src/index.ts" }, "devDependencies": { - "@types/bun": "latest" + "@types/bun": "^1.3.6" }, "peerDependencies": { "typescript": "^5" diff --git a/pythonScripts/build_index.py b/pythonScripts/build_index.py new file mode 100644 index 0000000..b0c1cd2 --- /dev/null +++ b/pythonScripts/build_index.py @@ -0,0 +1,61 @@ +import os +import numpy as np +from PIL import Image +import torch +import open_clip +import faiss + +# --- Configuration --- +CARDS_FOLDER = "cards_old" +EMBEDDINGS_FILE = "embeddings.npy" +IDS_FILE = "ids.npy" +FAISS_INDEX_FILE = "card_index.faiss" + +# --- Device --- +device = "cuda" if torch.cuda.is_available() else "cpu" +print("Using device:", device) + +# --- Load CLIP model --- +model, _, preprocess = open_clip.create_model_and_transforms( + 'ViT-L-14', pretrained='laion2b_s32b_b82k' +) +model = model.to(device).eval() + +# --- Helper: encode image --- +def encode_image(path): + img = Image.open(path).convert("RGB") + with torch.no_grad(): + emb = model.encode_image(preprocess(img).unsqueeze(0).to(device)) + return emb.cpu().numpy() + +# --- Build embeddings --- +embeddings = [] +ids = [] + +for fname in os.listdir(CARDS_FOLDER): + if fname.lower().endswith((".jpg", ".png")): + path = os.path.join(CARDS_FOLDER, fname) + emb = encode_image(path) + embeddings.append(emb) + ids.append(fname) + print("Encoded:", fname) + +embeddings = np.vstack(embeddings) + +# --- Save embeddings & IDs --- +np.save(EMBEDDINGS_FILE, embeddings) +np.save(IDS_FILE, np.array(ids)) +print("Saved embeddings and IDs.") + +# --- Normalize embeddings --- +faiss.normalize_L2(embeddings) + +# --- Build FAISS index --- +d = embeddings.shape[1] # embedding dimension +index = faiss.IndexFlatIP(d) # inner product = cosine similarity +index.add(embeddings) +print("FAISS index built with", index.ntotal, "cards.") + +# --- Save FAISS index --- +faiss.write_index(index, FAISS_INDEX_FILE) +print("FAISS index saved:", FAISS_INDEX_FILE) diff --git a/pythonScripts/download_baseset.py b/pythonScripts/download_baseset.py new file mode 100644 index 0000000..9b90169 --- /dev/null +++ b/pythonScripts/download_baseset.py @@ -0,0 +1,65 @@ +import os +import re +import requests +from bs4 import BeautifulSoup + +HTML_FILE = "baseset.html" +DOWNLOAD_FOLDER = "baseset" + +SET_MAP = { + "Basis-Set": 1, +} + +os.makedirs(DOWNLOAD_FOLDER, exist_ok=True) + +with open(HTML_FILE, "r", encoding="utf-8") as f: + soup = BeautifulSoup(f, "html.parser") + +entries = [] + +for a in soup.find_all("a"): + url = a.get("href", "") + title = a.get("data-elementor-lightbox-title") + + if not title or not url.lower().endswith(".jpg"): + continue + + # We only want the original (no -427x600 etc) + if re.search(r"-\d+x\d+\.jpg$", url.lower()): + continue + + # Parse title: "Abra 43/102 - Basis-Set" + m = re.match(r"(.+)\s+(\d+)\/(\d+)\s*-\s*(.+)", title.strip()) + if not m: + print(f"Skipping unmatched title format: {title}") + continue + + name, card, total, set_name = m.groups() + card = int(card) + + if set_name not in SET_MAP: + print(f"Unknown set: {set_name}, please map it.") + continue + + set_num = SET_MAP[set_name] + new_filename = f"base{set_num}-{card}.jpg" + + entries.append((url, new_filename)) + +print(f"Found {len(entries)} images to download.") + +for url, filename in entries: + filepath = os.path.join(DOWNLOAD_FOLDER, filename) + print(f"Downloading {filename} from {url}") + + try: + r = requests.get(url, timeout=10) + r.raise_for_status() + except Exception as e: + print(f" Failed: {e}") + continue + + with open(filepath, "wb") as f: + f.write(r.content) + +print("Done!") diff --git a/pythonScripts/download_cards.py b/pythonScripts/download_cards.py new file mode 100644 index 0000000..b2725fe --- /dev/null +++ b/pythonScripts/download_cards.py @@ -0,0 +1,56 @@ +import os +import requests +from time import sleep + +# --- Configuration --- +TCGDEX_API = "https://api.tcgdex.net/v2/de/cards" +OUTPUT_FOLDER = "cards" +REQUEST_DELAY = 0.1 # seconds between requests to avoid rate limiting + +# Create output folder if not exists +os.makedirs(OUTPUT_FOLDER, exist_ok=True) + +# Fetch card list from TCGdex +print("Fetching card list...") +resp = requests.get(TCGDEX_API) +if resp.status_code != 200: + raise Exception(f"Failed to fetch card list: {resp.status_code}") +cards = resp.json() +print(f"Total cards fetched: {len(cards)}") + +# Download each card image +for card in cards: + card_id = card.get("id", None) + image_base = card.get("image", None) + + if not card_id: + print("Skipping card with missing ID:", card) + continue + + if not image_base: + print(f"No image URL for {card_id}, skipping...") + continue + + image_url = image_base + "/high.png" + output_path = os.path.join(OUTPUT_FOLDER, f"{card_id}.png") + + # Skip if already downloaded + if os.path.exists(output_path): + print(f"Already exists: {card_id}") + continue + + try: + r = requests.get(image_url, stream=True) + if r.status_code == 200: + with open(output_path, "wb") as f: + for chunk in r.iter_content(1024): + f.write(chunk) + print(f"Downloaded: {card_id}") + else: + print(f"Failed to download {card_id}: HTTP {r.status_code}") + except Exception as e: + print(f"Error downloading {card_id}: {e}") + + sleep(REQUEST_DELAY) # small delay to be polite + +print("All done!") diff --git a/pythonScripts/fetchNames.py b/pythonScripts/fetchNames.py new file mode 100644 index 0000000..e8ae6d5 --- /dev/null +++ b/pythonScripts/fetchNames.py @@ -0,0 +1,37 @@ +import os +import requests +from time import sleep + +# --- Configuration --- +TCGDEX_API = "https://api.tcgdex.net/v2/de/cards" +OUTPUT_FOLDER = "names" +REQUEST_DELAY = 0.1 # seconds between requests to avoid rate limiting + +# Create output folder if not exists +os.makedirs(OUTPUT_FOLDER, exist_ok=True) + +# Fetch card list from TCGdex +print("Fetching card list...") +resp = requests.get(TCGDEX_API) +if resp.status_code != 200: + raise Exception(f"Failed to fetch card list: {resp.status_code}") +cards = resp.json() +print(f"Total cards fetched: {len(cards)}") + +names = set() # using a set avoids duplicates automatically + +for card in cards: + card_name = card.get("name") + if not card_name: + print("Skipping card with missing name:", card) + continue + if "◇" in card_name: + continue + names.add(card_name) # set ignores duplicates + +output_path = os.path.join(OUTPUT_FOLDER, "name.txt") +with open(output_path, "w", encoding="utf-8") as f: + for name in names: + f.write("'" + name + "',\n") + +print(f"Wrote {len(names)} unique names to {output_path}") diff --git a/python_service/app.py b/pythonService/app.py similarity index 99% rename from python_service/app.py rename to pythonService/app.py index 1c4f745..f304333 100644 --- a/python_service/app.py +++ b/pythonService/app.py @@ -23,7 +23,7 @@ BASE = os.path.dirname(os.path.abspath(__file__)) FAISS_INDEX_FILE = os.path.join(BASE, "card_index.faiss") EMBEDDINGS_FILE = os.path.join(BASE, "embeddings.npy") IDS_FILE = os.path.join(BASE, "ids.npy") -TOP_K = 5 +TOP_K = 3 # --- Load CLIP model --- device = "cuda" if torch.cuda.is_available() else "cpu" diff --git a/src/api.ts b/src/api.ts new file mode 100644 index 0000000..3935fca --- /dev/null +++ b/src/api.ts @@ -0,0 +1,18 @@ +export async function getImage(req: Bun.BunRequest<"/api/cards/:id">) { + const { id } = req.params; + let file = Bun.file(`images/cards/${id}.png`); + let type = "png"; + + if (!(await file.exists())) { + file = Bun.file(`images/cards/${id}.jpg`); + type = "jpg"; + + if (!(await file.exists())) { + file = Bun.file("images/cards/placeholder.png"); + type = "png"; + console.error(`File for image ${id} does not exist, serving placeholder`); + } + } + + return new Response(file, { headers: { "Content-Type": `image/${type}` }, status: 200 }); +} \ No newline at end of file diff --git a/src/embeddings.ts b/src/embeddings.ts deleted file mode 100644 index 619142d..0000000 --- a/src/embeddings.ts +++ /dev/null @@ -1,21 +0,0 @@ -import type { Card } from "./types"; - -// Placeholder cards array -let cards: Card[] = [ - { id: "swsh1-1", name: "Celebi V", set: "Swsh1", number: "1", imageUrl: "https://assets.tcgdex.net/de/swsh/swsh1/1/high.png" }, - { id: "swsh12-001", name: "Bluzuk", set: "Swsh12", number: "001", imageUrl: "https://assets.tcgdex.net/de/swsh/swsh12/001/high.png" }, -]; - -export function loadCards() { - // Placeholder: you can later load embeddings.npy + FAISS - console.log("Cards module loaded (currently empty)"); -} - -export function queryCardById(id: string): Card | null { - return cards.find(c => c.id === id) || null; -} - -// Example placeholder: return top N matches -export function queryCardByEmbedding(/* embedding */): Card[] { - return cards.slice(0, 5); // dummy top 5 -} diff --git a/src/index.ts b/src/index.ts index 90b1277..22495f3 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,6 +1,5 @@ import { serve, spawn } from 'bun'; -import { queryCardByEmbedding, queryCardById } from './embeddings'; -import type { Card } from './types'; +import { getImage } from './api'; const PYTHON_SERVICE = "http://localhost:5001/query"; @@ -27,29 +26,18 @@ const server = serve({ } }, }, - "/api/cards/:id": async (req) => { - const { id } = req.params; - const card = queryCardById(id); - if (!card) return new Response(JSON.stringify({ error: "Card not found" }), { status: 404, headers: { "Content-Type": "application/json" } }); - return new Response(JSON.stringify(card), { headers: { "Content-Type": "application/json" } }); + "/api/cards/image/:id": { + async GET(req) { + return getImage(req); + /* const { id } = req.params; + const card = queryCardById(id); + if (!card) return new Response(JSON.stringify({ error: "Card not found" }), { status: 404, headers: { "Content-Type": "application/json" } }); + return new Response(JSON.stringify(card), { headers: { "Content-Type": "application/json" } }); */ + } }, "/*": async () => { return new Response("

Pokemon Card Backend

", { headers: { "Content-Type": "text/html" } }); }, - - /* "/api/cards/query": { - async POST(req) { - try { - const { embedding } = await req.json() as { embedding: number[] }; - if (!embedding) return new Response(JSON.stringify({ error: "Missing embedding" }), { status: 400, headers: { "Content-Type": "application/json" } }); - const results: Card[] = queryCardByEmbedding(embedding); - return new Response(JSON.stringify(results), { headers: { "Content-Type": "application/json" } }); - } catch (err) { - console.error("Error querying card:", err); - return new Response(JSON.stringify({ error: "Failed to query card" }), { status: 500, headers: { "Content-Type": "application/json" } }); - } - }, - }, */ }, development: process.env.NODE_ENV !== 'production' && { @@ -61,4 +49,4 @@ const server = serve({ }, }); -console.log(`🚀 Server running at ${server.url}`); +console.log(`Server running at ${server.url}`); diff --git a/src/types.ts b/src/types.ts deleted file mode 100644 index 90a76fc..0000000 --- a/src/types.ts +++ /dev/null @@ -1,10 +0,0 @@ -export interface Card { - id: string; - name: string; - set: string; - number: string; - rarity?: string; - variant?: string; - foil?: boolean; - imageUrl: string; -} diff --git a/tsconfig.json b/tsconfig.json index bfa0fea..be3d138 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,7 +1,7 @@ { "compilerOptions": { // Environment setup & latest features - "lib": ["ESNext"], + "lib": ["ESNext", "DOM"], "target": "ESNext", "module": "Preserve", "moduleDetection": "force",