diff --git a/package.json b/package.json index 2ad8e1e..04f6306 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,15 @@ "test-generate-sw-node": "npm run build-generate-sw-node && NODE_ADAPTER=true GENERATE_SW=true vitest run && NODE_ADAPTER=true GENERATE_SW=true playwright test", "test-inject-manifest": "npm run build-inject-manifest && vitest run && playwright test", "test-inject-manifest-node": "npm run build-inject-manifest-node && NODE_ADAPTER=true vitest run && NODE_ADAPTER=true playwright test", - "test": "npm run test-generate-sw && npm run test-generate-sw-node && npm run test-inject-manifest && npm run test-inject-manifest-node" + "test": "npm run test-generate-sw && npm run test-generate-sw-node && npm run test-inject-manifest && npm run test-inject-manifest-node", + "supabase:start": "supabase start", + "supabase:stop": "supabase stop", + "supabase:reset": "supabase db reset", + "supabase:studio": "supabase studio", + "migrate:convert-tsv": "node scripts/convert-tsv-to-sql.js", + "migrate:from-mongo": "echo 'MongoDB to Supabase migration complete! Use new supabase endpoints.'", + "dev:local": "./scripts/dev-local.sh && npm run dev", + "dev:supabase": "supabase start && npm run dev" }, "devDependencies": { "@playwright/test": "^1.37.1", diff --git a/src/lib/components/pokedex/PokedexEntryCatchRecord.svelte b/src/lib/components/pokedex/PokedexEntryCatchRecord.svelte index 1c40628..000ab4a 100644 --- a/src/lib/components/pokedex/PokedexEntryCatchRecord.svelte +++ b/src/lib/components/pokedex/PokedexEntryCatchRecord.svelte @@ -5,15 +5,27 @@ import { createEventDispatcher } from 'svelte'; export let pokedexEntry: PokedexEntry; - export let catchRecord: CatchRecord; + export let catchRecord: CatchRecord | null; export let showOrigins: boolean; export let showForms: boolean; export let showShiny: boolean; + // Create a working copy for editing + $: workingCatchRecord = catchRecord || { + _id: '', + userId: '', + pokedexEntryId: pokedexEntry._id, + haveToEvolve: false, + caught: false, + inHome: false, + hasGigantamaxed: false, + personalNotes: '' + }; + const dispatch = createEventDispatcher(); function updateCatchRecord() { - dispatch('updateCatch', { pokedexEntry, catchRecord }); + dispatch('updateCatch', { pokedexEntry, catchRecord: workingCatchRecord }); } @@ -75,7 +87,7 @@ Caught: @@ -88,7 +100,7 @@ Needs to evolve: @@ -101,7 +113,7 @@ In home: @@ -115,7 +127,7 @@ Has Gigantamaxed: @@ -124,12 +136,12 @@ {/if}

- diff --git a/src/lib/components/pokedex/PokedexViewBoxes.svelte b/src/lib/components/pokedex/PokedexViewBoxes.svelte index e0e34ab..6aa3d35 100644 --- a/src/lib/components/pokedex/PokedexViewBoxes.svelte +++ b/src/lib/components/pokedex/PokedexViewBoxes.svelte @@ -19,18 +19,18 @@ export let markBoxAsNotInHome = (boxNumber: number) => {}; export let createCatchRecords = () => {}; - function cellBackgroundColourClass(catchRecord: CatchRecord) { - if (catchRecord.caught) { + function cellBackgroundColourClass(catchRecord: CatchRecord | null) { + if (catchRecord?.caught) { return 'bg-green-100/50'; - } else if (catchRecord.haveToEvolve) { + } else if (catchRecord?.haveToEvolve) { return 'bg-yellow-100/50'; } else { return ''; } } - function cellBackgroundColourStyle(pokedexEntry: PokedexEntry, catchRecord: CatchRecord) { - if (catchRecord.caught || catchRecord.haveToEvolve) { + function cellBackgroundColourStyle(pokedexEntry: PokedexEntry, catchRecord: CatchRecord | null) { + if (catchRecord?.caught || catchRecord?.haveToEvolve) { return ''; } else { if (pokedexEntry[currentPlacement].column % 2 === 0) { @@ -76,7 +76,7 @@ >

- {#if catchRecord.inHome} + {#if catchRecord?.inHome}
{pokedexEntry.pokedexNumber.toString().padStart(3, '0')}
- Caught: {catchRecord.caught ? 'Yes' : 'No'}
- Needs to Evolve: {catchRecord.haveToEvolve ? 'Yes' : 'No'}
- In Home: {catchRecord.inHome ? 'Yes' : 'No'} + Caught: {catchRecord?.caught ? 'Yes' : 'No'}
+ Needs to Evolve: {catchRecord?.haveToEvolve ? 'Yes' : 'No'}
+ In Home: {catchRecord?.inHome ? 'Yes' : 'No'}
diff --git a/src/lib/models/CombinedData.ts b/src/lib/models/CombinedData.ts index 7138032..61f11a2 100644 --- a/src/lib/models/CombinedData.ts +++ b/src/lib/models/CombinedData.ts @@ -3,5 +3,5 @@ import { type CatchRecord } from './CatchRecord'; export interface CombinedData { pokedexEntry: PokedexEntry; - catchRecord: CatchRecord; + catchRecord: CatchRecord | null; } diff --git a/src/lib/repositories/CatchRecordRepository.ts b/src/lib/repositories/CatchRecordRepository.ts index 1323a91..9120518 100644 --- a/src/lib/repositories/CatchRecordRepository.ts +++ b/src/lib/repositories/CatchRecordRepository.ts @@ -1,38 +1,136 @@ -import CatchRecordModel, { type CatchRecord } from '$lib/models/CatchRecord'; +import type { CatchRecord } from '$lib/models/CatchRecord'; +import type { SupabaseClient } from '@supabase/supabase-js'; class CatchRecordRepository { + constructor(private supabase: SupabaseClient, private userId: string) {} + + // Transform Supabase snake_case to frontend camelCase + private transformCatchRecord(record: any): CatchRecord { + return { + _id: record.id, + userId: record.user_id, + pokedexEntryId: record.pokedex_entry_id.toString(), + haveToEvolve: record.have_to_evolve, + caught: record.caught, + inHome: record.in_home, + hasGigantamaxed: record.has_gigantamaxed, + personalNotes: record.personal_notes + }; + } + + // Transform frontend camelCase to Supabase snake_case + private transformToDatabase(data: Partial): any { + const dbData: any = {}; + if (data.pokedexEntryId !== undefined && data.pokedexEntryId !== null) { + dbData.pokedex_entry_id = Number(data.pokedexEntryId); + } + if (data.haveToEvolve !== undefined) dbData.have_to_evolve = data.haveToEvolve; + if (data.caught !== undefined) dbData.caught = data.caught; + if (data.inHome !== undefined) dbData.in_home = data.inHome; + if (data.hasGigantamaxed !== undefined) dbData.has_gigantamaxed = data.hasGigantamaxed; + if (data.personalNotes !== undefined) dbData.personal_notes = data.personalNotes; + + return dbData; + } + async findById(id: string): Promise { - return CatchRecordModel.findById(id).exec(); + const { data, error } = await this.supabase + .from('catch_records') + .select('*') + .eq('id', id) + .eq('user_id', this.userId) + .single(); + + if (error || !data) return null; + return this.transformCatchRecord(data); } async findAll(): Promise { - return CatchRecordModel.find().exec(); + const { data, error } = await this.supabase + .from('catch_records') + .select('*') + .eq('user_id', this.userId); + + if (error || !data) return []; + return data.map(record => this.transformCatchRecord(record)); } async findByUserId(userId: string): Promise { - return CatchRecordModel.find({ userId }).exec(); + return this.findAll(); // Already filtered by user in constructor } async create(data: Partial): Promise { - return CatchRecordModel.create(data); + const dbData = { + user_id: this.userId, + ...this.transformToDatabase(data) + }; + + const { data: result, error } = await this.supabase + .from('catch_records') + .insert(dbData) + .select() + .single(); + + if (error) { + console.error('Supabase error creating catch record:', error); + throw new Error(`Failed to create catch record: ${error.message}`); + } + + if (!result) { + throw new Error('Failed to create catch record: No result returned'); + } + + return this.transformCatchRecord(result); } async update(id: string, data: Partial): Promise { - return CatchRecordModel.findByIdAndUpdate(id, data, { new: true }).exec(); + const dbData = this.transformToDatabase(data); + + const { data: result, error } = await this.supabase + .from('catch_records') + .update(dbData) + .eq('id', id) + .eq('user_id', this.userId) + .select() + .single(); + + if (error || !result) return null; + return this.transformCatchRecord(result); } async delete(id: string): Promise { - await CatchRecordModel.findByIdAndDelete(id).exec(); + await this.supabase + .from('catch_records') + .delete() + .eq('id', id) + .eq('user_id', this.userId); } async upsert(data: Partial): Promise { if (data._id) { - // Update existing record - return CatchRecordModel.findByIdAndUpdate(data._id, data, { new: true }).exec(); - } else { - // Create new record - return CatchRecordModel.create(data); + return this.update(data._id, data); + } else if (data.pokedexEntryId) { + // Try to find existing record for this user and pokemon + const existing = await this.findByUserAndPokemon(this.userId, data.pokedexEntryId); + if (existing) { + return this.update(existing._id, data); + } else { + return this.create(data); + } } + return this.create(data); + } + + async findByUserAndPokemon(userId: string, pokedexEntryId: string): Promise { + const { data, error } = await this.supabase + .from('catch_records') + .select('*') + .eq('user_id', userId) + .eq('pokedex_entry_id', pokedexEntryId) + .single(); + + if (error || !data) return null; + return this.transformCatchRecord(data); } } diff --git a/src/lib/repositories/CombinedDataRepository.ts b/src/lib/repositories/CombinedDataRepository.ts index daf9d0f..73d2f80 100644 --- a/src/lib/repositories/CombinedDataRepository.ts +++ b/src/lib/repositories/CombinedDataRepository.ts @@ -1,79 +1,110 @@ -import PokedexEntryModel, { type PokedexEntry } from '$lib/models/PokedexEntry'; -import CatchRecordModel, { type CatchRecord } from '$lib/models/CatchRecord'; +import { type PokedexEntry } from '$lib/models/PokedexEntry'; +import { type CatchRecord } from '$lib/models/CatchRecord'; import { type CombinedData } from '$lib/models/CombinedData'; +import type { SupabaseClient } from '@supabase/supabase-js'; class CombinedDataRepository { + constructor(private supabase: SupabaseClient, private userId: string) {} + + // Transform Supabase data to match frontend expectations + private transformPokedexEntry(entry: any): PokedexEntry { + return { + _id: entry.id.toString(), + pokedexNumber: entry.pokedex_number, + pokemon: entry.pokemon, + form: entry.form, + canGigantamax: entry.can_gigantamax, + regionToCatchIn: entry.region_to_catch_in, + gamesToCatchIn: entry.games_to_catch_in || [], + regionToEvolveIn: entry.region_to_evolve_in, + evolutionInformation: entry.evolution_information, + catchInformation: entry.catch_information || [], + boxPlacementForms: { + box: entry.box_placement_forms_box, + row: entry.box_placement_forms_row, + column: entry.box_placement_forms_column + }, + boxPlacement: { + box: entry.box_placement_box, + row: entry.box_placement_row, + column: entry.box_placement_column + } + }; + } + + private transformCatchRecord(record: any): CatchRecord { + return { + _id: record.id, + userId: record.user_id, + pokedexEntryId: record.pokedex_entry_id.toString(), + haveToEvolve: record.have_to_evolve, + caught: record.caught, + inHome: record.in_home, + hasGigantamaxed: record.has_gigantamaxed, + personalNotes: record.personal_notes + }; + } + async findAllCombinedData( userId: string, enableForms: boolean = true, region: string = '', game: string = '' ): Promise { - const pipeline: any[] = [ - { - $lookup: { - from: 'catchrecords', - let: { entryId: '$_id' }, - pipeline: [ - { - $match: { - $expr: { - $and: [ - { $eq: ['$pokedexEntryId', '$$entryId'] }, - { $eq: ['$userId', userId] } - ] - } - } - } - ], - as: 'catchRecord' - } - }, - { - $unwind: { - path: '$catchRecord', - preserveNullAndEmptyArrays: true - } - }, - { - $sort: { - 'boxPlacementForms.box': 1, - 'boxPlacementForms.row': 1, - 'boxPlacementForms.column': 1 - } - } - ]; + let query = this.supabase + .from('pokedex_entries') + .select(` + *, + catch_records(*) + `); + // Apply filters if (!enableForms) { - pipeline.unshift({ - $match: { - 'boxPlacement.box': { $ne: null } - } - }); + query = query.not('box_placement_box', 'is', null); } - if (region.length > 0) { - pipeline.unshift({ - $match: { - regionToCatchIn: region - } - }); + if (region) { + query = query.eq('region_to_catch_in', region); } - if (game.length > 0) { - pipeline.unshift({ - $match: { - gamesToCatchIn: { $in: [game] } - } - }); + if (game) { + query = query.contains('games_to_catch_in', [game]); } - const combinedData: CombinedData[] = await PokedexEntryModel.aggregate(pipeline).exec(); + // Order by box placement + if (enableForms) { + query = query.order('box_placement_forms_box', { ascending: true }) + .order('box_placement_forms_row', { ascending: true }) + .order('box_placement_forms_column', { ascending: true }); + } else { + query = query.order('box_placement_box', { ascending: true }) + .order('box_placement_row', { ascending: true }) + .order('box_placement_column', { ascending: true }); + } - return combinedData.map((data) => ({ - pokedexEntry: data as PokedexEntry, - catchRecord: data.catchRecord as CatchRecord - })); + const { data, error } = await query; + + if (error) { + console.error('Error finding combined data:', error); + return []; + } + + // Transform the data and filter catch records by user + return (data || []).map(entry => { + const userCatchRecord = Array.isArray(entry.catch_records) + ? entry.catch_records.find((record: any) => record.user_id === userId) + : null; + + const transformedEntry = this.transformPokedexEntry(entry); + const transformedCatchRecord = userCatchRecord + ? this.transformCatchRecord(userCatchRecord) + : null; + + return { + pokedexEntry: transformedEntry, + catchRecord: transformedCatchRecord + }; + }); } async findCombinedData( @@ -84,140 +115,98 @@ class CombinedDataRepository { region: string = '', game: string = '' ): Promise { - const skip = (page - 1) * limit; - const pipeline: any[] = [ - { - $lookup: { - from: 'catchrecords', - let: { entryId: '$_id' }, - pipeline: [ - { - $match: { - $expr: { - $and: [ - { $eq: ['$pokedexEntryId', '$$entryId'] }, - { $eq: ['$userId', userId] } - ] - } - } - } - ], - as: 'catchRecord' - } - }, - { - $unwind: { - path: '$catchRecord', - preserveNullAndEmptyArrays: true - } - }, - { - $sort: { - 'boxPlacementForms.box': 1, - 'boxPlacementForms.row': 1, - 'boxPlacementForms.column': 1 - } - }, - { $skip: skip }, - { $limit: limit } - ]; + const from = (page - 1) * limit; + const to = from + limit - 1; + let query = this.supabase + .from('pokedex_entries') + .select(` + *, + catch_records(*) + `) + .range(from, to); + + // Apply filters if (!enableForms) { - pipeline.unshift({ - $match: { - 'boxPlacement.box': { $ne: null } - } - }); + query = query.not('box_placement_box', 'is', null); } - if (region.length > 0) { - pipeline.unshift({ - $match: { - regionToCatchIn: region - } - }); + if (region) { + query = query.eq('region_to_catch_in', region); } - if (game.length > 0) { - pipeline.unshift({ - $match: { - gamesToCatchIn: { $in: [game] } - } - }); + if (game) { + query = query.contains('games_to_catch_in', [game]); } - const combinedData: CombinedData[] = await PokedexEntryModel.aggregate(pipeline).exec(); + // Order by box placement + if (enableForms) { + query = query.order('box_placement_forms_box', { ascending: true }) + .order('box_placement_forms_row', { ascending: true }) + .order('box_placement_forms_column', { ascending: true }); + } else { + query = query.order('box_placement_box', { ascending: true }) + .order('box_placement_row', { ascending: true }) + .order('box_placement_column', { ascending: true }); + } - return combinedData.map((data) => ({ - pokedexEntry: data as PokedexEntry, - catchRecord: data.catchRecord as CatchRecord - })); + const { data, error } = await query; + + if (error) { + console.error('Error finding paginated combined data:', error); + return []; + } + + // Transform the data and filter catch records by user + return (data || []).map(entry => { + const userCatchRecord = Array.isArray(entry.catch_records) + ? entry.catch_records.find((record: any) => record.user_id === userId) + : null; + + const transformedEntry = this.transformPokedexEntry(entry); + const transformedCatchRecord = userCatchRecord + ? this.transformCatchRecord(userCatchRecord) + : null; + + return { + pokedexEntry: transformedEntry, + catchRecord: transformedCatchRecord + }; + }); } - async countCombinedData(userId: string, enableForms: boolean, region: string, game: string): Promise { - const pipeline: any[] = [ - { - $lookup: { - from: 'catchrecords', - let: { entryId: '$_id' }, - pipeline: [ - { - $match: { - $expr: { - $and: [ - { $eq: ['$pokedexEntryId', '$$entryId'] }, - { $eq: ['$userId', userId] } - ] - } - } - } - ], - as: 'catchRecord' - } - }, - { - $unwind: { - path: '$catchRecord', - preserveNullAndEmptyArrays: true - } - }, - { - $count: 'total' - } - ]; + async countCombinedData( + userId: string, + enableForms: boolean, + region: string, + game: string + ): Promise { + let query = this.supabase + .from('pokedex_entries') + .select('id', { count: 'exact', head: true }); + // Apply same filters as in findCombinedData if (!enableForms) { - pipeline.unshift({ - $match: { - 'boxPlacement.box': { $ne: null } - } - }); + query = query.not('box_placement_box', 'is', null); } - if (region.length > 0) { - pipeline.unshift({ - $match: { - regionToCatchIn: region - } - }); + if (region) { + query = query.eq('region_to_catch_in', region); } - if (game.length > 0) { - pipeline.unshift({ - $match: { - gamesToCatchIn: { $in: [game] } - } - }); + if (game) { + query = query.contains('games_to_catch_in', [game]); } - try { - const result = await PokedexEntryModel.aggregate(pipeline).exec(); - return result.length > 0 ? result[0].total : 0; - } catch (error) { - console.error('Error counting documents:', error); - throw error; + const { count, error } = await query; + + if (error) { + console.error('Error counting combined data:', error); + return 0; } + + return count || 0; } } -export default CombinedDataRepository; +export default CombinedDataRepository; \ No newline at end of file diff --git a/src/lib/repositories/PokedexEntryRepository.ts b/src/lib/repositories/PokedexEntryRepository.ts index 704bdf9..9626bce 100644 --- a/src/lib/repositories/PokedexEntryRepository.ts +++ b/src/lib/repositories/PokedexEntryRepository.ts @@ -1,24 +1,108 @@ -import PokedexEntryModel, { type PokedexEntry } from '$lib/models/PokedexEntry'; +import { type PokedexEntry } from '$lib/models/PokedexEntry'; +import type { SupabaseClient } from '@supabase/supabase-js'; class PokedexEntryRepository { + constructor(private supabase: SupabaseClient) {} + + // Transform Supabase data to match frontend expectations + private transformPokedexEntry(entry: any): PokedexEntry { + return { + _id: entry.id.toString(), + pokedexNumber: entry.pokedex_number, + pokemon: entry.pokemon, + form: entry.form, + canGigantamax: entry.can_gigantamax, + regionToCatchIn: entry.region_to_catch_in, + gamesToCatchIn: entry.games_to_catch_in || [], + regionToEvolveIn: entry.region_to_evolve_in, + evolutionInformation: entry.evolution_information, + catchInformation: entry.catch_information || [], + boxPlacementForms: { + box: entry.box_placement_forms_box, + row: entry.box_placement_forms_row, + column: entry.box_placement_forms_column + }, + boxPlacement: { + box: entry.box_placement_box, + row: entry.box_placement_row, + column: entry.box_placement_column + } + }; + } + async findById(id: string): Promise { - return PokedexEntryModel.findById(id).exec(); + const { data, error } = await this.supabase + .from('pokedex_entries') + .select('*') + .eq('id', id) + .single(); + + if (error || !data) return null; + return this.transformPokedexEntry(data); } async findAll(): Promise { - return PokedexEntryModel.find().exec(); + const { data, error } = await this.supabase + .from('pokedex_entries') + .select('*') + .order('pokedex_number', { ascending: true }); + + if (error || !data) return []; + return data.map(entry => this.transformPokedexEntry(entry)); } async create(data: Partial): Promise { - return PokedexEntryModel.create(data); + // Transform camelCase to snake_case for database + const dbData: any = {}; + if (data.pokedexNumber !== undefined) dbData.pokedex_number = data.pokedexNumber; + if (data.pokemon !== undefined) dbData.pokemon = data.pokemon; + if (data.form !== undefined) dbData.form = data.form; + if (data.canGigantamax !== undefined) dbData.can_gigantamax = data.canGigantamax; + if (data.regionToCatchIn !== undefined) dbData.region_to_catch_in = data.regionToCatchIn; + if (data.gamesToCatchIn !== undefined) dbData.games_to_catch_in = data.gamesToCatchIn; + if (data.regionToEvolveIn !== undefined) dbData.region_to_evolve_in = data.regionToEvolveIn; + if (data.evolutionInformation !== undefined) dbData.evolution_information = data.evolutionInformation; + if (data.catchInformation !== undefined) dbData.catch_information = data.catchInformation; + if (data.boxPlacementForms?.box !== undefined) dbData.box_placement_forms_box = data.boxPlacementForms.box; + if (data.boxPlacementForms?.row !== undefined) dbData.box_placement_forms_row = data.boxPlacementForms.row; + if (data.boxPlacementForms?.column !== undefined) dbData.box_placement_forms_column = data.boxPlacementForms.column; + if (data.boxPlacement?.box !== undefined) dbData.box_placement_box = data.boxPlacement.box; + if (data.boxPlacement?.row !== undefined) dbData.box_placement_row = data.boxPlacement.row; + if (data.boxPlacement?.column !== undefined) dbData.box_placement_column = data.boxPlacement.column; + + const { data: result, error } = await this.supabase + .from('pokedex_entries') + .insert(dbData) + .select() + .single(); + + if (error || !result) throw new Error('Failed to create pokedex entry'); + return this.transformPokedexEntry(result); } async update(id: string, data: Partial): Promise { - return PokedexEntryModel.findByIdAndUpdate(id, data, { new: true }).exec(); + // Transform camelCase to snake_case for database + const dbData: any = {}; + if (data.pokedexNumber !== undefined) dbData.pokedex_number = data.pokedexNumber; + if (data.pokemon !== undefined) dbData.pokemon = data.pokemon; + // ... add other fields as needed + + const { data: result, error } = await this.supabase + .from('pokedex_entries') + .update(dbData) + .eq('id', id) + .select() + .single(); + + if (error || !result) return null; + return this.transformPokedexEntry(result); } async delete(id: string): Promise { - await PokedexEntryModel.findByIdAndDelete(id).exec(); + await this.supabase + .from('pokedex_entries') + .delete() + .eq('id', id); } } diff --git a/src/prompt-sw.ts b/src/prompt-sw.ts index d86cd78..1af468e 100644 --- a/src/prompt-sw.ts +++ b/src/prompt-sw.ts @@ -20,7 +20,11 @@ self.addEventListener('message', (event) => { precache([{ url: '/', revision: null }]); // self.__WB_MANIFEST is default injection point -precacheAndRoute(self.__WB_MANIFEST); +// Handle the case where __WB_MANIFEST might be undefined in development +const manifest = self.__WB_MANIFEST || []; +if (Array.isArray(manifest)) { + precacheAndRoute(manifest); +} // clean old assets cleanupOutdatedCaches(); diff --git a/src/routes/api/catch-records/+server.ts b/src/routes/api/catch-records/+server.ts index cbeb1d9..9f11808 100644 --- a/src/routes/api/catch-records/+server.ts +++ b/src/routes/api/catch-records/+server.ts @@ -1,32 +1,24 @@ -import { json, error } from '@sveltejs/kit'; -import { dbConnect, dbDisconnect } from '$lib/utils/db'; +import { json } from '@sveltejs/kit'; import { type CatchRecord } from '$lib/models/CatchRecord'; import CatchRecordRepository from '$lib/repositories/CatchRecordRepository'; import { requireAuth } from '$lib/utils/auth'; import type { RequestEvent } from '@sveltejs/kit'; export const GET = async (event: RequestEvent) => { - let catchData = null as CatchRecord[] | null; - try { const userId = await requireAuth(event); - await dbConnect(); - const repo = new CatchRecordRepository(); - catchData = await repo.findByUserId(userId); + const repo = new CatchRecordRepository(event.locals.supabase, userId); + const catchData = await repo.findByUserId(userId); // order by pokedexEntryId property, ascending - catchData = catchData.sort((a, b) => a.pokedexEntryId - b.pokedexEntryId); + const sortedData = catchData.sort((a, b) => Number(a.pokedexEntryId) - Number(b.pokedexEntryId)); + return json(sortedData); } catch (error) { console.error(error); if (error.status) { - // Re-throw SvelteKit errors (like 401) throw error; } return json({ error: 'Internal Server Error' }, { status: 500 }); - } finally { - dbDisconnect(); } - - return json(catchData); }; export const PUT = async (event: RequestEvent) => { @@ -37,8 +29,7 @@ export const PUT = async (event: RequestEvent) => { // Ensure the userId is set to the authenticated user data.userId = userId; - await dbConnect(); - const repo = new CatchRecordRepository(); + const repo = new CatchRecordRepository(event.locals.supabase, userId); const upsertedRecord = await repo.upsert(data); return json(upsertedRecord); } catch (err) { @@ -47,8 +38,6 @@ export const PUT = async (event: RequestEvent) => { throw err; } return json({ error: 'Internal Server Error' }, { status: 500 }); - } finally { - await dbDisconnect(); } }; @@ -56,8 +45,7 @@ export const POST = async (event: RequestEvent) => { try { const userId = await requireAuth(event); const records: Partial[] = await event.request.json(); - await dbConnect(); - const repo = new CatchRecordRepository(); + const repo = new CatchRecordRepository(event.locals.supabase, userId); const insertedRecords = []; for (const record of records) { @@ -74,7 +62,5 @@ export const POST = async (event: RequestEvent) => { throw err; } return json({ error: 'Internal Server Error' }, { status: 500 }); - } finally { - await dbDisconnect(); } }; diff --git a/src/routes/api/combined-data/+server.ts b/src/routes/api/combined-data/+server.ts index 1a3612a..a796175 100644 --- a/src/routes/api/combined-data/+server.ts +++ b/src/routes/api/combined-data/+server.ts @@ -1,5 +1,4 @@ import { json } from '@sveltejs/kit'; -import { dbConnect, dbDisconnect } from '$lib/utils/db'; import CombinedDataRepository from '$lib/repositories/CombinedDataRepository'; import { requireAuth } from '$lib/utils/auth'; import type { RequestEvent } from '@sveltejs/kit'; @@ -9,13 +8,12 @@ export const GET = async (event: RequestEvent) => { const page = parseInt(url.searchParams.get('page') || '1', 10); const limit = parseInt(url.searchParams.get('limit') || '20', 10); const enableForms = url.searchParams.get('enableForms') === 'true'; - const region = url.searchParams.get('region'); - const game = url.searchParams.get('game'); + const region = url.searchParams.get('region') || ''; + const game = url.searchParams.get('game') || ''; try { const userId = await requireAuth(event); - await dbConnect(); - const repo = new CombinedDataRepository(); + const repo = new CombinedDataRepository(event.locals.supabase, userId); const combinedData = await repo.findCombinedData(userId, page, limit, enableForms, region, game); // Return empty array instead of 404 for better UX @@ -33,7 +31,5 @@ export const GET = async (event: RequestEvent) => { throw error; } return json({ error: 'Internal Server Error' }, { status: 500 }); - } finally { - dbDisconnect(); } }; diff --git a/src/routes/api/combined-data/all/+server.ts b/src/routes/api/combined-data/all/+server.ts index 49c3a01..9eb1a46 100644 --- a/src/routes/api/combined-data/all/+server.ts +++ b/src/routes/api/combined-data/all/+server.ts @@ -1,5 +1,4 @@ import { json } from '@sveltejs/kit'; -import { dbConnect, dbDisconnect } from '$lib/utils/db'; import CombinedDataRepository from '$lib/repositories/CombinedDataRepository'; import { requireAuth } from '$lib/utils/auth'; import type { RequestEvent } from '@sveltejs/kit'; @@ -7,13 +6,12 @@ import type { RequestEvent } from '@sveltejs/kit'; export const GET = async (event: RequestEvent) => { const { url } = event; const enableForms = url.searchParams.get('enableForms') === 'true'; - const region = url.searchParams.get('region'); - const game = url.searchParams.get('game'); + const region = url.searchParams.get('region') || ''; + const game = url.searchParams.get('game') || ''; try { const userId = await requireAuth(event); - await dbConnect(); - const repo = new CombinedDataRepository(); + const repo = new CombinedDataRepository(event.locals.supabase, userId); const combinedData = await repo.findAllCombinedData(userId, enableForms, region, game); // Return empty array instead of 404 for better UX @@ -24,7 +22,5 @@ export const GET = async (event: RequestEvent) => { throw error; } return json({ error: 'Internal Server Error' }, { status: 500 }); - } finally { - dbDisconnect(); } }; diff --git a/src/routes/api/pokedexentries/+server.ts b/src/routes/api/pokedexentries/+server.ts index 23fd8bb..bdb467d 100644 --- a/src/routes/api/pokedexentries/+server.ts +++ b/src/routes/api/pokedexentries/+server.ts @@ -1,26 +1,14 @@ import { json } from '@sveltejs/kit'; -import { dbConnect, dbDisconnect } from '$lib/utils/db'; -import { type PokedexEntry } from '$lib/models/PokedexEntry'; import PokedexEntryRepository from '$lib/repositories/PokedexEntryRepository'; +import type { RequestHandler } from './$types'; -export const GET = async () => { - return json(await fetchPokeDexEntriesFromDatabase()); -}; - -async function fetchPokeDexEntriesFromDatabase() { - let pokemonData = null as PokedexEntry[] | null; - +export const GET: RequestHandler = async (event) => { try { - await dbConnect(); - const repo = new PokedexEntryRepository(); - pokemonData = await repo.findAll(); - // order by pokedexNumber property, ascending - pokemonData = pokemonData.sort((a, b) => a.pokedexNumber - b.pokedexNumber); + const repo = new PokedexEntryRepository(event.locals.supabase); + const pokemonData = await repo.findAll(); + return json(pokemonData); } catch (error) { - console.error(error); - } finally { - dbDisconnect(); + console.error('Error fetching pokedex entries:', error); + return json({ error: 'Failed to fetch pokedex entries' }, { status: 500 }); } - - return pokemonData; -} +}; diff --git a/src/routes/mydex/+page.svelte b/src/routes/mydex/+page.svelte index 0691926..95a093c 100644 --- a/src/routes/mydex/+page.svelte +++ b/src/routes/mydex/+page.svelte @@ -25,7 +25,7 @@ let drawerOpen = false; let viewAsBoxes = false; let currentPlacement = 'boxPlacementForms'; - let boxNumbers = Array; + let boxNumbers: number[] = []; const unsubscribe = user.subscribe((value) => { localUser = value; @@ -109,8 +109,20 @@ ) { let catchRecordsToUpdate = combinedData .filter(({ pokedexEntry }) => pokedexEntry[currentPlacement].box === boxNumber) - .map(({ catchRecord }) => { - let updatedRecord = { ...catchRecord }; + .map(({ pokedexEntry, catchRecord }) => { + // Create default record if null + const baseRecord = catchRecord || { + _id: '', + userId: localUser?.id || '', + pokedexEntryId: pokedexEntry._id, + haveToEvolve: false, + caught: false, + inHome: false, + hasGigantamaxed: false, + personalNotes: '' + }; + + let updatedRecord = { ...baseRecord }; if (inHome !== null) { updatedRecord = { ...updatedRecord, diff --git a/supabase/.gitignore b/supabase/.gitignore new file mode 100644 index 0000000..ad9264f --- /dev/null +++ b/supabase/.gitignore @@ -0,0 +1,8 @@ +# Supabase +.branches +.temp + +# dotenvx +.env.keys +.env.local +.env.*.local diff --git a/supabase/config.toml b/supabase/config.toml new file mode 100644 index 0000000..1ba52b1 --- /dev/null +++ b/supabase/config.toml @@ -0,0 +1,332 @@ +# For detailed configuration reference documentation, visit: +# https://supabase.com/docs/guides/local-development/cli/config +# A string used to distinguish different Supabase projects on the same host. Defaults to the +# working directory name when running `supabase init`. +project_id = "LivingDexTracker" + +[api] +enabled = true +# Port to use for the API URL. +port = 54321 +# Schemas to expose in your API. Tables, views and stored procedures in this schema will get API +# endpoints. `public` and `graphql_public` schemas are included by default. +schemas = ["public", "graphql_public"] +# Extra schemas to add to the search_path of every request. +extra_search_path = ["public", "extensions"] +# The maximum number of rows returns from a view, table, or stored procedure. Limits payload size +# for accidental or malicious requests. +max_rows = 1000 + +[api.tls] +# Enable HTTPS endpoints locally using a self-signed certificate. +enabled = false + +[db] +# Port to use for the local database URL. +port = 54322 +# Port used by db diff command to initialize the shadow database. +shadow_port = 54320 +# The database major version to use. This has to be the same as your remote database's. Run `SHOW +# server_version;` on the remote database to check. +major_version = 17 + +[db.pooler] +enabled = false +# Port to use for the local connection pooler. +port = 54329 +# Specifies when a server connection can be reused by other clients. +# Configure one of the supported pooler modes: `transaction`, `session`. +pool_mode = "transaction" +# How many server connections to allow per user/database pair. +default_pool_size = 20 +# Maximum number of client connections allowed. +max_client_conn = 100 + +# [db.vault] +# secret_key = "env(SECRET_VALUE)" + +[db.migrations] +# If disabled, migrations will be skipped during a db push or reset. +enabled = true +# Specifies an ordered list of schema files that describe your database. +# Supports glob patterns relative to supabase directory: "./schemas/*.sql" +schema_paths = [] + +[db.seed] +# If enabled, seeds the database after migrations during a db reset. +enabled = true +# Specifies an ordered list of seed files to load during db reset. +# Supports glob patterns relative to supabase directory: "./seeds/*.sql" +sql_paths = ["./seed.sql"] + +[db.network_restrictions] +# Enable management of network restrictions. +enabled = false +# List of IPv4 CIDR blocks allowed to connect to the database. +# Defaults to allow all IPv4 connections. Set empty array to block all IPs. +allowed_cidrs = ["0.0.0.0/0"] +# List of IPv6 CIDR blocks allowed to connect to the database. +# Defaults to allow all IPv6 connections. Set empty array to block all IPs. +allowed_cidrs_v6 = ["::/0"] + +[realtime] +enabled = true +# Bind realtime via either IPv4 or IPv6. (default: IPv4) +# ip_version = "IPv6" +# The maximum length in bytes of HTTP request headers. (default: 4096) +# max_header_length = 4096 + +[studio] +enabled = true +# Port to use for Supabase Studio. +port = 54323 +# External URL of the API server that frontend connects to. +api_url = "http://127.0.0.1" +# OpenAI API Key to use for Supabase AI in the Supabase Studio. +openai_api_key = "env(OPENAI_API_KEY)" + +# Email testing server. Emails sent with the local dev setup are not actually sent - rather, they +# are monitored, and you can view the emails that would have been sent from the web interface. +[inbucket] +enabled = true +# Port to use for the email testing server web interface. +port = 54324 +# Uncomment to expose additional ports for testing user applications that send emails. +# smtp_port = 54325 +# pop3_port = 54326 +# admin_email = "admin@email.com" +# sender_name = "Admin" + +[storage] +enabled = true +# The maximum file size allowed (e.g. "5MB", "500KB"). +file_size_limit = "50MiB" + +# Image transformation API is available to Supabase Pro plan. +# [storage.image_transformation] +# enabled = true + +# Uncomment to configure local storage buckets +# [storage.buckets.images] +# public = false +# file_size_limit = "50MiB" +# allowed_mime_types = ["image/png", "image/jpeg"] +# objects_path = "./images" + +[auth] +enabled = true +# The base URL of your website. Used as an allow-list for redirects and for constructing URLs used +# in emails. +site_url = "http://127.0.0.1:3000" +# A list of *exact* URLs that auth providers are permitted to redirect to post authentication. +additional_redirect_urls = ["https://127.0.0.1:3000"] +# How long tokens are valid for, in seconds. Defaults to 3600 (1 hour), maximum 604,800 (1 week). +jwt_expiry = 3600 +# If disabled, the refresh token will never expire. +enable_refresh_token_rotation = true +# Allows refresh tokens to be reused after expiry, up to the specified interval in seconds. +# Requires enable_refresh_token_rotation = true. +refresh_token_reuse_interval = 10 +# Allow/disallow new user signups to your project. +enable_signup = true +# Allow/disallow anonymous sign-ins to your project. +enable_anonymous_sign_ins = false +# Allow/disallow testing manual linking of accounts +enable_manual_linking = false +# Passwords shorter than this value will be rejected as weak. Minimum 6, recommended 8 or more. +minimum_password_length = 6 +# Passwords that do not meet the following requirements will be rejected as weak. Supported values +# are: `letters_digits`, `lower_upper_letters_digits`, `lower_upper_letters_digits_symbols` +password_requirements = "" + +[auth.rate_limit] +# Number of emails that can be sent per hour. Requires auth.email.smtp to be enabled. +email_sent = 2 +# Number of SMS messages that can be sent per hour. Requires auth.sms to be enabled. +sms_sent = 30 +# Number of anonymous sign-ins that can be made per hour per IP address. Requires enable_anonymous_sign_ins = true. +anonymous_users = 30 +# Number of sessions that can be refreshed in a 5 minute interval per IP address. +token_refresh = 150 +# Number of sign up and sign-in requests that can be made in a 5 minute interval per IP address (excludes anonymous users). +sign_in_sign_ups = 30 +# Number of OTP / Magic link verifications that can be made in a 5 minute interval per IP address. +token_verifications = 30 +# Number of Web3 logins that can be made in a 5 minute interval per IP address. +web3 = 30 + +# Configure one of the supported captcha providers: `hcaptcha`, `turnstile`. +# [auth.captcha] +# enabled = true +# provider = "hcaptcha" +# secret = "" + +[auth.email] +# Allow/disallow new user signups via email to your project. +enable_signup = true +# If enabled, a user will be required to confirm any email change on both the old, and new email +# addresses. If disabled, only the new email is required to confirm. +double_confirm_changes = true +# If enabled, users need to confirm their email address before signing in. +enable_confirmations = false +# If enabled, users will need to reauthenticate or have logged in recently to change their password. +secure_password_change = false +# Controls the minimum amount of time that must pass before sending another signup confirmation or password reset email. +max_frequency = "1s" +# Number of characters used in the email OTP. +otp_length = 6 +# Number of seconds before the email OTP expires (defaults to 1 hour). +otp_expiry = 3600 + +# Use a production-ready SMTP server +# [auth.email.smtp] +# enabled = true +# host = "smtp.sendgrid.net" +# port = 587 +# user = "apikey" +# pass = "env(SENDGRID_API_KEY)" +# admin_email = "admin@email.com" +# sender_name = "Admin" + +# Uncomment to customize email template +# [auth.email.template.invite] +# subject = "You have been invited" +# content_path = "./supabase/templates/invite.html" + +[auth.sms] +# Allow/disallow new user signups via SMS to your project. +enable_signup = false +# If enabled, users need to confirm their phone number before signing in. +enable_confirmations = false +# Template for sending OTP to users +template = "Your code is {{ .Code }}" +# Controls the minimum amount of time that must pass before sending another sms otp. +max_frequency = "5s" + +# Use pre-defined map of phone number to OTP for testing. +# [auth.sms.test_otp] +# 4152127777 = "123456" + +# Configure logged in session timeouts. +# [auth.sessions] +# Force log out after the specified duration. +# timebox = "24h" +# Force log out if the user has been inactive longer than the specified duration. +# inactivity_timeout = "8h" + +# This hook runs before a new user is created and allows developers to reject the request based on the incoming user object. +# [auth.hook.before_user_created] +# enabled = true +# uri = "pg-functions://postgres/auth/before-user-created-hook" + +# This hook runs before a token is issued and allows you to add additional claims based on the authentication method used. +# [auth.hook.custom_access_token] +# enabled = true +# uri = "pg-functions:////" + +# Configure one of the supported SMS providers: `twilio`, `twilio_verify`, `messagebird`, `textlocal`, `vonage`. +[auth.sms.twilio] +enabled = false +account_sid = "" +message_service_sid = "" +# DO NOT commit your Twilio auth token to git. Use environment variable substitution instead: +auth_token = "env(SUPABASE_AUTH_SMS_TWILIO_AUTH_TOKEN)" + +# Multi-factor-authentication is available to Supabase Pro plan. +[auth.mfa] +# Control how many MFA factors can be enrolled at once per user. +max_enrolled_factors = 10 + +# Control MFA via App Authenticator (TOTP) +[auth.mfa.totp] +enroll_enabled = false +verify_enabled = false + +# Configure MFA via Phone Messaging +[auth.mfa.phone] +enroll_enabled = false +verify_enabled = false +otp_length = 6 +template = "Your code is {{ .Code }}" +max_frequency = "5s" + +# Configure MFA via WebAuthn +# [auth.mfa.web_authn] +# enroll_enabled = true +# verify_enabled = true + +# Use an external OAuth provider. The full list of providers are: `apple`, `azure`, `bitbucket`, +# `discord`, `facebook`, `github`, `gitlab`, `google`, `keycloak`, `linkedin_oidc`, `notion`, `twitch`, +# `twitter`, `slack`, `spotify`, `workos`, `zoom`. +[auth.external.apple] +enabled = false +client_id = "" +# DO NOT commit your OAuth provider secret to git. Use environment variable substitution instead: +secret = "env(SUPABASE_AUTH_EXTERNAL_APPLE_SECRET)" +# Overrides the default auth redirectUrl. +redirect_uri = "" +# Overrides the default auth provider URL. Used to support self-hosted gitlab, single-tenant Azure, +# or any other third-party OIDC providers. +url = "" +# If enabled, the nonce check will be skipped. Required for local sign in with Google auth. +skip_nonce_check = false + +# Allow Solana wallet holders to sign in to your project via the Sign in with Solana (SIWS, EIP-4361) standard. +# You can configure "web3" rate limit in the [auth.rate_limit] section and set up [auth.captcha] if self-hosting. +[auth.web3.solana] +enabled = false + +# Use Firebase Auth as a third-party provider alongside Supabase Auth. +[auth.third_party.firebase] +enabled = false +# project_id = "my-firebase-project" + +# Use Auth0 as a third-party provider alongside Supabase Auth. +[auth.third_party.auth0] +enabled = false +# tenant = "my-auth0-tenant" +# tenant_region = "us" + +# Use AWS Cognito (Amplify) as a third-party provider alongside Supabase Auth. +[auth.third_party.aws_cognito] +enabled = false +# user_pool_id = "my-user-pool-id" +# user_pool_region = "us-east-1" + +# Use Clerk as a third-party provider alongside Supabase Auth. +[auth.third_party.clerk] +enabled = false +# Obtain from https://clerk.com/setup/supabase +# domain = "example.clerk.accounts.dev" + +[edge_runtime] +enabled = true +# Configure one of the supported request policies: `oneshot`, `per_worker`. +# Use `oneshot` for hot reload, or `per_worker` for load testing. +policy = "oneshot" +# Port to attach the Chrome inspector for debugging edge functions. +inspector_port = 8083 +# The Deno major version to use. +deno_version = 1 + +# [edge_runtime.secrets] +# secret_key = "env(SECRET_VALUE)" + +[analytics] +enabled = true +port = 54327 +# Configure one of the supported backends: `postgres`, `bigquery`. +backend = "postgres" + +# Experimental features may be deprecated any time +[experimental] +# Configures Postgres storage engine to use OrioleDB (S3) +orioledb_version = "" +# Configures S3 bucket URL, eg. .s3-.amazonaws.com +s3_host = "env(S3_HOST)" +# Configures S3 bucket region, eg. us-east-1 +s3_region = "env(S3_REGION)" +# Configures AWS_ACCESS_KEY_ID for S3 bucket +s3_access_key = "env(S3_ACCESS_KEY)" +# Configures AWS_SECRET_ACCESS_KEY for S3 bucket +s3_secret_key = "env(S3_SECRET_KEY)" diff --git a/supabase/migrations/20250126000001_initial_setup.sql b/supabase/migrations/20250126000001_initial_setup.sql new file mode 100644 index 0000000..ca6fce0 --- /dev/null +++ b/supabase/migrations/20250126000001_initial_setup.sql @@ -0,0 +1,34 @@ +-- Initial setup migration for LivingDexTracker +-- This sets up any additional schema needed + +-- Note: RLS is already enabled on auth.users by default in Supabase +-- and proper policies are already in place + +-- Create a profiles table if we need additional user data +-- This is optional for the current setup since we only use Supabase for auth +-- and store everything else in MongoDB + +-- CREATE TABLE profiles ( +-- id UUID PRIMARY KEY REFERENCES auth.users(id) ON DELETE CASCADE, +-- username TEXT, +-- avatar_url TEXT, +-- created_at TIMESTAMPTZ DEFAULT NOW(), +-- updated_at TIMESTAMPTZ DEFAULT NOW() +-- ); + +-- Enable RLS on profiles table +-- ALTER TABLE profiles ENABLE ROW LEVEL SECURITY; + +-- Create RLS policies for profiles +-- CREATE POLICY "Users can view own profile" +-- ON profiles +-- FOR SELECT +-- USING (auth.uid() = id); + +-- CREATE POLICY "Users can update own profile" +-- ON profiles +-- FOR UPDATE +-- USING (auth.uid() = id); + +-- Note: MongoDB collections (pokedexentries, catchrecords) are handled by the app +-- Supabase is only used for authentication in this hybrid setup \ No newline at end of file diff --git a/supabase/migrations/20250126000002_create_pokemon_schema.sql b/supabase/migrations/20250126000002_create_pokemon_schema.sql new file mode 100644 index 0000000..3f241f6 --- /dev/null +++ b/supabase/migrations/20250126000002_create_pokemon_schema.sql @@ -0,0 +1,107 @@ +-- Migration: Create PostgreSQL schema for Pokemon data +-- This replaces the MongoDB collections with proper PostgreSQL tables + +-- Note: Using individual columns instead of composite types for simplicity + +-- Pokemon entries table (replaces pokedexentries MongoDB collection) +CREATE TABLE pokedex_entries ( + id BIGSERIAL PRIMARY KEY, + pokedex_number INTEGER NOT NULL, + pokemon TEXT NOT NULL, + form TEXT, + can_gigantamax BOOLEAN DEFAULT FALSE, + region_to_catch_in TEXT, + games_to_catch_in TEXT[], -- Array of games + region_to_evolve_in TEXT, + evolution_information TEXT, + catch_information TEXT[], -- Array of catch info + + -- Box placement for forms view + box_placement_forms_box INTEGER, + box_placement_forms_row INTEGER, + box_placement_forms_column INTEGER, + + -- Box placement for no-forms view + box_placement_box INTEGER, + box_placement_row INTEGER, + box_placement_column INTEGER, + + created_at TIMESTAMPTZ DEFAULT NOW(), + updated_at TIMESTAMPTZ DEFAULT NOW() +); + +-- Catch records table (replaces catchrecords MongoDB collection) +CREATE TABLE catch_records ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + user_id UUID NOT NULL REFERENCES auth.users(id) ON DELETE CASCADE, + pokedex_entry_id BIGINT NOT NULL REFERENCES pokedex_entries(id) ON DELETE CASCADE, + + -- Catch status fields + have_to_evolve BOOLEAN DEFAULT FALSE, + caught BOOLEAN DEFAULT FALSE, + in_home BOOLEAN DEFAULT FALSE, + has_gigantamaxed BOOLEAN DEFAULT FALSE, + personal_notes TEXT, + + created_at TIMESTAMPTZ DEFAULT NOW(), + updated_at TIMESTAMPTZ DEFAULT NOW(), + + -- Ensure one record per user per pokemon entry + UNIQUE(user_id, pokedex_entry_id) +); + +-- Region/Game mappings table (replaces regiongamemappings MongoDB collection) +CREATE TABLE region_game_mappings ( + id BIGSERIAL PRIMARY KEY, + region TEXT NOT NULL, + games TEXT[] NOT NULL, + created_at TIMESTAMPTZ DEFAULT NOW() +); + +-- Pokedex metadata table (replaces pokedexmetadata MongoDB collection) +CREATE TABLE pokedex_metadata ( + id BIGSERIAL PRIMARY KEY, + key TEXT UNIQUE NOT NULL, + value JSONB NOT NULL, + created_at TIMESTAMPTZ DEFAULT NOW(), + updated_at TIMESTAMPTZ DEFAULT NOW() +); + +-- Enable Row Level Security (RLS) for user data isolation +ALTER TABLE catch_records ENABLE ROW LEVEL SECURITY; + +-- RLS Policy: Users can only access their own catch records +CREATE POLICY "Users can only access their own catch records" +ON catch_records FOR ALL +USING (auth.uid() = user_id) +WITH CHECK (auth.uid() = user_id); + +-- Create indexes for better performance +CREATE INDEX idx_pokedex_entries_pokedex_number ON pokedex_entries(pokedex_number); +CREATE INDEX idx_pokedex_entries_pokemon ON pokedex_entries(pokemon); +CREATE INDEX idx_pokedex_entries_box_placement_forms ON pokedex_entries(box_placement_forms_box, box_placement_forms_row, box_placement_forms_column); +CREATE INDEX idx_pokedex_entries_box_placement ON pokedex_entries(box_placement_box, box_placement_row, box_placement_column); + +CREATE INDEX idx_catch_records_user_id ON catch_records(user_id); +CREATE INDEX idx_catch_records_pokedex_entry_id ON catch_records(pokedex_entry_id); +CREATE INDEX idx_catch_records_caught ON catch_records(caught); +CREATE INDEX idx_catch_records_in_home ON catch_records(in_home); + +-- Create updated_at trigger function +CREATE OR REPLACE FUNCTION update_updated_at_column() +RETURNS TRIGGER AS $$ +BEGIN + NEW.updated_at = NOW(); + RETURN NEW; +END; +$$ language 'plpgsql'; + +-- Add updated_at triggers +CREATE TRIGGER update_pokedex_entries_updated_at BEFORE UPDATE ON pokedex_entries + FOR EACH ROW EXECUTE FUNCTION update_updated_at_column(); + +CREATE TRIGGER update_catch_records_updated_at BEFORE UPDATE ON catch_records + FOR EACH ROW EXECUTE FUNCTION update_updated_at_column(); + +CREATE TRIGGER update_pokedex_metadata_updated_at BEFORE UPDATE ON pokedex_metadata + FOR EACH ROW EXECUTE FUNCTION update_updated_at_column(); \ No newline at end of file diff --git a/supabase/migrations/20250126000003_seed_pokemon_data.sql b/supabase/migrations/20250126000003_seed_pokemon_data.sql new file mode 100644 index 0000000..6ee62db --- /dev/null +++ b/supabase/migrations/20250126000003_seed_pokemon_data.sql @@ -0,0 +1,54 @@ +-- Migration: Seed Pokemon data from TSV +-- This replaces the separate tsv-parser project and MongoDB seeding + +-- Insert Pokemon data based on the TSV structure +-- Note: This is a sample of the data structure - you'll need to convert the full TSV + +INSERT INTO pokedex_entries ( + pokedex_number, + pokemon, + form, + can_gigantamax, + region_to_catch_in, + games_to_catch_in, + region_to_evolve_in, + evolution_information, + box_placement_forms_box, + box_placement_forms_row, + box_placement_forms_column, + box_placement_box, + box_placement_row, + box_placement_column +) VALUES +-- Sample data from the TSV (first few entries) +(1, 'Bulbasaur', NULL, FALSE, 'Kanto', ARRAY['Red','Blue','Yellow','LG: Pikachu','LG: Eevee'], NULL, NULL, 1, 1, 1, 1, 1, 1), +(2, 'Ivysaur', NULL, FALSE, 'Kanto', ARRAY['Red','Blue','Yellow','LG: Pikachu','LG: Eevee'], NULL, NULL, 1, 1, 2, 1, 1, 2), +(3, 'Venusaur', NULL, TRUE, 'Kanto', ARRAY['Red','Blue','Yellow','LG: Pikachu','LG: Eevee'], NULL, NULL, 1, 1, 3, 1, 1, 3), +(3, 'Venusaur', 'Female', FALSE, 'Kanto', ARRAY['Red','Blue','Yellow','LG: Pikachu','LG: Eevee'], NULL, NULL, 1, 1, 4, NULL, NULL, NULL), +(4, 'Charmander', NULL, FALSE, 'Kanto', ARRAY['Red','Blue','Yellow','LG: Pikachu','LG: Eevee'], NULL, NULL, 1, 1, 5, 1, 1, 4), +(5, 'Charmeleon', NULL, FALSE, 'Kanto', ARRAY['Red','Blue','Yellow','LG: Pikachu','LG: Eevee'], NULL, NULL, 1, 1, 6, 1, 1, 5), +(6, 'Charizard', NULL, TRUE, 'Kanto', ARRAY['Red','Blue','Yellow','LG: Pikachu','LG: Eevee'], NULL, NULL, 1, 2, 1, 1, 1, 6), +(7, 'Squirtle', NULL, FALSE, 'Kanto', ARRAY['Red','Blue','Yellow','LG: Pikachu','LG: Eevee'], NULL, NULL, 1, 2, 2, 1, 2, 1), +(8, 'Wartortle', NULL, FALSE, 'Kanto', ARRAY['Red','Blue','Yellow','LG: Pikachu','LG: Eevee'], NULL, NULL, 1, 2, 3, 1, 2, 2); + +-- Insert region game mappings +INSERT INTO region_game_mappings (region, games) VALUES +('Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), +('Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +('Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'Omega Ruby', 'Alpha Sapphire']), +('Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'Brilliant Diamond', 'Shining Pearl']), +('Unova', ARRAY['Black', 'White', 'Black 2', 'White 2']), +('Kalos', ARRAY['X', 'Y']), +('Alola', ARRAY['Sun', 'Moon', 'Ultra Sun', 'Ultra Moon']), +('Galar', ARRAY['Sword', 'Shield']), +('Paldea', ARRAY['Scarlet', 'Violet']); + +-- Insert some metadata +INSERT INTO pokedex_metadata (key, value) VALUES +('total_pokemon', '{"count": 1025}'), +('last_updated', '{"timestamp": "2025-01-26T00:00:00Z"}'), +('supported_generations', '{"generations": [1,2,3,4,5,6,7,8,9]}'); + +-- Note: This is a sample seed. For the full migration, we'll need to: +-- 1. Convert the entire TSV file to SQL inserts +-- 2. Or create a function to import from the TSV data directly \ No newline at end of file diff --git a/supabase/migrations/20250126000004_seed_full_pokemon_data.sql b/supabase/migrations/20250126000004_seed_full_pokemon_data.sql new file mode 100644 index 0000000..a3921ac --- /dev/null +++ b/supabase/migrations/20250126000004_seed_full_pokemon_data.sql @@ -0,0 +1,1422 @@ +-- Auto-generated migration: Full Pokemon data from TSV +-- This replaces the MongoDB seeding and tsv-parser project + +-- Clear existing data (for development) +DELETE FROM catch_records; +DELETE FROM pokedex_entries; + +-- Insert full Pokemon dataset +INSERT INTO pokedex_entries ( + pokedex_number, + pokemon, + form, + can_gigantamax, + region_to_catch_in, + games_to_catch_in, + region_to_evolve_in, + evolution_information, + box_placement_forms_box, + box_placement_forms_row, + box_placement_forms_column, + box_placement_box, + box_placement_row, + box_placement_column +) VALUES +(1, 'Bulbasaur', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 1, 1, 1, 1, 1, 1), +(2, 'Ivysaur', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 1, 1, 2, 1, 1, 2), +(3, 'Venusaur', NULL, true, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 1, 1, 3, 1, 1, 3), +(3, 'Venusaur', 'Female', false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 1, 1, 4, null, null, null), +(4, 'Charmander', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 1, 1, 5, 1, 1, 4), +(5, 'Charmeleon', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 1, 1, 6, 1, 1, 5), +(6, 'Charizard', NULL, true, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 1, 2, 1, 1, 1, 6), +(7, 'Squirtle', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 1, 2, 2, 1, 2, 1), +(8, 'Wartortle', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 1, 2, 3, 1, 2, 2), +(9, 'Blastoise', NULL, true, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 1, 2, 4, 1, 2, 3), +(10, 'Caterpie', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 1, 2, 5, 1, 2, 4), +(11, 'Metapod', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 1, 2, 6, 1, 2, 5), +(12, 'Butterfree', NULL, true, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 1, 3, 1, 1, 2, 6), +(12, 'Butterfree', 'Female', false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 1, 3, 2, null, null, null), +(13, 'Weedle', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 1, 3, 3, 1, 3, 1), +(14, 'Kakuna', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 1, 3, 4, 1, 3, 2), +(15, 'Beedrill', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 1, 3, 5, 1, 3, 3), +(16, 'Pidgey', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 1, 3, 6, 1, 3, 4), +(17, 'Pidgeotto', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 1, 4, 1, 1, 3, 5), +(18, 'Pidgeot', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 1, 4, 2, 1, 3, 6), +(19, 'Rattata', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 1, 4, 3, 1, 4, 1), +(19, 'Rattata', 'Female', false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 1, 4, 4, null, null, null), +(19, 'Rattata', 'Alolan', false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, NULL, 1, 4, 5, null, null, null), +(20, 'Raticate', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 1, 4, 6, 1, 4, 2), +(20, 'Raticate', 'Female', false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 1, 5, 1, null, null, null), +(20, 'Raticate', 'Alolan', false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Route 8, Memorial Hill, Akala Outskirts, Route 10, Tapu Village, Route 14, Route 15, Route 16, Route 17, Mount Lanakila, Poni Plains', 1, 5, 2, null, null, null), +(21, 'Spearow', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 1, 5, 3, 1, 4, 3), +(22, 'Fearow', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 1, 5, 4, 1, 4, 4), +(23, 'Ekans', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'LG: Eevee'], NULL, NULL, 1, 5, 5, 1, 4, 5), +(24, 'Arbok', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'LG: Eevee'], NULL, NULL, 1, 5, 6, 1, 4, 6), +(25, 'Pikachu', NULL, true, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 2, 1, 1, 1, 5, 1), +(25, 'Pikachu', 'Female', false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 2, 1, 2, null, null, null), +(25, 'Pikachu', 'Original Cap', false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Event (powersaves)', 2, 1, 3, null, null, null), +(25, 'Pikachu', 'Hoenn Cap', false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Event (powersaves)', 2, 1, 4, null, null, null), +(25, 'Pikachu', 'Sinnoh Cap', false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Event (powersaves)', 2, 1, 5, null, null, null), +(25, 'Pikachu', 'Unova Cap', false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Event (powersaves)', 2, 1, 6, null, null, null), +(25, 'Pikachu', 'Kalos Cap', false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Event (powersaves)', 2, 2, 1, null, null, null), +(25, 'Pikachu', 'Alola Cap', false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Event (powersaves)', 2, 2, 2, null, null, null), +(25, 'Pikachu', 'Partner Cap', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, 'Event (pkhex)', 2, 2, 3, null, null, null), +(25, 'Pikachu', 'World Cap', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, 'Event (pkhex)', 2, 2, 4, null, null, null), +(26, 'Raichu', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 2, 2, 5, 1, 5, 2), +(26, 'Raichu', 'Female', false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 2, 2, 6, null, null, null), +(26, 'Raichu', 'Alolan', false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], 'Alola', NULL, 2, 3, 1, null, null, null), +(27, 'Sandshrew', NULL, false, 'Kanto', ARRAY['Blue', 'Yellow', 'LG: Pikachu'], NULL, NULL, 2, 3, 2, 1, 5, 3), +(27, 'Sandshrew', 'Alolan', false, 'Alola', ARRAY['Moon', 'UM'], NULL, 'Tapu Village, Route 14, Mount Lanakila Ultra Moon only. Evolves via Ice Stone.', 2, 3, 3, null, null, null), +(28, 'Sandslash', NULL, false, 'Kanto', ARRAY['Blue', 'Yellow', 'LG: Pikachu'], NULL, NULL, 2, 3, 4, 1, 5, 4), +(28, 'Sandslash', 'Alolan', false, 'Alola', ARRAY['Moon', 'UM'], NULL, 'Evolves from Sandshrew with an ice stone', 2, 3, 5, null, null, null), +(29, 'Nidoran♀', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 2, 3, 6, 1, 5, 5), +(30, 'Nidorina', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 2, 4, 1, 1, 5, 6), +(31, 'Nidoqueen', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 2, 4, 2, 2, 1, 1), +(32, 'Nidoran♂', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 2, 4, 3, 2, 1, 2), +(33, 'Nidorino', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 2, 4, 4, 2, 1, 3), +(34, 'Nidoking', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 2, 4, 5, 2, 1, 4), +(35, 'Clefairy', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 2, 4, 6, 2, 1, 5), +(36, 'Clefable', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 2, 5, 1, 2, 1, 6), +(37, 'Vulpix', NULL, false, 'Kanto', ARRAY['Blue', 'Yellow', 'LG: Eevee'], NULL, NULL, 2, 5, 2, 2, 2, 1), +(37, 'Vulpix', 'Alolan', false, 'Alola', ARRAY['Sun', 'US'], NULL, 'Tapu Village, Route 14, Mount Lanakila Ultra Sun only. Evolves via Ice Stone.', 2, 5, 3, null, null, null), +(38, 'Ninetales', NULL, false, 'Kanto', ARRAY['Blue', 'Yellow', 'LG: Eevee'], NULL, NULL, 2, 5, 4, 2, 2, 2), +(38, 'Ninetales', 'Alolan', false, 'Alola', ARRAY['Sun', 'US'], NULL, 'Evolves from Vulpix with an ice stone', 2, 5, 5, null, null, null), +(39, 'Jigglypuff', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 2, 5, 6, 2, 2, 3), +(40, 'Wigglytuff', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 3, 1, 1, 2, 2, 4), +(41, 'Zubat', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 3, 1, 2, 2, 2, 5), +(41, 'Zubat', 'Female', false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 3, 1, 3, null, null, null), +(42, 'Golbat', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 3, 1, 4, 2, 2, 6), +(42, 'Golbat', 'Female', false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 3, 1, 5, null, null, null), +(43, 'Oddish', NULL, false, 'Kanto', ARRAY['Red', 'Yellow', 'LG: Pikachu'], NULL, NULL, 3, 1, 6, 2, 3, 1), +(44, 'Gloom', NULL, false, 'Kanto', ARRAY['Red', 'Yellow', 'LG: Pikachu'], NULL, NULL, 3, 2, 1, 2, 3, 2), +(44, 'Gloom', 'Female', false, 'Kanto', ARRAY['Red', 'Yellow', 'LG: Pikachu'], NULL, NULL, 3, 2, 2, null, null, null), +(45, 'Vileplume', NULL, false, 'Kanto', ARRAY['Red', 'Yellow', 'LG: Pikachu'], NULL, NULL, 3, 2, 3, 2, 3, 3), +(45, 'Vileplume', 'Female', false, 'Kanto', ARRAY['Red', 'Yellow', 'LG: Pikachu'], NULL, NULL, 3, 2, 4, null, null, null), +(46, 'Paras', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 3, 2, 5, 2, 3, 4), +(47, 'Parasect', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 3, 2, 6, 2, 3, 5), +(48, 'Venonat', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 3, 3, 1, 2, 3, 6), +(49, 'Venomoth', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 3, 3, 2, 2, 4, 1), +(50, 'Diglett', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 3, 3, 3, 2, 4, 2), +(50, 'Diglett', 'Alolan', false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, NULL, 3, 3, 4, null, null, null), +(51, 'Dugtrio', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 3, 3, 5, 2, 4, 3), +(51, 'Dugtrio', 'Alolan', false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, NULL, 3, 3, 6, null, null, null), +(52, 'Meowth', NULL, true, 'Kanto', ARRAY['Blue', 'LG: Eevee'], NULL, NULL, 3, 4, 1, 2, 4, 4), +(52, 'Meowth', 'Alolan', false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, NULL, 3, 4, 2, null, null, null), +(52, 'Meowth', 'Galarian', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 3, 4, 3, null, null, null), +(53, 'Persian', NULL, false, 'Kanto', ARRAY['Blue', 'LG: Eevee'], NULL, NULL, 3, 4, 4, 2, 4, 5), +(53, 'Persian', 'Alolan', false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Malie Garden, or Meowth: Route 2, Hau’oli City (Shopping District), Hau’oli City (Marina), Route 1 (Trainers’ School), Malie Garden Evolves via level-up with high happiness.', 3, 4, 5, null, null, null), +(54, 'Psyduck', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 3, 4, 6, 2, 4, 6), +(55, 'Golduck', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 3, 5, 1, 2, 5, 1), +(56, 'Mankey', NULL, false, 'Kanto', ARRAY['Red', 'Yellow', 'LG: Pikachu'], NULL, NULL, 3, 5, 2, 2, 5, 2), +(57, 'Primeape', NULL, false, 'Kanto', ARRAY['Red', 'Yellow', 'LG: Pikachu'], NULL, NULL, 3, 5, 3, 2, 5, 3), +(58, 'Growlithe', NULL, false, 'Kanto', ARRAY['Red', 'Yellow', 'LG: Pikachu'], NULL, NULL, 3, 5, 4, 2, 5, 4), +(58, 'Growlithe', 'Hisuian', false, 'Hisui', ARRAY['PLA'], NULL, 'Cobalt Coastlands: Windbreak Stand, Veilstone Cape, massive mass outbreaks (Hisuian Form)', 3, 5, 5, null, null, null), +(59, 'Arcanine', NULL, false, 'Kanto', ARRAY['Red', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 3, 5, 6, 2, 5, 5), +(59, 'Arcanine', 'Hisuian', false, 'Hisui', ARRAY['PLA'], NULL, 'Evolves from Growlithe with a fire stone', 4, 1, 1, null, null, null), +(60, 'Poliwag', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 4, 1, 2, 2, 5, 6), +(61, 'Poliwhirl', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 4, 1, 3, 3, 1, 1), +(62, 'Poliwrath', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 4, 1, 4, 3, 1, 2), +(63, 'Abra', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 4, 1, 5, 3, 1, 3), +(64, 'Kadabra', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 4, 1, 6, 3, 1, 4), +(64, 'Kadabra', 'Female', false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 4, 2, 1, null, null, null), +(65, 'Alakazam', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 4, 2, 2, 3, 1, 5), +(65, 'Alakazam', 'Female', false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 4, 2, 3, null, null, null), +(66, 'Machop', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 4, 2, 4, 3, 1, 6), +(67, 'Machoke', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 4, 2, 5, 3, 2, 1), +(68, 'Machamp', NULL, true, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 4, 2, 6, 3, 2, 2), +(69, 'Bellsprout', NULL, false, 'Kanto', ARRAY['Blue', 'Yellow', 'LG: Eevee'], NULL, NULL, 4, 3, 1, 3, 2, 3), +(70, 'Weepinbell', NULL, false, 'Kanto', ARRAY['Blue', 'Yellow', 'LG: Eevee'], NULL, NULL, 4, 3, 2, 3, 2, 4), +(71, 'Victreebel', NULL, false, 'Kanto', ARRAY['Blue', 'Yellow', 'LG: Eevee'], NULL, NULL, 4, 3, 3, 3, 2, 5), +(72, 'Tentacool', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 4, 3, 4, 3, 2, 6), +(73, 'Tentacruel', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 4, 3, 5, 3, 3, 1), +(74, 'Geodude', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 4, 3, 6, 3, 3, 2), +(74, 'Geodude', 'Alolan', false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Route 12 and Blush Mountain, evolves at level 25', 4, 4, 1, null, null, null), +(75, 'Graveler', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 4, 4, 2, 3, 3, 3), +(75, 'Graveler', 'Alolan', false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Evolves from Geodude at level 25', 4, 4, 3, null, null, null), +(76, 'Golem', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 4, 4, 4, 3, 3, 4), +(76, 'Golem', 'Alolan', false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Evolves from Graveler by trading', 4, 4, 5, null, null, null), +(77, 'Ponyta', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 4, 4, 6, 3, 3, 5), +(77, 'Ponyta', 'Galarian', false, 'Galar', ARRAY['Shield'], NULL, NULL, 4, 5, 1, null, null, null), +(78, 'Rapidash', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 4, 5, 2, 3, 3, 6), +(78, 'Rapidash', 'Galarian', false, 'Galar', ARRAY['Shield'], NULL, NULL, 4, 5, 3, null, null, null), +(79, 'Slowpoke', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 4, 5, 4, 3, 4, 1), +(79, 'Slowpoke', 'Galarian', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 4, 5, 5, null, null, null), +(80, 'Slowbro', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 4, 5, 6, 3, 4, 2), +(80, 'Slowbro', 'Galarian', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 5, 1, 1, null, null, null), +(81, 'Magnemite', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 5, 1, 2, 3, 4, 3), +(82, 'Magneton', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 5, 1, 3, 3, 4, 4), +(83, 'Farfetch’d', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 5, 1, 4, 3, 4, 5), +(83, 'Farfetch’d', 'Galarian', false, 'Galar', ARRAY['Sword'], NULL, 'Route 5, Giant''s Mirror (Galarian Form) Dusty Bowl, North Lake Miloch, Stony Wilderness (Max Raid Battle) (Galarian Form)', 5, 1, 5, null, null, null), +(84, 'Doduo', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 5, 1, 6, 3, 4, 6), +(84, 'Doduo', 'Female', false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 5, 2, 1, null, null, null), +(85, 'Dodrio', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 5, 2, 2, 3, 5, 1), +(85, 'Dodrio', 'Female', false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 5, 2, 3, null, null, null), +(86, 'Seel', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 5, 2, 4, 3, 5, 2), +(87, 'Dewgong', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 5, 2, 5, 3, 5, 3), +(88, 'Grimer', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu'], NULL, NULL, 5, 2, 6, 3, 5, 4), +(88, 'Grimer', 'Alolan', false, 'Alola', ARRAY['US'], NULL, 'Hau’oli City (Shopping District), Hau’oli City (Marina), Route 1 (Trainers’ School), Malie City, Malie City (Outer Cape) Evolves at level 38.', 5, 3, 1, null, null, null), +(89, 'Muk', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu'], NULL, NULL, 5, 3, 2, 3, 5, 5), +(89, 'Muk', 'Alolan', false, 'Alola', ARRAY['US'], NULL, 'Evolves from Grimer at level 38', 5, 3, 3, null, null, null), +(90, 'Shellder', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 5, 3, 4, 3, 5, 6), +(91, 'Cloyster', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 5, 3, 5, 4, 1, 1), +(92, 'Gastly', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 5, 3, 6, 4, 1, 2), +(93, 'Haunter', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 5, 4, 1, 4, 1, 3), +(94, 'Gengar', NULL, true, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 5, 4, 2, 4, 1, 4), +(95, 'Onix', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 5, 4, 3, 4, 1, 5), +(96, 'Drowzee', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 5, 4, 4, 4, 1, 6), +(97, 'Hypno', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 5, 4, 5, 4, 2, 1), +(97, 'Hypno', 'Female', false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 5, 4, 6, null, null, null), +(98, 'Krabby', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 5, 5, 1, 4, 2, 2), +(99, 'Kingler', NULL, true, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 5, 5, 2, 4, 2, 3), +(100, 'Voltorb', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 5, 5, 3, 4, 2, 4), +(100, 'Voltorb', 'Hisuian', false, 'Hisui', ARRAY['PLA'], NULL, 'Coronet Highlands: Celestica Ruins (in boxes), Sacred Plaza (also in boxes), massive mass outbreaks (Hisuian Form)', 5, 5, 4, null, null, null), +(101, 'Electrode', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 5, 5, 5, 4, 2, 5), +(101, 'Electrode', 'Hisuian', false, 'Hisui', ARRAY['PLA'], NULL, 'Evolves from Voltorb with a leaf stone', 5, 5, 6, null, null, null), +(102, 'Exeggcute', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 6, 1, 1, 4, 2, 6), +(103, 'Exeggutor', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 6, 1, 2, 4, 3, 1), +(103, 'Exeggutor', 'Alolan', false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], 'Alola', NULL, 6, 1, 3, null, null, null), +(104, 'Cubone', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 6, 1, 4, 4, 3, 2), +(105, 'Marowak', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 6, 1, 5, 4, 3, 3), +(105, 'Marowak', 'Alolan', false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], 'Alola', NULL, 6, 1, 6, null, null, null), +(106, 'Hitmonlee', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 6, 2, 1, 4, 3, 4), +(107, 'Hitmonchan', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 6, 2, 2, 4, 3, 5), +(108, 'Lickitung', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 6, 2, 3, 4, 3, 6), +(109, 'Koffing', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'LG: Eevee'], NULL, NULL, 6, 2, 4, 4, 4, 1), +(110, 'Weezing', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'LG: Eevee'], NULL, NULL, 6, 2, 5, 4, 4, 2), +(110, 'Weezing', 'Galarian', false, 'Kanto', ARRAY['Red', 'Blue', 'LG: Eevee'], 'Galar', NULL, 6, 2, 6, null, null, null), +(111, 'Rhyhorn', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 6, 3, 1, 4, 4, 3), +(111, 'Rhyhorn', 'Female', false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 6, 3, 2, null, null, null), +(112, 'Rhydon', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 6, 3, 3, 4, 4, 4), +(112, 'Rhydon', 'Female', false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 6, 3, 4, null, null, null), +(113, 'Chansey', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 6, 3, 5, 4, 4, 5), +(114, 'Tangela', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 6, 3, 6, 4, 4, 6), +(115, 'Kangaskhan', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 6, 4, 1, 4, 5, 1), +(116, 'Horsea', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 6, 4, 2, 4, 5, 2), +(117, 'Seadra', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 6, 4, 3, 4, 5, 3), +(118, 'Goldeen', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 6, 4, 4, 4, 5, 4), +(118, 'Goldeen', 'Female', false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 6, 4, 5, null, null, null), +(119, 'Seaking', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 6, 4, 6, 4, 5, 5), +(119, 'Seaking', 'Female', false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 6, 5, 1, null, null, null), +(120, 'Staryu', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 6, 5, 2, 4, 5, 6), +(121, 'Starmie', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 6, 5, 3, 5, 1, 1), +(122, 'Mr. Mime', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 6, 5, 4, 5, 1, 2), +(122, 'Mr. Mime', 'Galarian', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 6, 5, 5, null, null, null), +(123, 'Scyther', NULL, false, 'Kanto', ARRAY['Red', 'Yellow', 'LG: Pikachu'], NULL, NULL, 6, 5, 6, 5, 1, 3), +(123, 'Scyther', 'Female', false, 'Kanto', ARRAY['Red', 'Yellow', 'LG: Pikachu'], NULL, NULL, 7, 1, 1, null, null, null), +(124, 'Jynx', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 7, 1, 2, 5, 1, 4), +(125, 'Electabuzz', NULL, false, 'Kanto', ARRAY['Red', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 7, 1, 3, 5, 1, 5), +(126, 'Magmar', NULL, false, 'Kanto', ARRAY['Blue', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 7, 1, 4, 5, 1, 6), +(127, 'Pinsir', NULL, false, 'Kanto', ARRAY['Blue', 'Yellow', 'LG: Eevee'], NULL, NULL, 7, 1, 5, 5, 2, 1), +(128, 'Tauros', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 7, 1, 6, 5, 2, 2), +(128, 'Tauros', 'Paldean', false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 7, 2, 1, null, null, null), +(128, 'Tauros', 'Paldean-Fire', false, 'Paldea', ARRAY['Scarlet'], NULL, NULL, 7, 2, 2, null, null, null), +(128, 'Tauros', 'Paldean-Water', false, 'Paldea', ARRAY['Violet'], NULL, NULL, 7, 2, 3, null, null, null), +(129, 'Magikarp', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 7, 2, 4, 5, 2, 3), +(129, 'Magikarp', 'Female', false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 7, 2, 5, null, null, null), +(130, 'Gyarados', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 7, 2, 6, 5, 2, 4), +(130, 'Gyarados', 'Female', false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 7, 3, 1, null, null, null), +(131, 'Lapras', NULL, true, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 7, 3, 2, 5, 2, 5), +(132, 'Ditto', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 7, 3, 3, 5, 2, 6), +(133, 'Eevee', NULL, true, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 7, 3, 4, 5, 3, 1), +(133, 'Eevee', 'Female', false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 7, 3, 5, null, null, null), +(134, 'Vaporeon', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], 'Kanto', 'evolves from Eevee when exposed to a Water Stone.', 7, 3, 6, 5, 3, 2), +(135, 'Jolteon', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], 'Kanto', 'evolves from Eevee when exposed to a Thunder Stone.', 7, 4, 1, 5, 3, 3), +(136, 'Flareon', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], 'Kanto', 'evolves from Eevee when exposed to a Fire Stone.', 7, 4, 2, 5, 3, 4), +(137, 'Porygon', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 7, 4, 3, 5, 3, 5), +(138, 'Omanyte', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 7, 4, 4, 5, 3, 6), +(139, 'Omastar', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 7, 4, 5, 5, 4, 1), +(140, 'Kabuto', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 7, 4, 6, 5, 4, 2), +(141, 'Kabutops', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 7, 5, 1, 5, 4, 3), +(142, 'Aerodactyl', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 7, 5, 2, 5, 4, 4), +(143, 'Snorlax', NULL, true, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 7, 5, 3, 5, 4, 5), +(144, 'Articuno', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 7, 5, 4, 5, 4, 6), +(144, 'Articuno', 'Galarian', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 7, 5, 5, null, null, null), +(145, 'Zapdos', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 7, 5, 6, 5, 5, 1), +(145, 'Zapdos', 'Galarian', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 8, 1, 1, null, null, null), +(146, 'Moltres', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 8, 1, 2, 5, 5, 2), +(146, 'Moltres', 'Galarian', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 8, 1, 3, null, null, null), +(147, 'Dratini', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 8, 1, 4, 5, 5, 3), +(148, 'Dragonair', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 8, 1, 5, 5, 5, 4), +(149, 'Dragonite', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 8, 1, 6, 5, 5, 5), +(150, 'Mewtwo', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 8, 2, 1, 5, 5, 6), +(151, 'Mew', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, 'R/B: https://www.youtube.com/watch?v=rvhuJsS4EhE&t=473s Yellow: https://www.reddit.com/r/pokemon/comments/7c5fpc', 8, 2, 2, 6, 1, 1), +(152, 'Chikorita', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 9, 1, 1, 6, 1, 2), +(153, 'Bayleef', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 9, 1, 2, 6, 1, 3), +(154, 'Meganium', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 9, 1, 3, 6, 1, 4), +(154, 'Meganium', 'Female', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 9, 1, 4, null, null, null), +(155, 'Cyndaquil', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 9, 1, 5, 6, 1, 5), +(156, 'Quilava', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 9, 1, 6, 6, 1, 6), +(157, 'Typhlosion', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 9, 2, 1, 6, 2, 1), +(157, 'Typhlosion', 'Hisuian', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], 'Hisui', 'Evolves from Quilava at level 36', 9, 2, 2, null, null, null), +(158, 'Totodile', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 9, 2, 3, 6, 2, 2), +(159, 'Croconaw', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 9, 2, 4, 6, 2, 3), +(160, 'Feraligatr', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 9, 2, 5, 6, 2, 4), +(161, 'Sentret', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, 'Route 29, 4am-6pm', 9, 2, 6, 6, 2, 5), +(162, 'Furret', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 9, 3, 1, 6, 2, 6), +(163, 'Hoothoot', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 9, 3, 2, 6, 3, 1), +(164, 'Noctowl', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 9, 3, 3, 6, 3, 2), +(165, 'Ledyba', NULL, false, 'Johto', ARRAY['Silver', 'Crystal', 'SS'], NULL, 'Route 30, 4am-10am', 9, 3, 4, 6, 3, 3), +(165, 'Ledyba', 'Female', false, 'Johto', ARRAY['Silver', 'Crystal', 'SS'], NULL, NULL, 9, 3, 5, null, null, null), +(166, 'Ledian', NULL, false, 'Johto', ARRAY['Silver', 'Crystal', 'SS'], NULL, NULL, 9, 3, 6, 6, 3, 4), +(166, 'Ledian', 'Female', false, 'Johto', ARRAY['Silver', 'Crystal', 'SS'], NULL, NULL, 9, 4, 1, null, null, null), +(167, 'Spinarak', NULL, false, 'Johto', ARRAY['Gold', 'Crystal', 'HG'], NULL, NULL, 9, 4, 2, 6, 3, 5), +(168, 'Ariados', NULL, false, 'Johto', ARRAY['Gold', 'Crystal', 'HG'], NULL, 'Route 37, 6pm-4am', 9, 4, 3, 6, 3, 6), +(169, 'Crobat', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], 'Johto', NULL, 9, 4, 4, 6, 4, 1), +(170, 'Chinchou', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 9, 4, 5, 6, 4, 2), +(171, 'Lanturn', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 9, 4, 6, 6, 4, 3), +(172, 'Pichu', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, 'Gift egg (two pikachu in daycare)', 9, 5, 1, 6, 4, 4), +(173, 'Cleffa', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, 'Gift egg', 9, 5, 2, 6, 4, 5), +(174, 'Igglybuff', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, 'Gift egg', 9, 5, 3, 6, 4, 6), +(175, 'Togepi', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 9, 5, 4, 6, 5, 1), +(176, 'Togetic', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 9, 5, 5, 6, 5, 2), +(177, 'Natu', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 9, 5, 6, 6, 5, 3), +(178, 'Xatu', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 10, 1, 1, 6, 5, 4), +(178, 'Xatu', 'Female', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 10, 1, 2, null, null, null), +(179, 'Mareep', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'HG', 'SS'], NULL, 'Route 32, Route 42, Route 43', 10, 1, 3, 6, 5, 5), +(180, 'Flaaffy', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'HG', 'SS'], NULL, 'Evolves from Mareep', 10, 1, 4, 6, 5, 6), +(181, 'Ampharos', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'HG', 'SS'], NULL, 'Evolves from Flaaffy', 10, 1, 5, 7, 1, 1), +(182, 'Bellossom', NULL, false, 'Kanto', ARRAY['Red', 'Yellow', 'LG: Pikachu'], 'Johto', NULL, 10, 1, 6, 7, 1, 2), +(183, 'Marill', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 10, 2, 1, 7, 1, 3), +(184, 'Azumarill', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 10, 2, 2, 7, 1, 4), +(185, 'Sudowoodo', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 10, 2, 3, 7, 1, 5), +(185, 'Sudowoodo', 'Female', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 10, 2, 4, null, null, null), +(186, 'Politoed', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], 'Johto', 'It evolves from Poliwhirl when traded while holding a King''s Rock', 10, 2, 5, 7, 1, 6), +(186, 'Politoed', 'Female', false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], 'Johto', 'It evolves from Poliwhirl when traded while holding a King''s Rock', 10, 2, 6, null, null, null), +(187, 'Hoppip', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, 'Route 29 4am-6pm', 10, 3, 1, 7, 2, 1), +(188, 'Skiploom', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 10, 3, 2, 7, 2, 2), +(189, 'Jumpluff', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 10, 3, 3, 7, 2, 3), +(190, 'Aipom', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 10, 3, 4, 7, 2, 4), +(190, 'Aipom', 'Female', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 10, 3, 5, null, null, null), +(191, 'Sunkern', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 10, 3, 6, 7, 2, 5), +(192, 'Sunflora', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 10, 4, 1, 7, 2, 6), +(193, 'Yanma', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, 'Route 35 (4am-10am?)', 10, 4, 2, 7, 3, 1), +(194, 'Wooper', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 10, 4, 3, 7, 3, 2), +(194, 'Wooper', 'Female', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 10, 4, 4, null, null, null), +(194, 'Wooper', 'Paldean', false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 10, 4, 5, null, null, null), +(195, 'Quagsire', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 10, 4, 6, 7, 3, 3), +(195, 'Quagsire', 'Female', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 10, 5, 1, null, null, null), +(196, 'Espeon', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], 'Johto', 'evolves from Eevee when leveled up with high friendship (220 before Generation VIII or 160 since) during the day, except in areas with a Moss Rock or Ice Rock, or if the evolutionary conditions for it to evolve into Sylveon have also been met.', 10, 5, 2, 7, 3, 4), +(197, 'Umbreon', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], 'Johto', 'evolves from Eevee when leveled up with high friendship (220 before Generation VIII or 160 since) during the night, except in areas with a Moss Rock or Ice Rock, or if the evolutionary conditions for it to evolve into Sylveon have also been met.', 10, 5, 3, 7, 3, 5), +(198, 'Murkrow', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, 'Route 7, 6pm-4am', 10, 5, 4, 7, 3, 6), +(198, 'Murkrow', 'Female', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, 'Route 7, 6pm-4am', 10, 5, 5, null, null, null), +(199, 'Slowking', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], 'Johto', 'It evolves from Slowpoke when traded while holding a King''s Rock', 10, 5, 6, 7, 4, 1), +(199, 'Slowking', 'Galarian', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 11, 1, 1, null, null, null), +(200, 'Misdreavus', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, 'Mt. Silver, 2f, 6pm-4am', 11, 1, 2, 7, 4, 2), +(201, 'Unown', 'A', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 11, 1, 3, 7, 4, 3), +(201, 'Unown', 'B', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 11, 1, 4, null, null, null), +(201, 'Unown', 'C', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 11, 1, 5, null, null, null), +(201, 'Unown', 'D', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 11, 1, 6, null, null, null), +(201, 'Unown', 'E', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 11, 2, 1, null, null, null), +(201, 'Unown', 'F', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 11, 2, 2, null, null, null), +(201, 'Unown', 'G', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 11, 2, 3, null, null, null), +(201, 'Unown', 'H', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 11, 2, 4, null, null, null), +(201, 'Unown', 'I', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 11, 2, 5, null, null, null), +(201, 'Unown', 'J', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 11, 2, 6, null, null, null), +(201, 'Unown', 'K', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 11, 3, 1, null, null, null), +(201, 'Unown', 'L', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 11, 3, 2, null, null, null), +(201, 'Unown', 'M', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 11, 3, 3, null, null, null), +(201, 'Unown', 'N', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 11, 3, 4, null, null, null), +(201, 'Unown', 'O', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 11, 3, 5, null, null, null), +(201, 'Unown', 'P', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 11, 3, 6, null, null, null), +(201, 'Unown', 'Q', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 11, 4, 1, null, null, null), +(201, 'Unown', 'R', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 11, 4, 2, null, null, null), +(201, 'Unown', 'S', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 11, 4, 3, null, null, null), +(201, 'Unown', 'T', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 11, 4, 4, null, null, null), +(201, 'Unown', 'U', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 11, 4, 5, null, null, null), +(201, 'Unown', 'V', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 11, 4, 6, null, null, null), +(201, 'Unown', 'W', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 11, 5, 1, null, null, null), +(201, 'Unown', 'X', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 11, 5, 2, null, null, null), +(201, 'Unown', 'Y', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 11, 5, 3, null, null, null), +(201, 'Unown', 'Z', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 11, 5, 4, null, null, null), +(201, 'Unown', '!', false, 'Johto', ARRAY['HG', 'SS'], NULL, NULL, 11, 5, 5, null, null, null), +(201, 'Unown', '?', false, 'Johto', ARRAY['HG', 'SS'], NULL, NULL, 11, 5, 6, null, null, null), +(202, 'Wobbuffet', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, 'Dark Cave, Blackthorn City Entrance, 6pm-4am', 12, 1, 1, 7, 4, 4), +(202, 'Wobbuffet', 'Female', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, 'Dark Cave, Blackthorn City Entrance, 6pm-4am', 12, 1, 2, null, null, null), +(203, 'Girafarig', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'HG', 'SS'], NULL, 'Route 43', 12, 1, 3, 7, 4, 5), +(203, 'Girafarig', 'Female', false, 'Johto', ARRAY['Gold', 'Silver', 'HG', 'SS'], NULL, 'Route 43', 12, 1, 4, null, null, null), +(204, 'Pineco', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 12, 1, 5, 7, 4, 6), +(205, 'Forretress', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 12, 1, 6, 7, 5, 1), +(206, 'Dunsparce', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, 'Dark Cave, Violet City Entrance - catch as many as you can for Dudunsparce 2 and 3 segment', 12, 2, 1, 7, 5, 2), +(207, 'Gligar', NULL, false, 'Johto', ARRAY['Gold', 'Crystal', 'HG'], NULL, 'Route 45', 12, 2, 2, 7, 5, 3), +(207, 'Gligar', 'Female', false, 'Johto', ARRAY['Gold', 'Crystal', 'HG'], NULL, 'Route 45', 12, 2, 3, null, null, null), +(208, 'Steelix', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], 'Johto', 'It evolves from Onix when traded while holding a Metal Coat.', 12, 2, 4, 7, 5, 4), +(208, 'Steelix', 'Female', false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], 'Johto', 'It evolves from Onix when traded while holding a Metal Coat.', 12, 2, 5, null, null, null), +(209, 'Snubbull', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 12, 2, 6, 7, 5, 5), +(210, 'Granbull', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 12, 3, 1, 7, 5, 6), +(211, 'Qwilfish', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, 'Route 32, Super Rod', 12, 3, 2, 8, 1, 1), +(211, 'Qwilfish', 'Hisuian', false, 'Hisui', ARRAY['PLA'], NULL, 'Obsidian Fieldlands: near Ramanas Island (Hisuian Form) Cobalt Coastlands: near Bathers'' Lagoon, near Hideaway Bay, near Tombolo Walk, near Sand''s Reach, Tranquility Cove, Islespy Shore and nearby (additional Alpha icon.png), Lunker''s Lair, near Seagrass Haven, near Firespit Island, massive mass outbreaks (Hisuian Form)', 12, 3, 3, null, null, null), +(212, 'Scizor', NULL, false, 'Kanto', ARRAY['Red', 'Yellow', 'LG: Pikachu'], 'Johto', 'It evolves from Scyther when traded while holding a Metal Coat.', 12, 3, 4, 8, 1, 2), +(212, 'Scizor', 'Female', false, 'Kanto', ARRAY['Red', 'Yellow', 'LG: Pikachu'], 'Johto', 'It evolves from Scyther when traded while holding a Metal Coat.', 12, 3, 5, null, null, null), +(213, 'Shuckle', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 12, 3, 6, 8, 1, 3), +(214, 'Heracross', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 12, 4, 1, 8, 1, 4), +(214, 'Heracross', 'Female', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 12, 4, 2, null, null, null), +(215, 'Sneasel', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, 'Ice Path, b3f, 6pm-4am', 12, 4, 3, 8, 1, 5), +(215, 'Sneasel', 'Female', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, 'Ice Path, b3f, 6pm-4am', 12, 4, 4, null, null, null), +(215, 'Sneasel', 'Hisuian', false, 'Hisui', ARRAY['PLA'], NULL, 'Coronet Highlands: near Celestica Trail, near Primeval Grotto, massive mass outbreaks (Hisuian Form) Alabaster Icelands: near Avalugg''s Legacy (additional Alpha icon.png), Glacier Terrace, near Pearl Settlement (Hisuian Form)', 12, 4, 5, null, null, null), +(215, 'Sneasel', 'Female-Hisuian', false, 'Hisui', ARRAY['PLA'], NULL, 'Coronet Highlands: near Celestica Trail, near Primeval Grotto, massive mass outbreaks (Hisuian Form) Alabaster Icelands: near Avalugg''s Legacy (additional Alpha icon.png), Glacier Terrace, near Pearl Settlement (Hisuian Form)', 12, 4, 6, null, null, null), +(216, 'Teddiursa', NULL, false, 'Johto', ARRAY['Gold', 'Crystal', 'SS'], NULL, 'Dark Cave, Blackthorn City Entrance, 4am-10am', 12, 5, 1, 8, 1, 6), +(217, 'Ursaring', NULL, false, 'Johto', ARRAY['Gold', 'Crystal', 'SS'], NULL, NULL, 12, 5, 2, 8, 2, 1), +(217, 'Ursaring', 'Female', false, 'Johto', ARRAY['Gold', 'Crystal', 'SS'], NULL, NULL, 12, 5, 3, null, null, null), +(218, 'Slugma', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, 'Route 17, 10am-6pm', 12, 5, 4, 8, 2, 2), +(219, 'Magcargo', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 12, 5, 5, 8, 2, 3), +(220, 'Swinub', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 12, 5, 6, 8, 2, 4), +(221, 'Piloswine', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 13, 1, 1, 8, 2, 5), +(221, 'Piloswine', 'Female', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 13, 1, 2, null, null, null), +(222, 'Corsola', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, 'Route 34, Super Rod, 4am-6pm', 13, 1, 3, 8, 2, 6), +(222, 'Corsola', 'Galarian', false, 'Galar', ARRAY['Shield'], NULL, NULL, 13, 1, 4, null, null, null), +(223, 'Remoraid', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'HG', 'SS'], NULL, 'Route 44', 13, 1, 5, 8, 3, 1), +(224, 'Octillery', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'HG', 'SS'], NULL, 'Evolves from remoraid', 13, 1, 6, 8, 3, 2), +(224, 'Octillery', 'Female', false, 'Johto', ARRAY['Gold', 'Silver', 'HG', 'SS'], NULL, 'Evolves from remoraid', 13, 2, 1, null, null, null), +(225, 'Delibird', NULL, false, 'Johto', ARRAY['Silver', 'Crystal', 'SS'], NULL, 'Ice Path, 6pm-4am', 13, 2, 2, 8, 3, 3), +(226, 'Mantine', NULL, false, 'Johto', ARRAY['Gold', 'Crystal', 'HG'], NULL, NULL, 13, 2, 3, 8, 3, 4), +(227, 'Skarmory', NULL, false, 'Johto', ARRAY['Silver', 'Crystal', 'SS'], NULL, 'Route 45, 4am-6pm', 13, 2, 4, 8, 3, 5), +(228, 'Houndour', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, 'Route 7, 6pm-4am', 13, 2, 5, 8, 3, 6), +(229, 'Houndoom', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 13, 2, 6, 8, 4, 1), +(229, 'Houndoom', 'Female', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 13, 3, 1, null, null, null), +(230, 'Kingdra', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], 'Johto', 'It evolves from Seadra when traded while holding a Dragon Scale. ', 13, 3, 2, 8, 4, 2), +(231, 'Phanpy', NULL, false, 'Johto', ARRAY['Silver', 'Crystal', 'HG'], NULL, 'Route 45, 4am-10am', 13, 3, 3, 8, 4, 3), +(232, 'Donphan', NULL, false, 'Johto', ARRAY['Silver', 'Crystal', 'HG'], NULL, NULL, 13, 3, 4, 8, 4, 4), +(232, 'Donphan', 'Female', false, 'Johto', ARRAY['Silver', 'Crystal', 'HG'], NULL, NULL, 13, 3, 5, null, null, null), +(233, 'Porygon2', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 13, 3, 6, 8, 4, 5), +(234, 'Stantler', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, 'Route 37, 6pm-4am', 13, 4, 1, 8, 4, 6), +(235, 'Smeargle', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, 'Ruins Of Alph, Outside, 10am-6pm', 13, 4, 2, 8, 5, 1), +(236, 'Tyrogue', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, 'Breed with Ditto', 13, 4, 3, 8, 5, 2), +(237, 'Hitmontop', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, 'Evolve tyrogue at level 20 with equal attack and defence (box 2)', 13, 4, 4, 8, 5, 3), +(238, 'Smoochum', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, 'Have to remove ''dizzy punch'' move as transfer wrongly thinks it''s an illegal move', 13, 4, 5, 8, 5, 4), +(239, 'Elekid', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, 'Gift egg', 13, 4, 6, 8, 5, 5), +(240, 'Magby', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, 'Gift egg', 13, 5, 1, 8, 5, 6), +(241, 'Miltank', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, 'Route 38, 4am-6pm', 13, 5, 2, 9, 1, 1), +(242, 'Blissey', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], 'Johto', 'It evolves from Chansey when leveled up with high friendship.', 13, 5, 3, 9, 1, 2), +(243, 'Raikou', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 13, 5, 4, 9, 1, 3), +(244, 'Entei', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 13, 5, 5, 9, 1, 4), +(245, 'Suicune', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, NULL, 13, 5, 6, 9, 1, 5), +(246, 'Larvitar', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, 'Mt Silver, Top, 4am-6pm', 14, 1, 1, 9, 1, 6), +(247, 'Pupitar', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, 'Evolves from larvitar', 14, 1, 2, 9, 2, 1), +(248, 'Tyranitar', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, 'Evolves from pupitar', 14, 1, 3, 9, 2, 2), +(249, 'Lugia', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, 'https://strategywiki.org/wiki/Pok%C3%A9mon_Gold_and_Silver/Whirl_Islands', 14, 1, 4, 9, 2, 3), +(250, 'Ho-Oh', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], NULL, 'https://strategywiki.org/wiki/Pok%C3%A9mon_Gold_and_Silver/Tin_Tower', 14, 1, 5, 9, 2, 4), +(251, 'Celebi', NULL, false, 'Johto', ARRAY['Crystal'], NULL, NULL, 14, 1, 6, 9, 2, 5), +(252, 'Treecko', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 15, 1, 1, 9, 2, 6), +(253, 'Grovyle', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 15, 1, 2, 9, 3, 1), +(254, 'Sceptile', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 15, 1, 3, 9, 3, 2), +(255, 'Torchic', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 15, 1, 4, 9, 3, 3), +(255, 'Torchic', 'Female', false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 15, 1, 5, null, null, null), +(256, 'Combusken', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 15, 1, 6, 9, 3, 4), +(256, 'Combusken', 'Female', false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 15, 2, 1, null, null, null), +(257, 'Blaziken', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 15, 2, 2, 9, 3, 5), +(257, 'Blaziken', 'Female', false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 15, 2, 3, null, null, null), +(258, 'Mudkip', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 15, 2, 4, 9, 3, 6), +(259, 'Marshtomp', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 15, 2, 5, 9, 4, 1), +(260, 'Swampert', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 15, 2, 6, 9, 4, 2), +(261, 'Poochyena', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 15, 3, 1, 9, 4, 3), +(262, 'Mightyena', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 15, 3, 2, 9, 4, 4), +(263, 'Zigzagoon', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, 'X/ R2', 15, 3, 3, 9, 4, 5), +(263, 'Zigzagoon', 'Galarian', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 15, 3, 4, null, null, null), +(264, 'Linoone', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 15, 3, 5, 9, 4, 6), +(264, 'Linoone', 'Galarian', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, 'Evolves at level 20', 15, 3, 6, null, null, null), +(265, 'Wurmple', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 15, 4, 1, 9, 5, 1), +(266, 'Silcoon', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 15, 4, 2, 9, 5, 2), +(267, 'Beautifly', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 15, 4, 3, 9, 5, 3), +(267, 'Beautifly', 'Female', false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 15, 4, 4, null, null, null), +(268, 'Cascoon', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 15, 4, 5, 9, 5, 4), +(269, 'Dustox', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 15, 4, 6, 9, 5, 5), +(269, 'Dustox', 'Female', false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 15, 5, 1, null, null, null), +(270, 'Lotad', NULL, false, 'Hoenn', ARRAY['Sapphire', 'Emerald', 'AS'], NULL, NULL, 15, 5, 2, 9, 5, 6), +(271, 'Lombre', NULL, false, 'Hoenn', ARRAY['Sapphire', 'Emerald', 'AS'], NULL, NULL, 15, 5, 3, 10, 1, 1), +(272, 'Ludicolo', NULL, false, 'Hoenn', ARRAY['Sapphire', 'Emerald', 'AS'], NULL, NULL, 15, 5, 4, 10, 1, 2), +(272, 'Ludicolo', 'Female', false, 'Hoenn', ARRAY['Sapphire', 'Emerald', 'AS'], NULL, NULL, 15, 5, 5, null, null, null), +(273, 'Seedot', NULL, false, 'Hoenn', ARRAY['Ruby', 'Emerald', 'OR'], NULL, NULL, 15, 5, 6, 10, 1, 3), +(274, 'Nuzleaf', NULL, false, 'Hoenn', ARRAY['Ruby', 'Emerald', 'OR'], NULL, NULL, 16, 1, 1, 10, 1, 4), +(274, 'Nuzleaf', 'Female', false, 'Hoenn', ARRAY['Ruby', 'Emerald', 'OR'], NULL, NULL, 16, 1, 2, null, null, null), +(275, 'Shiftry', NULL, false, 'Hoenn', ARRAY['Ruby', 'Emerald', 'OR'], NULL, NULL, 16, 1, 3, 10, 1, 5), +(275, 'Shiftry', 'Female', false, 'Hoenn', ARRAY['Ruby', 'Emerald', 'OR'], NULL, NULL, 16, 1, 4, null, null, null), +(276, 'Taillow', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 16, 1, 5, 10, 1, 6), +(277, 'Swellow', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 16, 1, 6, 10, 2, 1), +(278, 'Wingull', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 16, 2, 1, 10, 2, 2), +(279, 'Pelipper', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 16, 2, 2, 10, 2, 3), +(280, 'Ralts', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 16, 2, 3, 10, 2, 4), +(281, 'Kirlia', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 16, 2, 4, 10, 2, 5), +(282, 'Gardevoir', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 16, 2, 5, 10, 2, 6), +(283, 'Surskit', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'OR', 'AS'], NULL, NULL, 16, 2, 6, 10, 3, 1), +(284, 'Masquerain', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'OR', 'AS'], NULL, NULL, 16, 3, 1, 10, 3, 2), +(285, 'Shroomish', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 16, 3, 2, 10, 3, 3), +(286, 'Breloom', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 16, 3, 3, 10, 3, 4), +(287, 'Slakoth', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 16, 3, 4, 10, 3, 5), +(288, 'Vigoroth', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 16, 3, 5, 10, 3, 6), +(289, 'Slaking', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 16, 3, 6, 10, 4, 1), +(290, 'Nincada', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 16, 4, 1, 10, 4, 2), +(291, 'Ninjask', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 16, 4, 2, 10, 4, 3), +(292, 'Shedinja', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 16, 4, 3, 10, 4, 4), +(293, 'Whismur', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 16, 4, 4, 10, 4, 5), +(294, 'Loudred', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 16, 4, 5, 10, 4, 6), +(295, 'Exploud', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 16, 4, 6, 10, 5, 1), +(296, 'Makuhita', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 16, 5, 1, 10, 5, 2), +(297, 'Hariyama', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 16, 5, 2, 10, 5, 3), +(298, 'Azurill', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 16, 5, 3, 10, 5, 4), +(299, 'Nosepass', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, 'Granite cave, rocks, rock smash (mach bike)', 16, 5, 4, 10, 5, 5), +(300, 'Skitty', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 16, 5, 5, 10, 5, 6), +(301, 'Delcatty', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 16, 5, 6, 11, 1, 1), +(302, 'Sableye', NULL, false, 'Hoenn', ARRAY['Sapphire', 'Emerald', 'AS'], NULL, NULL, 17, 1, 1, 11, 1, 2), +(303, 'Mawile', NULL, false, 'Hoenn', ARRAY['Ruby', 'Emerald', 'OR'], NULL, NULL, 17, 1, 2, 11, 1, 3), +(304, 'Aron', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, 'Granite cave or victory road', 17, 1, 3, 11, 1, 4), +(305, 'Lairon', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 17, 1, 4, 11, 1, 5), +(306, 'Aggron', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 17, 1, 5, 11, 1, 6), +(307, 'Meditite', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'OR', 'AS'], NULL, NULL, 17, 1, 6, 11, 2, 1), +(307, 'Meditite', 'Female', false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'OR', 'AS'], NULL, NULL, 17, 2, 1, null, null, null), +(308, 'Medicham', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'OR', 'AS'], NULL, NULL, 17, 2, 2, 11, 2, 2), +(308, 'Medicham', 'Female', false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'OR', 'AS'], NULL, NULL, 17, 2, 3, null, null, null), +(309, 'Electrike', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 17, 2, 4, 11, 2, 3), +(310, 'Manectric', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 17, 2, 5, 11, 2, 4), +(311, 'Plusle', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 17, 2, 6, 11, 2, 5), +(312, 'Minun', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 17, 3, 1, 11, 2, 6), +(313, 'Volbeat', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 17, 3, 2, 11, 3, 1), +(314, 'Illumise', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 17, 3, 3, 11, 3, 2), +(315, 'Roselia', ' ', false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'OR', 'AS'], NULL, NULL, 17, 3, 4, 11, 3, 3), +(315, 'Roselia', 'Female', false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'OR', 'AS'], NULL, NULL, 17, 3, 5, null, null, null), +(316, 'Gulpin', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 17, 3, 6, 11, 3, 4), +(316, 'Gulpin', 'Female', false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 17, 4, 1, null, null, null), +(317, 'Swalot', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 17, 4, 2, 11, 3, 5), +(317, 'Swalot', 'Female', false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 17, 4, 3, null, null, null), +(318, 'Carvanha', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 17, 4, 4, 11, 3, 6), +(319, 'Sharpedo', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 17, 4, 5, 11, 4, 1), +(320, 'Wailmer', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, 'Good rod or super rod in most water', 17, 4, 6, 11, 4, 2), +(321, 'Wailord', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, 'level 40', 17, 5, 1, 11, 4, 3), +(322, 'Numel', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 17, 5, 2, 11, 4, 4), +(322, 'Numel', 'Female', false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 17, 5, 3, null, null, null), +(323, 'Camerupt', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 17, 5, 4, 11, 4, 5), +(323, 'Camerupt', 'Female', false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 17, 5, 5, null, null, null), +(324, 'Torkoal', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 17, 5, 6, 11, 4, 6), +(325, 'Spoink', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 18, 1, 1, 11, 5, 1), +(326, 'Grumpig', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 18, 1, 2, 11, 5, 2), +(327, 'Spinda', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 18, 1, 3, 11, 5, 3), +(328, 'Trapinch', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 18, 1, 4, 11, 5, 4), +(329, 'Vibrava', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, 'evolves from trapinch', 18, 1, 5, 11, 5, 5), +(330, 'Flygon', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, 'evolves from vibrava', 18, 1, 6, 11, 5, 6), +(331, 'Cacnea', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 18, 2, 1, 12, 1, 1), +(332, 'Cacturne', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 18, 2, 2, 12, 1, 2), +(332, 'Cacturne', 'Female', false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 18, 2, 3, null, null, null), +(333, 'Swablu', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 18, 2, 4, 12, 1, 3), +(334, 'Altaria', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 18, 2, 5, 12, 1, 4), +(335, 'Zangoose', NULL, false, 'Hoenn', ARRAY['Ruby', 'OR'], NULL, NULL, 18, 2, 6, 12, 1, 5), +(336, 'Seviper', NULL, false, 'Hoenn', ARRAY['Sapphire', 'Emerald', 'AS'], NULL, NULL, 18, 3, 1, 12, 1, 6), +(337, 'Lunatone', NULL, false, 'Hoenn', ARRAY['Sapphire', 'AS'], NULL, NULL, 18, 3, 2, 12, 2, 1), +(338, 'Solrock', NULL, false, 'Hoenn', ARRAY['Ruby', 'Emerald', 'OR'], NULL, NULL, 18, 3, 3, 12, 2, 2), +(339, 'Barboach', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, 'Route 111, Route 114, Route 120, Meteor Falls, Scorched Slab and Victory Road by either fishing with the Good Rod or Super Rod.', 18, 3, 4, 12, 2, 3), +(340, 'Whiscash', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 18, 3, 5, 12, 2, 4), +(341, 'Corphish', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, 'Route 102, Route 117, Route 123, and Petalburg City with good rod', 18, 3, 6, 12, 2, 5), +(342, 'Crawdaunt', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 18, 4, 1, 12, 2, 6), +(343, 'Baltoy', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 18, 4, 2, 12, 3, 1), +(344, 'Claydol', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 18, 4, 3, 12, 3, 2), +(345, 'Lileep', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 18, 4, 4, 12, 3, 3), +(346, 'Cradily', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 18, 4, 5, 12, 3, 4), +(347, 'Anorith', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 18, 4, 6, 12, 3, 5), +(348, 'Armaldo', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 18, 5, 1, 12, 3, 6), +(349, 'Feebas', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 18, 5, 2, 12, 4, 1), +(350, 'Milotic', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 18, 5, 3, 12, 4, 2), +(350, 'Milotic', 'Female', false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, 'Need to catch a female Feebas for this one attach a Prism Scale, which in Generation VI is only available in X & Y, to Feebas and trade it, it will evolve into Milotic.', 18, 5, 4, null, null, null), +(351, 'Castform', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 18, 5, 5, 12, 4, 3), +(352, 'Kecleon', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 18, 5, 6, 12, 4, 4), +(353, 'Shuppet', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 19, 1, 1, 12, 4, 5), +(354, 'Banette', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 19, 1, 2, 12, 4, 6), +(355, 'Duskull', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 19, 1, 3, 12, 5, 1), +(356, 'Dusclops', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, 'Evolves from duskull', 19, 1, 4, 12, 5, 2), +(357, 'Tropius', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 19, 1, 5, 12, 5, 3), +(358, 'Chimecho', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 19, 1, 6, 12, 5, 4), +(359, 'Absol', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, 'Route 120, Tall Grass', 19, 2, 1, 12, 5, 5), +(360, 'Wynaut', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 19, 2, 2, 12, 5, 6), +(361, 'Snorunt', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, 'Shoal Cave, Cave - Low Tide (3am-9am, 3pm-9pm)', 19, 2, 3, 13, 1, 1), +(362, 'Glalie', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, 'evolves from snorunt', 19, 2, 4, 13, 1, 2), +(363, 'Spheal', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, 'Shoal Cave Cave', 19, 2, 5, 13, 1, 3), +(364, 'Sealeo', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, 'evolves from spheal', 19, 2, 6, 13, 1, 4), +(365, 'Walrein', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, 'evolves from sealeo', 19, 3, 1, 13, 1, 5), +(366, 'Clamperl', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, 'Route 107 Seaweed Diving Route 124 Seaweed Diving Route 126 Seaweed Diving Route 128 Seaweed Diving Route 129 Seaweed Diving Route 130 Seaweed Diving ', 19, 3, 2, 13, 1, 6), +(367, 'Huntail', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, 'Trade clamperl w/ Deep Sea Tooth', 19, 3, 3, 13, 2, 1), +(368, 'Gorebyss', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, 'Trade clamperl w/ Deep Sea Scale', 19, 3, 4, 13, 2, 2), +(369, 'Relicanth', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, 'Route 107 Seaweed Diving Route 124 Seaweed Diving Route 126 Seaweed Diving Route 128 Seaweed Diving Route 129 Seaweed Diving Route 130 Seaweed Diving', 19, 3, 5, 13, 2, 3), +(369, 'Relicanth', 'Female', false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, 'Route 107 Seaweed Diving Route 124 Seaweed Diving Route 126 Seaweed Diving Route 128 Seaweed Diving Route 129 Seaweed Diving Route 130 Seaweed Diving', 19, 3, 6, null, null, null), +(370, 'Luvdisc', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, 'Route 128, Ever Grande City, Victory Road (Good Rod or Super Rod)', 19, 4, 1, 13, 2, 4), +(371, 'Bagon', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, 'Meteor Falls, Basement - Small Room', 19, 4, 2, 13, 2, 5), +(372, 'Shelgon', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, 'evolves from bagon', 19, 4, 3, 13, 2, 6), +(373, 'Salamence', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, 'evolves from shelgon', 19, 4, 4, 13, 3, 1), +(374, 'Beldum', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, 'Receive as a gift from Steven''s house in Mossdeep City after becoming the Pokemon League Champion.', 19, 4, 5, 13, 3, 2), +(375, 'Metang', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, 'evolves from beldum', 19, 4, 6, 13, 3, 3), +(376, 'Metagross', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, 'evolves from metang', 19, 5, 1, 13, 3, 4), +(377, 'Regirock', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 19, 5, 2, 13, 3, 5), +(378, 'Regice', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 19, 5, 3, 13, 3, 6), +(379, 'Registeel', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 19, 5, 4, 13, 4, 1), +(380, 'Latias', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 19, 5, 5, 13, 4, 2), +(381, 'Latios', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 19, 5, 6, 13, 4, 3), +(382, 'Kyogre', NULL, false, 'Hoenn', ARRAY['Sapphire', 'Emerald', 'AS'], NULL, NULL, 20, 1, 1, 13, 4, 4), +(383, 'Groudon', NULL, false, 'Hoenn', ARRAY['Ruby', 'Emerald', 'OR'], NULL, NULL, 20, 1, 2, 13, 4, 5), +(384, 'Rayquaza', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 20, 1, 3, 13, 4, 6), +(385, 'Jirachi', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, 'Gen the event via Powersaves, alt BDSP w/ SwSh Save Data', 20, 1, 4, 13, 5, 1), +(386, 'Deoxys', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 20, 1, 5, 13, 5, 2), +(386, 'Deoxys', 'Attack Form', false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 20, 1, 6, null, null, null), +(386, 'Deoxys', 'Defense Form', false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 20, 2, 1, null, null, null), +(386, 'Deoxys', 'Speed Form', false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], NULL, NULL, 20, 2, 2, null, null, null), +(387, 'Turtwig', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 21, 1, 1, 13, 5, 3), +(388, 'Grotle', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 21, 1, 2, 13, 5, 4), +(389, 'Torterra', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 21, 1, 3, 13, 5, 5), +(390, 'Chimchar', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 21, 1, 4, 13, 5, 6), +(391, 'Monferno', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 21, 1, 5, 14, 1, 1), +(392, 'Infernape', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 21, 1, 6, 14, 1, 2), +(393, 'Piplup', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 21, 2, 1, 14, 1, 3), +(394, 'Prinplup', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 21, 2, 2, 14, 1, 4), +(395, 'Empoleon', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 21, 2, 3, 14, 1, 5), +(396, 'Starly', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 21, 2, 4, 14, 1, 6), +(396, 'Starly', 'Female', false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 21, 2, 5, null, null, null), +(397, 'Staravia', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 21, 2, 6, 14, 2, 1), +(397, 'Staravia', 'Female', false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 21, 3, 1, null, null, null), +(398, 'Staraptor', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 21, 3, 2, 14, 2, 2), +(398, 'Staraptor', 'Female', false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 21, 3, 3, null, null, null), +(399, 'Bidoof', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 21, 3, 4, 14, 2, 3), +(399, 'Bidoof', 'Female', false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 21, 3, 5, null, null, null), +(400, 'Bibarel', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 21, 3, 6, 14, 2, 4), +(400, 'Bibarel', 'Female', false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 21, 4, 1, null, null, null), +(401, 'Kricketot', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 21, 4, 2, 14, 2, 5), +(401, 'Kricketot', 'Female', false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 21, 4, 3, null, null, null), +(402, 'Kricketune', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 21, 4, 4, 14, 2, 6), +(402, 'Kricketune', 'Female', false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 21, 4, 5, null, null, null), +(403, 'Shinx', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 21, 4, 6, 14, 3, 1), +(403, 'Shinx', 'Female', false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 21, 5, 1, null, null, null), +(404, 'Luxio', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 21, 5, 2, 14, 3, 2), +(404, 'Luxio', 'Female', false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 21, 5, 3, null, null, null), +(405, 'Luxray', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 21, 5, 4, 14, 3, 3), +(405, 'Luxray', 'Female', false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 21, 5, 5, null, null, null), +(406, 'Budew', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 21, 5, 6, 14, 3, 4), +(407, 'Roserade', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'OR', 'AS'], 'Sinnoh', 'It evolves from Roselia when exposed to a Shiny Stone.', 22, 1, 1, 14, 3, 5), +(407, 'Roserade', 'Female', false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'OR', 'AS'], 'Sinnoh', 'It evolves from Roselia when exposed to a Shiny Stone.', 22, 1, 2, null, null, null), +(408, 'Cranidos', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Platinum', 'BD'], NULL, 'It is resurrected from a Skull Fossil ', 22, 1, 3, 14, 3, 6), +(409, 'Rampardos', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Platinum', 'BD'], NULL, 'Evolves from Cranidos starting at level 30.', 22, 1, 4, 14, 4, 1), +(410, 'Shieldon', NULL, false, 'Sinnoh', ARRAY['Pearl', 'Platinum', 'SP'], NULL, NULL, 22, 1, 5, 14, 4, 2), +(411, 'Bastiodon', NULL, false, 'Sinnoh', ARRAY['Pearl', 'Platinum', 'SP'], NULL, NULL, 22, 1, 6, 14, 4, 3), +(412, 'Burmy', 'Leaf Cloak', false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 22, 2, 1, 14, 4, 4), +(412, 'Burmy', 'Sand Cloak', false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 22, 2, 2, null, null, null), +(412, 'Burmy', 'Trash Cloak', false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 22, 2, 3, null, null, null), +(413, 'Wormadam', 'Leaf Cloak', false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 22, 2, 4, 14, 4, 5), +(413, 'Wormadam', 'Sand Cloak', false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 22, 2, 5, null, null, null), +(413, 'Wormadam', 'Trash Cloak', false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 22, 2, 6, null, null, null), +(414, 'Mothim', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 22, 3, 1, 14, 4, 6), +(415, 'Combee', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 22, 3, 2, 14, 5, 1), +(415, 'Combee', 'Female', false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 22, 3, 3, null, null, null), +(416, 'Vespiquen', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 22, 3, 4, 14, 5, 2), +(417, 'Pachirisu', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 22, 3, 5, 14, 5, 3), +(417, 'Pachirisu', 'Female', false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 22, 3, 6, null, null, null), +(418, 'Buizel', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 22, 4, 1, 14, 5, 4), +(418, 'Buizel', 'Female', false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 22, 4, 2, null, null, null), +(419, 'Floatzel', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 22, 4, 3, 14, 5, 5), +(419, 'Floatzel', 'Female', false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 22, 4, 4, null, null, null), +(420, 'Cherubi', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 22, 4, 5, 14, 5, 6), +(421, 'Cherrim', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 22, 4, 6, 15, 1, 1), +(422, 'Shellos', 'East Sea', false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 22, 5, 1, 15, 1, 2), +(422, 'Shellos', 'West Sea', false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 22, 5, 2, null, null, null), +(423, 'Gastrodon', 'East Sea', false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 22, 5, 3, 15, 1, 3), +(423, 'Gastrodon', 'West Sea', false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 22, 5, 4, null, null, null), +(424, 'Ambipom', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], 'Sinnoh', 'It evolves from Aipom when leveled up while knowing Double Hit.', 22, 5, 5, 15, 1, 4), +(424, 'Ambipom', 'Female', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], 'Sinnoh', 'It evolves from Aipom when leveled up while knowing Double Hit.', 22, 5, 6, null, null, null), +(425, 'Drifloon', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 23, 1, 1, 15, 1, 5), +(426, 'Drifblim', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 23, 1, 2, 15, 1, 6), +(427, 'Buneary', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 23, 1, 3, 15, 2, 1), +(428, 'Lopunny', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 23, 1, 4, 15, 2, 2), +(429, 'Mismagius', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], 'Sinnoh', 'It evolves from Misdreavus when exposed to a Dusk Stone.', 23, 1, 5, 15, 2, 3), +(430, 'Honchkrow', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], 'Sinnoh', 'It evolves from Murkrow when exposed to a Dusk Stone.', 23, 1, 6, 15, 2, 4), +(431, 'Glameow', NULL, false, 'Sinnoh', ARRAY['Pearl', 'SP'], NULL, NULL, 23, 2, 1, 15, 2, 5), +(432, 'Purugly', NULL, false, 'Sinnoh', ARRAY['Pearl', 'SP'], NULL, NULL, 23, 2, 2, 15, 2, 6), +(433, 'Chingling', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 23, 2, 3, 15, 3, 1), +(434, 'Stunky', NULL, false, 'Sinnoh', ARRAY['Diamond', 'BD'], NULL, 'Routes 206, 214, and 221 Grand Underground - Grassland Cave, Spacious Cave, Riverbank Cave, Sunlit Cavern, Still-Water Cavern (After obtaining TM96 (Strength))', 23, 2, 4, 15, 3, 2), +(435, 'Skuntank', NULL, false, 'Sinnoh', ARRAY['Diamond', 'BD'], NULL, 'Evolves from Stunky starting at level 34.', 23, 2, 5, 15, 3, 3), +(436, 'Bronzor', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 23, 2, 6, 15, 3, 4), +(437, 'Bronzong', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 23, 3, 1, 15, 3, 5), +(438, 'Bonsly', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 23, 3, 2, 15, 3, 6), +(439, 'Mime Jr.', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 23, 3, 3, 15, 4, 1), +(440, 'Happiny', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 23, 3, 4, 15, 4, 2), +(441, 'Chatot', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 23, 3, 5, 15, 4, 3), +(442, 'Spiritomb', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 23, 3, 6, 15, 4, 4), +(443, 'Gible', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 23, 4, 1, 15, 4, 5), +(443, 'Gible', 'Female', false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 23, 4, 2, null, null, null), +(444, 'Gabite', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 23, 4, 3, 15, 4, 6), +(444, 'Gabite', 'Female', false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 23, 4, 4, null, null, null), +(445, 'Garchomp', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 23, 4, 5, 15, 5, 1), +(445, 'Garchomp', 'Female', false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 23, 4, 6, null, null, null), +(446, 'Munchlax', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 23, 5, 1, 15, 5, 2), +(447, 'Riolu', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 23, 5, 2, 15, 5, 3), +(448, 'Lucario', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 23, 5, 3, 15, 5, 4), +(449, 'Hippopotas', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 23, 5, 4, 15, 5, 5), +(449, 'Hippopotas', 'Female', false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 23, 5, 5, null, null, null), +(450, 'Hippowdon', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 23, 5, 6, 15, 5, 6), +(450, 'Hippowdon', 'Female', false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 24, 1, 1, null, null, null), +(451, 'Skorupi', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 24, 1, 2, 16, 1, 1), +(452, 'Drapion', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 24, 1, 3, 16, 1, 2), +(453, 'Croagunk', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 24, 1, 4, 16, 1, 3), +(453, 'Croagunk', 'Female', false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 24, 1, 5, null, null, null), +(454, 'Toxicroak', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 24, 1, 6, 16, 1, 4), +(454, 'Toxicroak', 'Female', false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 24, 2, 1, null, null, null), +(455, 'Carnivine', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 24, 2, 2, 16, 1, 5), +(456, 'Finneon', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 24, 2, 3, 16, 1, 6), +(456, 'Finneon', 'Female', false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 24, 2, 4, null, null, null), +(457, 'Lumineon', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 24, 2, 5, 16, 2, 1), +(457, 'Lumineon', 'Female', false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 24, 2, 6, null, null, null), +(458, 'Mantyke', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 24, 3, 1, 16, 2, 2), +(459, 'Snover', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 24, 3, 2, 16, 2, 3), +(459, 'Snover', 'Female', false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 24, 3, 3, null, null, null), +(460, 'Abomasnow', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 24, 3, 4, 16, 2, 4), +(460, 'Abomasnow', 'Female', false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 24, 3, 5, null, null, null), +(461, 'Weavile', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], 'Sinnoh', 'It evolves from Sneasel when leveled up while holding a Razor Claw during the night.', 24, 3, 6, 16, 2, 5), +(461, 'Weavile', 'Female', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], 'Sinnoh', 'It evolves from Sneasel when leveled up while holding a Razor Claw during the night.', 24, 4, 1, null, null, null), +(462, 'Magnezone', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], 'Sinnoh', 'It evolves from Magneton when leveled up in a special magnetic field or when exposed to a Thunder Stone.', 24, 4, 2, 16, 2, 6), +(463, 'Lickilicky', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], 'Sinnoh', 'It evolves from Lickitung when leveled up while knowing Rollout.', 24, 4, 3, 16, 3, 1), +(464, 'Rhyperior', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], 'Sinnoh', 'It evolves from Rhydon when traded while holding a Protector.', 24, 4, 4, 16, 3, 2), +(464, 'Rhyperior', 'Female', false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], 'Sinnoh', 'It evolves from Rhydon when traded while holding a Protector.', 24, 4, 5, null, null, null), +(465, 'Tangrowth', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], 'Sinnoh', 'It evolves from Tangela when leveled up while knowing Ancient Power.', 24, 4, 6, 16, 3, 3), +(465, 'Tangrowth', 'Female', false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], 'Sinnoh', 'It evolves from Tangela when leveled up while knowing Ancient Power.', 24, 5, 1, null, null, null), +(466, 'Electivire', NULL, false, 'Kanto', ARRAY['Red', 'LG: Pikachu', 'LG: Eevee'], 'Sinnoh', 'It evolves from Electabuzz when traded while holding an Electirizer.', 24, 5, 2, 16, 3, 4), +(467, 'Magmortar', NULL, false, 'Kanto', ARRAY['Blue', 'LG: Pikachu', 'LG: Eevee'], 'Sinnoh', 'It evolves from Magmar when traded while holding a Magmarizer. ', 24, 5, 3, 16, 3, 5), +(468, 'Togekiss', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], 'Sinnoh', 'It evolves from Togetic when exposed to a Shiny Stone.', 24, 5, 4, 16, 3, 6), +(469, 'Yanmega', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], 'Sinnoh', 'It evolves from Yanma when leveled up while knowing Ancient Power.', 24, 5, 5, 16, 4, 1), +(470, 'Leafeon', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], 'Sinnoh', 'evolves from Eevee when exposed to a Moss Rock or, from Generation VIII onwards, when exposed to a Leaf Stone. Eevee will always evolve into Leafeon when leveled up near a Moss Rock, even if the evolutionary conditions for it to evolve into Espeon, Umbreon, or Sylveon have also been met. The Moss Rock is not present in Pokémon HeartGold and SoulSilver, Pokémon Sword and Shield, or Pokémon Scarlet and Violet.', 24, 5, 6, 16, 4, 2), +(471, 'Glaceon', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], 'Sinnoh', 'evolves from Eevee when exposed to an Ice Rock or, from Generation VIII onwards, when exposed to an Ice Stone. Eevee will always evolve into Glaceon when leveled up near an Ice Rock, even if the evolutionary conditions for it to evolve into Espeon, Umbreon, or Sylveon have also been met. The Ice Rock is not present in Pokémon HeartGold and SoulSilver, Pokémon Sword and Shield, or Pokémon Scarlet and Violet, and the Ice Stone is not obtainable in Pokémon Brilliant Diamond and Shining Pearl.', 25, 1, 1, 16, 4, 3), +(472, 'Gliscor', NULL, false, 'Johto', ARRAY['Gold', 'Crystal', 'HG'], 'Sinnoh', 'It evolves from Gligar when leveled up while holding a Razor Fang during the night.', 25, 1, 2, 16, 4, 4), +(473, 'Mamoswine', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], 'Sinnoh', 'It evolves from Piloswine when leveled up while knowing Ancient Power.', 25, 1, 3, 16, 4, 5), +(473, 'Mamoswine', 'Female', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], 'Sinnoh', 'It evolves from Piloswine when leveled up while knowing Ancient Power.', 25, 1, 4, null, null, null), +(474, 'Porygon-Z', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], NULL, NULL, 25, 1, 5, 16, 4, 6), +(475, 'Gallade', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], 'Sinnoh', 'It evolves from a male Kirlia when exposed to a Dawn Stone.', 25, 1, 6, 16, 5, 1), +(476, 'Probopass', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], 'Sinnoh', 'It evolves from Nosepass when leveled up in a special magnetic field or when exposed to a Thunder Stone.', 25, 2, 1, 16, 5, 2), +(477, 'Dusknoir', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], 'Sinnoh', 'It evolves from Dusclops when traded while holding a Reaper Cloth.', 25, 2, 2, 16, 5, 3), +(478, 'Froslass', NULL, false, 'Hoenn', ARRAY['Ruby', 'Sapphire', 'Emerald', 'OR', 'AS'], 'Sinnoh', 'It evolves from a female Snorunt when exposed to a Dawn Stone.', 25, 2, 3, 16, 5, 4), +(479, 'Rotom', 'Lightbulb', false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 25, 2, 4, 16, 5, 5), +(479, 'Rotom', 'Oven', false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 25, 2, 5, null, null, null), +(479, 'Rotom', 'Washer', false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 25, 2, 6, null, null, null), +(479, 'Rotom', 'Fridge', false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 25, 3, 1, null, null, null), +(479, 'Rotom', 'Fan', false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 25, 3, 2, null, null, null), +(479, 'Rotom', 'Mower', false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 25, 3, 3, null, null, null), +(480, 'Uxie', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 25, 3, 4, 16, 5, 6), +(481, 'Mesprit', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 25, 3, 5, 17, 1, 1), +(482, 'Azelf', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 25, 3, 6, 17, 1, 2), +(483, 'Dialga', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Platinum', 'BD'], NULL, 'Spear Pillar (Only one)', 25, 4, 1, 17, 1, 3), +(484, 'Palkia', NULL, false, 'Sinnoh', ARRAY['Pearl', 'Platinum', 'SP'], NULL, NULL, 25, 4, 2, 17, 1, 4), +(485, 'Heatran', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, NULL, 25, 4, 3, 17, 1, 5), +(486, 'Regigigas', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, 'Snowpoint Temple (requires Regirock, Regice, and Registeel in the player''s party) (Only one)', 25, 4, 4, 17, 1, 6), +(487, 'Giratina', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, 'Turnback Cave (Only one) (Altered Forme)', 25, 4, 5, 17, 2, 1), +(488, 'Cresselia', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, 'Roaming Sinnoh (Only one)', 25, 4, 6, 17, 2, 2), +(489, 'Phione', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'PLA'], NULL, NULL, 25, 5, 1, 17, 2, 3), +(490, 'Manaphy', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'PLA'], NULL, NULL, 25, 5, 2, 17, 2, 4), +(491, 'Darkrai', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'PLA'], NULL, NULL, 25, 5, 3, 17, 2, 5), +(492, 'Shaymin', 'Normal Form', false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'PLA'], NULL, NULL, 25, 5, 4, 17, 2, 6), +(492, 'Shaymin', 'Sky Form', false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'PLA'], NULL, 'Needs to have its form changed in PLA to be able to keep it in Home, which requires having a completed Sword or Shield save file', 25, 5, 5, null, null, null), +(493, 'Arceus', NULL, false, 'Sinnoh', ARRAY['Diamond', 'Pearl', 'Platinum', 'BD', 'SP'], NULL, 'Hall of Origin (Only one*)Version 1.3.0+', 25, 5, 6, 17, 3, 1), +(494, 'Victini', NULL, false, 'Unova', ARRAY['Black', 'White'], NULL, 'DNS Exploit', 26, 1, 1, 17, 3, 2), +(495, 'Snivy', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, NULL, 26, 1, 2, 17, 3, 3), +(496, 'Servine', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, NULL, 26, 1, 3, 17, 3, 4), +(497, 'Serperior', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, NULL, 26, 1, 4, 17, 3, 5), +(498, 'Tepig', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, NULL, 26, 1, 5, 17, 3, 6), +(499, 'Pignite', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Tepig at level 17', 26, 1, 6, 17, 4, 1), +(500, 'Emboar', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Pignite at level 36', 26, 2, 1, 17, 4, 2), +(501, 'Oshawott', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, NULL, 26, 2, 2, 17, 4, 3), +(502, 'Dewott', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, NULL, 26, 2, 3, 17, 4, 4), +(503, 'Samurott', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, '36', 26, 2, 4, 17, 4, 5), +(503, 'Samurott', 'Hisuian', false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], 'Hisui', '36', 26, 2, 5, null, null, null), +(504, 'Patrat', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, NULL, 26, 2, 6, 17, 4, 6), +(505, 'Watchog', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Patrat at level 20', 26, 3, 1, 17, 5, 1), +(506, 'Lillipup', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, NULL, 26, 3, 2, 17, 5, 2), +(507, 'Herdier', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Herdier at level 16', 26, 3, 3, 17, 5, 3), +(508, 'Stoutland', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Stoutland at level 32', 26, 3, 4, 17, 5, 4), +(509, 'Purrloin', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, ' Routes 2 and 3, Dreamyard', 26, 3, 5, 17, 5, 5), +(510, 'Liepard', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Purrloin at level 20', 26, 3, 6, 17, 5, 6), +(511, 'Pansage', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, NULL, 26, 4, 1, 18, 1, 1), +(512, 'Simisage', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Pansage with a leaf stone', 26, 4, 2, 18, 1, 2), +(513, 'Pansear', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Pinwheel Forest (inner) and Lostlorn Forest (rustling grass)', 26, 4, 3, 18, 1, 3), +(514, 'Simisear', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Pansear with a fire stone', 26, 4, 4, 18, 1, 4), +(515, 'Panpour', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Pinwheel Forest (inner) and Lostlorn Forest (rustling grass)', 26, 4, 5, 18, 1, 5), +(516, 'Simipour', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Panpour with a water stone', 26, 4, 6, 18, 1, 6), +(517, 'Munna', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Dreamyard', 26, 5, 1, 18, 2, 1), +(518, 'Musharna', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Munna with a moon stone', 26, 5, 2, 18, 2, 2), +(519, 'Pidove', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Route 3, Pinwheel Forest (inner)', 26, 5, 3, 18, 2, 3), +(520, 'Tranquill', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Pidove at level 21', 26, 5, 4, 18, 2, 4), +(521, 'Unfezant', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Tranquill at level 32', 26, 5, 5, 18, 2, 5), +(521, 'Unfezant', 'Female', false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Tranquill at level 32', 26, 5, 6, null, null, null), +(522, 'Blitzle', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Route 3', 27, 1, 1, 18, 2, 6), +(523, 'Zebstrika', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Blitzle at level 27', 27, 1, 2, 18, 3, 1), +(524, 'Roggenrola', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Wellspring Cave', 27, 1, 3, 18, 3, 2), +(525, 'Boldore', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Roggenrola at level 25', 27, 1, 4, 18, 3, 3), +(526, 'Gigalith', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Boldore when traded', 27, 1, 5, 18, 3, 4), +(527, 'Woobat', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Wellspring Cave, Mistralton Cave, Twist Mountain, Challenger''s Cave, Victory Road', 27, 1, 6, 18, 3, 5), +(528, 'Swoobat', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Woobat with high friendship', 27, 2, 1, 18, 3, 6), +(529, 'Drilbur', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Wellspring Cave, Chargestone Cave, Mistralton Cave, Twist Mountain (Dust cloud)', 27, 2, 2, 18, 4, 1), +(530, 'Excadrill', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Drilbur at level 31', 27, 2, 3, 18, 4, 2), +(531, 'Audino', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Routes 1, 2, 3, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 16, and 18, P2 Laboratory, Dreamyard, Pinwheel Forest, Lostlorn Forest, Dragonspiral Tower, Village Bridge, Giant Chasm, Abundant Shrine, Cold Storage (rustling grass)', 27, 2, 4, 18, 4, 3), +(532, 'Timburr', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Pinwheel Forest (outside), Cold Storage', 27, 2, 5, 18, 4, 4), +(533, 'Gurdurr', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Timburr at level 25', 27, 2, 6, 18, 4, 5), +(534, 'Conkeldurr', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Gurdurr when traded', 27, 3, 1, 18, 4, 6), +(535, 'Tympole', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Pinwheel Forest (outside)', 27, 3, 2, 18, 5, 1), +(536, 'Palpitoad', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Tympole at level 25', 27, 3, 3, 18, 5, 2), +(537, 'Seismitoad', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Papitoad at level 36', 27, 3, 4, 18, 5, 3), +(538, 'Throh', NULL, false, 'Unova', ARRAY['White', 'Black2', 'White2'], NULL, 'Routes 10, 15, and 18, Pinwheel Forest (outside) (rustling grass)', 27, 3, 5, 18, 5, 4), +(539, 'Sawk', NULL, false, 'Unova', ARRAY['Black', 'Black2', 'White2'], NULL, 'Routes 10, 15, and 18, Pinwheel Forest (outside) (tall grass)', 27, 3, 6, 18, 5, 5), +(540, 'Sewaddle', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Pinwheel Forest (inner)', 27, 4, 1, 18, 5, 6), +(541, 'Swadloon', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Sewaddle at level 20', 27, 4, 2, 19, 1, 1), +(542, 'Leavanny', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Swadloon with high friendship', 27, 4, 3, 19, 1, 2), +(543, 'Venipede', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Pinwheel Forest (inner), Lostlorn Forest', 27, 4, 4, 19, 1, 3), +(544, 'Whirlipede', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Venipede at level 22', 27, 4, 5, 19, 1, 4), +(545, 'Scolipede', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Whirlipede at level 30', 27, 4, 6, 19, 1, 5), +(546, 'Cottonee', NULL, false, 'Unova', ARRAY['Black', 'Black2'], NULL, 'Pinwheel Forest (inner), Lostlorn Forest, Abundant Shrine', 27, 5, 1, 19, 1, 6), +(547, 'Whimsicott', NULL, false, 'Unova', ARRAY['Black', 'Black2'], NULL, 'Evolves from cottonee with a sun stone', 27, 5, 2, 19, 2, 1), +(548, 'Petilil', NULL, false, 'Unova', ARRAY['White', 'White2'], NULL, 'Pinwheel Forest (inner), Lostlorn Forest, Abundant Shrine', 27, 5, 3, 19, 2, 2), +(549, 'Lilligant', NULL, false, 'Unova', ARRAY['White', 'White2'], NULL, 'Evolves from Petilil with a sun stone', 27, 5, 4, 19, 2, 3), +(549, 'Lilligant', 'Hisuian', false, 'Unova', ARRAY['White', 'White2'], 'Hisui', 'In Hisui, Petilil evolves into Hisuian Lilligant when exposed to a Sun Stone.', 27, 5, 5, null, null, null), +(550, 'Basculin', 'Red-striped', false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Routes 1, 3, 6, 11, 14, Striaton City, Wellspring Cave, Pinwheel Forest, Dragonspiral Tower, Challenger''s Cave, Victory Road, Village Bridge, Giant Chasm, Abundant Shrine, Lostlorn Forest (Surfing or fishing) (Red-Striped Form) (Rippling water) (Blue-Striped Form)', 27, 5, 6, 19, 2, 4), +(550, 'Basculin', 'Blue-striped', false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Routes 1, 3, 6, 11, 14, Striaton City, Wellspring Cave, Pinwheel Forest, Dragonspiral Tower, Challenger''s Cave, Victory Road, Village Bridge, Giant Chasm, Abundant Shrine, Lostlorn Forest (Surfing or fishing) (Red-Striped Form) (Rippling water) (Blue-Striped Form)', 28, 1, 1, null, null, null), +(550, 'Basculin', 'White-striped', false, 'Hisui', ARRAY['PLA'], NULL, 'Cobalt Coastlands: Tranquility Cove, near Islespy Shore, near Firespit Island, massive mass outbreaks (White-Striped Form) Coronet Highlands: Fabled Spring (White-Striped Form) Alabaster Icelands: near Avalugg''s Legacy, Heart''s Crag, Lake Acuity, near Pearl Settlement (White-Striped Form)', 28, 1, 2, null, null, null), +(551, 'Sandile', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Route 4, Desert Resort, Relic Castle', 28, 1, 3, 19, 2, 5), +(552, 'Krokorok', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Sandile at level 29', 28, 1, 4, 19, 2, 6), +(553, 'Krookodile', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Krokorok at level 40', 28, 1, 5, 19, 3, 1), +(554, 'Darumaka', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Route 4, Desert Resort', 28, 1, 6, 19, 3, 2), +(554, 'Darumaka', 'Galarian', false, 'Galar', ARRAY['Sword'], NULL, 'Routes 8 and 10 (Galarian Form) Dusty Bowl, Giant''s Cap, Hammerlocke Hills, Lake of Outrage, Stony Wilderness (Max Raid Battle) (Galarian Form)', 28, 2, 1, null, null, null), +(555, 'Darmanitan', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Darumaka at level 35', 28, 2, 2, 19, 3, 3), +(555, 'Darmanitan', 'Galarian', false, 'Galar', ARRAY['Sword'], NULL, 'Evolves from Darumake when exposed to an Ice Stone.', 28, 2, 3, null, null, null), +(556, 'Maractus', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Desert Resort', 28, 2, 4, 19, 3, 4), +(557, 'Dwebble', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Route 18 and Desert Resort', 28, 2, 5, 19, 3, 5), +(558, 'Crustle', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Dwebble at level 34', 28, 2, 6, 19, 3, 6), +(559, 'Scraggy', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Routes 4 and 18, Desert Resort, P2 Laboratory Route 1 (dark grass)', 28, 3, 1, 19, 4, 1), +(560, 'Scrafty', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Scraggy at level 39', 28, 3, 2, 19, 4, 2), +(561, 'Sigilyph', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Desert Resort', 28, 3, 3, 19, 4, 3), +(562, 'Yamask', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Relic Castle', 28, 3, 4, 19, 4, 4), +(562, 'Yamask', 'Galarian', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 28, 3, 5, null, null, null), +(563, 'Cofagrigus', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Yamask at level 34', 28, 3, 6, 19, 4, 5), +(564, 'Tirtouga', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Resurrected from a Cover Fossil', 28, 4, 1, 19, 4, 6), +(565, 'Carracosta', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Tirtouga at level 37', 28, 4, 2, 19, 5, 1), +(566, 'Archen', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Resurrected from a Plume Fossil', 28, 4, 3, 19, 5, 2), +(567, 'Archeops', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Archen at level 37', 28, 4, 4, 19, 5, 3), +(568, 'Trubbish', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, ' Routes 5 and 16', 28, 4, 5, 19, 5, 4), +(569, 'Garbodor', NULL, true, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Trubbish at level 36', 28, 4, 6, 19, 5, 5), +(570, 'Zorua', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Castelia City (requires fateful encounter Celebi) Breed Zoroark (requires Shiny fateful encounter Entei, Raikou, or Suicune)', 28, 5, 1, 19, 5, 6), +(570, 'Zorua', 'Hisuian', false, 'Hisui', ARRAY['PLA'], NULL, 'Alabaster Icelands: near Avalugg''s Legacy (mass outbreaks), near Glacier Terrace, Icepeak Cavern, massive mass outbreaks (Hisuian Form)', 28, 5, 2, null, null, null), +(571, 'Zoroark', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Zorua at level 30', 28, 5, 3, 20, 1, 1), +(571, 'Zoroark', 'Hisuian', false, 'Hisui', ARRAY['PLA'], NULL, 'Evolves from Zorua at level 30', 28, 5, 4, null, null, null), +(572, 'Minccino', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, NULL, 28, 5, 5, 20, 1, 2), +(573, 'Cinccino', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Minccino with a shiny stone', 28, 5, 6, 20, 1, 3), +(574, 'Gothita', NULL, false, 'Unova', ARRAY['Black', 'Black2'], NULL, 'Routes 5 and 16', 29, 1, 1, 20, 1, 4), +(575, 'Gothorita', NULL, false, 'Unova', ARRAY['Black', 'Black2'], NULL, 'Evolves from Gothita at level 32', 29, 1, 2, 20, 1, 5), +(576, 'Gothitelle', NULL, false, 'Unova', ARRAY['Black', 'Black2'], NULL, 'Evolves from Gothorita at level 41', 29, 1, 3, 20, 1, 6), +(577, 'Solosis', NULL, false, 'Unova', ARRAY['White', 'White2'], NULL, 'Route 5 and Route 16', 29, 1, 4, 20, 2, 1), +(578, 'Duosion', NULL, false, 'Unova', ARRAY['White', 'White2'], NULL, 'Evolves from Solosis at level 32', 29, 1, 5, 20, 2, 2), +(579, 'Reuniclus', NULL, false, 'Unova', ARRAY['White', 'White2'], NULL, 'Evolves from Reuniclus at level 41', 29, 1, 6, 20, 2, 3), +(580, 'Ducklett', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Driftveil Drawbridge (Shadow)', 29, 2, 1, 20, 2, 4), +(581, 'Swanna', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Ducklett at level 35', 29, 2, 2, 20, 2, 5), +(582, 'Vanillite', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Cold Storage Route 6, Dragonspiral Tower (Winter)', 29, 2, 3, 20, 2, 6), +(583, 'Vanillish', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Vanillite at level 35', 29, 2, 4, 20, 3, 1), +(584, 'Vanilluxe', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Vanillish at level 47', 29, 2, 5, 20, 3, 2), +(585, 'Deerling', 'Spring', false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, NULL, 29, 2, 6, 20, 3, 3), +(585, 'Deerling', 'Summer', false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, NULL, 29, 3, 1, null, null, null), +(585, 'Deerling', 'Autumn', false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, NULL, 29, 3, 2, null, null, null), +(585, 'Deerling', 'Winter', false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, NULL, 29, 3, 3, null, null, null), +(586, 'Sawsbuck', 'Spring', false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Deerling at level 34', 29, 3, 4, 20, 3, 4), +(586, 'Sawsbuck', 'Summer', false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, NULL, 29, 3, 5, null, null, null), +(586, 'Sawsbuck', 'Autumn', false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, NULL, 29, 3, 6, null, null, null), +(586, 'Sawsbuck', 'Winter', false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, NULL, 29, 4, 1, null, null, null), +(587, 'Emolga', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Routes 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, and 16, Dragonspiral Tower, Village Bridge, Giant Chasm, Abundant Shrine, Lostlorn Forest (rustling grass)', 29, 4, 2, 20, 3, 5), +(588, 'Karrablast', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Routes 6 and 11', 29, 4, 3, 20, 3, 6), +(589, 'Escavalier', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Karrablast when traded for a Shelmet, a Pokémon that evolves into Accelgor simultaneously. Neither evolves if at least one holds an Everstone during the trade.', 29, 4, 4, 20, 4, 1), +(590, 'Foongus', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Routes 6, 7, and 10 (both in tall grass and as fake items)', 29, 4, 5, 20, 4, 2), +(591, 'Amoonguss', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Foongus at level 39', 29, 4, 6, 20, 4, 3), +(592, 'Frillish', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Routes 4, 17, and 18, Driftveil City, P2 Laboratory (Surfing)', 29, 5, 1, 20, 4, 4), +(592, 'Frillish', 'Female', false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Routes 4, 17, and 18, Driftveil City, P2 Laboratory (Surfing)', 29, 5, 2, null, null, null), +(593, 'Jellicent', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Frillish at level 40', 29, 5, 3, 20, 4, 5), +(593, 'Jellicent', 'Female', false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Frillish at level 40', 29, 5, 4, null, null, null), +(594, 'Alomomola', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Routes 4, 17, 18, Driftveil City, P2 Laboratory (Surfing in rippling water)', 29, 5, 5, 20, 4, 6), +(595, 'Joltik', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Chargestone Cave', 29, 5, 6, 20, 5, 1), +(596, 'Galvantula', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Joltik at level 36', 30, 1, 1, 20, 5, 2), +(597, 'Ferroseed', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Chargestone Cave', 30, 1, 2, 20, 5, 3), +(598, 'Ferrothorn', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Ferroseed at level 40', 30, 1, 3, 20, 5, 4), +(599, 'Klink', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Chargestone Cave, P2 Laboratory', 30, 1, 4, 20, 5, 5), +(600, 'Klang', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Klink at level 38', 30, 1, 5, 20, 5, 6), +(601, 'Klinklang', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Klang at level 49', 30, 1, 6, 21, 1, 1), +(602, 'Tynamo', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Chargestone Cave', 30, 2, 1, 21, 1, 2), +(603, 'Eelektrik', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Tynamo at level 39', 30, 2, 2, 21, 1, 3), +(604, 'Eelektross', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Eelektrik with a thunder stone', 30, 2, 3, 21, 1, 4), +(605, 'Elgyem', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Celestial Tower', 30, 2, 4, 21, 1, 5), +(606, 'Beheeyem', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Elgyem at level 42', 30, 2, 5, 21, 1, 6), +(607, 'Litwick', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Celestial Tower', 30, 2, 6, 21, 2, 1), +(608, 'Lampent', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Litwick at level 41', 30, 3, 1, 21, 2, 2), +(609, 'Chandelure', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Lampent with a dusk stone', 30, 3, 2, 21, 2, 3), +(610, 'Axew', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Mistralton Cave', 30, 3, 3, 21, 2, 4), +(611, 'Fraxure', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Axew at level 38', 30, 3, 4, 21, 2, 5), +(612, 'Haxorus', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Fraxure at level 48', 30, 3, 5, 21, 2, 6), +(613, 'Cubchoo', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Twist Mountain Route 7, Dragonspiral Tower (Winter)', 30, 3, 6, 21, 3, 1), +(614, 'Beartic', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Cubchoo at level 37', 30, 4, 1, 21, 3, 2), +(615, 'Cryogonal', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Twist Mountain', 30, 4, 2, 21, 3, 3), +(616, 'Shelmet', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Route 8, Icirrus City, Moor of Icirrus (Spring/Summer/Autumn)', 30, 4, 3, 21, 3, 4), +(617, 'Accelgor', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Shelmet when traded for a Karrablast, a Pokémon that evolves into Escavalier simultaneously. Neither evolves if at least one holds an Everstone during the trade.', 30, 4, 4, 21, 3, 5), +(618, 'Stunfisk', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Route 8, Icirrus City, Moor of Icirrus (puddles Spring/Summer/Autumn; fishing and surfing)', 30, 4, 5, 21, 3, 6), +(618, 'Stunfisk', 'Galarian', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 30, 4, 6, null, null, null), +(619, 'Mienfoo', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Dragonspiral Tower, Victory Road, Route 14 (regular grass only)', 30, 5, 1, 21, 4, 1), +(620, 'Mienshao', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Mienfoo at level 50', 30, 5, 2, 21, 4, 2), +(621, 'Druddigon', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Dragonspiral Tower', 30, 5, 3, 21, 4, 3), +(622, 'Golett', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Dragonspiral Tower', 30, 5, 4, 21, 4, 4), +(623, 'Golurk', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Golett at level 43', 30, 5, 5, 21, 4, 5), +(624, 'Pawniard', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Routes 9 and 11', 30, 5, 6, 21, 4, 6), +(625, 'Bisharp', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Pawniard at level 52', 31, 1, 1, 21, 5, 1), +(626, 'Bouffalant', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Route 10', 31, 1, 2, 21, 5, 2), +(627, 'Rufflet', NULL, false, 'Unova', ARRAY['White', 'White2'], NULL, 'Routes 10 and 11, Victory Road, Village Bridge', 31, 1, 3, 21, 5, 3), +(628, 'Braviary', NULL, false, 'Unova', ARRAY['White', 'White2'], NULL, 'Evolves from Rufflet at level 54', 31, 1, 4, 21, 5, 4), +(628, 'Braviary', 'Hisuian', false, 'Unova', ARRAY['White', 'White2'], 'Hisui', 'Evolves from Rufflet at level 54', 31, 1, 5, null, null, null), +(629, 'Vullaby', NULL, false, 'Unova', ARRAY['Black', 'Black2'], NULL, 'Routes 10 and 11, Victory Road, Village Bridge', 31, 1, 6, 21, 5, 5), +(630, 'Mandibuzz', NULL, false, 'Unova', ARRAY['Black', 'Black2'], NULL, 'Evolves from Vullaby at level 54', 31, 2, 1, 21, 5, 6), +(631, 'Heatmor', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Victory Road', 31, 2, 2, 22, 1, 1), +(632, 'Durant', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Victory Road', 31, 2, 3, 22, 1, 2), +(633, 'Deino', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Victory Road', 31, 2, 4, 22, 1, 3), +(634, 'Zweilous', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Deino at level 50', 31, 2, 5, 22, 1, 4), +(635, 'Hydreigon', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Zweilous at level 64', 31, 2, 6, 22, 1, 5), +(636, 'Larvesta', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Hatch Egg received from a Pokémon Ranger inside a building on Route 18', 31, 3, 1, 22, 1, 6), +(637, 'Volcarona', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Evolves from Larvesta at level 59', 31, 3, 2, 22, 2, 1), +(638, 'Cobalion', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Mistralton Cave (Guidance Chamber) (Only one)', 31, 3, 3, 22, 2, 2), +(639, 'Terrakion', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Victory Road (Trial Chamber) (Only one)', 31, 3, 4, 22, 2, 3), +(640, 'Virizion', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Pinwheel Forest (Rumination Field) (Only one)', 31, 3, 5, 22, 2, 4), +(641, 'Tornadus', 'Incarnate Form', false, 'Unova', ARRAY['Black', 'Dream Radar'], NULL, 'https://bulbapedia.bulbagarden.net/wiki/Roaming_Pok%C3%A9mon#Generation_V_2', 31, 3, 6, 22, 2, 5), +(641, 'Tornadus', 'Therian Form', false, 'Unova', ARRAY['Dream Radar'], NULL, 'Only available via pokemon dream radar', 31, 4, 1, null, null, null), +(642, 'Thundurus', 'Incarnate Form', false, 'Unova', ARRAY['White', 'Dream Radar'], NULL, 'https://bulbapedia.bulbagarden.net/wiki/Roaming_Pok%C3%A9mon#Generation_V_2', 31, 4, 2, 22, 2, 6), +(642, 'Thundurus', 'Therian Form', false, 'Unova', ARRAY['Dream Radar'], NULL, 'Only available via pokemon dream radar', 31, 4, 3, null, null, null), +(643, 'Reshiram', NULL, false, 'Unova', ARRAY['Black', 'White2'], NULL, 'N''s Castle (Only one)', 31, 4, 4, 22, 3, 1), +(644, 'Zekrom', NULL, false, 'Unova', ARRAY['White', 'Black2'], NULL, 'N''s Castle (Only one)', 31, 4, 5, 22, 3, 2), +(645, 'Landorus', 'Incarnate Form', false, 'Unova', ARRAY['Black', 'White', 'Dream Radar'], NULL, 'Abundant Shrine (requires Tornadus and Thundurus in party) (Only one) (Incarnate Forme)', 31, 4, 6, 22, 3, 3), +(645, 'Landorus', 'Therian Form', false, 'Unova', ARRAY['Dream Radar'], NULL, 'Only available via pokemon dream radar', 31, 5, 1, null, null, null), +(646, 'Kyurem', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'Giant Chasm (Only one)', 31, 5, 2, 22, 3, 4), +(647, 'Keldeo', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'DNS Exploit (https://pkmnclassic.net/)', 31, 5, 3, 22, 3, 5), +(647, 'Keldeo', 'Resolute Form', false, 'Unova', ARRAY['Black2', 'White2'], NULL, 'DNS Exploit', 31, 5, 4, null, null, null), +(648, 'Meloetta', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], NULL, 'DNS Exploit', 31, 5, 5, 22, 3, 6), +(649, 'Genesect', NULL, false, 'Unova', ARRAY['Black2', 'White2'], NULL, 'DNS Exploit', 31, 5, 6, 22, 4, 1), +(650, 'Chespin', NULL, false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 32, 1, 1, 22, 4, 2), +(651, 'Quilladin', NULL, false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 32, 1, 2, 22, 4, 3), +(652, 'Chesnaught', NULL, false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 32, 1, 3, 22, 4, 4), +(653, 'Fennekin', NULL, false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 32, 1, 4, 22, 4, 5), +(654, 'Braixen', NULL, false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 32, 1, 5, 22, 4, 6), +(655, 'Delphox', NULL, false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 32, 1, 6, 22, 5, 1), +(656, 'Froakie', NULL, false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 32, 2, 1, 22, 5, 2), +(657, 'Frogadier', NULL, false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 32, 2, 2, 22, 5, 3), +(658, 'Greninja', NULL, false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 32, 2, 3, 22, 5, 4), +(658, 'Greninja', 'Battle Bond Ability', false, 'Alola', ARRAY['Moon Demo'], NULL, NULL, 32, 2, 4, null, null, null), +(659, 'Bunnelby', NULL, false, 'Kalos', ARRAY['X', 'Y'], NULL, 'Route 2 - Grass Route 3 - Grass Route 5 - Grass Route 5 - Purple Flowers Route 22 - Grass', 32, 2, 5, 22, 5, 5), +(660, 'Diggersby', NULL, false, 'Kalos', ARRAY['X', 'Y'], NULL, 'Route 22 - Yellow Flowers Friend Safari ', 32, 2, 6, 22, 5, 6), +(661, 'Fletchling', NULL, false, 'Kalos', ARRAY['X', 'Y'], NULL, 'Route 2 - Grass Route 3 - Grass Santalune Forest - Grass ', 32, 3, 1, 23, 1, 1), +(662, 'Fletchinder', NULL, false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 32, 3, 2, 23, 1, 2), +(663, 'Talonflame', NULL, false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 32, 3, 3, 23, 1, 3), +(664, 'Scatterbug', NULL, false, 'Kalos', ARRAY['X', 'Y'], NULL, 'Route 2 - Grass Santalune Forest - Grass', 32, 3, 4, 23, 1, 4), +(665, 'Spewpa', NULL, false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 32, 3, 5, 23, 1, 5), +(666, 'Vivillon', 'Icy Snow (Canada-Northwest Territories)', false, 'Kalos', ARRAY['X', 'Y'], NULL, 'Link to full list of Vivillon regions for XY/USUM (Friend Safari)', 32, 3, 6, null, null, null), +(666, 'Vivillon', 'Polar (Canada-Alberta)', false, 'Kalos', ARRAY['X', 'Y'], NULL, 'Note: Listed locations are not exclusive and had preference for locations compatible with US 3Ds systems. Check full list for other world 3DS sytems.', 32, 4, 1, null, null, null), +(666, 'Vivillon', 'Tundra (Japan-Aomori)', false, 'Kalos', ARRAY['X', 'Y'], NULL, 'If priority is having same OT, use GO postcards in S/V to obtain unobtaiable forms', 32, 4, 2, null, null, null), +(666, 'Vivillon', 'Continental (Argentina-Chubut)', false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 32, 4, 3, null, null, null), +(666, 'Vivillon', 'Garden (UK-England) [Not US compatible]', false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 32, 4, 4, null, null, null), +(666, 'Vivillon', 'Elegant (Japan) [Not US compatible]', false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 32, 4, 5, null, null, null), +(666, 'Vivillon', 'Meadow (France-Alsace) [Not US compatible]', false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 32, 4, 6, null, null, null), +(666, 'Vivillon', 'Modern (Canada-Manitoba)', false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 32, 5, 1, null, null, null), +(666, 'Vivillon', 'Marine (Chile-Antofagasta)', false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 32, 5, 2, null, null, null), +(666, 'Vivillon', 'Archipelago (Mexico-Yucatan)', false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 32, 5, 3, null, null, null), +(666, 'Vivillon', 'High Plains (Canada-British Columbia)', false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 32, 5, 4, null, null, null), +(666, 'Vivillon', 'Sandstorm (Saudi Arabia-Al Bahah)', false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 32, 5, 5, null, null, null), +(666, 'Vivillon', 'River (Australia-Capital Territory) [Not US compatible]', false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 32, 5, 6, null, null, null), +(666, 'Vivillon', 'Monsoon (Japan-Okinawa)', false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 33, 1, 1, null, null, null), +(666, 'Vivillon', 'Savanna (Argentina-Buenos Aires)', false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 33, 1, 2, null, null, null), +(666, 'Vivillon', 'Sun (Belize-Belize)', false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 33, 1, 3, null, null, null), +(666, 'Vivillon', 'Ocean (US-Hawai''i)', false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 33, 1, 4, null, null, null), +(666, 'Vivillon', 'Jungle (Brazil-Acre)', false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 33, 1, 5, null, null, null), +(666, 'Vivillon', 'Fancy (Event)', false, 'Kalos', ARRAY['X', 'Y', 'Scarlet', 'Violet'], NULL, 'Event (X/Y)', 33, 1, 6, 23, 1, 6), +(666, 'Vivillon', 'Pokeball (Event)', false, 'Kalos', ARRAY['X', 'Y'], NULL, 'Event', 33, 2, 1, null, null, null), +(667, 'Litleo', NULL, false, 'Kalos', ARRAY['X', 'Y'], NULL, 'Route 22 - Grass Route 22 - Yellow Flowers', 33, 2, 2, 23, 2, 1), +(668, 'Pyroar', NULL, false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 33, 2, 3, 23, 2, 2), +(668, 'Pyroar', 'Female', false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 33, 2, 4, null, null, null), +(669, 'Flabébé', 'Red', false, 'Kalos', ARRAY['X', 'Y'], NULL, 'Route 4 - Red Flowers Route 4 - Red Flowers Route 4 - Red Flowers Route 4 - Yellow Flowers Route 4 - Yellow Flowers Route 4 - Yellow Flowers Route 7 - Grass Route 7 - Grass Route 7 - Purple Flowers Route 7 - Purple Flowers Route 7 - Purple Flowers Route 7 - Yellow Flowers Route 7 - Yellow Flowers Route 7 - Yellow Flowers', 33, 2, 5, 23, 2, 3), +(669, 'Flabébé', 'Yellow', false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 33, 2, 6, null, null, null), +(669, 'Flabébé', 'Orange', false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 33, 3, 1, null, null, null), +(669, 'Flabébé', 'Blue', false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 33, 3, 2, null, null, null), +(669, 'Flabébé', 'White', false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 33, 3, 3, null, null, null), +(670, 'Floette', 'Red', false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 33, 3, 4, 23, 2, 4), +(670, 'Floette', 'Yellow', false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 33, 3, 5, null, null, null), +(670, 'Floette', 'Orange', false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 33, 3, 6, null, null, null), +(670, 'Floette', 'Blue', false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 33, 4, 1, null, null, null), +(670, 'Floette', 'White', false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 33, 4, 2, null, null, null), +(671, 'Florges', 'Red', false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 33, 4, 3, 23, 2, 5), +(671, 'Florges', 'Yellow', false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 33, 4, 4, null, null, null), +(671, 'Florges', 'Orange', false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 33, 4, 5, null, null, null), +(671, 'Florges', 'Blue', false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 33, 4, 6, null, null, null), +(671, 'Florges', 'White', false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 33, 5, 1, null, null, null), +(672, 'Skiddo', NULL, false, 'Kalos', ARRAY['X', 'Y'], NULL, 'Route 5 - Grass Route 5 - Purple Flowers', 33, 5, 2, 23, 2, 6), +(673, 'Gogoat', NULL, false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 33, 5, 3, 23, 3, 1), +(674, 'Pancham', NULL, false, 'Kalos', ARRAY['X', 'Y'], NULL, 'Route 5 - Grass Route 5 - Purple Flowers Friend Safari ', 33, 5, 4, 23, 3, 2), +(675, 'Pangoro', NULL, false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 33, 5, 5, 23, 3, 3), +(676, 'Furfrou', NULL, false, 'Kalos', ARRAY['X', 'Y'], NULL, 'Route 5 - Grass Route 5 - Purple Flowers ', 33, 5, 6, 23, 3, 4), +(676, 'Furfrou', 'Heart', false, 'Unknown', ARRAY['Go'], NULL, NULL, 34, 1, 1, null, null, null), +(676, 'Furfrou', 'Star', false, 'Unknown', ARRAY['Go'], NULL, NULL, 34, 1, 2, null, null, null), +(676, 'Furfrou', 'Diamond', false, 'Unknown', ARRAY['Go'], NULL, NULL, 34, 1, 3, null, null, null), +(676, 'Furfrou', 'Debutante', false, 'Unknown', ARRAY['Go'], NULL, NULL, 34, 1, 4, null, null, null), +(676, 'Furfrou', 'Matron', false, 'Unknown', ARRAY['Go'], NULL, NULL, 34, 1, 5, null, null, null), +(676, 'Furfrou', 'Dandy', false, 'Unknown', ARRAY['Go'], NULL, NULL, 34, 1, 6, null, null, null), +(676, 'Furfrou', 'La Reine', false, 'Unknown', ARRAY['Go'], NULL, NULL, 34, 2, 1, null, null, null), +(676, 'Furfrou', 'Kabuki', false, 'Unknown', ARRAY['Go'], NULL, NULL, 34, 2, 2, null, null, null), +(676, 'Furfrou', 'Pharaoh', false, 'Unknown', ARRAY['Go'], NULL, NULL, 34, 2, 3, null, null, null), +(677, 'Espurr', NULL, false, 'Kalos', ARRAY['X', 'Y'], NULL, 'Route 6 - Tall Grass Friend Safari ', 34, 2, 4, 23, 3, 5), +(678, 'Meowstic', NULL, false, 'Kalos', ARRAY['X', 'Y'], NULL, 'Evolve from male Espurr, Route 6 - Tall Grass', 34, 2, 5, 23, 3, 6), +(678, 'Meowstic', 'Female', false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 34, 2, 6, null, null, null), +(679, 'Honedge', NULL, false, 'Kalos', ARRAY['X', 'Y'], NULL, 'Route 6 - Tall Grass ', 34, 3, 1, 23, 4, 1), +(680, 'Doublade', NULL, false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 34, 3, 2, 23, 4, 2), +(681, 'Aegislash', NULL, false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 34, 3, 3, 23, 4, 3), +(682, 'Spritzee', NULL, false, 'Kalos', ARRAY['Y'], NULL, 'Route 7 - Grass Route 7 - Purple Flowers Route 7 - Yellow Flowers Friend Safari ', 34, 3, 4, 23, 4, 4), +(683, 'Aromatisse', NULL, false, 'Kalos', ARRAY['Y'], NULL, 'Evolves from Spritzee', 34, 3, 5, 23, 4, 5), +(684, 'Swirlix', NULL, false, 'Kalos', ARRAY['X'], NULL, 'Route 7 - Grass Route 7 - Purple Flowers Route 7 - Yellow Flowers Friend Safari ', 34, 3, 6, 23, 4, 6), +(685, 'Slurpuff', NULL, false, 'Kalos', ARRAY['X'], NULL, NULL, 34, 4, 1, 23, 5, 1), +(686, 'Inkay', NULL, false, 'Kalos', ARRAY['X', 'Y'], NULL, 'Route 8 - Grass Route 8 - Yellow Flowers Azure Bay - Grass Friend Safari ', 34, 4, 2, 23, 5, 2), +(687, 'Malamar', NULL, false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 34, 4, 3, 23, 5, 3), +(688, 'Binacle', NULL, false, 'Kalos', ARRAY['X', 'Y'], NULL, 'Route 8 - Rock Smash Route 12 - Rock Smash Ambrette Town - Rock Smash Azure Bay - Rock Smash ', 34, 4, 4, 23, 5, 4), +(689, 'Barbaracle', NULL, false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 34, 4, 5, 23, 5, 5), +(690, 'Skrelp', NULL, false, 'Kalos', ARRAY['Y'], NULL, 'Route 8 - Good Rod Cyllage City - Good Rod Ambrette Town - Good Rod', 34, 4, 6, 23, 5, 6), +(691, 'Dragalge', NULL, false, 'Kalos', ARRAY['Y'], NULL, 'Evolves from Skrelp', 34, 5, 1, 24, 1, 1), +(692, 'Clauncher', NULL, false, 'Kalos', ARRAY['X'], NULL, 'Route 8 - Good Rod Cyllage City - Good Rod Ambrette Town - Good Rod', 34, 5, 2, 24, 1, 2), +(693, 'Clawitzer', NULL, false, 'Kalos', ARRAY['X'], NULL, NULL, 34, 5, 3, 24, 1, 3), +(694, 'Helioptile', NULL, false, 'Kalos', ARRAY['X', 'Y'], NULL, 'Route 9 - Grass Friend Safari ', 34, 5, 4, 24, 1, 4), +(695, 'Heliolisk', NULL, false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 34, 5, 5, 24, 1, 5), +(696, 'Tyrunt', NULL, false, 'Kalos', ARRAY['X', 'Y'], NULL, 'Glimmering cave right before 2nd gym. Ambrette Town Fossil Lab (Jaw fossil)', 34, 5, 6, 24, 1, 6), +(697, 'Tyrantrum', NULL, false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 35, 1, 1, 24, 2, 1), +(698, 'Amaura', NULL, false, 'Kalos', ARRAY['X', 'Y'], NULL, 'Glimmering cave right before 2nd gym. Ambrette Town Fossil Lab (Sail fossil)', 35, 1, 2, 24, 2, 2), +(699, 'Aurorus', NULL, false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 35, 1, 3, 24, 2, 3), +(700, 'Sylveon', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'], 'Kalos', 'evolves from Eevee when leveled up while knowing a Fairy-type move and having high friendship. Prior to Generation VIII, it evolves from Eevee when leveled up while knowing a Fairy-type move and having at least two levels of affection. Eevee will evolve into Sylveon even if the evolutionary conditions for it to evolve into Espeon or Umbreon have also been met. Eevee will never evolve into Sylveon while near a Moss Rock or Ice Rock.', 35, 1, 4, 24, 2, 4), +(701, 'Hawlucha', NULL, false, 'Kalos', ARRAY['X', 'Y'], NULL, 'Route 10 - Grass Route 10 - Yellow Flowers Friend Safari ', 35, 1, 5, 24, 2, 5), +(702, 'Dedenne', NULL, false, 'Kalos', ARRAY['X', 'Y'], NULL, 'Route 11 - Grass Friend Safari ', 35, 1, 6, 24, 2, 6), +(703, 'Carbink', NULL, false, 'Kalos', ARRAY['X', 'Y'], NULL, 'Reflection Cave - 1F - Grass Reflection Cave - 1F - Horde Reflection Cave - B1F - Grass Reflection Cave - B1F - Horde Reflection Cave - B2F - Grass Reflection Cave - B2F - Horde Reflection Cave - B3F - Grass Reflection Cave - B3F - Horde', 35, 2, 1, 24, 3, 1), +(704, 'Goomy', NULL, false, 'Kalos', ARRAY['X', 'Y'], NULL, 'Route 14 - Grass Route 14 - Water Route 14 - Surf', 35, 2, 2, 24, 3, 2), +(705, 'Sliggoo', NULL, false, 'Kalos', ARRAY['X', 'Y'], NULL, 'Route 19 - Purple Flowers Route 19 - Water Route 19 - Surf Route 19 - Yellow Flowers Friend Safari ', 35, 2, 3, 24, 3, 3), +(705, 'Sliggoo', 'Hisuian', false, 'Kalos', ARRAY['X', 'Y'], 'Hisui', 'Evolves from Goomy at level 40', 35, 2, 4, null, null, null), +(706, 'Goodra', NULL, false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 35, 2, 5, 24, 3, 4), +(706, 'Goodra', 'Hisuian', false, 'Kalos', ARRAY['X', 'Y'], 'Hisui', 'Evolves from Sliggoo at level 50 during rain or fog in the overworld', 35, 2, 6, null, null, null), +(707, 'Klefki', NULL, false, 'Kalos', ARRAY['X', 'Y'], NULL, 'Route 15 - Grass Route 15 - Horde Route 15 - Red Flowers Route 16 - Horde Route 16 - Tall Grass Route 16 - Yellow Flowers Lost Hotel - Grass Friend Safari ', 35, 3, 1, 24, 3, 5), +(708, 'Phantump', NULL, false, 'Kalos', ARRAY['X', 'Y'], NULL, 'Route 16 - Tall Grass Route 16 - Yellow Flowers Friend Safari ', 35, 3, 2, 24, 3, 6), +(709, 'Trevenant', NULL, false, 'Kalos', ARRAY['X', 'Y'], NULL, 'Route 20 - Grass Route 20 - Horde Route 20 - Red Flowers', 35, 3, 3, 24, 4, 1), +(710, 'Pumpkaboo', 'Small', false, 'Kalos', ARRAY['X', 'Y'], NULL, 'Route 16 - Tall Grass Route 16 - Tall Grass Route 16 - Tall Grass Route 16 - Tall Grass Friend Safari ', 35, 3, 4, 24, 4, 2), +(710, 'Pumpkaboo', 'Medium', false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 35, 3, 5, null, null, null), +(710, 'Pumpkaboo', 'Large', false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 35, 3, 6, null, null, null), +(710, 'Pumpkaboo', 'Super', false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 35, 4, 1, null, null, null), +(711, 'Gourgeist', 'Small', false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 35, 4, 2, 24, 4, 3), +(711, 'Gourgeist', 'Medium', false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 35, 4, 3, null, null, null), +(711, 'Gourgeist', 'Large', false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 35, 4, 4, null, null, null), +(711, 'Gourgeist', 'Super', false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 35, 4, 5, null, null, null), +(712, 'Bergmite', NULL, false, 'Kalos', ARRAY['X', 'Y'], NULL, 'Frost Cavern - 1F - Grass Frost Cavern - 2F - Grass Frost Cavern - 3F - Grass Friend Safari ', 35, 4, 6, 24, 4, 4), +(713, 'Avalugg', NULL, false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 35, 5, 1, 24, 4, 5), +(713, 'Avalugg', 'Hisuian', false, 'Kalos', ARRAY['X', 'Y'], 'Hisui', NULL, 35, 5, 2, null, null, null), +(714, 'Noibat', NULL, false, 'Kalos', ARRAY['X', 'Y'], NULL, 'Terminus Cave - 1F - Special Terminus Cave - B1F - Special Terminus Cave - B2F - Special Terminus Cave - B3F - Special Terminus Cave - 2F Left - Special Terminus Cave - 2F Right - Special Friend Safari ', 35, 5, 3, 24, 4, 6), +(715, 'Noivern', NULL, false, 'Kalos', ARRAY['X', 'Y'], NULL, NULL, 35, 5, 4, 24, 5, 1), +(716, 'Xerneas', NULL, false, 'Kalos', ARRAY['X'], NULL, 'Team Flare Secret HQ - Basement - Interact', 35, 5, 5, 24, 5, 2), +(717, 'Yveltal', NULL, false, 'Kalos', ARRAY['Y'], NULL, 'Team Flare Secret HQ - Basement - Interact ', 35, 5, 6, 24, 5, 3), +(718, 'Zygarde', '10%', false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, NULL, 36, 1, 1, 24, 5, 4), +(718, 'Zygarde', '10% Power Construct', false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, NULL, 36, 1, 2, null, null, null), +(718, 'Zygarde', '50%', false, 'Kalos', ARRAY['X', 'Y'], NULL, 'Terminus Cave - B3F - Interact ', 36, 1, 3, 24, 5, 5), +(718, 'Zygarde', '50% Power Construct', false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, NULL, 36, 1, 4, null, null, null), +(719, 'Diancie', NULL, false, 'Kalos', ARRAY['X', 'Y'], NULL, 'Event (powersaves)', 36, 1, 5, 24, 5, 5), +(720, 'Hoopa', 'Confined', false, 'Kalos', ARRAY['X', 'Y'], NULL, 'Event (powersaves)', 36, 1, 6, 24, 5, 6), +(720, 'Hoopa', 'Unbound', false, 'Kalos', ARRAY['X', 'Y'], NULL, 'Event (powersaves), convert form in USUM, then transfer to bank', 37, 1, 1, null, null, null), +(721, 'Volcanion', NULL, false, 'Kalos', ARRAY['X', 'Y'], NULL, 'Event (powersaves)', 37, 1, 2, 25, 1, 1), +(722, 'Rowlet', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, NULL, 37, 1, 3, 25, 1, 2), +(723, 'Dartrix', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, NULL, 37, 1, 4, 25, 1, 3), +(724, 'Decidueye', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, NULL, 37, 1, 5, 25, 1, 4), +(724, 'Decidueye', 'Hisuian', false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], 'Hisui', 'Evolves from Dartrix at level 36', 37, 1, 6, null, null, null), +(725, 'Litten', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, NULL, 37, 2, 1, 25, 1, 5), +(726, 'Torracat', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, NULL, 37, 2, 2, 25, 1, 6), +(727, 'Incineroar', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, NULL, 37, 2, 3, 25, 2, 1), +(728, 'Popplio', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, NULL, 37, 2, 4, 25, 2, 2), +(729, 'Brionne', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, NULL, 37, 2, 5, 25, 2, 3), +(730, 'Primarina', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, NULL, 37, 2, 6, 25, 2, 4), +(731, 'Pikipek', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, NULL, 37, 3, 1, 25, 2, 5), +(732, 'Trumbeak', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Route 5, Route 8, Lush Jungle, Route 11, Poni Grove, Poni Plains Evolves at level 28.', 37, 3, 2, 25, 2, 6), +(733, 'Toucannon', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Route 11, Poni Grove, Poni Plains SOS only. Has the unique move Beak Blast.', 37, 3, 3, 25, 3, 1), +(734, 'Yungoos', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, NULL, 37, 3, 4, 25, 3, 2), +(735, 'Gumshoos', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Route 8, Memorial Hill, Akala Outskirts, Route 10, Tapu Village, Route 14, Route 15, Route 16, Route 17, Mount Lanakila, Poni Plains', 37, 3, 5, 25, 3, 3), +(736, 'Grubbin', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, NULL, 37, 3, 6, 25, 3, 4), +(737, 'Charjabug', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, NULL, 37, 4, 1, 25, 3, 5), +(738, 'Vikavolt', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Level up charjabug at electric rock', 37, 4, 2, 25, 3, 6), +(739, 'Crabrawler', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, NULL, 37, 4, 3, 25, 4, 1), +(740, 'Crabominable', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Evolves from Crabrawler: Route 3, Kala’e Bay, Route 2, Berry Fields, Route 4, Route 5, Route 8, Route 10, Ula’ula Beach, Route 15, Route 16, Route 17, Poni Wilds, Poni Plains Evolves via level-up at the top of Mount Lanakila.', 37, 4, 4, 25, 4, 2), +(741, 'Oricorio', 'Baile (Red)', false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Melemele Meadow, Route 6, Ula’ula Meadow, Poni Meadow', 37, 4, 5, null, null, null), +(741, 'Oricorio', 'Pom-pom (yellow)', false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, NULL, 37, 4, 6, null, null, null), +(741, 'Oricorio', 'Pa''u (pink)', false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Melemele Meadow, Route 6, Ula’ula Meadow, Poni Meadow', 37, 5, 1, null, null, null), +(741, 'Oricorio', 'Sensu (purple)', false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Melemele Meadow, Route 6, Ula’ula Meadow, Poni Meadow', 37, 5, 2, null, null, null), +(742, 'Cutiefly', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, NULL, 37, 5, 3, 25, 4, 3), +(743, 'Ribombee', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Ula’ula Meadow, Poni Meadow or evolves from Cutiefly at level 25', 37, 5, 4, 25, 4, 4), +(744, 'Rockruff', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, NULL, 37, 5, 5, 25, 4, 5), +(744, 'Rockruff', 'Own Tempo', false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Event (powersaves)', 37, 5, 6, 25, 4, 6), +(745, 'Lycanroc', 'Midday', false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Vast Poni Canyon', 38, 1, 1, null, null, null), +(745, 'Lycanroc', 'Midnight', false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, NULL, 38, 1, 2, null, null, null), +(745, 'Lycanroc', 'Dusk', false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Vast Poni Canyon', 38, 1, 3, 25, 5, 1), +(746, 'Wishiwashi', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, NULL, 38, 1, 4, 25, 5, 2), +(747, 'Mareanie', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Route 1 (Hau’oli Outskirts), Route 1, Melemele Sea, Melemele Sea, Hau’oli City (Beachfront), Route 9 SOS only. Evolves at level 38.', 38, 1, 5, 25, 5, 3), +(748, 'Toxapex', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Evolves from Mareanie at level 38', 38, 1, 6, 25, 5, 4), +(749, 'Mudbray', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Route 4, Route 6, Paniola Ranch, Route 12, Blush Mountain Evolves at level 30.', 38, 2, 1, 25, 5, 5), +(750, 'Mudsdale', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Route 12, Blush Mountain, Poni Plains', 38, 2, 2, 25, 5, 6), +(751, 'Dewpider', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Brooklet Hill (day) Evolves at level 22.', 38, 2, 3, 26, 1, 1), +(752, 'Araquanid', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Malie Garden', 38, 2, 4, 26, 1, 2), +(753, 'Fomantis', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, NULL, 38, 2, 5, 26, 1, 3), +(754, 'Lurantis', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Evolves from Fomantis: Route 5, Lush Jungle Evolves at level 34 during the day.', 38, 2, 6, 26, 1, 4), +(757, 'Morelull', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Brooklet Hill (night - Sun 18:00-06:00, Moon 06:00-18:00) Lush Jungle Evolves at level 24.', 38, 3, 1, 26, 1, 5), +(758, 'Shiinotic', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Route 11 (night - Sun 18:00-06:00, Moon 06:00-18:00) ', 38, 3, 2, 26, 1, 6), +(759, 'Salandit', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Route 8, Wela Volcano Park, Lush Jungle Evolves at level 33 only if female. 12.5% of Salandit are female.', 38, 3, 3, 26, 2, 1), +(760, 'Salazzle', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, NULL, 38, 3, 4, 26, 2, 2), +(761, 'Stufful', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Route 8, Memorial Hill, Akala Outskirts Evolves at level 27. ', 38, 3, 5, 26, 2, 3), +(762, 'Bewear', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Poni Gauntlet', 38, 3, 6, 26, 2, 4), +(763, 'Bounsweet', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, NULL, 38, 4, 1, 26, 2, 5), +(764, 'Steenee', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Lush Jungle Evolves via level-up knowing Stomp.', 38, 4, 2, 26, 2, 6), +(765, 'Tsareena', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Evolves from Tsareena', 38, 4, 3, 26, 3, 1), +(766, 'Comfey', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Lush Jungle', 38, 4, 4, 26, 3, 2), +(767, 'Oranguru', NULL, false, 'Alola', ARRAY['Moon', 'UM'], NULL, 'Lush Jungle', 38, 4, 5, 26, 3, 3), +(768, 'Passimian', NULL, false, 'Alola', ARRAY['Sun', 'US'], NULL, 'Lush Jungle', 38, 4, 6, 26, 3, 4), +(769, 'Wimpod', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Route 8, Dividing Peak Tunnel, Ancient Poni Path, Poni Breaker Coast Evolves at level 30. ', 38, 5, 1, 26, 3, 5), +(770, 'Golisopod', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Evolves from Wimpod', 38, 5, 2, 26, 3, 6), +(771, 'Sandygast', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Hano Grand Resort, Hano Beach Evolves at level 42. ', 38, 5, 3, 26, 4, 1), +(772, 'Palossand', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Evolves from Sandygast', 38, 5, 4, 26, 4, 2), +(773, 'Pyukumuku', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, NULL, 38, 5, 5, 26, 4, 3), +(774, 'Type: Null', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Aether House or Ancient Poni Path (Gift; post-game) Evolves by level-up with high happiness.', 38, 5, 6, 26, 4, 4), +(774, 'Silvally', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Evolves from Type: Null', 39, 1, 1, 26, 4, 5), +(774, 'Minior', 'Red', false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Mount Hokulani', 39, 1, 2, 26, 4, 6), +(774, 'Minior', 'Orange', false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Mount Hokulani', 39, 1, 3, null, null, null), +(774, 'Minior', 'Yellow', false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Mount Hokulani', 39, 1, 4, null, null, null), +(774, 'Minior', 'Green', false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Mount Hokulani', 39, 1, 5, null, null, null), +(774, 'Minior', 'Blue', false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Mount Hokulani', 39, 1, 6, null, null, null), +(775, 'Minior', 'Indigo', false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Mount Hokulani', 39, 2, 1, null, null, null), +(776, 'Minior', 'Violet', false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, NULL, 39, 2, 2, null, null, null), +(777, 'Komala', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Route 11', 39, 2, 3, 26, 5, 1), +(778, 'Turtonator', NULL, false, 'Alola', ARRAY['Sun', 'US'], NULL, 'Blush Mountain', 39, 2, 4, 26, 5, 2), +(779, 'Togedemaru', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Blush Mountain', 39, 2, 5, 26, 5, 3), +(780, 'Mimikyu', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Thrifty Megamart (Abandoned Site)', 39, 2, 6, 26, 5, 4), +(781, 'Bruxish', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Route 13, Tapu Village, Route 14, Route 15, Route 16', 39, 3, 1, 26, 5, 5), +(782, 'Drampa', NULL, false, 'Alola', ARRAY['Moon', 'UM'], NULL, 'Mount Lanakila', 39, 3, 2, 26, 5, 6), +(783, 'Dhelmise', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Seafolk Village', 39, 3, 3, 27, 1, 1), +(784, 'Jangmo-o', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Vast Poni Canyon Evolves at level 35.', 39, 3, 4, 27, 1, 2), +(785, 'Hakamo-o', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Evolves from Jangmo-o at level 35', 39, 3, 5, 27, 1, 3), +(786, 'Kommo-o', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Evolves from Hakamo-o at level 45', 39, 3, 6, 27, 1, 4), +(787, 'Tapu Koko', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, NULL, 39, 4, 1, 27, 1, 5), +(788, 'Tapu Lele', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Ruins of Life Post-game.', 39, 4, 2, 27, 1, 6), +(789, 'Tapu Bulu', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Ruins of Abundance Post-game.', 39, 4, 3, 27, 2, 1), +(790, 'Tapu Fini', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Ruins of Hope Post-game.', 39, 4, 4, 27, 2, 2), +(791, 'Cosmog', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Lake of the Sunne/Moone Post-game only. Evolves at level 43.', 39, 4, 5, 27, 2, 3), +(792, 'Cosmoem', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Evolves from Cosmog at level 43', 39, 4, 6, 27, 2, 4), +(793, 'Solgaleo', NULL, false, 'Alola', ARRAY['Sun', 'US'], NULL, 'Mahalo Trail, Evolves from Cosmoem at level 53', 39, 5, 1, 27, 2, 5), +(794, 'Lunala', NULL, false, 'Alola', ARRAY['Moon', 'UM'], NULL, NULL, 39, 5, 2, 27, 2, 6), +(795, 'Nihilego', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, NULL, 39, 5, 3, 27, 3, 1), +(796, 'Buzzwole', NULL, false, 'Alola', ARRAY['Sun', 'US'], NULL, 'Ultra Jungle Multiple. Ultra Sun only. From white Ultra Wormholes.', 39, 5, 4, 27, 3, 2), +(797, 'Pheromosa', NULL, false, 'Alola', ARRAY['Moon', 'UM'], NULL, NULL, 39, 5, 5, 27, 3, 3), +(798, 'Xurkitree', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, NULL, 39, 5, 6, 27, 3, 4), +(799, 'Celesteela', NULL, false, 'Alola', ARRAY['Moon', 'UM'], NULL, NULL, 40, 1, 1, 27, 3, 5), +(800, 'Kartana', NULL, false, 'Alola', ARRAY['Sun', 'US'], NULL, 'Ultra Forest Multiple. Ultra Sun only. From white Ultra Wormholes.', 40, 1, 2, 27, 3, 6), +(801, 'Guzzlord', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, NULL, 40, 1, 3, 27, 4, 1), +(801, 'Necrozma', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, 'Mount Lanakila End of the story. Only can be caught after third battle with it.', 40, 1, 4, 27, 4, 2), +(802, 'Magearna', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, NULL, 40, 1, 5, 27, 4, 3), +(803, 'Magearna', 'Original Color', false, 'Unknown', ARRAY['Home'], NULL, 'Get a complete national dex in Pokemon Home', 40, 1, 6, null, null, null), +(804, 'Marshadow', NULL, false, 'Alola', ARRAY['Sun', 'Moon', 'US', 'UM'], NULL, NULL, 40, 2, 1, 27, 4, 4), +(805, 'Poipole', NULL, false, 'Alola', ARRAY['US', 'UM'], NULL, NULL, 40, 2, 2, 27, 4, 5), +(806, 'Naganadel', NULL, false, 'Alola', ARRAY['US', 'UM'], NULL, NULL, 40, 2, 3, 27, 4, 6), +(807, 'Stakataka', NULL, false, 'Alola', ARRAY['UM'], NULL, 'Poni Grove Ultra Moon only. Two only. Post-game.', 40, 2, 4, 27, 5, 1), +(808, 'Blacephalon', NULL, false, 'Alola', ARRAY['US'], NULL, 'Poni Grove Ultra Sun only. Two only. Post-game.', 40, 2, 5, 27, 5, 2), +(809, 'Zeraora', NULL, false, 'Alola', ARRAY['US'], NULL, 'Event', 40, 2, 6, 27, 5, 3), +(809, 'Meltan', NULL, false, 'Unknown', ARRAY['Go'], NULL, 'Transfer to LG:PE from GO to remove GO mark in HOME', 40, 3, 1, 27, 5, 4), +(810, 'Melmetal', NULL, true, 'Unknown', ARRAY['Home'], NULL, NULL, 41, 1, 1, 27, 5, 5), +(811, 'Grookey', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 41, 1, 2, 27, 5, 6), +(812, 'Thwackey', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 41, 1, 3, 28, 1, 1), +(813, 'Rillaboom', NULL, true, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 41, 1, 4, 28, 1, 2), +(814, 'Scorbunny', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 41, 1, 5, 28, 1, 3), +(815, 'Raboot', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 41, 1, 6, 28, 1, 4), +(816, 'Cinderace', NULL, true, 'Galar', ARRAY['Sword', 'Shield'], NULL, 'Evolves at level 35', 41, 2, 1, 28, 1, 5), +(817, 'Sobble', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 41, 2, 2, 28, 1, 6), +(818, 'Drizzile', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 41, 2, 3, 28, 2, 1), +(819, 'Inteleon', NULL, true, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 41, 2, 4, 28, 2, 2), +(820, 'Skwovet', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 41, 2, 5, 28, 2, 3), +(821, 'Greedent', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, 'Evolves at level 24', 41, 2, 6, 28, 2, 4), +(822, 'Rookidee', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 41, 3, 1, 28, 2, 5), +(823, 'Corvisquire', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 41, 3, 2, 28, 2, 6), +(824, 'Corviknight', NULL, true, 'Galar', ARRAY['Sword', 'Shield'], NULL, 'Evolves at level 38', 41, 3, 3, 28, 3, 1), +(825, 'Blipbug', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 41, 3, 4, 28, 3, 2), +(826, 'Dottler', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 41, 3, 5, 28, 3, 3), +(827, 'Orbeetle', NULL, true, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 41, 3, 6, 28, 3, 4), +(828, 'Nickit', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 41, 4, 1, 28, 3, 5), +(829, 'Thievul', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 41, 4, 2, 28, 3, 6), +(830, 'Gossifleur', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 41, 4, 3, 28, 4, 1), +(831, 'Eldegoss', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 41, 4, 4, 28, 4, 2), +(832, 'Wooloo', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 41, 4, 5, 28, 4, 3), +(833, 'Dubwool', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, 'Evolves at level 24', 41, 4, 6, 28, 4, 4), +(834, 'Chewtle', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 41, 5, 1, 28, 4, 5), +(835, 'Drednaw', NULL, true, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 41, 5, 2, 28, 4, 6), +(836, 'Yamper', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 41, 5, 3, 28, 5, 1), +(837, 'Boltund', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 41, 5, 4, 28, 5, 2), +(838, 'Rolycoly', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 41, 5, 5, 28, 5, 3), +(839, 'Carkol', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 41, 5, 6, 28, 5, 4), +(840, 'Coalossal', NULL, true, 'Galar', ARRAY['Sword', 'Shield'], NULL, 'Evolves at level 34', 42, 1, 1, 28, 5, 5), +(841, 'Applin', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 42, 1, 2, 28, 5, 6), +(842, 'Flapple', NULL, true, 'Galar', ARRAY['Sword'], NULL, 'Evolves from Applin, caught at Route 5, Dusty Bowl, Giant''s Mirror, Stony Wilderness Axew''s Eye, Bridge Field, Dappled Grove, Giant''s Mirror, Rolling Fields, Stony Wilderness (Max Raid Battle) Axew''s Eye, Bridge Field, Dappled Grove, Giant''s Mirror, Stony Wilderness (Max Raid Battle) Dappled Grove (Max Raid Battle) (Gigantamax Factor)', 42, 1, 3, 29, 1, 1), +(843, 'Appletun', NULL, true, 'Galar', ARRAY['Shield'], NULL, NULL, 42, 1, 4, 29, 1, 2), +(844, 'Silicobra', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 42, 1, 5, 29, 1, 3), +(845, 'Sandaconda', NULL, true, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 42, 1, 6, 29, 1, 4), +(846, 'Cramorant', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 42, 2, 1, 29, 1, 5), +(847, 'Arrokuda', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 42, 2, 2, 29, 1, 6), +(848, 'Barraskewda', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 42, 2, 3, 29, 2, 1), +(849, 'Toxel', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 42, 2, 4, 29, 2, 2), +(849, 'Toxtricity', 'Amped', true, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 42, 2, 5, 29, 2, 3), +(850, 'Toxtricity', 'Low-key', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 42, 2, 6, null, null, null), +(851, 'Sizzlipede', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 42, 3, 1, 29, 2, 4), +(852, 'Centiskorch', NULL, true, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 42, 3, 2, 29, 2, 5), +(853, 'Clobbopus', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 42, 3, 3, 29, 2, 6), +(854, 'Grapploct', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 42, 3, 4, 29, 3, 1), +(854, 'Sinistea', 'Phony', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 42, 3, 5, 29, 3, 2), +(855, 'Sinistea', 'Antique', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 42, 3, 6, null, null, null), +(855, 'Polteageist', 'Phony', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 42, 4, 1, 29, 3, 3), +(856, 'Polteageist', 'Antique', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 42, 4, 2, null, null, null), +(857, 'Hatenna', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 42, 4, 3, 29, 3, 4), +(858, 'Hattrem', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 42, 4, 4, 29, 3, 5), +(859, 'Hatterene', NULL, true, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 42, 4, 5, 29, 3, 6), +(860, 'Impidimp', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 42, 4, 6, 29, 4, 1), +(861, 'Morgrem', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, '32', 42, 5, 1, 29, 4, 2), +(862, 'Grimmsnarl', NULL, true, 'Galar', ARRAY['Sword', 'Shield'], NULL, '42', 42, 5, 2, 29, 4, 3), +(863, 'Obstagoon', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, 'Evolves from Galarian Linoone at level 35 at night', 42, 5, 3, 29, 4, 4), +(864, 'Perrserker', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, 'Evolves from Galarian Meowth at level 28', 42, 5, 4, 29, 4, 5), +(865, 'Cursola', NULL, false, 'Galar', ARRAY['Shield'], NULL, NULL, 42, 5, 5, 29, 4, 6), +(866, 'Sirfetch’d', NULL, false, 'Galar', ARRAY['Sword'], NULL, 'Evolves from Galarian Farfetch''d after landing three critical hits in a single battle.', 42, 5, 6, 29, 5, 1), +(867, 'Mr. Rime', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 43, 1, 1, 29, 5, 2), +(868, 'Runerigus', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 43, 1, 2, 29, 5, 3), +(869, 'Milcery', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, 'Route 4, Bridge Field, Giant''s Mirror Bridge Field, Lake of Outrage (Max Raid Battle)', 43, 1, 3, 29, 5, 4), +(869, 'Alcremie', 'Vanilla Strawberry', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, 'One must be Gigantamaxed', 43, 1, 4, 29, 5, 5), +(869, 'Alcremie', 'Vanilla Berry', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, 'Can obtain Star and Ribbon Sweets via Cram-o-matic', 43, 1, 5, null, null, null), +(869, 'Alcremie', 'Vanilla Love', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 43, 1, 6, null, null, null), +(869, 'Alcremie', 'Vanilla Flower', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 43, 2, 1, null, null, null), +(869, 'Alcremie', 'Vanilla Clover', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 43, 2, 2, null, null, null), +(869, 'Alcremie', 'Vanilla Star', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 43, 2, 3, null, null, null), +(869, 'Alcremie', 'Vanilla Ribbon', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 43, 2, 4, null, null, null), +(869, 'Alcremie', 'Ruby Cream Strawberry', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 43, 2, 5, null, null, null), +(869, 'Alcremie', 'Ruby Cream Berry', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 43, 2, 6, null, null, null), +(869, 'Alcremie', 'Ruby Cream Love', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 43, 3, 1, null, null, null), +(869, 'Alcremie', 'Ruby Cream Flower', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 43, 3, 2, null, null, null), +(869, 'Alcremie', 'Ruby Cream Clover', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 43, 3, 3, null, null, null), +(869, 'Alcremie', 'Ruby Cream Star', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 43, 3, 4, null, null, null), +(869, 'Alcremie', 'Ruby Cream Ribbon', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 43, 3, 5, null, null, null), +(869, 'Alcremie', 'Matcha Strawberyy', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 43, 3, 6, null, null, null), +(869, 'Alcremie', 'Mactha Berry', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 43, 4, 1, null, null, null), +(869, 'Alcremie', 'Matcha Love', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 43, 4, 2, null, null, null), +(869, 'Alcremie', 'Matcha Flower', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 43, 4, 3, null, null, null), +(869, 'Alcremie', 'Matcha Clover', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 43, 4, 4, null, null, null), +(869, 'Alcremie', 'Matcha Star', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 43, 4, 5, null, null, null), +(869, 'Alcremie', 'Matcha Ribbon', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 43, 4, 6, null, null, null), +(869, 'Alcremie', 'Mint Strawberry', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 43, 5, 1, null, null, null), +(869, 'Alcremie', 'Mint Berry', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 43, 5, 2, null, null, null), +(869, 'Alcremie', 'Mint Love', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 43, 5, 3, null, null, null), +(869, 'Alcremie', 'Mint Flower', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 43, 5, 4, null, null, null), +(869, 'Alcremie', 'Mint Clover', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 43, 5, 5, null, null, null), +(869, 'Alcremie', 'Mint Star', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 43, 5, 6, null, null, null), +(869, 'Alcremie', 'Mint Ribbon', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 44, 1, 1, null, null, null), +(869, 'Alcremie', 'Lemon Strawberry', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 44, 1, 2, null, null, null), +(869, 'Alcremie', 'Lemon Berry', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 44, 1, 3, null, null, null), +(869, 'Alcremie', 'Lemon Love', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 44, 1, 4, null, null, null), +(869, 'Alcremie', 'Lemon Flower', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 44, 1, 5, null, null, null), +(869, 'Alcremie', 'Lemon Clover', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 44, 1, 6, null, null, null), +(869, 'Alcremie', 'Lemon Star', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 44, 2, 1, null, null, null), +(869, 'Alcremie', 'Lemon Ribbon', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 44, 2, 2, null, null, null), +(869, 'Alcremie', 'Salted Strawberry', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 44, 2, 3, null, null, null), +(869, 'Alcremie', 'Salted Berry', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 44, 2, 4, null, null, null), +(869, 'Alcremie', 'Salted Love', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 44, 2, 5, null, null, null), +(869, 'Alcremie', 'Salted Flower', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 44, 2, 6, null, null, null), +(869, 'Alcremie', 'Salted Clover', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 44, 3, 1, null, null, null), +(869, 'Alcremie', 'Salted Star', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 44, 3, 2, null, null, null), +(869, 'Alcremie', 'Salted Ribbon', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 44, 3, 3, null, null, null), +(869, 'Alcremie', 'Ruby Swirl Strawberry', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 44, 3, 4, null, null, null), +(869, 'Alcremie', 'Ruby Swirl Berry', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 44, 3, 5, null, null, null), +(869, 'Alcremie', 'Ruby Swirl Love', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 44, 3, 6, null, null, null), +(869, 'Alcremie', 'Ruby Swirl Flower', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 44, 4, 1, null, null, null), +(869, 'Alcremie', 'Ruby Swirl Clover', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 44, 4, 2, null, null, null), +(869, 'Alcremie', 'Ruby Swirl Star', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 44, 4, 3, null, null, null), +(869, 'Alcremie', 'Ruby Swirl Ribbon', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 44, 4, 4, null, null, null), +(869, 'Alcremie', 'Caramel Strawberry', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 44, 4, 5, null, null, null), +(869, 'Alcremie', 'Caramel Berry', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 44, 4, 6, null, null, null), +(869, 'Alcremie', 'Caramel Love', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 44, 5, 1, null, null, null), +(869, 'Alcremie', 'Caramel Flower', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 44, 5, 2, null, null, null), +(869, 'Alcremie', 'Caramel Clover', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 44, 5, 3, null, null, null), +(869, 'Alcremie', 'Caramel Star', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 44, 5, 4, null, null, null), +(869, 'Alcremie', 'Caramel Ribbon', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 44, 5, 5, null, null, null), +(869, 'Alcremie', 'Rainbow Strawberry', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 44, 5, 6, null, null, null), +(869, 'Alcremie', 'Rainbow Berry', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 45, 1, 1, null, null, null), +(869, 'Alcremie', 'Rainbow Love', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 45, 1, 2, null, null, null), +(869, 'Alcremie', 'Rainbow Flower', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 45, 1, 3, null, null, null), +(869, 'Alcremie', 'Rainbow Clover', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 45, 1, 4, null, null, null), +(869, 'Alcremie', 'Rainbow Star', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 45, 1, 5, null, null, null), +(869, 'Alcremie', 'Rainbow Ribbon', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 45, 1, 6, null, null, null), +(870, 'Falinks', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 45, 2, 1, 29, 5, 6), +(871, 'Pincurchin', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 45, 2, 2, 30, 1, 1), +(872, 'Snom', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 45, 2, 3, 30, 1, 2), +(873, 'Frosmoth', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 45, 2, 4, 30, 1, 3), +(874, 'Stonjourner', NULL, false, 'Galar', ARRAY['Sword'], NULL, 'Route 10, Lake of Outrage Giant''s Seat, Rolling Fields, Stony Wilderness (Max Raid Battle)', 45, 2, 5, 30, 1, 4), +(875, 'Eiscue', NULL, false, 'Galar', ARRAY['Shield'], NULL, NULL, 45, 2, 6, 30, 1, 5), +(876, 'Indeedee', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, 'Version exclusive in wild, but eggs can be either gender', 45, 3, 1, 30, 1, 6), +(876, 'Indeedee', 'Female', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 45, 3, 2, null, null, null), +(877, 'Morpeko', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 45, 3, 3, 30, 2, 1), +(878, 'Cufant', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 45, 3, 4, 30, 2, 2), +(879, 'Copperajah', NULL, true, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 45, 3, 5, 30, 2, 3), +(880, 'Dracozolt', 'Bird and Drake', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 45, 3, 6, 30, 2, 4), +(881, 'Arctozolt', 'Bird and Dino', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 45, 4, 1, 30, 2, 5), +(882, 'Dracovish', 'Fish and Drake', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 45, 4, 2, 30, 2, 6), +(883, 'Arctovish', 'Fish and Dino', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 45, 4, 3, 30, 3, 1), +(884, 'Duraludon', NULL, true, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 45, 4, 4, 30, 3, 2), +(885, 'Dreepy', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 45, 4, 5, 30, 3, 3), +(886, 'Drakloak', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 45, 4, 6, 30, 3, 4), +(887, 'Dragapult', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 45, 5, 1, 30, 3, 5), +(888, 'Zacian', NULL, false, 'Galar', ARRAY['Sword'], NULL, 'Tower Summit (Only one)', 45, 5, 2, 30, 3, 6), +(889, 'Zamazenta', NULL, false, 'Galar', ARRAY['Shield'], NULL, NULL, 45, 5, 3, 30, 4, 1), +(890, 'Eternatus', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 45, 5, 4, 30, 4, 2), +(891, 'Kubfu', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 45, 5, 5, 30, 4, 3), +(892, 'Urshifu', 'Single', true, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 45, 5, 6, 30, 4, 4), +(892, 'Urshifu', 'Rapid', true, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 46, 1, 1, null, null, null), +(893, 'Zarude', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, 'Event (unobtainable at time of writing) - maybe possible in pkhex?', 46, 1, 2, 30, 4, 5), +(893, 'Zarude', 'Dada', false, 'Galar', ARRAY['Sword', 'Shield'], NULL, 'Event (unobtainable at time of writing) - maybe possible in pkhex?', 46, 1, 3, null, null, null), +(894, 'Regieleki', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 46, 1, 4, 30, 4, 6), +(895, 'Regidrago', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 46, 1, 5, 30, 5, 1), +(896, 'Glastrier', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 46, 1, 6, 30, 5, 2), +(897, 'Spectrier', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 46, 2, 1, 30, 5, 3), +(898, 'Calyrex', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], NULL, NULL, 46, 2, 2, 30, 5, 4), +(899, 'Wyrdeer', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], 'Hisui', 'Evolves from Stantler after using Psyshield Bash in the agile style at least 20 times.', 46, 2, 3, 30, 5, 5), +(900, 'Kleavor', NULL, false, 'Kanto', ARRAY['Red', 'Yellow', 'LG: Pikachu'], 'Hisui', 'Evolves from Scyther when exposed to a Black Augurite.', 46, 2, 4, 30, 5, 6), +(901, 'Ursaluna', NULL, false, 'Johto', ARRAY['Gold', 'Crystal', 'HG', 'SS'], 'Hisui', 'It evolves from Ursaring when exposed to a Peat Block during a full moon.', 46, 2, 5, 31, 1, 1), +(901, 'Ursaluna', 'Bloodmoon', false, 'Paldea', ARRAY['Violet'], NULL, 'Expansion Pass: Timeless Woods (only one) (Bloodmoon)', 46, 2, 6, null, null, null), +(902, 'Basculegion', NULL, false, 'Hisui', ARRAY['PLA'], NULL, 'Evolves from white-striped Basculin when leveled up after losing at least 294 HP from recoil damage without fainting.', 46, 3, 1, 31, 1, 2), +(902, 'Basculegion', 'Female', false, 'Hisui', ARRAY['PLA'], NULL, 'Evolves from white-striped Basculin when leveled up after losing at least 294 HP from recoil damage without fainting.', 46, 3, 2, null, null, null), +(903, 'Sneasler', NULL, false, 'Hisui', ARRAY['PLA'], NULL, 'Evolves from Sneasel when leveled up while holding a Razor Claw during the day', 46, 3, 3, 31, 1, 3), +(904, 'Overqwil', NULL, false, 'Hisui', ARRAY['PLA'], NULL, 'Evolves from hisuian Qwilfish when leveled up while knowing Barb Barrage.', 46, 3, 4, 31, 1, 4), +(905, 'Enamorus', 'Therian Form', false, 'Hisui', ARRAY['PLA'], NULL, 'While it is not known to evolve into or from any Pokémon, Enamorus has a second form activated by using the Reveal Glass. Its original form, Incarnate Forme, will then become Therian Forme.', 46, 3, 5, null, null, null), +(905, 'Enamorus', 'Incarnate Form', false, 'Hisui', ARRAY['PLA'], NULL, 'Crimson Mirelands: Scarlet Bog (Only one) (Incarnate Forme)', 47, 1, 1, 31, 1, 5), +(906, 'Sprigatito', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 47, 1, 2, 31, 1, 6), +(907, 'Floragato', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 47, 1, 3, 31, 2, 1), +(908, 'Meowscarada', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 47, 1, 4, 31, 2, 2), +(909, 'Fuecoco', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 47, 1, 5, 31, 2, 3), +(910, 'Crocalor', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 47, 1, 6, 31, 2, 4), +(911, 'Skeledirge', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 47, 2, 1, 31, 2, 5), +(912, 'Quaxly', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 47, 2, 2, 31, 2, 6), +(913, 'Quaxwell', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 47, 2, 3, 31, 3, 1), +(914, 'Quaquaval', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 47, 2, 4, 31, 3, 2), +(915, 'Lechonk', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 47, 2, 5, 31, 3, 3), +(916, 'Oinkologne', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 47, 2, 6, 31, 3, 4), +(916, 'Oinkologne', 'Female', false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 47, 3, 1, null, null, null), +(917, 'Tarountula', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 47, 3, 2, 31, 3, 5), +(918, 'Spidops', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 47, 3, 3, 31, 3, 6), +(919, 'Nymble', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 47, 3, 4, 31, 4, 1), +(920, 'Lokix', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 47, 3, 5, 31, 4, 2), +(921, 'Pawmi', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 47, 3, 6, 31, 4, 3), +(922, 'Pawmo', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 47, 4, 1, 31, 4, 4), +(923, 'Pawmot', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 47, 4, 2, 31, 4, 5), +(924, 'Tandemaus', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 47, 4, 3, 31, 4, 6), +(925, 'Maushold', 'Family of 3', false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 47, 4, 4, 31, 5, 1), +(925, 'Maushold', 'Family of 4', false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 47, 4, 5, null, null, null), +(926, 'Fidough', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 47, 4, 6, 31, 5, 2), +(927, 'Dachsbun', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 47, 5, 1, 31, 5, 3), +(928, 'Smoliv', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 47, 5, 2, 31, 5, 4), +(929, 'Dolliv', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 47, 5, 3, 31, 5, 5), +(930, 'Arboliva', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 47, 5, 4, 31, 5, 6), +(931, 'Squawkabilly', 'Green', false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 47, 5, 5, null, null, null), +(931, 'Squawkabilly', 'Blue', false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 47, 5, 6, null, null, null), +(931, 'Squawkabilly', 'Yellow', false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 48, 1, 1, null, null, null), +(931, 'Squawkabilly', 'White', false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 48, 1, 2, null, null, null), +(932, 'Nacli', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 48, 1, 3, 32, 1, 1), +(933, 'Naclstack', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 48, 1, 4, 32, 1, 2), +(934, 'Garganacl', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 48, 1, 5, 32, 1, 3), +(935, 'Charcadet', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 48, 1, 6, 32, 1, 4), +(936, 'Armarouge', NULL, false, 'Paldea', ARRAY['Scarlet'], NULL, NULL, 48, 2, 1, 32, 1, 5), +(937, 'Ceruledge', NULL, false, 'Paldea', ARRAY['Violet'], NULL, NULL, 48, 2, 2, 32, 1, 6), +(938, 'Tadbulb', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 48, 2, 3, 32, 2, 1), +(939, 'Bellibolt', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 48, 2, 4, 32, 2, 2), +(940, 'Wattrel', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 48, 2, 5, 32, 2, 3), +(941, 'Kilowattrel', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 48, 2, 6, 32, 2, 4), +(942, 'Maschiff', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 48, 3, 1, 32, 2, 5), +(943, 'Mabosstiff', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 48, 3, 2, 32, 2, 6), +(944, 'Shroodle', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 48, 3, 3, 32, 3, 1), +(945, 'Grafaiai', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 48, 3, 4, 32, 3, 2), +(946, 'Bramblin', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 48, 3, 5, 32, 3, 3), +(947, 'Brambleghast', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 48, 3, 6, 32, 3, 4), +(948, 'Toedscool', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 48, 4, 1, 32, 3, 5), +(949, 'Toedscruel', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 48, 4, 2, 32, 3, 6), +(950, 'Klawf', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 48, 4, 3, 32, 4, 1), +(951, 'Capsakid', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 48, 4, 4, 32, 4, 2), +(952, 'Scovillain', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 48, 4, 5, 32, 4, 3), +(953, 'Rellor', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 48, 4, 6, 32, 4, 4), +(954, 'Rabsca', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 48, 5, 1, 32, 4, 5), +(955, 'Flittle', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 48, 5, 2, 32, 4, 6), +(956, 'Espathra', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 48, 5, 3, 32, 5, 1), +(957, 'Tinkatink', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 48, 5, 4, 32, 5, 2), +(958, 'Tinkatuff', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 48, 5, 5, 32, 5, 3), +(959, 'Tinkaton', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 48, 5, 6, 32, 5, 4), +(960, 'Wiglett', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 49, 1, 1, 32, 5, 5), +(961, 'Wugtrio', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 49, 1, 2, 32, 5, 6), +(962, 'Bombirdier', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 49, 1, 3, 33, 1, 1), +(963, 'Finizen', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 49, 1, 4, 33, 1, 2), +(964, 'Palafin', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 49, 1, 5, 33, 1, 3), +(965, 'Varoom', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 49, 1, 6, 33, 1, 4), +(966, 'Revavroom', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 49, 2, 1, 33, 1, 5), +(967, 'Cyclizar', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 49, 2, 2, 33, 1, 6), +(968, 'Orthworm', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 49, 2, 3, 33, 2, 1), +(969, 'Glimmet', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 49, 2, 4, 33, 2, 2), +(970, 'Glimmora', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 49, 2, 5, 33, 2, 3), +(971, 'Greavard', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 49, 2, 6, 33, 2, 4), +(972, 'Houndstone', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 49, 3, 1, 33, 2, 5), +(973, 'Flamigo', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 49, 3, 2, 33, 2, 6), +(974, 'Cetoddle', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 49, 3, 3, 33, 3, 1), +(975, 'Cetitan', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 49, 3, 4, 33, 3, 2), +(976, 'Veluza', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 49, 3, 5, 33, 3, 3), +(977, 'Dondozo', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 49, 3, 6, 33, 3, 4), +(978, 'Tatsugiri', 'Curly', false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 49, 4, 1, 33, 3, 5), +(978, 'Tatsugiri', 'Droopy', false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 49, 4, 2, null, null, null), +(978, 'Tatsugiri', 'Stretchy', false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 49, 4, 3, null, null, null), +(979, 'Annihilape', NULL, false, 'Kanto', ARRAY['Red', 'Yellow', 'LG: Pikachu'], 'Paldea', NULL, 49, 4, 4, 33, 3, 6), +(980, 'Clodsire', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 49, 4, 5, 33, 4, 1), +(981, 'Farigiraf', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'HG', 'SS'], 'Paldea', 'It evolves from Girafarig when leveled up while knowing Twin Beam.', 49, 4, 6, 33, 4, 2), +(982, 'Dudunsparce', '2-Segment', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], 'Paldea', 'It evolves from Dunsparce when leveled up while knowing Hyper Drill. Dudunsparce has two separate forms: Two-Segment Form and Three-Segment Form. When Dunsparce evolves, it has a 1/100 chance of evolving into Three-Segment Form Dudunsparce.', 49, 5, 1, 33, 4, 3), +(982, 'Dudunsparce', '3-Segment', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HG', 'SS'], 'Paldea', 'It evolves from Dunsparce when leveled up while knowing Hyper Drill. Dudunsparce has two separate forms: Two-Segment Form and Three-Segment Form. When Dunsparce evolves, it has a 1/100 chance of evolving into Three-Segment Form Dudunsparce.', 49, 5, 2, null, null, null), +(983, 'Kingambit', NULL, false, 'Unova', ARRAY['Black', 'White', 'Black2', 'White2'], 'Paldea', 'Evolves from Bisharp upon leveling up after defeating three Bisharp that hold a Leader''s Crest. (Scarlet/Violet only)', 49, 5, 3, 33, 4, 4), +(984, 'Great Tusk', NULL, false, 'Paldea', ARRAY['Scarlet'], NULL, NULL, 49, 5, 4, 33, 4, 5), +(985, 'Scream Tail', NULL, false, 'Paldea', ARRAY['Scarlet'], NULL, NULL, 49, 5, 5, 33, 4, 6), +(986, 'Brute Bonnet', NULL, false, 'Paldea', ARRAY['Scarlet'], NULL, NULL, 49, 5, 6, 33, 5, 1), +(987, 'Flutter Mane', NULL, false, 'Paldea', ARRAY['Scarlet'], NULL, NULL, 50, 1, 1, 33, 5, 2), +(988, 'Slither Wing', NULL, false, 'Paldea', ARRAY['Scarlet'], NULL, NULL, 50, 1, 2, 33, 5, 3), +(989, 'Sandy Shocks', NULL, false, 'Paldea', ARRAY['Scarlet'], NULL, NULL, 50, 1, 3, 33, 5, 4), +(990, 'Iron Treads', NULL, false, 'Paldea', ARRAY['Violet'], NULL, NULL, 50, 1, 4, 33, 5, 5), +(991, 'Iron Bundle', NULL, false, 'Paldea', ARRAY['Violet'], NULL, NULL, 50, 1, 5, 33, 5, 6), +(992, 'Iron Hands', NULL, false, 'Paldea', ARRAY['Violet'], NULL, NULL, 50, 1, 6, 34, 1, 1), +(993, 'Iron Jugulis', NULL, false, 'Paldea', ARRAY['Violet'], NULL, NULL, 50, 2, 1, 34, 1, 2), +(994, 'Iron Moth', NULL, false, 'Paldea', ARRAY['Violet'], NULL, NULL, 50, 2, 2, 34, 1, 3), +(995, 'Iron Thorns', NULL, false, 'Paldea', ARRAY['Violet'], NULL, NULL, 50, 2, 3, 34, 1, 4), +(996, 'Frigibax', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 50, 2, 4, 34, 1, 5), +(997, 'Arctibax', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 50, 2, 5, 34, 1, 6), +(998, 'Baxcalibur', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 50, 2, 6, 34, 2, 1), +(999, 'Gimmighoul', 'Box Form', false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 50, 3, 1, 34, 2, 2), +(1000, 'Gimmighoul', 'Roaming Form', false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 50, 3, 2, null, null, null), +(1000, 'Gholdengo', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 50, 3, 3, 34, 2, 3), +(1001, 'Wo-Chien', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 50, 3, 4, 34, 2, 4), +(1002, 'Chien-Pao', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 50, 3, 5, 34, 2, 5), +(1003, 'Ting-Lu', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 50, 3, 6, 34, 2, 6), +(1004, 'Chi-Yu', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 50, 4, 1, 34, 3, 1), +(1005, 'Roaring Moon', NULL, false, 'Paldea', ARRAY['Scarlet'], NULL, NULL, 50, 4, 2, 34, 3, 2), +(1006, 'Iron Valiant', NULL, false, 'Paldea', ARRAY['Violet'], NULL, NULL, 50, 4, 3, 34, 3, 3), +(1007, 'Koraidon', NULL, false, 'Paldea', ARRAY['Scarlet'], NULL, NULL, 50, 4, 4, 34, 3, 4), +(1008, 'Miraidon', NULL, false, 'Paldea', ARRAY['Violet'], NULL, NULL, 50, 4, 5, 34, 3, 5), +(1009, 'Walking Wake', NULL, false, 'Paldea', ARRAY['Scarlet'], NULL, NULL, 50, 4, 6, 34, 3, 6), +(1010, 'Iron Leaves', NULL, false, 'Paldea', ARRAY['Violet'], NULL, NULL, 50, 5, 1, 34, 4, 1), +(1011, 'Dipplin', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 50, 5, 2, 34, 4, 2), +(1012, 'Poltchageist', 'Phony', false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 50, 5, 3, 34, 4, 3), +(1012, 'Poltchageist', 'Antique', false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 50, 5, 4, null, null, null), +(1013, 'Sinistcha', 'Phony', false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 50, 5, 5, 34, 4, 4), +(1013, 'Sinistcha', 'Antique', false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 50, 5, 6, null, null, null), +(1014, 'Okidogi', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 51, 1, 1, 34, 4, 5), +(1015, 'Munkidori', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 51, 1, 2, 34, 4, 6), +(1016, 'Fezandipiti', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 51, 1, 3, 34, 5, 1), +(1017, 'Ogrepon', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 51, 1, 4, 34, 5, 2), +(1018, 'Archaludon', NULL, false, 'Galar', ARRAY['Sword', 'Shield'], 'Paldea', 'Expansion Pass: It evolves from Duraludon when exposed to a hunk of Metal Alloy.', 51, 1, 5, 34, 5, 3), +(1019, 'Hydrapple', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 51, 1, 6, 34, 5, 4), +(1020, 'Gouging Fire', NULL, false, 'Paldea', ARRAY['Scarlet'], NULL, NULL, 51, 2, 1, 34, 5, 5), +(1021, 'Raging Bolt', NULL, false, 'Paldea', ARRAY['Scarlet'], NULL, NULL, 51, 2, 2, 34, 5, 6), +(1022, 'Iron Boulder', NULL, false, 'Paldea', ARRAY['Violet'], NULL, NULL, 51, 2, 3, 35, 1, 1), +(1023, 'Iron Crown', NULL, false, 'Paldea', ARRAY['Violet'], NULL, NULL, 51, 2, 4, 35, 1, 2), +(1024, 'Terapagos', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 51, 2, 5, 35, 1, 3), +(1025, 'Pecharunt', NULL, false, 'Paldea', ARRAY['Scarlet', 'Violet'], NULL, NULL, 51, 2, 6, 35, 1, 4); + +-- Update metadata +UPDATE pokedex_metadata +SET value = '{"count": 1390}', updated_at = NOW() +WHERE key = 'total_pokemon'; + +-- Add success message +SELECT 'Successfully loaded 1390 Pokemon entries' as message; diff --git a/supabase/seed.sql b/supabase/seed.sql new file mode 100644 index 0000000..3c3d94f --- /dev/null +++ b/supabase/seed.sql @@ -0,0 +1,14 @@ +-- Initial seed data for local development +-- This file is referenced in config.toml and will be loaded during db reset + +-- Note: RLS is already enabled on auth.users by default in Supabase +-- No need to modify system tables here + +-- Add any application-specific seed data here +-- For now, this file is minimal since we use MongoDB for app data + +-- Example: If we had a profiles table, we could seed it here +-- INSERT INTO profiles (id, username) VALUES +-- ('test-user-id', 'testuser'); + +SELECT 'Local Supabase setup complete' as message; \ No newline at end of file